Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816 6817 6818 6819 6820 6821 6822 6823 6824 6825 6826 6827 6828 6829 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 6874 6875 6876 6877 6878 6879 6880 6881 6882 6883 6884 6885 6886 6887 6888 6889 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 6905 6906 6907 6908 6909 6910 6911 6912 6913 6914 6915 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 6934 6935 6936 6937 6938 6939 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 6986 6987 6988 6989 6990 6991 6992 6993 6994 6995 6996 6997 6998 6999 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 7014 7015 7016 7017 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 7071 7072 7073 7074 7075 7076 7077 7078 7079 7080 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 7091 7092 7093 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216 7217 7218 7219 7220 7221 7222 7223 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 7261 7262 7263 7264 7265 7266 7267 7268 7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 7363 7364 7365 7366 7367 7368 7369 7370 7371 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 7454 7455 7456 7457 7458 7459 7460 7461 7462 7463 7464 7465 7466 7467 7468 7469 7470 7471 7472 7473 7474 7475 7476 7477 7478 7479 7480 7481 7482 7483 7484 7485 7486 7487 7488 7489 7490 7491 7492 7493 7494 7495 7496 7497 7498 7499 7500 7501 7502 7503 7504 7505 7506 7507 7508 7509 7510 7511 7512 7513 7514 7515 7516 7517 7518 7519 7520 7521 7522 7523 7524 7525 7526 7527 7528 7529 7530 7531 7532 7533 7534 7535 7536 7537 7538 7539 7540 7541 7542 7543 7544 7545 7546 7547 7548 7549 7550 7551 7552 7553 7554 7555 7556 7557 7558 7559 7560 7561 7562 7563 7564 7565 7566 7567 7568 7569 7570 7571 7572 7573 7574 7575 7576 7577 7578 7579 7580 7581 7582 7583 7584 7585 7586 7587 7588 7589 7590 7591 7592 7593 7594 7595 7596 7597 7598 7599 7600 7601 7602 7603 7604 7605 7606 7607 7608 7609 7610 7611 7612 7613 7614 7615 7616 7617 7618 7619 7620 7621 7622 7623 7624 7625 7626 7627 7628 7629 7630 7631 7632 7633 7634 7635 7636 7637 7638 7639 7640 7641 7642 7643 7644 7645 7646 7647 7648 7649 7650 7651 7652 7653 7654 7655 7656 7657 7658 7659 7660 7661 7662 7663 7664 7665 7666 7667 7668 7669 7670 7671 7672 7673 7674 7675 7676 7677 7678 7679 7680 7681 7682 7683 7684 7685 7686 7687 7688 7689 7690 7691 7692 7693 7694 7695 7696 7697 7698 7699 7700 7701 7702 7703 7704 7705 7706 7707 7708 7709 7710 7711 7712 7713 7714 7715 7716 7717 7718 7719 7720 7721 7722 7723 7724 7725 7726 7727 7728 7729 7730 7731 7732 7733 7734 7735 7736 7737 7738 7739 7740 7741 7742 7743 7744 7745 7746 7747 7748 7749 7750 7751 7752 7753 7754 7755 7756 7757 7758 7759 7760 7761 7762 7763 7764 7765 7766 7767 7768 7769 7770 7771 7772 7773 7774 7775 7776 7777 7778 7779 7780 7781 7782 7783 7784 7785 7786 7787 7788 7789 7790 7791 7792 7793 7794 7795 7796 7797 7798 7799 7800 7801 7802 7803 7804 7805 7806 7807 7808 7809 7810 7811 7812 7813 7814 7815 7816 7817 7818 7819 7820 7821 7822 7823 7824 7825 7826 7827 7828 7829 7830 7831 7832 7833 7834 7835 7836 7837 7838 7839 7840 7841 7842 7843 7844 7845 7846 7847 7848 7849 7850 7851 7852 7853 7854 7855 7856 7857 7858 7859 7860 7861 7862 7863 7864 7865 7866 7867 7868 7869 7870 7871 7872 7873 7874 7875 7876 7877 7878 7879 7880 7881 7882 7883 7884 7885 7886 7887 7888 7889 7890 7891 7892 7893 7894 7895 7896 7897 7898 7899 7900 7901 7902 7903 7904 7905 7906 7907 7908 7909 7910 7911 7912 7913 7914 7915 7916 7917 7918 7919 7920 7921 7922 7923 7924 7925 7926 7927 7928 7929 7930 7931 7932 7933 7934 7935 7936 7937 7938 7939 7940 7941 7942 7943 7944 7945 7946 7947 7948 7949 7950 7951 7952 7953 7954 7955 7956 7957 7958 7959 7960 7961 7962 7963 7964 7965 7966 7967 7968 7969 7970 7971 7972 7973 7974 7975 7976 7977 7978 7979 7980 7981 7982 7983 7984 7985 7986 7987 7988 7989 7990 7991 7992 7993 7994 7995 7996 7997 7998 7999 8000 8001 8002 8003 8004 8005 8006 8007 8008 8009 8010 8011 8012 8013 8014 8015 8016 8017 8018 8019 8020 8021 8022 8023 8024 8025 8026 8027 8028 8029 8030 8031 8032 8033 8034 8035 8036 8037 8038 8039 8040 8041 8042 8043 8044 8045 8046 8047 8048 8049 8050 8051 8052 8053 8054 8055 8056 8057 8058 8059 8060 8061 8062 8063 8064 8065 8066 8067 8068 8069 8070 8071 8072 8073 8074 8075 8076 8077 8078 8079 8080 8081 8082 8083 8084 8085 8086 8087 8088 8089 8090 8091 8092 8093 8094 8095 8096 8097 8098 8099 8100 8101 8102 8103 8104 8105 8106 8107 8108 8109 8110 8111 8112 8113 8114 8115 8116 8117 8118 8119 8120 8121 8122 8123 8124 8125 8126 8127 8128 8129 8130 8131 8132 8133 8134 8135 8136 8137 8138 8139 8140 8141 8142 8143 8144 8145 8146 8147 8148 8149 8150 8151 8152 8153 8154 8155 8156 8157 8158 8159 8160 8161 8162 8163 8164 8165 8166 8167 8168 8169 8170 8171 8172 8173 8174 8175 8176 8177 8178 8179 8180 8181 8182 8183 8184 8185 8186 8187 8188 8189 8190 8191 8192 8193 8194 8195 8196 8197 8198 8199 8200 8201 8202 8203 8204 8205 8206 8207 8208 8209 8210 8211 8212 8213 8214 8215 8216 8217 8218 8219 8220 8221 8222 8223 8224 8225 8226 8227 8228 8229 8230 8231 8232 8233 8234 8235 8236 8237 8238 8239 8240 8241 8242 8243 8244 8245 8246 8247 8248 8249 8250 8251 8252 8253 8254 8255 8256 8257 8258 8259 8260 8261 8262 8263 8264 8265 8266 8267 8268 8269 8270 8271 8272 8273 8274 8275 8276 8277 8278 8279 8280 8281 8282 8283 8284 8285 8286 8287 8288 8289 8290 8291 8292 8293 8294 8295 8296 8297 8298 8299 8300 8301 8302 8303 8304 8305 8306 8307 8308 8309 8310 8311 8312 8313 8314 8315 8316 8317 8318 8319 8320 8321 8322 8323 8324 8325 8326 8327 8328 8329 8330 8331 8332 8333 8334 8335 8336 8337 8338 8339 8340 8341 8342 8343 8344 8345 8346 8347 8348 8349 8350 8351 8352 8353 8354 8355 8356 8357 8358 8359 8360 8361 8362 8363 8364 8365 8366 8367 8368 8369 8370 8371 8372 8373 8374 8375 8376 8377 8378 8379 8380 8381 8382 8383 8384 8385 8386 8387 8388 8389 8390 8391 8392 8393 8394 8395 8396 8397 8398 8399 8400 8401 8402 8403 8404 8405 8406 8407 8408 8409 8410 8411 8412 8413 8414 8415 8416 8417 8418 8419 8420 8421 8422 8423 8424 8425 8426 8427 8428 8429 8430 8431 8432 8433 8434 8435 8436 8437 8438 8439 8440 8441 8442 8443 8444 8445 8446 8447 8448 8449 8450 8451 8452 8453 8454 8455 8456 8457 8458 8459 8460 8461 8462 8463 8464 8465 8466 8467 8468 8469 8470 8471 8472 8473 8474 8475 8476 8477 8478 8479 8480 8481 8482 8483 8484 8485 8486 8487 8488 8489 8490 8491 8492 8493 8494 8495 8496 8497 8498 8499 8500 8501 8502 8503 8504 8505 8506 8507 8508 8509 8510 8511 8512 8513 8514 8515 8516 8517 8518 8519 8520 8521 8522 8523 8524 8525 8526 8527 8528 8529 8530 8531 8532 8533 8534 8535 8536 8537 8538 8539 8540 8541 8542 8543 8544 8545 8546 8547 8548 8549 8550 8551 8552 8553 8554 8555 8556 8557 8558 8559 8560 8561 8562 8563 8564 8565 8566 8567 8568 8569 8570 8571 8572 8573 8574 8575 8576 8577 8578 8579 8580 8581 8582 8583 8584 8585 8586 8587 8588 8589 8590 8591 8592 8593 8594 8595 8596 8597 8598 8599 8600 8601 8602 8603 8604 8605 8606 8607 8608 8609 8610 8611 8612 8613 8614 8615 8616 8617 8618 8619 8620 8621 8622 8623 8624 8625 8626 8627 8628 8629 8630 8631 8632 8633 8634 8635 8636 8637 8638 8639 8640 8641 8642 8643 8644 8645 8646 8647 8648 8649 8650 8651 8652 8653 8654 8655 8656 8657 8658 8659 8660 8661 8662 8663 8664 8665 8666 8667 8668 8669 8670 8671 8672 8673 8674 8675 8676 8677 8678 8679 8680 8681 8682 8683 8684 8685 8686 8687 8688 8689 8690 8691 8692 8693 8694 8695 8696 8697 8698 8699 8700 8701 8702 8703 8704 8705 8706 8707 8708 8709 8710 8711 8712 8713 8714 8715 8716 8717 8718 8719 8720 8721 8722 8723 8724 8725 8726 8727 8728 8729 8730 8731 8732 8733 8734 8735 8736 8737 8738 8739 8740 8741 8742 8743 8744 8745 8746 8747 8748 8749 8750 8751 8752 8753 8754 8755 8756 8757 8758 8759 8760 8761 8762 8763 8764 8765 8766 8767 8768 8769 8770 8771 8772 8773 8774 8775 8776 8777 8778 8779 8780 8781 8782 8783 8784 8785 8786 8787 8788 8789 8790 8791 8792 8793 8794 8795 8796 8797 8798 8799 8800 8801 8802 8803 8804 8805 8806 8807 8808 8809 8810 8811 8812 8813 8814 8815 8816 8817 8818 8819 8820 8821 8822 8823 8824 8825 8826 8827 8828 8829 8830 8831 8832 8833 8834 8835 8836 8837 8838 8839 8840 8841 8842 8843 8844 8845 8846 8847 8848 8849 8850 8851 8852 8853 8854 8855 8856 8857 8858 8859 8860 8861 8862 8863 8864 8865 8866 8867 8868 8869 8870 8871 8872 8873 8874 8875 8876 8877 8878 8879 8880 8881 8882 8883 8884 8885 8886 8887 8888 8889 8890 8891 8892 8893 8894 8895 8896 8897 8898 8899 8900 8901 8902 8903 8904 8905 8906 8907 8908 8909 8910 8911 8912 8913 8914 8915 8916 8917 8918 8919 8920 8921 8922 8923 8924 8925 8926 8927 8928 8929 8930 8931 8932 8933 8934 8935 8936 8937 8938 8939 8940 8941 8942 8943 8944 8945 8946 8947 8948 8949 8950 8951 8952 8953 8954 8955 8956 8957 8958 8959 8960 8961 8962 8963 8964 8965 8966 8967 8968 8969 8970 8971 8972 8973 8974 8975 8976 8977 8978 8979 8980 8981 8982 8983 8984 8985 8986 8987 8988 8989 8990 8991 8992 8993 8994 8995 8996 8997 8998 8999 9000 9001 9002 9003 9004 9005 9006 9007 9008 9009 9010 9011 9012 9013 9014 9015 9016 9017 9018 9019 9020 9021 9022 9023 9024 9025 9026 9027 9028 9029 9030 9031 9032 9033 9034 9035 9036 9037 9038 9039 9040 9041 9042 9043 9044 9045 9046 9047 9048 9049 9050 9051 9052 9053 9054 9055 9056 9057 9058 9059 9060 9061 9062 9063 9064 9065 9066 9067 9068 9069 9070 9071 9072 9073 9074 9075 9076 9077 9078 9079 9080 9081 9082 9083 9084 9085 9086 9087 9088 9089 9090 9091 9092 9093 9094 9095 9096 9097 9098 9099 9100 9101 9102 9103 9104 9105 9106 9107 9108 9109 9110 9111 9112 9113 9114 9115 9116 9117 9118 9119 9120 9121 9122 9123 9124 9125 9126 9127 9128 9129 9130 9131 9132 9133 9134 9135 9136 9137 9138 9139 9140 9141 9142 9143 9144 9145 9146 9147 9148 9149 9150 9151 9152 9153 9154 9155 9156 9157 9158 9159 9160 9161 9162 9163 9164 9165 9166 9167 9168 9169 9170 9171 9172 9173 9174 9175 9176 9177 9178 9179 9180 9181 9182 9183 9184 9185 9186 9187 9188 9189 9190 9191 9192 9193 9194 9195 9196 9197 9198 9199 9200 9201 9202 9203 9204 9205 9206 9207 9208 9209 9210 9211 9212 9213 9214 9215 9216 9217 9218 9219 9220 9221 9222 9223 9224 9225 9226 9227 9228 9229 9230 9231 9232 9233 9234 9235 9236 9237 9238 9239 9240 9241 9242 9243 9244 9245 9246 9247 9248 9249 9250 9251 9252 9253 9254 9255 9256 9257 9258 9259 9260 9261 9262 9263 9264 9265 9266 9267 9268 9269 9270 9271 9272 9273 9274 9275 9276 9277 9278 9279 9280 9281 9282 9283 9284 9285 9286 9287 9288 9289 9290 9291 9292 9293 9294 9295 9296 9297 9298 9299 9300 9301 9302 9303 9304 9305 9306 9307 9308 9309 9310 9311 9312 9313 9314 9315 9316 9317 9318 9319 9320 9321 9322 9323 9324 9325 9326 9327 9328 9329 9330 9331 9332 9333 9334 9335 9336 9337 9338 9339 9340 9341 9342 9343 9344 9345 9346 9347 9348 9349 9350 9351 9352 9353 9354 9355 9356 9357 9358 9359 9360 9361 9362 9363 9364 9365 9366 9367 9368 9369 9370 9371 9372 9373 9374 9375 9376 9377 9378 9379 9380 9381 9382 9383 9384 9385 9386 9387 9388 9389 9390 9391 9392 9393 9394 9395 9396 9397 9398 9399 9400 9401 9402 9403 9404 9405 9406 9407 9408 9409 9410 9411 9412 9413 9414 9415 9416 9417 9418 9419 9420 9421 9422 9423 9424 9425 9426 9427 9428 9429 9430 9431 9432 9433 9434 9435 9436 9437 9438 9439 9440 9441 9442 9443 9444 9445 9446 9447 9448 9449 9450 9451 9452 9453 9454 9455 9456 9457 9458 9459 9460 9461 9462 9463 9464 9465 9466 9467 9468 9469 9470 9471 9472 9473 9474 9475 9476 9477 9478 9479 9480 9481 9482 9483 9484 9485 9486 9487 9488 9489 9490 9491 9492 9493 9494 9495 9496 9497 9498 9499 9500 9501 9502 9503 9504 9505 9506 9507 9508 9509 9510 9511 9512 9513 9514 9515 9516 9517 9518 9519 9520 9521 9522 9523 9524 9525 9526 9527 9528 9529 9530 9531 9532 9533 9534 9535 9536 9537 9538 9539 9540 9541 9542 9543 9544 9545 9546 9547 9548 9549 9550 9551 9552 9553 9554 9555 9556 9557 9558 9559 9560 9561 9562 9563 9564 9565 9566 9567 9568 9569 9570 9571 9572 9573 9574 9575 9576 9577 9578 9579 9580 9581 9582 9583 9584 9585 9586 9587 9588 9589 9590 9591 9592 9593 9594 9595 9596 9597 9598 9599 9600 9601 9602 9603 9604 9605 9606 9607 9608 9609 9610 9611 9612 9613 9614 9615 9616 9617 9618 9619 9620 9621 9622 9623 9624 9625 9626 9627 9628 9629 9630 9631 9632 9633 9634 9635 9636 9637 9638 9639 9640 9641 9642 9643 9644 9645 9646 9647 9648 9649 9650 9651 9652 9653 9654 9655 9656 9657 9658 9659 9660 9661 9662 9663 9664 9665 9666 9667 9668 9669 9670 9671 9672 9673 9674 9675 9676 9677 9678 9679 9680 9681 9682 9683 9684 9685 9686 9687 9688 9689 9690 9691 9692 9693 9694 9695 9696 9697 9698 9699 9700 9701 9702 9703 9704 9705 9706 9707 9708 9709 9710 9711 9712 9713 9714 9715 9716 9717 9718 9719 9720 9721 9722 9723 9724 9725 9726 9727 9728 9729 9730 9731 9732 9733 9734 9735 9736 9737 9738 9739 9740 9741 9742 9743 9744 9745 9746 9747 9748 9749 9750 9751 9752 9753 9754 9755 9756 9757 9758 9759 9760 9761 9762 9763 9764 9765 9766 9767 9768 9769 9770 9771 9772 9773 9774 9775 9776 9777 9778 9779 9780 9781 9782 9783 9784 9785 9786 9787 9788 9789 9790 9791 9792 9793 9794 9795 9796 9797 9798 9799 9800 9801 9802 9803 9804 9805 9806 9807 9808 9809 9810 9811 9812 9813 9814 9815 9816 9817 9818 9819 9820 9821 9822 9823 9824 9825 9826 9827 9828 9829 9830 9831 9832 9833 9834 9835 9836 9837 9838 9839 9840 9841 9842 9843 9844 9845 9846 9847 9848 9849 9850 9851 9852 9853 9854 9855 9856 9857 9858 9859 9860 9861 9862 9863 9864 9865 9866 9867 9868 9869 9870 9871 9872 9873 9874 9875 9876 9877 9878 9879 9880 9881 9882 9883 9884 9885 9886 9887 9888 9889 9890 9891 9892 9893 9894 9895 9896 9897 9898 9899 9900 9901 9902 9903 9904 9905 9906 9907 9908 9909 9910 9911 9912 9913 9914 9915 9916 9917 9918 9919 9920 9921 9922 9923 9924 9925 9926 9927 9928 9929 9930 9931 9932 9933 9934 9935 9936 9937 9938 9939 9940 9941 9942 9943 9944 9945 9946 9947 9948 9949 9950 9951 9952 9953 9954 9955 9956 9957 9958 9959 9960 9961 9962 9963 9964 9965 9966 9967 9968 9969 9970 9971 9972 9973 9974 9975 9976 9977 9978 9979 9980 9981 9982 9983 9984 9985 9986 9987 9988 9989 9990 9991 9992 9993 9994 9995 9996 9997 9998 9999 10000 10001 10002 10003 10004 10005 10006 10007 10008 10009 10010 10011 10012 10013 10014 10015 10016 10017 10018 10019 10020 10021 10022 10023 10024 10025 10026 10027 10028 10029 10030 10031 10032 10033 10034 10035 10036 10037 10038 10039 10040 10041 10042 10043 10044 10045 10046 10047 10048 10049 10050 10051 10052 10053 10054 10055 10056 10057 10058 10059 10060 10061 10062 10063 10064 10065 10066 10067 10068 10069 10070 10071 10072 10073 10074 10075 10076 10077 10078 10079 10080 10081 10082 10083 10084 10085 10086 10087 10088 10089 10090 10091 10092 10093 10094 10095 10096 10097 10098 10099 10100 10101 10102 10103 10104 10105 10106 10107 10108 10109 10110 10111 10112 10113 10114 10115 10116 10117 10118 10119 10120 10121 10122 10123 10124 10125 10126 10127 10128 10129 10130 10131 10132 10133 10134 10135 10136 10137 10138 10139 10140 10141 10142 10143 10144 10145 10146 10147 10148 10149 10150 10151 10152 10153 10154 10155 10156 10157 10158 10159 10160 10161 10162 10163 10164 10165 10166 10167 10168 10169 10170 10171 10172 10173 10174 10175 10176 10177 10178 10179 10180 10181 10182 10183 10184 10185 10186 10187 10188 10189 10190 10191 10192 10193 10194 10195 10196 10197 10198 10199 10200 10201 10202 10203 10204 10205 10206 10207 10208 10209 10210 10211 10212 10213 10214 10215 10216 10217 10218 10219 10220 10221 10222 10223 10224 10225 10226 10227 10228 10229 10230 10231 10232 10233 10234 10235 10236 10237 10238 10239 10240 10241 10242 10243 10244 10245 10246 10247 10248 10249 10250 10251 10252 10253 10254 10255 10256 10257 10258 10259 10260 10261 10262 10263 10264 10265 10266 10267 10268 10269 10270 10271 10272 10273 10274 10275 10276 10277 10278 10279 10280 10281 10282 10283 10284 10285 10286 10287 10288 10289 10290 10291 10292 10293 10294 10295 10296 10297 10298 10299 10300 10301 10302 10303 10304 10305 10306 10307 10308 10309 10310 10311 10312 10313 10314 10315 10316 10317 10318 10319 10320 10321 10322 10323 10324 10325 10326 10327 10328 10329 10330 10331 10332 10333 10334 10335 10336 10337 10338 10339 10340 10341 10342 10343 10344 10345 10346 10347 10348 10349 10350 10351 10352 10353 10354 10355 10356 10357 10358 10359 10360 10361 10362 10363 10364 10365 10366 10367 10368 10369 10370 10371 10372 10373 10374 10375 10376 10377 10378 10379 10380 10381 10382 10383 10384 10385 10386 10387 10388 10389 10390 10391 10392 10393 10394 10395 10396 10397 10398 10399 10400 10401 10402 10403 10404 10405 10406 10407 10408 10409 10410 10411 10412 10413 10414 10415 10416 10417 10418 10419 10420 10421 10422 10423 10424 10425 10426 10427 10428 10429 10430 10431 10432 10433 10434 10435 10436 10437 10438 10439 10440 10441 10442 10443 10444 10445 10446 10447 10448 10449 10450 10451 10452 10453 10454 10455 10456 10457 10458 10459 10460 10461 10462 10463 10464 10465 10466 10467 10468 10469 10470 10471 10472 10473 10474 10475 10476 10477 10478 10479 10480 10481 10482 10483 10484 10485 10486 10487 10488 10489 10490 10491 10492 10493 10494 10495 10496 10497 10498 10499 10500 10501 10502 10503 10504 10505 10506 10507 10508 10509 10510 10511 10512 10513 10514 10515 10516 10517 10518 10519 10520 10521 10522 10523 10524 10525 10526 10527 10528 10529 10530 10531 10532 10533 10534 10535 10536 10537 10538 10539 10540 10541 10542 10543 10544 10545 10546 10547 10548 10549 10550 10551 10552 10553 10554 10555 10556 10557 10558 10559 10560 10561 10562 10563 10564 10565 10566 10567 10568 10569 10570 10571 10572 10573 10574 10575 10576 10577 10578 10579 10580 10581 10582 10583 10584 10585 10586 10587 10588 10589 10590 10591 10592 10593 10594 10595 10596 10597 10598 10599 10600 10601 10602 10603 10604 10605 10606 10607 10608 10609 10610 10611 10612 10613 10614 10615 10616 10617 10618 10619 10620 10621 10622 10623 10624 10625 10626 10627 10628 10629 10630 10631 10632 10633 10634 10635 10636 10637 10638 10639 10640 10641 10642 10643 10644 10645 10646 10647 10648 10649 10650 10651 10652 10653 10654 10655 10656 10657 10658 10659 10660 10661 10662 10663 10664 10665 10666 10667 10668 10669 10670 10671 10672 10673 10674 10675 10676 10677 10678 10679 10680 10681 10682 10683 10684 10685 10686 10687 10688 10689 10690 10691 10692 10693 10694 10695 10696 10697 10698 10699 10700 10701 10702 10703 10704 10705 10706 10707 10708 10709 10710 10711 10712 10713 10714 10715 10716 10717 10718 10719 10720 10721 10722 10723 10724 10725 10726 10727 10728 10729 10730 10731 10732 10733 10734 10735 10736 10737 10738 10739 10740 10741 10742 10743 10744 10745 10746 10747 10748 10749 10750 10751 10752 10753 10754 10755 10756 10757 10758 10759 10760 10761 10762 10763 10764 10765 10766 10767 10768 10769 10770 10771 10772 10773 10774 10775 10776 10777 10778 10779 10780 10781 10782 10783 10784 10785 10786 10787 10788 10789 10790 10791 10792 10793 10794 10795 10796 10797 10798 10799 10800 10801 10802 10803 10804 10805 10806 10807 10808 10809 10810 10811 10812 10813 10814 10815 10816 10817 10818 10819 10820 10821 10822 10823 10824 10825 10826 10827 10828 10829 10830 10831 10832 10833 10834 10835 10836 10837 10838 10839 10840 10841 10842 10843 10844 10845 10846 10847 10848 10849 10850 10851 10852 10853 10854 10855 10856 10857 10858 10859 10860 10861 10862 10863 10864 10865 10866 10867 10868 10869 10870 10871 10872 10873 10874 10875 10876 10877 10878 10879 10880 10881 10882 10883 10884 10885 10886 10887 10888 10889 10890 10891 10892 10893 10894 10895 10896 10897 10898 10899 10900 10901 10902 10903 10904 10905 10906 10907 10908 10909 10910 10911 10912 10913 10914 10915 10916 10917 10918 10919 10920 10921 10922 10923 10924 10925 10926 10927 10928 10929 10930 10931 10932 10933 10934 10935 10936 10937 10938 10939 10940 10941 10942 10943 10944 10945 10946 10947 10948 10949 10950 10951 10952 10953 10954 10955 10956 10957 10958 10959 10960 10961 10962 10963 10964 10965 10966 10967 10968 10969 10970 10971 10972 10973 10974 10975 10976 10977 10978 10979 10980 10981 10982 10983 10984 10985 10986 10987 10988 10989 10990 10991 10992 10993 10994 10995 10996 10997 10998 10999 11000 11001 11002 11003 11004 11005 11006 11007 11008 11009 11010 11011 11012 11013 11014 11015 11016 11017 11018 11019 11020 11021 11022 11023 11024 11025 11026 11027 11028 11029 11030 11031 11032 11033 11034 11035 11036 11037 11038 11039 11040 11041 11042 11043 11044 11045 11046 11047 11048 11049 11050 11051 11052 11053 11054 11055 11056 11057 11058 11059 11060 11061 11062 11063 11064 11065 11066 11067 11068 11069 11070 11071 11072 11073 11074 11075 11076 11077 11078 11079 11080 11081 11082 11083 11084 11085 11086 11087 11088 11089 11090 11091 11092 11093 11094 11095 11096 11097 11098 11099 11100 11101 11102 11103 11104 11105 11106 11107 11108 11109 11110 11111 11112 11113 11114 11115 11116 11117 11118 11119 11120 11121 11122 11123 11124 11125 11126 11127 11128 11129 11130 11131 11132 11133 11134 11135 11136 11137 11138 11139 11140 11141 11142 11143 11144 11145 11146 11147 11148 11149 11150 11151 11152 11153 11154 11155 11156 11157 11158 11159 11160 11161 11162 11163 11164 11165 11166 11167 11168 11169 11170 11171 11172 11173 11174 11175 11176 11177 11178 11179 11180 11181 11182 11183 11184 11185 11186 11187 11188 11189 11190 11191 11192 11193 11194 11195 11196 11197 11198 11199 11200 11201 11202 11203 11204 11205 11206 11207 11208 11209 11210 11211 11212 11213 11214 11215 11216 11217 11218 11219 11220 11221 11222 11223 11224 11225 11226 11227 11228 11229 11230 11231 11232 11233 11234 11235 11236 11237 11238 11239 11240 11241 11242 11243 11244 11245 11246 11247 11248 11249 11250 11251 11252 11253 11254 11255 11256 11257 11258 11259 11260 11261 11262 11263 11264 11265 11266 11267 11268 11269 11270 11271 11272 11273 11274 11275 11276 11277 11278 11279 11280 11281 11282 11283 11284 11285 11286 11287 11288 11289 11290 11291 11292 11293 11294 11295 11296 11297 11298 11299 11300 11301 11302 11303 11304 11305 11306 11307 11308 11309 11310 11311 11312 11313 11314 11315 11316 11317 11318 11319 11320 11321 11322 11323 11324 11325 11326 11327 11328 11329 11330 11331 11332 11333 11334 11335 11336 11337 11338 11339 11340 11341 11342 11343 11344 11345 11346 11347 11348 11349 11350 11351 11352 11353 11354 11355 11356 11357 11358 11359 11360 11361 11362 11363 11364 11365 11366 11367 11368 11369 11370 11371 11372 11373 11374 11375 11376 11377 11378 11379 11380 11381 11382 11383 11384 11385 11386 11387 11388 11389 11390 11391 11392 11393 11394 11395 11396 11397 11398 11399 11400 11401 11402 11403 11404 11405 11406 11407 11408 11409 11410 11411 11412 11413 11414 11415 11416 11417 11418 11419 11420 11421 11422 11423 11424 11425 11426 11427 11428 11429 11430 11431 11432 11433 11434 11435 11436 11437 11438 11439 11440 11441 11442 11443 11444 11445 11446 11447 11448 11449 11450 11451 11452 11453 11454 11455 11456 11457 11458 11459 11460 11461 11462 11463 11464 11465 11466 11467 11468 11469 11470 11471 11472 11473 11474 11475 11476 11477 11478 11479 11480 11481 11482 11483 11484 11485 11486 11487 11488 11489 11490 11491 11492 11493 11494 11495 11496 11497 11498 11499 11500 11501 11502 11503 11504 11505 11506 11507 11508 11509 11510 11511 11512 11513 11514 11515 11516 11517 11518 11519 11520 11521 11522 11523 11524 11525 11526 11527 11528 11529 11530 11531 11532 11533 11534 11535 11536 11537 11538 11539 11540 11541 11542 11543 11544 11545 11546 11547 11548 11549 11550 11551 11552 11553 11554 11555 11556 11557 11558 11559 11560 11561 11562 11563 11564 11565 11566 11567 11568 11569 11570 11571 11572 11573 11574 11575 11576 11577 11578 11579 11580 11581 11582 11583 11584 11585 11586 11587 11588 11589 11590 11591 11592 11593 11594 11595 11596 11597 11598 11599 11600 11601 11602 11603 11604 11605 11606 11607 11608 11609 11610 11611 11612 11613 11614 11615 11616 11617 11618 11619 11620 11621 11622 11623 11624 11625 11626 11627 11628 11629 11630 11631 11632 11633 11634 11635 11636 11637 11638 11639 11640 11641 11642 11643 11644 11645 11646 11647 11648 11649 11650 11651 11652 11653 11654 11655 11656 11657 11658 11659 11660 11661 11662 11663 11664 11665 11666 11667 11668 11669 11670 11671 11672 11673 11674 11675 11676 11677 11678 11679 11680 11681 11682 11683 11684 11685 11686 11687 11688 11689 11690 11691 11692 11693 11694 11695 11696 11697 11698 11699 11700 11701 11702 11703 11704 11705 11706 11707 11708 11709 11710 11711 11712 11713 11714 11715 11716 11717 11718 11719 11720 11721 11722 11723 11724 11725 11726 11727 11728 11729 11730 11731 11732 11733 11734 11735 11736 11737 11738 11739 11740 11741 11742 11743 11744 11745 11746 11747 11748 11749 11750 11751 11752 11753 11754 11755 11756 11757 11758 11759 11760 11761 11762 11763 11764 11765 11766 11767 11768 11769 11770 11771 11772 11773 11774 11775 11776 11777 11778 11779 11780 11781 11782 11783 11784 11785 11786 11787 11788 11789 11790 11791 11792 11793 11794 11795 11796 11797 11798 11799 11800 11801 11802 11803 11804 11805 11806 11807 11808 11809 11810 11811 11812 11813 11814 11815 11816 11817 11818 11819 11820 11821 11822 11823 11824 11825 11826 11827 11828 11829 11830 11831 11832 11833 11834 11835 11836 11837 11838 11839 11840 11841 11842 11843 11844 11845 11846 11847 11848 11849 11850 11851 11852 11853 11854 11855 11856 11857 11858 11859 11860 11861 11862 11863 11864 11865 11866 11867 11868 11869 11870 11871 11872 11873 11874 11875 11876 11877 11878 11879 11880 11881 11882 11883 11884 11885 11886 11887 11888 11889 11890 11891 11892 11893 11894 11895 11896 11897 11898 11899 11900 11901 11902 11903 11904 11905 11906 11907 11908 11909 11910 11911 11912 11913 11914 11915 11916 11917 11918 11919 11920 11921 11922 11923 11924 11925 11926 11927 11928 11929 11930 11931 11932 11933 11934 11935 11936 11937 11938 11939 11940 11941 11942 11943 11944 11945 11946 11947 11948 11949 11950 11951 11952 11953 11954 11955 11956 11957 11958 11959 11960 11961 11962 11963 11964 11965 11966 11967 11968 11969 11970 11971 11972 11973 11974 11975 11976 11977 11978 11979 11980 11981 11982 11983 11984 11985 11986 11987 11988 11989 11990 11991 11992 11993 11994 11995 11996 11997 11998 11999 12000 12001 12002 12003 12004 12005 12006 12007 12008 12009 12010 12011 12012 12013 12014 12015 12016 12017 12018 12019 12020 12021 12022 12023 12024 12025 12026 12027 12028 12029 12030 12031 12032 12033 12034 12035 12036 12037 12038 12039 12040 12041 12042 12043 12044 12045 12046 12047 12048 12049 12050 12051 12052 12053 12054 12055 12056 12057 12058 12059 12060 12061 12062 12063 12064 12065 12066 12067 12068 12069 12070 12071 12072 12073 12074 12075 12076 12077 12078 12079 12080 12081 12082 12083 12084 12085 12086 12087 12088 12089 12090 12091 12092 12093 12094 12095 12096 12097 12098 12099 12100 12101 12102 12103 12104 12105 12106 12107 12108 12109 12110 12111 12112 12113 12114 12115 12116 12117 12118 12119 12120 12121 12122 12123 12124 12125 12126 12127 12128 12129 12130 12131 12132 12133 12134 12135 12136 12137 12138 12139 12140 12141 12142 12143 12144 12145 12146 12147 12148 12149 12150 12151 12152 12153 12154 12155 12156 12157 12158 12159 12160 12161 12162 12163 12164 12165 12166 12167 12168 12169 12170 12171 12172 12173 12174 12175 12176 12177 12178 12179 12180 12181 12182 12183 12184 12185 12186 12187 12188 12189 12190 12191 12192 12193 12194 12195 12196 12197 12198 12199 12200 12201 12202 12203 12204 12205 12206 12207 12208 12209 12210 12211 12212 12213 12214 12215 12216 12217 12218 12219 12220 12221 12222 12223 12224 12225 12226 12227 12228 12229 12230 12231 12232 12233 12234 12235 12236 12237 12238 12239 12240 12241 12242 12243 12244 12245 12246 12247 12248 12249 12250 12251 12252 12253 12254 12255 12256 12257 12258 12259 12260 12261 12262 12263 12264 12265 12266 12267 12268 12269 12270 12271 12272 12273 12274 12275 12276 12277 12278 12279 12280 12281 12282 12283 12284 12285 12286 12287 12288 12289 12290 12291 12292 12293 12294 12295 12296 12297 12298 12299 12300 12301 12302 12303 12304 12305 12306 12307 12308 12309 12310 12311 12312 12313 12314 12315 12316 12317 12318 12319 12320 12321 12322 12323 12324 12325 12326 12327 12328 12329 12330 12331 12332 12333 12334 12335 12336 12337 12338 12339 12340 12341 12342 12343 12344 12345 12346 12347 12348 12349 12350 12351 12352 12353 12354 12355 12356 12357 12358 12359 12360 12361 12362 12363 12364 12365 12366 12367 12368 12369 12370 12371 12372 12373 12374 12375 12376 12377 12378 12379 12380 12381 12382 12383 12384 12385 12386 12387 12388 12389 12390 12391 12392 12393 12394 12395 12396 12397 12398 12399 12400 12401 12402 12403 12404 12405 12406 12407 12408 12409 12410 12411 12412 12413 12414 12415 12416 12417 12418 12419 12420 12421 12422 12423 12424 12425 12426 12427 12428 12429 12430 12431 12432 12433 12434 12435 12436 12437 12438 12439 12440 12441 12442 12443 12444 12445 12446 12447 12448 12449 12450 12451 12452 12453 12454 12455 12456 12457 12458 12459 12460 12461 12462 12463 12464 12465 12466 12467 12468 12469 12470 12471 12472 12473 12474 12475 12476 12477 12478 12479 12480 12481 12482 12483 12484 12485 12486 12487 12488 12489 12490 12491 12492 12493 12494 12495 12496 12497 12498 12499 12500 12501 12502 12503 12504 12505 12506 12507 12508 12509 12510 12511 12512 12513 12514 12515 12516 12517 12518 12519 12520 12521 12522 12523 12524 12525 12526 12527 12528 12529 12530 12531 12532 12533 12534 12535 12536 12537 12538 12539 12540 12541 12542 12543 12544 12545 12546 12547 12548 12549 12550 12551 12552 12553 12554 12555 12556 12557 12558 12559 12560 12561 12562 12563 12564 12565 12566 12567 12568 12569 12570 12571 12572 12573 12574 12575 12576 12577 12578 12579 12580 12581 12582 12583 12584 12585 12586 12587 12588 12589 12590 12591 12592 12593 12594 12595 12596 12597 12598 12599 12600 12601 12602 12603 12604 12605 12606 12607 12608 12609 12610 12611 12612 12613 12614 12615 12616 12617 12618 12619 12620 12621 12622 12623 12624 12625 12626 12627 12628 12629 12630 12631 12632 12633 12634 12635 12636 12637 12638 12639 12640 12641 12642 12643 12644 12645 12646 12647 12648 12649 12650 12651 12652 12653 12654 12655 12656 12657 12658 12659 12660 12661 12662 12663 12664 12665 12666 12667 12668 12669 12670 12671 12672 12673 12674 12675 12676 12677 12678 12679 12680 12681 12682 12683 12684 12685 12686 12687 12688 12689 12690 12691 12692 12693 12694 12695 12696 12697 12698 12699 12700 12701 12702 12703 12704 12705 12706 12707 12708 12709 12710 12711 12712 12713 12714 12715 12716 12717 12718 12719 12720 12721 12722 12723 12724 12725 12726 12727 12728 12729 12730 12731 12732 12733 12734 12735 12736 12737 12738 12739 12740 12741 12742 12743 12744 12745 12746 12747 12748 12749 12750 12751 12752 12753 12754 12755 12756 12757 12758 12759 12760 12761 12762 12763 12764 12765 12766 12767 12768 12769 12770 12771 12772 12773 12774 12775 12776 12777 12778 12779 12780 12781 12782 12783 12784 12785 12786 12787 12788 12789 12790 12791 12792 12793 12794 12795 12796 12797 12798 12799 12800 12801 12802 12803 12804 12805 12806 12807 12808 12809 12810 12811 12812 12813 12814 12815 12816 12817 12818 12819 12820 12821 12822 12823 12824 12825 12826 12827 12828 12829 12830 12831 12832 12833 12834 12835 12836 12837 12838 12839 12840 12841 12842 12843 12844 12845 12846 12847 12848 12849 12850 12851 12852 12853 12854 12855 12856 12857 12858 12859 12860 12861 12862 12863 12864 12865 12866 12867 12868 12869 12870 12871 12872 12873 12874 12875 12876 12877 12878 12879 12880 12881 12882 12883 12884 12885 12886 12887 12888 12889 12890 12891 12892 12893 12894 12895 12896 12897 12898 12899 12900 12901 12902 12903 12904 12905 12906 12907 12908 12909 12910 12911 12912 12913 12914 12915 12916 12917 12918 12919 12920 12921 12922 12923 12924 12925 12926 12927 12928 12929 12930 12931 12932 12933 12934 12935 12936 12937 12938 12939 12940 12941 12942 12943 12944 12945 12946 12947 12948 12949 12950 12951 12952 12953 12954 12955 12956 12957 12958 12959 12960 12961 12962 12963 12964 12965 12966 12967 12968 12969 12970 12971 12972 12973 12974 12975 12976 12977 12978 12979 12980 12981 12982 12983 12984 12985 12986 12987 12988 12989 12990 12991 12992 12993 12994 12995 12996 12997 12998 12999 13000 13001 13002 13003 13004 13005 13006 13007 13008 13009 13010 13011 13012 13013 13014 13015 13016 13017 13018 13019 13020 13021 13022 13023 13024 13025 13026 13027 13028 13029 13030 13031 13032 13033 13034 13035 13036 13037 13038 13039 13040 13041 13042 13043 13044 13045 13046 13047 13048 13049 13050 13051 13052 13053 13054 13055 13056 13057 13058 13059 13060 13061 13062 13063 13064 13065 13066 13067 13068 13069 13070 13071 13072 13073 13074 13075 13076 13077 13078 13079 13080 13081 13082 13083 13084 13085 13086 13087 13088 13089 13090 13091 13092 13093 13094 13095 13096 13097 13098 13099 13100 13101 13102 13103 13104 13105 13106 13107 13108 13109 13110 13111 13112 13113 13114 13115 13116 13117 13118 13119 13120 13121 13122 13123 13124 13125 13126 13127 13128 13129 13130 13131 13132 13133 13134 13135 13136 13137 13138 13139 13140 13141 13142 13143 13144 13145 13146 13147 13148 13149 13150 13151 13152 13153 13154 13155 13156 13157 13158 13159 13160 13161 13162 13163 13164 13165 13166 13167 13168 13169 13170 13171 13172 13173 13174 13175 13176 13177 13178 13179 13180 13181 13182 13183 13184 13185 13186 13187 13188 13189 13190 13191 13192 13193 13194 13195 13196 13197 13198 13199 13200 13201 13202 13203 13204 13205 13206 13207 13208 13209 13210 13211 13212 13213 13214 13215 13216 13217 13218 13219 13220 13221 13222 13223 13224 13225 13226 13227 13228 13229 13230 13231 13232 13233 13234 13235 13236 13237 13238 13239 13240 13241 13242 13243 13244 13245 13246 13247 13248 13249 13250 13251 13252 13253 13254 13255 13256 13257 13258 13259 13260 13261 13262 13263 13264 13265 13266 13267 13268 13269 13270 13271 13272 13273 13274 13275 13276 13277 13278 13279 13280 13281 13282 13283 13284 13285 13286 13287 13288 13289 13290 13291 13292 13293 13294 13295 13296 13297 13298 13299 13300 13301 13302 13303 13304 13305 13306 13307 13308 13309 13310 13311 13312 13313 13314 13315 13316 13317 13318 13319 13320 13321 13322 13323 13324 13325 13326 13327 13328 13329 13330 13331 13332 13333 13334 13335 13336 13337 13338 13339 13340 13341 13342 13343 13344 13345 13346 13347 13348 13349 13350 13351 13352 13353 13354 13355 13356 13357 13358 13359 13360 13361 13362 13363 13364 13365 13366 13367 13368 13369 13370 13371 13372 13373 13374 13375 13376 13377 13378 13379 13380 13381 13382 13383 13384 13385 13386 13387 13388 13389 13390 13391 13392 13393 13394 13395 13396 13397 13398 13399 13400 13401 13402 13403 13404 13405 13406 13407 13408 13409 13410 13411 13412 13413 13414 13415 13416 13417 13418 13419 13420 13421 13422 13423 13424 13425 13426 13427 13428 13429 13430 13431 13432 13433 13434 13435 13436 13437 13438 13439 13440 13441 13442 13443 13444 13445 13446 13447 13448 13449 13450 13451 13452 13453 13454 13455 13456 13457 13458 13459 13460 13461 13462 13463 13464 13465 13466 13467 13468 13469 13470 13471 13472 13473 13474 13475 13476 13477 13478 13479 13480 13481 13482 13483 13484 13485 13486 13487 13488 13489 13490 13491 13492 13493 13494 13495 13496 13497 13498 13499 13500 13501 13502 13503 13504 13505 13506 13507 13508 13509 13510 13511 13512 13513 13514 13515 13516 13517 13518 13519 13520 13521 13522 13523 13524 13525 13526 13527 13528 13529 13530 13531 13532 13533 13534 13535 13536 13537 13538 13539 13540 13541 13542 13543 13544 13545 13546 13547 13548 13549 13550 13551 13552 13553 13554 13555 13556 13557 13558 13559 13560 13561 13562 13563 13564 13565 13566 13567 13568 13569 13570 13571 13572 13573 13574 13575 13576 13577 13578 13579 13580 13581 13582 13583 13584 13585 13586 13587 13588 13589 13590 13591 13592 13593 13594 13595 13596 13597 13598 13599 13600 13601 13602 13603 13604 13605 13606 13607 13608 13609 13610 13611 13612 13613 13614 13615 13616 13617 13618 13619 13620 13621 13622 13623 13624 13625 13626 13627 13628 13629 13630 13631 13632 13633 13634 13635 13636 13637 13638 13639 13640 13641 13642 13643 13644 13645 13646 13647 13648 13649 13650 13651 13652 13653 13654 13655 13656 13657 13658 13659 13660 13661 13662 13663 13664 13665 13666 13667 13668 13669 13670 13671 13672 13673 13674 13675 13676 13677 13678 13679 13680 13681 13682 13683 13684 13685 13686 13687 13688 13689 13690 13691 13692 13693 13694 13695 13696 13697 13698 13699 13700 13701 13702 13703 13704 13705 13706 13707 13708 13709 13710 13711 13712 13713 13714 13715 13716 13717 13718 13719 13720 13721 13722 13723 13724 13725 13726 13727 13728 13729 13730 13731 13732 13733 13734 13735 13736 13737 13738 13739 13740 13741 13742 13743 13744 13745 13746 13747 13748 13749 13750 13751 13752 13753 13754 13755 13756 13757 13758 13759 13760 13761 13762 13763 13764 13765 13766 13767 13768 13769 13770 13771 13772 13773 13774 13775 13776 13777 13778 13779 13780 13781 13782 13783 13784 13785 13786 13787 13788 13789 13790 13791 13792 13793 13794 13795 13796 13797 13798 13799 13800 13801 13802 13803 13804 13805 13806 13807 13808 13809 13810 13811 13812 13813 13814 13815 13816 13817 13818 13819 13820 13821 13822 13823 13824 13825 13826 13827 13828 13829 13830 13831 13832 13833 13834 13835 13836 13837 13838 13839 13840 13841 13842 13843 13844 13845 13846 13847 13848 13849 13850 13851 13852 13853 13854 13855 13856 13857 13858 13859 13860 13861 13862 13863 13864 13865 13866 13867 13868 13869 13870 13871 13872 13873 13874 13875 13876 13877 13878 13879 13880 13881 13882 13883 13884 13885 13886 13887 13888 13889 13890 13891 13892 13893 13894 13895 13896 13897 13898 13899 13900 13901 13902 13903 13904 13905 13906 13907 13908 13909 13910 13911 13912 13913 13914 13915 13916 13917 13918 13919 13920 13921 13922 13923 13924 13925 13926 13927 13928 13929 13930 13931 13932 13933 13934 13935 13936 13937 13938 13939 13940 13941 13942 13943 13944 13945 13946 13947 13948 13949 13950 13951 13952 13953 13954 13955 13956 13957 13958 13959 13960 13961 13962 13963 13964 13965 13966 13967 13968 13969 13970 13971 13972 13973 13974 13975 13976 13977 13978 13979 13980 13981 13982 13983 13984 13985 13986 13987 13988 13989 13990 13991 13992 13993 13994 13995 13996 13997 13998 13999 14000 14001 14002 14003 14004 14005 14006 14007 14008 14009 14010 14011 14012 14013 14014 14015 14016 14017 14018 14019 14020 14021 14022 14023 14024 14025 14026 14027 14028 14029 14030 14031 14032 14033 14034 14035 14036 14037 14038 14039 14040 14041 14042 14043 14044 14045 14046 14047 14048 14049 14050 14051 14052 14053 14054 14055 14056 14057 14058 14059 14060 14061 14062 14063 14064 14065 14066 14067 14068 14069 14070 14071 14072 14073 14074 14075 14076 14077 14078 14079 14080 14081 14082 14083 14084 14085 14086 14087 14088 14089 14090 14091 14092 14093 14094 14095 14096 14097 14098 14099 14100 14101 14102 14103 14104 14105 14106 14107 14108 14109 14110 14111 14112 14113 14114 14115 14116 14117 14118 14119 14120 14121 14122 14123 14124 14125 14126 14127 14128 14129 14130 14131 14132 14133 14134 14135 14136 14137 14138 14139 14140 14141 14142 14143 14144 14145 14146 14147 14148 14149 14150 14151 14152 14153 14154 14155 14156 14157 14158 14159 14160 14161 14162 14163 14164 14165 14166 14167 14168 14169 14170 14171 14172 14173 14174 14175 14176 14177 14178 14179 14180 14181 14182 14183 14184 14185 14186 14187 14188 14189 14190 14191 14192 14193 14194 14195 14196 14197 14198 14199 14200 14201 14202 14203 14204 14205 14206 14207 14208 14209 14210 14211 14212 14213 14214 14215 14216 14217 14218 14219 14220 14221 14222 14223 14224 14225 14226 14227 14228 14229 14230 14231 14232 14233 14234 14235 14236 14237 14238 14239 14240 14241 14242 14243 14244 14245 14246 14247 14248 14249 14250 14251 14252 14253 14254 14255 14256 14257 14258 14259 14260 14261 14262 14263 14264 14265 14266 14267 14268 14269 14270 14271 14272 14273 14274 14275 14276 14277 14278 14279 14280 14281 14282 14283 14284 14285 14286 14287 14288 14289 14290 14291 14292 14293 14294 14295 14296 14297 14298 14299 14300 14301 14302 14303 14304 14305 14306 14307 14308 14309 14310 14311 14312 14313 14314 14315 14316 14317 14318 14319 14320 14321 14322 14323 14324 14325 14326 14327 14328 14329 14330 14331 14332 14333 14334 14335 14336 14337 14338 14339 14340 14341 14342 14343 14344 14345 14346 14347 14348 14349 14350 14351 14352 14353 14354 14355 14356 14357 14358 14359 14360 14361 14362 14363 14364 14365 14366 14367 14368 14369 14370 14371 14372 14373 14374 14375 14376 14377 14378 14379 14380 14381 14382 14383 14384 14385 14386 14387 14388 14389 14390 14391 14392 14393 14394 14395 14396 14397 14398 14399 14400 14401 14402 14403 14404 14405 14406 14407 14408 14409 14410 14411 14412 14413 14414 14415 14416 14417 14418 14419 14420 14421 14422 14423 14424 14425 14426 14427 14428 14429 14430 14431 14432 14433 14434 14435 14436 14437 14438 14439 14440 14441 14442 14443 14444 14445 14446 14447 14448 14449 14450 14451 14452 14453 14454 14455 14456 14457 14458 14459 14460 14461 14462 14463 14464 14465 14466 14467 14468 14469 14470 14471 14472 14473 14474 14475 14476 14477 14478 14479 14480 14481 14482 14483 14484 14485 14486 14487 14488 14489 14490 14491 14492 14493 14494 14495 14496 14497 14498 14499 14500 14501 14502 14503 14504 14505 14506 14507 14508 14509 14510 14511 14512 14513 14514 14515 14516 14517 14518 14519 14520 14521 14522 14523 14524 14525 14526 14527 14528 14529 14530 14531 14532 14533 14534 14535 14536 14537 14538 14539 14540 14541 14542 14543 14544 14545 14546 14547 14548 14549 14550 14551 14552 14553 14554 14555 14556 14557 14558 14559 14560 14561 14562 14563 14564 14565 14566 14567 14568 14569 14570 14571 14572 14573 14574 14575 14576 14577 14578 14579 14580 14581 14582 14583 14584 14585 14586 14587 14588 14589 14590 14591 14592 14593 14594 14595 14596 14597 14598 14599 14600 14601 14602 14603 14604 14605 14606 14607 14608 14609 14610 14611 14612 14613 14614 14615 14616 14617 14618 14619 14620 14621 14622 14623 14624 14625 14626 14627 14628 14629 14630 14631 14632 14633 14634 14635 14636 14637 14638 14639 14640 14641 14642 14643 14644 14645 14646 14647 14648 14649 14650 14651 14652 14653 14654 14655 14656 14657 14658 14659 14660 14661 14662 14663 14664 14665 14666 14667 14668 14669 14670 14671 14672 14673 14674 14675 14676 14677 14678 14679 14680 14681 14682 14683 14684 14685 14686 14687 14688 14689 14690 14691 14692 14693 14694 14695 14696 14697 14698 14699 14700 14701 14702 14703 14704 14705 14706 14707 14708 14709 14710 14711 14712 14713 14714 14715 14716 14717 14718 14719 14720 14721 14722 14723 14724 14725 14726 14727 14728 14729 14730 14731 14732 14733 14734 14735 14736 14737 14738 14739 14740 14741 14742 14743 14744 14745 14746 14747 14748 14749 14750 14751 14752 14753 14754 14755 14756 14757 14758 14759 14760 14761 14762 14763 14764 14765 14766 14767 14768 14769 14770 14771 14772 14773 14774 14775 14776 14777 14778 14779 14780 14781 14782 14783 14784 14785 14786 14787 14788 14789 14790 14791 14792 14793 14794 14795 14796 14797 14798 14799 14800 14801 14802 14803 14804 14805 14806 14807 14808 14809 14810 14811 14812 14813 14814 14815 14816 14817 14818 14819 14820 14821 14822 14823 14824 14825 14826 14827 14828 14829 14830 14831 14832 14833 14834 14835 14836 14837 14838 14839 14840 14841 14842 14843 14844 14845 14846 14847 14848 14849 14850 14851 14852 14853 14854 14855 14856 14857 14858 14859 14860 14861 14862 14863 14864 14865 14866 14867 14868 14869 14870 14871 14872 14873 14874 14875 14876 14877 14878 14879 14880 14881 14882 14883 14884 14885 14886 14887 14888 14889 14890 14891 14892 14893 14894 14895 14896 14897 14898 14899 14900 14901 14902 14903 14904 14905 14906 14907 14908 14909 14910 14911 14912 14913 14914 14915 14916 14917 14918 14919 14920 14921 14922 14923 14924 14925 14926 14927 14928 14929 14930 14931 14932 14933 14934 14935 14936 14937 14938 14939 14940 14941 14942 14943 14944 14945 14946 14947 14948 14949 14950 14951 14952 14953 14954 14955 14956 14957 14958 14959 14960 14961 14962 14963 14964 14965 14966 14967 14968 14969 14970 14971 14972 14973 14974 14975 14976 14977 14978 14979 14980 14981 14982 14983 14984 14985 14986 14987 14988 14989 14990 14991 14992 14993 14994 14995 14996 14997 14998 14999 15000 15001 15002 15003 15004 15005 15006 15007 15008 15009 15010 15011 15012 15013 15014 15015 15016 15017 15018 15019 15020 15021 15022 15023 15024 15025 15026 15027 15028 15029 15030 15031 15032 15033 15034 15035 15036 15037 15038 15039 15040 15041 15042 15043 15044 15045 15046 15047 15048 15049 15050 15051 15052 15053 15054 15055 15056 15057 15058 15059 15060 15061 15062 15063 15064 15065 15066 15067 15068 15069 15070 15071 15072 15073 15074 15075 15076 15077 15078 15079 15080 15081 15082 15083 15084 15085 15086 15087 15088 15089 15090 15091 15092 15093 15094 15095 15096 15097 15098 15099 15100 15101 15102 15103 15104 15105 15106 15107 15108 15109 15110 15111 15112 15113 15114 15115 15116 15117 15118 15119 15120 15121 15122 15123 15124 15125 15126 15127 15128 15129 15130 15131 15132 15133 15134 15135 15136 15137 15138 15139 15140 15141 15142 15143 15144 15145 15146 15147 15148 15149 15150 15151 15152 15153 15154 15155 15156 15157 15158 15159 15160 15161 15162 15163 15164 15165 15166 15167 15168 15169 15170 15171 15172 15173 15174 15175 15176 15177 15178 15179 15180 15181 15182 15183 15184 15185 15186 15187 15188 15189 15190 15191 15192 15193 15194 15195 15196 15197 15198 15199 15200 15201 15202 15203 15204 15205 15206 15207 15208 15209 15210 15211 15212 15213 15214 15215 15216 15217 15218 15219 15220 15221 15222 15223 15224 15225 15226 15227 15228 15229 15230 15231 15232 15233 15234 15235 15236 15237 15238 15239 15240 15241 15242 15243 15244 15245 15246 15247 15248 15249 15250 15251 15252 15253 15254 15255 15256 15257 15258 15259 15260 15261 15262 15263 15264 15265 15266 15267 15268 15269 15270 15271 15272 15273 15274 15275 15276 15277 15278 15279 15280 15281 15282 15283 15284 15285 15286 15287 15288 15289 15290 15291 15292 15293 15294 15295 15296 15297 15298 15299 15300 15301 15302 15303 15304 15305 15306 15307 15308 15309 15310 15311 15312 15313 15314 15315 15316 15317 15318 15319 15320 15321 15322 15323 15324 15325 15326 15327 15328 15329 15330 15331 15332 15333 15334 15335 15336 15337 15338 15339 15340 15341 15342 15343 15344 15345 15346 15347 15348 15349 15350 15351 15352 15353 15354 15355 15356 15357 15358 15359 15360 15361 15362 15363 15364 15365 15366 15367 15368 15369 15370 15371 15372 15373 15374 15375 15376 15377 15378 15379 15380 15381 15382 15383 15384 15385 15386 15387 15388 15389 15390 15391 15392 15393 15394 15395 15396 15397 15398 15399 15400 15401 15402 15403 15404 15405 15406 15407 15408 15409 15410 15411 15412 15413 15414 15415 15416 15417 15418 15419 15420 15421 15422 15423 15424 15425 15426 15427 15428 15429 15430 15431 15432 15433 15434 15435 15436 15437 15438 15439 15440 15441 15442 15443 15444 15445 15446 15447 15448 15449 15450 15451 15452 15453 15454 15455 15456 15457 15458 15459 15460 15461 15462 15463 15464 15465 15466 15467 15468 15469 15470 15471 15472 15473 15474 15475 15476 15477 15478 15479 15480 15481 15482 15483 15484 15485 15486 15487 15488 15489 15490 15491 15492 15493 15494 15495 15496 15497 15498 15499 15500 15501 15502 15503 15504 15505 15506 15507 15508 15509 15510 15511 15512 15513 15514 15515 15516 15517 15518 15519 15520 15521 15522 15523 15524 15525 15526 15527 15528 15529 15530 15531 15532 15533 15534 15535 15536 15537 15538 15539 15540 15541 15542 15543 15544 15545 15546 15547 15548 15549 15550 15551 15552 15553 15554 15555 15556 15557 15558 15559 15560 15561 15562 15563 15564 15565 15566 15567 15568 15569 15570 15571 15572 15573 15574 15575 15576 15577 15578 15579 15580 15581 15582 15583 15584 15585 15586 15587 15588 15589 15590 15591 15592 15593 15594 15595 15596 15597 15598 15599 15600 15601 15602 15603 15604 15605 15606 15607 15608 15609 15610 15611 15612 15613 15614 15615 15616 15617 15618 15619 15620 15621 15622 15623 15624 15625 15626 15627 15628 15629 15630 15631 15632 15633 15634 15635 15636 15637 15638 15639 15640 15641 15642 15643 15644 15645 15646 15647 15648 15649 15650 15651 15652 15653 15654 15655 15656 15657 15658 15659 15660 15661 15662 15663 15664 15665 15666 15667 15668 15669 15670 15671 15672 15673 15674 15675 15676 15677 15678 15679 15680 15681 15682 15683 15684 15685 15686 15687 15688 15689 15690 15691 15692 15693 15694 15695 15696 15697 15698 15699 15700 15701 15702 15703 15704 15705 15706 15707 15708 15709 15710 15711 15712 15713 15714 15715 15716 15717 15718 15719 15720 15721 15722 15723 15724 15725 15726 15727 15728 15729 15730 15731 15732 15733 15734 15735 15736 15737 15738 15739 15740 15741 15742 15743 15744 15745 15746 15747 15748 15749 15750 15751 15752 15753 15754 15755 15756 15757 15758 15759 15760 15761 15762 15763 15764 15765 15766 15767 15768 15769 15770 15771 15772 15773 15774 15775 15776 15777 15778 15779 15780 15781 15782 15783 15784 15785 15786 15787 15788 15789 15790 15791 15792 15793 15794 15795 15796 15797 15798 15799 15800 15801 15802 15803 15804 15805 15806 15807 15808 15809 15810 15811 15812 15813 15814 15815 15816 15817 15818 15819 15820 15821 15822 15823 15824 15825 15826 15827 15828 15829 15830 15831 15832 15833 15834 15835 15836 15837 15838 15839 15840 15841 15842 15843 15844 15845 15846 15847 15848 15849 15850 15851 15852 15853 15854 15855 15856 15857 15858 15859 15860 15861 15862 15863 15864 15865 15866 15867 15868 15869 15870 15871 15872 15873 15874 15875 15876 15877 15878 15879 15880 15881 15882 15883 15884 15885 15886 15887 15888 15889 15890 15891 15892 15893 15894 15895 15896 15897 15898 15899 15900 15901 15902 15903 15904 15905 15906 15907 15908 15909 15910 15911 15912 15913 15914 15915 15916 15917 15918 15919 15920 15921 15922 15923 15924 15925 15926 15927 15928 15929 15930 15931 15932 15933 15934 15935 15936 15937 15938 15939 15940 15941 15942 15943 15944 15945 15946 15947 15948 15949 15950 15951 15952 15953 15954 15955 15956 15957 15958 15959 15960 15961 15962 15963 15964 15965 15966 15967 15968 15969 15970 15971 15972 15973 15974 15975 15976 15977 15978 15979 15980 15981 15982 15983 15984 15985 15986 15987 15988 15989 15990 15991 15992 15993 15994 15995 15996 15997 15998 15999 16000 16001 16002 16003 16004 16005 16006 16007 16008 16009 16010 16011 16012 16013 16014 16015 16016 16017 16018 16019 16020 16021 16022 16023 16024 16025 16026 16027 16028 16029 16030 16031 16032 16033 16034 16035 16036 16037 16038 16039 16040 16041 16042 16043 16044 16045 16046 16047 16048 16049 16050 16051 16052 16053 16054 16055 16056 16057 16058 16059 16060 16061 16062 16063 16064 16065 16066 16067 16068 16069 16070 16071 16072 16073 16074 16075 16076 16077 16078 16079 | /** * @license * Cesium - https://github.com/CesiumGS/cesium * Version 1.128 * * Copyright 2011-2022 Cesium Contributors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * Columbus View (Pat. Pend.) * * Portions licensed separately. * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. */ var Cesium=(()=>{var t1e=Object.create;var QM=Object.defineProperty;var n1e=Object.getOwnPropertyDescriptor;var i1e=Object.getOwnPropertyNames;var o1e=Object.getPrototypeOf,r1e=Object.prototype.hasOwnProperty;var jM=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,n)=>(typeof require<"u"?require:t)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var ld=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),s1e=(e,t)=>{for(var n in t)QM(e,n,{get:t[n],enumerable:!0})},gq=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of i1e(t))!r1e.call(e,o)&&o!==n&&QM(e,o,{get:()=>t[o],enumerable:!(i=n1e(t,o))||i.enumerable});return e};var _=(e,t,n)=>(n=e!=null?t1e(o1e(e)):{},gq(t||!e||!e.__esModule?QM(n,"default",{value:e,enumerable:!0}):n,e)),a1e=e=>gq(QM({},"__esModule",{value:!0}),e);var T=ld(()=>{globalThis.CESIUM_WORKERS=atob("dmFyIENlc2l1bVdvcmtlcnM9KCgpPT57dmFyIFdTPU9iamVjdC5jcmVhdGU7dmFyIEJsPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgWFM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjt2YXIgWVM9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM7dmFyICRTPU9iamVjdC5nZXRQcm90b3R5cGVPZixaUz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBwcj0odD0+dHlwZW9mIHJlcXVpcmU8InUiP3JlcXVpcmU6dHlwZW9mIFByb3h5PCJ1Ij9uZXcgUHJveHkodCx7Z2V0OihlLG4pPT4odHlwZW9mIHJlcXVpcmU8InUiP3JlcXVpcmU6ZSlbbl19KTp0KShmdW5jdGlvbih0KXtpZih0eXBlb2YgcmVxdWlyZTwidSIpcmV0dXJuIHJlcXVpcmUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3Rocm93IEVycm9yKCdEeW5hbWljIHJlcXVpcmUgb2YgIicrdCsnIiBpcyBub3Qgc3VwcG9ydGVkJyl9KSxsMT10PT5lPT57dmFyIG49dFtlXTtpZihuKXJldHVybiBuKCk7dGhyb3cgbmV3IEVycm9yKCJNb2R1bGUgbm90IGZvdW5kIGluIGJ1bmRsZTogIitlKX07dmFyICQ9KHQsZSk9PigpPT4odCYmKGU9dCh0PTApKSxlKTt2YXIgWG49KHQsZSk9PigpPT4oZXx8dCgoZT17ZXhwb3J0czp7fX0pLmV4cG9ydHMsZSksZS5leHBvcnRzKSxkZT0odCxlKT0+e2Zvcih2YXIgbiBpbiBlKUJsKHQsbix7Z2V0OmVbbl0sZW51bWVyYWJsZTohMH0pfSxwMT0odCxlLG4sbyk9PntpZihlJiZ0eXBlb2YgZT09Im9iamVjdCJ8fHR5cGVvZiBlPT0iZnVuY3Rpb24iKWZvcihsZXQgciBvZiBZUyhlKSkhWlMuY2FsbCh0LHIpJiZyIT09biYmQmwodCxyLHtnZXQ6KCk9PmVbcl0sZW51bWVyYWJsZTohKG89WFMoZSxyKSl8fG8uZW51bWVyYWJsZX0pO3JldHVybiB0fTt2YXIgZHI9KHQsZSxuKT0+KG49dCE9bnVsbD9XUygkUyh0KSk6e30scDEoZXx8IXR8fCF0Ll9fZXNNb2R1bGU/QmwobiwiZGVmYXVsdCIse3ZhbHVlOnQsZW51bWVyYWJsZTohMH0pOm4sdCkpLFFTPXQ9PnAxKEJsKHt9LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0KTtmdW5jdGlvbiBKUyh0KXtyZXR1cm4gdCE9bnVsbH12YXIgaCxmdD0kKCgpPT57aD1KU30pO2Z1bmN0aW9uIGtzKHQpe3RoaXMubmFtZT0iRGV2ZWxvcGVyRXJyb3IiLHRoaXMubWVzc2FnZT10O2xldCBlO3RyeXt0aHJvdyBuZXcgRXJyb3J9Y2F0Y2gobil7ZT1uLnN0YWNrfXRoaXMuc3RhY2s9ZX12YXIgRCxqdD0kKCgpPT57ZnQoKTtoKE9iamVjdC5jcmVhdGUpJiYoa3MucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSxrcy5wcm90b3R5cGUuY29uc3RydWN0b3I9a3MpO2tzLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2xldCB0PWAke3RoaXMubmFtZX06ICR7dGhpcy5tZXNzYWdlfWA7cmV0dXJuIGgodGhpcy5zdGFjaykmJih0Kz1gCiR7dGhpcy5zdGFjay50b1N0cmluZygpfWApLHR9O2tzLnRocm93SW5zdGFudGlhdGlvbkVycm9yPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IGtzKCJUaGlzIGZ1bmN0aW9uIGRlZmluZXMgYW4gaW50ZXJmYWNlIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseS4iKX07RD1rc30pO2Z1bmN0aW9uIHRDKHQpe3JldHVybmAke3R9IGlzIHJlcXVpcmVkLCBhY3R1YWwgdmFsdWUgd2FzIHVuZGVmaW5lZGB9ZnVuY3Rpb24gemModCxlLG4pe3JldHVybmBFeHBlY3RlZCAke259IHRvIGJlIHR5cGVvZiAke2V9LCBhY3R1YWwgdHlwZW9mIHdhcyAke3R9YH12YXIgWW4seSxXdD0kKCgpPT57ZnQoKTtqdCgpO1luPXt9O1luLnR5cGVPZj17fTtZbi5kZWZpbmVkPWZ1bmN0aW9uKHQsZSl7aWYoIWgoZSkpdGhyb3cgbmV3IEQodEModCkpfTtZbi50eXBlT2YuZnVuYz1mdW5jdGlvbih0LGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBEKHpjKHR5cGVvZiBlLCJmdW5jdGlvbiIsdCkpfTtZbi50eXBlT2Yuc3RyaW5nPWZ1bmN0aW9uKHQsZSl7aWYodHlwZW9mIGUhPSJzdHJpbmciKXRocm93IG5ldyBEKHpjKHR5cGVvZiBlLCJzdHJpbmciLHQpKX07WW4udHlwZU9mLm51bWJlcj1mdW5jdGlvbih0LGUpe2lmKHR5cGVvZiBlIT0ibnVtYmVyIil0aHJvdyBuZXcgRCh6Yyh0eXBlb2YgZSwibnVtYmVyIix0KSl9O1luLnR5cGVPZi5udW1iZXIubGVzc1RoYW49ZnVuY3Rpb24odCxlLG4pe2lmKFluLnR5cGVPZi5udW1iZXIodCxlKSxlPj1uKXRocm93IG5ldyBEKGBFeHBlY3RlZCAke3R9IHRvIGJlIGxlc3MgdGhhbiAke259LCBhY3R1YWwgdmFsdWUgd2FzICR7ZX1gKX07WW4udHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzPWZ1bmN0aW9uKHQsZSxuKXtpZihZbi50eXBlT2YubnVtYmVyKHQsZSksZT5uKXRocm93IG5ldyBEKGBFeHBlY3RlZCAke3R9IHRvIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAke259LCBhY3R1YWwgdmFsdWUgd2FzICR7ZX1gKX07WW4udHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbj1mdW5jdGlvbih0LGUsbil7aWYoWW4udHlwZU9mLm51bWJlcih0LGUpLGU8PW4pdGhyb3cgbmV3IEQoYEV4cGVjdGVkICR7dH0gdG8gYmUgZ3JlYXRlciB0aGFuICR7bn0sIGFjdHVhbCB2YWx1ZSB3YXMgJHtlfWApfTtZbi50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHM9ZnVuY3Rpb24odCxlLG4pe2lmKFluLnR5cGVPZi5udW1iZXIodCxlKSxlPG4pdGhyb3cgbmV3IEQoYEV4cGVjdGVkICR7dH0gdG8gYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICR7bn0sIGFjdHVhbCB2YWx1ZSB3YXMgJHtlfWApfTtZbi50eXBlT2Yub2JqZWN0PWZ1bmN0aW9uKHQsZSl7aWYodHlwZW9mIGUhPSJvYmplY3QiKXRocm93IG5ldyBEKHpjKHR5cGVvZiBlLCJvYmplY3QiLHQpKX07WW4udHlwZU9mLmJvb2w9ZnVuY3Rpb24odCxlKXtpZih0eXBlb2YgZSE9ImJvb2xlYW4iKXRocm93IG5ldyBEKHpjKHR5cGVvZiBlLCJib29sZWFuIix0KSl9O1luLnR5cGVPZi5iaWdpbnQ9ZnVuY3Rpb24odCxlKXtpZih0eXBlb2YgZSE9ImJpZ2ludCIpdGhyb3cgbmV3IEQoemModHlwZW9mIGUsImJpZ2ludCIsdCkpfTtZbi50eXBlT2YubnVtYmVyLmVxdWFscz1mdW5jdGlvbih0LGUsbixvKXtpZihZbi50eXBlT2YubnVtYmVyKHQsbiksWW4udHlwZU9mLm51bWJlcihlLG8pLG4hPT1vKXRocm93IG5ldyBEKGAke3R9IG11c3QgYmUgZXF1YWwgdG8gJHtlfSwgdGhlIGFjdHVhbCB2YWx1ZXMgYXJlICR7bn0gYW5kICR7b31gKX07eT1Zbn0pO3ZhciBtMT1YbigoSGssZDEpPT57dmFyIFJpPWZ1bmN0aW9uKHQpe3Q9PW51bGwmJih0PW5ldyBEYXRlKCkuZ2V0VGltZSgpKSx0aGlzLk49NjI0LHRoaXMuTT0zOTcsdGhpcy5NQVRSSVhfQT0yNTY3NDgzNjE1LHRoaXMuVVBQRVJfTUFTSz0yMTQ3NDgzNjQ4LHRoaXMuTE9XRVJfTUFTSz0yMTQ3NDgzNjQ3LHRoaXMubXQ9bmV3IEFycmF5KHRoaXMuTiksdGhpcy5tdGk9dGhpcy5OKzEsdC5jb25zdHJ1Y3Rvcj09QXJyYXk/dGhpcy5pbml0X2J5X2FycmF5KHQsdC5sZW5ndGgpOnRoaXMuaW5pdF9zZWVkKHQpfTtSaS5wcm90b3R5cGUuaW5pdF9zZWVkPWZ1bmN0aW9uKHQpe2Zvcih0aGlzLm10WzBdPXQ+Pj4wLHRoaXMubXRpPTE7dGhpcy5tdGk8dGhpcy5OO3RoaXMubXRpKyspe3ZhciB0PXRoaXMubXRbdGhpcy5tdGktMV1edGhpcy5tdFt0aGlzLm10aS0xXT4+PjMwO3RoaXMubXRbdGhpcy5tdGldPSgoKHQmNDI5NDkwMTc2MCk+Pj4xNikqMTgxMjQzMzI1Mzw8MTYpKyh0JjY1NTM1KSoxODEyNDMzMjUzK3RoaXMubXRpLHRoaXMubXRbdGhpcy5tdGldPj4+PTB9fTtSaS5wcm90b3R5cGUuaW5pdF9ieV9hcnJheT1mdW5jdGlvbih0LGUpe3ZhciBuLG8scjtmb3IodGhpcy5pbml0X3NlZWQoMTk2NTAyMTgpLG49MSxvPTAscj10aGlzLk4+ZT90aGlzLk46ZTtyO3ItLSl7dmFyIGk9dGhpcy5tdFtuLTFdXnRoaXMubXRbbi0xXT4+PjMwO3RoaXMubXRbbl09KHRoaXMubXRbbl1eKCgoaSY0Mjk0OTAxNzYwKT4+PjE2KSoxNjY0NTI1PDwxNikrKGkmNjU1MzUpKjE2NjQ1MjUpK3Rbb10rbyx0aGlzLm10W25dPj4+PTAsbisrLG8rKyxuPj10aGlzLk4mJih0aGlzLm10WzBdPXRoaXMubXRbdGhpcy5OLTFdLG49MSksbz49ZSYmKG89MCl9Zm9yKHI9dGhpcy5OLTE7cjtyLS0pe3ZhciBpPXRoaXMubXRbbi0xXV50aGlzLm10W24tMV0+Pj4zMDt0aGlzLm10W25dPSh0aGlzLm10W25dXigoKGkmNDI5NDkwMTc2MCk+Pj4xNikqMTU2NjA4Mzk0MTw8MTYpKyhpJjY1NTM1KSoxNTY2MDgzOTQxKS1uLHRoaXMubXRbbl0+Pj49MCxuKyssbj49dGhpcy5OJiYodGhpcy5tdFswXT10aGlzLm10W3RoaXMuTi0xXSxuPTEpfXRoaXMubXRbMF09MjE0NzQ4MzY0OH07UmkucHJvdG90eXBlLnJhbmRvbV9pbnQ9ZnVuY3Rpb24oKXt2YXIgdCxlPW5ldyBBcnJheSgwLHRoaXMuTUFUUklYX0EpO2lmKHRoaXMubXRpPj10aGlzLk4pe3ZhciBuO2Zvcih0aGlzLm10aT09dGhpcy5OKzEmJnRoaXMuaW5pdF9zZWVkKDU0ODkpLG49MDtuPHRoaXMuTi10aGlzLk07bisrKXQ9dGhpcy5tdFtuXSZ0aGlzLlVQUEVSX01BU0t8dGhpcy5tdFtuKzFdJnRoaXMuTE9XRVJfTUFTSyx0aGlzLm10W25dPXRoaXMubXRbbit0aGlzLk1dXnQ+Pj4xXmVbdCYxXTtmb3IoO248dGhpcy5OLTE7bisrKXQ9dGhpcy5tdFtuXSZ0aGlzLlVQUEVSX01BU0t8dGhpcy5tdFtuKzFdJnRoaXMuTE9XRVJfTUFTSyx0aGlzLm10W25dPXRoaXMubXRbbisodGhpcy5NLXRoaXMuTildXnQ+Pj4xXmVbdCYxXTt0PXRoaXMubXRbdGhpcy5OLTFdJnRoaXMuVVBQRVJfTUFTS3x0aGlzLm10WzBdJnRoaXMuTE9XRVJfTUFTSyx0aGlzLm10W3RoaXMuTi0xXT10aGlzLm10W3RoaXMuTS0xXV50Pj4+MV5lW3QmMV0sdGhpcy5tdGk9MH1yZXR1cm4gdD10aGlzLm10W3RoaXMubXRpKytdLHRePXQ+Pj4xMSx0Xj10PDw3JjI2MzY5Mjg2NDAsdF49dDw8MTUmNDAyMjczMDc1Mix0Xj10Pj4+MTgsdD4+PjB9O1JpLnByb3RvdHlwZS5yYW5kb21faW50MzE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yYW5kb21faW50KCk+Pj4xfTtSaS5wcm90b3R5cGUucmFuZG9tX2luY2w9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yYW5kb21faW50KCkqKDEvNDI5NDk2NzI5NSl9O1JpLnByb3RvdHlwZS5yYW5kb209ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yYW5kb21faW50KCkqKDEvNDI5NDk2NzI5Nil9O1JpLnByb3RvdHlwZS5yYW5kb21fZXhjbD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJhbmRvbV9pbnQoKSsuNSkqKDEvNDI5NDk2NzI5Nil9O1JpLnByb3RvdHlwZS5yYW5kb21fbG9uZz1mdW5jdGlvbigpe3ZhciB0PXRoaXMucmFuZG9tX2ludCgpPj4+NSxlPXRoaXMucmFuZG9tX2ludCgpPj4+NjtyZXR1cm4odCo2NzEwODg2NCtlKSooMS85MDA3MTk5MjU0NzQwOTkyKX07ZDEuZXhwb3J0cz1SaX0pO3ZhciB3bSx4dCxVbCxoMSxQLEt0PSQoKCk9Pnt3bT1kcihtMSgpLDEpO1d0KCk7ZnQoKTtqdCgpO3h0PXt9O3h0LkVQU0lMT04xPS4xO3h0LkVQU0lMT04yPS4wMTt4dC5FUFNJTE9OMz0uMDAxO3h0LkVQU0lMT040PTFlLTQ7eHQuRVBTSUxPTjU9MWUtNTt4dC5FUFNJTE9ONj0xZS02O3h0LkVQU0lMT043PTFlLTc7eHQuRVBTSUxPTjg9MWUtODt4dC5FUFNJTE9OOT0xZS05O3h0LkVQU0lMT04xMD0xZS0xMDt4dC5FUFNJTE9OMTE9MWUtMTE7eHQuRVBTSUxPTjEyPTFlLTEyO3h0LkVQU0lMT04xMz0xZS0xMzt4dC5FUFNJTE9OMTQ9MWUtMTQ7eHQuRVBTSUxPTjE1PTFlLTE1O3h0LkVQU0lMT04xNj0xZS0xNjt4dC5FUFNJTE9OMTc9MWUtMTc7eHQuRVBTSUxPTjE4PTFlLTE4O3h0LkVQU0lMT04xOT0xZS0xOTt4dC5FUFNJTE9OMjA9MWUtMjA7eHQuRVBTSUxPTjIxPTFlLTIxO3h0LkdSQVZJVEFUSU9OQUxQQVJBTUVURVI9Mzk4NjAwNDQxOGU1O3h0LlNPTEFSX1JBRElVUz02OTU1ZTU7eHQuTFVOQVJfUkFESVVTPTE3Mzc0MDA7eHQuU0lYVFlfRk9VUl9LSUxPQllURVM9NjQqMTAyNDt4dC5GT1VSX0dJR0FCWVRFUz00KjEwMjQqMTAyNCoxMDI0O3h0LnNpZ249TWF0aC5zaWduPz9mdW5jdGlvbihlKXtyZXR1cm4gZT0rZSxlPT09MHx8ZSE9PWU/ZTplPjA/MTotMX07eHQuc2lnbk5vdFplcm89ZnVuY3Rpb24odCl7cmV0dXJuIHQ8MD8tMToxfTt4dC50b1NOb3JtPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9ZT8/MjU1LE1hdGgucm91bmQoKHh0LmNsYW1wKHQsLTEsMSkqLjUrLjUpKmUpfTt4dC5mcm9tU05vcm09ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lPz8yNTUseHQuY2xhbXAodCwwLGUpL2UqMi0xfTt4dC5ub3JtYWxpemU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBuPU1hdGgubWF4KG4tZSwwKSxuPT09MD8wOnh0LmNsYW1wKCh0LWUpL24sMCwxKX07eHQuc2luaD1NYXRoLnNpbmg/P2Z1bmN0aW9uKGUpe3JldHVybihNYXRoLmV4cChlKS1NYXRoLmV4cCgtZSkpLzJ9O3h0LmNvc2g9TWF0aC5jb3NoPz9mdW5jdGlvbihlKXtyZXR1cm4oTWF0aC5leHAoZSkrTWF0aC5leHAoLWUpKS8yfTt4dC5sZXJwPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4oMS1uKSp0K24qZX07eHQuUEk9TWF0aC5QSTt4dC5PTkVfT1ZFUl9QST0xL01hdGguUEk7eHQuUElfT1ZFUl9UV089TWF0aC5QSS8yO3h0LlBJX09WRVJfVEhSRUU9TWF0aC5QSS8zO3h0LlBJX09WRVJfRk9VUj1NYXRoLlBJLzQ7eHQuUElfT1ZFUl9TSVg9TWF0aC5QSS82O3h0LlRIUkVFX1BJX09WRVJfVFdPPTMqTWF0aC5QSS8yO3h0LlRXT19QST0yKk1hdGguUEk7eHQuT05FX09WRVJfVFdPX1BJPTEvKDIqTWF0aC5QSSk7eHQuUkFESUFOU19QRVJfREVHUkVFPU1hdGguUEkvMTgwO3h0LkRFR1JFRVNfUEVSX1JBRElBTj0xODAvTWF0aC5QSTt4dC5SQURJQU5TX1BFUl9BUkNTRUNPTkQ9eHQuUkFESUFOU19QRVJfREVHUkVFLzM2MDA7eHQudG9SYWRpYW5zPWZ1bmN0aW9uKHQpe2lmKCFoKHQpKXRocm93IG5ldyBEKCJkZWdyZWVzIGlzIHJlcXVpcmVkLiIpO3JldHVybiB0Knh0LlJBRElBTlNfUEVSX0RFR1JFRX07eHQudG9EZWdyZWVzPWZ1bmN0aW9uKHQpe2lmKCFoKHQpKXRocm93IG5ldyBEKCJyYWRpYW5zIGlzIHJlcXVpcmVkLiIpO3JldHVybiB0Knh0LkRFR1JFRVNfUEVSX1JBRElBTn07eHQuY29udmVydExvbmdpdHVkZVJhbmdlPWZ1bmN0aW9uKHQpe2lmKCFoKHQpKXRocm93IG5ldyBEKCJhbmdsZSBpcyByZXF1aXJlZC4iKTtsZXQgZT14dC5UV09fUEksbj10LU1hdGguZmxvb3IodC9lKSplO3JldHVybiBuPC1NYXRoLlBJP24rZTpuPj1NYXRoLlBJP24tZTpufTt4dC5jbGFtcFRvTGF0aXR1ZGVSYW5nZT1mdW5jdGlvbih0KXtpZighaCh0KSl0aHJvdyBuZXcgRCgiYW5nbGUgaXMgcmVxdWlyZWQuIik7cmV0dXJuIHh0LmNsYW1wKHQsLTEqeHQuUElfT1ZFUl9UV08seHQuUElfT1ZFUl9UV08pfTt4dC5uZWdhdGl2ZVBpVG9QaT1mdW5jdGlvbih0KXtpZighaCh0KSl0aHJvdyBuZXcgRCgiYW5nbGUgaXMgcmVxdWlyZWQuIik7cmV0dXJuIHQ+PS14dC5QSSYmdDw9eHQuUEk/dDp4dC56ZXJvVG9Ud29QaSh0K3h0LlBJKS14dC5QSX07eHQuemVyb1RvVHdvUGk9ZnVuY3Rpb24odCl7aWYoIWgodCkpdGhyb3cgbmV3IEQoImFuZ2xlIGlzIHJlcXVpcmVkLiIpO2lmKHQ+PTAmJnQ8PXh0LlRXT19QSSlyZXR1cm4gdDtsZXQgZT14dC5tb2QodCx4dC5UV09fUEkpO3JldHVybiBNYXRoLmFicyhlKTx4dC5FUFNJTE9OMTQmJk1hdGguYWJzKHQpPnh0LkVQU0lMT04xND94dC5UV09fUEk6ZX07eHQubW9kPWZ1bmN0aW9uKHQsZSl7aWYoIWgodCkpdGhyb3cgbmV3IEQoIm0gaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEQoIm4gaXMgcmVxdWlyZWQuIik7aWYoZT09PTApdGhyb3cgbmV3IEQoImRpdmlzb3IgY2Fubm90IGJlIDAuIik7cmV0dXJuIHh0LnNpZ24odCk9PT14dC5zaWduKGUpJiZNYXRoLmFicyh0KTxNYXRoLmFicyhlKT90Oih0JWUrZSklZX07eHQuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbixvKXtpZighaCh0KSl0aHJvdyBuZXcgRCgibGVmdCBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgRCgicmlnaHQgaXMgcmVxdWlyZWQuIik7bj1uPz8wLG89bz8/bjtsZXQgcj1NYXRoLmFicyh0LWUpO3JldHVybiByPD1vfHxyPD1uKk1hdGgubWF4KE1hdGguYWJzKHQpLE1hdGguYWJzKGUpKX07eHQubGVzc1RoYW49ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBEKCJmaXJzdCBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgRCgic2Vjb25kIGlzIHJlcXVpcmVkLiIpO2lmKCFoKG4pKXRocm93IG5ldyBEKCJhYnNvbHV0ZUVwc2lsb24gaXMgcmVxdWlyZWQuIik7cmV0dXJuIHQtZTwtbn07eHQubGVzc1RoYW5PckVxdWFscz1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEQoImZpcnN0IGlzIHJlcXVpcmVkLiIpO2lmKCFoKGUpKXRocm93IG5ldyBEKCJzZWNvbmQgaXMgcmVxdWlyZWQuIik7aWYoIWgobikpdGhyb3cgbmV3IEQoImFic29sdXRlRXBzaWxvbiBpcyByZXF1aXJlZC4iKTtyZXR1cm4gdC1lPG59O3h0LmdyZWF0ZXJUaGFuPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgRCgiZmlyc3QgaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEQoInNlY29uZCBpcyByZXF1aXJlZC4iKTtpZighaChuKSl0aHJvdyBuZXcgRCgiYWJzb2x1dGVFcHNpbG9uIGlzIHJlcXVpcmVkLiIpO3JldHVybiB0LWU+bn07eHQuZ3JlYXRlclRoYW5PckVxdWFscz1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEQoImZpcnN0IGlzIHJlcXVpcmVkLiIpO2lmKCFoKGUpKXRocm93IG5ldyBEKCJzZWNvbmQgaXMgcmVxdWlyZWQuIik7aWYoIWgobikpdGhyb3cgbmV3IEQoImFic29sdXRlRXBzaWxvbiBpcyByZXF1aXJlZC4iKTtyZXR1cm4gdC1lPi1ufTtVbD1bMV07eHQuZmFjdG9yaWFsPWZ1bmN0aW9uKHQpe2lmKHR5cGVvZiB0IT0ibnVtYmVyInx8dDwwKXRocm93IG5ldyBEKCJBIG51bWJlciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMCBpcyByZXF1aXJlZC4iKTtsZXQgZT1VbC5sZW5ndGg7aWYodD49ZSl7bGV0IG49VWxbZS0xXTtmb3IobGV0IG89ZTtvPD10O28rKyl7bGV0IHI9bipvO1VsLnB1c2gociksbj1yfX1yZXR1cm4gVWxbdF19O3h0LmluY3JlbWVudFdyYXA9ZnVuY3Rpb24odCxlLG4pe2lmKG49bj8/MCwhaCh0KSl0aHJvdyBuZXcgRCgibiBpcyByZXF1aXJlZC4iKTtpZihlPD1uKXRocm93IG5ldyBEKCJtYXhpbXVtVmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gbWluaW11bVZhbHVlLiIpO3JldHVybisrdCx0PmUmJih0PW4pLHR9O3h0LmlzUG93ZXJPZlR3bz1mdW5jdGlvbih0KXtpZih0eXBlb2YgdCE9Im51bWJlciJ8fHQ8MHx8dD40Mjk0OTY3Mjk1KXRocm93IG5ldyBEKCJBIG51bWJlciBiZXR3ZWVuIDAgYW5kICgyXjMyKS0xIGlzIHJlcXVpcmVkLiIpO3JldHVybiB0IT09MCYmKHQmdC0xKT09PTB9O3h0Lm5leHRQb3dlck9mVHdvPWZ1bmN0aW9uKHQpe2lmKHR5cGVvZiB0IT0ibnVtYmVyInx8dDwwfHx0PjIxNDc0ODM2NDgpdGhyb3cgbmV3IEQoIkEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMl4zMSBpcyByZXF1aXJlZC4iKTtyZXR1cm4tLXQsdHw9dD4+MSx0fD10Pj4yLHR8PXQ+PjQsdHw9dD4+OCx0fD10Pj4xNiwrK3QsdH07eHQucHJldmlvdXNQb3dlck9mVHdvPWZ1bmN0aW9uKHQpe2lmKHR5cGVvZiB0IT0ibnVtYmVyInx8dDwwfHx0PjQyOTQ5NjcyOTUpdGhyb3cgbmV3IEQoIkEgbnVtYmVyIGJldHdlZW4gMCBhbmQgKDJeMzIpLTEgaXMgcmVxdWlyZWQuIik7cmV0dXJuIHR8PXQ+PjEsdHw9dD4+Mix0fD10Pj40LHR8PXQ+PjgsdHw9dD4+MTYsdHw9dD4+MzIsdD0odD4+PjApLSh0Pj4+MSksdH07eHQuY2xhbXA9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5udW1iZXIoInZhbHVlIix0KSx5LnR5cGVPZi5udW1iZXIoIm1pbiIsZSkseS50eXBlT2YubnVtYmVyKCJtYXgiLG4pLHQ8ZT9lOnQ+bj9uOnR9O2gxPW5ldyB3bS5kZWZhdWx0O3h0LnNldFJhbmRvbU51bWJlclNlZWQ9ZnVuY3Rpb24odCl7aWYoIWgodCkpdGhyb3cgbmV3IEQoInNlZWQgaXMgcmVxdWlyZWQuIik7aDE9bmV3IHdtLmRlZmF1bHQodCl9O3h0Lm5leHRSYW5kb21OdW1iZXI9ZnVuY3Rpb24oKXtyZXR1cm4gaDEucmFuZG9tKCl9O3h0LnJhbmRvbUJldHdlZW49ZnVuY3Rpb24odCxlKXtyZXR1cm4geHQubmV4dFJhbmRvbU51bWJlcigpKihlLXQpK3R9O3h0LmFjb3NDbGFtcGVkPWZ1bmN0aW9uKHQpe2lmKCFoKHQpKXRocm93IG5ldyBEKCJ2YWx1ZSBpcyByZXF1aXJlZC4iKTtyZXR1cm4gTWF0aC5hY29zKHh0LmNsYW1wKHQsLTEsMSkpfTt4dC5hc2luQ2xhbXBlZD1mdW5jdGlvbih0KXtpZighaCh0KSl0aHJvdyBuZXcgRCgidmFsdWUgaXMgcmVxdWlyZWQuIik7cmV0dXJuIE1hdGguYXNpbih4dC5jbGFtcCh0LC0xLDEpKX07eHQuY2hvcmRMZW5ndGg9ZnVuY3Rpb24odCxlKXtpZighaCh0KSl0aHJvdyBuZXcgRCgiYW5nbGUgaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEQoInJhZGl1cyBpcyByZXF1aXJlZC4iKTtyZXR1cm4gMiplKk1hdGguc2luKHQqLjUpfTt4dC5sb2dCYXNlPWZ1bmN0aW9uKHQsZSl7aWYoIWgodCkpdGhyb3cgbmV3IEQoIm51bWJlciBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgRCgiYmFzZSBpcyByZXF1aXJlZC4iKTtyZXR1cm4gTWF0aC5sb2codCkvTWF0aC5sb2coZSl9O3h0LmNicnQ9TWF0aC5jYnJ0Pz9mdW5jdGlvbihlKXtsZXQgbj1NYXRoLnBvdyhNYXRoLmFicyhlKSwuMzMzMzMzMzMzMzMzMzMzMyk7cmV0dXJuIGU8MD8tbjpufTt4dC5sb2cyPU1hdGgubG9nMj8/ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubG9nKGUpKk1hdGguTE9HMkV9O3h0LmZvZz1mdW5jdGlvbih0LGUpe2xldCBuPXQqZTtyZXR1cm4gMS1NYXRoLmV4cCgtKG4qbikpfTt4dC5mYXN0QXBwcm94aW1hdGVBdGFuPWZ1bmN0aW9uKHQpe3JldHVybiB5LnR5cGVPZi5udW1iZXIoIngiLHQpLHQqKC0uMTc4NCpNYXRoLmFicyh0KS0uMDY2Myp0KnQrMS4wMzAxKX07eHQuZmFzdEFwcHJveGltYXRlQXRhbjI9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5udW1iZXIoIngiLHQpLHkudHlwZU9mLm51bWJlcigieSIsZSk7bGV0IG4sbz1NYXRoLmFicyh0KTtuPU1hdGguYWJzKGUpO2xldCByPU1hdGgubWF4KG8sbik7bj1NYXRoLm1pbihvLG4pO2xldCBpPW4vcjtpZihpc05hTihpKSl0aHJvdyBuZXcgRCgiZWl0aGVyIHggb3IgeSBtdXN0IGJlIG5vbnplcm8iKTtyZXR1cm4gbz14dC5mYXN0QXBwcm94aW1hdGVBdGFuKGkpLG89TWF0aC5hYnMoZSk+TWF0aC5hYnModCk/eHQuUElfT1ZFUl9UV08tbzpvLG89dDwwP3h0LlBJLW86byxvPWU8MD8tbzpvLG99O1A9eHR9KTtmdW5jdGlvbiBBdCh0LGUsbil7dGhpcy54PXQ/PzAsdGhpcy55PWU/PzAsdGhpcy56PW4/PzB9dmFyIEdsLF8xLGtsLE9tLGVDLG1yLGpjLGEsTHQ9JCgoKT0+e1d0KCk7ZnQoKTtqdCgpO0t0KCk7QXQuZnJvbVNwaGVyaWNhbD1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgic3BoZXJpY2FsIix0KSxoKGUpfHwoZT1uZXcgQXQpO2xldCBuPXQuY2xvY2ssbz10LmNvbmUscj10Lm1hZ25pdHVkZT8/MSxpPXIqTWF0aC5zaW4obyk7cmV0dXJuIGUueD1pKk1hdGguY29zKG4pLGUueT1pKk1hdGguc2luKG4pLGUuej1yKk1hdGguY29zKG8pLGV9O0F0LmZyb21FbGVtZW50cz1mdW5jdGlvbih0LGUsbixvKXtyZXR1cm4gaChvKT8oby54PXQsby55PWUsby56PW4sbyk6bmV3IEF0KHQsZSxuKX07QXQuY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihoKHQpKXJldHVybiBoKGUpPyhlLng9dC54LGUueT10LnksZS56PXQueixlKTpuZXcgQXQodC54LHQueSx0LnopfTtBdC5mcm9tQ2FydGVzaWFuND1BdC5jbG9uZTtBdC5wYWNrZWRMZW5ndGg9MztBdC5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj1uPz8wLGVbbisrXT10LngsZVtuKytdPXQueSxlW25dPXQueixlfTtBdC51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LmRlZmluZWQoImFycmF5Iix0KSxlPWU/PzAsaChuKXx8KG49bmV3IEF0KSxuLng9dFtlKytdLG4ueT10W2UrK10sbi56PXRbZV0sbn07QXQucGFja0FycmF5PWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJhcnJheSIsdCk7bGV0IG49dC5sZW5ndGgsbz1uKjM7aWYoIWgoZSkpZT1uZXcgQXJyYXkobyk7ZWxzZXtpZighQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGghPT1vKXRocm93IG5ldyBEKCJJZiByZXN1bHQgaXMgYSB0eXBlZCBhcnJheSwgaXQgbXVzdCBoYXZlIGV4YWN0bHkgYXJyYXkubGVuZ3RoICogMyBlbGVtZW50cyIpO2UubGVuZ3RoIT09byYmKGUubGVuZ3RoPW8pfWZvcihsZXQgcj0wO3I8bjsrK3IpQXQucGFjayh0W3JdLGUsciozKTtyZXR1cm4gZX07QXQudW5wYWNrQXJyYXk9ZnVuY3Rpb24odCxlKXtpZih5LmRlZmluZWQoImFycmF5Iix0KSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiYXJyYXkubGVuZ3RoIix0Lmxlbmd0aCwzKSx0Lmxlbmd0aCUzIT09MCl0aHJvdyBuZXcgRCgiYXJyYXkgbGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzLiIpO2xldCBuPXQubGVuZ3RoO2goZSk/ZS5sZW5ndGg9bi8zOmU9bmV3IEFycmF5KG4vMyk7Zm9yKGxldCBvPTA7bzxuO28rPTMpe2xldCByPW8vMztlW3JdPUF0LnVucGFjayh0LG8sZVtyXSl9cmV0dXJuIGV9O0F0LmZyb21BcnJheT1BdC51bnBhY2s7QXQubWF4aW11bUNvbXBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLE1hdGgubWF4KHQueCx0LnksdC56KX07QXQubWluaW11bUNvbXBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLE1hdGgubWluKHQueCx0LnksdC56KX07QXQubWluaW11bUJ5Q29tcG9uZW50PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJmaXJzdCIsdCkseS50eXBlT2Yub2JqZWN0KCJzZWNvbmQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9TWF0aC5taW4odC54LGUueCksbi55PU1hdGgubWluKHQueSxlLnkpLG4uej1NYXRoLm1pbih0LnosZS56KSxufTtBdC5tYXhpbXVtQnlDb21wb25lbnQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImZpcnN0Iix0KSx5LnR5cGVPZi5vYmplY3QoInNlY29uZCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD1NYXRoLm1heCh0LngsZS54KSxuLnk9TWF0aC5tYXgodC55LGUueSksbi56PU1hdGgubWF4KHQueixlLnopLG59O0F0LmNsYW1wPWZ1bmN0aW9uKHQsZSxuLG8pe3kudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkudHlwZU9mLm9iamVjdCgibWluIixlKSx5LnR5cGVPZi5vYmplY3QoIm1heCIsbikseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG8pO2xldCByPVAuY2xhbXAodC54LGUueCxuLngpLGk9UC5jbGFtcCh0LnksZS55LG4ueSkscz1QLmNsYW1wKHQueixlLnosbi56KTtyZXR1cm4gby54PXIsby55PWksby56PXMsb307QXQubWFnbml0dWRlU3F1YXJlZD1mdW5jdGlvbih0KXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLHQueCp0LngrdC55KnQueSt0LnoqdC56fTtBdC5tYWduaXR1ZGU9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydChBdC5tYWduaXR1ZGVTcXVhcmVkKHQpKX07R2w9bmV3IEF0O0F0LmRpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSksQXQuc3VidHJhY3QodCxlLEdsKSxBdC5tYWduaXR1ZGUoR2wpfTtBdC5kaXN0YW5jZVNxdWFyZWQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSxBdC5zdWJ0cmFjdCh0LGUsR2wpLEF0Lm1hZ25pdHVkZVNxdWFyZWQoR2wpfTtBdC5ub3JtYWxpemU9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpO2xldCBuPUF0Lm1hZ25pdHVkZSh0KTtpZihlLng9dC54L24sZS55PXQueS9uLGUuej10Lnovbixpc05hTihlLngpfHxpc05hTihlLnkpfHxpc05hTihlLnopKXRocm93IG5ldyBEKCJub3JtYWxpemVkIHJlc3VsdCBpcyBub3QgYSBudW1iZXIiKTtyZXR1cm4gZX07QXQuZG90PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSksdC54KmUueCt0LnkqZS55K3QueiplLnp9O0F0Lm11bHRpcGx5Q29tcG9uZW50cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD10LngqZS54LG4ueT10LnkqZS55LG4uej10LnoqZS56LG59O0F0LmRpdmlkZUNvbXBvbmVudHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54L2UueCxuLnk9dC55L2UueSxuLno9dC56L2UueixufTtBdC5hZGQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54K2UueCxuLnk9dC55K2UueSxuLno9dC56K2UueixufTtBdC5zdWJ0cmFjdD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD10LngtZS54LG4ueT10LnktZS55LG4uej10LnotZS56LG59O0F0Lm11bHRpcGx5QnlTY2FsYXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2YubnVtYmVyKCJzY2FsYXIiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54KmUsbi55PXQueSplLG4uej10LnoqZSxufTtBdC5kaXZpZGVCeVNjYWxhcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSx5LnR5cGVPZi5udW1iZXIoInNjYWxhciIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD10LngvZSxuLnk9dC55L2Usbi56PXQuei9lLG59O0F0Lm5lZ2F0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpLGUueD0tdC54LGUueT0tdC55LGUuej0tdC56LGV9O0F0LmFicz1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpLGUueD1NYXRoLmFicyh0LngpLGUueT1NYXRoLmFicyh0LnkpLGUuej1NYXRoLmFicyh0LnopLGV9O18xPW5ldyBBdDtBdC5sZXJwPWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInN0YXJ0Iix0KSx5LnR5cGVPZi5vYmplY3QoImVuZCIsZSkseS50eXBlT2YubnVtYmVyKCJ0IixuKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbyksQXQubXVsdGlwbHlCeVNjYWxhcihlLG4sXzEpLG89QXQubXVsdGlwbHlCeVNjYWxhcih0LDEtbixvKSxBdC5hZGQoXzEsbyxvKX07a2w9bmV3IEF0LE9tPW5ldyBBdDtBdC5hbmdsZUJldHdlZW49ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLEF0Lm5vcm1hbGl6ZSh0LGtsKSxBdC5ub3JtYWxpemUoZSxPbSk7bGV0IG49QXQuZG90KGtsLE9tKSxvPUF0Lm1hZ25pdHVkZShBdC5jcm9zcyhrbCxPbSxrbCkpO3JldHVybiBNYXRoLmF0YW4yKG8sbil9O2VDPW5ldyBBdDtBdC5tb3N0T3J0aG9nb25hbEF4aXM9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpO2xldCBuPUF0Lm5vcm1hbGl6ZSh0LGVDKTtyZXR1cm4gQXQuYWJzKG4sbiksbi54PD1uLnk/bi54PD1uLno/ZT1BdC5jbG9uZShBdC5VTklUX1gsZSk6ZT1BdC5jbG9uZShBdC5VTklUX1osZSk6bi55PD1uLno/ZT1BdC5jbG9uZShBdC5VTklUX1ksZSk6ZT1BdC5jbG9uZShBdC5VTklUX1osZSksZX07QXQucHJvamVjdFZlY3Rvcj1mdW5jdGlvbih0LGUsbil7eS5kZWZpbmVkKCJhIix0KSx5LmRlZmluZWQoImIiLGUpLHkuZGVmaW5lZCgicmVzdWx0IixuKTtsZXQgbz1BdC5kb3QodCxlKS9BdC5kb3QoZSxlKTtyZXR1cm4gQXQubXVsdGlwbHlCeVNjYWxhcihlLG8sbil9O0F0LmVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZXx8aCh0KSYmaChlKSYmdC54PT09ZS54JiZ0Lnk9PT1lLnkmJnQuej09PWUuen07QXQuZXF1YWxzQXJyYXk9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0Lng9PT1lW25dJiZ0Lnk9PT1lW24rMV0mJnQuej09PWVbbisyXX07QXQuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbixvKXtyZXR1cm4gdD09PWV8fGgodCkmJmgoZSkmJlAuZXF1YWxzRXBzaWxvbih0LngsZS54LG4sbykmJlAuZXF1YWxzRXBzaWxvbih0LnksZS55LG4sbykmJlAuZXF1YWxzRXBzaWxvbih0LnosZS56LG4sbyl9O0F0LmNyb3NzPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz10Lngscj10LnksaT10Lnoscz1lLngsZj1lLnksdT1lLnosYz1yKnUtaSpmLGw9aSpzLW8qdSxwPW8qZi1yKnM7cmV0dXJuIG4ueD1jLG4ueT1sLG4uej1wLG59O0F0Lm1pZHBvaW50PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi54PSh0LngrZS54KSouNSxuLnk9KHQueStlLnkpKi41LG4uej0odC56K2UueikqLjUsbn07QXQuZnJvbURlZ3JlZXM9ZnVuY3Rpb24odCxlLG4sbyxyKXtyZXR1cm4geS50eXBlT2YubnVtYmVyKCJsb25naXR1ZGUiLHQpLHkudHlwZU9mLm51bWJlcigibGF0aXR1ZGUiLGUpLHQ9UC50b1JhZGlhbnModCksZT1QLnRvUmFkaWFucyhlKSxBdC5mcm9tUmFkaWFucyh0LGUsbixvLHIpfTttcj1uZXcgQXQsamM9bmV3IEF0O0F0Ll9lbGxpcHNvaWRSYWRpaVNxdWFyZWQ9bmV3IEF0KDYzNzgxMzcqNjM3ODEzNyw2Mzc4MTM3KjYzNzgxMzcsNjM1Njc1MjMxNDI0NTE3OWUtOSo2MzU2NzUyMzE0MjQ1MTc5ZS05KTtBdC5mcm9tUmFkaWFucz1mdW5jdGlvbih0LGUsbixvLHIpe3kudHlwZU9mLm51bWJlcigibG9uZ2l0dWRlIix0KSx5LnR5cGVPZi5udW1iZXIoImxhdGl0dWRlIixlKSxuPW4/PzA7bGV0IGk9aChvKT9vLnJhZGlpU3F1YXJlZDpBdC5fZWxsaXBzb2lkUmFkaWlTcXVhcmVkLHM9TWF0aC5jb3MoZSk7bXIueD1zKk1hdGguY29zKHQpLG1yLnk9cypNYXRoLnNpbih0KSxtci56PU1hdGguc2luKGUpLG1yPUF0Lm5vcm1hbGl6ZShtcixtciksQXQubXVsdGlwbHlDb21wb25lbnRzKGksbXIsamMpO2xldCBmPU1hdGguc3FydChBdC5kb3QobXIsamMpKTtyZXR1cm4gamM9QXQuZGl2aWRlQnlTY2FsYXIoamMsZixqYyksbXI9QXQubXVsdGlwbHlCeVNjYWxhcihtcixuLG1yKSxoKHIpfHwocj1uZXcgQXQpLEF0LmFkZChqYyxtcixyKX07QXQuZnJvbURlZ3JlZXNBcnJheT1mdW5jdGlvbih0LGUsbil7aWYoeS5kZWZpbmVkKCJjb29yZGluYXRlcyIsdCksdC5sZW5ndGg8Mnx8dC5sZW5ndGglMiE9PTApdGhyb3cgbmV3IEQoInRoZSBudW1iZXIgb2YgY29vcmRpbmF0ZXMgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDIgYW5kIGF0IGxlYXN0IDIiKTtsZXQgbz10Lmxlbmd0aDtoKG4pP24ubGVuZ3RoPW8vMjpuPW5ldyBBcnJheShvLzIpO2ZvcihsZXQgcj0wO3I8bztyKz0yKXtsZXQgaT10W3JdLHM9dFtyKzFdLGY9ci8yO25bZl09QXQuZnJvbURlZ3JlZXMoaSxzLDAsZSxuW2ZdKX1yZXR1cm4gbn07QXQuZnJvbVJhZGlhbnNBcnJheT1mdW5jdGlvbih0LGUsbil7aWYoeS5kZWZpbmVkKCJjb29yZGluYXRlcyIsdCksdC5sZW5ndGg8Mnx8dC5sZW5ndGglMiE9PTApdGhyb3cgbmV3IEQoInRoZSBudW1iZXIgb2YgY29vcmRpbmF0ZXMgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDIgYW5kIGF0IGxlYXN0IDIiKTtsZXQgbz10Lmxlbmd0aDtoKG4pP24ubGVuZ3RoPW8vMjpuPW5ldyBBcnJheShvLzIpO2ZvcihsZXQgcj0wO3I8bztyKz0yKXtsZXQgaT10W3JdLHM9dFtyKzFdLGY9ci8yO25bZl09QXQuZnJvbVJhZGlhbnMoaSxzLDAsZSxuW2ZdKX1yZXR1cm4gbn07QXQuZnJvbURlZ3JlZXNBcnJheUhlaWdodHM9ZnVuY3Rpb24odCxlLG4pe2lmKHkuZGVmaW5lZCgiY29vcmRpbmF0ZXMiLHQpLHQubGVuZ3RoPDN8fHQubGVuZ3RoJTMhPT0wKXRocm93IG5ldyBEKCJ0aGUgbnVtYmVyIG9mIGNvb3JkaW5hdGVzIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzIGFuZCBhdCBsZWFzdCAzIik7bGV0IG89dC5sZW5ndGg7aChuKT9uLmxlbmd0aD1vLzM6bj1uZXcgQXJyYXkoby8zKTtmb3IobGV0IHI9MDtyPG87cis9Myl7bGV0IGk9dFtyXSxzPXRbcisxXSxmPXRbcisyXSx1PXIvMztuW3VdPUF0LmZyb21EZWdyZWVzKGkscyxmLGUsblt1XSl9cmV0dXJuIG59O0F0LmZyb21SYWRpYW5zQXJyYXlIZWlnaHRzPWZ1bmN0aW9uKHQsZSxuKXtpZih5LmRlZmluZWQoImNvb3JkaW5hdGVzIix0KSx0Lmxlbmd0aDwzfHx0Lmxlbmd0aCUzIT09MCl0aHJvdyBuZXcgRCgidGhlIG51bWJlciBvZiBjb29yZGluYXRlcyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMyBhbmQgYXQgbGVhc3QgMyIpO2xldCBvPXQubGVuZ3RoO2gobik/bi5sZW5ndGg9by8zOm49bmV3IEFycmF5KG8vMyk7Zm9yKGxldCByPTA7cjxvO3IrPTMpe2xldCBpPXRbcl0scz10W3IrMV0sZj10W3IrMl0sdT1yLzM7blt1XT1BdC5mcm9tUmFkaWFucyhpLHMsZixlLG5bdV0pfXJldHVybiBufTtBdC5aRVJPPU9iamVjdC5mcmVlemUobmV3IEF0KDAsMCwwKSk7QXQuT05FPU9iamVjdC5mcmVlemUobmV3IEF0KDEsMSwxKSk7QXQuVU5JVF9YPU9iamVjdC5mcmVlemUobmV3IEF0KDEsMCwwKSk7QXQuVU5JVF9ZPU9iamVjdC5mcmVlemUobmV3IEF0KDAsMSwwKSk7QXQuVU5JVF9aPU9iamVjdC5mcmVlemUobmV3IEF0KDAsMCwxKSk7QXQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiBBdC5jbG9uZSh0aGlzLHQpfTtBdC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiBBdC5lcXVhbHModGhpcyx0KX07QXQucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlLG4pe3JldHVybiBBdC5lcXVhbHNFcHNpbG9uKHRoaXMsdCxlLG4pfTtBdC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5gKCR7dGhpcy54fSwgJHt0aGlzLnl9LCAke3RoaXMuen0pYH07YT1BdH0pO2Z1bmN0aW9uIHJDKHQsZSxuLG8scil7aWYoIWgodCkpdGhyb3cgbmV3IEQoImNhcnRlc2lhbiBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgRCgib25lT3ZlclJhZGlpIGlzIHJlcXVpcmVkLiIpO2lmKCFoKG4pKXRocm93IG5ldyBEKCJvbmVPdmVyUmFkaWlTcXVhcmVkIGlzIHJlcXVpcmVkLiIpO2lmKCFoKG8pKXRocm93IG5ldyBEKCJjZW50ZXJUb2xlcmFuY2VTcXVhcmVkIGlzIHJlcXVpcmVkLiIpO2xldCBpPXQueCxzPXQueSxmPXQueix1PWUueCxjPWUueSxsPWUueixwPWkqaSp1KnUsZD1zKnMqYypjLG09ZipmKmwqbCxfPXArZCttLGc9TWF0aC5zcXJ0KDEvXyksYj1hLm11bHRpcGx5QnlTY2FsYXIodCxnLG5DKTtpZihfPG8pcmV0dXJuIGlzRmluaXRlKGcpP2EuY2xvbmUoYixyKTp2b2lkIDA7bGV0IFQ9bi54LE89bi55LEU9bi56LHc9b0M7dy54PWIueCpUKjIsdy55PWIueSpPKjIsdy56PWIueipFKjI7bGV0IEM9KDEtZykqYS5tYWduaXR1ZGUodCkvKC41KmEubWFnbml0dWRlKHcpKSxNPTAsTixGLEksdixCLEEsUyx4LEwseixqO2Rve0MtPU0sST0xLygxK0MqVCksdj0xLygxK0MqTyksQj0xLygxK0MqRSksQT1JKkksUz12KnYseD1CKkIsTD1BKkksej1TKnYsaj14KkIsTj1wKkErZCpTK20qeC0xLEY9cCpMKlQrZCp6Kk8rbSpqKkU7bGV0IGs9LTIqRjtNPU4va313aGlsZShNYXRoLmFicyhOKT5QLkVQU0lMT04xMik7cmV0dXJuIGgocik/KHIueD1pKkksci55PXMqdixyLno9ZipCLHIpOm5ldyBhKGkqSSxzKnYsZipCKX12YXIgbkMsb0MsVmwsRW09JCgoKT0+e0x0KCk7ZnQoKTtqdCgpO0t0KCk7bkM9bmV3IGEsb0M9bmV3IGE7Vmw9ckN9KTtmdW5jdGlvbiBfbih0LGUsbil7dGhpcy5sb25naXR1ZGU9dD8/MCx0aGlzLmxhdGl0dWRlPWU/PzAsdGhpcy5oZWlnaHQ9bj8/MH12YXIgaUMsc0MsY0MsY3QsSWU9JCgoKT0+e0x0KCk7V3QoKTtmdCgpO0t0KCk7RW0oKTtfbi5mcm9tUmFkaWFucz1mdW5jdGlvbih0LGUsbixvKXtyZXR1cm4geS50eXBlT2YubnVtYmVyKCJsb25naXR1ZGUiLHQpLHkudHlwZU9mLm51bWJlcigibGF0aXR1ZGUiLGUpLG49bj8/MCxoKG8pPyhvLmxvbmdpdHVkZT10LG8ubGF0aXR1ZGU9ZSxvLmhlaWdodD1uLG8pOm5ldyBfbih0LGUsbil9O19uLmZyb21EZWdyZWVzPWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB5LnR5cGVPZi5udW1iZXIoImxvbmdpdHVkZSIsdCkseS50eXBlT2YubnVtYmVyKCJsYXRpdHVkZSIsZSksdD1QLnRvUmFkaWFucyh0KSxlPVAudG9SYWRpYW5zKGUpLF9uLmZyb21SYWRpYW5zKHQsZSxuLG8pfTtpQz1uZXcgYSxzQz1uZXcgYSxjQz1uZXcgYTtfbi5fZWxsaXBzb2lkT25lT3ZlclJhZGlpPW5ldyBhKDEvNjM3ODEzNywxLzYzNzgxMzcsMS82MzU2NzUyMzE0MjQ1MTc5ZS05KTtfbi5fZWxsaXBzb2lkT25lT3ZlclJhZGlpU3F1YXJlZD1uZXcgYSgxLyg2Mzc4MTM3KjYzNzgxMzcpLDEvKDYzNzgxMzcqNjM3ODEzNyksMS8oNjM1Njc1MjMxNDI0NTE3OWUtOSo2MzU2NzUyMzE0MjQ1MTc5ZS05KSk7X24uX2VsbGlwc29pZENlbnRlclRvbGVyYW5jZVNxdWFyZWQ9UC5FUFNJTE9OMTtfbi5mcm9tQ2FydGVzaWFuPWZ1bmN0aW9uKHQsZSxuKXtsZXQgbz1oKGUpP2Uub25lT3ZlclJhZGlpOl9uLl9lbGxpcHNvaWRPbmVPdmVyUmFkaWkscj1oKGUpP2Uub25lT3ZlclJhZGlpU3F1YXJlZDpfbi5fZWxsaXBzb2lkT25lT3ZlclJhZGlpU3F1YXJlZCxpPWgoZSk/ZS5fY2VudGVyVG9sZXJhbmNlU3F1YXJlZDpfbi5fZWxsaXBzb2lkQ2VudGVyVG9sZXJhbmNlU3F1YXJlZCxzPVZsKHQsbyxyLGksc0MpO2lmKCFoKHMpKXJldHVybjtsZXQgZj1hLm11bHRpcGx5Q29tcG9uZW50cyhzLHIsaUMpO2Y9YS5ub3JtYWxpemUoZixmKTtsZXQgdT1hLnN1YnRyYWN0KHQscyxjQyksYz1NYXRoLmF0YW4yKGYueSxmLngpLGw9TWF0aC5hc2luKGYueikscD1QLnNpZ24oYS5kb3QodSx0KSkqYS5tYWduaXR1ZGUodSk7cmV0dXJuIGgobik/KG4ubG9uZ2l0dWRlPWMsbi5sYXRpdHVkZT1sLG4uaGVpZ2h0PXAsbik6bmV3IF9uKGMsbCxwKX07X24udG9DYXJ0ZXNpYW49ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LmRlZmluZWQoImNhcnRvZ3JhcGhpYyIsdCksYS5mcm9tUmFkaWFucyh0LmxvbmdpdHVkZSx0LmxhdGl0dWRlLHQuaGVpZ2h0LGUsbil9O19uLmNsb25lPWZ1bmN0aW9uKHQsZSl7aWYoaCh0KSlyZXR1cm4gaChlKT8oZS5sb25naXR1ZGU9dC5sb25naXR1ZGUsZS5sYXRpdHVkZT10LmxhdGl0dWRlLGUuaGVpZ2h0PXQuaGVpZ2h0LGUpOm5ldyBfbih0LmxvbmdpdHVkZSx0LmxhdGl0dWRlLHQuaGVpZ2h0KX07X24uZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHxoKHQpJiZoKGUpJiZ0LmxvbmdpdHVkZT09PWUubG9uZ2l0dWRlJiZ0LmxhdGl0dWRlPT09ZS5sYXRpdHVkZSYmdC5oZWlnaHQ9PT1lLmhlaWdodH07X24uZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG49bj8/MCx0PT09ZXx8aCh0KSYmaChlKSYmTWF0aC5hYnModC5sb25naXR1ZGUtZS5sb25naXR1ZGUpPD1uJiZNYXRoLmFicyh0LmxhdGl0dWRlLWUubGF0aXR1ZGUpPD1uJiZNYXRoLmFicyh0LmhlaWdodC1lLmhlaWdodCk8PW59O19uLlpFUk89T2JqZWN0LmZyZWV6ZShuZXcgX24oMCwwLDApKTtfbi5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIF9uLmNsb25lKHRoaXMsdCl9O19uLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIF9uLmVxdWFscyh0aGlzLHQpfTtfbi5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUpe3JldHVybiBfbi5lcXVhbHNFcHNpbG9uKHRoaXMsdCxlKX07X24ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuYCgke3RoaXMubG9uZ2l0dWRlfSwgJHt0aGlzLmxhdGl0dWRlfSwgJHt0aGlzLmhlaWdodH0pYH07Y3Q9X259KTtmdW5jdGlvbiB6dCh0LGUpe3RoaXMueD10Pz8wLHRoaXMueT1lPz8wfXZhciB6bCx5MSxnMSxBMSxhQyxKLFVlPSQoKCk9PntXdCgpO2Z0KCk7anQoKTtLdCgpO3p0LmZyb21FbGVtZW50cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGgobik/KG4ueD10LG4ueT1lLG4pOm5ldyB6dCh0LGUpfTt6dC5jbG9uZT1mdW5jdGlvbih0LGUpe2lmKGgodCkpcmV0dXJuIGgoZSk/KGUueD10LngsZS55PXQueSxlKTpuZXcgenQodC54LHQueSl9O3p0LmZyb21DYXJ0ZXNpYW4zPXp0LmNsb25lO3p0LmZyb21DYXJ0ZXNpYW40PXp0LmNsb25lO3p0LnBhY2tlZExlbmd0aD0yO3p0LnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPW4/PzAsZVtuKytdPXQueCxlW25dPXQueSxlfTt6dC51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LmRlZmluZWQoImFycmF5Iix0KSxlPWU/PzAsaChuKXx8KG49bmV3IHp0KSxuLng9dFtlKytdLG4ueT10W2VdLG59O3p0LnBhY2tBcnJheT1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgiYXJyYXkiLHQpO2xldCBuPXQubGVuZ3RoLG89bioyO2lmKCFoKGUpKWU9bmV3IEFycmF5KG8pO2Vsc2V7aWYoIUFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoIT09byl0aHJvdyBuZXcgRCgiSWYgcmVzdWx0IGlzIGEgdHlwZWQgYXJyYXksIGl0IG11c3QgaGF2ZSBleGFjdGx5IGFycmF5Lmxlbmd0aCAqIDIgZWxlbWVudHMiKTtlLmxlbmd0aCE9PW8mJihlLmxlbmd0aD1vKX1mb3IobGV0IHI9MDtyPG47KytyKXp0LnBhY2sodFtyXSxlLHIqMik7cmV0dXJuIGV9O3p0LnVucGFja0FycmF5PWZ1bmN0aW9uKHQsZSl7aWYoeS5kZWZpbmVkKCJhcnJheSIsdCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImFycmF5Lmxlbmd0aCIsdC5sZW5ndGgsMiksdC5sZW5ndGglMiE9PTApdGhyb3cgbmV3IEQoImFycmF5IGxlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMi4iKTtsZXQgbj10Lmxlbmd0aDtoKGUpP2UubGVuZ3RoPW4vMjplPW5ldyBBcnJheShuLzIpO2ZvcihsZXQgbz0wO288bjtvKz0yKXtsZXQgcj1vLzI7ZVtyXT16dC51bnBhY2sodCxvLGVbcl0pfXJldHVybiBlfTt6dC5mcm9tQXJyYXk9enQudW5wYWNrO3p0Lm1heGltdW1Db21wb25lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSxNYXRoLm1heCh0LngsdC55KX07enQubWluaW11bUNvbXBvbmVudD1mdW5jdGlvbih0KXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLE1hdGgubWluKHQueCx0LnkpfTt6dC5taW5pbXVtQnlDb21wb25lbnQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImZpcnN0Iix0KSx5LnR5cGVPZi5vYmplY3QoInNlY29uZCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD1NYXRoLm1pbih0LngsZS54KSxuLnk9TWF0aC5taW4odC55LGUueSksbn07enQubWF4aW11bUJ5Q29tcG9uZW50PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJmaXJzdCIsdCkseS50eXBlT2Yub2JqZWN0KCJzZWNvbmQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9TWF0aC5tYXgodC54LGUueCksbi55PU1hdGgubWF4KHQueSxlLnkpLG59O3p0LmNsYW1wPWZ1bmN0aW9uKHQsZSxuLG8pe3kudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkudHlwZU9mLm9iamVjdCgibWluIixlKSx5LnR5cGVPZi5vYmplY3QoIm1heCIsbikseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG8pO2xldCByPVAuY2xhbXAodC54LGUueCxuLngpLGk9UC5jbGFtcCh0LnksZS55LG4ueSk7cmV0dXJuIG8ueD1yLG8ueT1pLG99O3p0Lm1hZ25pdHVkZVNxdWFyZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSx0LngqdC54K3QueSp0Lnl9O3p0Lm1hZ25pdHVkZT1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KHp0Lm1hZ25pdHVkZVNxdWFyZWQodCkpfTt6bD1uZXcgenQ7enQuZGlzdGFuY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx6dC5zdWJ0cmFjdCh0LGUsemwpLHp0Lm1hZ25pdHVkZSh6bCl9O3p0LmRpc3RhbmNlU3F1YXJlZD1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHp0LnN1YnRyYWN0KHQsZSx6bCksenQubWFnbml0dWRlU3F1YXJlZCh6bCl9O3p0Lm5vcm1hbGl6ZT1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSk7bGV0IG49enQubWFnbml0dWRlKHQpO2lmKGUueD10LngvbixlLnk9dC55L24saXNOYU4oZS54KXx8aXNOYU4oZS55KSl0aHJvdyBuZXcgRCgibm9ybWFsaXplZCByZXN1bHQgaXMgbm90IGEgbnVtYmVyIik7cmV0dXJuIGV9O3p0LmRvdD1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHQueCplLngrdC55KmUueX07enQuY3Jvc3M9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx0LngqZS55LXQueSplLnh9O3p0Lm11bHRpcGx5Q29tcG9uZW50cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD10LngqZS54LG4ueT10LnkqZS55LG59O3p0LmRpdmlkZUNvbXBvbmVudHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54L2UueCxuLnk9dC55L2UueSxufTt6dC5hZGQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54K2UueCxuLnk9dC55K2UueSxufTt6dC5zdWJ0cmFjdD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD10LngtZS54LG4ueT10LnktZS55LG59O3p0Lm11bHRpcGx5QnlTY2FsYXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2YubnVtYmVyKCJzY2FsYXIiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54KmUsbi55PXQueSplLG59O3p0LmRpdmlkZUJ5U2NhbGFyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLHkudHlwZU9mLm51bWJlcigic2NhbGFyIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi54PXQueC9lLG4ueT10LnkvZSxufTt6dC5uZWdhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKSxlLng9LXQueCxlLnk9LXQueSxlfTt6dC5hYnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKSxlLng9TWF0aC5hYnModC54KSxlLnk9TWF0aC5hYnModC55KSxlfTt5MT1uZXcgenQ7enQubGVycD1mdW5jdGlvbih0LGUsbixvKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJzdGFydCIsdCkseS50eXBlT2Yub2JqZWN0KCJlbmQiLGUpLHkudHlwZU9mLm51bWJlcigidCIsbikseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG8pLHp0Lm11bHRpcGx5QnlTY2FsYXIoZSxuLHkxKSxvPXp0Lm11bHRpcGx5QnlTY2FsYXIodCwxLW4sbyksenQuYWRkKHkxLG8sbyl9O2cxPW5ldyB6dCxBMT1uZXcgenQ7enQuYW5nbGVCZXR3ZWVuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSksenQubm9ybWFsaXplKHQsZzEpLHp0Lm5vcm1hbGl6ZShlLEExKSxQLmFjb3NDbGFtcGVkKHp0LmRvdChnMSxBMSkpfTthQz1uZXcgenQ7enQubW9zdE9ydGhvZ29uYWxBeGlzPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKTtsZXQgbj16dC5ub3JtYWxpemUodCxhQyk7cmV0dXJuIHp0LmFicyhuLG4pLG4ueDw9bi55P2U9enQuY2xvbmUoenQuVU5JVF9YLGUpOmU9enQuY2xvbmUoenQuVU5JVF9ZLGUpLGV9O3p0LmVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZXx8aCh0KSYmaChlKSYmdC54PT09ZS54JiZ0Lnk9PT1lLnl9O3p0LmVxdWFsc0FycmF5PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdC54PT09ZVtuXSYmdC55PT09ZVtuKzFdfTt6dC5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB0PT09ZXx8aCh0KSYmaChlKSYmUC5lcXVhbHNFcHNpbG9uKHQueCxlLngsbixvKSYmUC5lcXVhbHNFcHNpbG9uKHQueSxlLnksbixvKX07enQuWkVSTz1PYmplY3QuZnJlZXplKG5ldyB6dCgwLDApKTt6dC5PTkU9T2JqZWN0LmZyZWV6ZShuZXcgenQoMSwxKSk7enQuVU5JVF9YPU9iamVjdC5mcmVlemUobmV3IHp0KDEsMCkpO3p0LlVOSVRfWT1PYmplY3QuZnJlZXplKG5ldyB6dCgwLDEpKTt6dC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIHp0LmNsb25lKHRoaXMsdCl9O3p0LnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIHp0LmVxdWFscyh0aGlzLHQpfTt6dC5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHp0LmVxdWFsc0Vwc2lsb24odGhpcyx0LGUsbil9O3p0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybmAoJHt0aGlzLnh9LCAke3RoaXMueX0pYH07Sj16dH0pO2Z1bmN0aW9uIFQxKHQsZSxuLG8pe2U9ZT8/MCxuPW4/PzAsbz1vPz8wLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJ4IixlLDApLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJ5IixuLDApLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJ6IixvLDApLHQuX3JhZGlpPW5ldyBhKGUsbixvKSx0Ll9yYWRpaVNxdWFyZWQ9bmV3IGEoZSplLG4qbixvKm8pLHQuX3JhZGlpVG9UaGVGb3VydGg9bmV3IGEoZSplKmUqZSxuKm4qbipuLG8qbypvKm8pLHQuX29uZU92ZXJSYWRpaT1uZXcgYShlPT09MD8wOjEvZSxuPT09MD8wOjEvbixvPT09MD8wOjEvbyksdC5fb25lT3ZlclJhZGlpU3F1YXJlZD1uZXcgYShlPT09MD8wOjEvKGUqZSksbj09PTA/MDoxLyhuKm4pLG89PT0wPzA6MS8obypvKSksdC5fbWluaW11bVJhZGl1cz1NYXRoLm1pbihlLG4sbyksdC5fbWF4aW11bVJhZGl1cz1NYXRoLm1heChlLG4sbyksdC5fY2VudGVyVG9sZXJhbmNlU3F1YXJlZD1QLkVQU0lMT04xLHQuX3JhZGlpU3F1YXJlZC56IT09MCYmKHQuX3NxdWFyZWRYT3ZlclNxdWFyZWRaPXQuX3JhZGlpU3F1YXJlZC54L3QuX3JhZGlpU3F1YXJlZC56KX1mdW5jdGlvbiB4ZSh0LGUsbil7dGhpcy5fcmFkaWk9dm9pZCAwLHRoaXMuX3JhZGlpU3F1YXJlZD12b2lkIDAsdGhpcy5fcmFkaWlUb1RoZUZvdXJ0aD12b2lkIDAsdGhpcy5fb25lT3ZlclJhZGlpPXZvaWQgMCx0aGlzLl9vbmVPdmVyUmFkaWlTcXVhcmVkPXZvaWQgMCx0aGlzLl9taW5pbXVtUmFkaXVzPXZvaWQgMCx0aGlzLl9tYXhpbXVtUmFkaXVzPXZvaWQgMCx0aGlzLl9jZW50ZXJUb2xlcmFuY2VTcXVhcmVkPXZvaWQgMCx0aGlzLl9zcXVhcmVkWE92ZXJTcXVhcmVkWj12b2lkIDAsVDEodGhpcyx0LGUsbil9ZnVuY3Rpb24gYjEodCxlLG4pe3kudHlwZU9mLm51bWJlcigiYSIsdCkseS50eXBlT2YubnVtYmVyKCJiIixlKSx5LnR5cGVPZi5mdW5jKCJmdW5jIixuKTtsZXQgbz0uNSooZSt0KSxyPS41KihlLXQpLGk9MDtmb3IobGV0IHM9MDtzPDU7cysrKXtsZXQgZj1yKmhDW3NdO2krPV9DW3NdKihuKG8rZikrbihvLWYpKX1yZXR1cm4gaSo9cixpfXZhciBmQyx1QyxsQyxwQyxkQyxtQyxoQyxfQyxZLCR0PSQoKCk9PntVZSgpO0x0KCk7SWUoKTtXdCgpO2Z0KCk7anQoKTtLdCgpO0VtKCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoeGUucHJvdG90eXBlLHtyYWRpaTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JhZGlpfX0scmFkaWlTcXVhcmVkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmFkaWlTcXVhcmVkfX0scmFkaWlUb1RoZUZvdXJ0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JhZGlpVG9UaGVGb3VydGh9fSxvbmVPdmVyUmFkaWk6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vbmVPdmVyUmFkaWl9fSxvbmVPdmVyUmFkaWlTcXVhcmVkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb25lT3ZlclJhZGlpU3F1YXJlZH19LG1pbmltdW1SYWRpdXM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9taW5pbXVtUmFkaXVzfX0sbWF4aW11bVJhZGl1czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21heGltdW1SYWRpdXN9fX0pO3hlLmNsb25lPWZ1bmN0aW9uKHQsZSl7aWYoIWgodCkpcmV0dXJuO2xldCBuPXQuX3JhZGlpO3JldHVybiBoKGUpPyhhLmNsb25lKG4sZS5fcmFkaWkpLGEuY2xvbmUodC5fcmFkaWlTcXVhcmVkLGUuX3JhZGlpU3F1YXJlZCksYS5jbG9uZSh0Ll9yYWRpaVRvVGhlRm91cnRoLGUuX3JhZGlpVG9UaGVGb3VydGgpLGEuY2xvbmUodC5fb25lT3ZlclJhZGlpLGUuX29uZU92ZXJSYWRpaSksYS5jbG9uZSh0Ll9vbmVPdmVyUmFkaWlTcXVhcmVkLGUuX29uZU92ZXJSYWRpaVNxdWFyZWQpLGUuX21pbmltdW1SYWRpdXM9dC5fbWluaW11bVJhZGl1cyxlLl9tYXhpbXVtUmFkaXVzPXQuX21heGltdW1SYWRpdXMsZS5fY2VudGVyVG9sZXJhbmNlU3F1YXJlZD10Ll9jZW50ZXJUb2xlcmFuY2VTcXVhcmVkLGUpOm5ldyB4ZShuLngsbi55LG4ueil9O3hlLmZyb21DYXJ0ZXNpYW4zPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgoZSl8fChlPW5ldyB4ZSksaCh0KSYmVDEoZSx0LngsdC55LHQueiksZX07eGUuV0dTODQ9T2JqZWN0LmZyZWV6ZShuZXcgeGUoNjM3ODEzNyw2Mzc4MTM3LDYzNTY3NTIzMTQyNDUxNzllLTkpKTt4ZS5VTklUX1NQSEVSRT1PYmplY3QuZnJlZXplKG5ldyB4ZSgxLDEsMSkpO3hlLk1PT049T2JqZWN0LmZyZWV6ZShuZXcgeGUoUC5MVU5BUl9SQURJVVMsUC5MVU5BUl9SQURJVVMsUC5MVU5BUl9SQURJVVMpKTt4ZS5fZGVmYXVsdD14ZS5XR1M4NDtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh4ZSx7ZGVmYXVsdDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHhlLl9kZWZhdWx0fSxzZXQ6ZnVuY3Rpb24odCl7eS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseGUuX2RlZmF1bHQ9dCxhLl9lbGxpcHNvaWRSYWRpaVNxdWFyZWQ9dC5yYWRpaVNxdWFyZWQsY3QuX2VsbGlwc29pZE9uZU92ZXJSYWRpaT10Lm9uZU92ZXJSYWRpaSxjdC5fZWxsaXBzb2lkT25lT3ZlclJhZGlpU3F1YXJlZD10Lm9uZU92ZXJSYWRpaVNxdWFyZWQsY3QuX2VsbGlwc29pZENlbnRlclRvbGVyYW5jZVNxdWFyZWQ9dC5fY2VudGVyVG9sZXJhbmNlU3F1YXJlZH19fSk7eGUucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiB4ZS5jbG9uZSh0aGlzLHQpfTt4ZS5wYWNrZWRMZW5ndGg9YS5wYWNrZWRMZW5ndGg7eGUucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLG49bj8/MCxhLnBhY2sodC5fcmFkaWksZSxuKSxlfTt4ZS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3kuZGVmaW5lZCgiYXJyYXkiLHQpLGU9ZT8/MDtsZXQgbz1hLnVucGFjayh0LGUpO3JldHVybiB4ZS5mcm9tQ2FydGVzaWFuMyhvLG4pfTt4ZS5wcm90b3R5cGUuZ2VvY2VudHJpY1N1cmZhY2VOb3JtYWw9YS5ub3JtYWxpemU7eGUucHJvdG90eXBlLmdlb2RldGljU3VyZmFjZU5vcm1hbENhcnRvZ3JhcGhpYz1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgiY2FydG9ncmFwaGljIix0KTtsZXQgbj10LmxvbmdpdHVkZSxvPXQubGF0aXR1ZGUscj1NYXRoLmNvcyhvKSxpPXIqTWF0aC5jb3Mobikscz1yKk1hdGguc2luKG4pLGY9TWF0aC5zaW4obyk7cmV0dXJuIGgoZSl8fChlPW5ldyBhKSxlLng9aSxlLnk9cyxlLno9ZixhLm5vcm1hbGl6ZShlLGUpfTt4ZS5wcm90b3R5cGUuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsPWZ1bmN0aW9uKHQsZSl7aWYoeS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLGlzTmFOKHQueCl8fGlzTmFOKHQueSl8fGlzTmFOKHQueikpdGhyb3cgbmV3IEQoImNhcnRlc2lhbiBoYXMgYSBOYU4gY29tcG9uZW50Iik7aWYoIWEuZXF1YWxzRXBzaWxvbih0LGEuWkVSTyxQLkVQU0lMT04xNCkpcmV0dXJuIGgoZSl8fChlPW5ldyBhKSxlPWEubXVsdGlwbHlDb21wb25lbnRzKHQsdGhpcy5fb25lT3ZlclJhZGlpU3F1YXJlZCxlKSxhLm5vcm1hbGl6ZShlLGUpfTtmQz1uZXcgYSx1Qz1uZXcgYTt4ZS5wcm90b3R5cGUuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW49ZnVuY3Rpb24odCxlKXtsZXQgbj1mQyxvPXVDO3RoaXMuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsQ2FydG9ncmFwaGljKHQsbiksYS5tdWx0aXBseUNvbXBvbmVudHModGhpcy5fcmFkaWlTcXVhcmVkLG4sbyk7bGV0IHI9TWF0aC5zcXJ0KGEuZG90KG4sbykpO3JldHVybiBhLmRpdmlkZUJ5U2NhbGFyKG8scixvKSxhLm11bHRpcGx5QnlTY2FsYXIobix0LmhlaWdodCxuKSxoKGUpfHwoZT1uZXcgYSksYS5hZGQobyxuLGUpfTt4ZS5wcm90b3R5cGUuY2FydG9ncmFwaGljQXJyYXlUb0NhcnRlc2lhbkFycmF5PWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJjYXJ0b2dyYXBoaWNzIix0KTtsZXQgbj10Lmxlbmd0aDtoKGUpP2UubGVuZ3RoPW46ZT1uZXcgQXJyYXkobik7Zm9yKGxldCBvPTA7bzxuO28rKyllW29dPXRoaXMuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4odFtvXSxlW29dKTtyZXR1cm4gZX07bEM9bmV3IGEscEM9bmV3IGEsZEM9bmV3IGE7eGUucHJvdG90eXBlLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljPWZ1bmN0aW9uKHQsZSl7bGV0IG49dGhpcy5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKHQscEMpO2lmKCFoKG4pKXJldHVybjtsZXQgbz10aGlzLmdlb2RldGljU3VyZmFjZU5vcm1hbChuLGxDKSxyPWEuc3VidHJhY3QodCxuLGRDKSxpPU1hdGguYXRhbjIoby55LG8ueCkscz1NYXRoLmFzaW4oby56KSxmPVAuc2lnbihhLmRvdChyLHQpKSphLm1hZ25pdHVkZShyKTtyZXR1cm4gaChlKT8oZS5sb25naXR1ZGU9aSxlLmxhdGl0dWRlPXMsZS5oZWlnaHQ9ZixlKTpuZXcgY3QoaSxzLGYpfTt4ZS5wcm90b3R5cGUuY2FydGVzaWFuQXJyYXlUb0NhcnRvZ3JhcGhpY0FycmF5PWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJjYXJ0ZXNpYW5zIix0KTtsZXQgbj10Lmxlbmd0aDtoKGUpP2UubGVuZ3RoPW46ZT1uZXcgQXJyYXkobik7Zm9yKGxldCBvPTA7bzxuOysrbyllW29dPXRoaXMuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWModFtvXSxlW29dKTtyZXR1cm4gZX07eGUucHJvdG90eXBlLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4gVmwodCx0aGlzLl9vbmVPdmVyUmFkaWksdGhpcy5fb25lT3ZlclJhZGlpU3F1YXJlZCx0aGlzLl9jZW50ZXJUb2xlcmFuY2VTcXVhcmVkLGUpfTt4ZS5wcm90b3R5cGUuc2NhbGVUb0dlb2NlbnRyaWNTdXJmYWNlPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLGgoZSl8fChlPW5ldyBhKTtsZXQgbj10Lngsbz10Lnkscj10LnosaT10aGlzLl9vbmVPdmVyUmFkaWlTcXVhcmVkLHM9MS9NYXRoLnNxcnQobipuKmkueCtvKm8qaS55K3IqcippLnopO3JldHVybiBhLm11bHRpcGx5QnlTY2FsYXIodCxzLGUpfTt4ZS5wcm90b3R5cGUudHJhbnNmb3JtUG9zaXRpb25Ub1NjYWxlZFNwYWNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgoZSl8fChlPW5ldyBhKSxhLm11bHRpcGx5Q29tcG9uZW50cyh0LHRoaXMuX29uZU92ZXJSYWRpaSxlKX07eGUucHJvdG90eXBlLnRyYW5zZm9ybVBvc2l0aW9uRnJvbVNjYWxlZFNwYWNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgoZSl8fChlPW5ldyBhKSxhLm11bHRpcGx5Q29tcG9uZW50cyh0LHRoaXMuX3JhZGlpLGUpfTt4ZS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dHx8aCh0KSYmYS5lcXVhbHModGhpcy5fcmFkaWksdC5fcmFkaWkpfTt4ZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmFkaWkudG9TdHJpbmcoKX07eGUucHJvdG90eXBlLmdldFN1cmZhY2VOb3JtYWxJbnRlcnNlY3Rpb25XaXRoWkF4aXM9ZnVuY3Rpb24odCxlLG4pe2lmKHkudHlwZU9mLm9iamVjdCgicG9zaXRpb24iLHQpLCFQLmVxdWFsc0Vwc2lsb24odGhpcy5fcmFkaWkueCx0aGlzLl9yYWRpaS55LFAuRVBTSUxPTjE1KSl0aHJvdyBuZXcgRCgiRWxsaXBzb2lkIG11c3QgYmUgYW4gZWxsaXBzb2lkIG9mIHJldm9sdXRpb24gKHJhZGlpLnggPT0gcmFkaWkueSkiKTt5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW4oIkVsbGlwc29pZC5yYWRpaS56Iix0aGlzLl9yYWRpaS56LDApLGU9ZT8/MDtsZXQgbz10aGlzLl9zcXVhcmVkWE92ZXJTcXVhcmVkWjtpZihoKG4pfHwobj1uZXcgYSksbi54PTAsbi55PTAsbi56PXQueiooMS1vKSwhKE1hdGguYWJzKG4ueik+PXRoaXMuX3JhZGlpLnotZSkpcmV0dXJuIG59O21DPW5ldyBhO3hlLnByb3RvdHlwZS5nZXRMb2NhbEN1cnZhdHVyZT1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgic3VyZmFjZVBvc2l0aW9uIix0KSxoKGUpfHwoZT1uZXcgSik7bGV0IG49dGhpcy5nZXRTdXJmYWNlTm9ybWFsSW50ZXJzZWN0aW9uV2l0aFpBeGlzKHQsMCxtQyksbz1hLmRpc3RhbmNlKHQsbikscj10aGlzLm1pbmltdW1SYWRpdXMqby90aGlzLm1heGltdW1SYWRpdXMqKjIsaT1vKnIqKjI7cmV0dXJuIEouZnJvbUVsZW1lbnRzKDEvbywxL2ksZSl9O2hDPVsuMTQ4ODc0MzM4OTgxNjMsLjQzMzM5NTM5NDEyOTI1LC42Nzk0MDk1NjgyOTkwMiwuODY1MDYzMzY2Njg4OTgsLjk3MzkwNjUyODUxNzE3LDBdLF9DPVsuMjk1NTI0MjI0NzE0NzUsLjI2OTI2NjcxOTMwOTk5LC4yMTkwODYzNjI1MTU5OCwuMTQ5NDUxMzQ5MTUwNTgsLjA2NjY3MTM0NDMwODY4NCwwXTt4ZS5wcm90b3R5cGUuc3VyZmFjZUFyZWE9ZnVuY3Rpb24odCl7eS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpO2xldCBlPXQud2VzdCxuPXQuZWFzdCxvPXQuc291dGgscj10Lm5vcnRoO2Zvcig7bjxlOyluKz1QLlRXT19QSTtsZXQgaT10aGlzLl9yYWRpaVNxdWFyZWQscz1pLngsZj1pLnksdT1pLnosYz1zKmY7cmV0dXJuIGIxKG8scixmdW5jdGlvbihsKXtsZXQgcD1NYXRoLmNvcyhsKSxkPU1hdGguc2luKGwpO3JldHVybiBNYXRoLmNvcyhsKSpiMShlLG4sZnVuY3Rpb24obSl7bGV0IF89TWF0aC5jb3MobSksZz1NYXRoLnNpbihtKTtyZXR1cm4gTWF0aC5zcXJ0KGMqZCpkK3UqKGYqXypfK3MqZypnKSpwKnApfSl9KX07WT14ZX0pO2Z1bmN0aW9uIGpsKHQpe3RoaXMuX2VsbGlwc29pZD10Pz9ZLmRlZmF1bHQsdGhpcy5fc2VtaW1ham9yQXhpcz10aGlzLl9lbGxpcHNvaWQubWF4aW11bVJhZGl1cyx0aGlzLl9vbmVPdmVyU2VtaW1ham9yQXhpcz0xL3RoaXMuX3NlbWltYWpvckF4aXN9dmFyIEpuLFNpPSQoKCk9PntMdCgpO0llKCk7ZnQoKTtqdCgpOyR0KCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoamwucHJvdG90eXBlLHtlbGxpcHNvaWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGxpcHNvaWR9fX0pO2psLnByb3RvdHlwZS5wcm9qZWN0PWZ1bmN0aW9uKHQsZSl7bGV0IG49dGhpcy5fc2VtaW1ham9yQXhpcyxvPXQubG9uZ2l0dWRlKm4scj10LmxhdGl0dWRlKm4saT10LmhlaWdodDtyZXR1cm4gaChlKT8oZS54PW8sZS55PXIsZS56PWksZSk6bmV3IGEobyxyLGkpfTtqbC5wcm90b3R5cGUudW5wcm9qZWN0PWZ1bmN0aW9uKHQsZSl7aWYoIWgodCkpdGhyb3cgbmV3IEQoImNhcnRlc2lhbiBpcyByZXF1aXJlZCIpO2xldCBuPXRoaXMuX29uZU92ZXJTZW1pbWFqb3JBeGlzLG89dC54Km4scj10LnkqbixpPXQuejtyZXR1cm4gaChlKT8oZS5sb25naXR1ZGU9byxlLmxhdGl0dWRlPXIsZS5oZWlnaHQ9aSxlKTpuZXcgY3QobyxyLGkpfTtKbj1qbH0pO3ZhciB5QyxTbixHcz0kKCgpPT57eUM9e09VVFNJREU6LTEsSU5URVJTRUNUSU5HOjAsSU5TSURFOjF9LFNuPU9iamVjdC5mcmVlemUoeUMpfSk7ZnVuY3Rpb24gZ0ModCxlKXt0aGlzLnN0YXJ0PXQ/PzAsdGhpcy5zdG9wPWU/PzB9dmFyIFFyLEhsPSQoKCk9PntRcj1nQ30pO2Z1bmN0aW9uIFR0KHQsZSxuLG8scixpLHMsZix1KXt0aGlzWzBdPXQ/PzAsdGhpc1sxXT1vPz8wLHRoaXNbMl09cz8/MCx0aGlzWzNdPWU/PzAsdGhpc1s0XT1yPz8wLHRoaXNbNV09Zj8/MCx0aGlzWzZdPW4/PzAsdGhpc1s3XT1pPz8wLHRoaXNbOF09dT8/MH1mdW5jdGlvbiBPQyh0KXtsZXQgZT0wO2ZvcihsZXQgbj0wO248OTsrK24pe2xldCBvPXRbbl07ZSs9bypvfXJldHVybiBNYXRoLnNxcnQoZSl9ZnVuY3Rpb24gRUModCl7bGV0IGU9MDtmb3IobGV0IG49MDtuPDM7KytuKXtsZXQgbz10W1R0LmdldEVsZW1lbnRJbmRleChDbVtuXSxTbVtuXSldO2UrPTIqbypvfXJldHVybiBNYXRoLnNxcnQoZSl9ZnVuY3Rpb24gUkModCxlKXtsZXQgbj1QLkVQU0lMT04xNSxvPTAscj0xO2ZvcihsZXQgYz0wO2M8MzsrK2Mpe2xldCBsPU1hdGguYWJzKHRbVHQuZ2V0RWxlbWVudEluZGV4KENtW2NdLFNtW2NdKV0pO2w+byYmKHI9YyxvPWwpfWxldCBpPTEscz0wLGY9U21bcl0sdT1DbVtyXTtpZihNYXRoLmFicyh0W1R0LmdldEVsZW1lbnRJbmRleCh1LGYpXSk+bil7bGV0IGM9dFtUdC5nZXRFbGVtZW50SW5kZXgodSx1KV0sbD10W1R0LmdldEVsZW1lbnRJbmRleChmLGYpXSxwPXRbVHQuZ2V0RWxlbWVudEluZGV4KHUsZildLGQ9KGMtbCkvMi9wLG07ZDwwP209LTEvKC1kK01hdGguc3FydCgxK2QqZCkpOm09MS8oZCtNYXRoLnNxcnQoMStkKmQpKSxpPTEvTWF0aC5zcXJ0KDErbSptKSxzPW0qaX1yZXR1cm4gZT1UdC5jbG9uZShUdC5JREVOVElUWSxlKSxlW1R0LmdldEVsZW1lbnRJbmRleChmLGYpXT1lW1R0LmdldEVsZW1lbnRJbmRleCh1LHUpXT1pLGVbVHQuZ2V0RWxlbWVudEluZGV4KHUsZildPXMsZVtUdC5nZXRFbGVtZW50SW5kZXgoZix1KV09LXMsZX12YXIgQUMsYkMsUm0sdzEsVEMsd0MsU20sQ20scWwsTzEsU0MsWixCbj0kKCgpPT57THQoKTtXdCgpO2Z0KCk7anQoKTtLdCgpO1R0LnBhY2tlZExlbmd0aD05O1R0LnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPW4/PzAsZVtuKytdPXRbMF0sZVtuKytdPXRbMV0sZVtuKytdPXRbMl0sZVtuKytdPXRbM10sZVtuKytdPXRbNF0sZVtuKytdPXRbNV0sZVtuKytdPXRbNl0sZVtuKytdPXRbN10sZVtuKytdPXRbOF0sZX07VHQudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS5kZWZpbmVkKCJhcnJheSIsdCksZT1lPz8wLGgobil8fChuPW5ldyBUdCksblswXT10W2UrK10sblsxXT10W2UrK10sblsyXT10W2UrK10sblszXT10W2UrK10sbls0XT10W2UrK10sbls1XT10W2UrK10sbls2XT10W2UrK10sbls3XT10W2UrK10sbls4XT10W2UrK10sbn07VHQucGFja0FycmF5PWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJhcnJheSIsdCk7bGV0IG49dC5sZW5ndGgsbz1uKjk7aWYoIWgoZSkpZT1uZXcgQXJyYXkobyk7ZWxzZXtpZighQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGghPT1vKXRocm93IG5ldyBEKCJJZiByZXN1bHQgaXMgYSB0eXBlZCBhcnJheSwgaXQgbXVzdCBoYXZlIGV4YWN0bHkgYXJyYXkubGVuZ3RoICogOSBlbGVtZW50cyIpO2UubGVuZ3RoIT09byYmKGUubGVuZ3RoPW8pfWZvcihsZXQgcj0wO3I8bjsrK3IpVHQucGFjayh0W3JdLGUscio5KTtyZXR1cm4gZX07VHQudW5wYWNrQXJyYXk9ZnVuY3Rpb24odCxlKXtpZih5LmRlZmluZWQoImFycmF5Iix0KSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiYXJyYXkubGVuZ3RoIix0Lmxlbmd0aCw5KSx0Lmxlbmd0aCU5IT09MCl0aHJvdyBuZXcgRCgiYXJyYXkgbGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA5LiIpO2xldCBuPXQubGVuZ3RoO2goZSk/ZS5sZW5ndGg9bi85OmU9bmV3IEFycmF5KG4vOSk7Zm9yKGxldCBvPTA7bzxuO28rPTkpe2xldCByPW8vOTtlW3JdPVR0LnVucGFjayh0LG8sZVtyXSl9cmV0dXJuIGV9O1R0LmNsb25lPWZ1bmN0aW9uKHQsZSl7aWYoaCh0KSlyZXR1cm4gaChlKT8oZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLGVbNF09dFs0XSxlWzVdPXRbNV0sZVs2XT10WzZdLGVbN109dFs3XSxlWzhdPXRbOF0sZSk6bmV3IFR0KHRbMF0sdFszXSx0WzZdLHRbMV0sdFs0XSx0WzddLHRbMl0sdFs1XSx0WzhdKX07VHQuZnJvbUFycmF5PVR0LnVucGFjaztUdC5mcm9tQ29sdW1uTWFqb3JBcnJheT1mdW5jdGlvbih0LGUpe3JldHVybiB5LmRlZmluZWQoInZhbHVlcyIsdCksVHQuY2xvbmUodCxlKX07VHQuZnJvbVJvd01ham9yQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS5kZWZpbmVkKCJ2YWx1ZXMiLHQpLGgoZSk/KGVbMF09dFswXSxlWzFdPXRbM10sZVsyXT10WzZdLGVbM109dFsxXSxlWzRdPXRbNF0sZVs1XT10WzddLGVbNl09dFsyXSxlWzddPXRbNV0sZVs4XT10WzhdLGUpOm5ldyBUdCh0WzBdLHRbMV0sdFsyXSx0WzNdLHRbNF0sdFs1XSx0WzZdLHRbN10sdFs4XSl9O1R0LmZyb21RdWF0ZXJuaW9uPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJxdWF0ZXJuaW9uIix0KTtsZXQgbj10LngqdC54LG89dC54KnQueSxyPXQueCp0LnosaT10LngqdC53LHM9dC55KnQueSxmPXQueSp0LnosdT10LnkqdC53LGM9dC56KnQueixsPXQueip0LncscD10LncqdC53LGQ9bi1zLWMrcCxtPTIqKG8tbCksXz0yKihyK3UpLGc9MioobytsKSxiPS1uK3MtYytwLFQ9MiooZi1pKSxPPTIqKHItdSksRT0yKihmK2kpLHc9LW4tcytjK3A7cmV0dXJuIGgoZSk/KGVbMF09ZCxlWzFdPWcsZVsyXT1PLGVbM109bSxlWzRdPWIsZVs1XT1FLGVbNl09XyxlWzddPVQsZVs4XT13LGUpOm5ldyBUdChkLG0sXyxnLGIsVCxPLEUsdyl9O1R0LmZyb21IZWFkaW5nUGl0Y2hSb2xsPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJoZWFkaW5nUGl0Y2hSb2xsIix0KTtsZXQgbj1NYXRoLmNvcygtdC5waXRjaCksbz1NYXRoLmNvcygtdC5oZWFkaW5nKSxyPU1hdGguY29zKHQucm9sbCksaT1NYXRoLnNpbigtdC5waXRjaCkscz1NYXRoLnNpbigtdC5oZWFkaW5nKSxmPU1hdGguc2luKHQucm9sbCksdT1uKm8sYz0tcipzK2YqaSpvLGw9ZipzK3IqaSpvLHA9bipzLGQ9cipvK2YqaSpzLG09LWYqbytyKmkqcyxfPS1pLGc9ZipuLGI9cipuO3JldHVybiBoKGUpPyhlWzBdPXUsZVsxXT1wLGVbMl09XyxlWzNdPWMsZVs0XT1kLGVbNV09ZyxlWzZdPWwsZVs3XT1tLGVbOF09YixlKTpuZXcgVHQodSxjLGwscCxkLG0sXyxnLGIpfTtUdC5mcm9tU2NhbGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJzY2FsZSIsdCksaChlKT8oZVswXT10LngsZVsxXT0wLGVbMl09MCxlWzNdPTAsZVs0XT10LnksZVs1XT0wLGVbNl09MCxlWzddPTAsZVs4XT10LnosZSk6bmV3IFR0KHQueCwwLDAsMCx0LnksMCwwLDAsdC56KX07VHQuZnJvbVVuaWZvcm1TY2FsZT1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5udW1iZXIoInNjYWxlIix0KSxoKGUpPyhlWzBdPXQsZVsxXT0wLGVbMl09MCxlWzNdPTAsZVs0XT10LGVbNV09MCxlWzZdPTAsZVs3XT0wLGVbOF09dCxlKTpuZXcgVHQodCwwLDAsMCx0LDAsMCwwLHQpfTtUdC5mcm9tQ3Jvc3NQcm9kdWN0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmVjdG9yIix0KSxoKGUpPyhlWzBdPTAsZVsxXT10LnosZVsyXT0tdC55LGVbM109LXQueixlWzRdPTAsZVs1XT10LngsZVs2XT10LnksZVs3XT0tdC54LGVbOF09MCxlKTpuZXcgVHQoMCwtdC56LHQueSx0LnosMCwtdC54LC10LnksdC54LDApfTtUdC5mcm9tUm90YXRpb25YPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2YubnVtYmVyKCJhbmdsZSIsdCk7bGV0IG49TWF0aC5jb3ModCksbz1NYXRoLnNpbih0KTtyZXR1cm4gaChlKT8oZVswXT0xLGVbMV09MCxlWzJdPTAsZVszXT0wLGVbNF09bixlWzVdPW8sZVs2XT0wLGVbN109LW8sZVs4XT1uLGUpOm5ldyBUdCgxLDAsMCwwLG4sLW8sMCxvLG4pfTtUdC5mcm9tUm90YXRpb25ZPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2YubnVtYmVyKCJhbmdsZSIsdCk7bGV0IG49TWF0aC5jb3ModCksbz1NYXRoLnNpbih0KTtyZXR1cm4gaChlKT8oZVswXT1uLGVbMV09MCxlWzJdPS1vLGVbM109MCxlWzRdPTEsZVs1XT0wLGVbNl09byxlWzddPTAsZVs4XT1uLGUpOm5ldyBUdChuLDAsbywwLDEsMCwtbywwLG4pfTtUdC5mcm9tUm90YXRpb25aPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2YubnVtYmVyKCJhbmdsZSIsdCk7bGV0IG49TWF0aC5jb3ModCksbz1NYXRoLnNpbih0KTtyZXR1cm4gaChlKT8oZVswXT1uLGVbMV09byxlWzJdPTAsZVszXT0tbyxlWzRdPW4sZVs1XT0wLGVbNl09MCxlWzddPTAsZVs4XT0xLGUpOm5ldyBUdChuLC1vLDAsbyxuLDAsMCwwLDEpfTtUdC50b0FycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSxoKGUpPyhlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sZVs0XT10WzRdLGVbNV09dFs1XSxlWzZdPXRbNl0sZVs3XT10WzddLGVbOF09dFs4XSxlKTpbdFswXSx0WzFdLHRbMl0sdFszXSx0WzRdLHRbNV0sdFs2XSx0WzddLHRbOF1dfTtUdC5nZXRFbGVtZW50SW5kZXg9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoInJvdyIsZSwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygicm93IixlLDIpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJjb2x1bW4iLHQsMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoImNvbHVtbiIsdCwyKSx0KjMrZX07VHQuZ2V0Q29sdW1uPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImluZGV4IixlLDApLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwyKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89ZSozLHI9dFtvXSxpPXRbbysxXSxzPXRbbysyXTtyZXR1cm4gbi54PXIsbi55PWksbi56PXMsbn07VHQuc2V0Q29sdW1uPWZ1bmN0aW9uKHQsZSxuLG8pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiaW5kZXgiLGUsMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoImluZGV4IixlLDIpLHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIixuKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbyksbz1UdC5jbG9uZSh0LG8pO2xldCByPWUqMztyZXR1cm4gb1tyXT1uLngsb1tyKzFdPW4ueSxvW3IrMl09bi56LG99O1R0LmdldFJvdz1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiaW5kZXgiLGUsMikseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pO2xldCBvPXRbZV0scj10W2UrM10saT10W2UrNl07cmV0dXJuIG4ueD1vLG4ueT1yLG4uej1pLG59O1R0LnNldFJvdz1mdW5jdGlvbih0LGUsbixvKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiaW5kZXgiLGUsMikseS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLG4pLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixvKSxvPVR0LmNsb25lKHQsbyksb1tlXT1uLngsb1tlKzNdPW4ueSxvW2UrNl09bi56LG99O0FDPW5ldyBhO1R0LnNldFNjYWxlPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJzY2FsZSIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pO2xldCBvPVR0LmdldFNjYWxlKHQsQUMpLHI9ZS54L28ueCxpPWUueS9vLnkscz1lLnovby56O3JldHVybiBuWzBdPXRbMF0qcixuWzFdPXRbMV0qcixuWzJdPXRbMl0qcixuWzNdPXRbM10qaSxuWzRdPXRbNF0qaSxuWzVdPXRbNV0qaSxuWzZdPXRbNl0qcyxuWzddPXRbN10qcyxuWzhdPXRbOF0qcyxufTtiQz1uZXcgYTtUdC5zZXRVbmlmb3JtU2NhbGU9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5udW1iZXIoInNjYWxlIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89VHQuZ2V0U2NhbGUodCxiQykscj1lL28ueCxpPWUvby55LHM9ZS9vLno7cmV0dXJuIG5bMF09dFswXSpyLG5bMV09dFsxXSpyLG5bMl09dFsyXSpyLG5bM109dFszXSppLG5bNF09dFs0XSppLG5bNV09dFs1XSppLG5bNl09dFs2XSpzLG5bN109dFs3XSpzLG5bOF09dFs4XSpzLG59O1JtPW5ldyBhO1R0LmdldFNjYWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZS54PWEubWFnbml0dWRlKGEuZnJvbUVsZW1lbnRzKHRbMF0sdFsxXSx0WzJdLFJtKSksZS55PWEubWFnbml0dWRlKGEuZnJvbUVsZW1lbnRzKHRbM10sdFs0XSx0WzVdLFJtKSksZS56PWEubWFnbml0dWRlKGEuZnJvbUVsZW1lbnRzKHRbNl0sdFs3XSx0WzhdLFJtKSksZX07dzE9bmV3IGE7VHQuZ2V0TWF4aW11bVNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBUdC5nZXRTY2FsZSh0LHcxKSxhLm1heGltdW1Db21wb25lbnQodzEpfTtUQz1uZXcgYTtUdC5zZXRSb3RhdGlvbj1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz1UdC5nZXRTY2FsZSh0LFRDKTtyZXR1cm4gblswXT1lWzBdKm8ueCxuWzFdPWVbMV0qby54LG5bMl09ZVsyXSpvLngsblszXT1lWzNdKm8ueSxuWzRdPWVbNF0qby55LG5bNV09ZVs1XSpvLnksbls2XT1lWzZdKm8ueixuWzddPWVbN10qby56LG5bOF09ZVs4XSpvLnosbn07d0M9bmV3IGE7VHQuZ2V0Um90YXRpb249ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpO2xldCBuPVR0LmdldFNjYWxlKHQsd0MpO3JldHVybiBlWzBdPXRbMF0vbi54LGVbMV09dFsxXS9uLngsZVsyXT10WzJdL24ueCxlWzNdPXRbM10vbi55LGVbNF09dFs0XS9uLnksZVs1XT10WzVdL24ueSxlWzZdPXRbNl0vbi56LGVbN109dFs3XS9uLnosZVs4XT10WzhdL24ueixlfTtUdC5tdWx0aXBseT1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89dFswXSplWzBdK3RbM10qZVsxXSt0WzZdKmVbMl0scj10WzFdKmVbMF0rdFs0XSplWzFdK3RbN10qZVsyXSxpPXRbMl0qZVswXSt0WzVdKmVbMV0rdFs4XSplWzJdLHM9dFswXSplWzNdK3RbM10qZVs0XSt0WzZdKmVbNV0sZj10WzFdKmVbM10rdFs0XSplWzRdK3RbN10qZVs1XSx1PXRbMl0qZVszXSt0WzVdKmVbNF0rdFs4XSplWzVdLGM9dFswXSplWzZdK3RbM10qZVs3XSt0WzZdKmVbOF0sbD10WzFdKmVbNl0rdFs0XSplWzddK3RbN10qZVs4XSxwPXRbMl0qZVs2XSt0WzVdKmVbN10rdFs4XSplWzhdO3JldHVybiBuWzBdPW8sblsxXT1yLG5bMl09aSxuWzNdPXMsbls0XT1mLG5bNV09dSxuWzZdPWMsbls3XT1sLG5bOF09cCxufTtUdC5hZGQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuWzBdPXRbMF0rZVswXSxuWzFdPXRbMV0rZVsxXSxuWzJdPXRbMl0rZVsyXSxuWzNdPXRbM10rZVszXSxuWzRdPXRbNF0rZVs0XSxuWzVdPXRbNV0rZVs1XSxuWzZdPXRbNl0rZVs2XSxuWzddPXRbN10rZVs3XSxuWzhdPXRbOF0rZVs4XSxufTtUdC5zdWJ0cmFjdD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG5bMF09dFswXS1lWzBdLG5bMV09dFsxXS1lWzFdLG5bMl09dFsyXS1lWzJdLG5bM109dFszXS1lWzNdLG5bNF09dFs0XS1lWzRdLG5bNV09dFs1XS1lWzVdLG5bNl09dFs2XS1lWzZdLG5bN109dFs3XS1lWzddLG5bOF09dFs4XS1lWzhdLG59O1R0Lm11bHRpcGx5QnlWZWN0b3I9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pO2xldCBvPWUueCxyPWUueSxpPWUueixzPXRbMF0qbyt0WzNdKnIrdFs2XSppLGY9dFsxXSpvK3RbNF0qcit0WzddKmksdT10WzJdKm8rdFs1XSpyK3RbOF0qaTtyZXR1cm4gbi54PXMsbi55PWYsbi56PXUsbn07VHQubXVsdGlwbHlCeVNjYWxhcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5udW1iZXIoInNjYWxhciIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG5bMF09dFswXSplLG5bMV09dFsxXSplLG5bMl09dFsyXSplLG5bM109dFszXSplLG5bNF09dFs0XSplLG5bNV09dFs1XSplLG5bNl09dFs2XSplLG5bN109dFs3XSplLG5bOF09dFs4XSplLG59O1R0Lm11bHRpcGx5QnlTY2FsZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInNjYWxlIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksblswXT10WzBdKmUueCxuWzFdPXRbMV0qZS54LG5bMl09dFsyXSplLngsblszXT10WzNdKmUueSxuWzRdPXRbNF0qZS55LG5bNV09dFs1XSplLnksbls2XT10WzZdKmUueixuWzddPXRbN10qZS56LG5bOF09dFs4XSplLnosbn07VHQubXVsdGlwbHlCeVVuaWZvcm1TY2FsZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5udW1iZXIoInNjYWxlIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksblswXT10WzBdKmUsblsxXT10WzFdKmUsblsyXT10WzJdKmUsblszXT10WzNdKmUsbls0XT10WzRdKmUsbls1XT10WzVdKmUsbls2XT10WzZdKmUsbls3XT10WzddKmUsbls4XT10WzhdKmUsbn07VHQubmVnYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZVswXT0tdFswXSxlWzFdPS10WzFdLGVbMl09LXRbMl0sZVszXT0tdFszXSxlWzRdPS10WzRdLGVbNV09LXRbNV0sZVs2XT0tdFs2XSxlWzddPS10WzddLGVbOF09LXRbOF0sZX07VHQudHJhbnNwb3NlPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKTtsZXQgbj10WzBdLG89dFszXSxyPXRbNl0saT10WzFdLHM9dFs0XSxmPXRbN10sdT10WzJdLGM9dFs1XSxsPXRbOF07cmV0dXJuIGVbMF09bixlWzFdPW8sZVsyXT1yLGVbM109aSxlWzRdPXMsZVs1XT1mLGVbNl09dSxlWzddPWMsZVs4XT1sLGV9O1NtPVsxLDAsMF0sQ209WzIsMiwxXTtxbD1uZXcgVHQsTzE9bmV3IFR0O1R0LmNvbXB1dGVFaWdlbkRlY29tcG9zaXRpb249ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCk7bGV0IG49UC5FUFNJTE9OMjAsbz0xMCxyPTAsaT0wO2goZSl8fChlPXt9KTtsZXQgcz1lLnVuaXRhcnk9VHQuY2xvbmUoVHQuSURFTlRJVFksZS51bml0YXJ5KSxmPWUuZGlhZ29uYWw9VHQuY2xvbmUodCxlLmRpYWdvbmFsKSx1PW4qT0MoZik7Zm9yKDtpPG8mJkVDKGYpPnU7KVJDKGYscWwpLFR0LnRyYW5zcG9zZShxbCxPMSksVHQubXVsdGlwbHkoZixxbCxmKSxUdC5tdWx0aXBseShPMSxmLGYpLFR0Lm11bHRpcGx5KHMscWwscyksKytyPjImJigrK2kscj0wKTtyZXR1cm4gZX07VHQuYWJzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZVswXT1NYXRoLmFicyh0WzBdKSxlWzFdPU1hdGguYWJzKHRbMV0pLGVbMl09TWF0aC5hYnModFsyXSksZVszXT1NYXRoLmFicyh0WzNdKSxlWzRdPU1hdGguYWJzKHRbNF0pLGVbNV09TWF0aC5hYnModFs1XSksZVs2XT1NYXRoLmFicyh0WzZdKSxlWzddPU1hdGguYWJzKHRbN10pLGVbOF09TWF0aC5hYnModFs4XSksZX07VHQuZGV0ZXJtaW5hbnQ9ZnVuY3Rpb24odCl7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpO2xldCBlPXRbMF0sbj10WzNdLG89dFs2XSxyPXRbMV0saT10WzRdLHM9dFs3XSxmPXRbMl0sdT10WzVdLGM9dFs4XTtyZXR1cm4gZSooaSpjLXUqcykrcioodSpvLW4qYykrZioobipzLWkqbyl9O1R0LmludmVyc2U9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpO2xldCBuPXRbMF0sbz10WzFdLHI9dFsyXSxpPXRbM10scz10WzRdLGY9dFs1XSx1PXRbNl0sYz10WzddLGw9dFs4XSxwPVR0LmRldGVybWluYW50KHQpO2lmKE1hdGguYWJzKHApPD1QLkVQU0lMT04xNSl0aHJvdyBuZXcgRCgibWF0cml4IGlzIG5vdCBpbnZlcnRpYmxlIik7ZVswXT1zKmwtYypmLGVbMV09YypyLW8qbCxlWzJdPW8qZi1zKnIsZVszXT11KmYtaSpsLGVbNF09bipsLXUqcixlWzVdPWkqci1uKmYsZVs2XT1pKmMtdSpzLGVbN109dSpvLW4qYyxlWzhdPW4qcy1pKm87bGV0IGQ9MS9wO3JldHVybiBUdC5tdWx0aXBseUJ5U2NhbGFyKGUsZCxlKX07U0M9bmV3IFR0O1R0LmludmVyc2VUcmFuc3Bvc2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKSxUdC5pbnZlcnNlKFR0LnRyYW5zcG9zZSh0LFNDKSxlKX07VHQuZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHxoKHQpJiZoKGUpJiZ0WzBdPT09ZVswXSYmdFsxXT09PWVbMV0mJnRbMl09PT1lWzJdJiZ0WzNdPT09ZVszXSYmdFs0XT09PWVbNF0mJnRbNV09PT1lWzVdJiZ0WzZdPT09ZVs2XSYmdFs3XT09PWVbN10mJnRbOF09PT1lWzhdfTtUdC5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbj1uPz8wLHQ9PT1lfHxoKHQpJiZoKGUpJiZNYXRoLmFicyh0WzBdLWVbMF0pPD1uJiZNYXRoLmFicyh0WzFdLWVbMV0pPD1uJiZNYXRoLmFicyh0WzJdLWVbMl0pPD1uJiZNYXRoLmFicyh0WzNdLWVbM10pPD1uJiZNYXRoLmFicyh0WzRdLWVbNF0pPD1uJiZNYXRoLmFicyh0WzVdLWVbNV0pPD1uJiZNYXRoLmFicyh0WzZdLWVbNl0pPD1uJiZNYXRoLmFicyh0WzddLWVbN10pPD1uJiZNYXRoLmFicyh0WzhdLWVbOF0pPD1ufTtUdC5JREVOVElUWT1PYmplY3QuZnJlZXplKG5ldyBUdCgxLDAsMCwwLDEsMCwwLDAsMSkpO1R0LlpFUk89T2JqZWN0LmZyZWV6ZShuZXcgVHQoMCwwLDAsMCwwLDAsMCwwLDApKTtUdC5DT0xVTU4wUk9XMD0wO1R0LkNPTFVNTjBST1cxPTE7VHQuQ09MVU1OMFJPVzI9MjtUdC5DT0xVTU4xUk9XMD0zO1R0LkNPTFVNTjFST1cxPTQ7VHQuQ09MVU1OMVJPVzI9NTtUdC5DT0xVTU4yUk9XMD02O1R0LkNPTFVNTjJST1cxPTc7VHQuQ09MVU1OMlJPVzI9ODtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhUdC5wcm90b3R5cGUse2xlbmd0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFR0LnBhY2tlZExlbmd0aH19fSk7VHQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiBUdC5jbG9uZSh0aGlzLHQpfTtUdC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiBUdC5lcXVhbHModGhpcyx0KX07VHQuZXF1YWxzQXJyYXk9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0WzBdPT09ZVtuXSYmdFsxXT09PWVbbisxXSYmdFsyXT09PWVbbisyXSYmdFszXT09PWVbbiszXSYmdFs0XT09PWVbbis0XSYmdFs1XT09PWVbbis1XSYmdFs2XT09PWVbbis2XSYmdFs3XT09PWVbbis3XSYmdFs4XT09PWVbbis4XX07VHQucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gVHQuZXF1YWxzRXBzaWxvbih0aGlzLHQsZSl9O1R0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybmAoJHt0aGlzWzBdfSwgJHt0aGlzWzNdfSwgJHt0aGlzWzZdfSkKKCR7dGhpc1sxXX0sICR7dGhpc1s0XX0sICR7dGhpc1s3XX0pCigke3RoaXNbMl19LCAke3RoaXNbNV19LCAke3RoaXNbOF19KWB9O1o9VHR9KTtmdW5jdGlvbiB2dCh0LGUsbixvKXt0aGlzLng9dD8/MCx0aGlzLnk9ZT8/MCx0aGlzLno9bj8/MCx0aGlzLnc9bz8/MH12YXIgS2wsRTEsQ0MseG0sYm8seEMsUEMsUjEsbWUsaHI9JCgoKT0+e1d0KCk7ZnQoKTtqdCgpO0t0KCk7dnQuZnJvbUVsZW1lbnRzPWZ1bmN0aW9uKHQsZSxuLG8scil7cmV0dXJuIGgocik/KHIueD10LHIueT1lLHIuej1uLHIudz1vLHIpOm5ldyB2dCh0LGUsbixvKX07dnQuZnJvbUNvbG9yPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY29sb3IiLHQpLGgoZSk/KGUueD10LnJlZCxlLnk9dC5ncmVlbixlLno9dC5ibHVlLGUudz10LmFscGhhLGUpOm5ldyB2dCh0LnJlZCx0LmdyZWVuLHQuYmx1ZSx0LmFscGhhKX07dnQuY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihoKHQpKXJldHVybiBoKGUpPyhlLng9dC54LGUueT10LnksZS56PXQueixlLnc9dC53LGUpOm5ldyB2dCh0LngsdC55LHQueix0LncpfTt2dC5wYWNrZWRMZW5ndGg9NDt2dC5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj1uPz8wLGVbbisrXT10LngsZVtuKytdPXQueSxlW24rK109dC56LGVbbl09dC53LGV9O3Z0LnVucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkuZGVmaW5lZCgiYXJyYXkiLHQpLGU9ZT8/MCxoKG4pfHwobj1uZXcgdnQpLG4ueD10W2UrK10sbi55PXRbZSsrXSxuLno9dFtlKytdLG4udz10W2VdLG59O3Z0LnBhY2tBcnJheT1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgiYXJyYXkiLHQpO2xldCBuPXQubGVuZ3RoLG89bio0O2lmKCFoKGUpKWU9bmV3IEFycmF5KG8pO2Vsc2V7aWYoIUFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoIT09byl0aHJvdyBuZXcgRCgiSWYgcmVzdWx0IGlzIGEgdHlwZWQgYXJyYXksIGl0IG11c3QgaGF2ZSBleGFjdGx5IGFycmF5Lmxlbmd0aCAqIDQgZWxlbWVudHMiKTtlLmxlbmd0aCE9PW8mJihlLmxlbmd0aD1vKX1mb3IobGV0IHI9MDtyPG47KytyKXZ0LnBhY2sodFtyXSxlLHIqNCk7cmV0dXJuIGV9O3Z0LnVucGFja0FycmF5PWZ1bmN0aW9uKHQsZSl7aWYoeS5kZWZpbmVkKCJhcnJheSIsdCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImFycmF5Lmxlbmd0aCIsdC5sZW5ndGgsNCksdC5sZW5ndGglNCE9PTApdGhyb3cgbmV3IEQoImFycmF5IGxlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNC4iKTtsZXQgbj10Lmxlbmd0aDtoKGUpP2UubGVuZ3RoPW4vNDplPW5ldyBBcnJheShuLzQpO2ZvcihsZXQgbz0wO288bjtvKz00KXtsZXQgcj1vLzQ7ZVtyXT12dC51bnBhY2sodCxvLGVbcl0pfXJldHVybiBlfTt2dC5mcm9tQXJyYXk9dnQudW5wYWNrO3Z0Lm1heGltdW1Db21wb25lbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSxNYXRoLm1heCh0LngsdC55LHQueix0LncpfTt2dC5taW5pbXVtQ29tcG9uZW50PWZ1bmN0aW9uKHQpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCksTWF0aC5taW4odC54LHQueSx0LnosdC53KX07dnQubWluaW11bUJ5Q29tcG9uZW50PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJmaXJzdCIsdCkseS50eXBlT2Yub2JqZWN0KCJzZWNvbmQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9TWF0aC5taW4odC54LGUueCksbi55PU1hdGgubWluKHQueSxlLnkpLG4uej1NYXRoLm1pbih0LnosZS56KSxuLnc9TWF0aC5taW4odC53LGUudyksbn07dnQubWF4aW11bUJ5Q29tcG9uZW50PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJmaXJzdCIsdCkseS50eXBlT2Yub2JqZWN0KCJzZWNvbmQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9TWF0aC5tYXgodC54LGUueCksbi55PU1hdGgubWF4KHQueSxlLnkpLG4uej1NYXRoLm1heCh0LnosZS56KSxuLnc9TWF0aC5tYXgodC53LGUudyksbn07dnQuY2xhbXA9ZnVuY3Rpb24odCxlLG4sbyl7eS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS50eXBlT2Yub2JqZWN0KCJtaW4iLGUpLHkudHlwZU9mLm9iamVjdCgibWF4IixuKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbyk7bGV0IHI9UC5jbGFtcCh0LngsZS54LG4ueCksaT1QLmNsYW1wKHQueSxlLnksbi55KSxzPVAuY2xhbXAodC56LGUueixuLnopLGY9UC5jbGFtcCh0LncsZS53LG4udyk7cmV0dXJuIG8ueD1yLG8ueT1pLG8uej1zLG8udz1mLG99O3Z0Lm1hZ25pdHVkZVNxdWFyZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSx0LngqdC54K3QueSp0LnkrdC56KnQueit0LncqdC53fTt2dC5tYWduaXR1ZGU9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydCh2dC5tYWduaXR1ZGVTcXVhcmVkKHQpKX07S2w9bmV3IHZ0O3Z0LmRpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSksdnQuc3VidHJhY3QodCxlLEtsKSx2dC5tYWduaXR1ZGUoS2wpfTt2dC5kaXN0YW5jZVNxdWFyZWQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx2dC5zdWJ0cmFjdCh0LGUsS2wpLHZ0Lm1hZ25pdHVkZVNxdWFyZWQoS2wpfTt2dC5ub3JtYWxpemU9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpO2xldCBuPXZ0Lm1hZ25pdHVkZSh0KTtpZihlLng9dC54L24sZS55PXQueS9uLGUuej10LnovbixlLnc9dC53L24saXNOYU4oZS54KXx8aXNOYU4oZS55KXx8aXNOYU4oZS56KXx8aXNOYU4oZS53KSl0aHJvdyBuZXcgRCgibm9ybWFsaXplZCByZXN1bHQgaXMgbm90IGEgbnVtYmVyIik7cmV0dXJuIGV9O3Z0LmRvdD1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHQueCplLngrdC55KmUueSt0LnoqZS56K3QudyplLnd9O3Z0Lm11bHRpcGx5Q29tcG9uZW50cz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD10LngqZS54LG4ueT10LnkqZS55LG4uej10LnoqZS56LG4udz10LncqZS53LG59O3Z0LmRpdmlkZUNvbXBvbmVudHM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54L2UueCxuLnk9dC55L2UueSxuLno9dC56L2UueixuLnc9dC53L2UudyxufTt2dC5hZGQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54K2UueCxuLnk9dC55K2UueSxuLno9dC56K2UueixuLnc9dC53K2UudyxufTt2dC5zdWJ0cmFjdD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ueD10LngtZS54LG4ueT10LnktZS55LG4uej10LnotZS56LG4udz10LnctZS53LG59O3Z0Lm11bHRpcGx5QnlTY2FsYXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2YubnVtYmVyKCJzY2FsYXIiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54KmUsbi55PXQueSplLG4uej10LnoqZSxuLnc9dC53KmUsbn07dnQuZGl2aWRlQnlTY2FsYXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsdCkseS50eXBlT2YubnVtYmVyKCJzY2FsYXIiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54L2Usbi55PXQueS9lLG4uej10LnovZSxuLnc9dC53L2Usbn07dnQubmVnYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZS54PS10LngsZS55PS10LnksZS56PS10LnosZS53PS10LncsZX07dnQuYWJzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZS54PU1hdGguYWJzKHQueCksZS55PU1hdGguYWJzKHQueSksZS56PU1hdGguYWJzKHQueiksZS53PU1hdGguYWJzKHQudyksZX07RTE9bmV3IHZ0O3Z0LmxlcnA9ZnVuY3Rpb24odCxlLG4sbyl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgic3RhcnQiLHQpLHkudHlwZU9mLm9iamVjdCgiZW5kIixlKSx5LnR5cGVPZi5udW1iZXIoInQiLG4pLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixvKSx2dC5tdWx0aXBseUJ5U2NhbGFyKGUsbixFMSksbz12dC5tdWx0aXBseUJ5U2NhbGFyKHQsMS1uLG8pLHZ0LmFkZChFMSxvLG8pfTtDQz1uZXcgdnQ7dnQubW9zdE9ydGhvZ29uYWxBeGlzPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKTtsZXQgbj12dC5ub3JtYWxpemUodCxDQyk7cmV0dXJuIHZ0LmFicyhuLG4pLG4ueDw9bi55P24ueDw9bi56P24ueDw9bi53P2U9dnQuY2xvbmUodnQuVU5JVF9YLGUpOmU9dnQuY2xvbmUodnQuVU5JVF9XLGUpOm4uejw9bi53P2U9dnQuY2xvbmUodnQuVU5JVF9aLGUpOmU9dnQuY2xvbmUodnQuVU5JVF9XLGUpOm4ueTw9bi56P24ueTw9bi53P2U9dnQuY2xvbmUodnQuVU5JVF9ZLGUpOmU9dnQuY2xvbmUodnQuVU5JVF9XLGUpOm4uejw9bi53P2U9dnQuY2xvbmUodnQuVU5JVF9aLGUpOmU9dnQuY2xvbmUodnQuVU5JVF9XLGUpLGV9O3Z0LmVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZXx8aCh0KSYmaChlKSYmdC54PT09ZS54JiZ0Lnk9PT1lLnkmJnQuej09PWUueiYmdC53PT09ZS53fTt2dC5lcXVhbHNBcnJheT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQueD09PWVbbl0mJnQueT09PWVbbisxXSYmdC56PT09ZVtuKzJdJiZ0Lnc9PT1lW24rM119O3Z0LmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlLG4sbyl7cmV0dXJuIHQ9PT1lfHxoKHQpJiZoKGUpJiZQLmVxdWFsc0Vwc2lsb24odC54LGUueCxuLG8pJiZQLmVxdWFsc0Vwc2lsb24odC55LGUueSxuLG8pJiZQLmVxdWFsc0Vwc2lsb24odC56LGUueixuLG8pJiZQLmVxdWFsc0Vwc2lsb24odC53LGUudyxuLG8pfTt2dC5aRVJPPU9iamVjdC5mcmVlemUobmV3IHZ0KDAsMCwwLDApKTt2dC5PTkU9T2JqZWN0LmZyZWV6ZShuZXcgdnQoMSwxLDEsMSkpO3Z0LlVOSVRfWD1PYmplY3QuZnJlZXplKG5ldyB2dCgxLDAsMCwwKSk7dnQuVU5JVF9ZPU9iamVjdC5mcmVlemUobmV3IHZ0KDAsMSwwLDApKTt2dC5VTklUX1o9T2JqZWN0LmZyZWV6ZShuZXcgdnQoMCwwLDEsMCkpO3Z0LlVOSVRfVz1PYmplY3QuZnJlZXplKG5ldyB2dCgwLDAsMCwxKSk7dnQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiB2dC5jbG9uZSh0aGlzLHQpfTt2dC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiB2dC5lcXVhbHModGhpcyx0KX07dnQucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlLG4pe3JldHVybiB2dC5lcXVhbHNFcHNpbG9uKHRoaXMsdCxlLG4pfTt2dC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5gKCR7dGhpcy54fSwgJHt0aGlzLnl9LCAke3RoaXMuen0sICR7dGhpcy53fSlgfTt4bT1uZXcgRmxvYXQzMkFycmF5KDEpLGJvPW5ldyBVaW50OEFycmF5KHhtLmJ1ZmZlcikseEM9bmV3IFVpbnQzMkFycmF5KFsyODc0NTQwMjBdKSxQQz1uZXcgVWludDhBcnJheSh4Qy5idWZmZXIpLFIxPVBDWzBdPT09Njg7dnQucGFja0Zsb2F0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm51bWJlcigidmFsdWUiLHQpLGgoZSl8fChlPW5ldyB2dCkseG1bMF09dCxSMT8oZS54PWJvWzBdLGUueT1ib1sxXSxlLno9Ym9bMl0sZS53PWJvWzNdKTooZS54PWJvWzNdLGUueT1ib1syXSxlLno9Ym9bMV0sZS53PWJvWzBdKSxlfTt2dC51bnBhY2tGbG9hdD1mdW5jdGlvbih0KXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJwYWNrZWRGbG9hdCIsdCksUjE/KGJvWzBdPXQueCxib1sxXT10LnksYm9bMl09dC56LGJvWzNdPXQudyk6KGJvWzBdPXQudyxib1sxXT10LnosYm9bMl09dC55LGJvWzNdPXQueCkseG1bMF19O21lPXZ0fSk7dmFyIFBtLEl0LHllPSQoKCk9PntQbT17fTtQbS5FTVBUWV9PQkpFQ1Q9T2JqZWN0LmZyZWV6ZSh7fSk7UG0uRU1QVFlfQVJSQVk9T2JqZWN0LmZyZWV6ZShbXSk7SXQ9UG19KTtmdW5jdGlvbiByZih0KXt0aGlzLm5hbWU9IlJ1bnRpbWVFcnJvciIsdGhpcy5tZXNzYWdlPXQ7bGV0IGU7dHJ5e3Rocm93IG5ldyBFcnJvcn1jYXRjaChuKXtlPW4uc3RhY2t9dGhpcy5zdGFjaz1lfXZhciBBZSxKcj0kKCgpPT57ZnQoKTtoKE9iamVjdC5jcmVhdGUpJiYocmYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSxyZi5wcm90b3R5cGUuY29uc3RydWN0b3I9cmYpO3JmLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2xldCB0PWAke3RoaXMubmFtZX06ICR7dGhpcy5tZXNzYWdlfWA7cmV0dXJuIGgodGhpcy5zdGFjaykmJih0Kz1gCiR7dGhpcy5zdGFjay50b1N0cmluZygpfWApLHR9O0FlPXJmfSk7ZnVuY3Rpb24gYnQodCxlLG4sbyxyLGkscyxmLHUsYyxsLHAsZCxtLF8sZyl7dGhpc1swXT10Pz8wLHRoaXNbMV09cj8/MCx0aGlzWzJdPXU/PzAsdGhpc1szXT1kPz8wLHRoaXNbNF09ZT8/MCx0aGlzWzVdPWk/PzAsdGhpc1s2XT1jPz8wLHRoaXNbN109bT8/MCx0aGlzWzhdPW4/PzAsdGhpc1s5XT1zPz8wLHRoaXNbMTBdPWw/PzAsdGhpc1sxMV09Xz8/MCx0aGlzWzEyXT1vPz8wLHRoaXNbMTNdPWY/PzAsdGhpc1sxNF09cD8/MCx0aGlzWzE1XT1nPz8wfXZhciBIYyxxYyxzZixNQyxOQyxNbSxTMSxJQyx2QyxGQyxMQyxEQyxCQyxVQyxzdCxVbj0kKCgpPT57THQoKTtocigpO1d0KCk7eWUoKTtmdCgpO2p0KCk7S3QoKTtCbigpO0pyKCk7YnQucGFja2VkTGVuZ3RoPTE2O2J0LnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPW4/PzAsZVtuKytdPXRbMF0sZVtuKytdPXRbMV0sZVtuKytdPXRbMl0sZVtuKytdPXRbM10sZVtuKytdPXRbNF0sZVtuKytdPXRbNV0sZVtuKytdPXRbNl0sZVtuKytdPXRbN10sZVtuKytdPXRbOF0sZVtuKytdPXRbOV0sZVtuKytdPXRbMTBdLGVbbisrXT10WzExXSxlW24rK109dFsxMl0sZVtuKytdPXRbMTNdLGVbbisrXT10WzE0XSxlW25dPXRbMTVdLGV9O2J0LnVucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkuZGVmaW5lZCgiYXJyYXkiLHQpLGU9ZT8/MCxoKG4pfHwobj1uZXcgYnQpLG5bMF09dFtlKytdLG5bMV09dFtlKytdLG5bMl09dFtlKytdLG5bM109dFtlKytdLG5bNF09dFtlKytdLG5bNV09dFtlKytdLG5bNl09dFtlKytdLG5bN109dFtlKytdLG5bOF09dFtlKytdLG5bOV09dFtlKytdLG5bMTBdPXRbZSsrXSxuWzExXT10W2UrK10sblsxMl09dFtlKytdLG5bMTNdPXRbZSsrXSxuWzE0XT10W2UrK10sblsxNV09dFtlXSxufTtidC5wYWNrQXJyYXk9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoImFycmF5Iix0KTtsZXQgbj10Lmxlbmd0aCxvPW4qMTY7aWYoIWgoZSkpZT1uZXcgQXJyYXkobyk7ZWxzZXtpZighQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGghPT1vKXRocm93IG5ldyBEKCJJZiByZXN1bHQgaXMgYSB0eXBlZCBhcnJheSwgaXQgbXVzdCBoYXZlIGV4YWN0bHkgYXJyYXkubGVuZ3RoICogMTYgZWxlbWVudHMiKTtlLmxlbmd0aCE9PW8mJihlLmxlbmd0aD1vKX1mb3IobGV0IHI9MDtyPG47KytyKWJ0LnBhY2sodFtyXSxlLHIqMTYpO3JldHVybiBlfTtidC51bnBhY2tBcnJheT1mdW5jdGlvbih0LGUpe2lmKHkuZGVmaW5lZCgiYXJyYXkiLHQpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJhcnJheS5sZW5ndGgiLHQubGVuZ3RoLDE2KSx0Lmxlbmd0aCUxNiE9PTApdGhyb3cgbmV3IEQoImFycmF5IGxlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYuIik7bGV0IG49dC5sZW5ndGg7aChlKT9lLmxlbmd0aD1uLzE2OmU9bmV3IEFycmF5KG4vMTYpO2ZvcihsZXQgbz0wO288bjtvKz0xNil7bGV0IHI9by8xNjtlW3JdPWJ0LnVucGFjayh0LG8sZVtyXSl9cmV0dXJuIGV9O2J0LmNsb25lPWZ1bmN0aW9uKHQsZSl7aWYoaCh0KSlyZXR1cm4gaChlKT8oZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzNdLGVbNF09dFs0XSxlWzVdPXRbNV0sZVs2XT10WzZdLGVbN109dFs3XSxlWzhdPXRbOF0sZVs5XT10WzldLGVbMTBdPXRbMTBdLGVbMTFdPXRbMTFdLGVbMTJdPXRbMTJdLGVbMTNdPXRbMTNdLGVbMTRdPXRbMTRdLGVbMTVdPXRbMTVdLGUpOm5ldyBidCh0WzBdLHRbNF0sdFs4XSx0WzEyXSx0WzFdLHRbNV0sdFs5XSx0WzEzXSx0WzJdLHRbNl0sdFsxMF0sdFsxNF0sdFszXSx0WzddLHRbMTFdLHRbMTVdKX07YnQuZnJvbUFycmF5PWJ0LnVucGFjaztidC5mcm9tQ29sdW1uTWFqb3JBcnJheT1mdW5jdGlvbih0LGUpe3JldHVybiB5LmRlZmluZWQoInZhbHVlcyIsdCksYnQuY2xvbmUodCxlKX07YnQuZnJvbVJvd01ham9yQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS5kZWZpbmVkKCJ2YWx1ZXMiLHQpLGgoZSk/KGVbMF09dFswXSxlWzFdPXRbNF0sZVsyXT10WzhdLGVbM109dFsxMl0sZVs0XT10WzFdLGVbNV09dFs1XSxlWzZdPXRbOV0sZVs3XT10WzEzXSxlWzhdPXRbMl0sZVs5XT10WzZdLGVbMTBdPXRbMTBdLGVbMTFdPXRbMTRdLGVbMTJdPXRbM10sZVsxM109dFs3XSxlWzE0XT10WzExXSxlWzE1XT10WzE1XSxlKTpuZXcgYnQodFswXSx0WzFdLHRbMl0sdFszXSx0WzRdLHRbNV0sdFs2XSx0WzddLHRbOF0sdFs5XSx0WzEwXSx0WzExXSx0WzEyXSx0WzEzXSx0WzE0XSx0WzE1XSl9O2J0LmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJyb3RhdGlvbiIsdCksZT1lPz9hLlpFUk8saChuKT8oblswXT10WzBdLG5bMV09dFsxXSxuWzJdPXRbMl0sblszXT0wLG5bNF09dFszXSxuWzVdPXRbNF0sbls2XT10WzVdLG5bN109MCxuWzhdPXRbNl0sbls5XT10WzddLG5bMTBdPXRbOF0sblsxMV09MCxuWzEyXT1lLngsblsxM109ZS55LG5bMTRdPWUueixuWzE1XT0xLG4pOm5ldyBidCh0WzBdLHRbM10sdFs2XSxlLngsdFsxXSx0WzRdLHRbN10sZS55LHRbMl0sdFs1XSx0WzhdLGUueiwwLDAsMCwxKX07YnQuZnJvbVRyYW5zbGF0aW9uUXVhdGVybmlvblJvdGF0aW9uU2NhbGU9ZnVuY3Rpb24odCxlLG4sbyl7eS50eXBlT2Yub2JqZWN0KCJ0cmFuc2xhdGlvbiIsdCkseS50eXBlT2Yub2JqZWN0KCJyb3RhdGlvbiIsZSkseS50eXBlT2Yub2JqZWN0KCJzY2FsZSIsbiksaChvKXx8KG89bmV3IGJ0KTtsZXQgcj1uLngsaT1uLnkscz1uLnosZj1lLngqZS54LHU9ZS54KmUueSxjPWUueCplLnosbD1lLngqZS53LHA9ZS55KmUueSxkPWUueSplLnosbT1lLnkqZS53LF89ZS56KmUueixnPWUueiplLncsYj1lLncqZS53LFQ9Zi1wLV8rYixPPTIqKHUtZyksRT0yKihjK20pLHc9MioodStnKSxDPS1mK3AtXytiLE09MiooZC1sKSxOPTIqKGMtbSksRj0yKihkK2wpLEk9LWYtcCtfK2I7cmV0dXJuIG9bMF09VCpyLG9bMV09dypyLG9bMl09TipyLG9bM109MCxvWzRdPU8qaSxvWzVdPUMqaSxvWzZdPUYqaSxvWzddPTAsb1s4XT1FKnMsb1s5XT1NKnMsb1sxMF09SSpzLG9bMTFdPTAsb1sxMl09dC54LG9bMTNdPXQueSxvWzE0XT10Lnosb1sxNV09MSxvfTtidC5mcm9tVHJhbnNsYXRpb25Sb3RhdGlvblNjYWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidHJhbnNsYXRpb25Sb3RhdGlvblNjYWxlIix0KSxidC5mcm9tVHJhbnNsYXRpb25RdWF0ZXJuaW9uUm90YXRpb25TY2FsZSh0LnRyYW5zbGF0aW9uLHQucm90YXRpb24sdC5zY2FsZSxlKX07YnQuZnJvbVRyYW5zbGF0aW9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidHJhbnNsYXRpb24iLHQpLGJ0LmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKFouSURFTlRJVFksdCxlKX07YnQuZnJvbVNjYWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgic2NhbGUiLHQpLGgoZSk/KGVbMF09dC54LGVbMV09MCxlWzJdPTAsZVszXT0wLGVbNF09MCxlWzVdPXQueSxlWzZdPTAsZVs3XT0wLGVbOF09MCxlWzldPTAsZVsxMF09dC56LGVbMTFdPTAsZVsxMl09MCxlWzEzXT0wLGVbMTRdPTAsZVsxNV09MSxlKTpuZXcgYnQodC54LDAsMCwwLDAsdC55LDAsMCwwLDAsdC56LDAsMCwwLDAsMSl9O2J0LmZyb21Vbmlmb3JtU2NhbGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2YubnVtYmVyKCJzY2FsZSIsdCksaChlKT8oZVswXT10LGVbMV09MCxlWzJdPTAsZVszXT0wLGVbNF09MCxlWzVdPXQsZVs2XT0wLGVbN109MCxlWzhdPTAsZVs5XT0wLGVbMTBdPXQsZVsxMV09MCxlWzEyXT0wLGVbMTNdPTAsZVsxNF09MCxlWzE1XT0xLGUpOm5ldyBidCh0LDAsMCwwLDAsdCwwLDAsMCwwLHQsMCwwLDAsMCwxKX07YnQuZnJvbVJvdGF0aW9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgicm90YXRpb24iLHQpLGgoZSl8fChlPW5ldyBidCksZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT0wLGVbNF09dFszXSxlWzVdPXRbNF0sZVs2XT10WzVdLGVbN109MCxlWzhdPXRbNl0sZVs5XT10WzddLGVbMTBdPXRbOF0sZVsxMV09MCxlWzEyXT0wLGVbMTNdPTAsZVsxNF09MCxlWzE1XT0xLGV9O0hjPW5ldyBhLHFjPW5ldyBhLHNmPW5ldyBhO2J0LmZyb21DYW1lcmE9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoImNhbWVyYSIsdCk7bGV0IG49dC5wb3NpdGlvbixvPXQuZGlyZWN0aW9uLHI9dC51cDt5LnR5cGVPZi5vYmplY3QoImNhbWVyYS5wb3NpdGlvbiIsbikseS50eXBlT2Yub2JqZWN0KCJjYW1lcmEuZGlyZWN0aW9uIixvKSx5LnR5cGVPZi5vYmplY3QoImNhbWVyYS51cCIsciksYS5ub3JtYWxpemUobyxIYyksYS5ub3JtYWxpemUoYS5jcm9zcyhIYyxyLHFjKSxxYyksYS5ub3JtYWxpemUoYS5jcm9zcyhxYyxIYyxzZiksc2YpO2xldCBpPXFjLngscz1xYy55LGY9cWMueix1PUhjLngsYz1IYy55LGw9SGMueixwPXNmLngsZD1zZi55LG09c2YueixfPW4ueCxnPW4ueSxiPW4ueixUPWkqLV8rcyotZytmKi1iLE89cCotXytkKi1nK20qLWIsRT11Kl8rYypnK2wqYjtyZXR1cm4gaChlKT8oZVswXT1pLGVbMV09cCxlWzJdPS11LGVbM109MCxlWzRdPXMsZVs1XT1kLGVbNl09LWMsZVs3XT0wLGVbOF09ZixlWzldPW0sZVsxMF09LWwsZVsxMV09MCxlWzEyXT1ULGVbMTNdPU8sZVsxNF09RSxlWzE1XT0xLGUpOm5ldyBidChpLHMsZixULHAsZCxtLE8sLXUsLWMsLWwsRSwwLDAsMCwxKX07YnQuY29tcHV0ZVBlcnNwZWN0aXZlRmllbGRPZlZpZXc9ZnVuY3Rpb24odCxlLG4sbyxyKXt5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW4oImZvdlkiLHQsMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuKCJmb3ZZIix0LE1hdGguUEkpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbigibmVhciIsbiwwKSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW4oImZhciIsbywwKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIscik7bGV0IHM9MS9NYXRoLnRhbih0Ki41KSxmPXMvZSx1PShvK24pLyhuLW8pLGM9MipvKm4vKG4tbyk7cmV0dXJuIHJbMF09ZixyWzFdPTAsclsyXT0wLHJbM109MCxyWzRdPTAscls1XT1zLHJbNl09MCxyWzddPTAscls4XT0wLHJbOV09MCxyWzEwXT11LHJbMTFdPS0xLHJbMTJdPTAsclsxM109MCxyWzE0XT1jLHJbMTVdPTAscn07YnQuY29tcHV0ZU9ydGhvZ3JhcGhpY09mZkNlbnRlcj1mdW5jdGlvbih0LGUsbixvLHIsaSxzKXt5LnR5cGVPZi5udW1iZXIoImxlZnQiLHQpLHkudHlwZU9mLm51bWJlcigicmlnaHQiLGUpLHkudHlwZU9mLm51bWJlcigiYm90dG9tIixuKSx5LnR5cGVPZi5udW1iZXIoInRvcCIsbykseS50eXBlT2YubnVtYmVyKCJuZWFyIixyKSx5LnR5cGVPZi5udW1iZXIoImZhciIsaSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLHMpO2xldCBmPTEvKGUtdCksdT0xLyhvLW4pLGM9MS8oaS1yKSxsPS0oZSt0KSpmLHA9LShvK24pKnUsZD0tKGkrcikqYztyZXR1cm4gZio9Mix1Kj0yLGMqPS0yLHNbMF09ZixzWzFdPTAsc1syXT0wLHNbM109MCxzWzRdPTAsc1s1XT11LHNbNl09MCxzWzddPTAsc1s4XT0wLHNbOV09MCxzWzEwXT1jLHNbMTFdPTAsc1sxMl09bCxzWzEzXT1wLHNbMTRdPWQsc1sxNV09MSxzfTtidC5jb21wdXRlUGVyc3BlY3RpdmVPZmZDZW50ZXI9ZnVuY3Rpb24odCxlLG4sbyxyLGkscyl7eS50eXBlT2YubnVtYmVyKCJsZWZ0Iix0KSx5LnR5cGVPZi5udW1iZXIoInJpZ2h0IixlKSx5LnR5cGVPZi5udW1iZXIoImJvdHRvbSIsbikseS50eXBlT2YubnVtYmVyKCJ0b3AiLG8pLHkudHlwZU9mLm51bWJlcigibmVhciIscikseS50eXBlT2YubnVtYmVyKCJmYXIiLGkpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixzKTtsZXQgZj0yKnIvKGUtdCksdT0yKnIvKG8tbiksYz0oZSt0KS8oZS10KSxsPShvK24pLyhvLW4pLHA9LShpK3IpLyhpLXIpLGQ9LTEsbT0tMippKnIvKGktcik7cmV0dXJuIHNbMF09ZixzWzFdPTAsc1syXT0wLHNbM109MCxzWzRdPTAsc1s1XT11LHNbNl09MCxzWzddPTAsc1s4XT1jLHNbOV09bCxzWzEwXT1wLHNbMTFdPWQsc1sxMl09MCxzWzEzXT0wLHNbMTRdPW0sc1sxNV09MCxzfTtidC5jb21wdXRlSW5maW5pdGVQZXJzcGVjdGl2ZU9mZkNlbnRlcj1mdW5jdGlvbih0LGUsbixvLHIsaSl7eS50eXBlT2YubnVtYmVyKCJsZWZ0Iix0KSx5LnR5cGVPZi5udW1iZXIoInJpZ2h0IixlKSx5LnR5cGVPZi5udW1iZXIoImJvdHRvbSIsbikseS50eXBlT2YubnVtYmVyKCJ0b3AiLG8pLHkudHlwZU9mLm51bWJlcigibmVhciIscikseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGkpO2xldCBzPTIqci8oZS10KSxmPTIqci8oby1uKSx1PShlK3QpLyhlLXQpLGM9KG8rbikvKG8tbiksbD0tMSxwPS0xLGQ9LTIqcjtyZXR1cm4gaVswXT1zLGlbMV09MCxpWzJdPTAsaVszXT0wLGlbNF09MCxpWzVdPWYsaVs2XT0wLGlbN109MCxpWzhdPXUsaVs5XT1jLGlbMTBdPWwsaVsxMV09cCxpWzEyXT0wLGlbMTNdPTAsaVsxNF09ZCxpWzE1XT0wLGl9O2J0LmNvbXB1dGVWaWV3cG9ydFRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQsZSxuLG8pe2gobyl8fChvPW5ldyBidCksdD10Pz9JdC5FTVBUWV9PQkpFQ1Q7bGV0IHI9dC54Pz8wLGk9dC55Pz8wLHM9dC53aWR0aD8/MCxmPXQuaGVpZ2h0Pz8wO2U9ZT8/MCxuPW4/PzE7bGV0IHU9cyouNSxjPWYqLjUsbD0obi1lKSouNSxwPXUsZD1jLG09bCxfPXIrdSxnPWkrYyxiPWUrbCxUPTE7cmV0dXJuIG9bMF09cCxvWzFdPTAsb1syXT0wLG9bM109MCxvWzRdPTAsb1s1XT1kLG9bNl09MCxvWzddPTAsb1s4XT0wLG9bOV09MCxvWzEwXT1tLG9bMTFdPTAsb1sxMl09XyxvWzEzXT1nLG9bMTRdPWIsb1sxNV09VCxvfTtidC5jb21wdXRlVmlldz1mdW5jdGlvbih0LGUsbixvLHIpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInBvc2l0aW9uIix0KSx5LnR5cGVPZi5vYmplY3QoImRpcmVjdGlvbiIsZSkseS50eXBlT2Yub2JqZWN0KCJ1cCIsbikseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsbykseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLHIpLHJbMF09by54LHJbMV09bi54LHJbMl09LWUueCxyWzNdPTAscls0XT1vLnkscls1XT1uLnkscls2XT0tZS55LHJbN109MCxyWzhdPW8ueixyWzldPW4ueixyWzEwXT0tZS56LHJbMTFdPTAsclsxMl09LWEuZG90KG8sdCksclsxM109LWEuZG90KG4sdCksclsxNF09YS5kb3QoZSx0KSxyWzE1XT0xLHJ9O2J0LnRvQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLGgoZSk/KGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSxlWzRdPXRbNF0sZVs1XT10WzVdLGVbNl09dFs2XSxlWzddPXRbN10sZVs4XT10WzhdLGVbOV09dFs5XSxlWzEwXT10WzEwXSxlWzExXT10WzExXSxlWzEyXT10WzEyXSxlWzEzXT10WzEzXSxlWzE0XT10WzE0XSxlWzE1XT10WzE1XSxlKTpbdFswXSx0WzFdLHRbMl0sdFszXSx0WzRdLHRbNV0sdFs2XSx0WzddLHRbOF0sdFs5XSx0WzEwXSx0WzExXSx0WzEyXSx0WzEzXSx0WzE0XSx0WzE1XV19O2J0LmdldEVsZW1lbnRJbmRleD1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygicm93IixlLDApLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJyb3ciLGUsMykseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImNvbHVtbiIsdCwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiY29sdW1uIix0LDMpLHQqNCtlfTtidC5nZXRDb2x1bW49ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiaW5kZXgiLGUsMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoImluZGV4IixlLDMpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz1lKjQscj10W29dLGk9dFtvKzFdLHM9dFtvKzJdLGY9dFtvKzNdO3JldHVybiBuLng9cixuLnk9aSxuLno9cyxuLnc9ZixufTtidC5zZXRDb2x1bW49ZnVuY3Rpb24odCxlLG4sbyl7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiaW5kZXgiLGUsMykseS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLG4pLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixvKSxvPWJ0LmNsb25lKHQsbyk7bGV0IHI9ZSo0O3JldHVybiBvW3JdPW4ueCxvW3IrMV09bi55LG9bcisyXT1uLnosb1tyKzNdPW4udyxvfTtidC5nZXRSb3c9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiaW5kZXgiLGUsMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoImluZGV4IixlLDMpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz10W2VdLHI9dFtlKzRdLGk9dFtlKzhdLHM9dFtlKzEyXTtyZXR1cm4gbi54PW8sbi55PXIsbi56PWksbi53PXMsbn07YnQuc2V0Um93PWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImluZGV4IixlLDApLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwzKSx5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsbikseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG8pLG89YnQuY2xvbmUodCxvKSxvW2VdPW4ueCxvW2UrNF09bi55LG9bZSs4XT1uLnosb1tlKzEyXT1uLncsb307YnQuc2V0VHJhbnNsYXRpb249ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJ0cmFuc2xhdGlvbiIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG5bMF09dFswXSxuWzFdPXRbMV0sblsyXT10WzJdLG5bM109dFszXSxuWzRdPXRbNF0sbls1XT10WzVdLG5bNl09dFs2XSxuWzddPXRbN10sbls4XT10WzhdLG5bOV09dFs5XSxuWzEwXT10WzEwXSxuWzExXT10WzExXSxuWzEyXT1lLngsblsxM109ZS55LG5bMTRdPWUueixuWzE1XT10WzE1XSxufTtNQz1uZXcgYTtidC5zZXRTY2FsZT1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgic2NhbGUiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz1idC5nZXRTY2FsZSh0LE1DKSxyPWUueC9vLngsaT1lLnkvby55LHM9ZS56L28uejtyZXR1cm4gblswXT10WzBdKnIsblsxXT10WzFdKnIsblsyXT10WzJdKnIsblszXT10WzNdLG5bNF09dFs0XSppLG5bNV09dFs1XSppLG5bNl09dFs2XSppLG5bN109dFs3XSxuWzhdPXRbOF0qcyxuWzldPXRbOV0qcyxuWzEwXT10WzEwXSpzLG5bMTFdPXRbMTFdLG5bMTJdPXRbMTJdLG5bMTNdPXRbMTNdLG5bMTRdPXRbMTRdLG5bMTVdPXRbMTVdLG59O05DPW5ldyBhO2J0LnNldFVuaWZvcm1TY2FsZT1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlcigic2NhbGUiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz1idC5nZXRTY2FsZSh0LE5DKSxyPWUvby54LGk9ZS9vLnkscz1lL28uejtyZXR1cm4gblswXT10WzBdKnIsblsxXT10WzFdKnIsblsyXT10WzJdKnIsblszXT10WzNdLG5bNF09dFs0XSppLG5bNV09dFs1XSppLG5bNl09dFs2XSppLG5bN109dFs3XSxuWzhdPXRbOF0qcyxuWzldPXRbOV0qcyxuWzEwXT10WzEwXSpzLG5bMTFdPXRbMTFdLG5bMTJdPXRbMTJdLG5bMTNdPXRbMTNdLG5bMTRdPXRbMTRdLG5bMTVdPXRbMTVdLG59O01tPW5ldyBhO2J0LmdldFNjYWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZS54PWEubWFnbml0dWRlKGEuZnJvbUVsZW1lbnRzKHRbMF0sdFsxXSx0WzJdLE1tKSksZS55PWEubWFnbml0dWRlKGEuZnJvbUVsZW1lbnRzKHRbNF0sdFs1XSx0WzZdLE1tKSksZS56PWEubWFnbml0dWRlKGEuZnJvbUVsZW1lbnRzKHRbOF0sdFs5XSx0WzEwXSxNbSkpLGV9O1MxPW5ldyBhO2J0LmdldE1heGltdW1TY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYnQuZ2V0U2NhbGUodCxTMSksYS5tYXhpbXVtQ29tcG9uZW50KFMxKX07SUM9bmV3IGE7YnQuc2V0Um90YXRpb249ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89YnQuZ2V0U2NhbGUodCxJQyk7cmV0dXJuIG5bMF09ZVswXSpvLngsblsxXT1lWzFdKm8ueCxuWzJdPWVbMl0qby54LG5bM109dFszXSxuWzRdPWVbM10qby55LG5bNV09ZVs0XSpvLnksbls2XT1lWzVdKm8ueSxuWzddPXRbN10sbls4XT1lWzZdKm8ueixuWzldPWVbN10qby56LG5bMTBdPWVbOF0qby56LG5bMTFdPXRbMTFdLG5bMTJdPXRbMTJdLG5bMTNdPXRbMTNdLG5bMTRdPXRbMTRdLG5bMTVdPXRbMTVdLG59O3ZDPW5ldyBhO2J0LmdldFJvdGF0aW9uPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKTtsZXQgbj1idC5nZXRTY2FsZSh0LHZDKTtyZXR1cm4gZVswXT10WzBdL24ueCxlWzFdPXRbMV0vbi54LGVbMl09dFsyXS9uLngsZVszXT10WzRdL24ueSxlWzRdPXRbNV0vbi55LGVbNV09dFs2XS9uLnksZVs2XT10WzhdL24ueixlWzddPXRbOV0vbi56LGVbOF09dFsxMF0vbi56LGV9O2J0Lm11bHRpcGx5PWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz10WzBdLHI9dFsxXSxpPXRbMl0scz10WzNdLGY9dFs0XSx1PXRbNV0sYz10WzZdLGw9dFs3XSxwPXRbOF0sZD10WzldLG09dFsxMF0sXz10WzExXSxnPXRbMTJdLGI9dFsxM10sVD10WzE0XSxPPXRbMTVdLEU9ZVswXSx3PWVbMV0sQz1lWzJdLE09ZVszXSxOPWVbNF0sRj1lWzVdLEk9ZVs2XSx2PWVbN10sQj1lWzhdLEE9ZVs5XSxTPWVbMTBdLHg9ZVsxMV0sTD1lWzEyXSx6PWVbMTNdLGo9ZVsxNF0saz1lWzE1XSxxPW8qRStmKncrcCpDK2cqTSxXPXIqRSt1KncrZCpDK2IqTSxSPWkqRStjKncrbSpDK1QqTSxudD1zKkUrbCp3K18qQytPKk0sYXQ9bypOK2YqRitwKkkrZyp2LGx0PXIqTit1KkYrZCpJK2IqdixodD1pKk4rYypGK20qSStUKnYsb3Q9cypOK2wqRitfKkkrTyp2LFB0PW8qQitmKkErcCpTK2cqeCx5dD1yKkIrdSpBK2QqUytiKngsRXQ9aSpCK2MqQSttKlMrVCp4LGR0PXMqQitsKkErXypTK08qeCxydD1vKkwrZip6K3AqaitnKmssQ3Q9cipMK3UqeitkKmorYiprLGt0PWkqTCtjKnorbSpqK1QqayxsZT1zKkwrbCp6K18qaitPKms7cmV0dXJuIG5bMF09cSxuWzFdPVcsblsyXT1SLG5bM109bnQsbls0XT1hdCxuWzVdPWx0LG5bNl09aHQsbls3XT1vdCxuWzhdPVB0LG5bOV09eXQsblsxMF09RXQsblsxMV09ZHQsblsxMl09cnQsblsxM109Q3QsblsxNF09a3QsblsxNV09bGUsbn07YnQuYWRkPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksblswXT10WzBdK2VbMF0sblsxXT10WzFdK2VbMV0sblsyXT10WzJdK2VbMl0sblszXT10WzNdK2VbM10sbls0XT10WzRdK2VbNF0sbls1XT10WzVdK2VbNV0sbls2XT10WzZdK2VbNl0sbls3XT10WzddK2VbN10sbls4XT10WzhdK2VbOF0sbls5XT10WzldK2VbOV0sblsxMF09dFsxMF0rZVsxMF0sblsxMV09dFsxMV0rZVsxMV0sblsxMl09dFsxMl0rZVsxMl0sblsxM109dFsxM10rZVsxM10sblsxNF09dFsxNF0rZVsxNF0sblsxNV09dFsxNV0rZVsxNV0sbn07YnQuc3VidHJhY3Q9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuWzBdPXRbMF0tZVswXSxuWzFdPXRbMV0tZVsxXSxuWzJdPXRbMl0tZVsyXSxuWzNdPXRbM10tZVszXSxuWzRdPXRbNF0tZVs0XSxuWzVdPXRbNV0tZVs1XSxuWzZdPXRbNl0tZVs2XSxuWzddPXRbN10tZVs3XSxuWzhdPXRbOF0tZVs4XSxuWzldPXRbOV0tZVs5XSxuWzEwXT10WzEwXS1lWzEwXSxuWzExXT10WzExXS1lWzExXSxuWzEyXT10WzEyXS1lWzEyXSxuWzEzXT10WzEzXS1lWzEzXSxuWzE0XT10WzE0XS1lWzE0XSxuWzE1XT10WzE1XS1lWzE1XSxufTtidC5tdWx0aXBseVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz10WzBdLHI9dFsxXSxpPXRbMl0scz10WzRdLGY9dFs1XSx1PXRbNl0sYz10WzhdLGw9dFs5XSxwPXRbMTBdLGQ9dFsxMl0sbT10WzEzXSxfPXRbMTRdLGc9ZVswXSxiPWVbMV0sVD1lWzJdLE89ZVs0XSxFPWVbNV0sdz1lWzZdLEM9ZVs4XSxNPWVbOV0sTj1lWzEwXSxGPWVbMTJdLEk9ZVsxM10sdj1lWzE0XSxCPW8qZytzKmIrYypULEE9cipnK2YqYitsKlQsUz1pKmcrdSpiK3AqVCx4PW8qTytzKkUrYyp3LEw9cipPK2YqRStsKncsej1pKk8rdSpFK3AqdyxqPW8qQytzKk0rYypOLGs9cipDK2YqTStsKk4scT1pKkMrdSpNK3AqTixXPW8qRitzKkkrYyp2K2QsUj1yKkYrZipJK2wqdittLG50PWkqRit1KkkrcCp2K187cmV0dXJuIG5bMF09QixuWzFdPUEsblsyXT1TLG5bM109MCxuWzRdPXgsbls1XT1MLG5bNl09eixuWzddPTAsbls4XT1qLG5bOV09ayxuWzEwXT1xLG5bMTFdPTAsblsxMl09VyxuWzEzXT1SLG5bMTRdPW50LG5bMTVdPTEsbn07YnQubXVsdGlwbHlCeU1hdHJpeDM9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJvdGF0aW9uIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89dFswXSxyPXRbMV0saT10WzJdLHM9dFs0XSxmPXRbNV0sdT10WzZdLGM9dFs4XSxsPXRbOV0scD10WzEwXSxkPWVbMF0sbT1lWzFdLF89ZVsyXSxnPWVbM10sYj1lWzRdLFQ9ZVs1XSxPPWVbNl0sRT1lWzddLHc9ZVs4XSxDPW8qZCtzKm0rYypfLE09cipkK2YqbStsKl8sTj1pKmQrdSptK3AqXyxGPW8qZytzKmIrYypULEk9cipnK2YqYitsKlQsdj1pKmcrdSpiK3AqVCxCPW8qTytzKkUrYyp3LEE9cipPK2YqRStsKncsUz1pKk8rdSpFK3AqdztyZXR1cm4gblswXT1DLG5bMV09TSxuWzJdPU4sblszXT0wLG5bNF09RixuWzVdPUksbls2XT12LG5bN109MCxuWzhdPUIsbls5XT1BLG5bMTBdPVMsblsxMV09MCxuWzEyXT10WzEyXSxuWzEzXT10WzEzXSxuWzE0XT10WzE0XSxuWzE1XT10WzE1XSxufTtidC5tdWx0aXBseUJ5VHJhbnNsYXRpb249ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInRyYW5zbGF0aW9uIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89ZS54LHI9ZS55LGk9ZS56LHM9byp0WzBdK3IqdFs0XStpKnRbOF0rdFsxMl0sZj1vKnRbMV0rcip0WzVdK2kqdFs5XSt0WzEzXSx1PW8qdFsyXStyKnRbNl0raSp0WzEwXSt0WzE0XTtyZXR1cm4gblswXT10WzBdLG5bMV09dFsxXSxuWzJdPXRbMl0sblszXT10WzNdLG5bNF09dFs0XSxuWzVdPXRbNV0sbls2XT10WzZdLG5bN109dFs3XSxuWzhdPXRbOF0sbls5XT10WzldLG5bMTBdPXRbMTBdLG5bMTFdPXRbMTFdLG5bMTJdPXMsblsxM109ZixuWzE0XT11LG5bMTVdPXRbMTVdLG59O2J0Lm11bHRpcGx5QnlTY2FsZT1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgic2NhbGUiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz1lLngscj1lLnksaT1lLno7cmV0dXJuIG89PT0xJiZyPT09MSYmaT09PTE/YnQuY2xvbmUodCxuKTooblswXT1vKnRbMF0sblsxXT1vKnRbMV0sblsyXT1vKnRbMl0sblszXT10WzNdLG5bNF09cip0WzRdLG5bNV09cip0WzVdLG5bNl09cip0WzZdLG5bN109dFs3XSxuWzhdPWkqdFs4XSxuWzldPWkqdFs5XSxuWzEwXT1pKnRbMTBdLG5bMTFdPXRbMTFdLG5bMTJdPXRbMTJdLG5bMTNdPXRbMTNdLG5bMTRdPXRbMTRdLG5bMTVdPXRbMTVdLG4pfTtidC5tdWx0aXBseUJ5VW5pZm9ybVNjYWxlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlcigic2NhbGUiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuWzBdPXRbMF0qZSxuWzFdPXRbMV0qZSxuWzJdPXRbMl0qZSxuWzNdPXRbM10sbls0XT10WzRdKmUsbls1XT10WzVdKmUsbls2XT10WzZdKmUsbls3XT10WzddLG5bOF09dFs4XSplLG5bOV09dFs5XSplLG5bMTBdPXRbMTBdKmUsblsxMV09dFsxMV0sblsxMl09dFsxMl0sblsxM109dFsxM10sblsxNF09dFsxNF0sblsxNV09dFsxNV0sbn07YnQubXVsdGlwbHlCeVZlY3Rvcj1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89ZS54LHI9ZS55LGk9ZS56LHM9ZS53LGY9dFswXSpvK3RbNF0qcit0WzhdKmkrdFsxMl0qcyx1PXRbMV0qbyt0WzVdKnIrdFs5XSppK3RbMTNdKnMsYz10WzJdKm8rdFs2XSpyK3RbMTBdKmkrdFsxNF0qcyxsPXRbM10qbyt0WzddKnIrdFsxMV0qaSt0WzE1XSpzO3JldHVybiBuLng9ZixuLnk9dSxuLno9YyxuLnc9bCxufTtidC5tdWx0aXBseUJ5UG9pbnRBc1ZlY3Rvcj1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89ZS54LHI9ZS55LGk9ZS56LHM9dFswXSpvK3RbNF0qcit0WzhdKmksZj10WzFdKm8rdFs1XSpyK3RbOV0qaSx1PXRbMl0qbyt0WzZdKnIrdFsxMF0qaTtyZXR1cm4gbi54PXMsbi55PWYsbi56PXUsbn07YnQubXVsdGlwbHlCeVBvaW50PWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz1lLngscj1lLnksaT1lLnoscz10WzBdKm8rdFs0XSpyK3RbOF0qaSt0WzEyXSxmPXRbMV0qbyt0WzVdKnIrdFs5XSppK3RbMTNdLHU9dFsyXSpvK3RbNl0qcit0WzEwXSppK3RbMTRdO3JldHVybiBuLng9cyxuLnk9ZixuLno9dSxufTtidC5tdWx0aXBseUJ5U2NhbGFyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlcigic2NhbGFyIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksblswXT10WzBdKmUsblsxXT10WzFdKmUsblsyXT10WzJdKmUsblszXT10WzNdKmUsbls0XT10WzRdKmUsbls1XT10WzVdKmUsbls2XT10WzZdKmUsbls3XT10WzddKmUsbls4XT10WzhdKmUsbls5XT10WzldKmUsblsxMF09dFsxMF0qZSxuWzExXT10WzExXSplLG5bMTJdPXRbMTJdKmUsblsxM109dFsxM10qZSxuWzE0XT10WzE0XSplLG5bMTVdPXRbMTVdKmUsbn07YnQubmVnYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZVswXT0tdFswXSxlWzFdPS10WzFdLGVbMl09LXRbMl0sZVszXT0tdFszXSxlWzRdPS10WzRdLGVbNV09LXRbNV0sZVs2XT0tdFs2XSxlWzddPS10WzddLGVbOF09LXRbOF0sZVs5XT0tdFs5XSxlWzEwXT0tdFsxMF0sZVsxMV09LXRbMTFdLGVbMTJdPS10WzEyXSxlWzEzXT0tdFsxM10sZVsxNF09LXRbMTRdLGVbMTVdPS10WzE1XSxlfTtidC50cmFuc3Bvc2U9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpO2xldCBuPXRbMV0sbz10WzJdLHI9dFszXSxpPXRbNl0scz10WzddLGY9dFsxMV07cmV0dXJuIGVbMF09dFswXSxlWzFdPXRbNF0sZVsyXT10WzhdLGVbM109dFsxMl0sZVs0XT1uLGVbNV09dFs1XSxlWzZdPXRbOV0sZVs3XT10WzEzXSxlWzhdPW8sZVs5XT1pLGVbMTBdPXRbMTBdLGVbMTFdPXRbMTRdLGVbMTJdPXIsZVsxM109cyxlWzE0XT1mLGVbMTVdPXRbMTVdLGV9O2J0LmFicz1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpLGVbMF09TWF0aC5hYnModFswXSksZVsxXT1NYXRoLmFicyh0WzFdKSxlWzJdPU1hdGguYWJzKHRbMl0pLGVbM109TWF0aC5hYnModFszXSksZVs0XT1NYXRoLmFicyh0WzRdKSxlWzVdPU1hdGguYWJzKHRbNV0pLGVbNl09TWF0aC5hYnModFs2XSksZVs3XT1NYXRoLmFicyh0WzddKSxlWzhdPU1hdGguYWJzKHRbOF0pLGVbOV09TWF0aC5hYnModFs5XSksZVsxMF09TWF0aC5hYnModFsxMF0pLGVbMTFdPU1hdGguYWJzKHRbMTFdKSxlWzEyXT1NYXRoLmFicyh0WzEyXSksZVsxM109TWF0aC5hYnModFsxM10pLGVbMTRdPU1hdGguYWJzKHRbMTRdKSxlWzE1XT1NYXRoLmFicyh0WzE1XSksZX07YnQuZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHxoKHQpJiZoKGUpJiZ0WzEyXT09PWVbMTJdJiZ0WzEzXT09PWVbMTNdJiZ0WzE0XT09PWVbMTRdJiZ0WzBdPT09ZVswXSYmdFsxXT09PWVbMV0mJnRbMl09PT1lWzJdJiZ0WzRdPT09ZVs0XSYmdFs1XT09PWVbNV0mJnRbNl09PT1lWzZdJiZ0WzhdPT09ZVs4XSYmdFs5XT09PWVbOV0mJnRbMTBdPT09ZVsxMF0mJnRbM109PT1lWzNdJiZ0WzddPT09ZVs3XSYmdFsxMV09PT1lWzExXSYmdFsxNV09PT1lWzE1XX07YnQuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG49bj8/MCx0PT09ZXx8aCh0KSYmaChlKSYmTWF0aC5hYnModFswXS1lWzBdKTw9biYmTWF0aC5hYnModFsxXS1lWzFdKTw9biYmTWF0aC5hYnModFsyXS1lWzJdKTw9biYmTWF0aC5hYnModFszXS1lWzNdKTw9biYmTWF0aC5hYnModFs0XS1lWzRdKTw9biYmTWF0aC5hYnModFs1XS1lWzVdKTw9biYmTWF0aC5hYnModFs2XS1lWzZdKTw9biYmTWF0aC5hYnModFs3XS1lWzddKTw9biYmTWF0aC5hYnModFs4XS1lWzhdKTw9biYmTWF0aC5hYnModFs5XS1lWzldKTw9biYmTWF0aC5hYnModFsxMF0tZVsxMF0pPD1uJiZNYXRoLmFicyh0WzExXS1lWzExXSk8PW4mJk1hdGguYWJzKHRbMTJdLWVbMTJdKTw9biYmTWF0aC5hYnModFsxM10tZVsxM10pPD1uJiZNYXRoLmFicyh0WzE0XS1lWzE0XSk8PW4mJk1hdGguYWJzKHRbMTVdLWVbMTVdKTw9bn07YnQuZ2V0VHJhbnNsYXRpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKSxlLng9dFsxMl0sZS55PXRbMTNdLGUuej10WzE0XSxlfTtidC5nZXRNYXRyaXgzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZVswXT10WzBdLGVbMV09dFsxXSxlWzJdPXRbMl0sZVszXT10WzRdLGVbNF09dFs1XSxlWzVdPXRbNl0sZVs2XT10WzhdLGVbN109dFs5XSxlWzhdPXRbMTBdLGV9O0ZDPW5ldyBaLExDPW5ldyBaLERDPW5ldyBtZSxCQz1uZXcgbWUoMCwwLDAsMSk7YnQuaW52ZXJzZT1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSk7bGV0IG49dFswXSxvPXRbNF0scj10WzhdLGk9dFsxMl0scz10WzFdLGY9dFs1XSx1PXRbOV0sYz10WzEzXSxsPXRbMl0scD10WzZdLGQ9dFsxMF0sbT10WzE0XSxfPXRbM10sZz10WzddLGI9dFsxMV0sVD10WzE1XSxPPWQqVCxFPW0qYix3PXAqVCxDPW0qZyxNPXAqYixOPWQqZyxGPWwqVCxJPW0qXyx2PWwqYixCPWQqXyxBPWwqZyxTPXAqXyx4PU8qZitDKnUrTSpjLShFKmYrdyp1K04qYyksTD1FKnMrRip1K0IqYy0oTypzK0kqdSt2KmMpLHo9dypzK0kqZitBKmMtKEMqcytGKmYrUypjKSxqPU4qcyt2KmYrUyp1LShNKnMrQipmK0EqdSksaz1FKm8rdypyK04qaS0oTypvK0MqcitNKmkpLHE9TypuK0kqcit2KmktKEUqbitGKnIrQippKSxXPUMqbitGKm8rUyppLSh3Km4rSSpvK0EqaSksUj1NKm4rQipvK0Eqci0oTipuK3YqbytTKnIpO089cipjLEU9aSp1LHc9bypjLEM9aSpmLE09byp1LE49cipmLEY9bipjLEk9aSpzLHY9bip1LEI9cipzLEE9bipmLFM9bypzO2xldCBudD1PKmcrQypiK00qVC0oRSpnK3cqYitOKlQpLGF0PUUqXytGKmIrQipULShPKl8rSSpiK3YqVCksbHQ9dypfK0kqZytBKlQtKEMqXytGKmcrUypUKSxodD1OKl8rdipnK1MqYi0oTSpfK0IqZytBKmIpLG90PXcqZCtOKm0rRSpwLShNKm0rTypwK0MqZCksUHQ9diptK08qbCtJKmQtKEYqZCtCKm0rRSpsKSx5dD1GKnArUyptK0MqbC0oQSptK3cqbCtJKnApLEV0PUEqZCtNKmwrQipwLSh2KnArUypkK04qbCksZHQ9bip4K28qTCtyKnoraSpqO2lmKE1hdGguYWJzKGR0KTxQLkVQU0lMT04yMSl7aWYoWi5lcXVhbHNFcHNpbG9uKGJ0LmdldE1hdHJpeDModCxGQyksTEMsUC5FUFNJTE9ONykmJm1lLmVxdWFscyhidC5nZXRSb3codCwzLERDKSxCQykpcmV0dXJuIGVbMF09MCxlWzFdPTAsZVsyXT0wLGVbM109MCxlWzRdPTAsZVs1XT0wLGVbNl09MCxlWzddPTAsZVs4XT0wLGVbOV09MCxlWzEwXT0wLGVbMTFdPTAsZVsxMl09LXRbMTJdLGVbMTNdPS10WzEzXSxlWzE0XT0tdFsxNF0sZVsxNV09MSxlO3Rocm93IG5ldyBBZSgibWF0cml4IGlzIG5vdCBpbnZlcnRpYmxlIGJlY2F1c2UgaXRzIGRldGVybWluYXRlIGlzIHplcm8uIil9cmV0dXJuIGR0PTEvZHQsZVswXT14KmR0LGVbMV09TCpkdCxlWzJdPXoqZHQsZVszXT1qKmR0LGVbNF09aypkdCxlWzVdPXEqZHQsZVs2XT1XKmR0LGVbN109UipkdCxlWzhdPW50KmR0LGVbOV09YXQqZHQsZVsxMF09bHQqZHQsZVsxMV09aHQqZHQsZVsxMl09b3QqZHQsZVsxM109UHQqZHQsZVsxNF09eXQqZHQsZVsxNV09RXQqZHQsZX07YnQuaW52ZXJzZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKTtsZXQgbj10WzBdLG89dFsxXSxyPXRbMl0saT10WzRdLHM9dFs1XSxmPXRbNl0sdT10WzhdLGM9dFs5XSxsPXRbMTBdLHA9dFsxMl0sZD10WzEzXSxtPXRbMTRdLF89LW4qcC1vKmQtciptLGc9LWkqcC1zKmQtZiptLGI9LXUqcC1jKmQtbCptO3JldHVybiBlWzBdPW4sZVsxXT1pLGVbMl09dSxlWzNdPTAsZVs0XT1vLGVbNV09cyxlWzZdPWMsZVs3XT0wLGVbOF09cixlWzldPWYsZVsxMF09bCxlWzExXT0wLGVbMTJdPV8sZVsxM109ZyxlWzE0XT1iLGVbMTVdPTEsZX07VUM9bmV3IGJ0O2J0LmludmVyc2VUcmFuc3Bvc2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKSxidC5pbnZlcnNlKGJ0LnRyYW5zcG9zZSh0LFVDKSxlKX07YnQuSURFTlRJVFk9T2JqZWN0LmZyZWV6ZShuZXcgYnQoMSwwLDAsMCwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMSkpO2J0LlpFUk89T2JqZWN0LmZyZWV6ZShuZXcgYnQoMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCkpO2J0LkNPTFVNTjBST1cwPTA7YnQuQ09MVU1OMFJPVzE9MTtidC5DT0xVTU4wUk9XMj0yO2J0LkNPTFVNTjBST1czPTM7YnQuQ09MVU1OMVJPVzA9NDtidC5DT0xVTU4xUk9XMT01O2J0LkNPTFVNTjFST1cyPTY7YnQuQ09MVU1OMVJPVzM9NztidC5DT0xVTU4yUk9XMD04O2J0LkNPTFVNTjJST1cxPTk7YnQuQ09MVU1OMlJPVzI9MTA7YnQuQ09MVU1OMlJPVzM9MTE7YnQuQ09MVU1OM1JPVzA9MTI7YnQuQ09MVU1OM1JPVzE9MTM7YnQuQ09MVU1OM1JPVzI9MTQ7YnQuQ09MVU1OM1JPVzM9MTU7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoYnQucHJvdG90eXBlLHtsZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiBidC5wYWNrZWRMZW5ndGh9fX0pO2J0LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gYnQuY2xvbmUodGhpcyx0KX07YnQucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gYnQuZXF1YWxzKHRoaXMsdCl9O2J0LmVxdWFsc0FycmF5PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdFswXT09PWVbbl0mJnRbMV09PT1lW24rMV0mJnRbMl09PT1lW24rMl0mJnRbM109PT1lW24rM10mJnRbNF09PT1lW24rNF0mJnRbNV09PT1lW24rNV0mJnRbNl09PT1lW24rNl0mJnRbN109PT1lW24rN10mJnRbOF09PT1lW24rOF0mJnRbOV09PT1lW24rOV0mJnRbMTBdPT09ZVtuKzEwXSYmdFsxMV09PT1lW24rMTFdJiZ0WzEyXT09PWVbbisxMl0mJnRbMTNdPT09ZVtuKzEzXSYmdFsxNF09PT1lW24rMTRdJiZ0WzE1XT09PWVbbisxNV19O2J0LnByb3RvdHlwZS5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGJ0LmVxdWFsc0Vwc2lsb24odGhpcyx0LGUpfTtidC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5gKCR7dGhpc1swXX0sICR7dGhpc1s0XX0sICR7dGhpc1s4XX0sICR7dGhpc1sxMl19KQooJHt0aGlzWzFdfSwgJHt0aGlzWzVdfSwgJHt0aGlzWzldfSwgJHt0aGlzWzEzXX0pCigke3RoaXNbMl19LCAke3RoaXNbNl19LCAke3RoaXNbMTBdfSwgJHt0aGlzWzE0XX0pCigke3RoaXNbM119LCAke3RoaXNbN119LCAke3RoaXNbMTFdfSwgJHt0aGlzWzE1XX0pYH07c3Q9YnR9KTtmdW5jdGlvbiBrQyh0LGUsbil7eS5kZWZpbmVkKCJhcnJheSIsdCkseS5kZWZpbmVkKCJpdGVtVG9GaW5kIixlKSx5LmRlZmluZWQoImNvbXBhcmF0b3IiLG4pO2xldCBvPTAscj10Lmxlbmd0aC0xLGkscztmb3IoO288PXI7KXtpZihpPX5+KChvK3IpLzIpLHM9bih0W2ldLGUpLHM8MCl7bz1pKzE7Y29udGludWV9aWYocz4wKXtyPWktMTtjb250aW51ZX1yZXR1cm4gaX1yZXR1cm5+KHIrMSl9dmFyIFZzLE5tPSQoKCk9PntXdCgpO1ZzPWtDfSk7ZnVuY3Rpb24gR0ModCxlLG4sbyxyKXt0aGlzLnhQb2xlV2FuZGVyPXQsdGhpcy55UG9sZVdhbmRlcj1lLHRoaXMueFBvbGVPZmZzZXQ9bix0aGlzLnlQb2xlT2Zmc2V0PW8sdGhpcy51dDFNaW51c1V0Yz1yfXZhciBjZixJbT0kKCgpPT57Y2Y9R0N9KTtmdW5jdGlvbiBWQyh0KXtpZih0PT09bnVsbHx8aXNOYU4odCkpdGhyb3cgbmV3IEQoInllYXIgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYSBudW1iZXIuIik7cmV0dXJuIHQlND09PTAmJnQlMTAwIT09MHx8dCU0MDA9PT0wfXZhciBhZix2bT0kKCgpPT57anQoKTthZj1WQ30pO2Z1bmN0aW9uIHpDKHQsZSxuLG8scixpLHMsZil7dD10Pz8xLGU9ZT8/MSxuPW4/PzEsbz1vPz8wLHI9cj8/MCxpPWk/PzAscz1zPz8wLGY9Zj8/ITEsZygpLGIoKSx0aGlzLnllYXI9dCx0aGlzLm1vbnRoPWUsdGhpcy5kYXk9bix0aGlzLmhvdXI9byx0aGlzLm1pbnV0ZT1yLHRoaXMuc2Vjb25kPWksdGhpcy5taWxsaXNlY29uZD1zLHRoaXMuaXNMZWFwU2Vjb25kPWY7ZnVuY3Rpb24gZygpe3kudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJZZWFyIix0LDEpLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJZZWFyIix0LDk5OTkpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJNb250aCIsZSwxKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiTW9udGgiLGUsMTIpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJEYXkiLG4sMSkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoIkRheSIsbiwzMSkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoIkhvdXIiLG8sMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoIkhvdXIiLG8sMjMpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJNaW51dGUiLHIsMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoIk1pbnV0ZSIsciw1OSkseS50eXBlT2YuYm9vbCgiSXNMZWFwU2Vjb25kIixmKSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiU2Vjb25kIixpLDApLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJTZWNvbmQiLGksZj82MDo1OSkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoIk1pbGxpc2Vjb25kIixzLDApLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbigiTWlsbGlzZWNvbmQiLHMsMWUzKX1mdW5jdGlvbiBiKCl7bGV0IFQ9ZT09PTImJmFmKHQpP0MxW2UtMV0rMTpDMVtlLTFdO2lmKG4+VCl0aHJvdyBuZXcgRCgiTW9udGggYW5kIERheSByZXByZXNlbnRzIGludmFsaWQgZGF0ZSIpfX12YXIgQzEsV2wseDE9JCgoKT0+e1d0KCk7anQoKTt2bSgpO0MxPVszMSwyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV07V2w9ekN9KTtmdW5jdGlvbiBqQyh0LGUpe3RoaXMuanVsaWFuRGF0ZT10LHRoaXMub2Zmc2V0PWV9dmFyIFdlLEZtPSQoKCk9PntXZT1qQ30pO3ZhciBIQyx5bixYbD0kKCgpPT57SEM9e1NFQ09ORFNfUEVSX01JTExJU0VDT05EOi4wMDEsU0VDT05EU19QRVJfTUlOVVRFOjYwLE1JTlVURVNfUEVSX0hPVVI6NjAsSE9VUlNfUEVSX0RBWToyNCxTRUNPTkRTX1BFUl9IT1VSOjM2MDAsTUlOVVRFU19QRVJfREFZOjE0NDAsU0VDT05EU19QRVJfREFZOjg2NDAwLERBWVNfUEVSX0pVTElBTl9DRU5UVVJZOjM2NTI1LFBJQ09TRUNPTkQ6MWUtOSxNT0RJRklFRF9KVUxJQU5fREFURV9ESUZGRVJFTkNFOjI0MDAwMDA1ZS0xfSx5bj1PYmplY3QuZnJlZXplKEhDKX0pO3ZhciBxQyxPZSxZbD0kKCgpPT57cUM9e1VUQzowLFRBSToxfSxPZT1PYmplY3QuZnJlZXplKHFDKX0pO2Z1bmN0aW9uIExtKHQsZSl7cmV0dXJuIFZ0LmNvbXBhcmUodC5qdWxpYW5EYXRlLGUuanVsaWFuRGF0ZSl9ZnVuY3Rpb24gSmwodCl7S2MuanVsaWFuRGF0ZT10O2xldCBlPVZ0LmxlYXBTZWNvbmRzLG49VnMoZSxLYyxMbSk7bjwwJiYobj1+biksbj49ZS5sZW5ndGgmJihuPWUubGVuZ3RoLTEpO2xldCBvPWVbbl0ub2Zmc2V0O24+MCYmVnQuc2Vjb25kc0RpZmZlcmVuY2UoZVtuXS5qdWxpYW5EYXRlLHQpPm8mJihuLS0sbz1lW25dLm9mZnNldCksVnQuYWRkU2Vjb25kcyh0LG8sdCl9ZnVuY3Rpb24gUDEodCxlKXtLYy5qdWxpYW5EYXRlPXQ7bGV0IG49VnQubGVhcFNlY29uZHMsbz1WcyhuLEtjLExtKTtpZihvPDAmJihvPX5vKSxvPT09MClyZXR1cm4gVnQuYWRkU2Vjb25kcyh0LC1uWzBdLm9mZnNldCxlKTtpZihvPj1uLmxlbmd0aClyZXR1cm4gVnQuYWRkU2Vjb25kcyh0LC1uW28tMV0ub2Zmc2V0LGUpO2xldCByPVZ0LnNlY29uZHNEaWZmZXJlbmNlKG5bb10uanVsaWFuRGF0ZSx0KTtpZihyPT09MClyZXR1cm4gVnQuYWRkU2Vjb25kcyh0LC1uW29dLm9mZnNldCxlKTtpZighKHI8PTEpKXJldHVybiBWdC5hZGRTZWNvbmRzKHQsLW5bLS1vXS5vZmZzZXQsZSl9ZnVuY3Rpb24gbnModCxlLG4pe2xldCBvPWUveW4uU0VDT05EU19QRVJfREFZfDA7cmV0dXJuIHQrPW8sZS09eW4uU0VDT05EU19QRVJfREFZKm8sZTwwJiYodC0tLGUrPXluLlNFQ09ORFNfUEVSX0RBWSksbi5kYXlOdW1iZXI9dCxuLnNlY29uZHNPZkRheT1lLG59ZnVuY3Rpb24gRG0odCxlLG4sbyxyLGkscyl7bGV0IGY9KGUtMTQpLzEyfDAsdT10KzQ4MDArZixjPSgxNDYxKnUvNHwwKSsoMzY3KihlLTItMTIqZikvMTJ8MCktKDMqKCh1KzEwMCkvMTAwfDApLzR8MCkrbi0zMjA3NTtvPW8tMTIsbzwwJiYobys9MjQpO2xldCBsPWkrKG8qeW4uU0VDT05EU19QRVJfSE9VUityKnluLlNFQ09ORFNfUEVSX01JTlVURStzKnluLlNFQ09ORFNfUEVSX01JTExJU0VDT05EKTtyZXR1cm4gbD49NDMyMDAmJihjLT0xKSxbYyxsXX1mdW5jdGlvbiBWdCh0LGUsbil7dGhpcy5kYXlOdW1iZXI9dm9pZCAwLHRoaXMuc2Vjb25kc09mRGF5PXZvaWQgMCx0PXQ/PzAsZT1lPz8wLG49bj8/T2UuVVRDO2xldCBvPXR8MDtlPWUrKHQtbykqeW4uU0VDT05EU19QRVJfREFZLG5zKG8sZSx0aGlzKSxuPT09T2UuVVRDJiZKbCh0aGlzKX12YXIgTTEsJGwsWmwsS2MsS0MsV0MsWEMsWUMsJEMsQm0sWkMsUUMsSkMsTHIsUWwsR24sdHA9JCgoKT0+e05tKCk7ZnQoKTtqdCgpO3gxKCk7dm0oKTtGbSgpO1hsKCk7WWwoKTtNMT1uZXcgV2wsJGw9WzMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXSxabD0yOTtLYz1uZXcgV2U7S0M9L14oXGR7NH0pJC8sV0M9L14oXGR7NH0pLShcZHsyfSkkLyxYQz0vXihcZHs0fSktPyhcZHszfSkkLyxZQz0vXihcZHs0fSktP1coXGR7Mn0pLT8oXGR7MX0pPyQvLCRDPS9eKFxkezR9KS0/KFxkezJ9KS0/KFxkezJ9KSQvLEJtPS8oW1orXC1dKT8oXGR7Mn0pPzo/KFxkezJ9KT8kLyxaQz0vXihcZHsyfSkoXC5cZCspPy8uc291cmNlK0JtLnNvdXJjZSxRQz0vXihcZHsyfSk6PyhcZHsyfSkoXC5cZCspPy8uc291cmNlK0JtLnNvdXJjZSxKQz0vXihcZHsyfSk6PyhcZHsyfSk6PyhcZHsyfSkoXC5cZCspPy8uc291cmNlK0JtLnNvdXJjZSxMcj0iSW52YWxpZCBJU08gODYwMSBkYXRlLiI7VnQuZnJvbUdyZWdvcmlhbkRhdGU9ZnVuY3Rpb24odCxlKXtpZighKHQgaW5zdGFuY2VvZiBXbCkpdGhyb3cgbmV3IEQoImRhdGUgbXVzdCBiZSBhIHZhbGlkIEdyZWdvcmlhbkRhdGUuIik7bGV0IG49RG0odC55ZWFyLHQubW9udGgsdC5kYXksdC5ob3VyLHQubWludXRlLHQuc2Vjb25kLHQubWlsbGlzZWNvbmQpO3JldHVybiBoKGUpPyhucyhuWzBdLG5bMV0sZSksSmwoZSksZSk6bmV3IFZ0KG5bMF0sblsxXSxPZS5VVEMpfTtWdC5mcm9tRGF0ZT1mdW5jdGlvbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIERhdGUpfHxpc05hTih0LmdldFRpbWUoKSkpdGhyb3cgbmV3IEQoImRhdGUgbXVzdCBiZSBhIHZhbGlkIEphdmFTY3JpcHQgRGF0ZS4iKTtsZXQgbj1EbSh0LmdldFVUQ0Z1bGxZZWFyKCksdC5nZXRVVENNb250aCgpKzEsdC5nZXRVVENEYXRlKCksdC5nZXRVVENIb3VycygpLHQuZ2V0VVRDTWludXRlcygpLHQuZ2V0VVRDU2Vjb25kcygpLHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCkpO3JldHVybiBoKGUpPyhucyhuWzBdLG5bMV0sZSksSmwoZSksZSk6bmV3IFZ0KG5bMF0sblsxXSxPZS5VVEMpfTtWdC5mcm9tSXNvODYwMT1mdW5jdGlvbih0LGUpe2lmKHR5cGVvZiB0IT0ic3RyaW5nIil0aHJvdyBuZXcgRChMcik7dD10LnJlcGxhY2UoIiwiLCIuIik7bGV0IG49dC5zcGxpdCgiVCIpLG8scj0xLGk9MSxzPTAsZj0wLHU9MCxjPTAsbD1uWzBdLHA9blsxXSxkLG07aWYoIWgobCkpdGhyb3cgbmV3IEQoTHIpO2xldCBfO2lmKG49bC5tYXRjaCgkQyksbiE9PW51bGwpe2lmKF89bC5zcGxpdCgiLSIpLmxlbmd0aC0xLF8+MCYmXyE9PTIpdGhyb3cgbmV3IEQoTHIpO289K25bMV0scj0rblsyXSxpPStuWzNdfWVsc2UgaWYobj1sLm1hdGNoKFdDKSxuIT09bnVsbClvPStuWzFdLHI9K25bMl07ZWxzZSBpZihuPWwubWF0Y2goS0MpLG4hPT1udWxsKW89K25bMV07ZWxzZXtsZXQgTztpZihuPWwubWF0Y2goWEMpLG4hPT1udWxsKXtpZihvPStuWzFdLE89K25bMl0sbT1hZihvKSxPPDF8fG0mJk8+MzY2fHwhbSYmTz4zNjUpdGhyb3cgbmV3IEQoTHIpfWVsc2UgaWYobj1sLm1hdGNoKFlDKSxuIT09bnVsbCl7bz0rblsxXTtsZXQgRT0rblsyXSx3PStuWzNdfHwwO2lmKF89bC5zcGxpdCgiLSIpLmxlbmd0aC0xLF8+MCYmKCFoKG5bM10pJiZfIT09MXx8aChuWzNdKSYmXyE9PTIpKXRocm93IG5ldyBEKExyKTtsZXQgQz1uZXcgRGF0ZShEYXRlLlVUQyhvLDAsNCkpO089RSo3K3ctQy5nZXRVVENEYXkoKS0zfWVsc2UgdGhyb3cgbmV3IEQoTHIpO2Q9bmV3IERhdGUoRGF0ZS5VVEMobywwLDEpKSxkLnNldFVUQ0RhdGUoTykscj1kLmdldFVUQ01vbnRoKCkrMSxpPWQuZ2V0VVRDRGF0ZSgpfWlmKG09YWYobykscjwxfHxyPjEyfHxpPDF8fChyIT09Mnx8IW0pJiZpPiRsW3ItMV18fG0mJnI9PT0yJiZpPlpsKXRocm93IG5ldyBEKExyKTtsZXQgZztpZihoKHApKXtpZihuPXAubWF0Y2goSkMpLG4hPT1udWxsKXtpZihfPXAuc3BsaXQoIjoiKS5sZW5ndGgtMSxfPjAmJl8hPT0yJiZfIT09Myl0aHJvdyBuZXcgRChMcik7cz0rblsxXSxmPStuWzJdLHU9K25bM10sYz0rKG5bNF18fDApKjFlMyxnPTV9ZWxzZSBpZihuPXAubWF0Y2goUUMpLG4hPT1udWxsKXtpZihfPXAuc3BsaXQoIjoiKS5sZW5ndGgtMSxfPjIpdGhyb3cgbmV3IEQoTHIpO3M9K25bMV0sZj0rblsyXSx1PSsoblszXXx8MCkqNjAsZz00fWVsc2UgaWYobj1wLm1hdGNoKFpDKSxuIT09bnVsbClzPStuWzFdLGY9KyhuWzJdfHwwKSo2MCxnPTM7ZWxzZSB0aHJvdyBuZXcgRChMcik7aWYoZj49NjB8fHU+PTYxfHxzPjI0fHxzPT09MjQmJihmPjB8fHU+MHx8Yz4wKSl0aHJvdyBuZXcgRChMcik7bGV0IE89bltnXSxFPStuW2crMV0sdz0rKG5bZysyXXx8MCk7c3dpdGNoKE8pe2Nhc2UiKyI6cz1zLUUsZj1mLXc7YnJlYWs7Y2FzZSItIjpzPXMrRSxmPWYrdzticmVhaztjYXNlIloiOmJyZWFrO2RlZmF1bHQ6Zj1mK25ldyBEYXRlKERhdGUuVVRDKG8sci0xLGkscyxmKSkuZ2V0VGltZXpvbmVPZmZzZXQoKTticmVha319bGV0IGI9dT09PTYwO2ZvcihiJiZ1LS07Zj49NjA7KWYtPTYwLHMrKztmb3IoO3M+PTI0OylzLT0yNCxpKys7Zm9yKGQ9bSYmcj09PTI/Wmw6JGxbci0xXTtpPmQ7KWktPWQscisrLHI+MTImJihyLT0xMixvKyspLGQ9bSYmcj09PTI/Wmw6JGxbci0xXTtmb3IoO2Y8MDspZis9NjAscy0tO2Zvcig7czwwOylzKz0yNCxpLS07Zm9yKDtpPDE7KXItLSxyPDEmJihyKz0xMixvLS0pLGQ9bSYmcj09PTI/Wmw6JGxbci0xXSxpKz1kO2xldCBUPURtKG8scixpLHMsZix1LGMpO3JldHVybiBoKGUpPyhucyhUWzBdLFRbMV0sZSksSmwoZSkpOmU9bmV3IFZ0KFRbMF0sVFsxXSxPZS5VVEMpLGImJlZ0LmFkZFNlY29uZHMoZSwxLGUpLGV9O1Z0Lm5vdz1mdW5jdGlvbih0KXtyZXR1cm4gVnQuZnJvbURhdGUobmV3IERhdGUsdCl9O1FsPW5ldyBWdCgwLDAsT2UuVEFJKTtWdC50b0dyZWdvcmlhbkRhdGU9ZnVuY3Rpb24odCxlKXtpZighaCh0KSl0aHJvdyBuZXcgRCgianVsaWFuRGF0ZSBpcyByZXF1aXJlZC4iKTtsZXQgbj0hMSxvPVAxKHQsUWwpO2gobyl8fChWdC5hZGRTZWNvbmRzKHQsLTEsUWwpLG89UDEoUWwsUWwpLG49ITApO2xldCByPW8uZGF5TnVtYmVyLGk9by5zZWNvbmRzT2ZEYXk7aT49NDMyMDAmJihyKz0xKTtsZXQgcz1yKzY4NTY5fDAsZj00KnMvMTQ2MDk3fDA7cz1zLSgoMTQ2MDk3KmYrMykvNHwwKXwwO2xldCB1PTRlMyoocysxKS8xNDYxMDAxfDA7cz1zLSgxNDYxKnUvNHwwKSszMXwwO2xldCBjPTgwKnMvMjQ0N3wwLGw9cy0oMjQ0NypjLzgwfDApfDA7cz1jLzExfDA7bGV0IHA9YysyLTEyKnN8MCxkPTEwMCooZi00OSkrdStzfDAsbT1pL3luLlNFQ09ORFNfUEVSX0hPVVJ8MCxfPWktbSp5bi5TRUNPTkRTX1BFUl9IT1VSLGc9Xy95bi5TRUNPTkRTX1BFUl9NSU5VVEV8MDtfPV8tZyp5bi5TRUNPTkRTX1BFUl9NSU5VVEU7bGV0IGI9X3wwLFQ9KF8tYikveW4uU0VDT05EU19QRVJfTUlMTElTRUNPTkQ7cmV0dXJuIG0rPTEyLG0+MjMmJihtLT0yNCksbiYmKGIrPTEpLGgoZSk/KGUueWVhcj1kLGUubW9udGg9cCxlLmRheT1sLGUuaG91cj1tLGUubWludXRlPWcsZS5zZWNvbmQ9YixlLm1pbGxpc2Vjb25kPVQsZS5pc0xlYXBTZWNvbmQ9bixlKTpuZXcgV2woZCxwLGwsbSxnLGIsVCxuKX07VnQudG9EYXRlPWZ1bmN0aW9uKHQpe2lmKCFoKHQpKXRocm93IG5ldyBEKCJqdWxpYW5EYXRlIGlzIHJlcXVpcmVkLiIpO2xldCBlPVZ0LnRvR3JlZ29yaWFuRGF0ZSh0LE0xKSxuPWUuc2Vjb25kO3JldHVybiBlLmlzTGVhcFNlY29uZCYmKG4tPTEpLG5ldyBEYXRlKERhdGUuVVRDKGUueWVhcixlLm1vbnRoLTEsZS5kYXksZS5ob3VyLGUubWludXRlLG4sZS5taWxsaXNlY29uZCkpfTtWdC50b0lzbzg2MDE9ZnVuY3Rpb24odCxlKXtpZighaCh0KSl0aHJvdyBuZXcgRCgianVsaWFuRGF0ZSBpcyByZXF1aXJlZC4iKTtsZXQgbj1WdC50b0dyZWdvcmlhbkRhdGUodCxNMSksbz1uLnllYXIscj1uLm1vbnRoLGk9bi5kYXkscz1uLmhvdXIsZj1uLm1pbnV0ZSx1PW4uc2Vjb25kLGM9bi5taWxsaXNlY29uZDtvPT09MWU0JiZyPT09MSYmaT09PTEmJnM9PT0wJiZmPT09MCYmdT09PTAmJmM9PT0wJiYobz05OTk5LHI9MTIsaT0zMSxzPTI0KTtsZXQgbDtpZighaChlKSYmYyE9PTApe2xldCBwPWMqLjAxO3JldHVybiBsPXA8MWUtNj9wLnRvRml4ZWQoMjApLnJlcGxhY2UoIi4iLCIiKS5yZXBsYWNlKC8wKyQvLCIiKTpwLnRvU3RyaW5nKCkucmVwbGFjZSgiLiIsIiIpLGAke28udG9TdHJpbmcoKS5wYWRTdGFydCg0LCIwIil9LSR7ci50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX0tJHtpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfVQke3MudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9OiR7Zi50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX06JHt1LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfS4ke2x9WmB9cmV0dXJuIWgoZSl8fGU9PT0wP2Ake28udG9TdHJpbmcoKS5wYWRTdGFydCg0LCIwIil9LSR7ci50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX0tJHtpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfVQke3MudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9OiR7Zi50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX06JHt1LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfVpgOihsPShjKi4wMSkudG9GaXhlZChlKS5yZXBsYWNlKCIuIiwiIikuc2xpY2UoMCxlKSxgJHtvLnRvU3RyaW5nKCkucGFkU3RhcnQoNCwiMCIpfS0ke3IudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9LSR7aS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX1UJHtzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpfToke2YudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIil9OiR7dS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIjAiKX0uJHtsfVpgKX07VnQuY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihoKHQpKXJldHVybiBoKGUpPyhlLmRheU51bWJlcj10LmRheU51bWJlcixlLnNlY29uZHNPZkRheT10LnNlY29uZHNPZkRheSxlKTpuZXcgVnQodC5kYXlOdW1iZXIsdC5zZWNvbmRzT2ZEYXksT2UuVEFJKX07VnQuY29tcGFyZT1mdW5jdGlvbih0LGUpe2lmKCFoKHQpKXRocm93IG5ldyBEKCJsZWZ0IGlzIHJlcXVpcmVkLiIpO2lmKCFoKGUpKXRocm93IG5ldyBEKCJyaWdodCBpcyByZXF1aXJlZC4iKTtsZXQgbj10LmRheU51bWJlci1lLmRheU51bWJlcjtyZXR1cm4gbiE9PTA/bjp0LnNlY29uZHNPZkRheS1lLnNlY29uZHNPZkRheX07VnQuZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHxoKHQpJiZoKGUpJiZ0LmRheU51bWJlcj09PWUuZGF5TnVtYmVyJiZ0LnNlY29uZHNPZkRheT09PWUuc2Vjb25kc09mRGF5fTtWdC5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbj1uPz8wLHQ9PT1lfHxoKHQpJiZoKGUpJiZNYXRoLmFicyhWdC5zZWNvbmRzRGlmZmVyZW5jZSh0LGUpKTw9bn07VnQudG90YWxEYXlzPWZ1bmN0aW9uKHQpe2lmKCFoKHQpKXRocm93IG5ldyBEKCJqdWxpYW5EYXRlIGlzIHJlcXVpcmVkLiIpO3JldHVybiB0LmRheU51bWJlcit0LnNlY29uZHNPZkRheS95bi5TRUNPTkRTX1BFUl9EQVl9O1Z0LnNlY29uZHNEaWZmZXJlbmNlPWZ1bmN0aW9uKHQsZSl7aWYoIWgodCkpdGhyb3cgbmV3IEQoImxlZnQgaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEQoInJpZ2h0IGlzIHJlcXVpcmVkLiIpO3JldHVybih0LmRheU51bWJlci1lLmRheU51bWJlcikqeW4uU0VDT05EU19QRVJfREFZKyh0LnNlY29uZHNPZkRheS1lLnNlY29uZHNPZkRheSl9O1Z0LmRheXNEaWZmZXJlbmNlPWZ1bmN0aW9uKHQsZSl7aWYoIWgodCkpdGhyb3cgbmV3IEQoImxlZnQgaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEQoInJpZ2h0IGlzIHJlcXVpcmVkLiIpO2xldCBuPXQuZGF5TnVtYmVyLWUuZGF5TnVtYmVyLG89KHQuc2Vjb25kc09mRGF5LWUuc2Vjb25kc09mRGF5KS95bi5TRUNPTkRTX1BFUl9EQVk7cmV0dXJuIG4rb307VnQuY29tcHV0ZVRhaU1pbnVzVXRjPWZ1bmN0aW9uKHQpe0tjLmp1bGlhbkRhdGU9dDtsZXQgZT1WdC5sZWFwU2Vjb25kcyxuPVZzKGUsS2MsTG0pO3JldHVybiBuPDAmJihuPX5uLC0tbixuPDAmJihuPTApKSxlW25dLm9mZnNldH07VnQuYWRkU2Vjb25kcz1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEQoImp1bGlhbkRhdGUgaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEQoInNlY29uZHMgaXMgcmVxdWlyZWQuIik7aWYoIWgobikpdGhyb3cgbmV3IEQoInJlc3VsdCBpcyByZXF1aXJlZC4iKTtyZXR1cm4gbnModC5kYXlOdW1iZXIsdC5zZWNvbmRzT2ZEYXkrZSxuKX07VnQuYWRkTWludXRlcz1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEQoImp1bGlhbkRhdGUgaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEQoIm1pbnV0ZXMgaXMgcmVxdWlyZWQuIik7aWYoIWgobikpdGhyb3cgbmV3IEQoInJlc3VsdCBpcyByZXF1aXJlZC4iKTtsZXQgbz10LnNlY29uZHNPZkRheStlKnluLlNFQ09ORFNfUEVSX01JTlVURTtyZXR1cm4gbnModC5kYXlOdW1iZXIsbyxuKX07VnQuYWRkSG91cnM9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBEKCJqdWxpYW5EYXRlIGlzIHJlcXVpcmVkLiIpO2lmKCFoKGUpKXRocm93IG5ldyBEKCJob3VycyBpcyByZXF1aXJlZC4iKTtpZighaChuKSl0aHJvdyBuZXcgRCgicmVzdWx0IGlzIHJlcXVpcmVkLiIpO2xldCBvPXQuc2Vjb25kc09mRGF5K2UqeW4uU0VDT05EU19QRVJfSE9VUjtyZXR1cm4gbnModC5kYXlOdW1iZXIsbyxuKX07VnQuYWRkRGF5cz1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEQoImp1bGlhbkRhdGUgaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEQoImRheXMgaXMgcmVxdWlyZWQuIik7aWYoIWgobikpdGhyb3cgbmV3IEQoInJlc3VsdCBpcyByZXF1aXJlZC4iKTtsZXQgbz10LmRheU51bWJlcitlO3JldHVybiBucyhvLHQuc2Vjb25kc09mRGF5LG4pfTtWdC5sZXNzVGhhbj1mdW5jdGlvbih0LGUpe3JldHVybiBWdC5jb21wYXJlKHQsZSk8MH07VnQubGVzc1RoYW5PckVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiBWdC5jb21wYXJlKHQsZSk8PTB9O1Z0LmdyZWF0ZXJUaGFuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFZ0LmNvbXBhcmUodCxlKT4wfTtWdC5ncmVhdGVyVGhhbk9yRXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFZ0LmNvbXBhcmUodCxlKT49MH07VnQucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiBWdC5jbG9uZSh0aGlzLHQpfTtWdC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiBWdC5lcXVhbHModGhpcyx0KX07VnQucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gVnQuZXF1YWxzRXBzaWxvbih0aGlzLHQsZSl9O1Z0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBWdC50b0lzbzg2MDEodGhpcyl9O1Z0LmxlYXBTZWNvbmRzPVtuZXcgV2UobmV3IFZ0KDI0NDEzMTcsNDMyMTAsT2UuVEFJKSwxMCksbmV3IFdlKG5ldyBWdCgyNDQxNDk5LDQzMjExLE9lLlRBSSksMTEpLG5ldyBXZShuZXcgVnQoMjQ0MTY4Myw0MzIxMixPZS5UQUkpLDEyKSxuZXcgV2UobmV3IFZ0KDI0NDIwNDgsNDMyMTMsT2UuVEFJKSwxMyksbmV3IFdlKG5ldyBWdCgyNDQyNDEzLDQzMjE0LE9lLlRBSSksMTQpLG5ldyBXZShuZXcgVnQoMjQ0Mjc3OCw0MzIxNSxPZS5UQUkpLDE1KSxuZXcgV2UobmV3IFZ0KDI0NDMxNDQsNDMyMTYsT2UuVEFJKSwxNiksbmV3IFdlKG5ldyBWdCgyNDQzNTA5LDQzMjE3LE9lLlRBSSksMTcpLG5ldyBXZShuZXcgVnQoMjQ0Mzg3NCw0MzIxOCxPZS5UQUkpLDE4KSxuZXcgV2UobmV3IFZ0KDI0NDQyMzksNDMyMTksT2UuVEFJKSwxOSksbmV3IFdlKG5ldyBWdCgyNDQ0Nzg2LDQzMjIwLE9lLlRBSSksMjApLG5ldyBXZShuZXcgVnQoMjQ0NTE1MSw0MzIyMSxPZS5UQUkpLDIxKSxuZXcgV2UobmV3IFZ0KDI0NDU1MTYsNDMyMjIsT2UuVEFJKSwyMiksbmV3IFdlKG5ldyBWdCgyNDQ2MjQ3LDQzMjIzLE9lLlRBSSksMjMpLG5ldyBXZShuZXcgVnQoMjQ0NzE2MSw0MzIyNCxPZS5UQUkpLDI0KSxuZXcgV2UobmV3IFZ0KDI0NDc4OTIsNDMyMjUsT2UuVEFJKSwyNSksbmV3IFdlKG5ldyBWdCgyNDQ4MjU3LDQzMjI2LE9lLlRBSSksMjYpLG5ldyBXZShuZXcgVnQoMjQ0ODgwNCw0MzIyNyxPZS5UQUkpLDI3KSxuZXcgV2UobmV3IFZ0KDI0NDkxNjksNDMyMjgsT2UuVEFJKSwyOCksbmV3IFdlKG5ldyBWdCgyNDQ5NTM0LDQzMjI5LE9lLlRBSSksMjkpLG5ldyBXZShuZXcgVnQoMjQ1MDA4Myw0MzIzMCxPZS5UQUkpLDMwKSxuZXcgV2UobmV3IFZ0KDI0NTA2MzAsNDMyMzEsT2UuVEFJKSwzMSksbmV3IFdlKG5ldyBWdCgyNDUxMTc5LDQzMjMyLE9lLlRBSSksMzIpLG5ldyBXZShuZXcgVnQoMjQ1MzczNiw0MzIzMyxPZS5UQUkpLDMzKSxuZXcgV2UobmV3IFZ0KDI0NTQ4MzIsNDMyMzQsT2UuVEFJKSwzNCksbmV3IFdlKG5ldyBWdCgyNDU2MTA5LDQzMjM1LE9lLlRBSSksMzUpLG5ldyBXZShuZXcgVnQoMjQ1NzIwNCw0MzIzNixPZS5UQUkpLDM2KSxuZXcgV2UobmV3IFZ0KDI0NTc3NTQsNDMyMzcsT2UuVEFJKSwzNyldO0duPVZ0fSk7dmFyIE4xPVhuKChXYyxYYyk9PnsvKiEgaHR0cHM6Ly9tdGhzLmJlL3B1bnljb2RlIHYxLjQuMCBieSBAbWF0aGlhcyAqLyhmdW5jdGlvbih0KXt2YXIgZT10eXBlb2YgV2M9PSJvYmplY3QiJiZXYyYmIVdjLm5vZGVUeXBlJiZXYyxuPXR5cGVvZiBYYz09Im9iamVjdCImJlhjJiYhWGMubm9kZVR5cGUmJlhjLG89dHlwZW9mIGdsb2JhbD09Im9iamVjdCImJmdsb2JhbDsoby5nbG9iYWw9PT1vfHxvLndpbmRvdz09PW98fG8uc2VsZj09PW8pJiYodD1vKTt2YXIgcixpPTIxNDc0ODM2NDcscz0zNixmPTEsdT0yNixjPTM4LGw9NzAwLHA9NzIsZD0xMjgsbT0iLSIsXz0vXnhuLS0vLGc9L1teXHgyMC1ceDdFXS8sYj0vW1x4MkVcdTMwMDJcdUZGMEVcdUZGNjFdL2csVD17b3ZlcmZsb3c6Ik92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzIiwibm90LWJhc2ljIjoiSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KSIsImludmFsaWQtaW5wdXQiOiJJbnZhbGlkIGlucHV0In0sTz1zLWYsRT1NYXRoLmZsb29yLHc9U3RyaW5nLmZyb21DaGFyQ29kZSxDO2Z1bmN0aW9uIE0oayl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoVFtrXSl9ZnVuY3Rpb24gTihrLHEpe2Zvcih2YXIgVz1rLmxlbmd0aCxSPVtdO1ctLTspUltXXT1xKGtbV10pO3JldHVybiBSfWZ1bmN0aW9uIEYoayxxKXt2YXIgVz1rLnNwbGl0KCJAIiksUj0iIjtXLmxlbmd0aD4xJiYoUj1XWzBdKyJAIixrPVdbMV0pLGs9ay5yZXBsYWNlKGIsIi4iKTt2YXIgbnQ9ay5zcGxpdCgiLiIpLGF0PU4obnQscSkuam9pbigiLiIpO3JldHVybiBSK2F0fWZ1bmN0aW9uIEkoayl7Zm9yKHZhciBxPVtdLFc9MCxSPWsubGVuZ3RoLG50LGF0O1c8UjspbnQ9ay5jaGFyQ29kZUF0KFcrKyksbnQ+PTU1Mjk2JiZudDw9NTYzMTkmJlc8Uj8oYXQ9ay5jaGFyQ29kZUF0KFcrKyksKGF0JjY0NTEyKT09NTYzMjA/cS5wdXNoKCgobnQmMTAyMyk8PDEwKSsoYXQmMTAyMykrNjU1MzYpOihxLnB1c2gobnQpLFctLSkpOnEucHVzaChudCk7cmV0dXJuIHF9ZnVuY3Rpb24gdihrKXtyZXR1cm4gTihrLGZ1bmN0aW9uKHEpe3ZhciBXPSIiO3JldHVybiBxPjY1NTM1JiYocS09NjU1MzYsVys9dyhxPj4+MTAmMTAyM3w1NTI5NikscT01NjMyMHxxJjEwMjMpLFcrPXcocSksV30pLmpvaW4oIiIpfWZ1bmN0aW9uIEIoayl7cmV0dXJuIGstNDg8MTA/ay0yMjprLTY1PDI2P2stNjU6ay05NzwyNj9rLTk3OnN9ZnVuY3Rpb24gQShrLHEpe3JldHVybiBrKzIyKzc1KihrPDI2KS0oKHEhPTApPDw1KX1mdW5jdGlvbiBTKGsscSxXKXt2YXIgUj0wO2ZvcihrPVc/RShrL2wpOms+PjEsays9RShrL3EpO2s+Typ1Pj4xO1IrPXMpaz1FKGsvTyk7cmV0dXJuIEUoUisoTysxKSprLyhrK2MpKX1mdW5jdGlvbiB4KGspe3ZhciBxPVtdLFc9ay5sZW5ndGgsUixudD0wLGF0PWQsbHQ9cCxodCxvdCxQdCx5dCxFdCxkdCxydCxDdCxrdDtmb3IoaHQ9ay5sYXN0SW5kZXhPZihtKSxodDwwJiYoaHQ9MCksb3Q9MDtvdDxodDsrK290KWsuY2hhckNvZGVBdChvdCk+PTEyOCYmTSgibm90LWJhc2ljIikscS5wdXNoKGsuY2hhckNvZGVBdChvdCkpO2ZvcihQdD1odD4wP2h0KzE6MDtQdDxXOyl7Zm9yKHl0PW50LEV0PTEsZHQ9cztQdD49VyYmTSgiaW52YWxpZC1pbnB1dCIpLHJ0PUIoay5jaGFyQ29kZUF0KFB0KyspKSwocnQ+PXN8fHJ0PkUoKGktbnQpL0V0KSkmJk0oIm92ZXJmbG93IiksbnQrPXJ0KkV0LEN0PWR0PD1sdD9mOmR0Pj1sdCt1P3U6ZHQtbHQsIShydDxDdCk7ZHQrPXMpa3Q9cy1DdCxFdD5FKGkva3QpJiZNKCJvdmVyZmxvdyIpLEV0Kj1rdDtSPXEubGVuZ3RoKzEsbHQ9UyhudC15dCxSLHl0PT0wKSxFKG50L1IpPmktYXQmJk0oIm92ZXJmbG93IiksYXQrPUUobnQvUiksbnQlPVIscS5zcGxpY2UobnQrKywwLGF0KX1yZXR1cm4gdihxKX1mdW5jdGlvbiBMKGspe3ZhciBxLFcsUixudCxhdCxsdCxodCxvdCxQdCx5dCxFdCxkdD1bXSxydCxDdCxrdCxsZTtmb3Ioaz1JKGspLHJ0PWsubGVuZ3RoLHE9ZCxXPTAsYXQ9cCxsdD0wO2x0PHJ0OysrbHQpRXQ9a1tsdF0sRXQ8MTI4JiZkdC5wdXNoKHcoRXQpKTtmb3IoUj1udD1kdC5sZW5ndGgsbnQmJmR0LnB1c2gobSk7UjxydDspe2ZvcihodD1pLGx0PTA7bHQ8cnQ7KytsdClFdD1rW2x0XSxFdD49cSYmRXQ8aHQmJihodD1FdCk7Zm9yKEN0PVIrMSxodC1xPkUoKGktVykvQ3QpJiZNKCJvdmVyZmxvdyIpLFcrPShodC1xKSpDdCxxPWh0LGx0PTA7bHQ8cnQ7KytsdClpZihFdD1rW2x0XSxFdDxxJiYrK1c+aSYmTSgib3ZlcmZsb3ciKSxFdD09cSl7Zm9yKG90PVcsUHQ9czt5dD1QdDw9YXQ/ZjpQdD49YXQrdT91OlB0LWF0LCEob3Q8eXQpO1B0Kz1zKWxlPW90LXl0LGt0PXMteXQsZHQucHVzaCh3KEEoeXQrbGUla3QsMCkpKSxvdD1FKGxlL2t0KTtkdC5wdXNoKHcoQShvdCwwKSkpLGF0PVMoVyxDdCxSPT1udCksVz0wLCsrUn0rK1csKytxfXJldHVybiBkdC5qb2luKCIiKX1mdW5jdGlvbiB6KGspe3JldHVybiBGKGssZnVuY3Rpb24ocSl7cmV0dXJuIF8udGVzdChxKT94KHEuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSk6cX0pfWZ1bmN0aW9uIGooayl7cmV0dXJuIEYoayxmdW5jdGlvbihxKXtyZXR1cm4gZy50ZXN0KHEpPyJ4bi0tIitMKHEpOnF9KX1pZihyPXt2ZXJzaW9uOiIxLjMuMiIsdWNzMjp7ZGVjb2RlOkksZW5jb2RlOnZ9LGRlY29kZTp4LGVuY29kZTpMLHRvQVNDSUk6aix0b1VuaWNvZGU6en0sdHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmdHlwZW9mIGRlZmluZS5hbWQ9PSJvYmplY3QiJiZkZWZpbmUuYW1kKWRlZmluZSgicHVueWNvZGUiLGZ1bmN0aW9uKCl7cmV0dXJuIHJ9KTtlbHNlIGlmKGUmJm4paWYoWGMuZXhwb3J0cz09ZSluLmV4cG9ydHM9cjtlbHNlIGZvcihDIGluIHIpci5oYXNPd25Qcm9wZXJ0eShDKSYmKGVbQ109cltDXSk7ZWxzZSB0LnB1bnljb2RlPXJ9KShXYyl9KTt2YXIgdjE9WG4oKEkxLGVwKT0+ey8qIQogKiBVUkkuanMgLSBNdXRhdGluZyBVUkxzCiAqIElQdjYgU3VwcG9ydAogKgogKiBWZXJzaW9uOiAxLjE5LjExCiAqCiAqIEF1dGhvcjogUm9kbmV5IFJlaG0KICogV2ViOiBodHRwOi8vbWVkaWFsaXplLmdpdGh1Yi5pby9VUkkuanMvCiAqCiAqIExpY2Vuc2VkIHVuZGVyCiAqICAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZQogKgogKi8oZnVuY3Rpb24odCxlKXsidXNlIHN0cmljdCI7dHlwZW9mIGVwPT0ib2JqZWN0IiYmZXAuZXhwb3J0cz9lcC5leHBvcnRzPWUoKTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShlKTp0LklQdjY9ZSh0KX0pKEkxLGZ1bmN0aW9uKHQpeyJ1c2Ugc3RyaWN0Ijt2YXIgZT10JiZ0LklQdjY7ZnVuY3Rpb24gbihyKXt2YXIgaT1yLnRvTG93ZXJDYXNlKCkscz1pLnNwbGl0KCI6IiksZj1zLmxlbmd0aCx1PTg7c1swXT09PSIiJiZzWzFdPT09IiImJnNbMl09PT0iIj8ocy5zaGlmdCgpLHMuc2hpZnQoKSk6c1swXT09PSIiJiZzWzFdPT09IiI/cy5zaGlmdCgpOnNbZi0xXT09PSIiJiZzW2YtMl09PT0iIiYmcy5wb3AoKSxmPXMubGVuZ3RoLHNbZi0xXS5pbmRleE9mKCIuIikhPT0tMSYmKHU9Nyk7dmFyIGM7Zm9yKGM9MDtjPGYmJnNbY10hPT0iIjtjKyspO2lmKGM8dSlmb3Iocy5zcGxpY2UoYywxLCIwMDAwIik7cy5sZW5ndGg8dTspcy5zcGxpY2UoYywwLCIwMDAwIik7Zm9yKHZhciBsLHA9MDtwPHU7cCsrKXtsPXNbcF0uc3BsaXQoIiIpO2Zvcih2YXIgZD0wO2Q8MyYmKGxbMF09PT0iMCImJmwubGVuZ3RoPjEpO2QrKylsLnNwbGljZSgwLDEpO3NbcF09bC5qb2luKCIiKX12YXIgbT0tMSxfPTAsZz0wLGI9LTEsVD0hMTtmb3IocD0wO3A8dTtwKyspVD9zW3BdPT09IjAiP2crPTE6KFQ9ITEsZz5fJiYobT1iLF89ZykpOnNbcF09PT0iMCImJihUPSEwLGI9cCxnPTEpO2c+XyYmKG09YixfPWcpLF8+MSYmcy5zcGxpY2UobSxfLCIiKSxmPXMubGVuZ3RoO3ZhciBPPSIiO2ZvcihzWzBdPT09IiImJihPPSI6IikscD0wO3A8ZiYmKE8rPXNbcF0scCE9PWYtMSk7cCsrKU8rPSI6IjtyZXR1cm4gc1tmLTFdPT09IiImJihPKz0iOiIpLE99ZnVuY3Rpb24gbygpe3JldHVybiB0LklQdjY9PT10aGlzJiYodC5JUHY2PWUpLHRoaXN9cmV0dXJue2Jlc3Q6bixub0NvbmZsaWN0Om99fSl9KTt2YXIgTDE9WG4oKEYxLG5wKT0+ey8qIQogKiBVUkkuanMgLSBNdXRhdGluZyBVUkxzCiAqIFNlY29uZCBMZXZlbCBEb21haW4gKFNMRCkgU3VwcG9ydAogKgogKiBWZXJzaW9uOiAxLjE5LjExCiAqCiAqIEF1dGhvcjogUm9kbmV5IFJlaG0KICogV2ViOiBodHRwOi8vbWVkaWFsaXplLmdpdGh1Yi5pby9VUkkuanMvCiAqCiAqIExpY2Vuc2VkIHVuZGVyCiAqICAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZQogKgogKi8oZnVuY3Rpb24odCxlKXsidXNlIHN0cmljdCI7dHlwZW9mIG5wPT0ib2JqZWN0IiYmbnAuZXhwb3J0cz9ucC5leHBvcnRzPWUoKTp0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kP2RlZmluZShlKTp0LlNlY29uZExldmVsRG9tYWlucz1lKHQpfSkoRjEsZnVuY3Rpb24odCl7InVzZSBzdHJpY3QiO3ZhciBlPXQmJnQuU2Vjb25kTGV2ZWxEb21haW5zLG49e2xpc3Q6e2FjOiIgY29tIGdvdiBtaWwgbmV0IG9yZyAiLGFlOiIgYWMgY28gZ292IG1pbCBuYW1lIG5ldCBvcmcgcHJvIHNjaCAiLGFmOiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLGFsOiIgY29tIGVkdSBnb3YgbWlsIG5ldCBvcmcgIixhbzoiIGNvIGVkIGd2IGl0IG9nIHBiICIsYXI6IiBjb20gZWR1IGdvYiBnb3YgaW50IG1pbCBuZXQgb3JnIHR1ciAiLGF0OiIgYWMgY28gZ3Ygb3IgIixhdToiIGFzbiBjb20gY3Npcm8gZWR1IGdvdiBpZCBuZXQgb3JnICIsYmE6IiBjbyBjb20gZWR1IGdvdiBtaWwgbmV0IG9yZyBycyB1bmJpIHVubW8gdW5zYSB1bnR6IHVuemUgIixiYjoiIGJpeiBjbyBjb20gZWR1IGdvdiBpbmZvIG5ldCBvcmcgc3RvcmUgdHYgIixiaDoiIGJpeiBjYyBjb20gZWR1IGdvdiBpbmZvIG5ldCBvcmcgIixibjoiIGNvbSBlZHUgZ292IG5ldCBvcmcgIixibzoiIGNvbSBlZHUgZ29iIGdvdiBpbnQgbWlsIG5ldCBvcmcgdHYgIixicjoiIGFkbSBhZHYgYWdyIGFtIGFycSBhcnQgYXRvIGIgYmlvIGJsb2cgYm1kIGNpbSBjbmcgY250IGNvbSBjb29wIGVjbiBlZHUgZW5nIGVzcCBldGMgZXRpIGZhciBmbG9nIGZtIGZuZCBmb3QgZnN0IGcxMiBnZ2YgZ292IGltYiBpbmQgaW5mIGpvciBqdXMgbGVsIG1hdCBtZWQgbWlsIG11cyBuZXQgbm9tIG5vdCBudHIgb2RvIG9yZyBwcGcgcHJvIHBzYyBwc2kgcXNsIHJlYyBzbGcgc3J2IHRtcCB0cmQgdHVyIHR2IHZldCB2bG9nIHdpa2kgemxnICIsYnM6IiBjb20gZWR1IGdvdiBuZXQgb3JnICIsYno6IiBkdSBldCBvbSBvdiByZyAiLGNhOiIgYWIgYmMgbWIgbmIgbmYgbmwgbnMgbnQgbnUgb24gcGUgcWMgc2sgeWsgIixjazoiIGJpeiBjbyBlZHUgZ2VuIGdvdiBpbmZvIG5ldCBvcmcgIixjbjoiIGFjIGFoIGJqIGNvbSBjcSBlZHUgZmogZ2QgZ292IGdzIGd4IGd6IGhhIGhiIGhlIGhpIGhsIGhuIGpsIGpzIGp4IGxuIG1pbCBuZXQgbm0gbnggb3JnIHFoIHNjIHNkIHNoIHNuIHN4IHRqIHR3IHhqIHh6IHluIHpqICIsY286IiBjb20gZWR1IGdvdiBtaWwgbmV0IG5vbSBvcmcgIixjcjoiIGFjIGMgY28gZWQgZmkgZ28gb3Igc2EgIixjeToiIGFjIGJpeiBjb20gZWtsb2dlcyBnb3YgbHRkIG5hbWUgbmV0IG9yZyBwYXJsaWFtZW50IHByZXNzIHBybyB0bSAiLGRvOiIgYXJ0IGNvbSBlZHUgZ29iIGdvdiBtaWwgbmV0IG9yZyBzbGQgd2ViICIsZHo6IiBhcnQgYXNzbyBjb20gZWR1IGdvdiBuZXQgb3JnIHBvbCAiLGVjOiIgY29tIGVkdSBmaW4gZ292IGluZm8gbWVkIG1pbCBuZXQgb3JnIHBybyAiLGVnOiIgY29tIGVkdSBldW4gZ292IG1pbCBuYW1lIG5ldCBvcmcgc2NpICIsZXI6IiBjb20gZWR1IGdvdiBpbmQgbWlsIG5ldCBvcmcgcm9jaGVzdCB3ICIsZXM6IiBjb20gZWR1IGdvYiBub20gb3JnICIsZXQ6IiBiaXogY29tIGVkdSBnb3YgaW5mbyBuYW1lIG5ldCBvcmcgIixmajoiIGFjIGJpeiBjb20gaW5mbyBtaWwgbmFtZSBuZXQgb3JnIHBybyAiLGZrOiIgYWMgY28gZ292IG5ldCBub20gb3JnICIsZnI6IiBhc3NvIGNvbSBmIGdvdXYgbm9tIHByZCBwcmVzc2UgdG0gIixnZzoiIGNvIG5ldCBvcmcgIixnaDoiIGNvbSBlZHUgZ292IG1pbCBvcmcgIixnbjoiIGFjIGNvbSBnb3YgbmV0IG9yZyAiLGdyOiIgY29tIGVkdSBnb3YgbWlsIG5ldCBvcmcgIixndDoiIGNvbSBlZHUgZ29iIGluZCBtaWwgbmV0IG9yZyAiLGd1OiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLGhrOiIgY29tIGVkdSBnb3YgaWR2IG5ldCBvcmcgIixodToiIDIwMDAgYWdyYXIgYm9sdCBjYXNpbm8gY2l0eSBjbyBlcm90aWNhIGVyb3Rpa2EgZmlsbSBmb3J1bSBnYW1lcyBob3RlbCBpbmZvIGluZ2F0bGFuIGpvZ2FzeiBrb255dmVsbyBsYWthcyBtZWRpYSBuZXdzIG9yZyBwcml2IHJla2xhbSBzZXggc2hvcCBzcG9ydCBzdWxpIHN6ZXggdG0gdG96c2RlIHV0YXphcyB2aWRlbyAiLGlkOiIgYWMgY28gZ28gbWlsIG5ldCBvciBzY2ggd2ViICIsaWw6IiBhYyBjbyBnb3YgaWRmIGsxMiBtdW5pIG5ldCBvcmcgIixpbjoiIGFjIGNvIGVkdSBlcm5ldCBmaXJtIGdlbiBnb3YgaSBpbmQgbWlsIG5ldCBuaWMgb3JnIHJlcyAiLGlxOiIgY29tIGVkdSBnb3YgaSBtaWwgbmV0IG9yZyAiLGlyOiIgYWMgY28gZG5zc2VjIGdvdiBpIGlkIG5ldCBvcmcgc2NoICIsaXQ6IiBlZHUgZ292ICIsamU6IiBjbyBuZXQgb3JnICIsam86IiBjb20gZWR1IGdvdiBtaWwgbmFtZSBuZXQgb3JnIHNjaCAiLGpwOiIgYWMgYWQgY28gZWQgZ28gZ3IgbGcgbmUgb3IgIixrZToiIGFjIGNvIGdvIGluZm8gbWUgbW9iaSBuZSBvciBzYyAiLGtoOiIgY29tIGVkdSBnb3YgbWlsIG5ldCBvcmcgcGVyICIsa2k6IiBiaXogY29tIGRlIGVkdSBnb3YgaW5mbyBtb2IgbmV0IG9yZyB0ZWwgIixrbToiIGFzc28gY29tIGNvb3AgZWR1IGdvdXYgayBtZWRlY2luIG1pbCBub20gbm90YWlyZXMgcGhhcm1hY2llbnMgcHJlc3NlIHRtIHZldGVyaW5haXJlICIsa246IiBlZHUgZ292IG5ldCBvcmcgIixrcjoiIGFjIGJ1c2FuIGNodW5nYnVrIGNodW5nbmFtIGNvIGRhZWd1IGRhZWplb24gZXMgZ2FuZ3dvbiBnbyBnd2FuZ2p1IGd5ZW9uZ2J1ayBneWVvbmdnaSBneWVvbmduYW0gaHMgaW5jaGVvbiBqZWp1IGplb25idWsgamVvbm5hbSBrIGtnIG1pbCBtcyBuZSBvciBwZSByZSBzYyBzZW91bCB1bHNhbiAiLGt3OiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLGt5OiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLGt6OiIgY29tIGVkdSBnb3YgbWlsIG5ldCBvcmcgIixsYjoiIGNvbSBlZHUgZ292IG5ldCBvcmcgIixsazoiIGFzc24gY29tIGVkdSBnb3YgZ3JwIGhvdGVsIGludCBsdGQgbmV0IG5nbyBvcmcgc2NoIHNvYyB3ZWIgIixscjoiIGNvbSBlZHUgZ292IG5ldCBvcmcgIixsdjoiIGFzbiBjb20gY29uZiBlZHUgZ292IGlkIG1pbCBuZXQgb3JnICIsbHk6IiBjb20gZWR1IGdvdiBpZCBtZWQgbmV0IG9yZyBwbGMgc2NoICIsbWE6IiBhYyBjbyBnb3YgbSBuZXQgb3JnIHByZXNzICIsbWM6IiBhc3NvIHRtICIsbWU6IiBhYyBjbyBlZHUgZ292IGl0cyBuZXQgb3JnIHByaXYgIixtZzoiIGNvbSBlZHUgZ292IG1pbCBub20gb3JnIHByZCB0bSAiLG1rOiIgY29tIGVkdSBnb3YgaW5mIG5hbWUgbmV0IG9yZyBwcm8gIixtbDoiIGNvbSBlZHUgZ292IG5ldCBvcmcgcHJlc3NlICIsbW46IiBlZHUgZ292IG9yZyAiLG1vOiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLG10OiIgY29tIGVkdSBnb3YgbmV0IG9yZyAiLG12OiIgYWVybyBiaXogY29tIGNvb3AgZWR1IGdvdiBpbmZvIGludCBtaWwgbXVzZXVtIG5hbWUgbmV0IG9yZyBwcm8gIixtdzoiIGFjIGNvIGNvbSBjb29wIGVkdSBnb3YgaW50IG11c2V1bSBuZXQgb3JnICIsbXg6IiBjb20gZWR1IGdvYiBuZXQgb3JnICIsbXk6IiBjb20gZWR1IGdvdiBtaWwgbmFtZSBuZXQgb3JnIHNjaCAiLG5mOiIgYXJ0cyBjb20gZmlybSBpbmZvIG5ldCBvdGhlciBwZXIgcmVjIHN0b3JlIHdlYiAiLG5nOiIgYml6IGNvbSBlZHUgZ292IG1pbCBtb2JpIG5hbWUgbmV0IG9yZyBzY2ggIixuaToiIGFjIGNvIGNvbSBlZHUgZ29iIG1pbCBuZXQgbm9tIG9yZyAiLG5wOiIgY29tIGVkdSBnb3YgbWlsIG5ldCBvcmcgIixucjoiIGJpeiBjb20gZWR1IGdvdiBpbmZvIG5ldCBvcmcgIixvbToiIGFjIGJpeiBjbyBjb20gZWR1IGdvdiBtZWQgbWlsIG11c2V1bSBuZXQgb3JnIHBybyBzY2ggIixwZToiIGNvbSBlZHUgZ29iIG1pbCBuZXQgbm9tIG9yZyBzbGQgIixwaDoiIGNvbSBlZHUgZ292IGkgbWlsIG5ldCBuZ28gb3JnICIscGs6IiBiaXogY29tIGVkdSBmYW0gZ29iIGdvayBnb24gZ29wIGdvcyBnb3YgbmV0IG9yZyB3ZWIgIixwbDoiIGFydCBiaWFseXN0b2sgYml6IGNvbSBlZHUgZ2RhIGdkYW5zayBnb3J6b3cgZ292IGluZm8ga2F0b3dpY2Uga3Jha293IGxvZHogbHVibGluIG1pbCBuZXQgbmdvIG9sc3p0eW4gb3JnIHBvem5hbiBwd3IgcmFkb20gc2x1cHNrIHN6Y3plY2luIHRvcnVuIHdhcnN6YXdhIHdhdyB3cm9jIHdyb2NsYXcgemdvcmEgIixwcjoiIGFjIGJpeiBjb20gZWR1IGVzdCBnb3YgaW5mbyBpc2xhIG5hbWUgbmV0IG9yZyBwcm8gcHJvZiAiLHBzOiIgY29tIGVkdSBnb3YgbmV0IG9yZyBwbG8gc2VjICIscHc6IiBiZWxhdSBjbyBlZCBnbyBuZSBvciAiLHJvOiIgYXJ0cyBjb20gZmlybSBpbmZvIG5vbSBudCBvcmcgcmVjIHN0b3JlIHRtIHd3dyAiLHJzOiIgYWMgY28gZWR1IGdvdiBpbiBvcmcgIixzYjoiIGNvbSBlZHUgZ292IG5ldCBvcmcgIixzYzoiIGNvbSBlZHUgZ292IG5ldCBvcmcgIixzaDoiIGNvIGNvbSBlZHUgZ292IG5ldCBub20gb3JnICIsc2w6IiBjb20gZWR1IGdvdiBuZXQgb3JnICIsc3Q6IiBjbyBjb20gY29uc3VsYWRvIGVkdSBlbWJhaXhhZGEgZ292IG1pbCBuZXQgb3JnIHByaW5jaXBlIHNhb3RvbWUgc3RvcmUgIixzdjoiIGNvbSBlZHUgZ29iIG9yZyByZWQgIixzejoiIGFjIGNvIG9yZyAiLHRyOiIgYXYgYmJzIGJlbCBiaXogY29tIGRyIGVkdSBnZW4gZ292IGluZm8gazEyIG5hbWUgbmV0IG9yZyBwb2wgdGVsIHRzayB0diB3ZWIgIix0dDoiIGFlcm8gYml6IGNhdCBjbyBjb20gY29vcCBlZHUgZ292IGluZm8gaW50IGpvYnMgbWlsIG1vYmkgbXVzZXVtIG5hbWUgbmV0IG9yZyBwcm8gdGVsIHRyYXZlbCAiLHR3OiIgY2x1YiBjb20gZWJpeiBlZHUgZ2FtZSBnb3YgaWR2IG1pbCBuZXQgb3JnICIsbXU6IiBhYyBjbyBjb20gZ292IG5ldCBvciBvcmcgIixtejoiIGFjIGNvIGVkdSBnb3Ygb3JnICIsbmE6IiBjbyBjb20gIixuejoiIGFjIGNvIGNyaSBnZWVrIGdlbiBnb3Z0IGhlYWx0aCBpd2kgbWFvcmkgbWlsIG5ldCBvcmcgcGFybGlhbWVudCBzY2hvb2wgIixwYToiIGFibyBhYyBjb20gZWR1IGdvYiBpbmcgbWVkIG5ldCBub20gb3JnIHNsZCAiLHB0OiIgY29tIGVkdSBnb3YgaW50IG5ldCBub21lIG9yZyBwdWJsICIscHk6IiBjb20gZWR1IGdvdiBtaWwgbmV0IG9yZyAiLHFhOiIgY29tIGVkdSBnb3YgbWlsIG5ldCBvcmcgIixyZToiIGFzc28gY29tIG5vbSAiLHJ1OiIgYWMgYWR5Z2V5YSBhbHRhaSBhbXVyIGFya2hhbmdlbHNrIGFzdHJha2hhbiBiYXNoa2lyaWEgYmVsZ29yb2QgYmlyIGJyeWFuc2sgYnVyeWF0aWEgY2JnIGNoZWwgY2hlbHlhYmluc2sgY2hpdGEgY2h1a290a2EgY2h1dmFzaGlhIGNvbSBkYWdlc3RhbiBlLWJ1cmcgZWR1IGdvdiBncm96bnkgaW50IGlya3V0c2sgaXZhbm92byBpemhldnNrIGphciBqb3Noa2FyLW9sYSBrYWxteWtpYSBrYWx1Z2Ega2FtY2hhdGthIGthcmVsaWEga2F6YW4ga2NociBrZW1lcm92byBraGFiYXJvdnNrIGtoYWthc3NpYSBraHYga2lyb3Yga29lbmlnIGtvbWkga29zdHJvbWEga3Jhbm95YXJzayBrdWJhbiBrdXJnYW4ga3Vyc2sgbGlwZXRzayBtYWdhZGFuIG1hcmkgbWFyaS1lbCBtYXJpbmUgbWlsIG1vcmRvdmlhIG1vc3JlZyBtc2sgbXVybWFuc2sgbmFsY2hpayBuZXQgbm5vdiBub3Ygbm92b3NpYmlyc2sgbnNrIG9tc2sgb3JlbmJ1cmcgb3JnIG9yeW9sIHBlbnphIHBlcm0gcHAgcHNrb3YgcHR6IHJuZCByeWF6YW4gc2FraGFsaW4gc2FtYXJhIHNhcmF0b3Ygc2ltYmlyc2sgc21vbGVuc2sgc3BiIHN0YXZyb3BvbCBzdHYgc3VyZ3V0IHRhbWJvdiB0YXRhcnN0YW4gdG9tIHRvbXNrIHRzYXJpdHN5biB0c2sgdHVsYSB0dXZhIHR2ZXIgdHl1bWVuIHVkbSB1ZG11cnRpYSB1bGFuLXVkZSB2bGFkaWthdmtheiB2bGFkaW1pciB2bGFkaXZvc3RvayB2b2xnb2dyYWQgdm9sb2dkYSB2b3JvbmV6aCB2cm4gdnlhdGthIHlha3V0aWEgeWFtYWwgeWVrYXRlcmluYnVyZyB5dXpobm8tc2FraGFsaW5zayAiLHJ3OiIgYWMgY28gY29tIGVkdSBnb3V2IGdvdiBpbnQgbWlsIG5ldCAiLHNhOiIgY29tIGVkdSBnb3YgbWVkIG5ldCBvcmcgcHViIHNjaCAiLHNkOiIgY29tIGVkdSBnb3YgaW5mbyBtZWQgbmV0IG9yZyB0diAiLHNlOiIgYSBhYyBiIGJkIGMgZCBlIGYgZyBoIGkgayBsIG0gbiBvIG9yZyBwIHBhcnRpIHBwIHByZXNzIHIgcyB0IHRtIHUgdyB4IHkgeiAiLHNnOiIgY29tIGVkdSBnb3YgaWRuIG5ldCBvcmcgcGVyICIsc246IiBhcnQgY29tIGVkdSBnb3V2IG9yZyBwZXJzbyB1bml2ICIsc3k6IiBjb20gZWR1IGdvdiBtaWwgbmV0IG5ld3Mgb3JnICIsdGg6IiBhYyBjbyBnbyBpbiBtaSBuZXQgb3IgIix0ajoiIGFjIGJpeiBjbyBjb20gZWR1IGdvIGdvdiBpbmZvIGludCBtaWwgbmFtZSBuZXQgbmljIG9yZyB0ZXN0IHdlYiAiLHRuOiIgYWdyaW5ldCBjb20gZGVmZW5zZSBlZHVuZXQgZW5zIGZpbiBnb3YgaW5kIGluZm8gaW50bCBtaW5jb20gbmF0IG5ldCBvcmcgcGVyc28gcm5ydCBybnMgcm51IHRvdXJpc20gIix0ejoiIGFjIGNvIGdvIG5lIG9yICIsdWE6IiBiaXogY2hlcmthc3N5IGNoZXJuaWdvdiBjaGVybm92dHN5IGNrIGNuIGNvIGNvbSBjcmltZWEgY3YgZG4gZG5lcHJvcGV0cm92c2sgZG9uZXRzayBkcCBlZHUgZ292IGlmIGluIGl2YW5vLWZyYW5raXZzayBraCBraGFya292IGtoZXJzb24ga2htZWxuaXRza2l5IGtpZXYga2lyb3ZvZ3JhZCBrbSBrciBrcyBrdiBsZyBsdWdhbnNrIGx1dHNrIGx2aXYgbWUgbWsgbmV0IG5pa29sYWV2IG9kIG9kZXNzYSBvcmcgcGwgcG9sdGF2YSBwcCByb3ZubyBydiBzZWJhc3RvcG9sIHN1bXkgdGUgdGVybm9waWwgdXpoZ29yb2QgdmlubmljYSB2biB6YXBvcml6aHpoZSB6aGl0b21pciB6cCB6dCAiLHVnOiIgYWMgY28gZ28gbmUgb3Igb3JnIHNjICIsdWs6IiBhYyBibCBicml0aXNoLWxpYnJhcnkgY28gY3ltIGdvdiBnb3Z0IGljbmV0IGpldCBsZWEgbHRkIG1lIG1pbCBtb2QgbmF0aW9uYWwtbGlicmFyeS1zY290bGFuZCBuZWwgbmV0IG5ocyBuaWMgbmxzIG9yZyBvcmduIHBhcmxpYW1lbnQgcGxjIHBvbGljZSBzY2ggc2NvdCBzb2MgIix1czoiIGRuaSBmZWQgaXNhIGtpZHMgbnNuICIsdXk6IiBjb20gZWR1IGd1YiBtaWwgbmV0IG9yZyAiLHZlOiIgY28gY29tIGVkdSBnb2IgaW5mbyBtaWwgbmV0IG9yZyB3ZWIgIix2aToiIGNvIGNvbSBrMTIgbmV0IG9yZyAiLHZuOiIgYWMgYml6IGNvbSBlZHUgZ292IGhlYWx0aCBpbmZvIGludCBuYW1lIG5ldCBvcmcgcHJvICIseWU6IiBjbyBjb20gZ292IGx0ZCBtZSBuZXQgb3JnIHBsYyAiLHl1OiIgYWMgY28gZWR1IGdvdiBvcmcgIix6YToiIGFjIGFncmljIGFsdCBib3Vyc2UgY2l0eSBjbyBjeWJlcm5ldCBkYiBlZHUgZ292IGdyb25kYXIgaWFjY2VzcyBpbXQgaW5jYSBsYW5kZXNpZ24gbGF3IG1pbCBuZXQgbmdvIG5pcyBub20gb2xpdmV0dGkgb3JnIHBpeCBzY2hvb2wgdG0gd2ViICIsem06IiBhYyBjbyBjb20gZWR1IGdvdiBuZXQgb3JnIHNjaCAiLGNvbToiYXIgYnIgY24gZGUgZXUgZ2IgZ3IgaHUganBuIGtyIG5vIHFjIHJ1IHNhIHNlIHVrIHVzIHV5IHphICIsbmV0OiJnYiBqcCBzZSB1ayAiLG9yZzoiYWUiLGRlOiJjb20gIn0saGFzOmZ1bmN0aW9uKG8pe3ZhciByPW8ubGFzdEluZGV4T2YoIi4iKTtpZihyPD0wfHxyPj1vLmxlbmd0aC0xKXJldHVybiExO3ZhciBpPW8ubGFzdEluZGV4T2YoIi4iLHItMSk7aWYoaTw9MHx8aT49ci0xKXJldHVybiExO3ZhciBzPW4ubGlzdFtvLnNsaWNlKHIrMSldO3JldHVybiBzP3MuaW5kZXhPZigiICIrby5zbGljZShpKzEscikrIiAiKT49MDohMX0saXM6ZnVuY3Rpb24obyl7dmFyIHI9by5sYXN0SW5kZXhPZigiLiIpO2lmKHI8PTB8fHI+PW8ubGVuZ3RoLTEpcmV0dXJuITE7dmFyIGk9by5sYXN0SW5kZXhPZigiLiIsci0xKTtpZihpPj0wKXJldHVybiExO3ZhciBzPW4ubGlzdFtvLnNsaWNlKHIrMSldO3JldHVybiBzP3MuaW5kZXhPZigiICIrby5zbGljZSgwLHIpKyIgIik+PTA6ITF9LGdldDpmdW5jdGlvbihvKXt2YXIgcj1vLmxhc3RJbmRleE9mKCIuIik7aWYocjw9MHx8cj49by5sZW5ndGgtMSlyZXR1cm4gbnVsbDt2YXIgaT1vLmxhc3RJbmRleE9mKCIuIixyLTEpO2lmKGk8PTB8fGk+PXItMSlyZXR1cm4gbnVsbDt2YXIgcz1uLmxpc3Rbby5zbGljZShyKzEpXTtyZXR1cm4hc3x8cy5pbmRleE9mKCIgIitvLnNsaWNlKGkrMSxyKSsiICIpPDA/bnVsbDpvLnNsaWNlKGkrMSl9LG5vQ29uZmxpY3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdC5TZWNvbmRMZXZlbERvbWFpbnM9PT10aGlzJiYodC5TZWNvbmRMZXZlbERvbWFpbnM9ZSksdGhpc319O3JldHVybiBufSl9KTt2YXIgenM9WG4oKEQxLG9wKT0+ey8qIQogKiBVUkkuanMgLSBNdXRhdGluZyBVUkxzCiAqCiAqIFZlcnNpb246IDEuMTkuMTEKICoKICogQXV0aG9yOiBSb2RuZXkgUmVobQogKiBXZWI6IGh0dHA6Ly9tZWRpYWxpemUuZ2l0aHViLmlvL1VSSS5qcy8KICoKICogTGljZW5zZWQgdW5kZXIKICogICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlCiAqCiAqLyhmdW5jdGlvbih0LGUpeyJ1c2Ugc3RyaWN0Ijt0eXBlb2Ygb3A9PSJvYmplY3QiJiZvcC5leHBvcnRzP29wLmV4cG9ydHM9ZShOMSgpLHYxKCksTDEoKSk6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoWyIuL3B1bnljb2RlIiwiLi9JUHY2IiwiLi9TZWNvbmRMZXZlbERvbWFpbnMiXSxlKTp0LlVSST1lKHQucHVueWNvZGUsdC5JUHY2LHQuU2Vjb25kTGV2ZWxEb21haW5zLHQpfSkoRDEsZnVuY3Rpb24odCxlLG4sbyl7InVzZSBzdHJpY3QiO3ZhciByPW8mJm8uVVJJO2Z1bmN0aW9uIGkoQSxTKXt2YXIgeD1hcmd1bWVudHMubGVuZ3RoPj0xLEw9YXJndW1lbnRzLmxlbmd0aD49MjtpZighKHRoaXMgaW5zdGFuY2VvZiBpKSlyZXR1cm4geD9MP25ldyBpKEEsUyk6bmV3IGkoQSk6bmV3IGk7aWYoQT09PXZvaWQgMCl7aWYoeCl0aHJvdyBuZXcgVHlwZUVycm9yKCJ1bmRlZmluZWQgaXMgbm90IGEgdmFsaWQgYXJndW1lbnQgZm9yIFVSSSIpO3R5cGVvZiBsb2NhdGlvbjwidSI/QT1sb2NhdGlvbi5ocmVmKyIiOkE9IiJ9aWYoQT09PW51bGwmJngpdGhyb3cgbmV3IFR5cGVFcnJvcigibnVsbCBpcyBub3QgYSB2YWxpZCBhcmd1bWVudCBmb3IgVVJJIik7cmV0dXJuIHRoaXMuaHJlZihBKSxTIT09dm9pZCAwP3RoaXMuYWJzb2x1dGVUbyhTKTp0aGlzfWZ1bmN0aW9uIHMoQSl7cmV0dXJuL15bMC05XSskLy50ZXN0KEEpfWkudmVyc2lvbj0iMS4xOS4xMSI7dmFyIGY9aS5wcm90b3R5cGUsdT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGMoQSl7cmV0dXJuIEEucmVwbGFjZSgvKFsuKis/Xj0hOiR7fSgpfFtcXVwvXFxdKS9nLCJcXCQxIil9ZnVuY3Rpb24gbChBKXtyZXR1cm4gQT09PXZvaWQgMD8iVW5kZWZpbmVkIjpTdHJpbmcoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEEpKS5zbGljZSg4LC0xKX1mdW5jdGlvbiBwKEEpe3JldHVybiBsKEEpPT09IkFycmF5In1mdW5jdGlvbiBkKEEsUyl7dmFyIHg9e30sTCx6O2lmKGwoUyk9PT0iUmVnRXhwIil4PW51bGw7ZWxzZSBpZihwKFMpKWZvcihMPTAsej1TLmxlbmd0aDtMPHo7TCsrKXhbU1tMXV09ITA7ZWxzZSB4W1NdPSEwO2ZvcihMPTAsej1BLmxlbmd0aDtMPHo7TCsrKXt2YXIgaj14JiZ4W0FbTF1dIT09dm9pZCAwfHwheCYmUy50ZXN0KEFbTF0pO2omJihBLnNwbGljZShMLDEpLHotLSxMLS0pfXJldHVybiBBfWZ1bmN0aW9uIG0oQSxTKXt2YXIgeCxMO2lmKHAoUykpe2Zvcih4PTAsTD1TLmxlbmd0aDt4PEw7eCsrKWlmKCFtKEEsU1t4XSkpcmV0dXJuITE7cmV0dXJuITB9dmFyIHo9bChTKTtmb3IoeD0wLEw9QS5sZW5ndGg7eDxMO3grKylpZih6PT09IlJlZ0V4cCIpe2lmKHR5cGVvZiBBW3hdPT0ic3RyaW5nIiYmQVt4XS5tYXRjaChTKSlyZXR1cm4hMH1lbHNlIGlmKEFbeF09PT1TKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIF8oQSxTKXtpZighcChBKXx8IXAoUyl8fEEubGVuZ3RoIT09Uy5sZW5ndGgpcmV0dXJuITE7QS5zb3J0KCksUy5zb3J0KCk7Zm9yKHZhciB4PTAsTD1BLmxlbmd0aDt4PEw7eCsrKWlmKEFbeF0hPT1TW3hdKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGcoQSl7dmFyIFM9L15cLyt8XC8rJC9nO3JldHVybiBBLnJlcGxhY2UoUywiIil9aS5fcGFydHM9ZnVuY3Rpb24oKXtyZXR1cm57cHJvdG9jb2w6bnVsbCx1c2VybmFtZTpudWxsLHBhc3N3b3JkOm51bGwsaG9zdG5hbWU6bnVsbCx1cm46bnVsbCxwb3J0Om51bGwscGF0aDpudWxsLHF1ZXJ5Om51bGwsZnJhZ21lbnQ6bnVsbCxwcmV2ZW50SW52YWxpZEhvc3RuYW1lOmkucHJldmVudEludmFsaWRIb3N0bmFtZSxkdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnM6aS5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnMsZXNjYXBlUXVlcnlTcGFjZTppLmVzY2FwZVF1ZXJ5U3BhY2V9fSxpLnByZXZlbnRJbnZhbGlkSG9zdG5hbWU9ITEsaS5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnM9ITEsaS5lc2NhcGVRdWVyeVNwYWNlPSEwLGkucHJvdG9jb2xfZXhwcmVzc2lvbj0vXlthLXpdW2EtejAtOS4rLV0qJC9pLGkuaWRuX2V4cHJlc3Npb249L1teYS16MC05XC5fLV0vaSxpLnB1bnljb2RlX2V4cHJlc3Npb249Lyh4bi0tKS9pLGkuaXA0X2V4cHJlc3Npb249L15cZHsxLDN9XC5cZHsxLDN9XC5cZHsxLDN9XC5cZHsxLDN9JC8saS5pcDZfZXhwcmVzc2lvbj0vXlxzKigoKFswLTlBLUZhLWZdezEsNH06KXs3fShbMC05QS1GYS1mXXsxLDR9fDopKXwoKFswLTlBLUZhLWZdezEsNH06KXs2fSg6WzAtOUEtRmEtZl17MSw0fXwoKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezV9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsMn0pfDooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezR9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsM30pfCgoOlswLTlBLUZhLWZdezEsNH0pPzooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoKFswLTlBLUZhLWZdezEsNH06KXszfSgoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDR9KXwoKDpbMC05QS1GYS1mXXsxLDR9KXswLDJ9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpfCgoWzAtOUEtRmEtZl17MSw0fTopezJ9KCgoOlswLTlBLUZhLWZdezEsNH0pezEsNX0pfCgoOlswLTlBLUZhLWZdezEsNH0pezAsM306KCgyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKShcLigyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldP1xkKSl7M30pKXw6KSl8KChbMC05QS1GYS1mXXsxLDR9Oil7MX0oKCg6WzAtOUEtRmEtZl17MSw0fSl7MSw2fSl8KCg6WzAtOUEtRmEtZl17MSw0fSl7MCw0fTooKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKFwuKDI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV0/XGQpKXszfSkpfDopKXwoOigoKDpbMC05QS1GYS1mXXsxLDR9KXsxLDd9KXwoKDpbMC05QS1GYS1mXXsxLDR9KXswLDV9OigoMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkoXC4oMjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XT9cZCkpezN9KSl8OikpKSglLispP1xzKiQvLGkuZmluZF91cmlfZXhwcmVzc2lvbj0vXGIoKD86W2Etel1bXHctXSs6KD86XC97MSwzfXxbYS16MC05JV0pfHd3d1xkezAsM31bLl18W2EtejAtOS5cLV0rWy5dW2Etel17Miw0fVwvKSg/OlteXHMoKTw+XSt8XCgoW15ccygpPD5dK3woXChbXlxzKCk8Pl0rXCkpKSpcKSkrKD86XCgoW15ccygpPD5dK3woXChbXlxzKCk8Pl0rXCkpKSpcKXxbXlxzYCEoKVxbXF17fTs6JyIuLDw+P8KrwrvigJzigJ3igJjigJldKSkvaWcsaS5maW5kVXJpPXtzdGFydDovXGIoPzooW2Etel1bYS16MC05ListXSo6XC9cLyl8d3d3XC4pL2dpLGVuZDovW1xzXHJcbl18JC8sdHJpbTovW2AhKClcW1xde307OiciLiw8Pj/Cq8K74oCc4oCd4oCe4oCY4oCZXSskLyxwYXJlbnM6LyhcKFteXCldKlwpfFxbW15cXV0qXF18XHtbXn1dKlx9fDxbXj5dKj4pL2d9LGkubGVhZGluZ193aGl0ZXNwYWNlX2V4cHJlc3Npb249L15bXHgwMC1ceDIwXHUwMGEwXHUxNjgwXHUyMDAwLVx1MjAwYVx1MjAyOFx1MjAyOVx1MjAyZlx1MjA1Zlx1MzAwMFx1ZmVmZl0rLyxpLmFzY2lpX3RhYl93aGl0ZXNwYWNlPS9bXHUwMDA5XHUwMDBBXHUwMDBEXSsvZyxpLmRlZmF1bHRQb3J0cz17aHR0cDoiODAiLGh0dHBzOiI0NDMiLGZ0cDoiMjEiLGdvcGhlcjoiNzAiLHdzOiI4MCIsd3NzOiI0NDMifSxpLmhvc3RQcm90b2NvbHM9WyJodHRwIiwiaHR0cHMiXSxpLmludmFsaWRfaG9zdG5hbWVfY2hhcmFjdGVycz0vW15hLXpBLVowLTlcLlwtOl9dLyxpLmRvbUF0dHJpYnV0ZXM9e2E6ImhyZWYiLGJsb2NrcXVvdGU6ImNpdGUiLGxpbms6ImhyZWYiLGJhc2U6ImhyZWYiLHNjcmlwdDoic3JjIixmb3JtOiJhY3Rpb24iLGltZzoic3JjIixhcmVhOiJocmVmIixpZnJhbWU6InNyYyIsZW1iZWQ6InNyYyIsc291cmNlOiJzcmMiLHRyYWNrOiJzcmMiLGlucHV0OiJzcmMiLGF1ZGlvOiJzcmMiLHZpZGVvOiJzcmMifSxpLmdldERvbUF0dHJpYnV0ZT1mdW5jdGlvbihBKXtpZighKCFBfHwhQS5ub2RlTmFtZSkpe3ZhciBTPUEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtpZighKFM9PT0iaW5wdXQiJiZBLnR5cGUhPT0iaW1hZ2UiKSlyZXR1cm4gaS5kb21BdHRyaWJ1dGVzW1NdfX07ZnVuY3Rpb24gYihBKXtyZXR1cm4gZXNjYXBlKEEpfWZ1bmN0aW9uIFQoQSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC9bIScoKSpdL2csYikucmVwbGFjZSgvXCovZywiJTJBIil9aS5lbmNvZGU9VCxpLmRlY29kZT1kZWNvZGVVUklDb21wb25lbnQsaS5pc284ODU5PWZ1bmN0aW9uKCl7aS5lbmNvZGU9ZXNjYXBlLGkuZGVjb2RlPXVuZXNjYXBlfSxpLnVuaWNvZGU9ZnVuY3Rpb24oKXtpLmVuY29kZT1ULGkuZGVjb2RlPWRlY29kZVVSSUNvbXBvbmVudH0saS5jaGFyYWN0ZXJzPXtwYXRobmFtZTp7ZW5jb2RlOntleHByZXNzaW9uOi8lKDI0fDI2fDJCfDJDfDNCfDNEfDNBfDQwKS9pZyxtYXA6eyIlMjQiOiIkIiwiJTI2IjoiJiIsIiUyQiI6IisiLCIlMkMiOiIsIiwiJTNCIjoiOyIsIiUzRCI6Ij0iLCIlM0EiOiI6IiwiJTQwIjoiQCJ9fSxkZWNvZGU6e2V4cHJlc3Npb246L1tcL1w/I10vZyxtYXA6eyIvIjoiJTJGIiwiPyI6IiUzRiIsIiMiOiIlMjMifX19LHJlc2VydmVkOntlbmNvZGU6e2V4cHJlc3Npb246LyUoMjF8MjN8MjR8MjZ8Mjd8Mjh8Mjl8MkF8MkJ8MkN8MkZ8M0F8M0J8M0R8M0Z8NDB8NUJ8NUQpL2lnLG1hcDp7IiUzQSI6IjoiLCIlMkYiOiIvIiwiJTNGIjoiPyIsIiUyMyI6IiMiLCIlNUIiOiJbIiwiJTVEIjoiXSIsIiU0MCI6IkAiLCIlMjEiOiIhIiwiJTI0IjoiJCIsIiUyNiI6IiYiLCIlMjciOiInIiwiJTI4IjoiKCIsIiUyOSI6IikiLCIlMkEiOiIqIiwiJTJCIjoiKyIsIiUyQyI6IiwiLCIlM0IiOiI7IiwiJTNEIjoiPSJ9fX0sdXJucGF0aDp7ZW5jb2RlOntleHByZXNzaW9uOi8lKDIxfDI0fDI3fDI4fDI5fDJBfDJCfDJDfDNCfDNEfDQwKS9pZyxtYXA6eyIlMjEiOiIhIiwiJTI0IjoiJCIsIiUyNyI6IiciLCIlMjgiOiIoIiwiJTI5IjoiKSIsIiUyQSI6IioiLCIlMkIiOiIrIiwiJTJDIjoiLCIsIiUzQiI6IjsiLCIlM0QiOiI9IiwiJTQwIjoiQCJ9fSxkZWNvZGU6e2V4cHJlc3Npb246L1tcL1w/IzpdL2csbWFwOnsiLyI6IiUyRiIsIj8iOiIlM0YiLCIjIjoiJTIzIiwiOiI6IiUzQSJ9fX19LGkuZW5jb2RlUXVlcnk9ZnVuY3Rpb24oQSxTKXt2YXIgeD1pLmVuY29kZShBKyIiKTtyZXR1cm4gUz09PXZvaWQgMCYmKFM9aS5lc2NhcGVRdWVyeVNwYWNlKSxTP3gucmVwbGFjZSgvJTIwL2csIisiKTp4fSxpLmRlY29kZVF1ZXJ5PWZ1bmN0aW9uKEEsUyl7QSs9IiIsUz09PXZvaWQgMCYmKFM9aS5lc2NhcGVRdWVyeVNwYWNlKTt0cnl7cmV0dXJuIGkuZGVjb2RlKFM/QS5yZXBsYWNlKC9cKy9nLCIlMjAiKTpBKX1jYXRjaHtyZXR1cm4gQX19O3ZhciBPPXtlbmNvZGU6ImVuY29kZSIsZGVjb2RlOiJkZWNvZGUifSxFLHc9ZnVuY3Rpb24oQSxTKXtyZXR1cm4gZnVuY3Rpb24oeCl7dHJ5e3JldHVybiBpW1NdKHgrIiIpLnJlcGxhY2UoaS5jaGFyYWN0ZXJzW0FdW1NdLmV4cHJlc3Npb24sZnVuY3Rpb24oTCl7cmV0dXJuIGkuY2hhcmFjdGVyc1tBXVtTXS5tYXBbTF19KX1jYXRjaHtyZXR1cm4geH19fTtmb3IoRSBpbiBPKWlbRSsiUGF0aFNlZ21lbnQiXT13KCJwYXRobmFtZSIsT1tFXSksaVtFKyJVcm5QYXRoU2VnbWVudCJdPXcoInVybnBhdGgiLE9bRV0pO3ZhciBDPWZ1bmN0aW9uKEEsUyx4KXtyZXR1cm4gZnVuY3Rpb24oTCl7dmFyIHo7eD96PWZ1bmN0aW9uKFcpe3JldHVybiBpW1NdKGlbeF0oVykpfTp6PWlbU107Zm9yKHZhciBqPShMKyIiKS5zcGxpdChBKSxrPTAscT1qLmxlbmd0aDtrPHE7aysrKWpba109eihqW2tdKTtyZXR1cm4gai5qb2luKEEpfX07aS5kZWNvZGVQYXRoPUMoIi8iLCJkZWNvZGVQYXRoU2VnbWVudCIpLGkuZGVjb2RlVXJuUGF0aD1DKCI6IiwiZGVjb2RlVXJuUGF0aFNlZ21lbnQiKSxpLnJlY29kZVBhdGg9QygiLyIsImVuY29kZVBhdGhTZWdtZW50IiwiZGVjb2RlIiksaS5yZWNvZGVVcm5QYXRoPUMoIjoiLCJlbmNvZGVVcm5QYXRoU2VnbWVudCIsImRlY29kZSIpLGkuZW5jb2RlUmVzZXJ2ZWQ9dygicmVzZXJ2ZWQiLCJlbmNvZGUiKSxpLnBhcnNlPWZ1bmN0aW9uKEEsUyl7dmFyIHg7cmV0dXJuIFN8fChTPXtwcmV2ZW50SW52YWxpZEhvc3RuYW1lOmkucHJldmVudEludmFsaWRIb3N0bmFtZX0pLEE9QS5yZXBsYWNlKGkubGVhZGluZ193aGl0ZXNwYWNlX2V4cHJlc3Npb24sIiIpLEE9QS5yZXBsYWNlKGkuYXNjaWlfdGFiX3doaXRlc3BhY2UsIiIpLHg9QS5pbmRleE9mKCIjIikseD4tMSYmKFMuZnJhZ21lbnQ9QS5zdWJzdHJpbmcoeCsxKXx8bnVsbCxBPUEuc3Vic3RyaW5nKDAseCkpLHg9QS5pbmRleE9mKCI/IikseD4tMSYmKFMucXVlcnk9QS5zdWJzdHJpbmcoeCsxKXx8bnVsbCxBPUEuc3Vic3RyaW5nKDAseCkpLEE9QS5yZXBsYWNlKC9eKGh0dHBzP3xmdHB8d3NzPyk/OitbL1xcXSovaSwiJDE6Ly8iKSxBPUEucmVwbGFjZSgvXlsvXFxdezIsfS9pLCIvLyIpLEEuc3Vic3RyaW5nKDAsMik9PT0iLy8iPyhTLnByb3RvY29sPW51bGwsQT1BLnN1YnN0cmluZygyKSxBPWkucGFyc2VBdXRob3JpdHkoQSxTKSk6KHg9QS5pbmRleE9mKCI6IikseD4tMSYmKFMucHJvdG9jb2w9QS5zdWJzdHJpbmcoMCx4KXx8bnVsbCxTLnByb3RvY29sJiYhUy5wcm90b2NvbC5tYXRjaChpLnByb3RvY29sX2V4cHJlc3Npb24pP1MucHJvdG9jb2w9dm9pZCAwOkEuc3Vic3RyaW5nKHgrMSx4KzMpLnJlcGxhY2UoL1xcL2csIi8iKT09PSIvLyI/KEE9QS5zdWJzdHJpbmcoeCszKSxBPWkucGFyc2VBdXRob3JpdHkoQSxTKSk6KEE9QS5zdWJzdHJpbmcoeCsxKSxTLnVybj0hMCkpKSxTLnBhdGg9QSxTfSxpLnBhcnNlSG9zdD1mdW5jdGlvbihBLFMpe0F8fChBPSIiKSxBPUEucmVwbGFjZSgvXFwvZywiLyIpO3ZhciB4PUEuaW5kZXhPZigiLyIpLEwsejtpZih4PT09LTEmJih4PUEubGVuZ3RoKSxBLmNoYXJBdCgwKT09PSJbIilMPUEuaW5kZXhPZigiXSIpLFMuaG9zdG5hbWU9QS5zdWJzdHJpbmcoMSxMKXx8bnVsbCxTLnBvcnQ9QS5zdWJzdHJpbmcoTCsyLHgpfHxudWxsLFMucG9ydD09PSIvIiYmKFMucG9ydD1udWxsKTtlbHNle3ZhciBqPUEuaW5kZXhPZigiOiIpLGs9QS5pbmRleE9mKCIvIikscT1BLmluZGV4T2YoIjoiLGorMSk7cSE9PS0xJiYoaz09PS0xfHxxPGspPyhTLmhvc3RuYW1lPUEuc3Vic3RyaW5nKDAseCl8fG51bGwsUy5wb3J0PW51bGwpOih6PUEuc3Vic3RyaW5nKDAseCkuc3BsaXQoIjoiKSxTLmhvc3RuYW1lPXpbMF18fG51bGwsUy5wb3J0PXpbMV18fG51bGwpfXJldHVybiBTLmhvc3RuYW1lJiZBLnN1YnN0cmluZyh4KS5jaGFyQXQoMCkhPT0iLyImJih4KyssQT0iLyIrQSksUy5wcmV2ZW50SW52YWxpZEhvc3RuYW1lJiZpLmVuc3VyZVZhbGlkSG9zdG5hbWUoUy5ob3N0bmFtZSxTLnByb3RvY29sKSxTLnBvcnQmJmkuZW5zdXJlVmFsaWRQb3J0KFMucG9ydCksQS5zdWJzdHJpbmcoeCl8fCIvIn0saS5wYXJzZUF1dGhvcml0eT1mdW5jdGlvbihBLFMpe3JldHVybiBBPWkucGFyc2VVc2VyaW5mbyhBLFMpLGkucGFyc2VIb3N0KEEsUyl9LGkucGFyc2VVc2VyaW5mbz1mdW5jdGlvbihBLFMpe3ZhciB4PUEsTD1BLmluZGV4T2YoIlxcIik7TCE9PS0xJiYoQT1BLnJlcGxhY2UoL1xcL2csIi8iKSk7dmFyIHo9QS5pbmRleE9mKCIvIiksaj1BLmxhc3RJbmRleE9mKCJAIix6Pi0xP3o6QS5sZW5ndGgtMSksaztyZXR1cm4gaj4tMSYmKHo9PT0tMXx8ajx6KT8oaz1BLnN1YnN0cmluZygwLGopLnNwbGl0KCI6IiksUy51c2VybmFtZT1rWzBdP2kuZGVjb2RlKGtbMF0pOm51bGwsay5zaGlmdCgpLFMucGFzc3dvcmQ9a1swXT9pLmRlY29kZShrLmpvaW4oIjoiKSk6bnVsbCxBPXguc3Vic3RyaW5nKGorMSkpOihTLnVzZXJuYW1lPW51bGwsUy5wYXNzd29yZD1udWxsKSxBfSxpLnBhcnNlUXVlcnk9ZnVuY3Rpb24oQSxTKXtpZighQSlyZXR1cm57fTtpZihBPUEucmVwbGFjZSgvJisvZywiJiIpLnJlcGxhY2UoL15cPyomKnwmKyQvZywiIiksIUEpcmV0dXJue307Zm9yKHZhciB4PXt9LEw9QS5zcGxpdCgiJiIpLHo9TC5sZW5ndGgsaixrLHEsVz0wO1c8ejtXKyspaj1MW1ddLnNwbGl0KCI9Iiksaz1pLmRlY29kZVF1ZXJ5KGouc2hpZnQoKSxTKSxxPWoubGVuZ3RoP2kuZGVjb2RlUXVlcnkoai5qb2luKCI9IiksUyk6bnVsbCxrIT09Il9fcHJvdG9fXyImJih1LmNhbGwoeCxrKT8oKHR5cGVvZiB4W2tdPT0ic3RyaW5nInx8eFtrXT09PW51bGwpJiYoeFtrXT1beFtrXV0pLHhba10ucHVzaChxKSk6eFtrXT1xKTtyZXR1cm4geH0saS5idWlsZD1mdW5jdGlvbihBKXt2YXIgUz0iIix4PSExO3JldHVybiBBLnByb3RvY29sJiYoUys9QS5wcm90b2NvbCsiOiIpLCFBLnVybiYmKFN8fEEuaG9zdG5hbWUpJiYoUys9Ii8vIix4PSEwKSxTKz1pLmJ1aWxkQXV0aG9yaXR5KEEpfHwiIix0eXBlb2YgQS5wYXRoPT0ic3RyaW5nIiYmKEEucGF0aC5jaGFyQXQoMCkhPT0iLyImJngmJihTKz0iLyIpLFMrPUEucGF0aCksdHlwZW9mIEEucXVlcnk9PSJzdHJpbmciJiZBLnF1ZXJ5JiYoUys9Ij8iK0EucXVlcnkpLHR5cGVvZiBBLmZyYWdtZW50PT0ic3RyaW5nIiYmQS5mcmFnbWVudCYmKFMrPSIjIitBLmZyYWdtZW50KSxTfSxpLmJ1aWxkSG9zdD1mdW5jdGlvbihBKXt2YXIgUz0iIjtpZihBLmhvc3RuYW1lKWkuaXA2X2V4cHJlc3Npb24udGVzdChBLmhvc3RuYW1lKT9TKz0iWyIrQS5ob3N0bmFtZSsiXSI6Uys9QS5ob3N0bmFtZTtlbHNlIHJldHVybiIiO3JldHVybiBBLnBvcnQmJihTKz0iOiIrQS5wb3J0KSxTfSxpLmJ1aWxkQXV0aG9yaXR5PWZ1bmN0aW9uKEEpe3JldHVybiBpLmJ1aWxkVXNlcmluZm8oQSkraS5idWlsZEhvc3QoQSl9LGkuYnVpbGRVc2VyaW5mbz1mdW5jdGlvbihBKXt2YXIgUz0iIjtyZXR1cm4gQS51c2VybmFtZSYmKFMrPWkuZW5jb2RlKEEudXNlcm5hbWUpKSxBLnBhc3N3b3JkJiYoUys9IjoiK2kuZW5jb2RlKEEucGFzc3dvcmQpKSxTJiYoUys9IkAiKSxTfSxpLmJ1aWxkUXVlcnk9ZnVuY3Rpb24oQSxTLHgpe3ZhciBMPSIiLHosaixrLHE7Zm9yKGogaW4gQSlpZihqIT09Il9fcHJvdG9fXyImJnUuY2FsbChBLGopKWlmKHAoQVtqXSkpZm9yKHo9e30saz0wLHE9QVtqXS5sZW5ndGg7azxxO2srKylBW2pdW2tdIT09dm9pZCAwJiZ6W0Fbal1ba10rIiJdPT09dm9pZCAwJiYoTCs9IiYiK2kuYnVpbGRRdWVyeVBhcmFtZXRlcihqLEFbal1ba10seCksUyE9PSEwJiYoeltBW2pdW2tdKyIiXT0hMCkpO2Vsc2UgQVtqXSE9PXZvaWQgMCYmKEwrPSImIitpLmJ1aWxkUXVlcnlQYXJhbWV0ZXIoaixBW2pdLHgpKTtyZXR1cm4gTC5zdWJzdHJpbmcoMSl9LGkuYnVpbGRRdWVyeVBhcmFtZXRlcj1mdW5jdGlvbihBLFMseCl7cmV0dXJuIGkuZW5jb2RlUXVlcnkoQSx4KSsoUyE9PW51bGw/Ij0iK2kuZW5jb2RlUXVlcnkoUyx4KToiIil9LGkuYWRkUXVlcnk9ZnVuY3Rpb24oQSxTLHgpe2lmKHR5cGVvZiBTPT0ib2JqZWN0Iilmb3IodmFyIEwgaW4gUyl1LmNhbGwoUyxMKSYmaS5hZGRRdWVyeShBLEwsU1tMXSk7ZWxzZSBpZih0eXBlb2YgUz09InN0cmluZyIpe2lmKEFbU109PT12b2lkIDApe0FbU109eDtyZXR1cm59ZWxzZSB0eXBlb2YgQVtTXT09InN0cmluZyImJihBW1NdPVtBW1NdXSk7cCh4KXx8KHg9W3hdKSxBW1NdPShBW1NdfHxbXSkuY29uY2F0KHgpfWVsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiVVJJLmFkZFF1ZXJ5KCkgYWNjZXB0cyBhbiBvYmplY3QsIHN0cmluZyBhcyB0aGUgbmFtZSBwYXJhbWV0ZXIiKX0saS5zZXRRdWVyeT1mdW5jdGlvbihBLFMseCl7aWYodHlwZW9mIFM9PSJvYmplY3QiKWZvcih2YXIgTCBpbiBTKXUuY2FsbChTLEwpJiZpLnNldFF1ZXJ5KEEsTCxTW0xdKTtlbHNlIGlmKHR5cGVvZiBTPT0ic3RyaW5nIilBW1NdPXg9PT12b2lkIDA/bnVsbDp4O2Vsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiVVJJLnNldFF1ZXJ5KCkgYWNjZXB0cyBhbiBvYmplY3QsIHN0cmluZyBhcyB0aGUgbmFtZSBwYXJhbWV0ZXIiKX0saS5yZW1vdmVRdWVyeT1mdW5jdGlvbihBLFMseCl7dmFyIEwseixqO2lmKHAoUykpZm9yKEw9MCx6PVMubGVuZ3RoO0w8ejtMKyspQVtTW0xdXT12b2lkIDA7ZWxzZSBpZihsKFMpPT09IlJlZ0V4cCIpZm9yKGogaW4gQSlTLnRlc3QoaikmJihBW2pdPXZvaWQgMCk7ZWxzZSBpZih0eXBlb2YgUz09Im9iamVjdCIpZm9yKGogaW4gUyl1LmNhbGwoUyxqKSYmaS5yZW1vdmVRdWVyeShBLGosU1tqXSk7ZWxzZSBpZih0eXBlb2YgUz09InN0cmluZyIpeCE9PXZvaWQgMD9sKHgpPT09IlJlZ0V4cCI/IXAoQVtTXSkmJngudGVzdChBW1NdKT9BW1NdPXZvaWQgMDpBW1NdPWQoQVtTXSx4KTpBW1NdPT09U3RyaW5nKHgpJiYoIXAoeCl8fHgubGVuZ3RoPT09MSk/QVtTXT12b2lkIDA6cChBW1NdKSYmKEFbU109ZChBW1NdLHgpKTpBW1NdPXZvaWQgMDtlbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoIlVSSS5yZW1vdmVRdWVyeSgpIGFjY2VwdHMgYW4gb2JqZWN0LCBzdHJpbmcsIFJlZ0V4cCBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyIil9LGkuaGFzUXVlcnk9ZnVuY3Rpb24oQSxTLHgsTCl7c3dpdGNoKGwoUykpe2Nhc2UiU3RyaW5nIjpicmVhaztjYXNlIlJlZ0V4cCI6Zm9yKHZhciB6IGluIEEpaWYodS5jYWxsKEEseikmJlMudGVzdCh6KSYmKHg9PT12b2lkIDB8fGkuaGFzUXVlcnkoQSx6LHgpKSlyZXR1cm4hMDtyZXR1cm4hMTtjYXNlIk9iamVjdCI6Zm9yKHZhciBqIGluIFMpaWYodS5jYWxsKFMsaikmJiFpLmhhc1F1ZXJ5KEEsaixTW2pdKSlyZXR1cm4hMTtyZXR1cm4hMDtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoIlVSSS5oYXNRdWVyeSgpIGFjY2VwdHMgYSBzdHJpbmcsIHJlZ3VsYXIgZXhwcmVzc2lvbiBvciBvYmplY3QgYXMgdGhlIG5hbWUgcGFyYW1ldGVyIil9c3dpdGNoKGwoeCkpe2Nhc2UiVW5kZWZpbmVkIjpyZXR1cm4gUyBpbiBBO2Nhc2UiQm9vbGVhbiI6dmFyIGs9ISEocChBW1NdKT9BW1NdLmxlbmd0aDpBW1NdKTtyZXR1cm4geD09PWs7Y2FzZSJGdW5jdGlvbiI6cmV0dXJuISF4KEFbU10sUyxBKTtjYXNlIkFycmF5IjppZighcChBW1NdKSlyZXR1cm4hMTt2YXIgcT1MP206XztyZXR1cm4gcShBW1NdLHgpO2Nhc2UiUmVnRXhwIjpyZXR1cm4gcChBW1NdKT9MP20oQVtTXSx4KTohMTohIShBW1NdJiZBW1NdLm1hdGNoKHgpKTtjYXNlIk51bWJlciI6eD1TdHJpbmcoeCk7Y2FzZSJTdHJpbmciOnJldHVybiBwKEFbU10pP0w/bShBW1NdLHgpOiExOkFbU109PT14O2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiVVJJLmhhc1F1ZXJ5KCkgYWNjZXB0cyB1bmRlZmluZWQsIGJvb2xlYW4sIHN0cmluZywgbnVtYmVyLCBSZWdFeHAsIEZ1bmN0aW9uIGFzIHRoZSB2YWx1ZSBwYXJhbWV0ZXIiKX19LGkuam9pblBhdGhzPWZ1bmN0aW9uKCl7Zm9yKHZhciBBPVtdLFM9W10seD0wLEw9MDtMPGFyZ3VtZW50cy5sZW5ndGg7TCsrKXt2YXIgej1uZXcgaShhcmd1bWVudHNbTF0pO0EucHVzaCh6KTtmb3IodmFyIGo9ei5zZWdtZW50KCksaz0wO2s8ai5sZW5ndGg7aysrKXR5cGVvZiBqW2tdPT0ic3RyaW5nIiYmUy5wdXNoKGpba10pLGpba10mJngrK31pZighUy5sZW5ndGh8fCF4KXJldHVybiBuZXcgaSgiIik7dmFyIHE9bmV3IGkoIiIpLnNlZ21lbnQoUyk7cmV0dXJuKEFbMF0ucGF0aCgpPT09IiJ8fEFbMF0ucGF0aCgpLnNsaWNlKDAsMSk9PT0iLyIpJiZxLnBhdGgoIi8iK3EucGF0aCgpKSxxLm5vcm1hbGl6ZSgpfSxpLmNvbW1vblBhdGg9ZnVuY3Rpb24oQSxTKXt2YXIgeD1NYXRoLm1pbihBLmxlbmd0aCxTLmxlbmd0aCksTDtmb3IoTD0wO0w8eDtMKyspaWYoQS5jaGFyQXQoTCkhPT1TLmNoYXJBdChMKSl7TC0tO2JyZWFrfXJldHVybiBMPDE/QS5jaGFyQXQoMCk9PT1TLmNoYXJBdCgwKSYmQS5jaGFyQXQoMCk9PT0iLyI/Ii8iOiIiOigoQS5jaGFyQXQoTCkhPT0iLyJ8fFMuY2hhckF0KEwpIT09Ii8iKSYmKEw9QS5zdWJzdHJpbmcoMCxMKS5sYXN0SW5kZXhPZigiLyIpKSxBLnN1YnN0cmluZygwLEwrMSkpfSxpLndpdGhpblN0cmluZz1mdW5jdGlvbihBLFMseCl7eHx8KHg9e30pO3ZhciBMPXguc3RhcnR8fGkuZmluZFVyaS5zdGFydCx6PXguZW5kfHxpLmZpbmRVcmkuZW5kLGo9eC50cmltfHxpLmZpbmRVcmkudHJpbSxrPXgucGFyZW5zfHxpLmZpbmRVcmkucGFyZW5zLHE9L1thLXowLTktXT1bIiddPyQvaTtmb3IoTC5sYXN0SW5kZXg9MDs7KXt2YXIgVz1MLmV4ZWMoQSk7aWYoIVcpYnJlYWs7dmFyIFI9Vy5pbmRleDtpZih4Lmlnbm9yZUh0bWwpe3ZhciBudD1BLnNsaWNlKE1hdGgubWF4KFItMywwKSxSKTtpZihudCYmcS50ZXN0KG50KSljb250aW51ZX1mb3IodmFyIGF0PVIrQS5zbGljZShSKS5zZWFyY2goeiksbHQ9QS5zbGljZShSLGF0KSxodD0tMTs7KXt2YXIgb3Q9ay5leGVjKGx0KTtpZighb3QpYnJlYWs7dmFyIFB0PW90LmluZGV4K290WzBdLmxlbmd0aDtodD1NYXRoLm1heChodCxQdCl9aWYoaHQ+LTE/bHQ9bHQuc2xpY2UoMCxodCkrbHQuc2xpY2UoaHQpLnJlcGxhY2UoaiwiIik6bHQ9bHQucmVwbGFjZShqLCIiKSwhKGx0Lmxlbmd0aDw9V1swXS5sZW5ndGgpJiYhKHguaWdub3JlJiZ4Lmlnbm9yZS50ZXN0KGx0KSkpe2F0PVIrbHQubGVuZ3RoO3ZhciB5dD1TKGx0LFIsYXQsQSk7aWYoeXQ9PT12b2lkIDApe0wubGFzdEluZGV4PWF0O2NvbnRpbnVlfXl0PVN0cmluZyh5dCksQT1BLnNsaWNlKDAsUikreXQrQS5zbGljZShhdCksTC5sYXN0SW5kZXg9Uit5dC5sZW5ndGh9fXJldHVybiBMLmxhc3RJbmRleD0wLEF9LGkuZW5zdXJlVmFsaWRIb3N0bmFtZT1mdW5jdGlvbihBLFMpe3ZhciB4PSEhQSxMPSEhUyx6PSExO2lmKEwmJih6PW0oaS5ob3N0UHJvdG9jb2xzLFMpKSx6JiYheCl0aHJvdyBuZXcgVHlwZUVycm9yKCJIb3N0bmFtZSBjYW5ub3QgYmUgZW1wdHksIGlmIHByb3RvY29sIGlzICIrUyk7aWYoQSYmQS5tYXRjaChpLmludmFsaWRfaG9zdG5hbWVfY2hhcmFjdGVycykpe2lmKCF0KXRocm93IG5ldyBUeXBlRXJyb3IoJ0hvc3RuYW1lICInK0ErJyIgY29udGFpbnMgY2hhcmFjdGVycyBvdGhlciB0aGFuIFtBLVowLTkuLTpfXSBhbmQgUHVueWNvZGUuanMgaXMgbm90IGF2YWlsYWJsZScpO2lmKHQudG9BU0NJSShBKS5tYXRjaChpLmludmFsaWRfaG9zdG5hbWVfY2hhcmFjdGVycykpdGhyb3cgbmV3IFR5cGVFcnJvcignSG9zdG5hbWUgIicrQSsnIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOS4tOl9dJyl9fSxpLmVuc3VyZVZhbGlkUG9ydD1mdW5jdGlvbihBKXtpZihBKXt2YXIgUz1OdW1iZXIoQSk7aWYoIShzKFMpJiZTPjAmJlM8NjU1MzYpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1BvcnQgIicrQSsnIiBpcyBub3QgYSB2YWxpZCBwb3J0Jyl9fSxpLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oQSl7aWYoQSl7dmFyIFM9e1VSSTp0aGlzLm5vQ29uZmxpY3QoKX07cmV0dXJuIG8uVVJJVGVtcGxhdGUmJnR5cGVvZiBvLlVSSVRlbXBsYXRlLm5vQ29uZmxpY3Q9PSJmdW5jdGlvbiImJihTLlVSSVRlbXBsYXRlPW8uVVJJVGVtcGxhdGUubm9Db25mbGljdCgpKSxvLklQdjYmJnR5cGVvZiBvLklQdjYubm9Db25mbGljdD09ImZ1bmN0aW9uIiYmKFMuSVB2Nj1vLklQdjYubm9Db25mbGljdCgpKSxvLlNlY29uZExldmVsRG9tYWlucyYmdHlwZW9mIG8uU2Vjb25kTGV2ZWxEb21haW5zLm5vQ29uZmxpY3Q9PSJmdW5jdGlvbiImJihTLlNlY29uZExldmVsRG9tYWlucz1vLlNlY29uZExldmVsRG9tYWlucy5ub0NvbmZsaWN0KCkpLFN9ZWxzZSBvLlVSST09PXRoaXMmJihvLlVSST1yKTtyZXR1cm4gdGhpc30sZi5idWlsZD1mdW5jdGlvbihBKXtyZXR1cm4gQT09PSEwP3RoaXMuX2RlZmVycmVkX2J1aWxkPSEwOihBPT09dm9pZCAwfHx0aGlzLl9kZWZlcnJlZF9idWlsZCkmJih0aGlzLl9zdHJpbmc9aS5idWlsZCh0aGlzLl9wYXJ0cyksdGhpcy5fZGVmZXJyZWRfYnVpbGQ9ITEpLHRoaXN9LGYuY2xvbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGkodGhpcyl9LGYudmFsdWVPZj1mLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYnVpbGQoITEpLl9zdHJpbmd9O2Z1bmN0aW9uIE0oQSl7cmV0dXJuIGZ1bmN0aW9uKFMseCl7cmV0dXJuIFM9PT12b2lkIDA/dGhpcy5fcGFydHNbQV18fCIiOih0aGlzLl9wYXJ0c1tBXT1TfHxudWxsLHRoaXMuYnVpbGQoIXgpLHRoaXMpfX1mdW5jdGlvbiBOKEEsUyl7cmV0dXJuIGZ1bmN0aW9uKHgsTCl7cmV0dXJuIHg9PT12b2lkIDA/dGhpcy5fcGFydHNbQV18fCIiOih4IT09bnVsbCYmKHg9eCsiIix4LmNoYXJBdCgwKT09PVMmJih4PXguc3Vic3RyaW5nKDEpKSksdGhpcy5fcGFydHNbQV09eCx0aGlzLmJ1aWxkKCFMKSx0aGlzKX19Zi5wcm90b2NvbD1NKCJwcm90b2NvbCIpLGYudXNlcm5hbWU9TSgidXNlcm5hbWUiKSxmLnBhc3N3b3JkPU0oInBhc3N3b3JkIiksZi5ob3N0bmFtZT1NKCJob3N0bmFtZSIpLGYucG9ydD1NKCJwb3J0IiksZi5xdWVyeT1OKCJxdWVyeSIsIj8iKSxmLmZyYWdtZW50PU4oImZyYWdtZW50IiwiIyIpLGYuc2VhcmNoPWZ1bmN0aW9uKEEsUyl7dmFyIHg9dGhpcy5xdWVyeShBLFMpO3JldHVybiB0eXBlb2YgeD09InN0cmluZyImJngubGVuZ3RoPyI/Iit4Onh9LGYuaGFzaD1mdW5jdGlvbihBLFMpe3ZhciB4PXRoaXMuZnJhZ21lbnQoQSxTKTtyZXR1cm4gdHlwZW9mIHg9PSJzdHJpbmciJiZ4Lmxlbmd0aD8iIyIreDp4fSxmLnBhdGhuYW1lPWZ1bmN0aW9uKEEsUyl7aWYoQT09PXZvaWQgMHx8QT09PSEwKXt2YXIgeD10aGlzLl9wYXJ0cy5wYXRofHwodGhpcy5fcGFydHMuaG9zdG5hbWU/Ii8iOiIiKTtyZXR1cm4gQT8odGhpcy5fcGFydHMudXJuP2kuZGVjb2RlVXJuUGF0aDppLmRlY29kZVBhdGgpKHgpOnh9ZWxzZSByZXR1cm4gdGhpcy5fcGFydHMudXJuP3RoaXMuX3BhcnRzLnBhdGg9QT9pLnJlY29kZVVyblBhdGgoQSk6IiI6dGhpcy5fcGFydHMucGF0aD1BP2kucmVjb2RlUGF0aChBKToiLyIsdGhpcy5idWlsZCghUyksdGhpc30sZi5wYXRoPWYucGF0aG5hbWUsZi5ocmVmPWZ1bmN0aW9uKEEsUyl7dmFyIHg7aWYoQT09PXZvaWQgMClyZXR1cm4gdGhpcy50b1N0cmluZygpO3RoaXMuX3N0cmluZz0iIix0aGlzLl9wYXJ0cz1pLl9wYXJ0cygpO3ZhciBMPUEgaW5zdGFuY2VvZiBpLHo9dHlwZW9mIEE9PSJvYmplY3QiJiYoQS5ob3N0bmFtZXx8QS5wYXRofHxBLnBhdGhuYW1lKTtpZihBLm5vZGVOYW1lKXt2YXIgaj1pLmdldERvbUF0dHJpYnV0ZShBKTtBPUFbal18fCIiLHo9ITF9aWYoIUwmJnomJkEucGF0aG5hbWUhPT12b2lkIDAmJihBPUEudG9TdHJpbmcoKSksdHlwZW9mIEE9PSJzdHJpbmcifHxBIGluc3RhbmNlb2YgU3RyaW5nKXRoaXMuX3BhcnRzPWkucGFyc2UoU3RyaW5nKEEpLHRoaXMuX3BhcnRzKTtlbHNlIGlmKEx8fHope3ZhciBrPUw/QS5fcGFydHM6QTtmb3IoeCBpbiBrKXghPT0icXVlcnkiJiZ1LmNhbGwodGhpcy5fcGFydHMseCkmJih0aGlzLl9wYXJ0c1t4XT1rW3hdKTtrLnF1ZXJ5JiZ0aGlzLnF1ZXJ5KGsucXVlcnksITEpfWVsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBpbnB1dCIpO3JldHVybiB0aGlzLmJ1aWxkKCFTKSx0aGlzfSxmLmlzPWZ1bmN0aW9uKEEpe3ZhciBTPSExLHg9ITEsTD0hMSx6PSExLGo9ITEsaz0hMSxxPSExLFc9IXRoaXMuX3BhcnRzLnVybjtzd2l0Y2godGhpcy5fcGFydHMuaG9zdG5hbWUmJihXPSExLHg9aS5pcDRfZXhwcmVzc2lvbi50ZXN0KHRoaXMuX3BhcnRzLmhvc3RuYW1lKSxMPWkuaXA2X2V4cHJlc3Npb24udGVzdCh0aGlzLl9wYXJ0cy5ob3N0bmFtZSksUz14fHxMLHo9IVMsaj16JiZuJiZuLmhhcyh0aGlzLl9wYXJ0cy5ob3N0bmFtZSksaz16JiZpLmlkbl9leHByZXNzaW9uLnRlc3QodGhpcy5fcGFydHMuaG9zdG5hbWUpLHE9eiYmaS5wdW55Y29kZV9leHByZXNzaW9uLnRlc3QodGhpcy5fcGFydHMuaG9zdG5hbWUpKSxBLnRvTG93ZXJDYXNlKCkpe2Nhc2UicmVsYXRpdmUiOnJldHVybiBXO2Nhc2UiYWJzb2x1dGUiOnJldHVybiFXO2Nhc2UiZG9tYWluIjpjYXNlIm5hbWUiOnJldHVybiB6O2Nhc2Uic2xkIjpyZXR1cm4gajtjYXNlImlwIjpyZXR1cm4gUztjYXNlImlwNCI6Y2FzZSJpcHY0IjpjYXNlImluZXQ0IjpyZXR1cm4geDtjYXNlImlwNiI6Y2FzZSJpcHY2IjpjYXNlImluZXQ2IjpyZXR1cm4gTDtjYXNlImlkbiI6cmV0dXJuIGs7Y2FzZSJ1cmwiOnJldHVybiF0aGlzLl9wYXJ0cy51cm47Y2FzZSJ1cm4iOnJldHVybiEhdGhpcy5fcGFydHMudXJuO2Nhc2UicHVueWNvZGUiOnJldHVybiBxfXJldHVybiBudWxsfTt2YXIgRj1mLnByb3RvY29sLEk9Zi5wb3J0LHY9Zi5ob3N0bmFtZTtmLnByb3RvY29sPWZ1bmN0aW9uKEEsUyl7aWYoQSYmKEE9QS5yZXBsYWNlKC86KFwvXC8pPyQvLCIiKSwhQS5tYXRjaChpLnByb3RvY29sX2V4cHJlc3Npb24pKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm90b2NvbCAiJytBK2AiIGNvbnRhaW5zIGNoYXJhY3RlcnMgb3RoZXIgdGhhbiBbQS1aMC05ListXSBvciBkb2Vzbid0IHN0YXJ0IHdpdGggW0EtWl1gKTtyZXR1cm4gRi5jYWxsKHRoaXMsQSxTKX0sZi5zY2hlbWU9Zi5wcm90b2NvbCxmLnBvcnQ9ZnVuY3Rpb24oQSxTKXtyZXR1cm4gdGhpcy5fcGFydHMudXJuP0E9PT12b2lkIDA/IiI6dGhpczooQSE9PXZvaWQgMCYmKEE9PT0wJiYoQT1udWxsKSxBJiYoQSs9IiIsQS5jaGFyQXQoMCk9PT0iOiImJihBPUEuc3Vic3RyaW5nKDEpKSxpLmVuc3VyZVZhbGlkUG9ydChBKSkpLEkuY2FsbCh0aGlzLEEsUykpfSxmLmhvc3RuYW1lPWZ1bmN0aW9uKEEsUyl7aWYodGhpcy5fcGFydHMudXJuKXJldHVybiBBPT09dm9pZCAwPyIiOnRoaXM7aWYoQSE9PXZvaWQgMCl7dmFyIHg9e3ByZXZlbnRJbnZhbGlkSG9zdG5hbWU6dGhpcy5fcGFydHMucHJldmVudEludmFsaWRIb3N0bmFtZX0sTD1pLnBhcnNlSG9zdChBLHgpO2lmKEwhPT0iLyIpdGhyb3cgbmV3IFR5cGVFcnJvcignSG9zdG5hbWUgIicrQSsnIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOS4tXScpO0E9eC5ob3N0bmFtZSx0aGlzLl9wYXJ0cy5wcmV2ZW50SW52YWxpZEhvc3RuYW1lJiZpLmVuc3VyZVZhbGlkSG9zdG5hbWUoQSx0aGlzLl9wYXJ0cy5wcm90b2NvbCl9cmV0dXJuIHYuY2FsbCh0aGlzLEEsUyl9LGYub3JpZ2luPWZ1bmN0aW9uKEEsUyl7aWYodGhpcy5fcGFydHMudXJuKXJldHVybiBBPT09dm9pZCAwPyIiOnRoaXM7aWYoQT09PXZvaWQgMCl7dmFyIHg9dGhpcy5wcm90b2NvbCgpLEw9dGhpcy5hdXRob3JpdHkoKTtyZXR1cm4gTD8oeD94KyI6Ly8iOiIiKSt0aGlzLmF1dGhvcml0eSgpOiIifWVsc2V7dmFyIHo9aShBKTtyZXR1cm4gdGhpcy5wcm90b2NvbCh6LnByb3RvY29sKCkpLmF1dGhvcml0eSh6LmF1dGhvcml0eSgpKS5idWlsZCghUyksdGhpc319LGYuaG9zdD1mdW5jdGlvbihBLFMpe2lmKHRoaXMuX3BhcnRzLnVybilyZXR1cm4gQT09PXZvaWQgMD8iIjp0aGlzO2lmKEE9PT12b2lkIDApcmV0dXJuIHRoaXMuX3BhcnRzLmhvc3RuYW1lP2kuYnVpbGRIb3N0KHRoaXMuX3BhcnRzKToiIjt2YXIgeD1pLnBhcnNlSG9zdChBLHRoaXMuX3BhcnRzKTtpZih4IT09Ii8iKXRocm93IG5ldyBUeXBlRXJyb3IoJ0hvc3RuYW1lICInK0ErJyIgY29udGFpbnMgY2hhcmFjdGVycyBvdGhlciB0aGFuIFtBLVowLTkuLV0nKTtyZXR1cm4gdGhpcy5idWlsZCghUyksdGhpc30sZi5hdXRob3JpdHk9ZnVuY3Rpb24oQSxTKXtpZih0aGlzLl9wYXJ0cy51cm4pcmV0dXJuIEE9PT12b2lkIDA/IiI6dGhpcztpZihBPT09dm9pZCAwKXJldHVybiB0aGlzLl9wYXJ0cy5ob3N0bmFtZT9pLmJ1aWxkQXV0aG9yaXR5KHRoaXMuX3BhcnRzKToiIjt2YXIgeD1pLnBhcnNlQXV0aG9yaXR5KEEsdGhpcy5fcGFydHMpO2lmKHghPT0iLyIpdGhyb3cgbmV3IFR5cGVFcnJvcignSG9zdG5hbWUgIicrQSsnIiBjb250YWlucyBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gW0EtWjAtOS4tXScpO3JldHVybiB0aGlzLmJ1aWxkKCFTKSx0aGlzfSxmLnVzZXJpbmZvPWZ1bmN0aW9uKEEsUyl7aWYodGhpcy5fcGFydHMudXJuKXJldHVybiBBPT09dm9pZCAwPyIiOnRoaXM7aWYoQT09PXZvaWQgMCl7dmFyIHg9aS5idWlsZFVzZXJpbmZvKHRoaXMuX3BhcnRzKTtyZXR1cm4geCYmeC5zdWJzdHJpbmcoMCx4Lmxlbmd0aC0xKX1lbHNlIHJldHVybiBBW0EubGVuZ3RoLTFdIT09IkAiJiYoQSs9IkAiKSxpLnBhcnNlVXNlcmluZm8oQSx0aGlzLl9wYXJ0cyksdGhpcy5idWlsZCghUyksdGhpc30sZi5yZXNvdXJjZT1mdW5jdGlvbihBLFMpe3ZhciB4O3JldHVybiBBPT09dm9pZCAwP3RoaXMucGF0aCgpK3RoaXMuc2VhcmNoKCkrdGhpcy5oYXNoKCk6KHg9aS5wYXJzZShBKSx0aGlzLl9wYXJ0cy5wYXRoPXgucGF0aCx0aGlzLl9wYXJ0cy5xdWVyeT14LnF1ZXJ5LHRoaXMuX3BhcnRzLmZyYWdtZW50PXguZnJhZ21lbnQsdGhpcy5idWlsZCghUyksdGhpcyl9LGYuc3ViZG9tYWluPWZ1bmN0aW9uKEEsUyl7aWYodGhpcy5fcGFydHMudXJuKXJldHVybiBBPT09dm9pZCAwPyIiOnRoaXM7aWYoQT09PXZvaWQgMCl7aWYoIXRoaXMuX3BhcnRzLmhvc3RuYW1lfHx0aGlzLmlzKCJJUCIpKXJldHVybiIiO3ZhciB4PXRoaXMuX3BhcnRzLmhvc3RuYW1lLmxlbmd0aC10aGlzLmRvbWFpbigpLmxlbmd0aC0xO3JldHVybiB0aGlzLl9wYXJ0cy5ob3N0bmFtZS5zdWJzdHJpbmcoMCx4KXx8IiJ9ZWxzZXt2YXIgTD10aGlzLl9wYXJ0cy5ob3N0bmFtZS5sZW5ndGgtdGhpcy5kb21haW4oKS5sZW5ndGgsej10aGlzLl9wYXJ0cy5ob3N0bmFtZS5zdWJzdHJpbmcoMCxMKSxqPW5ldyBSZWdFeHAoIl4iK2MoeikpO2lmKEEmJkEuY2hhckF0KEEubGVuZ3RoLTEpIT09Ii4iJiYoQSs9Ii4iKSxBLmluZGV4T2YoIjoiKSE9PS0xKXRocm93IG5ldyBUeXBlRXJyb3IoIkRvbWFpbnMgY2Fubm90IGNvbnRhaW4gY29sb25zIik7cmV0dXJuIEEmJmkuZW5zdXJlVmFsaWRIb3N0bmFtZShBLHRoaXMuX3BhcnRzLnByb3RvY29sKSx0aGlzLl9wYXJ0cy5ob3N0bmFtZT10aGlzLl9wYXJ0cy5ob3N0bmFtZS5yZXBsYWNlKGosQSksdGhpcy5idWlsZCghUyksdGhpc319LGYuZG9tYWluPWZ1bmN0aW9uKEEsUyl7aWYodGhpcy5fcGFydHMudXJuKXJldHVybiBBPT09dm9pZCAwPyIiOnRoaXM7aWYodHlwZW9mIEE9PSJib29sZWFuIiYmKFM9QSxBPXZvaWQgMCksQT09PXZvaWQgMCl7aWYoIXRoaXMuX3BhcnRzLmhvc3RuYW1lfHx0aGlzLmlzKCJJUCIpKXJldHVybiIiO3ZhciB4PXRoaXMuX3BhcnRzLmhvc3RuYW1lLm1hdGNoKC9cLi9nKTtpZih4JiZ4Lmxlbmd0aDwyKXJldHVybiB0aGlzLl9wYXJ0cy5ob3N0bmFtZTt2YXIgTD10aGlzLl9wYXJ0cy5ob3N0bmFtZS5sZW5ndGgtdGhpcy50bGQoUykubGVuZ3RoLTE7cmV0dXJuIEw9dGhpcy5fcGFydHMuaG9zdG5hbWUubGFzdEluZGV4T2YoIi4iLEwtMSkrMSx0aGlzLl9wYXJ0cy5ob3N0bmFtZS5zdWJzdHJpbmcoTCl8fCIifWVsc2V7aWYoIUEpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2Fubm90IHNldCBkb21haW4gZW1wdHkiKTtpZihBLmluZGV4T2YoIjoiKSE9PS0xKXRocm93IG5ldyBUeXBlRXJyb3IoIkRvbWFpbnMgY2Fubm90IGNvbnRhaW4gY29sb25zIik7aWYoaS5lbnN1cmVWYWxpZEhvc3RuYW1lKEEsdGhpcy5fcGFydHMucHJvdG9jb2wpLCF0aGlzLl9wYXJ0cy5ob3N0bmFtZXx8dGhpcy5pcygiSVAiKSl0aGlzLl9wYXJ0cy5ob3N0bmFtZT1BO2Vsc2V7dmFyIHo9bmV3IFJlZ0V4cChjKHRoaXMuZG9tYWluKCkpKyIkIik7dGhpcy5fcGFydHMuaG9zdG5hbWU9dGhpcy5fcGFydHMuaG9zdG5hbWUucmVwbGFjZSh6LEEpfXJldHVybiB0aGlzLmJ1aWxkKCFTKSx0aGlzfX0sZi50bGQ9ZnVuY3Rpb24oQSxTKXtpZih0aGlzLl9wYXJ0cy51cm4pcmV0dXJuIEE9PT12b2lkIDA/IiI6dGhpcztpZih0eXBlb2YgQT09ImJvb2xlYW4iJiYoUz1BLEE9dm9pZCAwKSxBPT09dm9pZCAwKXtpZighdGhpcy5fcGFydHMuaG9zdG5hbWV8fHRoaXMuaXMoIklQIikpcmV0dXJuIiI7dmFyIHg9dGhpcy5fcGFydHMuaG9zdG5hbWUubGFzdEluZGV4T2YoIi4iKSxMPXRoaXMuX3BhcnRzLmhvc3RuYW1lLnN1YnN0cmluZyh4KzEpO3JldHVybiBTIT09ITAmJm4mJm4ubGlzdFtMLnRvTG93ZXJDYXNlKCldJiZuLmdldCh0aGlzLl9wYXJ0cy5ob3N0bmFtZSl8fEx9ZWxzZXt2YXIgejtpZihBKWlmKEEubWF0Y2goL1teYS16QS1aMC05LV0vKSlpZihuJiZuLmlzKEEpKXo9bmV3IFJlZ0V4cChjKHRoaXMudGxkKCkpKyIkIiksdGhpcy5fcGFydHMuaG9zdG5hbWU9dGhpcy5fcGFydHMuaG9zdG5hbWUucmVwbGFjZSh6LEEpO2Vsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcignVExEICInK0ErJyIgY29udGFpbnMgY2hhcmFjdGVycyBvdGhlciB0aGFuIFtBLVowLTldJyk7ZWxzZXtpZighdGhpcy5fcGFydHMuaG9zdG5hbWV8fHRoaXMuaXMoIklQIikpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJjYW5ub3Qgc2V0IFRMRCBvbiBub24tZG9tYWluIGhvc3QiKTt6PW5ldyBSZWdFeHAoYyh0aGlzLnRsZCgpKSsiJCIpLHRoaXMuX3BhcnRzLmhvc3RuYW1lPXRoaXMuX3BhcnRzLmhvc3RuYW1lLnJlcGxhY2UoeixBKX1lbHNlIHRocm93IG5ldyBUeXBlRXJyb3IoImNhbm5vdCBzZXQgVExEIGVtcHR5Iik7cmV0dXJuIHRoaXMuYnVpbGQoIVMpLHRoaXN9fSxmLmRpcmVjdG9yeT1mdW5jdGlvbihBLFMpe2lmKHRoaXMuX3BhcnRzLnVybilyZXR1cm4gQT09PXZvaWQgMD8iIjp0aGlzO2lmKEE9PT12b2lkIDB8fEE9PT0hMCl7aWYoIXRoaXMuX3BhcnRzLnBhdGgmJiF0aGlzLl9wYXJ0cy5ob3N0bmFtZSlyZXR1cm4iIjtpZih0aGlzLl9wYXJ0cy5wYXRoPT09Ii8iKXJldHVybiIvIjt2YXIgeD10aGlzLl9wYXJ0cy5wYXRoLmxlbmd0aC10aGlzLmZpbGVuYW1lKCkubGVuZ3RoLTEsTD10aGlzLl9wYXJ0cy5wYXRoLnN1YnN0cmluZygwLHgpfHwodGhpcy5fcGFydHMuaG9zdG5hbWU/Ii8iOiIiKTtyZXR1cm4gQT9pLmRlY29kZVBhdGgoTCk6TH1lbHNle3ZhciB6PXRoaXMuX3BhcnRzLnBhdGgubGVuZ3RoLXRoaXMuZmlsZW5hbWUoKS5sZW5ndGgsaj10aGlzLl9wYXJ0cy5wYXRoLnN1YnN0cmluZygwLHopLGs9bmV3IFJlZ0V4cCgiXiIrYyhqKSk7cmV0dXJuIHRoaXMuaXMoInJlbGF0aXZlIil8fChBfHwoQT0iLyIpLEEuY2hhckF0KDApIT09Ii8iJiYoQT0iLyIrQSkpLEEmJkEuY2hhckF0KEEubGVuZ3RoLTEpIT09Ii8iJiYoQSs9Ii8iKSxBPWkucmVjb2RlUGF0aChBKSx0aGlzLl9wYXJ0cy5wYXRoPXRoaXMuX3BhcnRzLnBhdGgucmVwbGFjZShrLEEpLHRoaXMuYnVpbGQoIVMpLHRoaXN9fSxmLmZpbGVuYW1lPWZ1bmN0aW9uKEEsUyl7aWYodGhpcy5fcGFydHMudXJuKXJldHVybiBBPT09dm9pZCAwPyIiOnRoaXM7aWYodHlwZW9mIEEhPSJzdHJpbmciKXtpZighdGhpcy5fcGFydHMucGF0aHx8dGhpcy5fcGFydHMucGF0aD09PSIvIilyZXR1cm4iIjt2YXIgeD10aGlzLl9wYXJ0cy5wYXRoLmxhc3RJbmRleE9mKCIvIiksTD10aGlzLl9wYXJ0cy5wYXRoLnN1YnN0cmluZyh4KzEpO3JldHVybiBBP2kuZGVjb2RlUGF0aFNlZ21lbnQoTCk6TH1lbHNle3ZhciB6PSExO0EuY2hhckF0KDApPT09Ii8iJiYoQT1BLnN1YnN0cmluZygxKSksQS5tYXRjaCgvXC4/XC8vKSYmKHo9ITApO3ZhciBqPW5ldyBSZWdFeHAoYyh0aGlzLmZpbGVuYW1lKCkpKyIkIik7cmV0dXJuIEE9aS5yZWNvZGVQYXRoKEEpLHRoaXMuX3BhcnRzLnBhdGg9dGhpcy5fcGFydHMucGF0aC5yZXBsYWNlKGosQSksej90aGlzLm5vcm1hbGl6ZVBhdGgoUyk6dGhpcy5idWlsZCghUyksdGhpc319LGYuc3VmZml4PWZ1bmN0aW9uKEEsUyl7aWYodGhpcy5fcGFydHMudXJuKXJldHVybiBBPT09dm9pZCAwPyIiOnRoaXM7aWYoQT09PXZvaWQgMHx8QT09PSEwKXtpZighdGhpcy5fcGFydHMucGF0aHx8dGhpcy5fcGFydHMucGF0aD09PSIvIilyZXR1cm4iIjt2YXIgeD10aGlzLmZpbGVuYW1lKCksTD14Lmxhc3RJbmRleE9mKCIuIikseixqO3JldHVybiBMPT09LTE/IiI6KHo9eC5zdWJzdHJpbmcoTCsxKSxqPS9eW2EtejAtOSVdKyQvaS50ZXN0KHopP3o6IiIsQT9pLmRlY29kZVBhdGhTZWdtZW50KGopOmopfWVsc2V7QS5jaGFyQXQoMCk9PT0iLiImJihBPUEuc3Vic3RyaW5nKDEpKTt2YXIgaz10aGlzLnN1ZmZpeCgpLHE7aWYoaylBP3E9bmV3IFJlZ0V4cChjKGspKyIkIik6cT1uZXcgUmVnRXhwKGMoIi4iK2spKyIkIik7ZWxzZXtpZighQSlyZXR1cm4gdGhpczt0aGlzLl9wYXJ0cy5wYXRoKz0iLiIraS5yZWNvZGVQYXRoKEEpfXJldHVybiBxJiYoQT1pLnJlY29kZVBhdGgoQSksdGhpcy5fcGFydHMucGF0aD10aGlzLl9wYXJ0cy5wYXRoLnJlcGxhY2UocSxBKSksdGhpcy5idWlsZCghUyksdGhpc319LGYuc2VnbWVudD1mdW5jdGlvbihBLFMseCl7dmFyIEw9dGhpcy5fcGFydHMudXJuPyI6IjoiLyIsej10aGlzLnBhdGgoKSxqPXouc3Vic3RyaW5nKDAsMSk9PT0iLyIsaz16LnNwbGl0KEwpO2lmKEEhPT12b2lkIDAmJnR5cGVvZiBBIT0ibnVtYmVyIiYmKHg9UyxTPUEsQT12b2lkIDApLEEhPT12b2lkIDAmJnR5cGVvZiBBIT0ibnVtYmVyIil0aHJvdyBuZXcgRXJyb3IoJ0JhZCBzZWdtZW50ICInK0ErJyIsIG11c3QgYmUgMC1iYXNlZCBpbnRlZ2VyJyk7aWYoaiYmay5zaGlmdCgpLEE8MCYmKEE9TWF0aC5tYXgoay5sZW5ndGgrQSwwKSksUz09PXZvaWQgMClyZXR1cm4gQT09PXZvaWQgMD9rOmtbQV07aWYoQT09PW51bGx8fGtbQV09PT12b2lkIDApaWYocChTKSl7az1bXTtmb3IodmFyIHE9MCxXPVMubGVuZ3RoO3E8VztxKyspIVNbcV0ubGVuZ3RoJiYoIWsubGVuZ3RofHwha1trLmxlbmd0aC0xXS5sZW5ndGgpfHwoay5sZW5ndGgmJiFrW2subGVuZ3RoLTFdLmxlbmd0aCYmay5wb3AoKSxrLnB1c2goZyhTW3FdKSkpfWVsc2UoU3x8dHlwZW9mIFM9PSJzdHJpbmciKSYmKFM9ZyhTKSxrW2subGVuZ3RoLTFdPT09IiI/a1trLmxlbmd0aC0xXT1TOmsucHVzaChTKSk7ZWxzZSBTP2tbQV09ZyhTKTprLnNwbGljZShBLDEpO3JldHVybiBqJiZrLnVuc2hpZnQoIiIpLHRoaXMucGF0aChrLmpvaW4oTCkseCl9LGYuc2VnbWVudENvZGVkPWZ1bmN0aW9uKEEsUyx4KXt2YXIgTCx6LGo7aWYodHlwZW9mIEEhPSJudW1iZXIiJiYoeD1TLFM9QSxBPXZvaWQgMCksUz09PXZvaWQgMCl7aWYoTD10aGlzLnNlZ21lbnQoQSxTLHgpLCFwKEwpKUw9TCE9PXZvaWQgMD9pLmRlY29kZShMKTp2b2lkIDA7ZWxzZSBmb3Ioej0wLGo9TC5sZW5ndGg7ejxqO3orKylMW3pdPWkuZGVjb2RlKExbel0pO3JldHVybiBMfWlmKCFwKFMpKVM9dHlwZW9mIFM9PSJzdHJpbmcifHxTIGluc3RhbmNlb2YgU3RyaW5nP2kuZW5jb2RlKFMpOlM7ZWxzZSBmb3Ioej0wLGo9Uy5sZW5ndGg7ejxqO3orKylTW3pdPWkuZW5jb2RlKFNbel0pO3JldHVybiB0aGlzLnNlZ21lbnQoQSxTLHgpfTt2YXIgQj1mLnF1ZXJ5O3JldHVybiBmLnF1ZXJ5PWZ1bmN0aW9uKEEsUyl7aWYoQT09PSEwKXJldHVybiBpLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7aWYodHlwZW9mIEE9PSJmdW5jdGlvbiIpe3ZhciB4PWkucGFyc2VRdWVyeSh0aGlzLl9wYXJ0cy5xdWVyeSx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKSxMPUEuY2FsbCh0aGlzLHgpO3JldHVybiB0aGlzLl9wYXJ0cy5xdWVyeT1pLmJ1aWxkUXVlcnkoTHx8eCx0aGlzLl9wYXJ0cy5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnMsdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSksdGhpcy5idWlsZCghUyksdGhpc31lbHNlIHJldHVybiBBIT09dm9pZCAwJiZ0eXBlb2YgQSE9InN0cmluZyI/KHRoaXMuX3BhcnRzLnF1ZXJ5PWkuYnVpbGRRdWVyeShBLHRoaXMuX3BhcnRzLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycyx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKSx0aGlzLmJ1aWxkKCFTKSx0aGlzKTpCLmNhbGwodGhpcyxBLFMpfSxmLnNldFF1ZXJ5PWZ1bmN0aW9uKEEsUyx4KXt2YXIgTD1pLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7aWYodHlwZW9mIEE9PSJzdHJpbmcifHxBIGluc3RhbmNlb2YgU3RyaW5nKUxbQV09UyE9PXZvaWQgMD9TOm51bGw7ZWxzZSBpZih0eXBlb2YgQT09Im9iamVjdCIpZm9yKHZhciB6IGluIEEpdS5jYWxsKEEseikmJihMW3pdPUFbel0pO2Vsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiVVJJLmFkZFF1ZXJ5KCkgYWNjZXB0cyBhbiBvYmplY3QsIHN0cmluZyBhcyB0aGUgbmFtZSBwYXJhbWV0ZXIiKTtyZXR1cm4gdGhpcy5fcGFydHMucXVlcnk9aS5idWlsZFF1ZXJ5KEwsdGhpcy5fcGFydHMuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzLHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpLHR5cGVvZiBBIT0ic3RyaW5nIiYmKHg9UyksdGhpcy5idWlsZCgheCksdGhpc30sZi5hZGRRdWVyeT1mdW5jdGlvbihBLFMseCl7dmFyIEw9aS5wYXJzZVF1ZXJ5KHRoaXMuX3BhcnRzLnF1ZXJ5LHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO3JldHVybiBpLmFkZFF1ZXJ5KEwsQSxTPT09dm9pZCAwP251bGw6UyksdGhpcy5fcGFydHMucXVlcnk9aS5idWlsZFF1ZXJ5KEwsdGhpcy5fcGFydHMuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzLHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpLHR5cGVvZiBBIT0ic3RyaW5nIiYmKHg9UyksdGhpcy5idWlsZCgheCksdGhpc30sZi5yZW1vdmVRdWVyeT1mdW5jdGlvbihBLFMseCl7dmFyIEw9aS5wYXJzZVF1ZXJ5KHRoaXMuX3BhcnRzLnF1ZXJ5LHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpO3JldHVybiBpLnJlbW92ZVF1ZXJ5KEwsQSxTKSx0aGlzLl9wYXJ0cy5xdWVyeT1pLmJ1aWxkUXVlcnkoTCx0aGlzLl9wYXJ0cy5kdXBsaWNhdGVRdWVyeVBhcmFtZXRlcnMsdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSksdHlwZW9mIEEhPSJzdHJpbmciJiYoeD1TKSx0aGlzLmJ1aWxkKCF4KSx0aGlzfSxmLmhhc1F1ZXJ5PWZ1bmN0aW9uKEEsUyx4KXt2YXIgTD1pLnBhcnNlUXVlcnkodGhpcy5fcGFydHMucXVlcnksdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSk7cmV0dXJuIGkuaGFzUXVlcnkoTCxBLFMseCl9LGYuc2V0U2VhcmNoPWYuc2V0UXVlcnksZi5hZGRTZWFyY2g9Zi5hZGRRdWVyeSxmLnJlbW92ZVNlYXJjaD1mLnJlbW92ZVF1ZXJ5LGYuaGFzU2VhcmNoPWYuaGFzUXVlcnksZi5ub3JtYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGFydHMudXJuP3RoaXMubm9ybWFsaXplUHJvdG9jb2woITEpLm5vcm1hbGl6ZVBhdGgoITEpLm5vcm1hbGl6ZVF1ZXJ5KCExKS5ub3JtYWxpemVGcmFnbWVudCghMSkuYnVpbGQoKTp0aGlzLm5vcm1hbGl6ZVByb3RvY29sKCExKS5ub3JtYWxpemVIb3N0bmFtZSghMSkubm9ybWFsaXplUG9ydCghMSkubm9ybWFsaXplUGF0aCghMSkubm9ybWFsaXplUXVlcnkoITEpLm5vcm1hbGl6ZUZyYWdtZW50KCExKS5idWlsZCgpfSxmLm5vcm1hbGl6ZVByb3RvY29sPWZ1bmN0aW9uKEEpe3JldHVybiB0eXBlb2YgdGhpcy5fcGFydHMucHJvdG9jb2w9PSJzdHJpbmciJiYodGhpcy5fcGFydHMucHJvdG9jb2w9dGhpcy5fcGFydHMucHJvdG9jb2wudG9Mb3dlckNhc2UoKSx0aGlzLmJ1aWxkKCFBKSksdGhpc30sZi5ub3JtYWxpemVIb3N0bmFtZT1mdW5jdGlvbihBKXtyZXR1cm4gdGhpcy5fcGFydHMuaG9zdG5hbWUmJih0aGlzLmlzKCJJRE4iKSYmdD90aGlzLl9wYXJ0cy5ob3N0bmFtZT10LnRvQVNDSUkodGhpcy5fcGFydHMuaG9zdG5hbWUpOnRoaXMuaXMoIklQdjYiKSYmZSYmKHRoaXMuX3BhcnRzLmhvc3RuYW1lPWUuYmVzdCh0aGlzLl9wYXJ0cy5ob3N0bmFtZSkpLHRoaXMuX3BhcnRzLmhvc3RuYW1lPXRoaXMuX3BhcnRzLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCksdGhpcy5idWlsZCghQSkpLHRoaXN9LGYubm9ybWFsaXplUG9ydD1mdW5jdGlvbihBKXtyZXR1cm4gdHlwZW9mIHRoaXMuX3BhcnRzLnByb3RvY29sPT0ic3RyaW5nIiYmdGhpcy5fcGFydHMucG9ydD09PWkuZGVmYXVsdFBvcnRzW3RoaXMuX3BhcnRzLnByb3RvY29sXSYmKHRoaXMuX3BhcnRzLnBvcnQ9bnVsbCx0aGlzLmJ1aWxkKCFBKSksdGhpc30sZi5ub3JtYWxpemVQYXRoPWZ1bmN0aW9uKEEpe3ZhciBTPXRoaXMuX3BhcnRzLnBhdGg7aWYoIVMpcmV0dXJuIHRoaXM7aWYodGhpcy5fcGFydHMudXJuKXJldHVybiB0aGlzLl9wYXJ0cy5wYXRoPWkucmVjb2RlVXJuUGF0aCh0aGlzLl9wYXJ0cy5wYXRoKSx0aGlzLmJ1aWxkKCFBKSx0aGlzO2lmKHRoaXMuX3BhcnRzLnBhdGg9PT0iLyIpcmV0dXJuIHRoaXM7Uz1pLnJlY29kZVBhdGgoUyk7dmFyIHgsTD0iIix6LGo7Zm9yKFMuY2hhckF0KDApIT09Ii8iJiYoeD0hMCxTPSIvIitTKSwoUy5zbGljZSgtMyk9PT0iLy4uInx8Uy5zbGljZSgtMik9PT0iLy4iKSYmKFMrPSIvIiksUz1TLnJlcGxhY2UoLyhcLyhcLlwvKSspfChcL1wuJCkvZywiLyIpLnJlcGxhY2UoL1wvezIsfS9nLCIvIikseCYmKEw9Uy5zdWJzdHJpbmcoMSkubWF0Y2goL14oXC5cLlwvKSsvKXx8IiIsTCYmKEw9TFswXSkpO3o9Uy5zZWFyY2goL1wvXC5cLihcL3wkKS8pLHohPT0tMTspe2lmKHo9PT0wKXtTPVMuc3Vic3RyaW5nKDMpO2NvbnRpbnVlfWo9Uy5zdWJzdHJpbmcoMCx6KS5sYXN0SW5kZXhPZigiLyIpLGo9PT0tMSYmKGo9eiksUz1TLnN1YnN0cmluZygwLGopK1Muc3Vic3RyaW5nKHorMyl9cmV0dXJuIHgmJnRoaXMuaXMoInJlbGF0aXZlIikmJihTPUwrUy5zdWJzdHJpbmcoMSkpLHRoaXMuX3BhcnRzLnBhdGg9Uyx0aGlzLmJ1aWxkKCFBKSx0aGlzfSxmLm5vcm1hbGl6ZVBhdGhuYW1lPWYubm9ybWFsaXplUGF0aCxmLm5vcm1hbGl6ZVF1ZXJ5PWZ1bmN0aW9uKEEpe3JldHVybiB0eXBlb2YgdGhpcy5fcGFydHMucXVlcnk9PSJzdHJpbmciJiYodGhpcy5fcGFydHMucXVlcnkubGVuZ3RoP3RoaXMucXVlcnkoaS5wYXJzZVF1ZXJ5KHRoaXMuX3BhcnRzLnF1ZXJ5LHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2UpKTp0aGlzLl9wYXJ0cy5xdWVyeT1udWxsLHRoaXMuYnVpbGQoIUEpKSx0aGlzfSxmLm5vcm1hbGl6ZUZyYWdtZW50PWZ1bmN0aW9uKEEpe3JldHVybiB0aGlzLl9wYXJ0cy5mcmFnbWVudHx8KHRoaXMuX3BhcnRzLmZyYWdtZW50PW51bGwsdGhpcy5idWlsZCghQSkpLHRoaXN9LGYubm9ybWFsaXplU2VhcmNoPWYubm9ybWFsaXplUXVlcnksZi5ub3JtYWxpemVIYXNoPWYubm9ybWFsaXplRnJhZ21lbnQsZi5pc284ODU5PWZ1bmN0aW9uKCl7dmFyIEE9aS5lbmNvZGUsUz1pLmRlY29kZTtpLmVuY29kZT1lc2NhcGUsaS5kZWNvZGU9ZGVjb2RlVVJJQ29tcG9uZW50O3RyeXt0aGlzLm5vcm1hbGl6ZSgpfWZpbmFsbHl7aS5lbmNvZGU9QSxpLmRlY29kZT1TfXJldHVybiB0aGlzfSxmLnVuaWNvZGU9ZnVuY3Rpb24oKXt2YXIgQT1pLmVuY29kZSxTPWkuZGVjb2RlO2kuZW5jb2RlPVQsaS5kZWNvZGU9dW5lc2NhcGU7dHJ5e3RoaXMubm9ybWFsaXplKCl9ZmluYWxseXtpLmVuY29kZT1BLGkuZGVjb2RlPVN9cmV0dXJuIHRoaXN9LGYucmVhZGFibGU9ZnVuY3Rpb24oKXt2YXIgQT10aGlzLmNsb25lKCk7QS51c2VybmFtZSgiIikucGFzc3dvcmQoIiIpLm5vcm1hbGl6ZSgpO3ZhciBTPSIiO2lmKEEuX3BhcnRzLnByb3RvY29sJiYoUys9QS5fcGFydHMucHJvdG9jb2wrIjovLyIpLEEuX3BhcnRzLmhvc3RuYW1lJiYoQS5pcygicHVueWNvZGUiKSYmdD8oUys9dC50b1VuaWNvZGUoQS5fcGFydHMuaG9zdG5hbWUpLEEuX3BhcnRzLnBvcnQmJihTKz0iOiIrQS5fcGFydHMucG9ydCkpOlMrPUEuaG9zdCgpKSxBLl9wYXJ0cy5ob3N0bmFtZSYmQS5fcGFydHMucGF0aCYmQS5fcGFydHMucGF0aC5jaGFyQXQoMCkhPT0iLyImJihTKz0iLyIpLFMrPUEucGF0aCghMCksQS5fcGFydHMucXVlcnkpe2Zvcih2YXIgeD0iIixMPTAsej1BLl9wYXJ0cy5xdWVyeS5zcGxpdCgiJiIpLGo9ei5sZW5ndGg7TDxqO0wrKyl7dmFyIGs9KHpbTF18fCIiKS5zcGxpdCgiPSIpO3grPSImIitpLmRlY29kZVF1ZXJ5KGtbMF0sdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSkucmVwbGFjZSgvJi9nLCIlMjYiKSxrWzFdIT09dm9pZCAwJiYoeCs9Ij0iK2kuZGVjb2RlUXVlcnkoa1sxXSx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKS5yZXBsYWNlKC8mL2csIiUyNiIpKX1TKz0iPyIreC5zdWJzdHJpbmcoMSl9cmV0dXJuIFMrPWkuZGVjb2RlUXVlcnkoQS5oYXNoKCksITApLFN9LGYuYWJzb2x1dGVUbz1mdW5jdGlvbihBKXt2YXIgUz10aGlzLmNsb25lKCkseD1bInByb3RvY29sIiwidXNlcm5hbWUiLCJwYXNzd29yZCIsImhvc3RuYW1lIiwicG9ydCJdLEwseixqO2lmKHRoaXMuX3BhcnRzLnVybil0aHJvdyBuZXcgRXJyb3IoIlVSTnMgZG8gbm90IGhhdmUgYW55IGdlbmVyYWxseSBkZWZpbmVkIGhpZXJhcmNoaWNhbCBjb21wb25lbnRzIik7aWYoQSBpbnN0YW5jZW9mIGl8fChBPW5ldyBpKEEpKSxTLl9wYXJ0cy5wcm90b2NvbHx8KFMuX3BhcnRzLnByb3RvY29sPUEuX3BhcnRzLnByb3RvY29sLHRoaXMuX3BhcnRzLmhvc3RuYW1lKSlyZXR1cm4gUztmb3Ioej0wO2o9eFt6XTt6KyspUy5fcGFydHNbal09QS5fcGFydHNbal07cmV0dXJuIFMuX3BhcnRzLnBhdGg/KFMuX3BhcnRzLnBhdGguc3Vic3RyaW5nKC0yKT09PSIuLiImJihTLl9wYXJ0cy5wYXRoKz0iLyIpLFMucGF0aCgpLmNoYXJBdCgwKSE9PSIvIiYmKEw9QS5kaXJlY3RvcnkoKSxMPUx8fChBLnBhdGgoKS5pbmRleE9mKCIvIik9PT0wPyIvIjoiIiksUy5fcGFydHMucGF0aD0oTD9MKyIvIjoiIikrUy5fcGFydHMucGF0aCxTLm5vcm1hbGl6ZVBhdGgoKSkpOihTLl9wYXJ0cy5wYXRoPUEuX3BhcnRzLnBhdGgsUy5fcGFydHMucXVlcnl8fChTLl9wYXJ0cy5xdWVyeT1BLl9wYXJ0cy5xdWVyeSkpLFMuYnVpbGQoKSxTfSxmLnJlbGF0aXZlVG89ZnVuY3Rpb24oQSl7dmFyIFM9dGhpcy5jbG9uZSgpLm5vcm1hbGl6ZSgpLHgsTCx6LGosaztpZihTLl9wYXJ0cy51cm4pdGhyb3cgbmV3IEVycm9yKCJVUk5zIGRvIG5vdCBoYXZlIGFueSBnZW5lcmFsbHkgZGVmaW5lZCBoaWVyYXJjaGljYWwgY29tcG9uZW50cyIpO2lmKEE9bmV3IGkoQSkubm9ybWFsaXplKCkseD1TLl9wYXJ0cyxMPUEuX3BhcnRzLGo9Uy5wYXRoKCksaz1BLnBhdGgoKSxqLmNoYXJBdCgwKSE9PSIvIil0aHJvdyBuZXcgRXJyb3IoIlVSSSBpcyBhbHJlYWR5IHJlbGF0aXZlIik7aWYoay5jaGFyQXQoMCkhPT0iLyIpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2FsY3VsYXRlIGEgVVJJIHJlbGF0aXZlIHRvIGFub3RoZXIgcmVsYXRpdmUgVVJJIik7aWYoeC5wcm90b2NvbD09PUwucHJvdG9jb2wmJih4LnByb3RvY29sPW51bGwpLHgudXNlcm5hbWUhPT1MLnVzZXJuYW1lfHx4LnBhc3N3b3JkIT09TC5wYXNzd29yZHx8eC5wcm90b2NvbCE9PW51bGx8fHgudXNlcm5hbWUhPT1udWxsfHx4LnBhc3N3b3JkIT09bnVsbClyZXR1cm4gUy5idWlsZCgpO2lmKHguaG9zdG5hbWU9PT1MLmhvc3RuYW1lJiZ4LnBvcnQ9PT1MLnBvcnQpeC5ob3N0bmFtZT1udWxsLHgucG9ydD1udWxsO2Vsc2UgcmV0dXJuIFMuYnVpbGQoKTtpZihqPT09aylyZXR1cm4geC5wYXRoPSIiLFMuYnVpbGQoKTtpZih6PWkuY29tbW9uUGF0aChqLGspLCF6KXJldHVybiBTLmJ1aWxkKCk7dmFyIHE9TC5wYXRoLnN1YnN0cmluZyh6Lmxlbmd0aCkucmVwbGFjZSgvW15cL10qJC8sIiIpLnJlcGxhY2UoLy4qP1wvL2csIi4uLyIpO3JldHVybiB4LnBhdGg9cSt4LnBhdGguc3Vic3RyaW5nKHoubGVuZ3RoKXx8Ii4vIixTLmJ1aWxkKCl9LGYuZXF1YWxzPWZ1bmN0aW9uKEEpe3ZhciBTPXRoaXMuY2xvbmUoKSx4PW5ldyBpKEEpLEw9e30sej17fSxqPXt9LGsscSxXO2lmKFMubm9ybWFsaXplKCkseC5ub3JtYWxpemUoKSxTLnRvU3RyaW5nKCk9PT14LnRvU3RyaW5nKCkpcmV0dXJuITA7aWYoaz1TLnF1ZXJ5KCkscT14LnF1ZXJ5KCksUy5xdWVyeSgiIikseC5xdWVyeSgiIiksUy50b1N0cmluZygpIT09eC50b1N0cmluZygpfHxrLmxlbmd0aCE9PXEubGVuZ3RoKXJldHVybiExO0w9aS5wYXJzZVF1ZXJ5KGssdGhpcy5fcGFydHMuZXNjYXBlUXVlcnlTcGFjZSksej1pLnBhcnNlUXVlcnkocSx0aGlzLl9wYXJ0cy5lc2NhcGVRdWVyeVNwYWNlKTtmb3IoVyBpbiBMKWlmKHUuY2FsbChMLFcpKXtpZihwKExbV10pKXtpZighXyhMW1ddLHpbV10pKXJldHVybiExfWVsc2UgaWYoTFtXXSE9PXpbV10pcmV0dXJuITE7altXXT0hMH1mb3IoVyBpbiB6KWlmKHUuY2FsbCh6LFcpJiYhaltXXSlyZXR1cm4hMTtyZXR1cm4hMH0sZi5wcmV2ZW50SW52YWxpZEhvc3RuYW1lPWZ1bmN0aW9uKEEpe3JldHVybiB0aGlzLl9wYXJ0cy5wcmV2ZW50SW52YWxpZEhvc3RuYW1lPSEhQSx0aGlzfSxmLmR1cGxpY2F0ZVF1ZXJ5UGFyYW1ldGVycz1mdW5jdGlvbihBKXtyZXR1cm4gdGhpcy5fcGFydHMuZHVwbGljYXRlUXVlcnlQYXJhbWV0ZXJzPSEhQSx0aGlzfSxmLmVzY2FwZVF1ZXJ5U3BhY2U9ZnVuY3Rpb24oQSl7cmV0dXJuIHRoaXMuX3BhcnRzLmVzY2FwZVF1ZXJ5U3BhY2U9ISFBLHRoaXN9LGl9KX0pO2Z1bmN0aW9uIHR4KHQpe3JldHVybih0Lmxlbmd0aD09PTB8fHRbdC5sZW5ndGgtMV0hPT0iLyIpJiYodD1gJHt0fS9gKSx0fXZhciBCMSxVMT0kKCgpPT57QjE9dHh9KTtmdW5jdGlvbiBrMSh0LGUpe2lmKHQ9PT1udWxsfHx0eXBlb2YgdCE9Im9iamVjdCIpcmV0dXJuIHQ7ZT1lPz8hMTtsZXQgbj1uZXcgdC5jb25zdHJ1Y3Rvcjtmb3IobGV0IG8gaW4gdClpZih0Lmhhc093blByb3BlcnR5KG8pKXtsZXQgcj10W29dO2UmJihyPWsxKHIsZSkpLG5bb109cn1yZXR1cm4gbn12YXIgWWMsRzE9JCgoKT0+e1ljPWsxfSk7ZnVuY3Rpb24gVjEodCxlLG4pe249bj8/ITE7bGV0IG89e30scj1oKHQpLGk9aChlKSxzLGYsdTtpZihyKWZvcihzIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShzKSYmKGY9dFtzXSxpJiZuJiZ0eXBlb2YgZj09Im9iamVjdCImJmUuaGFzT3duUHJvcGVydHkocyk/KHU9ZVtzXSx0eXBlb2YgdT09Im9iamVjdCI/b1tzXT1WMShmLHUsbik6b1tzXT1mKTpvW3NdPWYpO2lmKGkpZm9yKHMgaW4gZSllLmhhc093blByb3BlcnR5KHMpJiYhby5oYXNPd25Qcm9wZXJ0eShzKSYmKHU9ZVtzXSxvW3NdPXUpO3JldHVybiBvfXZhciBfcixycD0kKCgpPT57ZnQoKTtfcj1WMX0pO2Z1bmN0aW9uIGV4KCl7bGV0IHQsZSxuPW5ldyBQcm9taXNlKGZ1bmN0aW9uKG8scil7dD1vLGU9cn0pO3JldHVybntyZXNvbHZlOnQscmVqZWN0OmUscHJvbWlzZTpufX12YXIganMsVW09JCgoKT0+e2pzPWV4fSk7ZnVuY3Rpb24ga20odCxlKXtsZXQgbjtyZXR1cm4gdHlwZW9mIGRvY3VtZW50PCJ1IiYmKG49ZG9jdW1lbnQpLGttLl9pbXBsZW1lbnRhdGlvbih0LGUsbil9dmFyIHoxLGZmLEdtPSQoKCk9Pnt6MT1kcih6cygpLDEpO2Z0KCk7anQoKTtrbS5faW1wbGVtZW50YXRpb249ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBEKCJyZWxhdGl2ZSB1cmkgaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpe2lmKHR5cGVvZiBuPiJ1IilyZXR1cm4gdDtlPW4uYmFzZVVSST8/bi5sb2NhdGlvbi5ocmVmfWxldCBvPW5ldyB6MS5kZWZhdWx0KHQpO3JldHVybiBvLnNjaGVtZSgpIT09IiI/by50b1N0cmluZygpOm8uYWJzb2x1dGVUbyhlKS50b1N0cmluZygpfTtmZj1rbX0pO2Z1bmN0aW9uIG54KHQsZSl7aWYoIWgodCkpdGhyb3cgbmV3IEQoInVyaSBpcyByZXF1aXJlZC4iKTtsZXQgbj0iIixvPXQubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4gbyE9PS0xJiYobj10LnN1YnN0cmluZygwLG8rMSkpLGUmJih0PW5ldyBqMS5kZWZhdWx0KHQpLHQucXVlcnkoKS5sZW5ndGghPT0wJiYobis9YD8ke3QucXVlcnkoKX1gKSx0LmZyYWdtZW50KCkubGVuZ3RoIT09MCYmKG4rPWAjJHt0LmZyYWdtZW50KCl9YCkpLG59dmFyIGoxLEgxLHExPSQoKCk9PntqMT1kcih6cygpLDEpO2Z0KCk7anQoKTtIMT1ueH0pO2Z1bmN0aW9uIG94KHQpe2lmKCFoKHQpKXRocm93IG5ldyBEKCJ1cmkgaXMgcmVxdWlyZWQuIik7bGV0IGU9bmV3IEsxLmRlZmF1bHQodCk7ZS5ub3JtYWxpemUoKTtsZXQgbj1lLnBhdGgoKSxvPW4ubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4gbyE9PS0xJiYobj1uLnN1YnN0cihvKzEpKSxvPW4ubGFzdEluZGV4T2YoIi4iKSxvPT09LTE/bj0iIjpuPW4uc3Vic3RyKG8rMSksbn12YXIgSzEsVzEsWDE9JCgoKT0+e0sxPWRyKHpzKCksMSk7ZnQoKTtqdCgpO1cxPW94fSk7ZnVuY3Rpb24gcngodCxlLG4pe2goZSl8fChlPXQud2lkdGgpLGgobil8fChuPXQuaGVpZ2h0KTtsZXQgbz1ZMVtlXTtoKG8pfHwobz17fSxZMVtlXT1vKTtsZXQgcj1vW25dO2lmKCFoKHIpKXtsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtpLndpZHRoPWUsaS5oZWlnaHQ9bixyPWkuZ2V0Q29udGV4dCgiMmQiLHt3aWxsUmVhZEZyZXF1ZW50bHk6ITB9KSxyLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0iY29weSIsb1tuXT1yfXJldHVybiByLmRyYXdJbWFnZSh0LDAsMCxlLG4pLHIuZ2V0SW1hZ2VEYXRhKDAsMCxlLG4pLmRhdGF9dmFyIFkxLFZtLCQxPSQoKCk9PntmdCgpO1kxPXt9O1ZtPXJ4fSk7ZnVuY3Rpb24gc3godCl7cmV0dXJuIHkudHlwZU9mLnN0cmluZygidXJpIix0KSxpeC50ZXN0KHQpfXZhciBpeCxpcCx6bT0kKCgpPT57V3QoKTtpeD0vXmJsb2I6L2k7aXA9c3h9KTtmdW5jdGlvbiBjeCh0KXtoKHRpKXx8KHRpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSksdGkuaHJlZj13aW5kb3cubG9jYXRpb24uaHJlZjtsZXQgZT10aS5ob3N0LG49dGkucHJvdG9jb2w7cmV0dXJuIHRpLmhyZWY9dCx0aS5ocmVmPXRpLmhyZWYsbiE9PXRpLnByb3RvY29sfHxlIT09dGkuaG9zdH12YXIgdGksWjEsUTE9JCgoKT0+e2Z0KCk7WjE9Y3h9KTtmdW5jdGlvbiBmeCh0KXtyZXR1cm4geS50eXBlT2Yuc3RyaW5nKCJ1cmkiLHQpLGF4LnRlc3QodCl9dmFyIGF4LHNwLGptPSQoKCk9PntXdCgpO2F4PS9eZGF0YTovaTtzcD1meH0pO2Z1bmN0aW9uIHV4KHQpe2xldCBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO3JldHVybiBlLmFzeW5jPSEwLGUuc3JjPXQsbmV3IFByb21pc2UoKG4sbyk9Pnt3aW5kb3cuY3Jvc3NPcmlnaW5Jc29sYXRlZCYmZS5zZXRBdHRyaWJ1dGUoImNyb3Nzb3JpZ2luIiwiYW5vbnltb3VzIik7bGV0IHI9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXTtlLm9ubG9hZD1mdW5jdGlvbigpe2Uub25sb2FkPXZvaWQgMCxyLnJlbW92ZUNoaWxkKGUpLG4oKX0sZS5vbmVycm9yPWZ1bmN0aW9uKGkpe28oaSl9LHIuYXBwZW5kQ2hpbGQoZSl9KX12YXIgSjEsdEE9JCgoKT0+e0oxPXV4fSk7ZnVuY3Rpb24gbHgodCl7aWYoIWgodCkpdGhyb3cgbmV3IEQoIm9iaiBpcyByZXF1aXJlZC4iKTtsZXQgZT0iIjtmb3IobGV0IG4gaW4gdClpZih0Lmhhc093blByb3BlcnR5KG4pKXtsZXQgbz10W25dLHI9YCR7ZW5jb2RlVVJJQ29tcG9uZW50KG4pfT1gO2lmKEFycmF5LmlzQXJyYXkobykpZm9yKGxldCBpPTAscz1vLmxlbmd0aDtpPHM7KytpKWUrPWAke3IrZW5jb2RlVVJJQ29tcG9uZW50KG9baV0pfSZgO2Vsc2UgZSs9YCR7citlbmNvZGVVUklDb21wb25lbnQobyl9JmB9cmV0dXJuIGU9ZS5zbGljZSgwLC0xKSxlfXZhciBlQSxuQT0kKCgpPT57ZnQoKTtqdCgpO2VBPWx4fSk7ZnVuY3Rpb24gcHgodCl7aWYoIWgodCkpdGhyb3cgbmV3IEQoInF1ZXJ5U3RyaW5nIGlzIHJlcXVpcmVkLiIpO2xldCBlPXt9O2lmKHQ9PT0iIilyZXR1cm4gZTtsZXQgbj10LnJlcGxhY2UoL1wrL2csIiUyMCIpLnNwbGl0KC9bJjtdLyk7Zm9yKGxldCBvPTAscj1uLmxlbmd0aDtvPHI7KytvKXtsZXQgaT1uW29dLnNwbGl0KCI9Iikscz1kZWNvZGVVUklDb21wb25lbnQoaVswXSksZj1pWzFdO2goZik/Zj1kZWNvZGVVUklDb21wb25lbnQoZik6Zj0iIjtsZXQgdT1lW3NdO3R5cGVvZiB1PT0ic3RyaW5nIj9lW3NdPVt1LGZdOkFycmF5LmlzQXJyYXkodSk/dS5wdXNoKGYpOmVbc109Zn1yZXR1cm4gZX12YXIgb0EsckE9JCgoKT0+e2Z0KCk7anQoKTtvQT1weH0pO3ZhciBkeCxDbixjcD0kKCgpPT57ZHg9e1VOSVNTVUVEOjAsSVNTVUVEOjEsQUNUSVZFOjIsUkVDRUlWRUQ6MyxDQU5DRUxMRUQ6NCxGQUlMRUQ6NX0sQ249T2JqZWN0LmZyZWV6ZShkeCl9KTt2YXIgbXgsaUEsc0E9JCgoKT0+e214PXtURVJSQUlOOjAsSU1BR0VSWToxLFRJTEVTM0Q6MixPVEhFUjozfSxpQT1PYmplY3QuZnJlZXplKG14KX0pO2Z1bmN0aW9uIGFwKHQpe3Q9dD8/SXQuRU1QVFlfT0JKRUNUO2xldCBlPXQudGhyb3R0bGVCeVNlcnZlcj8/ITEsbj10LnRocm90dGxlPz8hMTt0aGlzLnVybD10LnVybCx0aGlzLnJlcXVlc3RGdW5jdGlvbj10LnJlcXVlc3RGdW5jdGlvbix0aGlzLmNhbmNlbEZ1bmN0aW9uPXQuY2FuY2VsRnVuY3Rpb24sdGhpcy5wcmlvcml0eUZ1bmN0aW9uPXQucHJpb3JpdHlGdW5jdGlvbix0aGlzLnByaW9yaXR5PXQucHJpb3JpdHk/PzAsdGhpcy50aHJvdHRsZT1uLHRoaXMudGhyb3R0bGVCeVNlcnZlcj1lLHRoaXMudHlwZT10LnR5cGU/P2lBLk9USEVSLHRoaXMuc2VydmVyS2V5PXQuc2VydmVyS2V5LHRoaXMuc3RhdGU9Q24uVU5JU1NVRUQsdGhpcy5kZWZlcnJlZD12b2lkIDAsdGhpcy5jYW5jZWxsZWQ9ITF9dmFyIGNBLGFBPSQoKCk9Pnt5ZSgpO2Z0KCk7Y3AoKTtzQSgpO2FwLnByb3RvdHlwZS5jYW5jZWw9ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbGxlZD0hMH07YXAucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiBoKHQpPyh0LnVybD10aGlzLnVybCx0LnJlcXVlc3RGdW5jdGlvbj10aGlzLnJlcXVlc3RGdW5jdGlvbix0LmNhbmNlbEZ1bmN0aW9uPXRoaXMuY2FuY2VsRnVuY3Rpb24sdC5wcmlvcml0eUZ1bmN0aW9uPXRoaXMucHJpb3JpdHlGdW5jdGlvbix0LnByaW9yaXR5PXRoaXMucHJpb3JpdHksdC50aHJvdHRsZT10aGlzLnRocm90dGxlLHQudGhyb3R0bGVCeVNlcnZlcj10aGlzLnRocm90dGxlQnlTZXJ2ZXIsdC50eXBlPXRoaXMudHlwZSx0LnNlcnZlcktleT10aGlzLnNlcnZlcktleSx0LnN0YXRlPUNuLlVOSVNTVUVELHQuZGVmZXJyZWQ9dm9pZCAwLHQuY2FuY2VsbGVkPSExLHQpOm5ldyBhcCh0aGlzKX07Y0E9YXB9KTtmdW5jdGlvbiBoeCh0KXtsZXQgZT17fTtpZighdClyZXR1cm4gZTtsZXQgbj10LnNwbGl0KGBccgpgKTtmb3IobGV0IG89MDtvPG4ubGVuZ3RoOysrbyl7bGV0IHI9bltvXSxpPXIuaW5kZXhPZigiOiAiKTtpZihpPjApe2xldCBzPXIuc3Vic3RyaW5nKDAsaSksZj1yLnN1YnN0cmluZyhpKzIpO2Vbc109Zn19cmV0dXJuIGV9dmFyIGZBLHVBPSQoKCk9PntmQT1oeH0pO2Z1bmN0aW9uIGxBKHQsZSxuKXt0aGlzLnN0YXR1c0NvZGU9dCx0aGlzLnJlc3BvbnNlPWUsdGhpcy5yZXNwb25zZUhlYWRlcnM9bix0eXBlb2YgdGhpcy5yZXNwb25zZUhlYWRlcnM9PSJzdHJpbmciJiYodGhpcy5yZXNwb25zZUhlYWRlcnM9ZkEodGhpcy5yZXNwb25zZUhlYWRlcnMpKX12YXIgdWYscEE9JCgoKT0+e2Z0KCk7dUEoKTtsQS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtsZXQgdD0iUmVxdWVzdCBoYXMgZmFpbGVkLiI7cmV0dXJuIGgodGhpcy5zdGF0dXNDb2RlKSYmKHQrPWAgU3RhdHVzIENvZGU6ICR7dGhpcy5zdGF0dXNDb2RlfWApLHR9O3VmPWxBfSk7ZnVuY3Rpb24gbGYoKXt0aGlzLl9saXN0ZW5lcnM9W10sdGhpcy5fc2NvcGVzPVtdLHRoaXMuX3RvUmVtb3ZlPVtdLHRoaXMuX2luc2lkZVJhaXNlRXZlbnQ9ITF9ZnVuY3Rpb24gX3godCxlKXtyZXR1cm4gZS10fXZhciBkQSxtQT0kKCgpPT57V3QoKTtmdCgpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGxmLnByb3RvdHlwZSx7bnVtYmVyT2ZMaXN0ZW5lcnM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9saXN0ZW5lcnMubGVuZ3RoLXRoaXMuX3RvUmVtb3ZlLmxlbmd0aH19fSk7bGYucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5mdW5jKCJsaXN0ZW5lciIsdCksdGhpcy5fbGlzdGVuZXJzLnB1c2godCksdGhpcy5fc2NvcGVzLnB1c2goZSk7bGV0IG49dGhpcztyZXR1cm4gZnVuY3Rpb24oKXtuLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxlKX19O2xmLnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2YuZnVuYygibGlzdGVuZXIiLHQpO2xldCBuPXRoaXMuX2xpc3RlbmVycyxvPXRoaXMuX3Njb3BlcyxyPS0xO2ZvcihsZXQgaT0wO2k8bi5sZW5ndGg7aSsrKWlmKG5baV09PT10JiZvW2ldPT09ZSl7cj1pO2JyZWFrfXJldHVybiByIT09LTE/KHRoaXMuX2luc2lkZVJhaXNlRXZlbnQ/KHRoaXMuX3RvUmVtb3ZlLnB1c2gociksbltyXT12b2lkIDAsb1tyXT12b2lkIDApOihuLnNwbGljZShyLDEpLG8uc3BsaWNlKHIsMSkpLCEwKTohMX07bGYucHJvdG90eXBlLnJhaXNlRXZlbnQ9ZnVuY3Rpb24oKXt0aGlzLl9pbnNpZGVSYWlzZUV2ZW50PSEwO2xldCB0LGU9dGhpcy5fbGlzdGVuZXJzLG49dGhpcy5fc2NvcGVzLG89ZS5sZW5ndGg7Zm9yKHQ9MDt0PG87dCsrKXtsZXQgaT1lW3RdO2goaSkmJmVbdF0uYXBwbHkoblt0XSxhcmd1bWVudHMpfWxldCByPXRoaXMuX3RvUmVtb3ZlO2lmKG89ci5sZW5ndGgsbz4wKXtmb3Ioci5zb3J0KF94KSx0PTA7dDxvO3QrKyl7bGV0IGk9clt0XTtlLnNwbGljZShpLDEpLG4uc3BsaWNlKGksMSl9ci5sZW5ndGg9MH10aGlzLl9pbnNpZGVSYWlzZUV2ZW50PSExfTtkQT1sZn0pO2Z1bmN0aW9uIEhzKHQpe3kudHlwZU9mLm9iamVjdCgib3B0aW9ucyIsdCkseS5kZWZpbmVkKCJvcHRpb25zLmNvbXBhcmF0b3IiLHQuY29tcGFyYXRvciksdGhpcy5fY29tcGFyYXRvcj10LmNvbXBhcmF0b3IsdGhpcy5fYXJyYXk9W10sdGhpcy5fbGVuZ3RoPTAsdGhpcy5fbWF4aW11bUxlbmd0aD12b2lkIDB9ZnVuY3Rpb24gSG0odCxlLG4pe2xldCBvPXRbZV07dFtlXT10W25dLHRbbl09b312YXIgaEEsX0E9JCgoKT0+e1d0KCk7ZnQoKTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhIcy5wcm90b3R5cGUse2xlbmd0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xlbmd0aH19LGludGVybmFsQXJyYXk6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hcnJheX19LG1heGltdW1MZW5ndGg6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXhpbXVtTGVuZ3RofSxzZXQ6ZnVuY3Rpb24odCl7eS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoIm1heGltdW1MZW5ndGgiLHQsMCk7bGV0IGU9dGhpcy5fbGVuZ3RoO2lmKHQ8ZSl7bGV0IG49dGhpcy5fYXJyYXk7Zm9yKGxldCBvPXQ7bzxlOysrbyluW29dPXZvaWQgMDt0aGlzLl9sZW5ndGg9dCxuLmxlbmd0aD10fXRoaXMuX21heGltdW1MZW5ndGg9dH19LGNvbXBhcmF0b3I6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jb21wYXJhdG9yfX19KTtIcy5wcm90b3R5cGUucmVzZXJ2ZT1mdW5jdGlvbih0KXt0PXQ/P3RoaXMuX2xlbmd0aCx0aGlzLl9hcnJheS5sZW5ndGg9dH07SHMucHJvdG90eXBlLmhlYXBpZnk9ZnVuY3Rpb24odCl7dD10Pz8wO2xldCBlPXRoaXMuX2xlbmd0aCxuPXRoaXMuX2NvbXBhcmF0b3Isbz10aGlzLl9hcnJheSxyPS0xLGk9ITA7Zm9yKDtpOyl7bGV0IHM9MioodCsxKSxmPXMtMTtmPGUmJm4ob1tmXSxvW3RdKTwwP3I9ZjpyPXQsczxlJiZuKG9bc10sb1tyXSk8MCYmKHI9cyksciE9PXQ/KEhtKG8scix0KSx0PXIpOmk9ITF9fTtIcy5wcm90b3R5cGUucmVzb3J0PWZ1bmN0aW9uKCl7bGV0IHQ9dGhpcy5fbGVuZ3RoO2ZvcihsZXQgZT1NYXRoLmNlaWwodC8yKTtlPj0wOy0tZSl0aGlzLmhlYXBpZnkoZSl9O0hzLnByb3RvdHlwZS5pbnNlcnQ9ZnVuY3Rpb24odCl7eS5kZWZpbmVkKCJlbGVtZW50Iix0KTtsZXQgZT10aGlzLl9hcnJheSxuPXRoaXMuX2NvbXBhcmF0b3Isbz10aGlzLl9tYXhpbXVtTGVuZ3RoLHI9dGhpcy5fbGVuZ3RoKys7Zm9yKHI8ZS5sZW5ndGg/ZVtyXT10OmUucHVzaCh0KTtyIT09MDspe2xldCBzPU1hdGguZmxvb3IoKHItMSkvMik7aWYobihlW3JdLGVbc10pPDApSG0oZSxyLHMpLHI9cztlbHNlIGJyZWFrfWxldCBpO3JldHVybiBoKG8pJiZ0aGlzLl9sZW5ndGg+byYmKGk9ZVtvXSx0aGlzLl9sZW5ndGg9byksaX07SHMucHJvdG90eXBlLnBvcD1mdW5jdGlvbih0KXtpZih0PXQ/PzAsdGhpcy5fbGVuZ3RoPT09MClyZXR1cm47eS50eXBlT2YubnVtYmVyLmxlc3NUaGFuKCJpbmRleCIsdCx0aGlzLl9sZW5ndGgpO2xldCBlPXRoaXMuX2FycmF5LG49ZVt0XTtyZXR1cm4gSG0oZSx0LC0tdGhpcy5fbGVuZ3RoKSx0aGlzLmhlYXBpZnkodCksZVt0aGlzLl9sZW5ndGhdPXZvaWQgMCxufTtoQT1Ic30pO2Z1bmN0aW9uIHl4KHQsZSl7cmV0dXJuIHQucHJpb3JpdHktZS5wcmlvcml0eX1mdW5jdGlvbiBUbigpe31mdW5jdGlvbiB5QSh0KXtoKHQucHJpb3JpdHlGdW5jdGlvbikmJih0LnByaW9yaXR5PXQucHJpb3JpdHlGdW5jdGlvbigpKX1mdW5jdGlvbiBnQSh0KXtyZXR1cm4gdC5zdGF0ZT09PUNuLlVOSVNTVUVEJiYodC5zdGF0ZT1Dbi5JU1NVRUQsdC5kZWZlcnJlZD1qcygpKSx0LmRlZmVycmVkLnByb21pc2V9ZnVuY3Rpb24gQXgodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKHQuc3RhdGU9PT1Dbi5DQU5DRUxMRUQpcmV0dXJuO2xldCBuPXQuZGVmZXJyZWQ7LS1qZS5udW1iZXJPZkFjdGl2ZVJlcXVlc3RzLC0tQ2lbdC5zZXJ2ZXJLZXldLHVwLnJhaXNlRXZlbnQoKSx0LnN0YXRlPUNuLlJFQ0VJVkVELHQuZGVmZXJyZWQ9dm9pZCAwLG4ucmVzb2x2ZShlKX19ZnVuY3Rpb24gYngodCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3Quc3RhdGUhPT1Dbi5DQU5DRUxMRUQmJigrK2plLm51bWJlck9mRmFpbGVkUmVxdWVzdHMsLS1qZS5udW1iZXJPZkFjdGl2ZVJlcXVlc3RzLC0tQ2lbdC5zZXJ2ZXJLZXldLHVwLnJhaXNlRXZlbnQoZSksdC5zdGF0ZT1Dbi5GQUlMRUQsdC5kZWZlcnJlZC5yZWplY3QoZSkpfX1mdW5jdGlvbiBBQSh0KXtsZXQgZT1nQSh0KTtyZXR1cm4gdC5zdGF0ZT1Dbi5BQ1RJVkUsZWkucHVzaCh0KSwrK2plLm51bWJlck9mQWN0aXZlUmVxdWVzdHMsKytqZS5udW1iZXJPZkFjdGl2ZVJlcXVlc3RzRXZlciwrK0NpW3Quc2VydmVyS2V5XSx0LnJlcXVlc3RGdW5jdGlvbigpLnRoZW4oQXgodCkpLmNhdGNoKGJ4KHQpKSxlfWZ1bmN0aW9uIHFzKHQpe2xldCBlPXQuc3RhdGU9PT1Dbi5BQ1RJVkU7aWYodC5zdGF0ZT1Dbi5DQU5DRUxMRUQsKytqZS5udW1iZXJPZkNhbmNlbGxlZFJlcXVlc3RzLGgodC5kZWZlcnJlZCkpe2xldCBuPXQuZGVmZXJyZWQ7dC5kZWZlcnJlZD12b2lkIDAsbi5yZWplY3QoKX1lJiYoLS1qZS5udW1iZXJPZkFjdGl2ZVJlcXVlc3RzLC0tQ2lbdC5zZXJ2ZXJLZXldLCsramUubnVtYmVyT2ZDYW5jZWxsZWRBY3RpdmVSZXF1ZXN0cyksaCh0LmNhbmNlbEZ1bmN0aW9uKSYmdC5jYW5jZWxGdW5jdGlvbigpfWZ1bmN0aW9uIFR4KCl7VG4uZGVidWdTaG93U3RhdGlzdGljcyYmKGplLm51bWJlck9mQWN0aXZlUmVxdWVzdHM9PT0wJiZqZS5sYXN0TnVtYmVyT2ZBY3RpdmVSZXF1ZXN0cz4wJiYoamUubnVtYmVyT2ZBdHRlbXB0ZWRSZXF1ZXN0cz4wJiYoY29uc29sZS5sb2coYE51bWJlciBvZiBhdHRlbXB0ZWQgcmVxdWVzdHM6ICR7amUubnVtYmVyT2ZBdHRlbXB0ZWRSZXF1ZXN0c31gKSxqZS5udW1iZXJPZkF0dGVtcHRlZFJlcXVlc3RzPTApLGplLm51bWJlck9mQ2FuY2VsbGVkUmVxdWVzdHM+MCYmKGNvbnNvbGUubG9nKGBOdW1iZXIgb2YgY2FuY2VsbGVkIHJlcXVlc3RzOiAke2plLm51bWJlck9mQ2FuY2VsbGVkUmVxdWVzdHN9YCksamUubnVtYmVyT2ZDYW5jZWxsZWRSZXF1ZXN0cz0wKSxqZS5udW1iZXJPZkNhbmNlbGxlZEFjdGl2ZVJlcXVlc3RzPjAmJihjb25zb2xlLmxvZyhgTnVtYmVyIG9mIGNhbmNlbGxlZCBhY3RpdmUgcmVxdWVzdHM6ICR7amUubnVtYmVyT2ZDYW5jZWxsZWRBY3RpdmVSZXF1ZXN0c31gKSxqZS5udW1iZXJPZkNhbmNlbGxlZEFjdGl2ZVJlcXVlc3RzPTApLGplLm51bWJlck9mRmFpbGVkUmVxdWVzdHM+MCYmKGNvbnNvbGUubG9nKGBOdW1iZXIgb2YgZmFpbGVkIHJlcXVlc3RzOiAke2plLm51bWJlck9mRmFpbGVkUmVxdWVzdHN9YCksamUubnVtYmVyT2ZGYWlsZWRSZXF1ZXN0cz0wKSksamUubGFzdE51bWJlck9mQWN0aXZlUmVxdWVzdHM9amUubnVtYmVyT2ZBY3RpdmVSZXF1ZXN0cyl9dmFyIGZwLGplLCRjLFRvLGVpLENpLGd4LHVwLGxwLGJBPSQoKCk9PntmcD1kcih6cygpLDEpO1d0KCk7VW0oKTtmdCgpO21BKCk7X0EoKTt6bSgpO2ptKCk7Y3AoKTtqZT17bnVtYmVyT2ZBdHRlbXB0ZWRSZXF1ZXN0czowLG51bWJlck9mQWN0aXZlUmVxdWVzdHM6MCxudW1iZXJPZkNhbmNlbGxlZFJlcXVlc3RzOjAsbnVtYmVyT2ZDYW5jZWxsZWRBY3RpdmVSZXF1ZXN0czowLG51bWJlck9mRmFpbGVkUmVxdWVzdHM6MCxudW1iZXJPZkFjdGl2ZVJlcXVlc3RzRXZlcjowLGxhc3ROdW1iZXJPZkFjdGl2ZVJlcXVlc3RzOjB9LCRjPTIwLFRvPW5ldyBoQSh7Y29tcGFyYXRvcjp5eH0pO1RvLm1heGltdW1MZW5ndGg9JGM7VG8ucmVzZXJ2ZSgkYyk7ZWk9W10sQ2k9e30sZ3g9dHlwZW9mIGRvY3VtZW50PCJ1Ij9uZXcgZnAuZGVmYXVsdChkb2N1bWVudC5sb2NhdGlvbi5ocmVmKTpuZXcgZnAuZGVmYXVsdCx1cD1uZXcgZEE7VG4ubWF4aW11bVJlcXVlc3RzPTUwO1RuLm1heGltdW1SZXF1ZXN0c1BlclNlcnZlcj0xODtUbi5yZXF1ZXN0c0J5U2VydmVyPXt9O1RuLnRocm90dGxlUmVxdWVzdHM9ITA7VG4uZGVidWdTaG93U3RhdGlzdGljcz0hMTtUbi5yZXF1ZXN0Q29tcGxldGVkRXZlbnQ9dXA7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVG4se3N0YXRpc3RpY3M6e2dldDpmdW5jdGlvbigpe3JldHVybiBqZX19LHByaW9yaXR5SGVhcExlbmd0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuICRjfSxzZXQ6ZnVuY3Rpb24odCl7aWYodDwkYylmb3IoO1RvLmxlbmd0aD50Oyl7bGV0IGU9VG8ucG9wKCk7cXMoZSl9JGM9dCxUby5tYXhpbXVtTGVuZ3RoPXQsVG8ucmVzZXJ2ZSh0KX19fSk7VG4uc2VydmVySGFzT3BlblNsb3RzPWZ1bmN0aW9uKHQsZSl7ZT1lPz8xO2xldCBuPVRuLnJlcXVlc3RzQnlTZXJ2ZXJbdF0/P1RuLm1heGltdW1SZXF1ZXN0c1BlclNlcnZlcjtyZXR1cm4gQ2lbdF0rZTw9bn07VG4uaGVhcEhhc09wZW5TbG90cz1mdW5jdGlvbih0KXtyZXR1cm4gVG8ubGVuZ3RoK3Q8PSRjfTtUbi51cGRhdGU9ZnVuY3Rpb24oKXtsZXQgdCxlLG49MCxvPWVpLmxlbmd0aDtmb3IodD0wO3Q8bzsrK3Qpe2lmKGU9ZWlbdF0sZS5jYW5jZWxsZWQmJnFzKGUpLGUuc3RhdGUhPT1Dbi5BQ1RJVkUpeysrbjtjb250aW51ZX1uPjAmJihlaVt0LW5dPWUpfWVpLmxlbmd0aC09bjtsZXQgcj1Uby5pbnRlcm5hbEFycmF5LGk9VG8ubGVuZ3RoO2Zvcih0PTA7dDxpOysrdCl5QShyW3RdKTtUby5yZXNvcnQoKTtsZXQgcz1NYXRoLm1heChUbi5tYXhpbXVtUmVxdWVzdHMtZWkubGVuZ3RoLDApLGY9MDtmb3IoO2Y8cyYmVG8ubGVuZ3RoPjA7KXtpZihlPVRvLnBvcCgpLGUuY2FuY2VsbGVkKXtxcyhlKTtjb250aW51ZX1pZihlLnRocm90dGxlQnlTZXJ2ZXImJiFUbi5zZXJ2ZXJIYXNPcGVuU2xvdHMoZS5zZXJ2ZXJLZXkpKXtxcyhlKTtjb250aW51ZX1BQShlKSwrK2Z9VHgoKX07VG4uZ2V0U2VydmVyS2V5PWZ1bmN0aW9uKHQpe3kudHlwZU9mLnN0cmluZygidXJsIix0KTtsZXQgZT1uZXcgZnAuZGVmYXVsdCh0KTtlLnNjaGVtZSgpPT09IiImJihlPWUuYWJzb2x1dGVUbyhneCksZS5ub3JtYWxpemUoKSk7bGV0IG49ZS5hdXRob3JpdHkoKTsvOi8udGVzdChuKXx8KG49YCR7bn06JHtlLnNjaGVtZSgpPT09Imh0dHBzIj8iNDQzIjoiODAifWApO2xldCBvPUNpW25dO3JldHVybiBoKG8pfHwoQ2lbbl09MCksbn07VG4ucmVxdWVzdD1mdW5jdGlvbih0KXtpZih5LnR5cGVPZi5vYmplY3QoInJlcXVlc3QiLHQpLHkudHlwZU9mLnN0cmluZygicmVxdWVzdC51cmwiLHQudXJsKSx5LnR5cGVPZi5mdW5jKCJyZXF1ZXN0LnJlcXVlc3RGdW5jdGlvbiIsdC5yZXF1ZXN0RnVuY3Rpb24pLHNwKHQudXJsKXx8aXAodC51cmwpKXJldHVybiB1cC5yYWlzZUV2ZW50KCksdC5zdGF0ZT1Dbi5SRUNFSVZFRCx0LnJlcXVlc3RGdW5jdGlvbigpO2lmKCsramUubnVtYmVyT2ZBdHRlbXB0ZWRSZXF1ZXN0cyxoKHQuc2VydmVyS2V5KXx8KHQuc2VydmVyS2V5PVRuLmdldFNlcnZlcktleSh0LnVybCkpLFRuLnRocm90dGxlUmVxdWVzdHMmJnQudGhyb3R0bGVCeVNlcnZlciYmIVRuLnNlcnZlckhhc09wZW5TbG90cyh0LnNlcnZlcktleSkpcmV0dXJuO2lmKCFUbi50aHJvdHRsZVJlcXVlc3RzfHwhdC50aHJvdHRsZSlyZXR1cm4gQUEodCk7aWYoZWkubGVuZ3RoPj1Ubi5tYXhpbXVtUmVxdWVzdHMpcmV0dXJuO3lBKHQpO2xldCBlPVRvLmluc2VydCh0KTtpZihoKGUpKXtpZihlPT09dClyZXR1cm47cXMoZSl9cmV0dXJuIGdBKHQpfTtUbi5jbGVhckZvclNwZWNzPWZ1bmN0aW9uKCl7Zm9yKDtUby5sZW5ndGg+MDspe2xldCBlPVRvLnBvcCgpO3FzKGUpfWxldCB0PWVpLmxlbmd0aDtmb3IobGV0IGU9MDtlPHQ7KytlKXFzKGVpW2VdKTtlaS5sZW5ndGg9MCxDaT17fSxqZS5udW1iZXJPZkF0dGVtcHRlZFJlcXVlc3RzPTAsamUubnVtYmVyT2ZBY3RpdmVSZXF1ZXN0cz0wLGplLm51bWJlck9mQ2FuY2VsbGVkUmVxdWVzdHM9MCxqZS5udW1iZXJPZkNhbmNlbGxlZEFjdGl2ZVJlcXVlc3RzPTAsamUubnVtYmVyT2ZGYWlsZWRSZXF1ZXN0cz0wLGplLm51bWJlck9mQWN0aXZlUmVxdWVzdHNFdmVyPTAsamUubGFzdE51bWJlck9mQWN0aXZlUmVxdWVzdHM9MH07VG4ubnVtYmVyT2ZBY3RpdmVSZXF1ZXN0c0J5U2VydmVyPWZ1bmN0aW9uKHQpe3JldHVybiBDaVt0XX07VG4ucmVxdWVzdEhlYXA9VG87bHA9VG59KTtmdW5jdGlvbiB3eCh0KXtsZXQgZT1uZXcgVEEuZGVmYXVsdCh0KTtlLm5vcm1hbGl6ZSgpO2xldCBuPWUuYXV0aG9yaXR5KCk7aWYobi5sZW5ndGghPT0wKXtpZihlLmF1dGhvcml0eShuKSxuLmluZGV4T2YoIkAiKSE9PS0xJiYobj1uLnNwbGl0KCJAIilbMV0pLG4uaW5kZXhPZigiOiIpPT09LTEpe2xldCBvPWUuc2NoZW1lKCk7aWYoby5sZW5ndGg9PT0wJiYobz13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wsbz1vLnN1YnN0cmluZygwLG8ubGVuZ3RoLTEpKSxvPT09Imh0dHAiKW4rPSI6ODAiO2Vsc2UgaWYobz09PSJodHRwcyIpbis9Ijo0NDMiO2Vsc2UgcmV0dXJufXJldHVybiBufX12YXIgVEEscGYsWmMscW0sd0E9JCgoKT0+e1RBPWRyKHpzKCksMSk7ZnQoKTtqdCgpO3BmPXt9LFpjPXt9O3BmLmFkZD1mdW5jdGlvbih0LGUpe2lmKCFoKHQpKXRocm93IG5ldyBEKCJob3N0IGlzIHJlcXVpcmVkLiIpO2lmKCFoKGUpfHxlPD0wKXRocm93IG5ldyBEKCJwb3J0IGlzIHJlcXVpcmVkIHRvIGJlIGdyZWF0ZXIgdGhhbiAwLiIpO2xldCBuPWAke3QudG9Mb3dlckNhc2UoKX06JHtlfWA7aChaY1tuXSl8fChaY1tuXT0hMCl9O3BmLnJlbW92ZT1mdW5jdGlvbih0LGUpe2lmKCFoKHQpKXRocm93IG5ldyBEKCJob3N0IGlzIHJlcXVpcmVkLiIpO2lmKCFoKGUpfHxlPD0wKXRocm93IG5ldyBEKCJwb3J0IGlzIHJlcXVpcmVkIHRvIGJlIGdyZWF0ZXIgdGhhbiAwLiIpO2xldCBuPWAke3QudG9Mb3dlckNhc2UoKX06JHtlfWA7aChaY1tuXSkmJmRlbGV0ZSBaY1tuXX07cGYuY29udGFpbnM9ZnVuY3Rpb24odCl7aWYoIWgodCkpdGhyb3cgbmV3IEQoInVybCBpcyByZXF1aXJlZC4iKTtsZXQgZT13eCh0KTtyZXR1cm4hIShoKGUpJiZoKFpjW2VdKSl9O3BmLmNsZWFyPWZ1bmN0aW9uKCl7WmM9e319O3FtPXBmfSk7ZnVuY3Rpb24gR3QodCl7dD10Pz9JdC5FTVBUWV9PQkpFQ1QsdHlwZW9mIHQ9PSJzdHJpbmciJiYodD17dXJsOnR9KSx5LnR5cGVPZi5zdHJpbmcoIm9wdGlvbnMudXJsIix0LnVybCksdGhpcy5fdXJsPXZvaWQgMCx0aGlzLl90ZW1wbGF0ZVZhbHVlcz1uaSh0LnRlbXBsYXRlVmFsdWVzLHt9KSx0aGlzLl9xdWVyeVBhcmFtZXRlcnM9bmkodC5xdWVyeVBhcmFtZXRlcnMse30pLHRoaXMuaGVhZGVycz1uaSh0LmhlYWRlcnMse30pLHRoaXMucmVxdWVzdD10LnJlcXVlc3Q/P25ldyBjQSx0aGlzLnByb3h5PXQucHJveHksdGhpcy5yZXRyeUNhbGxiYWNrPXQucmV0cnlDYWxsYmFjayx0aGlzLnJldHJ5QXR0ZW1wdHM9dC5yZXRyeUF0dGVtcHRzPz8wLHRoaXMuX3JldHJ5Q291bnQ9MCx0LnBhcnNlVXJsPz8hMD90aGlzLnBhcnNlVXJsKHQudXJsLCEwLCEwKTp0aGlzLl91cmw9dC51cmwsdGhpcy5fY3JlZGl0cz10LmNyZWRpdHN9ZnVuY3Rpb24gbmkodCxlKXtyZXR1cm4gaCh0KT9ZYyh0KTplfWZ1bmN0aW9uIE94KHQpe3JldHVybiB0Lmxlbmd0aD09PTA/e306dC5pbmRleE9mKCI9Iik9PT0tMT97W3RdOnZvaWQgMH06b0EodCl9ZnVuY3Rpb24gZHAodCxlLG4pe2lmKCFuKXJldHVybiBfcih0LGUpO2xldCBvPVljKHQsITApO2ZvcihsZXQgciBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkocikpe2xldCBpPW9bcl0scz1lW3JdO2goaSk/KEFycmF5LmlzQXJyYXkoaSl8fChpPW9bcl09W2ldKSxvW3JdPWkuY29uY2F0KHMpKTpvW3JdPUFycmF5LmlzQXJyYXkocyk/cy5zbGljZSgpOnN9cmV0dXJuIG99ZnVuY3Rpb24gRXgodCl7bGV0IGU9T2JqZWN0LmtleXModCk7cmV0dXJuIGUubGVuZ3RoPT09MD8iIjplLmxlbmd0aD09PTEmJiFoKHRbZVswXV0pP2A/JHtlWzBdfWA6YD8ke2VBKHQpfWB9ZnVuY3Rpb24gS20odCl7bGV0IGU9dC5yZXNvdXJjZSxuPXQuZmxpcFksbz10LnNraXBDb2xvclNwYWNlQ29udmVyc2lvbixyPXQucHJlZmVySW1hZ2VCaXRtYXAsaT1lLnJlcXVlc3Q7aS51cmw9ZS51cmwsaS5yZXF1ZXN0RnVuY3Rpb249ZnVuY3Rpb24oKXtsZXQgZj0hMTshZS5pc0RhdGFVcmkmJiFlLmlzQmxvYlVyaSYmKGY9ZS5pc0Nyb3NzT3JpZ2luVXJsKTtsZXQgdT1qcygpO3JldHVybiBHdC5fSW1wbGVtZW50YXRpb25zLmNyZWF0ZUltYWdlKGksZix1LG4sbyxyKSx1LnByb21pc2V9O2xldCBzPWxwLnJlcXVlc3QoaSk7aWYoaChzKSlyZXR1cm4gcy5jYXRjaChmdW5jdGlvbihmKXtyZXR1cm4gaS5zdGF0ZSE9PUNuLkZBSUxFRD9Qcm9taXNlLnJlamVjdChmKTplLnJldHJ5T25FcnJvcihmKS50aGVuKGZ1bmN0aW9uKHUpe3JldHVybiB1PyhpLnN0YXRlPUNuLlVOSVNTVUVELGkuZGVmZXJyZWQ9dm9pZCAwLEttKHtyZXNvdXJjZTplLGZsaXBZOm4sc2tpcENvbG9yU3BhY2VDb252ZXJzaW9uOm8scHJlZmVySW1hZ2VCaXRtYXA6cn0pKTpQcm9taXNlLnJlamVjdChmKX0pfSl9ZnVuY3Rpb24gU0EodCxlLG4pe2xldCBvPXt9O29bZV09bix0LnNldFF1ZXJ5UGFyYW1ldGVycyhvKTtsZXQgcj10LnJlcXVlc3QsaT10LnVybDtyLnVybD1pLHIucmVxdWVzdEZ1bmN0aW9uPWZ1bmN0aW9uKCl7bGV0IGY9anMoKTtyZXR1cm4gd2luZG93W25dPWZ1bmN0aW9uKHUpe2YucmVzb2x2ZSh1KTt0cnl7ZGVsZXRlIHdpbmRvd1tuXX1jYXRjaHt3aW5kb3dbbl09dm9pZCAwfX0sR3QuX0ltcGxlbWVudGF0aW9ucy5sb2FkQW5kRXhlY3V0ZVNjcmlwdChpLG4sZiksZi5wcm9taXNlfTtsZXQgcz1scC5yZXF1ZXN0KHIpO2lmKGgocykpcmV0dXJuIHMuY2F0Y2goZnVuY3Rpb24oZil7cmV0dXJuIHIuc3RhdGUhPT1Dbi5GQUlMRUQ/UHJvbWlzZS5yZWplY3QoZik6dC5yZXRyeU9uRXJyb3IoZikudGhlbihmdW5jdGlvbih1KXtyZXR1cm4gdT8oci5zdGF0ZT1Dbi5VTklTU1VFRCxyLmRlZmVycmVkPXZvaWQgMCxTQSh0LGUsbikpOlByb21pc2UucmVqZWN0KGYpfSl9KX1mdW5jdGlvbiBXbSh0KXtpZih0LnN0YXRlPT09Q24uSVNTVUVEfHx0LnN0YXRlPT09Q24uQUNUSVZFKXRocm93IG5ldyBBZSgiVGhlIFJlc291cmNlIGlzIGFscmVhZHkgYmVpbmcgZmV0Y2hlZC4iKTt0LnN0YXRlPUNuLlVOSVNTVUVELHQuZGVmZXJyZWQ9dm9pZCAwfWZ1bmN0aW9uIHBwKHQsZSl7bGV0IG49ZGVjb2RlVVJJQ29tcG9uZW50KGUpO3JldHVybiB0P2F0b2Iobik6bn1mdW5jdGlvbiBPQSh0LGUpe2xldCBuPXBwKHQsZSksbz1uZXcgQXJyYXlCdWZmZXIobi5sZW5ndGgpLHI9bmV3IFVpbnQ4QXJyYXkobyk7Zm9yKGxldCBpPTA7aTxuLmxlbmd0aDtpKyspcltpXT1uLmNoYXJDb2RlQXQoaSk7cmV0dXJuIG99ZnVuY3Rpb24gU3godCxlKXtlPWU/PyIiO2xldCBuPXRbMV0sbz0hIXRbMl0scj10WzNdLGkscztzd2l0Y2goZSl7Y2FzZSIiOmNhc2UidGV4dCI6cmV0dXJuIHBwKG8scik7Y2FzZSJhcnJheWJ1ZmZlciI6cmV0dXJuIE9BKG8scik7Y2FzZSJibG9iIjpyZXR1cm4gaT1PQShvLHIpLG5ldyBCbG9iKFtpXSx7dHlwZTpufSk7Y2FzZSJkb2N1bWVudCI6cmV0dXJuIHM9bmV3IERPTVBhcnNlcixzLnBhcnNlRnJvbVN0cmluZyhwcChvLHIpLG4pO2Nhc2UianNvbiI6cmV0dXJuIEpTT04ucGFyc2UocHAobyxyKSk7ZGVmYXVsdDp0aHJvdyBuZXcgRChgVW5oYW5kbGVkIHJlc3BvbnNlVHlwZTogJHtlfWApfX1mdW5jdGlvbiBDeCh0LGUsbixvLHIsaSxzKXtmZXRjaCh0LHttZXRob2Q6bixoZWFkZXJzOnJ9KS50aGVuKGFzeW5jIGY9PntpZighZi5vayl7bGV0IHU9e307Zi5oZWFkZXJzLmZvckVhY2goKGMsbCk9Pnt1W2xdPWN9KSxpLnJlamVjdChuZXcgdWYoZi5zdGF0dXMsZix1KSk7cmV0dXJufXN3aXRjaChlKXtjYXNlInRleHQiOmkucmVzb2x2ZShmLnRleHQoKSk7YnJlYWs7Y2FzZSJqc29uIjppLnJlc29sdmUoZi5qc29uKCkpO2JyZWFrO2RlZmF1bHQ6aS5yZXNvbHZlKG5ldyBVaW50OEFycmF5KGF3YWl0IGYuYXJyYXlCdWZmZXIoKSkuYnVmZmVyKTticmVha319KS5jYXRjaCgoKT0+e2kucmVqZWN0KG5ldyB1Zil9KX12YXIgRUEsUkEsUWMsUngseHgsb2ksZGY9JCgoKT0+e0VBPWRyKHpzKCksMSk7VTEoKTtXdCgpO0cxKCk7cnAoKTt5ZSgpO1VtKCk7ZnQoKTtqdCgpO0dtKCk7cTEoKTtYMSgpOyQxKCk7em0oKTtRMSgpO2ptKCk7dEEoKTtLdCgpO25BKCk7ckEoKTthQSgpO3BBKCk7YkEoKTtjcCgpO0pyKCk7d0EoKTtSQT1mdW5jdGlvbigpe3RyeXtsZXQgdD1uZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJuIHQub3BlbigiR0VUIiwiIyIsITApLHQucmVzcG9uc2VUeXBlPSJibG9iIix0LnJlc3BvbnNlVHlwZT09PSJibG9iIn1jYXRjaHtyZXR1cm4hMX19KCk7R3QuY3JlYXRlSWZOZWVkZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBHdD90LmdldERlcml2ZWRSZXNvdXJjZSh7cmVxdWVzdDp0LnJlcXVlc3R9KTp0eXBlb2YgdCE9InN0cmluZyI/dDpuZXcgR3Qoe3VybDp0fSl9O0d0LnN1cHBvcnRzSW1hZ2VCaXRtYXBPcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIGgoUWMpP1FjOnR5cGVvZiBjcmVhdGVJbWFnZUJpdG1hcCE9ImZ1bmN0aW9uIj8oUWM9UHJvbWlzZS5yZXNvbHZlKCExKSxRYyk6KFFjPUd0LmZldGNoQmxvYih7dXJsOiJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQUJDQUlBQUFDUWQxUGVBQUFBQkdkQlRVRUFBRTRnM3JFaURnQUFBQ0JqU0ZKTkFBQjZKZ0FBZ0lRQUFQb0FBQUNBNkFBQWRUQUFBT3BnQUFBNm1BQUFGM0NjdWxFOEFBQUFERWxFUVZRSTEyTmc2R0FBQUFFVUFJbmdFM1ppQUFBQUFFbEZUa1N1UW1DQyJ9KS50aGVuKGZ1bmN0aW9uKGUpe2xldCBuPXtpbWFnZU9yaWVudGF0aW9uOiJmbGlwWSIscHJlbXVsdGlwbHlBbHBoYToibm9uZSIsY29sb3JTcGFjZUNvbnZlcnNpb246Im5vbmUifTtyZXR1cm4gUHJvbWlzZS5hbGwoW2NyZWF0ZUltYWdlQml0bWFwKGUsbiksY3JlYXRlSW1hZ2VCaXRtYXAoZSldKX0pLnRoZW4oZnVuY3Rpb24oZSl7bGV0IG49Vm0oZVswXSksbz1WbShlWzFdKTtyZXR1cm4gblsxXSE9PW9bMV19KS5jYXRjaChmdW5jdGlvbigpe3JldHVybiExfSksUWMpfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhHdCx7aXNCbG9iU3VwcG9ydGVkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUkF9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEd0LnByb3RvdHlwZSx7cXVlcnlQYXJhbWV0ZXJzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcXVlcnlQYXJhbWV0ZXJzfX0sdGVtcGxhdGVWYWx1ZXM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90ZW1wbGF0ZVZhbHVlc319LHVybDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0VXJsQ29tcG9uZW50KCEwLCEwKX0sc2V0OmZ1bmN0aW9uKHQpe3RoaXMucGFyc2VVcmwodCwhMSwhMSl9fSxleHRlbnNpb246e2dldDpmdW5jdGlvbigpe3JldHVybiBXMSh0aGlzLl91cmwpfX0saXNEYXRhVXJpOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gc3AodGhpcy5fdXJsKX19LGlzQmxvYlVyaTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGlwKHRoaXMuX3VybCl9fSxpc0Nyb3NzT3JpZ2luVXJsOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWjEodGhpcy5fdXJsKX19LGhhc0hlYWRlcnM6e2dldDpmdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmhlYWRlcnMpLmxlbmd0aD4wfX0sY3JlZGl0czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NyZWRpdHN9fX0pO0d0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFVybENvbXBvbmVudCghMCwhMCl9O0d0LnByb3RvdHlwZS5wYXJzZVVybD1mdW5jdGlvbih0LGUsbixvKXtsZXQgcj1uZXcgRUEuZGVmYXVsdCh0KSxpPU94KHIucXVlcnkoKSk7dGhpcy5fcXVlcnlQYXJhbWV0ZXJzPWU/ZHAoaSx0aGlzLnF1ZXJ5UGFyYW1ldGVycyxuKTppLHIuc2VhcmNoKCIiKSxyLmZyYWdtZW50KCIiKSxoKG8pJiZyLnNjaGVtZSgpPT09IiImJihyPXIuYWJzb2x1dGVUbyhmZihvKSkpLHRoaXMuX3VybD1yLnRvU3RyaW5nKCl9O0d0LnByb3RvdHlwZS5nZXRVcmxDb21wb25lbnQ9ZnVuY3Rpb24odCxlKXtpZih0aGlzLmlzRGF0YVVyaSlyZXR1cm4gdGhpcy5fdXJsO2xldCBuPXRoaXMuX3VybDt0JiYobj1gJHtufSR7RXgodGhpcy5xdWVyeVBhcmFtZXRlcnMpfWApLG49bi5yZXBsYWNlKC8lN0IvZywieyIpLnJlcGxhY2UoLyU3RC9nLCJ9Iik7bGV0IG89dGhpcy5fdGVtcGxhdGVWYWx1ZXM7cmV0dXJuIE9iamVjdC5rZXlzKG8pLmxlbmd0aD4wJiYobj1uLnJlcGxhY2UoL3soLio/KX0vZyxmdW5jdGlvbihyLGkpe2xldCBzPW9baV07cmV0dXJuIGgocyk/ZW5jb2RlVVJJQ29tcG9uZW50KHMpOnJ9KSksZSYmaCh0aGlzLnByb3h5KSYmKG49dGhpcy5wcm94eS5nZXRVUkwobikpLG59O0d0LnByb3RvdHlwZS5zZXRRdWVyeVBhcmFtZXRlcnM9ZnVuY3Rpb24odCxlKXtlP3RoaXMuX3F1ZXJ5UGFyYW1ldGVycz1kcCh0aGlzLl9xdWVyeVBhcmFtZXRlcnMsdCwhMSk6dGhpcy5fcXVlcnlQYXJhbWV0ZXJzPWRwKHQsdGhpcy5fcXVlcnlQYXJhbWV0ZXJzLCExKX07R3QucHJvdG90eXBlLmFwcGVuZFF1ZXJ5UGFyYW1ldGVycz1mdW5jdGlvbih0KXt0aGlzLl9xdWVyeVBhcmFtZXRlcnM9ZHAodCx0aGlzLl9xdWVyeVBhcmFtZXRlcnMsITApfTtHdC5wcm90b3R5cGUuc2V0VGVtcGxhdGVWYWx1ZXM9ZnVuY3Rpb24odCxlKXtlP3RoaXMuX3RlbXBsYXRlVmFsdWVzPV9yKHRoaXMuX3RlbXBsYXRlVmFsdWVzLHQpOnRoaXMuX3RlbXBsYXRlVmFsdWVzPV9yKHQsdGhpcy5fdGVtcGxhdGVWYWx1ZXMpfTtHdC5wcm90b3R5cGUuZ2V0RGVyaXZlZFJlc291cmNlPWZ1bmN0aW9uKHQpe2xldCBlPXRoaXMuY2xvbmUoKTtpZihlLl9yZXRyeUNvdW50PTAsaCh0LnVybCkpe2xldCBuPXQucHJlc2VydmVRdWVyeVBhcmFtZXRlcnM/PyExO2UucGFyc2VVcmwodC51cmwsITAsbix0aGlzLl91cmwpfXJldHVybiBoKHQucXVlcnlQYXJhbWV0ZXJzKSYmKGUuX3F1ZXJ5UGFyYW1ldGVycz1fcih0LnF1ZXJ5UGFyYW1ldGVycyxlLnF1ZXJ5UGFyYW1ldGVycykpLGgodC50ZW1wbGF0ZVZhbHVlcykmJihlLl90ZW1wbGF0ZVZhbHVlcz1fcih0LnRlbXBsYXRlVmFsdWVzLGUudGVtcGxhdGVWYWx1ZXMpKSxoKHQuaGVhZGVycykmJihlLmhlYWRlcnM9X3IodC5oZWFkZXJzLGUuaGVhZGVycykpLGgodC5wcm94eSkmJihlLnByb3h5PXQucHJveHkpLGgodC5yZXF1ZXN0KSYmKGUucmVxdWVzdD10LnJlcXVlc3QpLGgodC5yZXRyeUNhbGxiYWNrKSYmKGUucmV0cnlDYWxsYmFjaz10LnJldHJ5Q2FsbGJhY2spLGgodC5yZXRyeUF0dGVtcHRzKSYmKGUucmV0cnlBdHRlbXB0cz10LnJldHJ5QXR0ZW1wdHMpLGV9O0d0LnByb3RvdHlwZS5yZXRyeU9uRXJyb3I9ZnVuY3Rpb24odCl7bGV0IGU9dGhpcy5yZXRyeUNhbGxiYWNrO2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24ifHx0aGlzLl9yZXRyeUNvdW50Pj10aGlzLnJldHJ5QXR0ZW1wdHMpcmV0dXJuIFByb21pc2UucmVzb2x2ZSghMSk7bGV0IG49dGhpcztyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGUodGhpcyx0KSkudGhlbihmdW5jdGlvbihvKXtyZXR1cm4rK24uX3JldHJ5Q291bnQsb30pfTtHdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIGgodCk/KHQuX3VybD10aGlzLl91cmwsdC5fcXVlcnlQYXJhbWV0ZXJzPVljKHRoaXMuX3F1ZXJ5UGFyYW1ldGVycyksdC5fdGVtcGxhdGVWYWx1ZXM9WWModGhpcy5fdGVtcGxhdGVWYWx1ZXMpLHQuaGVhZGVycz1ZYyh0aGlzLmhlYWRlcnMpLHQucHJveHk9dGhpcy5wcm94eSx0LnJldHJ5Q2FsbGJhY2s9dGhpcy5yZXRyeUNhbGxiYWNrLHQucmV0cnlBdHRlbXB0cz10aGlzLnJldHJ5QXR0ZW1wdHMsdC5fcmV0cnlDb3VudD0wLHQucmVxdWVzdD10aGlzLnJlcXVlc3QuY2xvbmUoKSx0KTpuZXcgR3Qoe3VybDp0aGlzLl91cmwscXVlcnlQYXJhbWV0ZXJzOnRoaXMucXVlcnlQYXJhbWV0ZXJzLHRlbXBsYXRlVmFsdWVzOnRoaXMudGVtcGxhdGVWYWx1ZXMsaGVhZGVyczp0aGlzLmhlYWRlcnMscHJveHk6dGhpcy5wcm94eSxyZXRyeUNhbGxiYWNrOnRoaXMucmV0cnlDYWxsYmFjayxyZXRyeUF0dGVtcHRzOnRoaXMucmV0cnlBdHRlbXB0cyxyZXF1ZXN0OnRoaXMucmVxdWVzdC5jbG9uZSgpLHBhcnNlVXJsOiExLGNyZWRpdHM6aCh0aGlzLmNyZWRpdHMpP3RoaXMuY3JlZGl0cy5zbGljZSgpOnZvaWQgMH0pfTtHdC5wcm90b3R5cGUuZ2V0QmFzZVVyaT1mdW5jdGlvbih0KXtyZXR1cm4gSDEodGhpcy5nZXRVcmxDb21wb25lbnQodCksdCl9O0d0LnByb3RvdHlwZS5hcHBlbmRGb3J3YXJkU2xhc2g9ZnVuY3Rpb24oKXt0aGlzLl91cmw9QjEodGhpcy5fdXJsKX07R3QucHJvdG90eXBlLmZldGNoQXJyYXlCdWZmZXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZXRjaCh7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciJ9KX07R3QuZmV0Y2hBcnJheUJ1ZmZlcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEd0KHQpLmZldGNoQXJyYXlCdWZmZXIoKX07R3QucHJvdG90eXBlLmZldGNoQmxvYj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZldGNoKHtyZXNwb25zZVR5cGU6ImJsb2IifSl9O0d0LmZldGNoQmxvYj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEd0KHQpLmZldGNoQmxvYigpfTtHdC5wcm90b3R5cGUuZmV0Y2hJbWFnZT1mdW5jdGlvbih0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVDtsZXQgZT10LnByZWZlckltYWdlQml0bWFwPz8hMSxuPXQucHJlZmVyQmxvYj8/ITEsbz10LmZsaXBZPz8hMSxyPXQuc2tpcENvbG9yU3BhY2VDb252ZXJzaW9uPz8hMTtpZihXbSh0aGlzLnJlcXVlc3QpLCFSQXx8dGhpcy5pc0RhdGFVcml8fHRoaXMuaXNCbG9iVXJpfHwhdGhpcy5oYXNIZWFkZXJzJiYhbilyZXR1cm4gS20oe3Jlc291cmNlOnRoaXMsZmxpcFk6byxza2lwQ29sb3JTcGFjZUNvbnZlcnNpb246cixwcmVmZXJJbWFnZUJpdG1hcDplfSk7bGV0IGk9dGhpcy5mZXRjaEJsb2IoKTtpZighaChpKSlyZXR1cm47bGV0IHMsZix1LGM7cmV0dXJuIEd0LnN1cHBvcnRzSW1hZ2VCaXRtYXBPcHRpb25zKCkudGhlbihmdW5jdGlvbihsKXtyZXR1cm4gcz1sLGY9cyYmZSxpfSkudGhlbihmdW5jdGlvbihsKXtpZighaChsKSlyZXR1cm47aWYoYz1sLGYpcmV0dXJuIEd0LmNyZWF0ZUltYWdlQml0bWFwRnJvbUJsb2IobCx7ZmxpcFk6byxwcmVtdWx0aXBseUFscGhhOiExLHNraXBDb2xvclNwYWNlQ29udmVyc2lvbjpyfSk7bGV0IHA9d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobCk7cmV0dXJuIHU9bmV3IEd0KHt1cmw6cH0pLEttKHtyZXNvdXJjZTp1LGZsaXBZOm8sc2tpcENvbG9yU3BhY2VDb252ZXJzaW9uOnIscHJlZmVySW1hZ2VCaXRtYXA6ITF9KX0pLnRoZW4oZnVuY3Rpb24obCl7aWYoaChsKSlyZXR1cm4gbC5ibG9iPWMsZnx8d2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodS51cmwpLGx9KS5jYXRjaChmdW5jdGlvbihsKXtyZXR1cm4gaCh1KSYmd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwodS51cmwpLGwuYmxvYj1jLFByb21pc2UucmVqZWN0KGwpfSl9O0d0LmZldGNoSW1hZ2U9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBHdCh0KS5mZXRjaEltYWdlKHtmbGlwWTp0LmZsaXBZLHNraXBDb2xvclNwYWNlQ29udmVyc2lvbjp0LnNraXBDb2xvclNwYWNlQ29udmVyc2lvbixwcmVmZXJCbG9iOnQucHJlZmVyQmxvYixwcmVmZXJJbWFnZUJpdG1hcDp0LnByZWZlckltYWdlQml0bWFwfSl9O0d0LnByb3RvdHlwZS5mZXRjaFRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZXRjaCh7cmVzcG9uc2VUeXBlOiJ0ZXh0In0pfTtHdC5mZXRjaFRleHQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBHdCh0KS5mZXRjaFRleHQoKX07R3QucHJvdG90eXBlLmZldGNoSnNvbj1mdW5jdGlvbigpe2xldCB0PXRoaXMuZmV0Y2goe3Jlc3BvbnNlVHlwZToidGV4dCIsaGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCovKjtxPTAuMDEifX0pO2lmKGgodCkpcmV0dXJuIHQudGhlbihmdW5jdGlvbihlKXtpZihoKGUpKXJldHVybiBKU09OLnBhcnNlKGUpfSl9O0d0LmZldGNoSnNvbj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEd0KHQpLmZldGNoSnNvbigpfTtHdC5wcm90b3R5cGUuZmV0Y2hYTUw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mZXRjaCh7cmVzcG9uc2VUeXBlOiJkb2N1bWVudCIsb3ZlcnJpZGVNaW1lVHlwZToidGV4dC94bWwifSl9O0d0LmZldGNoWE1MPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgR3QodCkuZmV0Y2hYTUwoKX07R3QucHJvdG90eXBlLmZldGNoSnNvbnA9ZnVuY3Rpb24odCl7dD10Pz8iY2FsbGJhY2siLFdtKHRoaXMucmVxdWVzdCk7bGV0IGU7ZG8gZT1gbG9hZEpzb25wJHtQLm5leHRSYW5kb21OdW1iZXIoKS50b1N0cmluZygpLnN1YnN0cmluZygyLDgpfWA7d2hpbGUoaCh3aW5kb3dbZV0pKTtyZXR1cm4gU0EodGhpcyx0LGUpfTtHdC5mZXRjaEpzb25wPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgR3QodCkuZmV0Y2hKc29ucCh0LmNhbGxiYWNrUGFyYW1ldGVyTmFtZSl9O0d0LnByb3RvdHlwZS5fbWFrZVJlcXVlc3Q9ZnVuY3Rpb24odCl7bGV0IGU9dGhpcztXbShlLnJlcXVlc3QpO2xldCBuPWUucmVxdWVzdCxvPWUudXJsO24udXJsPW8sbi5yZXF1ZXN0RnVuY3Rpb249ZnVuY3Rpb24oKXtsZXQgaT10LnJlc3BvbnNlVHlwZSxzPV9yKHQuaGVhZGVycyxlLmhlYWRlcnMpLGY9dC5vdmVycmlkZU1pbWVUeXBlLHU9dC5tZXRob2QsYz10LmRhdGEsbD1qcygpLHA9R3QuX0ltcGxlbWVudGF0aW9ucy5sb2FkV2l0aFhocihvLGksdSxjLHMsbCxmKTtyZXR1cm4gaChwKSYmaChwLmFib3J0KSYmKG4uY2FuY2VsRnVuY3Rpb249ZnVuY3Rpb24oKXtwLmFib3J0KCl9KSxsLnByb21pc2V9O2xldCByPWxwLnJlcXVlc3Qobik7aWYoaChyKSlyZXR1cm4gci50aGVuKGZ1bmN0aW9uKGkpe3JldHVybiBuLmNhbmNlbEZ1bmN0aW9uPXZvaWQgMCxpfSkuY2F0Y2goZnVuY3Rpb24oaSl7cmV0dXJuIG4uY2FuY2VsRnVuY3Rpb249dm9pZCAwLG4uc3RhdGUhPT1Dbi5GQUlMRUQ/UHJvbWlzZS5yZWplY3QoaSk6ZS5yZXRyeU9uRXJyb3IoaSkudGhlbihmdW5jdGlvbihzKXtyZXR1cm4gcz8obi5zdGF0ZT1Dbi5VTklTU1VFRCxuLmRlZmVycmVkPXZvaWQgMCxlLmZldGNoKHQpKTpQcm9taXNlLnJlamVjdChpKX0pfSl9O1J4PS9eZGF0YTooLio/KSg7YmFzZTY0KT8sKC4qKSQvO0d0LnByb3RvdHlwZS5mZXRjaD1mdW5jdGlvbih0KXtyZXR1cm4gdD1uaSh0LHt9KSx0Lm1ldGhvZD0iR0VUIix0aGlzLl9tYWtlUmVxdWVzdCh0KX07R3QuZmV0Y2g9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBHdCh0KS5mZXRjaCh7cmVzcG9uc2VUeXBlOnQucmVzcG9uc2VUeXBlLG92ZXJyaWRlTWltZVR5cGU6dC5vdmVycmlkZU1pbWVUeXBlfSl9O0d0LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bmkodCx7fSksdC5tZXRob2Q9IkRFTEVURSIsdGhpcy5fbWFrZVJlcXVlc3QodCl9O0d0LmRlbGV0ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEd0KHQpLmRlbGV0ZSh7cmVzcG9uc2VUeXBlOnQucmVzcG9uc2VUeXBlLG92ZXJyaWRlTWltZVR5cGU6dC5vdmVycmlkZU1pbWVUeXBlLGRhdGE6dC5kYXRhfSl9O0d0LnByb3RvdHlwZS5oZWFkPWZ1bmN0aW9uKHQpe3JldHVybiB0PW5pKHQse30pLHQubWV0aG9kPSJIRUFEIix0aGlzLl9tYWtlUmVxdWVzdCh0KX07R3QuaGVhZD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEd0KHQpLmhlYWQoe3Jlc3BvbnNlVHlwZTp0LnJlc3BvbnNlVHlwZSxvdmVycmlkZU1pbWVUeXBlOnQub3ZlcnJpZGVNaW1lVHlwZX0pfTtHdC5wcm90b3R5cGUub3B0aW9ucz1mdW5jdGlvbih0KXtyZXR1cm4gdD1uaSh0LHt9KSx0Lm1ldGhvZD0iT1BUSU9OUyIsdGhpcy5fbWFrZVJlcXVlc3QodCl9O0d0Lm9wdGlvbnM9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBHdCh0KS5vcHRpb25zKHtyZXNwb25zZVR5cGU6dC5yZXNwb25zZVR5cGUsb3ZlcnJpZGVNaW1lVHlwZTp0Lm92ZXJyaWRlTWltZVR5cGV9KX07R3QucHJvdG90eXBlLnBvc3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS5kZWZpbmVkKCJkYXRhIix0KSxlPW5pKGUse30pLGUubWV0aG9kPSJQT1NUIixlLmRhdGE9dCx0aGlzLl9tYWtlUmVxdWVzdChlKX07R3QucG9zdD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEd0KHQpLnBvc3QodC5kYXRhLHtyZXNwb25zZVR5cGU6dC5yZXNwb25zZVR5cGUsb3ZlcnJpZGVNaW1lVHlwZTp0Lm92ZXJyaWRlTWltZVR5cGV9KX07R3QucHJvdG90eXBlLnB1dD1mdW5jdGlvbih0LGUpe3JldHVybiB5LmRlZmluZWQoImRhdGEiLHQpLGU9bmkoZSx7fSksZS5tZXRob2Q9IlBVVCIsZS5kYXRhPXQsdGhpcy5fbWFrZVJlcXVlc3QoZSl9O0d0LnB1dD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEd0KHQpLnB1dCh0LmRhdGEse3Jlc3BvbnNlVHlwZTp0LnJlc3BvbnNlVHlwZSxvdmVycmlkZU1pbWVUeXBlOnQub3ZlcnJpZGVNaW1lVHlwZX0pfTtHdC5wcm90b3R5cGUucGF0Y2g9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS5kZWZpbmVkKCJkYXRhIix0KSxlPW5pKGUse30pLGUubWV0aG9kPSJQQVRDSCIsZS5kYXRhPXQsdGhpcy5fbWFrZVJlcXVlc3QoZSl9O0d0LnBhdGNoPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgR3QodCkucGF0Y2godC5kYXRhLHtyZXNwb25zZVR5cGU6dC5yZXNwb25zZVR5cGUsb3ZlcnJpZGVNaW1lVHlwZTp0Lm92ZXJyaWRlTWltZVR5cGV9KX07R3QuX0ltcGxlbWVudGF0aW9ucz17fTtHdC5fSW1wbGVtZW50YXRpb25zLmxvYWRJbWFnZUVsZW1lbnQ9ZnVuY3Rpb24odCxlLG4pe2xldCBvPW5ldyBJbWFnZTtvLm9ubG9hZD1mdW5jdGlvbigpe28ubmF0dXJhbFdpZHRoPT09MCYmby5uYXR1cmFsSGVpZ2h0PT09MCYmby53aWR0aD09PTAmJm8uaGVpZ2h0PT09MCYmKG8ud2lkdGg9MzAwLG8uaGVpZ2h0PTE1MCksbi5yZXNvbHZlKG8pfSxvLm9uZXJyb3I9ZnVuY3Rpb24ocil7bi5yZWplY3Qocil9LGUmJihxbS5jb250YWlucyh0KT9vLmNyb3NzT3JpZ2luPSJ1c2UtY3JlZGVudGlhbHMiOm8uY3Jvc3NPcmlnaW49IiIpLG8uc3JjPXR9O0d0Ll9JbXBsZW1lbnRhdGlvbnMuY3JlYXRlSW1hZ2U9ZnVuY3Rpb24odCxlLG4sbyxyLGkpe2xldCBzPXQudXJsO0d0LnN1cHBvcnRzSW1hZ2VCaXRtYXBPcHRpb25zKCkudGhlbihmdW5jdGlvbihmKXtpZighKGYmJmkpKXtHdC5fSW1wbGVtZW50YXRpb25zLmxvYWRJbWFnZUVsZW1lbnQocyxlLG4pO3JldHVybn1sZXQgdT0iYmxvYiIsYz0iR0VUIixsPWpzKCkscD1HdC5fSW1wbGVtZW50YXRpb25zLmxvYWRXaXRoWGhyKHMsdSxjLHZvaWQgMCx2b2lkIDAsbCx2b2lkIDAsdm9pZCAwLHZvaWQgMCk7cmV0dXJuIGgocCkmJmgocC5hYm9ydCkmJih0LmNhbmNlbEZ1bmN0aW9uPWZ1bmN0aW9uKCl7cC5hYm9ydCgpfSksbC5wcm9taXNlLnRoZW4oZnVuY3Rpb24oZCl7aWYoIWgoZCkpe24ucmVqZWN0KG5ldyBBZShgU3VjY2Vzc2Z1bGx5IHJldHJpZXZlZCAke3N9IGJ1dCBpdCBjb250YWluZWQgbm8gY29udGVudC5gKSk7cmV0dXJufXJldHVybiBHdC5jcmVhdGVJbWFnZUJpdG1hcEZyb21CbG9iKGQse2ZsaXBZOm8scHJlbXVsdGlwbHlBbHBoYTohMSxza2lwQ29sb3JTcGFjZUNvbnZlcnNpb246cn0pfSkudGhlbihmdW5jdGlvbihkKXtuLnJlc29sdmUoZCl9KX0pLmNhdGNoKGZ1bmN0aW9uKGYpe24ucmVqZWN0KGYpfSl9O0d0LmNyZWF0ZUltYWdlQml0bWFwRnJvbUJsb2I9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS5kZWZpbmVkKCJvcHRpb25zIixlKSx5LnR5cGVPZi5ib29sKCJvcHRpb25zLmZsaXBZIixlLmZsaXBZKSx5LnR5cGVPZi5ib29sKCJvcHRpb25zLnByZW11bHRpcGx5QWxwaGEiLGUucHJlbXVsdGlwbHlBbHBoYSkseS50eXBlT2YuYm9vbCgib3B0aW9ucy5za2lwQ29sb3JTcGFjZUNvbnZlcnNpb24iLGUuc2tpcENvbG9yU3BhY2VDb252ZXJzaW9uKSxjcmVhdGVJbWFnZUJpdG1hcCh0LHtpbWFnZU9yaWVudGF0aW9uOmUuZmxpcFk/ImZsaXBZIjoibm9uZSIscHJlbXVsdGlwbHlBbHBoYTplLnByZW11bHRpcGx5QWxwaGE/InByZW11bHRpcGx5Ijoibm9uZSIsY29sb3JTcGFjZUNvbnZlcnNpb246ZS5za2lwQ29sb3JTcGFjZUNvbnZlcnNpb24/Im5vbmUiOiJkZWZhdWx0In0pfTt4eD10eXBlb2YgWE1MSHR0cFJlcXVlc3Q+InUiO0d0Ll9JbXBsZW1lbnRhdGlvbnMubG9hZFdpdGhYaHI9ZnVuY3Rpb24odCxlLG4sbyxyLGkscyl7bGV0IGY9UnguZXhlYyh0KTtpZihmIT09bnVsbCl7aS5yZXNvbHZlKFN4KGYsZSkpO3JldHVybn1pZih4eCl7Q3godCxlLG4sbyxyLGkscyk7cmV0dXJufWxldCB1PW5ldyBYTUxIdHRwUmVxdWVzdDtpZihxbS5jb250YWlucyh0KSYmKHUud2l0aENyZWRlbnRpYWxzPSEwKSx1Lm9wZW4obix0LCEwKSxoKHMpJiZoKHUub3ZlcnJpZGVNaW1lVHlwZSkmJnUub3ZlcnJpZGVNaW1lVHlwZShzKSxoKHIpKWZvcihsZXQgbCBpbiByKXIuaGFzT3duUHJvcGVydHkobCkmJnUuc2V0UmVxdWVzdEhlYWRlcihsLHJbbF0pO2goZSkmJih1LnJlc3BvbnNlVHlwZT1lKTtsZXQgYz0hMTtyZXR1cm4gdHlwZW9mIHQ9PSJzdHJpbmciJiYoYz10LmluZGV4T2YoImZpbGU6Ly8iKT09PTB8fHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cubG9jYXRpb24ub3JpZ2luPT09ImZpbGU6Ly8iKSx1Lm9ubG9hZD1mdW5jdGlvbigpe2lmKCh1LnN0YXR1czwyMDB8fHUuc3RhdHVzPj0zMDApJiYhKGMmJnUuc3RhdHVzPT09MCkpe2kucmVqZWN0KG5ldyB1Zih1LnN0YXR1cyx1LnJlc3BvbnNlLHUuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpKTtyZXR1cm59bGV0IGw9dS5yZXNwb25zZSxwPXUucmVzcG9uc2VUeXBlO2lmKG49PT0iSEVBRCJ8fG49PT0iT1BUSU9OUyIpe2xldCBtPXUuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkudHJpbSgpLnNwbGl0KC9bXHJcbl0rLyksXz17fTttLmZvckVhY2goZnVuY3Rpb24oZyl7bGV0IGI9Zy5zcGxpdCgiOiAiKSxUPWIuc2hpZnQoKTtfW1RdPWIuam9pbigiOiAiKX0pLGkucmVzb2x2ZShfKTtyZXR1cm59aWYodS5zdGF0dXM9PT0yMDQpaS5yZXNvbHZlKHZvaWQgMCk7ZWxzZSBpZihoKGwpJiYoIWgoZSl8fHA9PT1lKSlpLnJlc29sdmUobCk7ZWxzZSBpZihlPT09Impzb24iJiZ0eXBlb2YgbD09InN0cmluZyIpdHJ5e2kucmVzb2x2ZShKU09OLnBhcnNlKGwpKX1jYXRjaChkKXtpLnJlamVjdChkKX1lbHNlKHA9PT0iInx8cD09PSJkb2N1bWVudCIpJiZoKHUucmVzcG9uc2VYTUwpJiZ1LnJlc3BvbnNlWE1MLmhhc0NoaWxkTm9kZXMoKT9pLnJlc29sdmUodS5yZXNwb25zZVhNTCk6KHA9PT0iInx8cD09PSJ0ZXh0IikmJmgodS5yZXNwb25zZVRleHQpP2kucmVzb2x2ZSh1LnJlc3BvbnNlVGV4dCk6aS5yZWplY3QobmV3IEFlKCJJbnZhbGlkIFhNTEh0dHBSZXF1ZXN0IHJlc3BvbnNlIHR5cGUuIikpfSx1Lm9uZXJyb3I9ZnVuY3Rpb24obCl7aS5yZWplY3QobmV3IHVmKX0sdS5zZW5kKG8pLHV9O0d0Ll9JbXBsZW1lbnRhdGlvbnMubG9hZEFuZEV4ZWN1dGVTY3JpcHQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBKMSh0LGUpLmNhdGNoKGZ1bmN0aW9uKG8pe24ucmVqZWN0KG8pfSl9O0d0Ll9EZWZhdWx0SW1wbGVtZW50YXRpb25zPXt9O0d0Ll9EZWZhdWx0SW1wbGVtZW50YXRpb25zLmNyZWF0ZUltYWdlPUd0Ll9JbXBsZW1lbnRhdGlvbnMuY3JlYXRlSW1hZ2U7R3QuX0RlZmF1bHRJbXBsZW1lbnRhdGlvbnMubG9hZFdpdGhYaHI9R3QuX0ltcGxlbWVudGF0aW9ucy5sb2FkV2l0aFhocjtHdC5fRGVmYXVsdEltcGxlbWVudGF0aW9ucy5sb2FkQW5kRXhlY3V0ZVNjcmlwdD1HdC5fSW1wbGVtZW50YXRpb25zLmxvYWRBbmRFeGVjdXRlU2NyaXB0O0d0LkRFRkFVTFQ9T2JqZWN0LmZyZWV6ZShuZXcgR3Qoe3VybDp0eXBlb2YgZG9jdW1lbnQ+InUiPyIiOmRvY3VtZW50LmxvY2F0aW9uLmhyZWYuc3BsaXQoIj8iKVswXX0pKTtvaT1HdH0pO2Z1bmN0aW9uIGhmKHQpe3Q9dD8/SXQuRU1QVFlfT0JKRUNULHRoaXMuX2RhdGVzPXZvaWQgMCx0aGlzLl9zYW1wbGVzPXZvaWQgMCx0aGlzLl9kYXRlQ29sdW1uPS0xLHRoaXMuX3hQb2xlV2FuZGVyUmFkaWFuc0NvbHVtbj0tMSx0aGlzLl95UG9sZVdhbmRlclJhZGlhbnNDb2x1bW49LTEsdGhpcy5fdXQxTWludXNVdGNTZWNvbmRzQ29sdW1uPS0xLHRoaXMuX3hDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFuc0NvbHVtbj0tMSx0aGlzLl95Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnNDb2x1bW49LTEsdGhpcy5fdGFpTWludXNVdGNTZWNvbmRzQ29sdW1uPS0xLHRoaXMuX2NvbHVtbkNvdW50PTAsdGhpcy5fbGFzdEluZGV4PS0xLHRoaXMuX2FkZE5ld0xlYXBTZWNvbmRzPXQuYWRkTmV3TGVhcFNlY29uZHM/PyEwLGgodC5kYXRhKT9DQSh0aGlzLHQuZGF0YSk6Q0EodGhpcyx7Y29sdW1uTmFtZXM6WyJkYXRlSXNvODYwMSIsIm1vZGlmaWVkSnVsaWFuRGF0ZVV0YyIsInhQb2xlV2FuZGVyUmFkaWFucyIsInlQb2xlV2FuZGVyUmFkaWFucyIsInV0MU1pbnVzVXRjU2Vjb25kcyIsImxlbmd0aE9mRGF5Q29ycmVjdGlvblNlY29uZHMiLCJ4Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnMiLCJ5Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnMiLCJ0YWlNaW51c1V0Y1NlY29uZHMiXSxzYW1wbGVzOltdfSl9ZnVuY3Rpb24gUHgodCxlKXtyZXR1cm4gR24uY29tcGFyZSh0Lmp1bGlhbkRhdGUsZSl9ZnVuY3Rpb24gQ0EodCxlKXtpZighaChlLmNvbHVtbk5hbWVzKSl0aHJvdyBuZXcgQWUoIkVycm9yIGluIGxvYWRlZCBFT1AgZGF0YTogVGhlIGNvbHVtbk5hbWVzIHByb3BlcnR5IGlzIHJlcXVpcmVkLiIpO2lmKCFoKGUuc2FtcGxlcykpdGhyb3cgbmV3IEFlKCJFcnJvciBpbiBsb2FkZWQgRU9QIGRhdGE6IFRoZSBzYW1wbGVzIHByb3BlcnR5IGlzIHJlcXVpcmVkLiIpO2xldCBuPWUuY29sdW1uTmFtZXMuaW5kZXhPZigibW9kaWZpZWRKdWxpYW5EYXRlVXRjIiksbz1lLmNvbHVtbk5hbWVzLmluZGV4T2YoInhQb2xlV2FuZGVyUmFkaWFucyIpLHI9ZS5jb2x1bW5OYW1lcy5pbmRleE9mKCJ5UG9sZVdhbmRlclJhZGlhbnMiKSxpPWUuY29sdW1uTmFtZXMuaW5kZXhPZigidXQxTWludXNVdGNTZWNvbmRzIikscz1lLmNvbHVtbk5hbWVzLmluZGV4T2YoInhDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFucyIpLGY9ZS5jb2x1bW5OYW1lcy5pbmRleE9mKCJ5Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnMiKSx1PWUuY29sdW1uTmFtZXMuaW5kZXhPZigidGFpTWludXNVdGNTZWNvbmRzIik7aWYobjwwfHxvPDB8fHI8MHx8aTwwfHxzPDB8fGY8MHx8dTwwKXRocm93IG5ldyBBZSgiRXJyb3IgaW4gbG9hZGVkIEVPUCBkYXRhOiBUaGUgY29sdW1uTmFtZXMgcHJvcGVydHkgbXVzdCBpbmNsdWRlIG1vZGlmaWVkSnVsaWFuRGF0ZVV0YywgeFBvbGVXYW5kZXJSYWRpYW5zLCB5UG9sZVdhbmRlclJhZGlhbnMsIHV0MU1pbnVzVXRjU2Vjb25kcywgeENlbGVzdGlhbFBvbGVPZmZzZXRSYWRpYW5zLCB5Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnMsIGFuZCB0YWlNaW51c1V0Y1NlY29uZHMgY29sdW1ucyIpO2xldCBjPXQuX3NhbXBsZXM9ZS5zYW1wbGVzLGw9dC5fZGF0ZXM9W107dC5fZGF0ZUNvbHVtbj1uLHQuX3hQb2xlV2FuZGVyUmFkaWFuc0NvbHVtbj1vLHQuX3lQb2xlV2FuZGVyUmFkaWFuc0NvbHVtbj1yLHQuX3V0MU1pbnVzVXRjU2Vjb25kc0NvbHVtbj1pLHQuX3hDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFuc0NvbHVtbj1zLHQuX3lDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFuc0NvbHVtbj1mLHQuX3RhaU1pbnVzVXRjU2Vjb25kc0NvbHVtbj11LHQuX2NvbHVtbkNvdW50PWUuY29sdW1uTmFtZXMubGVuZ3RoLHQuX2xhc3RJbmRleD12b2lkIDA7bGV0IHAsZD10Ll9hZGROZXdMZWFwU2Vjb25kcztmb3IobGV0IG09MCxfPWMubGVuZ3RoO208XzttKz10Ll9jb2x1bW5Db3VudCl7bGV0IGc9Y1ttK25dLGI9Y1ttK3VdLFQ9Zyt5bi5NT0RJRklFRF9KVUxJQU5fREFURV9ESUZGRVJFTkNFLE89bmV3IEduKFQsYixPZS5UQUkpO2lmKGwucHVzaChPKSxkKXtpZihiIT09cCYmaChwKSl7bGV0IEU9R24ubGVhcFNlY29uZHMsdz1WcyhFLE8sUHgpO2lmKHc8MCl7bGV0IEM9bmV3IFdlKE8sYik7RS5zcGxpY2UofncsMCxDKX19cD1ifX19ZnVuY3Rpb24geEEodCxlLG4sbyxyKXtsZXQgaT1uKm87ci54UG9sZVdhbmRlcj1lW2krdC5feFBvbGVXYW5kZXJSYWRpYW5zQ29sdW1uXSxyLnlQb2xlV2FuZGVyPWVbaSt0Ll95UG9sZVdhbmRlclJhZGlhbnNDb2x1bW5dLHIueFBvbGVPZmZzZXQ9ZVtpK3QuX3hDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFuc0NvbHVtbl0sci55UG9sZU9mZnNldD1lW2krdC5feUNlbGVzdGlhbFBvbGVPZmZzZXRSYWRpYW5zQ29sdW1uXSxyLnV0MU1pbnVzVXRjPWVbaSt0Ll91dDFNaW51c1V0Y1NlY29uZHNDb2x1bW5dfWZ1bmN0aW9uIG1mKHQsZSxuKXtyZXR1cm4gZSt0KihuLWUpfWZ1bmN0aW9uIFBBKHQsZSxuLG8scixpLHMpe2xldCBmPXQuX2NvbHVtbkNvdW50O2lmKGk+ZS5sZW5ndGgtMSlyZXR1cm4gcy54UG9sZVdhbmRlcj0wLHMueVBvbGVXYW5kZXI9MCxzLnhQb2xlT2Zmc2V0PTAscy55UG9sZU9mZnNldD0wLHMudXQxTWludXNVdGM9MCxzO2xldCB1PWVbcl0sYz1lW2ldO2lmKHUuZXF1YWxzKGMpfHxvLmVxdWFscyh1KSlyZXR1cm4geEEodCxuLHIsZixzKSxzO2lmKG8uZXF1YWxzKGMpKXJldHVybiB4QSh0LG4saSxmLHMpLHM7bGV0IGw9R24uc2Vjb25kc0RpZmZlcmVuY2Uobyx1KS9Hbi5zZWNvbmRzRGlmZmVyZW5jZShjLHUpLHA9cipmLGQ9aSpmLG09bltwK3QuX3V0MU1pbnVzVXRjU2Vjb25kc0NvbHVtbl0sXz1uW2QrdC5fdXQxTWludXNVdGNTZWNvbmRzQ29sdW1uXSxnPV8tbTtpZihnPi41fHxnPC0uNSl7bGV0IGI9bltwK3QuX3RhaU1pbnVzVXRjU2Vjb25kc0NvbHVtbl0sVD1uW2QrdC5fdGFpTWludXNVdGNTZWNvbmRzQ29sdW1uXTtiIT09VCYmKGMuZXF1YWxzKG8pP209XzpfLT1ULWIpfXJldHVybiBzLnhQb2xlV2FuZGVyPW1mKGwsbltwK3QuX3hQb2xlV2FuZGVyUmFkaWFuc0NvbHVtbl0sbltkK3QuX3hQb2xlV2FuZGVyUmFkaWFuc0NvbHVtbl0pLHMueVBvbGVXYW5kZXI9bWYobCxuW3ArdC5feVBvbGVXYW5kZXJSYWRpYW5zQ29sdW1uXSxuW2QrdC5feVBvbGVXYW5kZXJSYWRpYW5zQ29sdW1uXSkscy54UG9sZU9mZnNldD1tZihsLG5bcCt0Ll94Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnNDb2x1bW5dLG5bZCt0Ll94Q2VsZXN0aWFsUG9sZU9mZnNldFJhZGlhbnNDb2x1bW5dKSxzLnlQb2xlT2Zmc2V0PW1mKGwsbltwK3QuX3lDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFuc0NvbHVtbl0sbltkK3QuX3lDZWxlc3RpYWxQb2xlT2Zmc2V0UmFkaWFuc0NvbHVtbl0pLHMudXQxTWludXNVdGM9bWYobCxtLF8pLHN9dmFyIE1BLE5BPSQoKCk9PntObSgpO1d0KCk7eWUoKTtmdCgpO0ltKCk7dHAoKTtGbSgpO2RmKCk7SnIoKTtYbCgpO1lsKCk7aGYuZnJvbVVybD1hc3luYyBmdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgidXJsIix0KSxlPWU/P0l0LkVNUFRZX09CSkVDVDtsZXQgbj1vaS5jcmVhdGVJZk5lZWRlZCh0KSxvO3RyeXtvPWF3YWl0IG4uZmV0Y2hKc29uKCl9Y2F0Y2h7dGhyb3cgbmV3IEFlKGBBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZXRyaWV2aW5nIHRoZSBFT1AgZGF0YSBmcm9tIHRoZSBVUkwgJHtuLnVybH0uYCl9cmV0dXJuIG5ldyBoZih7YWRkTmV3TGVhcFNlY29uZHM6ZS5hZGROZXdMZWFwU2Vjb25kcyxkYXRhOm99KX07aGYuTk9ORT1PYmplY3QuZnJlZXplKHtjb21wdXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgoZSk/KGUueFBvbGVXYW5kZXI9MCxlLnlQb2xlV2FuZGVyPTAsZS54UG9sZU9mZnNldD0wLGUueVBvbGVPZmZzZXQ9MCxlLnV0MU1pbnVzVXRjPTApOmU9bmV3IGNmKDAsMCwwLDAsMCksZX19KTtoZi5wcm90b3R5cGUuY29tcHV0ZT1mdW5jdGlvbih0LGUpe2lmKCFoKHRoaXMuX3NhbXBsZXMpKXJldHVybjtpZihoKGUpfHwoZT1uZXcgY2YoMCwwLDAsMCwwKSksdGhpcy5fc2FtcGxlcy5sZW5ndGg9PT0wKXJldHVybiBlLnhQb2xlV2FuZGVyPTAsZS55UG9sZVdhbmRlcj0wLGUueFBvbGVPZmZzZXQ9MCxlLnlQb2xlT2Zmc2V0PTAsZS51dDFNaW51c1V0Yz0wLGU7bGV0IG49dGhpcy5fZGF0ZXMsbz10aGlzLl9sYXN0SW5kZXgscj0wLGk9MDtpZihoKG8pKXtsZXQgZj1uW29dLHU9bltvKzFdLGM9R24ubGVzc1RoYW5PckVxdWFscyhmLHQpLGw9IWgodSkscD1sfHxHbi5ncmVhdGVyVGhhbk9yRXF1YWxzKHUsdCk7aWYoYyYmcClyZXR1cm4gcj1vLCFsJiZ1LmVxdWFscyh0KSYmKytyLGk9cisxLFBBKHRoaXMsbix0aGlzLl9zYW1wbGVzLHQscixpLGUpLGV9bGV0IHM9VnMobix0LEduLmNvbXBhcmUsdGhpcy5fZGF0ZUNvbHVtbik7cmV0dXJuIHM+PTA/KHM8bi5sZW5ndGgtMSYmbltzKzFdLmVxdWFscyh0KSYmKytzLHI9cyxpPXMpOihpPX5zLHI9aS0xLHI8MCYmKHI9MCkpLHRoaXMuX2xhc3RJbmRleD1yLFBBKHRoaXMsbix0aGlzLl9zYW1wbGVzLHQscixpLGUpLGV9O01BPWhmfSk7ZnVuY3Rpb24gd28odCxlLG4pe3RoaXMuaGVhZGluZz10Pz8wLHRoaXMucGl0Y2g9ZT8/MCx0aGlzLnJvbGw9bj8/MH12YXIgbXAsSUE9JCgoKT0+e2Z0KCk7anQoKTtLdCgpO3dvLmZyb21RdWF0ZXJuaW9uPWZ1bmN0aW9uKHQsZSl7aWYoIWgodCkpdGhyb3cgbmV3IEQoInF1YXRlcm5pb24gaXMgcmVxdWlyZWQiKTtoKGUpfHwoZT1uZXcgd28pO2xldCBuPTIqKHQudyp0LnktdC56KnQueCksbz0xLTIqKHQueCp0LngrdC55KnQueSkscj0yKih0LncqdC54K3QueSp0LnopLGk9MS0yKih0LnkqdC55K3Queip0LnopLHM9MioodC53KnQueit0LngqdC55KTtyZXR1cm4gZS5oZWFkaW5nPS1NYXRoLmF0YW4yKHMsaSksZS5yb2xsPU1hdGguYXRhbjIocixvKSxlLnBpdGNoPS1QLmFzaW5DbGFtcGVkKG4pLGV9O3dvLmZyb21EZWdyZWVzPWZ1bmN0aW9uKHQsZSxuLG8pe2lmKCFoKHQpKXRocm93IG5ldyBEKCJoZWFkaW5nIGlzIHJlcXVpcmVkIik7aWYoIWgoZSkpdGhyb3cgbmV3IEQoInBpdGNoIGlzIHJlcXVpcmVkIik7aWYoIWgobikpdGhyb3cgbmV3IEQoInJvbGwgaXMgcmVxdWlyZWQiKTtyZXR1cm4gaChvKXx8KG89bmV3IHdvKSxvLmhlYWRpbmc9dCpQLlJBRElBTlNfUEVSX0RFR1JFRSxvLnBpdGNoPWUqUC5SQURJQU5TX1BFUl9ERUdSRUUsby5yb2xsPW4qUC5SQURJQU5TX1BFUl9ERUdSRUUsb307d28uY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihoKHQpKXJldHVybiBoKGUpPyhlLmhlYWRpbmc9dC5oZWFkaW5nLGUucGl0Y2g9dC5waXRjaCxlLnJvbGw9dC5yb2xsLGUpOm5ldyB3byh0LmhlYWRpbmcsdC5waXRjaCx0LnJvbGwpfTt3by5lcXVhbHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PWV8fGgodCkmJmgoZSkmJnQuaGVhZGluZz09PWUuaGVhZGluZyYmdC5waXRjaD09PWUucGl0Y2gmJnQucm9sbD09PWUucm9sbH07d28uZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbixvKXtyZXR1cm4gdD09PWV8fGgodCkmJmgoZSkmJlAuZXF1YWxzRXBzaWxvbih0LmhlYWRpbmcsZS5oZWFkaW5nLG4sbykmJlAuZXF1YWxzRXBzaWxvbih0LnBpdGNoLGUucGl0Y2gsbixvKSYmUC5lcXVhbHNFcHNpbG9uKHQucm9sbCxlLnJvbGwsbixvKX07d28ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiB3by5jbG9uZSh0aGlzLHQpfTt3by5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiB3by5lcXVhbHModGhpcyx0KX07d28ucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlLG4pe3JldHVybiB3by5lcXVhbHNFcHNpbG9uKHRoaXMsdCxlLG4pfTt3by5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5gKCR7dGhpcy5oZWFkaW5nfSwgJHt0aGlzLnBpdGNofSwgJHt0aGlzLnJvbGx9KWB9O21wPXdvfSk7ZnVuY3Rpb24gTXgoKXtsZXQgdD1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0Iik7Zm9yKGxldCBlPTAsbj10Lmxlbmd0aDtlPG47KytlKXtsZXQgbz10W2VdLmdldEF0dHJpYnV0ZSgic3JjIikscj1GQS5leGVjKG8pO2lmKHIhPT1udWxsKXJldHVybiByWzFdfX1mdW5jdGlvbiBMQSh0KXtyZXR1cm4gdHlwZW9mIGRvY3VtZW50PiJ1Ij90OihoKGhwKXx8KGhwPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSksaHAuaHJlZj10LGhwLmhyZWYpfWZ1bmN0aW9uIERBKCl7aWYoaChLcykpcmV0dXJuIEtzO2xldCB0O2lmKHR5cGVvZiBDRVNJVU1fQkFTRV9VUkw8InUiP3Q9Q0VTSVVNX0JBU0VfVVJMOmgodkE/LnVybCk/dD1mZigiLiIsdkEudXJsKTp0eXBlb2YgZGVmaW5lPT0ib2JqZWN0IiYmaChkZWZpbmUuYW1kKSYmIWRlZmluZS5hbWQudG9VcmxVbmRlZmluZWQmJmgocHIudG9VcmwpP3Q9ZmYoIi4uIixXcygiQ29yZS9idWlsZE1vZHVsZVVybC5qcyIpKTp0PU14KCksIWgodCkpdGhyb3cgbmV3IEQoIlVuYWJsZSB0byBkZXRlcm1pbmUgQ2VzaXVtIGJhc2UgVVJMIGF1dG9tYXRpY2FsbHksIHRyeSBkZWZpbmluZyBhIGdsb2JhbCB2YXJpYWJsZSBjYWxsZWQgQ0VTSVVNX0JBU0VfVVJMLiIpO3JldHVybiBLcz1uZXcgb2koe3VybDpMQSh0KX0pLEtzLmFwcGVuZEZvcndhcmRTbGFzaCgpLEtzfWZ1bmN0aW9uIE54KHQpe3JldHVybiBMQShwci50b1VybChgLi4vJHt0fWApKX1mdW5jdGlvbiBCQSh0KXtyZXR1cm4gREEoKS5nZXREZXJpdmVkUmVzb3VyY2Uoe3VybDp0fSkudXJsfWZ1bmN0aW9uIFdzKHQpe3JldHVybiBoKF9wKXx8KHR5cGVvZiBkZWZpbmU9PSJvYmplY3QiJiZoKGRlZmluZS5hbWQpJiYhZGVmaW5lLmFtZC50b1VybFVuZGVmaW5lZCYmaChwci50b1VybCk/X3A9Tng6X3A9QkEpLF9wKHQpfXZhciB2QSxGQSxocCxLcyxfcCx5cCxYbT0kKCgpPT57ZnQoKTtqdCgpO0dtKCk7ZGYoKTt2QT17fSxGQT0vKCg/Oi4qXC8pfF4pQ2VzaXVtXC5qcyg/Olw/fFwjfCQpLztXcy5fY2VzaXVtU2NyaXB0UmVnZXg9RkE7V3MuX2J1aWxkTW9kdWxlVXJsRnJvbUJhc2VVcmw9QkE7V3MuX2NsZWFyQmFzZVJlc291cmNlPWZ1bmN0aW9uKCl7S3M9dm9pZCAwfTtXcy5zZXRCYXNlVXJsPWZ1bmN0aW9uKHQpe0tzPW9pLkRFRkFVTFQuZ2V0RGVyaXZlZFJlc291cmNlKHt1cmw6dH0pfTtXcy5nZXRDZXNpdW1CYXNlVXJsPURBO3lwPVdzfSk7ZnVuY3Rpb24gSXgodCxlLG4pe3RoaXMueD10LHRoaXMueT1lLHRoaXMucz1ufXZhciBncCxZbT0kKCgpPT57Z3A9SXh9KTtmdW5jdGlvbiBRbSh0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVCx0aGlzLl94eXNGaWxlVXJsVGVtcGxhdGU9b2kuY3JlYXRlSWZOZWVkZWQodC54eXNGaWxlVXJsVGVtcGxhdGUpLHRoaXMuX2ludGVycG9sYXRpb25PcmRlcj10LmludGVycG9sYXRpb25PcmRlcj8/OSx0aGlzLl9zYW1wbGVaZXJvSnVsaWFuRXBoZW1lcmlzRGF0ZT10LnNhbXBsZVplcm9KdWxpYW5FcGhlbWVyaXNEYXRlPz8yNDQyMzk2NWUtMSx0aGlzLl9zYW1wbGVaZXJvRGF0ZVRUPW5ldyBHbih0aGlzLl9zYW1wbGVaZXJvSnVsaWFuRXBoZW1lcmlzRGF0ZSwwLE9lLlRBSSksdGhpcy5fc3RlcFNpemVEYXlzPXQuc3RlcFNpemVEYXlzPz8xLHRoaXMuX3NhbXBsZXNQZXJYeXNGaWxlPXQuc2FtcGxlc1Blclh5c0ZpbGU/PzFlMyx0aGlzLl90b3RhbFNhbXBsZXM9dC50b3RhbFNhbXBsZXM/PzI3NDI2LHRoaXMuX3NhbXBsZXM9bmV3IEFycmF5KHRoaXMuX3RvdGFsU2FtcGxlcyozKSx0aGlzLl9jaHVua0Rvd25sb2Fkc0luUHJvZ3Jlc3M9W107bGV0IGU9dGhpcy5faW50ZXJwb2xhdGlvbk9yZGVyLG49dGhpcy5fZGVub21pbmF0b3JzPW5ldyBBcnJheShlKzEpLG89dGhpcy5feFRhYmxlPW5ldyBBcnJheShlKzEpLHI9TWF0aC5wb3codGhpcy5fc3RlcFNpemVEYXlzLGUpO2ZvcihsZXQgaT0wO2k8PWU7KytpKXtuW2ldPXIsb1tpXT1pKnRoaXMuX3N0ZXBTaXplRGF5cztmb3IobGV0IHM9MDtzPD1lOysrcylzIT09aSYmKG5baV0qPWktcyk7bltpXT0xL25baV19dGhpcy5fd29yaz1uZXcgQXJyYXkoZSsxKSx0aGlzLl9jb2VmPW5ldyBBcnJheShlKzEpfWZ1bmN0aW9uICRtKHQsZSxuKXtsZXQgbz12eDtyZXR1cm4gby5kYXlOdW1iZXI9ZSxvLnNlY29uZHNPZkRheT1uLEduLmRheXNEaWZmZXJlbmNlKG8sdC5fc2FtcGxlWmVyb0RhdGVUVCl9ZnVuY3Rpb24gWm0odCxlKXtpZih0Ll9jaHVua0Rvd25sb2Fkc0luUHJvZ3Jlc3NbZV0pcmV0dXJuIHQuX2NodW5rRG93bmxvYWRzSW5Qcm9ncmVzc1tlXTtsZXQgbixvPXQuX3h5c0ZpbGVVcmxUZW1wbGF0ZTtoKG8pP249by5nZXREZXJpdmVkUmVzb3VyY2Uoe3RlbXBsYXRlVmFsdWVzOnswOmV9fSk6bj1uZXcgb2koe3VybDp5cChgQXNzZXRzL0lBVTIwMDZfWFlTL0lBVTIwMDZfWFlTXyR7ZX0uanNvbmApfSk7bGV0IHI9bi5mZXRjaEpzb24oKS50aGVuKGZ1bmN0aW9uKGkpe3QuX2NodW5rRG93bmxvYWRzSW5Qcm9ncmVzc1tlXT0hMTtsZXQgcz10Ll9zYW1wbGVzLGY9aS5zYW1wbGVzLHU9ZSp0Ll9zYW1wbGVzUGVyWHlzRmlsZSozO2ZvcihsZXQgYz0wLGw9Zi5sZW5ndGg7YzxsOysrYylzW3UrY109ZltjXX0pO3JldHVybiB0Ll9jaHVua0Rvd25sb2Fkc0luUHJvZ3Jlc3NbZV09cixyfXZhciB2eCxVQSxrQT0kKCgpPT57WG0oKTt5ZSgpO2Z0KCk7WW0oKTt0cCgpO2RmKCk7WWwoKTt2eD1uZXcgR24oMCwwLE9lLlRBSSk7UW0ucHJvdG90eXBlLnByZWxvYWQ9ZnVuY3Rpb24odCxlLG4sbyl7bGV0IHI9JG0odGhpcyx0LGUpLGk9JG0odGhpcyxuLG8pLHM9ci90aGlzLl9zdGVwU2l6ZURheXMtdGhpcy5faW50ZXJwb2xhdGlvbk9yZGVyLzJ8MDtzPDAmJihzPTApO2xldCBmPWkvdGhpcy5fc3RlcFNpemVEYXlzLXRoaXMuX2ludGVycG9sYXRpb25PcmRlci8yfDArdGhpcy5faW50ZXJwb2xhdGlvbk9yZGVyO2Y+PXRoaXMuX3RvdGFsU2FtcGxlcyYmKGY9dGhpcy5fdG90YWxTYW1wbGVzLTEpO2xldCB1PXMvdGhpcy5fc2FtcGxlc1Blclh5c0ZpbGV8MCxjPWYvdGhpcy5fc2FtcGxlc1Blclh5c0ZpbGV8MCxsPVtdO2ZvcihsZXQgcD11O3A8PWM7KytwKWwucHVzaChabSh0aGlzLHApKTtyZXR1cm4gUHJvbWlzZS5hbGwobCl9O1FtLnByb3RvdHlwZS5jb21wdXRlWHlzUmFkaWFucz1mdW5jdGlvbih0LGUsbil7bGV0IG89JG0odGhpcyx0LGUpO2lmKG88MClyZXR1cm47bGV0IHI9by90aGlzLl9zdGVwU2l6ZURheXN8MDtpZihyPj10aGlzLl90b3RhbFNhbXBsZXMpcmV0dXJuO2xldCBpPXRoaXMuX2ludGVycG9sYXRpb25PcmRlcixzPXItKGkvMnwwKTtzPDAmJihzPTApO2xldCBmPXMraTtmPj10aGlzLl90b3RhbFNhbXBsZXMmJihmPXRoaXMuX3RvdGFsU2FtcGxlcy0xLHM9Zi1pLHM8MCYmKHM9MCkpO2xldCB1PSExLGM9dGhpcy5fc2FtcGxlcztpZihoKGNbcyozXSl8fChabSh0aGlzLHMvdGhpcy5fc2FtcGxlc1Blclh5c0ZpbGV8MCksdT0hMCksaChjW2YqM10pfHwoWm0odGhpcyxmL3RoaXMuX3NhbXBsZXNQZXJYeXNGaWxlfDApLHU9ITApLHUpcmV0dXJuO2gobik/KG4ueD0wLG4ueT0wLG4ucz0wKTpuPW5ldyBncCgwLDAsMCk7bGV0IGw9by1zKnRoaXMuX3N0ZXBTaXplRGF5cyxwPXRoaXMuX3dvcmssZD10aGlzLl9kZW5vbWluYXRvcnMsbT10aGlzLl9jb2VmLF89dGhpcy5feFRhYmxlLGcsYjtmb3IoZz0wO2c8PWk7KytnKXBbZ109bC1fW2ddO2ZvcihnPTA7Zzw9aTsrK2cpe2ZvcihtW2ddPTEsYj0wO2I8PWk7KytiKWIhPT1nJiYobVtnXSo9cFtiXSk7bVtnXSo9ZFtnXTtsZXQgVD0ocytnKSozO24ueCs9bVtnXSpjW1QrK10sbi55Kz1tW2ddKmNbVCsrXSxuLnMrPW1bZ10qY1tUXX1yZXR1cm4gbn07VUE9UW19KTt2YXIgb3MsTm4scW8sR0EsVkE9JCgoKT0+e2Z0KCk7Tm49e3JlcXVlc3RGdWxsc2NyZWVuOnZvaWQgMCxleGl0RnVsbHNjcmVlbjp2b2lkIDAsZnVsbHNjcmVlbkVuYWJsZWQ6dm9pZCAwLGZ1bGxzY3JlZW5FbGVtZW50OnZvaWQgMCxmdWxsc2NyZWVuY2hhbmdlOnZvaWQgMCxmdWxsc2NyZWVuZXJyb3I6dm9pZCAwfSxxbz17fTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhxbyx7ZWxlbWVudDp7Z2V0OmZ1bmN0aW9uKCl7aWYocW8uc3VwcG9ydHNGdWxsc2NyZWVuKCkpcmV0dXJuIGRvY3VtZW50W05uLmZ1bGxzY3JlZW5FbGVtZW50XX19LGNoYW5nZUV2ZW50TmFtZTp7Z2V0OmZ1bmN0aW9uKCl7aWYocW8uc3VwcG9ydHNGdWxsc2NyZWVuKCkpcmV0dXJuIE5uLmZ1bGxzY3JlZW5jaGFuZ2V9fSxlcnJvckV2ZW50TmFtZTp7Z2V0OmZ1bmN0aW9uKCl7aWYocW8uc3VwcG9ydHNGdWxsc2NyZWVuKCkpcmV0dXJuIE5uLmZ1bGxzY3JlZW5lcnJvcn19LGVuYWJsZWQ6e2dldDpmdW5jdGlvbigpe2lmKHFvLnN1cHBvcnRzRnVsbHNjcmVlbigpKXJldHVybiBkb2N1bWVudFtObi5mdWxsc2NyZWVuRW5hYmxlZF19fSxmdWxsc2NyZWVuOntnZXQ6ZnVuY3Rpb24oKXtpZihxby5zdXBwb3J0c0Z1bGxzY3JlZW4oKSlyZXR1cm4gcW8uZWxlbWVudCE9PW51bGx9fX0pO3FvLnN1cHBvcnRzRnVsbHNjcmVlbj1mdW5jdGlvbigpe2lmKGgob3MpKXJldHVybiBvcztvcz0hMTtsZXQgdD1kb2N1bWVudC5ib2R5O2lmKHR5cGVvZiB0LnJlcXVlc3RGdWxsc2NyZWVuPT0iZnVuY3Rpb24iKXJldHVybiBObi5yZXF1ZXN0RnVsbHNjcmVlbj0icmVxdWVzdEZ1bGxzY3JlZW4iLE5uLmV4aXRGdWxsc2NyZWVuPSJleGl0RnVsbHNjcmVlbiIsTm4uZnVsbHNjcmVlbkVuYWJsZWQ9ImZ1bGxzY3JlZW5FbmFibGVkIixObi5mdWxsc2NyZWVuRWxlbWVudD0iZnVsbHNjcmVlbkVsZW1lbnQiLE5uLmZ1bGxzY3JlZW5jaGFuZ2U9ImZ1bGxzY3JlZW5jaGFuZ2UiLE5uLmZ1bGxzY3JlZW5lcnJvcj0iZnVsbHNjcmVlbmVycm9yIixvcz0hMCxvcztsZXQgZT1bIndlYmtpdCIsIm1veiIsIm8iLCJtcyIsImtodG1sIl0sbjtmb3IobGV0IG89MCxyPWUubGVuZ3RoO288cjsrK28pe2xldCBpPWVbb107bj1gJHtpfVJlcXVlc3RGdWxsc2NyZWVuYCx0eXBlb2YgdFtuXT09ImZ1bmN0aW9uIj8oTm4ucmVxdWVzdEZ1bGxzY3JlZW49bixvcz0hMCk6KG49YCR7aX1SZXF1ZXN0RnVsbFNjcmVlbmAsdHlwZW9mIHRbbl09PSJmdW5jdGlvbiImJihObi5yZXF1ZXN0RnVsbHNjcmVlbj1uLG9zPSEwKSksbj1gJHtpfUV4aXRGdWxsc2NyZWVuYCx0eXBlb2YgZG9jdW1lbnRbbl09PSJmdW5jdGlvbiI/Tm4uZXhpdEZ1bGxzY3JlZW49bjoobj1gJHtpfUNhbmNlbEZ1bGxTY3JlZW5gLHR5cGVvZiBkb2N1bWVudFtuXT09ImZ1bmN0aW9uIiYmKE5uLmV4aXRGdWxsc2NyZWVuPW4pKSxuPWAke2l9RnVsbHNjcmVlbkVuYWJsZWRgLGRvY3VtZW50W25dIT09dm9pZCAwP05uLmZ1bGxzY3JlZW5FbmFibGVkPW46KG49YCR7aX1GdWxsU2NyZWVuRW5hYmxlZGAsZG9jdW1lbnRbbl0hPT12b2lkIDAmJihObi5mdWxsc2NyZWVuRW5hYmxlZD1uKSksbj1gJHtpfUZ1bGxzY3JlZW5FbGVtZW50YCxkb2N1bWVudFtuXSE9PXZvaWQgMD9Obi5mdWxsc2NyZWVuRWxlbWVudD1uOihuPWAke2l9RnVsbFNjcmVlbkVsZW1lbnRgLGRvY3VtZW50W25dIT09dm9pZCAwJiYoTm4uZnVsbHNjcmVlbkVsZW1lbnQ9bikpLG49YCR7aX1mdWxsc2NyZWVuY2hhbmdlYCxkb2N1bWVudFtgb24ke259YF0hPT12b2lkIDAmJihpPT09Im1zIiYmKG49Ik1TRnVsbHNjcmVlbkNoYW5nZSIpLE5uLmZ1bGxzY3JlZW5jaGFuZ2U9biksbj1gJHtpfWZ1bGxzY3JlZW5lcnJvcmAsZG9jdW1lbnRbYG9uJHtufWBdIT09dm9pZCAwJiYoaT09PSJtcyImJihuPSJNU0Z1bGxzY3JlZW5FcnJvciIpLE5uLmZ1bGxzY3JlZW5lcnJvcj1uKX1yZXR1cm4gb3N9O3FvLnJlcXVlc3RGdWxsc2NyZWVuPWZ1bmN0aW9uKHQsZSl7cW8uc3VwcG9ydHNGdWxsc2NyZWVuKCkmJnRbTm4ucmVxdWVzdEZ1bGxzY3JlZW5dKHt2ckRpc3BsYXk6ZX0pfTtxby5leGl0RnVsbHNjcmVlbj1mdW5jdGlvbigpe3FvLnN1cHBvcnRzRnVsbHNjcmVlbigpJiZkb2N1bWVudFtObi5leGl0RnVsbHNjcmVlbl0oKX07cW8uX25hbWVzPU5uO0dBPXFvfSk7ZnVuY3Rpb24gWHModCl7bGV0IGU9dC5zcGxpdCgiLiIpO2ZvcihsZXQgbj0wLG89ZS5sZW5ndGg7bjxvOysrbillW25dPXBhcnNlSW50KGVbbl0sMTApO3JldHVybiBlfWZ1bmN0aW9uIHJoKCl7aWYoIWgoQXApJiYoQXA9ITEsIVJwKCkpKXtsZXQgdD0vIENocm9tZVwvKFtcLjAtOV0rKS8uZXhlYyhFby51c2VyQWdlbnQpO3QhPT1udWxsJiYoQXA9ITAsekE9WHModFsxXSkpfXJldHVybiBBcH1mdW5jdGlvbiBGeCgpe3JldHVybiByaCgpJiZ6QX1mdW5jdGlvbiBIQSgpe2lmKCFoKGJwKSYmKGJwPSExLCFyaCgpJiYhUnAoKSYmLyBTYWZhcmlcL1tcLjAtOV0rLy50ZXN0KEVvLnVzZXJBZ2VudCkpKXtsZXQgdD0vIFZlcnNpb25cLyhbXC4wLTldKykvLmV4ZWMoRW8udXNlckFnZW50KTt0IT09bnVsbCYmKGJwPSEwLGpBPVhzKHRbMV0pKX1yZXR1cm4gYnB9ZnVuY3Rpb24gTHgoKXtyZXR1cm4gSEEoKSYmakF9ZnVuY3Rpb24gcUEoKXtpZighaChUcCkpe1RwPSExO2xldCB0PS8gQXBwbGVXZWJLaXRcLyhbXC4wLTldKykoXCs/KS8uZXhlYyhFby51c2VyQWdlbnQpO3QhPT1udWxsJiYoVHA9ITAsbmg9WHModFsxXSksbmguaXNOaWdodGx5PSEhdFsyXSl9cmV0dXJuIFRwfWZ1bmN0aW9uIER4KCl7cmV0dXJuIHFBKCkmJm5ofWZ1bmN0aW9uIEtBKCl7aWYoIWgoX2YpKXtfZj0hMTtsZXQgdDtFby5hcHBOYW1lPT09Ik1pY3Jvc29mdCBJbnRlcm5ldCBFeHBsb3JlciI/KHQ9L01TSUUgKFswLTldezEsfVtcLjAtOV17MCx9KS8uZXhlYyhFby51c2VyQWdlbnQpLHQhPT1udWxsJiYoX2Y9ITAsb2g9WHModFsxXSkpKTpFby5hcHBOYW1lPT09Ik5ldHNjYXBlIiYmKHQ9L1RyaWRlbnRcLy4qcnY6KFswLTldezEsfVtcLjAtOV17MCx9KS8uZXhlYyhFby51c2VyQWdlbnQpLHQhPT1udWxsJiYoX2Y9ITAsb2g9WHModFsxXSkpKX1yZXR1cm4gX2Z9ZnVuY3Rpb24gQngoKXtyZXR1cm4gS0EoKSYmb2h9ZnVuY3Rpb24gUnAoKXtpZighaCh3cCkpe3dwPSExO2xldCB0PS8gRWRnXC8oW1wuMC05XSspLy5leGVjKEVvLnVzZXJBZ2VudCk7dCE9PW51bGwmJih3cD0hMCxXQT1Ycyh0WzFdKSl9cmV0dXJuIHdwfWZ1bmN0aW9uIFV4KCl7cmV0dXJuIFJwKCkmJldBfWZ1bmN0aW9uIFNwKCl7aWYoIWgoT3ApKXtPcD0hMTtsZXQgdD0vRmlyZWZveFwvKFtcLjAtOV0rKS8uZXhlYyhFby51c2VyQWdlbnQpO3QhPT1udWxsJiYoT3A9ITAsaWg9WHModFsxXSkpfXJldHVybiBPcH1mdW5jdGlvbiBreCgpe3JldHVybiBoKEptKXx8KEptPS9XaW5kb3dzL2kudGVzdChFby5hcHBWZXJzaW9uKSksSm19ZnVuY3Rpb24gR3goKXtyZXR1cm4gaCh0aCl8fCh0aD1uYXZpZ2F0b3IucGxhdGZvcm09PT0iaVBob25lInx8bmF2aWdhdG9yLnBsYXRmb3JtPT09ImlQb2QifHxuYXZpZ2F0b3IucGxhdGZvcm09PT0iaVBhZCIpLHRofWZ1bmN0aW9uIFZ4KCl7cmV0dXJuIFNwKCkmJmlofWZ1bmN0aW9uIHp4KCl7cmV0dXJuIGgoZWgpfHwoZWg9IVNwKCkmJnR5cGVvZiBQb2ludGVyRXZlbnQ8InUiJiYoIWgoRW8ucG9pbnRlckVuYWJsZWQpfHxFby5wb2ludGVyRW5hYmxlZCkpLGVofWZ1bmN0aW9uIFlBKCl7aWYoIWgoRXApKXtsZXQgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTt0LnNldEF0dHJpYnV0ZSgic3R5bGUiLCJpbWFnZS1yZW5kZXJpbmc6IC1tb3otY3Jpc3AtZWRnZXM7aW1hZ2UtcmVuZGVyaW5nOiBwaXhlbGF0ZWQ7Iik7bGV0IGU9dC5zdHlsZS5pbWFnZVJlbmRlcmluZztFcD1oKGUpJiZlIT09IiIsRXAmJihYQT1lKX1yZXR1cm4gRXB9ZnVuY3Rpb24gangoKXtyZXR1cm4gWUEoKT9YQTp2b2lkIDB9ZnVuY3Rpb24gT28oKXtpZighT28uaW5pdGlhbGl6ZWQpdGhyb3cgbmV3IEQoIllvdSBtdXN0IGNhbGwgRmVhdHVyZURldGVjdGlvbi5zdXBwb3J0c1dlYlAuaW5pdGlhbGl6ZSBhbmQgd2FpdCBmb3IgdGhlIHByb21pc2UgdG8gcmVzb2x2ZSBiZWZvcmUgY2FsbGluZyBGZWF0dXJlRGV0ZWN0aW9uLnN1cHBvcnRzV2ViUCIpO3JldHVybiBPby5fcmVzdWx0fXZhciBFbyxBcCx6QSxicCxqQSxUcCxuaCxfZixvaCx3cCxXQSxPcCxpaCxKbSx0aCxlaCxYQSxFcCxKYyx5cixZcyxzaD0kKCgpPT57V3QoKTtmdCgpO2p0KCk7VkEoKTt0eXBlb2YgbmF2aWdhdG9yPCJ1Ij9Fbz1uYXZpZ2F0b3I6RW89e307T28uX3Byb21pc2U9dm9pZCAwO09vLl9yZXN1bHQ9dm9pZCAwO09vLmluaXRpYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gaChPby5fcHJvbWlzZSl8fChPby5fcHJvbWlzZT1uZXcgUHJvbWlzZSh0PT57bGV0IGU9bmV3IEltYWdlO2Uub25sb2FkPWZ1bmN0aW9uKCl7T28uX3Jlc3VsdD1lLndpZHRoPjAmJmUuaGVpZ2h0PjAsdChPby5fcmVzdWx0KX0sZS5vbmVycm9yPWZ1bmN0aW9uKCl7T28uX3Jlc3VsdD0hMSx0KE9vLl9yZXN1bHQpfSxlLnNyYz0iZGF0YTppbWFnZS93ZWJwO2Jhc2U2NCxVa2xHUmlJQUFBQlhSVUpRVmxBNElCWUFBQUF3QVFDZEFTb0JBQUVBRHNEK0phUUFBM0FBQUFBQSJ9KSksT28uX3Byb21pc2V9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE9vLHtpbml0aWFsaXplZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGgoT28uX3Jlc3VsdCl9fX0pO0pjPVtdO3R5cGVvZiBBcnJheUJ1ZmZlcjwidSImJihKYy5wdXNoKEludDhBcnJheSxVaW50OEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5KSx0eXBlb2YgVWludDhDbGFtcGVkQXJyYXk8InUiJiZKYy5wdXNoKFVpbnQ4Q2xhbXBlZEFycmF5KSx0eXBlb2YgVWludDhDbGFtcGVkQXJyYXk8InUiJiZKYy5wdXNoKFVpbnQ4Q2xhbXBlZEFycmF5KSx0eXBlb2YgQmlnSW50NjRBcnJheTwidSImJkpjLnB1c2goQmlnSW50NjRBcnJheSksdHlwZW9mIEJpZ1VpbnQ2NEFycmF5PCJ1IiYmSmMucHVzaChCaWdVaW50NjRBcnJheSkpO3lyPXtpc0Nocm9tZTpyaCxjaHJvbWVWZXJzaW9uOkZ4LGlzU2FmYXJpOkhBLHNhZmFyaVZlcnNpb246THgsaXNXZWJraXQ6cUEsd2Via2l0VmVyc2lvbjpEeCxpc0ludGVybmV0RXhwbG9yZXI6S0EsaW50ZXJuZXRFeHBsb3JlclZlcnNpb246QngsaXNFZGdlOlJwLGVkZ2VWZXJzaW9uOlV4LGlzRmlyZWZveDpTcCxmaXJlZm94VmVyc2lvbjpWeCxpc1dpbmRvd3M6a3gsaXNJUGFkT3JJT1M6R3gsaGFyZHdhcmVDb25jdXJyZW5jeTpFby5oYXJkd2FyZUNvbmN1cnJlbmN5Pz8zLHN1cHBvcnRzUG9pbnRlckV2ZW50czp6eCxzdXBwb3J0c0ltYWdlUmVuZGVyaW5nUGl4ZWxhdGVkOllBLHN1cHBvcnRzV2ViUDpPbyxpbWFnZVJlbmRlcmluZ1ZhbHVlOmp4LHR5cGVkQXJyYXlUeXBlczpKY307eXIuc3VwcG9ydHNCYXNpcz1mdW5jdGlvbih0KXtyZXR1cm4geXIuc3VwcG9ydHNXZWJBc3NlbWJseSgpJiZ0LmNvbnRleHQuc3VwcG9ydHNCYXNpc307eXIuc3VwcG9ydHNGdWxsc2NyZWVuPWZ1bmN0aW9uKCl7cmV0dXJuIEdBLnN1cHBvcnRzRnVsbHNjcmVlbigpfTt5ci5zdXBwb3J0c1R5cGVkQXJyYXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSJ9O3lyLnN1cHBvcnRzQmlnSW50NjRBcnJheT1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgQmlnSW50NjRBcnJheTwidSJ9O3lyLnN1cHBvcnRzQmlnVWludDY0QXJyYXk9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIEJpZ1VpbnQ2NEFycmF5PCJ1In07eXIuc3VwcG9ydHNCaWdJbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIEJpZ0ludDwidSJ9O3lyLnN1cHBvcnRzV2ViV29ya2Vycz1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgV29ya2VyPCJ1In07eXIuc3VwcG9ydHNXZWJBc3NlbWJseT1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgV2ViQXNzZW1ibHk8InUifTt5ci5zdXBwb3J0c1dlYmdsMj1mdW5jdGlvbih0KXtyZXR1cm4geS5kZWZpbmVkKCJzY2VuZSIsdCksdC5jb250ZXh0LndlYmdsMn07eXIuc3VwcG9ydHNFc21XZWJXb3JrZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIVNwKCl8fHBhcnNlSW50KGloKT49MTE0fTtZcz15cn0pO2Z1bmN0aW9uIE90KHQsZSxuLG8pe3RoaXMueD10Pz8wLHRoaXMueT1lPz8wLHRoaXMuej1uPz8wLHRoaXMudz1vPz8wfXZhciB5ZixIeCxxeCwkQSxaQSxjaCxRQSxDcCxhaCxEcixKQSx4cCxmaCx0Yix1aCxsaCxLeCxXeCxnZix0YSxYeCxlYixQcCxNcCx4aSxQaSx0ZSxLbz0kKCgpPT57THQoKTtXdCgpO2Z0KCk7c2goKTtLdCgpO0JuKCk7eWY9bmV3IGE7T3QuZnJvbUF4aXNBbmdsZT1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJheGlzIix0KSx5LnR5cGVPZi5udW1iZXIoImFuZ2xlIixlKTtsZXQgbz1lLzIscj1NYXRoLnNpbihvKTt5Zj1hLm5vcm1hbGl6ZSh0LHlmKTtsZXQgaT15Zi54KnIscz15Zi55KnIsZj15Zi56KnIsdT1NYXRoLmNvcyhvKTtyZXR1cm4gaChuKT8obi54PWksbi55PXMsbi56PWYsbi53PXUsbik6bmV3IE90KGkscyxmLHUpfTtIeD1bMSwyLDBdLHF4PW5ldyBBcnJheSgzKTtPdC5mcm9tUm90YXRpb25NYXRyaXg9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCk7bGV0IG4sbyxyLGkscyxmPXRbWi5DT0xVTU4wUk9XMF0sdT10W1ouQ09MVU1OMVJPVzFdLGM9dFtaLkNPTFVNTjJST1cyXSxsPWYrdStjO2lmKGw+MCluPU1hdGguc3FydChsKzEpLHM9LjUqbixuPS41L24sbz0odFtaLkNPTFVNTjFST1cyXS10W1ouQ09MVU1OMlJPVzFdKSpuLHI9KHRbWi5DT0xVTU4yUk9XMF0tdFtaLkNPTFVNTjBST1cyXSkqbixpPSh0W1ouQ09MVU1OMFJPVzFdLXRbWi5DT0xVTU4xUk9XMF0pKm47ZWxzZXtsZXQgcD1IeCxkPTA7dT5mJiYoZD0xKSxjPmYmJmM+dSYmKGQ9Mik7bGV0IG09cFtkXSxfPXBbbV07bj1NYXRoLnNxcnQodFtaLmdldEVsZW1lbnRJbmRleChkLGQpXS10W1ouZ2V0RWxlbWVudEluZGV4KG0sbSldLXRbWi5nZXRFbGVtZW50SW5kZXgoXyxfKV0rMSk7bGV0IGc9cXg7Z1tkXT0uNSpuLG49LjUvbixzPSh0W1ouZ2V0RWxlbWVudEluZGV4KF8sbSldLXRbWi5nZXRFbGVtZW50SW5kZXgobSxfKV0pKm4sZ1ttXT0odFtaLmdldEVsZW1lbnRJbmRleChtLGQpXSt0W1ouZ2V0RWxlbWVudEluZGV4KGQsbSldKSpuLGdbX109KHRbWi5nZXRFbGVtZW50SW5kZXgoXyxkKV0rdFtaLmdldEVsZW1lbnRJbmRleChkLF8pXSkqbixvPS1nWzBdLHI9LWdbMV0saT0tZ1syXX1yZXR1cm4gaChlKT8oZS54PW8sZS55PXIsZS56PWksZS53PXMsZSk6bmV3IE90KG8scixpLHMpfTskQT1uZXcgT3QsWkE9bmV3IE90LGNoPW5ldyBPdCxRQT1uZXcgT3Q7T3QuZnJvbUhlYWRpbmdQaXRjaFJvbGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJoZWFkaW5nUGl0Y2hSb2xsIix0KSxRQT1PdC5mcm9tQXhpc0FuZ2xlKGEuVU5JVF9YLHQucm9sbCwkQSksY2g9T3QuZnJvbUF4aXNBbmdsZShhLlVOSVRfWSwtdC5waXRjaCxlKSxlPU90Lm11bHRpcGx5KGNoLFFBLGNoKSxaQT1PdC5mcm9tQXhpc0FuZ2xlKGEuVU5JVF9aLC10LmhlYWRpbmcsJEEpLE90Lm11bHRpcGx5KFpBLGUsZSl9O0NwPW5ldyBhLGFoPW5ldyBhLERyPW5ldyBPdCxKQT1uZXcgT3QseHA9bmV3IE90O090LnBhY2tlZExlbmd0aD00O090LnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPW4/PzAsZVtuKytdPXQueCxlW24rK109dC55LGVbbisrXT10LnosZVtuXT10LncsZX07T3QudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS5kZWZpbmVkKCJhcnJheSIsdCksZT1lPz8wLGgobil8fChuPW5ldyBPdCksbi54PXRbZV0sbi55PXRbZSsxXSxuLno9dFtlKzJdLG4udz10W2UrM10sbn07T3QucGFja2VkSW50ZXJwb2xhdGlvbkxlbmd0aD0zO090LmNvbnZlcnRQYWNrZWRBcnJheUZvckludGVycG9sYXRpb249ZnVuY3Rpb24odCxlLG4sbyl7T3QudW5wYWNrKHQsbio0LHhwKSxPdC5jb25qdWdhdGUoeHAseHApO2ZvcihsZXQgcj0wLGk9bi1lKzE7cjxpO3IrKyl7bGV0IHM9ciozO090LnVucGFjayh0LChlK3IpKjQsRHIpLE90Lm11bHRpcGx5KERyLHhwLERyKSxEci53PDAmJk90Lm5lZ2F0ZShEcixEciksT3QuY29tcHV0ZUF4aXMoRHIsQ3ApO2xldCBmPU90LmNvbXB1dGVBbmdsZShEcik7aChvKXx8KG89W10pLG9bc109Q3AueCpmLG9bcysxXT1DcC55KmYsb1tzKzJdPUNwLnoqZn19O090LnVucGFja0ludGVycG9sYXRpb25SZXN1bHQ9ZnVuY3Rpb24odCxlLG4sbyxyKXtoKHIpfHwocj1uZXcgT3QpLGEuZnJvbUFycmF5KHQsMCxhaCk7bGV0IGk9YS5tYWduaXR1ZGUoYWgpO3JldHVybiBPdC51bnBhY2soZSxvKjQsSkEpLGk9PT0wP090LmNsb25lKE90LklERU5USVRZLERyKTpPdC5mcm9tQXhpc0FuZ2xlKGFoLGksRHIpLE90Lm11bHRpcGx5KERyLEpBLHIpfTtPdC5jbG9uZT1mdW5jdGlvbih0LGUpe2lmKGgodCkpcmV0dXJuIGgoZSk/KGUueD10LngsZS55PXQueSxlLno9dC56LGUudz10LncsZSk6bmV3IE90KHQueCx0LnksdC56LHQudyl9O090LmNvbmp1Z2F0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInF1YXRlcm5pb24iLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKSxlLng9LXQueCxlLnk9LXQueSxlLno9LXQueixlLnc9dC53LGV9O090Lm1hZ25pdHVkZVNxdWFyZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgicXVhdGVybmlvbiIsdCksdC54KnQueCt0LnkqdC55K3Queip0LnordC53KnQud307T3QubWFnbml0dWRlPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQoT3QubWFnbml0dWRlU3F1YXJlZCh0KSl9O090Lm5vcm1hbGl6ZT1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKTtsZXQgbj0xL090Lm1hZ25pdHVkZSh0KSxvPXQueCpuLHI9dC55Km4saT10LnoqbixzPXQudypuO3JldHVybiBlLng9byxlLnk9cixlLno9aSxlLnc9cyxlfTtPdC5pbnZlcnNlPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpO2xldCBuPU90Lm1hZ25pdHVkZVNxdWFyZWQodCk7cmV0dXJuIGU9T3QuY29uanVnYXRlKHQsZSksT3QubXVsdGlwbHlCeVNjYWxhcihlLDEvbixlKX07T3QuYWRkPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi54PXQueCtlLngsbi55PXQueStlLnksbi56PXQueitlLnosbi53PXQudytlLncsbn07T3Quc3VidHJhY3Q9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54LWUueCxuLnk9dC55LWUueSxuLno9dC56LWUueixuLnc9dC53LWUudyxufTtPdC5uZWdhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJxdWF0ZXJuaW9uIix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZS54PS10LngsZS55PS10LnksZS56PS10LnosZS53PS10LncsZX07T3QuZG90PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSksdC54KmUueCt0LnkqZS55K3QueiplLnordC53KmUud307T3QubXVsdGlwbHk9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pO2xldCBvPXQueCxyPXQueSxpPXQueixzPXQudyxmPWUueCx1PWUueSxjPWUueixsPWUudyxwPXMqZitvKmwrcipjLWkqdSxkPXMqdS1vKmMrcipsK2kqZixtPXMqYytvKnUtcipmK2kqbCxfPXMqbC1vKmYtcip1LWkqYztyZXR1cm4gbi54PXAsbi55PWQsbi56PW0sbi53PV8sbn07T3QubXVsdGlwbHlCeVNjYWxhcj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgicXVhdGVybmlvbiIsdCkseS50eXBlT2YubnVtYmVyKCJzY2FsYXIiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLng9dC54KmUsbi55PXQueSplLG4uej10LnoqZSxuLnc9dC53KmUsbn07T3QuZGl2aWRlQnlTY2FsYXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInF1YXRlcm5pb24iLHQpLHkudHlwZU9mLm51bWJlcigic2NhbGFyIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi54PXQueC9lLG4ueT10LnkvZSxuLno9dC56L2Usbi53PXQudy9lLG59O090LmNvbXB1dGVBeGlzPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJxdWF0ZXJuaW9uIix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSk7bGV0IG49dC53O2lmKE1hdGguYWJzKG4tMSk8UC5FUFNJTE9ONnx8TWF0aC5hYnMobisxKTxQLkVQU0lMT042KXJldHVybiBlLng9MSxlLnk9ZS56PTAsZTtsZXQgbz0xL01hdGguc3FydCgxLW4qbik7cmV0dXJuIGUueD10LngqbyxlLnk9dC55Km8sZS56PXQueipvLGV9O090LmNvbXB1dGVBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJxdWF0ZXJuaW9uIix0KSxNYXRoLmFicyh0LnctMSk8UC5FUFNJTE9ONj8wOjIqTWF0aC5hY29zKHQudyl9O2ZoPW5ldyBPdDtPdC5sZXJwPWZ1bmN0aW9uKHQsZSxuLG8pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInN0YXJ0Iix0KSx5LnR5cGVPZi5vYmplY3QoImVuZCIsZSkseS50eXBlT2YubnVtYmVyKCJ0IixuKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbyksZmg9T3QubXVsdGlwbHlCeVNjYWxhcihlLG4sZmgpLG89T3QubXVsdGlwbHlCeVNjYWxhcih0LDEtbixvKSxPdC5hZGQoZmgsbyxvKX07dGI9bmV3IE90LHVoPW5ldyBPdCxsaD1uZXcgT3Q7T3Quc2xlcnA9ZnVuY3Rpb24odCxlLG4sbyl7eS50eXBlT2Yub2JqZWN0KCJzdGFydCIsdCkseS50eXBlT2Yub2JqZWN0KCJlbmQiLGUpLHkudHlwZU9mLm51bWJlcigidCIsbikseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG8pO2xldCByPU90LmRvdCh0LGUpLGk9ZTtpZihyPDAmJihyPS1yLGk9dGI9T3QubmVnYXRlKGUsdGIpKSwxLXI8UC5FUFNJTE9ONilyZXR1cm4gT3QubGVycCh0LGksbixvKTtsZXQgcz1NYXRoLmFjb3Mocik7cmV0dXJuIHVoPU90Lm11bHRpcGx5QnlTY2FsYXIodCxNYXRoLnNpbigoMS1uKSpzKSx1aCksbGg9T3QubXVsdGlwbHlCeVNjYWxhcihpLE1hdGguc2luKG4qcyksbGgpLG89T3QuYWRkKHVoLGxoLG8pLE90Lm11bHRpcGx5QnlTY2FsYXIobywxL01hdGguc2luKHMpLG8pfTtPdC5sb2c9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoInF1YXRlcm5pb24iLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKTtsZXQgbj1QLmFjb3NDbGFtcGVkKHQudyksbz0wO3JldHVybiBuIT09MCYmKG89bi9NYXRoLnNpbihuKSksYS5tdWx0aXBseUJ5U2NhbGFyKHQsbyxlKX07T3QuZXhwPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKTtsZXQgbj1hLm1hZ25pdHVkZSh0KSxvPTA7cmV0dXJuIG4hPT0wJiYobz1NYXRoLnNpbihuKS9uKSxlLng9dC54Km8sZS55PXQueSpvLGUuej10LnoqbyxlLnc9TWF0aC5jb3MobiksZX07S3g9bmV3IGEsV3g9bmV3IGEsZ2Y9bmV3IE90LHRhPW5ldyBPdDtPdC5jb21wdXRlSW5uZXJRdWFkcmFuZ2xlPWZ1bmN0aW9uKHQsZSxuLG8pe3kudHlwZU9mLm9iamVjdCgicTAiLHQpLHkudHlwZU9mLm9iamVjdCgicTEiLGUpLHkudHlwZU9mLm9iamVjdCgicTIiLG4pLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixvKTtsZXQgcj1PdC5jb25qdWdhdGUoZSxnZik7T3QubXVsdGlwbHkocixuLHRhKTtsZXQgaT1PdC5sb2codGEsS3gpO090Lm11bHRpcGx5KHIsdCx0YSk7bGV0IHM9T3QubG9nKHRhLFd4KTtyZXR1cm4gYS5hZGQoaSxzLGkpLGEubXVsdGlwbHlCeVNjYWxhcihpLC4yNSxpKSxhLm5lZ2F0ZShpLGkpLE90LmV4cChpLGdmKSxPdC5tdWx0aXBseShlLGdmLG8pfTtPdC5zcXVhZD1mdW5jdGlvbih0LGUsbixvLHIsaSl7eS50eXBlT2Yub2JqZWN0KCJxMCIsdCkseS50eXBlT2Yub2JqZWN0KCJxMSIsZSkseS50eXBlT2Yub2JqZWN0KCJzMCIsbikseS50eXBlT2Yub2JqZWN0KCJzMSIsbykseS50eXBlT2YubnVtYmVyKCJ0IixyKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsaSk7bGV0IHM9T3Quc2xlcnAodCxlLHIsZ2YpLGY9T3Quc2xlcnAobixvLHIsdGEpO3JldHVybiBPdC5zbGVycChzLGYsMipyKigxLXIpLGkpfTtYeD1uZXcgT3QsZWI9MS45MDExMDc0NTM1MTczMDAzLFBwPVlzLnN1cHBvcnRzVHlwZWRBcnJheXMoKT9uZXcgRmxvYXQzMkFycmF5KDgpOltdLE1wPVlzLnN1cHBvcnRzVHlwZWRBcnJheXMoKT9uZXcgRmxvYXQzMkFycmF5KDgpOltdLHhpPVlzLnN1cHBvcnRzVHlwZWRBcnJheXMoKT9uZXcgRmxvYXQzMkFycmF5KDgpOltdLFBpPVlzLnN1cHBvcnRzVHlwZWRBcnJheXMoKT9uZXcgRmxvYXQzMkFycmF5KDgpOltdO2ZvcihsZXQgdD0wO3Q8NzsrK3Qpe2xldCBlPXQrMSxuPTIqZSsxO1BwW3RdPTEvKGUqbiksTXBbdF09ZS9ufVBwWzddPWViLyg4KjE3KTtNcFs3XT1lYio4LzE3O090LmZhc3RTbGVycD1mdW5jdGlvbih0LGUsbixvKXt5LnR5cGVPZi5vYmplY3QoInN0YXJ0Iix0KSx5LnR5cGVPZi5vYmplY3QoImVuZCIsZSkseS50eXBlT2YubnVtYmVyKCJ0IixuKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbyk7bGV0IHI9T3QuZG90KHQsZSksaTtyPj0wP2k9MTooaT0tMSxyPS1yKTtsZXQgcz1yLTEsZj0xLW4sdT1uKm4sYz1mKmY7Zm9yKGxldCBtPTc7bT49MDstLW0peGlbbV09KFBwW21dKnUtTXBbbV0pKnMsUGlbbV09KFBwW21dKmMtTXBbbV0pKnM7bGV0IGw9aSpuKigxK3hpWzBdKigxK3hpWzFdKigxK3hpWzJdKigxK3hpWzNdKigxK3hpWzRdKigxK3hpWzVdKigxK3hpWzZdKigxK3hpWzddKSkpKSkpKSkscD1mKigxK1BpWzBdKigxK1BpWzFdKigxK1BpWzJdKigxK1BpWzNdKigxK1BpWzRdKigxK1BpWzVdKigxK1BpWzZdKigxK1BpWzddKSkpKSkpKSksZD1PdC5tdWx0aXBseUJ5U2NhbGFyKHQscCxYeCk7cmV0dXJuIE90Lm11bHRpcGx5QnlTY2FsYXIoZSxsLG8pLE90LmFkZChkLG8sbyl9O090LmZhc3RTcXVhZD1mdW5jdGlvbih0LGUsbixvLHIsaSl7eS50eXBlT2Yub2JqZWN0KCJxMCIsdCkseS50eXBlT2Yub2JqZWN0KCJxMSIsZSkseS50eXBlT2Yub2JqZWN0KCJzMCIsbikseS50eXBlT2Yub2JqZWN0KCJzMSIsbykseS50eXBlT2YubnVtYmVyKCJ0IixyKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsaSk7bGV0IHM9T3QuZmFzdFNsZXJwKHQsZSxyLGdmKSxmPU90LmZhc3RTbGVycChuLG8scix0YSk7cmV0dXJuIE90LmZhc3RTbGVycChzLGYsMipyKigxLXIpLGkpfTtPdC5lcXVhbHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PWV8fGgodCkmJmgoZSkmJnQueD09PWUueCYmdC55PT09ZS55JiZ0Lno9PT1lLnomJnQudz09PWUud307T3QuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIG49bj8/MCx0PT09ZXx8aCh0KSYmaChlKSYmTWF0aC5hYnModC54LWUueCk8PW4mJk1hdGguYWJzKHQueS1lLnkpPD1uJiZNYXRoLmFicyh0LnotZS56KTw9biYmTWF0aC5hYnModC53LWUudyk8PW59O090LlpFUk89T2JqZWN0LmZyZWV6ZShuZXcgT3QoMCwwLDAsMCkpO090LklERU5USVRZPU9iamVjdC5mcmVlemUobmV3IE90KDAsMCwwLDEpKTtPdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIE90LmNsb25lKHRoaXMsdCl9O090LnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIE90LmVxdWFscyh0aGlzLHQpfTtPdC5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUpe3JldHVybiBPdC5lcXVhbHNFcHNpbG9uKHRoaXMsdCxlKX07T3QucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuYCgke3RoaXMueH0sICR7dGhpcy55fSwgJHt0aGlzLnp9LCAke3RoaXMud30pYH07dGU9T3R9KTt2YXIgUmUscGgsZWEsZGgsV28scnMsaXMsc3MsWXgsJHgsWngsUXgsSngsdDMsZTMsbmIsbjMsbzMscjMsaTMsczMsYzMsYTMsZjMsdTMsbDMsTnAsX2gscDMsZDMsbTMsSXAsaDMsXzMseTMsZzMsbWgsaGgsQTMsYjMsVDMsdzMsb2IscmIseWgsTzMsRTMsZ2gsaWIsWG8sY3M9JCgoKT0+e1VlKCk7THQoKTtocigpO0llKCk7V3QoKTtmdCgpO2p0KCk7TkEoKTtJbSgpOyR0KCk7SUEoKTtrQSgpO1ltKCk7dHAoKTtLdCgpO0JuKCk7VW4oKTtLbygpO1hsKCk7UmU9e30scGg9e3VwOntzb3V0aDoiZWFzdCIsbm9ydGg6Indlc3QiLHdlc3Q6InNvdXRoIixlYXN0OiJub3J0aCJ9LGRvd246e3NvdXRoOiJ3ZXN0Iixub3J0aDoiZWFzdCIsd2VzdDoibm9ydGgiLGVhc3Q6InNvdXRoIn0sc291dGg6e3VwOiJ3ZXN0Iixkb3duOiJlYXN0Iix3ZXN0OiJkb3duIixlYXN0OiJ1cCJ9LG5vcnRoOnt1cDoiZWFzdCIsZG93bjoid2VzdCIsd2VzdDoidXAiLGVhc3Q6ImRvd24ifSx3ZXN0Ont1cDoibm9ydGgiLGRvd246InNvdXRoIixub3J0aDoiZG93biIsc291dGg6InVwIn0sZWFzdDp7dXA6InNvdXRoIixkb3duOiJub3J0aCIsbm9ydGg6InVwIixzb3V0aDoiZG93biJ9fSxlYT17bm9ydGg6Wy0xLDAsMF0sZWFzdDpbMCwxLDBdLHVwOlswLDAsMV0sc291dGg6WzEsMCwwXSx3ZXN0OlswLC0xLDBdLGRvd246WzAsMCwtMV19LGRoPXt9LFdvPXtlYXN0Om5ldyBhLG5vcnRoOm5ldyBhLHVwOm5ldyBhLHdlc3Q6bmV3IGEsc291dGg6bmV3IGEsZG93bjpuZXcgYX0scnM9bmV3IGEsaXM9bmV3IGEsc3M9bmV3IGE7UmUubG9jYWxGcmFtZVRvRml4ZWRGcmFtZUdlbmVyYXRvcj1mdW5jdGlvbih0LGUpe2lmKCFwaC5oYXNPd25Qcm9wZXJ0eSh0KXx8IXBoW3RdLmhhc093blByb3BlcnR5KGUpKXRocm93IG5ldyBEKCJmaXJzdEF4aXMgYW5kIHNlY29uZEF4aXMgbXVzdCBiZSBlYXN0LCBub3J0aCwgdXAsIHdlc3QsIHNvdXRoIG9yIGRvd24uIik7bGV0IG49cGhbdF1bZV0sbyxyPXQrZTtyZXR1cm4gaChkaFtyXSk/bz1kaFtyXToobz1mdW5jdGlvbihpLHMsZil7aWYoIWgoaSkpdGhyb3cgbmV3IEQoIm9yaWdpbiBpcyByZXF1aXJlZC4iKTtpZihpc05hTihpLngpfHxpc05hTihpLnkpfHxpc05hTihpLnopKXRocm93IG5ldyBEKCJvcmlnaW4gaGFzIGEgTmFOIGNvbXBvbmVudCIpO2lmKGgoZil8fChmPW5ldyBzdCksYS5lcXVhbHNFcHNpbG9uKGksYS5aRVJPLFAuRVBTSUxPTjE0KSlhLnVucGFjayhlYVt0XSwwLHJzKSxhLnVucGFjayhlYVtlXSwwLGlzKSxhLnVucGFjayhlYVtuXSwwLHNzKTtlbHNlIGlmKFAuZXF1YWxzRXBzaWxvbihpLngsMCxQLkVQU0lMT04xNCkmJlAuZXF1YWxzRXBzaWxvbihpLnksMCxQLkVQU0lMT04xNCkpe2xldCB1PVAuc2lnbihpLnopO2EudW5wYWNrKGVhW3RdLDAscnMpLHQhPT0iZWFzdCImJnQhPT0id2VzdCImJmEubXVsdGlwbHlCeVNjYWxhcihycyx1LHJzKSxhLnVucGFjayhlYVtlXSwwLGlzKSxlIT09ImVhc3QiJiZlIT09Indlc3QiJiZhLm11bHRpcGx5QnlTY2FsYXIoaXMsdSxpcyksYS51bnBhY2soZWFbbl0sMCxzcyksbiE9PSJlYXN0IiYmbiE9PSJ3ZXN0IiYmYS5tdWx0aXBseUJ5U2NhbGFyKHNzLHUsc3MpfWVsc2V7cz1zPz9ZLmRlZmF1bHQscy5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoaSxXby51cCk7bGV0IHU9V28udXAsYz1Xby5lYXN0O2MueD0taS55LGMueT1pLngsYy56PTAsYS5ub3JtYWxpemUoYyxXby5lYXN0KSxhLmNyb3NzKHUsYyxXby5ub3J0aCksYS5tdWx0aXBseUJ5U2NhbGFyKFdvLnVwLC0xLFdvLmRvd24pLGEubXVsdGlwbHlCeVNjYWxhcihXby5lYXN0LC0xLFdvLndlc3QpLGEubXVsdGlwbHlCeVNjYWxhcihXby5ub3J0aCwtMSxXby5zb3V0aCkscnM9V29bdF0saXM9V29bZV0sc3M9V29bbl19cmV0dXJuIGZbMF09cnMueCxmWzFdPXJzLnksZlsyXT1ycy56LGZbM109MCxmWzRdPWlzLngsZls1XT1pcy55LGZbNl09aXMueixmWzddPTAsZls4XT1zcy54LGZbOV09c3MueSxmWzEwXT1zcy56LGZbMTFdPTAsZlsxMl09aS54LGZbMTNdPWkueSxmWzE0XT1pLnosZlsxNV09MSxmfSxkaFtyXT1vKSxvfTtSZS5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZT1SZS5sb2NhbEZyYW1lVG9GaXhlZEZyYW1lR2VuZXJhdG9yKCJlYXN0Iiwibm9ydGgiKTtSZS5ub3J0aEVhc3REb3duVG9GaXhlZEZyYW1lPVJlLmxvY2FsRnJhbWVUb0ZpeGVkRnJhbWVHZW5lcmF0b3IoIm5vcnRoIiwiZWFzdCIpO1JlLm5vcnRoVXBFYXN0VG9GaXhlZEZyYW1lPVJlLmxvY2FsRnJhbWVUb0ZpeGVkRnJhbWVHZW5lcmF0b3IoIm5vcnRoIiwidXAiKTtSZS5ub3J0aFdlc3RVcFRvRml4ZWRGcmFtZT1SZS5sb2NhbEZyYW1lVG9GaXhlZEZyYW1lR2VuZXJhdG9yKCJub3J0aCIsIndlc3QiKTtZeD1uZXcgdGUsJHg9bmV3IGEoMSwxLDEpLFp4PW5ldyBzdDtSZS5oZWFkaW5nUGl0Y2hSb2xsVG9GaXhlZEZyYW1lPWZ1bmN0aW9uKHQsZSxuLG8scil7eS50eXBlT2Yub2JqZWN0KCJIZWFkaW5nUGl0Y2hSb2xsIixlKSxvPW8/P1JlLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lO2xldCBpPXRlLmZyb21IZWFkaW5nUGl0Y2hSb2xsKGUsWXgpLHM9c3QuZnJvbVRyYW5zbGF0aW9uUXVhdGVybmlvblJvdGF0aW9uU2NhbGUoYS5aRVJPLGksJHgsWngpO3JldHVybiByPW8odCxuLHIpLHN0Lm11bHRpcGx5KHIscyxyKX07UXg9bmV3IHN0LEp4PW5ldyBaO1JlLmhlYWRpbmdQaXRjaFJvbGxRdWF0ZXJuaW9uPWZ1bmN0aW9uKHQsZSxuLG8scil7eS50eXBlT2Yub2JqZWN0KCJIZWFkaW5nUGl0Y2hSb2xsIixlKTtsZXQgaT1SZS5oZWFkaW5nUGl0Y2hSb2xsVG9GaXhlZEZyYW1lKHQsZSxuLG8sUXgpLHM9c3QuZ2V0TWF0cml4MyhpLEp4KTtyZXR1cm4gdGUuZnJvbVJvdGF0aW9uTWF0cml4KHMscil9O3QzPW5ldyBhKDEsMSwxKSxlMz1uZXcgYSxuYj1uZXcgc3QsbjM9bmV3IHN0LG8zPW5ldyBaLHIzPW5ldyB0ZTtSZS5maXhlZEZyYW1lVG9IZWFkaW5nUGl0Y2hSb2xsPWZ1bmN0aW9uKHQsZSxuLG8pe3kuZGVmaW5lZCgidHJhbnNmb3JtIix0KSxlPWU/P1kuZGVmYXVsdCxuPW4/P1JlLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lLGgobyl8fChvPW5ldyBtcCk7bGV0IHI9c3QuZ2V0VHJhbnNsYXRpb24odCxlMyk7aWYoYS5lcXVhbHMocixhLlpFUk8pKXJldHVybiBvLmhlYWRpbmc9MCxvLnBpdGNoPTAsby5yb2xsPTAsbztsZXQgaT1zdC5pbnZlcnNlVHJhbnNmb3JtYXRpb24obihyLGUsbmIpLG5iKSxzPXN0LnNldFNjYWxlKHQsdDMsbjMpO3M9c3Quc2V0VHJhbnNsYXRpb24ocyxhLlpFUk8scyksaT1zdC5tdWx0aXBseShpLHMsaSk7bGV0IGY9dGUuZnJvbVJvdGF0aW9uTWF0cml4KHN0LmdldE1hdHJpeDMoaSxvMykscjMpO3JldHVybiBmPXRlLm5vcm1hbGl6ZShmLGYpLG1wLmZyb21RdWF0ZXJuaW9uKGYsbyl9O2kzPTYqMzYwMCs0MSo2MCs1MC41NDg0MSxzMz04NjQwMTg0ODEyODY2ZS02LGMzPS4wOTMxMDQsYTM9LTYyZS03LGYzPTExNzcyNzU4Mzg0NjY4ZS0zMix1Mz03MjkyMTE1ODU1M2UtMTUsbDM9UC5UV09fUEkvODY0MDAsTnA9bmV3IEduO1JlLmNvbXB1dGVJY3JmVG9DZW50cmFsQm9keUZpeGVkTWF0cml4PWZ1bmN0aW9uKHQsZSl7bGV0IG49UmUuY29tcHV0ZUljcmZUb0ZpeGVkTWF0cml4KHQsZSk7cmV0dXJuIGgobil8fChuPVJlLmNvbXB1dGVUZW1lVG9Qc2V1ZG9GaXhlZE1hdHJpeCh0LGUpKSxufTtSZS5jb21wdXRlVGVtZVRvUHNldWRvRml4ZWRNYXRyaXg9ZnVuY3Rpb24odCxlKXtpZighaCh0KSl0aHJvdyBuZXcgRCgiZGF0ZSBpcyByZXF1aXJlZC4iKTtOcD1Hbi5hZGRTZWNvbmRzKHQsLUduLmNvbXB1dGVUYWlNaW51c1V0Yyh0KSxOcCk7bGV0IG49TnAuZGF5TnVtYmVyLG89TnAuc2Vjb25kc09mRGF5LHIsaT1uLTI0NTE1NDU7bz49NDMyMDA/cj0oaSsuNSkveW4uREFZU19QRVJfSlVMSUFOX0NFTlRVUlk6cj0oaS0uNSkveW4uREFZU19QRVJfSlVMSUFOX0NFTlRVUlk7bGV0IGY9KGkzK3IqKHMzK3IqKGMzK3IqYTMpKSkqbDMlUC5UV09fUEksdT11MytmMyoobi0yNDUxNTQ1NWUtMSksYz0obyt5bi5TRUNPTkRTX1BFUl9EQVkqLjUpJXluLlNFQ09ORFNfUEVSX0RBWSxsPWYrdSpjLHA9TWF0aC5jb3MobCksZD1NYXRoLnNpbihsKTtyZXR1cm4gaChlKT8oZVswXT1wLGVbMV09LWQsZVsyXT0wLGVbM109ZCxlWzRdPXAsZVs1XT0wLGVbNl09MCxlWzddPTAsZVs4XT0xLGUpOm5ldyBaKHAsZCwwLC1kLHAsMCwwLDAsMSl9O1JlLmlhdTIwMDZYeXNEYXRhPW5ldyBVQTtSZS5lYXJ0aE9yaWVudGF0aW9uUGFyYW1ldGVycz1NQS5OT05FO19oPTMyLjE4NCxwMz0yNDUxNTQ1O1JlLnByZWxvYWRJY3JmRml4ZWQ9ZnVuY3Rpb24odCl7bGV0IGU9dC5zdGFydC5kYXlOdW1iZXIsbj10LnN0YXJ0LnNlY29uZHNPZkRheStfaCxvPXQuc3RvcC5kYXlOdW1iZXIscj10LnN0b3Auc2Vjb25kc09mRGF5K19oO3JldHVybiBSZS5pYXUyMDA2WHlzRGF0YS5wcmVsb2FkKGUsbixvLHIpfTtSZS5jb21wdXRlSWNyZlRvRml4ZWRNYXRyaXg9ZnVuY3Rpb24odCxlKXtpZighaCh0KSl0aHJvdyBuZXcgRCgiZGF0ZSBpcyByZXF1aXJlZC4iKTtoKGUpfHwoZT1uZXcgWik7bGV0IG49UmUuY29tcHV0ZUZpeGVkVG9JY3JmTWF0cml4KHQsZSk7aWYoaChuKSlyZXR1cm4gWi50cmFuc3Bvc2UobixlKX07ZDM9MzIuMTg0LG0zPTI0NTE1NDUsSXA9bmV3IG1wLGgzPW5ldyBaLF8zPW5ldyBHbjtSZS5jb21wdXRlTW9vbkZpeGVkVG9JY3JmTWF0cml4PWZ1bmN0aW9uKHQsZSl7aWYoIWgodCkpdGhyb3cgbmV3IEQoImRhdGUgaXMgcmVxdWlyZWQuIik7aChlKXx8KGU9bmV3IFopO2xldCBuPUduLmFkZFNlY29uZHModCxkMyxfMyksbz1Hbi50b3RhbERheXMobiktbTMscj1QLnRvUmFkaWFucygxMi4xMTIpLVAudG9SYWRpYW5zKC4wNTI5OTIpKm8saT1QLnRvUmFkaWFucygyNC4yMjQpLVAudG9SYWRpYW5zKC4xMDU5ODQpKm8scz1QLnRvUmFkaWFucygyMjcuNjQ1KStQLnRvUmFkaWFucygxMy4wMTIpKm8sZj1QLnRvUmFkaWFucygyNjEuMTA1KStQLnRvUmFkaWFucygxMy4zNDA3MTYpKm8sdT1QLnRvUmFkaWFucygzNTgpK1AudG9SYWRpYW5zKC45ODU2KSpvO3JldHVybiBJcC5waXRjaD1QLnRvUmFkaWFucygxODApLVAudG9SYWRpYW5zKDMuODc4KSpNYXRoLnNpbihyKS1QLnRvUmFkaWFucyguMTIpKk1hdGguc2luKGkpK1AudG9SYWRpYW5zKC4wNykqTWF0aC5zaW4ocyktUC50b1JhZGlhbnMoLjAxNykqTWF0aC5zaW4oZiksSXAucm9sbD1QLnRvUmFkaWFucyg2Ni41My05MCkrUC50b1JhZGlhbnMoMS41NDMpKk1hdGguY29zKHIpK1AudG9SYWRpYW5zKC4yNCkqTWF0aC5jb3MoaSktUC50b1JhZGlhbnMoLjAyOCkqTWF0aC5jb3MocykrUC50b1JhZGlhbnMoLjAwNykqTWF0aC5jb3MoZiksSXAuaGVhZGluZz1QLnRvUmFkaWFucygyNDQuMzc1LTkwKStQLnRvUmFkaWFucygxMy4xNzYzNTgzMSkqbytQLnRvUmFkaWFucygzLjU1OCkqTWF0aC5zaW4ocikrUC50b1JhZGlhbnMoLjEyMSkqTWF0aC5zaW4oaSktUC50b1JhZGlhbnMoLjA2NCkqTWF0aC5zaW4ocykrUC50b1JhZGlhbnMoLjAxNikqTWF0aC5zaW4oZikrUC50b1JhZGlhbnMoLjAyNSkqTWF0aC5zaW4odSksWi5mcm9tSGVhZGluZ1BpdGNoUm9sbChJcCxoMyl9O1JlLmNvbXB1dGVJY3JmVG9Nb29uRml4ZWRNYXRyaXg9ZnVuY3Rpb24odCxlKXtpZighaCh0KSl0aHJvdyBuZXcgRCgiZGF0ZSBpcyByZXF1aXJlZC4iKTtoKGUpfHwoZT1uZXcgWik7bGV0IG49UmUuY29tcHV0ZU1vb25GaXhlZFRvSWNyZk1hdHJpeCh0LGUpO2lmKGgobikpcmV0dXJuIFoudHJhbnNwb3NlKG4sZSl9O3kzPW5ldyBncCgwLDAsMCksZzM9bmV3IGNmKDAsMCwwLDAsMCwwKSxtaD1uZXcgWixoaD1uZXcgWjtSZS5jb21wdXRlRml4ZWRUb0ljcmZNYXRyaXg9ZnVuY3Rpb24odCxlKXtpZighaCh0KSl0aHJvdyBuZXcgRCgiZGF0ZSBpcyByZXF1aXJlZC4iKTtoKGUpfHwoZT1uZXcgWik7bGV0IG49UmUuZWFydGhPcmllbnRhdGlvblBhcmFtZXRlcnMuY29tcHV0ZSh0LGczKTtpZighaChuKSlyZXR1cm47bGV0IG89dC5kYXlOdW1iZXIscj10LnNlY29uZHNPZkRheStfaCxpPVJlLmlhdTIwMDZYeXNEYXRhLmNvbXB1dGVYeXNSYWRpYW5zKG8scix5Myk7aWYoIWgoaSkpcmV0dXJuO2xldCBzPWkueCtuLnhQb2xlT2Zmc2V0LGY9aS55K24ueVBvbGVPZmZzZXQsdT0xLygxK01hdGguc3FydCgxLXMqcy1mKmYpKSxjPW1oO2NbMF09MS11KnMqcyxjWzNdPS11KnMqZixjWzZdPXMsY1sxXT0tdSpzKmYsY1s0XT0xLXUqZipmLGNbN109ZixjWzJdPS1zLGNbNV09LWYsY1s4XT0xLXUqKHMqcytmKmYpO2xldCBsPVouZnJvbVJvdGF0aW9uWigtaS5zLGhoKSxwPVoubXVsdGlwbHkoYyxsLG1oKSxkPXQuZGF5TnVtYmVyLG09dC5zZWNvbmRzT2ZEYXktR24uY29tcHV0ZVRhaU1pbnVzVXRjKHQpK24udXQxTWludXNVdGMsXz1kLTI0NTE1NDUsZz1tL3luLlNFQ09ORFNfUEVSX0RBWSxiPS43NzkwNTcyNzMyNjQrZysuMDAyNzM3ODExOTExMzU0NDgqKF8rZyk7Yj1iJTEqUC5UV09fUEk7bGV0IFQ9Wi5mcm9tUm90YXRpb25aKGIsaGgpLE89Wi5tdWx0aXBseShwLFQsbWgpLEU9TWF0aC5jb3Mobi54UG9sZVdhbmRlciksdz1NYXRoLmNvcyhuLnlQb2xlV2FuZGVyKSxDPU1hdGguc2luKG4ueFBvbGVXYW5kZXIpLE09TWF0aC5zaW4obi55UG9sZVdhbmRlciksTj1vLXAzK3IveW4uU0VDT05EU19QRVJfREFZO04vPTM2NTI1O2xldCBGPS00N2UtNipOKlAuUkFESUFOU19QRVJfREVHUkVFLzM2MDAsST1NYXRoLmNvcyhGKSx2PU1hdGguc2luKEYpLEI9aGg7cmV0dXJuIEJbMF09RSpJLEJbMV09RSp2LEJbMl09QyxCWzNdPS13KnYrTSpDKkksQls0XT13KkkrTSpDKnYsQls1XT0tTSpFLEJbNl09LU0qdi13KkMqSSxCWzddPU0qSS13KkMqdixCWzhdPXcqRSxaLm11bHRpcGx5KE8sQixlKX07QTM9bmV3IG1lO1JlLnBvaW50VG9XaW5kb3dDb29yZGluYXRlcz1mdW5jdGlvbih0LGUsbixvKXtyZXR1cm4gbz1SZS5wb2ludFRvR0xXaW5kb3dDb29yZGluYXRlcyh0LGUsbixvKSxvLnk9MiplWzVdLW8ueSxvfTtSZS5wb2ludFRvR0xXaW5kb3dDb29yZGluYXRlcz1mdW5jdGlvbih0LGUsbixvKXtpZighaCh0KSl0aHJvdyBuZXcgRCgibW9kZWxWaWV3UHJvamVjdGlvbk1hdHJpeCBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgRCgidmlld3BvcnRUcmFuc2Zvcm1hdGlvbiBpcyByZXF1aXJlZC4iKTtpZighaChuKSl0aHJvdyBuZXcgRCgicG9pbnQgaXMgcmVxdWlyZWQuIik7aChvKXx8KG89bmV3IEopO2xldCByPUEzO3JldHVybiBzdC5tdWx0aXBseUJ5VmVjdG9yKHQsbWUuZnJvbUVsZW1lbnRzKG4ueCxuLnksbi56LDEsciksciksbWUubXVsdGlwbHlCeVNjYWxhcihyLDEvci53LHIpLHN0Lm11bHRpcGx5QnlWZWN0b3IoZSxyLHIpLEouZnJvbUNhcnRlc2lhbjQocixvKX07YjM9bmV3IGEsVDM9bmV3IGEsdzM9bmV3IGE7UmUucm90YXRpb25NYXRyaXhGcm9tUG9zaXRpb25WZWxvY2l0eT1mdW5jdGlvbih0LGUsbixvKXtpZighaCh0KSl0aHJvdyBuZXcgRCgicG9zaXRpb24gaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEQoInZlbG9jaXR5IGlzIHJlcXVpcmVkLiIpO2xldCByPShuPz9ZLmRlZmF1bHQpLmdlb2RldGljU3VyZmFjZU5vcm1hbCh0LGIzKSxpPWEuY3Jvc3MoZSxyLFQzKTthLmVxdWFsc0Vwc2lsb24oaSxhLlpFUk8sUC5FUFNJTE9ONikmJihpPWEuY2xvbmUoYS5VTklUX1gsaSkpO2xldCBzPWEuY3Jvc3MoaSxlLHczKTtyZXR1cm4gYS5ub3JtYWxpemUocyxzKSxhLmNyb3NzKGUscyxpKSxhLm5lZ2F0ZShpLGkpLGEubm9ybWFsaXplKGksaSksaChvKXx8KG89bmV3IFopLG9bMF09ZS54LG9bMV09ZS55LG9bMl09ZS56LG9bM109aS54LG9bNF09aS55LG9bNV09aS56LG9bNl09cy54LG9bN109cy55LG9bOF09cy56LG99O29iPW5ldyBzdCgwLDAsMSwwLDEsMCwwLDAsMCwxLDAsMCwwLDAsMCwxKSxyYj1uZXcgY3QseWg9bmV3IGEsTzM9bmV3IGEsRTM9bmV3IFosZ2g9bmV3IHN0LGliPW5ldyBzdDtSZS5iYXNpc1RvMkQ9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBEKCJwcm9qZWN0aW9uIGlzIHJlcXVpcmVkLiIpO2lmKCFoKGUpKXRocm93IG5ldyBEKCJtYXRyaXggaXMgcmVxdWlyZWQuIik7aWYoIWgobikpdGhyb3cgbmV3IEQoInJlc3VsdCBpcyByZXF1aXJlZC4iKTtsZXQgbz1zdC5nZXRUcmFuc2xhdGlvbihlLE8zKSxyPXQuZWxsaXBzb2lkLGk7aWYoYS5lcXVhbHMobyxhLlpFUk8pKWk9YS5jbG9uZShhLlpFUk8seWgpO2Vsc2V7bGV0IGw9ci5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhvLHJiKTtpPXQucHJvamVjdChsLHloKSxhLmZyb21FbGVtZW50cyhpLnosaS54LGkueSxpKX1sZXQgcz1SZS5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShvLHIsZ2gpLGY9c3QuaW52ZXJzZVRyYW5zZm9ybWF0aW9uKHMsaWIpLHU9c3QuZ2V0TWF0cml4MyhlLEUzKSxjPXN0Lm11bHRpcGx5QnlNYXRyaXgzKGYsdSxuKTtyZXR1cm4gc3QubXVsdGlwbHkob2IsYyxuKSxzdC5zZXRUcmFuc2xhdGlvbihuLGksbiksbn07UmUuZWxsaXBzb2lkVG8yRE1vZGVsTWF0cml4PWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgRCgicHJvamVjdGlvbiBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgRCgiY2VudGVyIGlzIHJlcXVpcmVkLiIpO2lmKCFoKG4pKXRocm93IG5ldyBEKCJyZXN1bHQgaXMgcmVxdWlyZWQuIik7bGV0IG89dC5lbGxpcHNvaWQscj1SZS5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZShlLG8sZ2gpLGk9c3QuaW52ZXJzZVRyYW5zZm9ybWF0aW9uKHIsaWIpLHM9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhlLHJiKSxmPXQucHJvamVjdChzLHloKTthLmZyb21FbGVtZW50cyhmLnosZi54LGYueSxmKTtsZXQgdT1zdC5mcm9tVHJhbnNsYXRpb24oZixnaCk7cmV0dXJuIHN0Lm11bHRpcGx5KG9iLGksbiksc3QubXVsdGlwbHkodSxuLG4pLG59O1hvPVJlfSk7ZnVuY3Rpb24gY2UodCxlLG4sbyl7dGhpcy53ZXN0PXQ/PzAsdGhpcy5zb3V0aD1lPz8wLHRoaXMuZWFzdD1uPz8wLHRoaXMubm9ydGg9bz8/MH12YXIgUjMsUzMsQzMseDMsUDMsQWgsTTMsTnQsd249JCgoKT0+e0x0KCk7SWUoKTtXdCgpO2Z0KCk7JHQoKTtLdCgpO2NzKCk7VW4oKTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjZS5wcm90b3R5cGUse3dpZHRoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY2UuY29tcHV0ZVdpZHRoKHRoaXMpfX0saGVpZ2h0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gY2UuY29tcHV0ZUhlaWdodCh0aGlzKX19fSk7Y2UucGFja2VkTGVuZ3RoPTQ7Y2UucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLG49bj8/MCxlW24rK109dC53ZXN0LGVbbisrXT10LnNvdXRoLGVbbisrXT10LmVhc3QsZVtuXT10Lm5vcnRoLGV9O2NlLnVucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkuZGVmaW5lZCgiYXJyYXkiLHQpLGU9ZT8/MCxoKG4pfHwobj1uZXcgY2UpLG4ud2VzdD10W2UrK10sbi5zb3V0aD10W2UrK10sbi5lYXN0PXRbZSsrXSxuLm5vcnRoPXRbZV0sbn07Y2UuY29tcHV0ZVdpZHRoPWZ1bmN0aW9uKHQpe3kudHlwZU9mLm9iamVjdCgicmVjdGFuZ2xlIix0KTtsZXQgZT10LmVhc3Qsbj10Lndlc3Q7cmV0dXJuIGU8biYmKGUrPVAuVFdPX1BJKSxlLW59O2NlLmNvbXB1dGVIZWlnaHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgicmVjdGFuZ2xlIix0KSx0Lm5vcnRoLXQuc291dGh9O2NlLmZyb21EZWdyZWVzPWZ1bmN0aW9uKHQsZSxuLG8scil7cmV0dXJuIHQ9UC50b1JhZGlhbnModD8/MCksZT1QLnRvUmFkaWFucyhlPz8wKSxuPVAudG9SYWRpYW5zKG4/PzApLG89UC50b1JhZGlhbnMobz8/MCksaChyKT8oci53ZXN0PXQsci5zb3V0aD1lLHIuZWFzdD1uLHIubm9ydGg9byxyKTpuZXcgY2UodCxlLG4sbyl9O2NlLmZyb21SYWRpYW5zPWZ1bmN0aW9uKHQsZSxuLG8scil7cmV0dXJuIGgocik/KHIud2VzdD10Pz8wLHIuc291dGg9ZT8/MCxyLmVhc3Q9bj8/MCxyLm5vcnRoPW8/PzAscik6bmV3IGNlKHQsZSxuLG8pfTtjZS5mcm9tQ2FydG9ncmFwaGljQXJyYXk9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoImNhcnRvZ3JhcGhpY3MiLHQpO2xldCBuPU51bWJlci5NQVhfVkFMVUUsbz0tTnVtYmVyLk1BWF9WQUxVRSxyPU51bWJlci5NQVhfVkFMVUUsaT0tTnVtYmVyLk1BWF9WQUxVRSxzPU51bWJlci5NQVhfVkFMVUUsZj0tTnVtYmVyLk1BWF9WQUxVRTtmb3IobGV0IHU9MCxjPXQubGVuZ3RoO3U8Yzt1Kyspe2xldCBsPXRbdV07bj1NYXRoLm1pbihuLGwubG9uZ2l0dWRlKSxvPU1hdGgubWF4KG8sbC5sb25naXR1ZGUpLHM9TWF0aC5taW4ocyxsLmxhdGl0dWRlKSxmPU1hdGgubWF4KGYsbC5sYXRpdHVkZSk7bGV0IHA9bC5sb25naXR1ZGU+PTA/bC5sb25naXR1ZGU6bC5sb25naXR1ZGUrUC5UV09fUEk7cj1NYXRoLm1pbihyLHApLGk9TWF0aC5tYXgoaSxwKX1yZXR1cm4gby1uPmktciYmKG49cixvPWksbz5QLlBJJiYobz1vLVAuVFdPX1BJKSxuPlAuUEkmJihuPW4tUC5UV09fUEkpKSxoKGUpPyhlLndlc3Q9bixlLnNvdXRoPXMsZS5lYXN0PW8sZS5ub3J0aD1mLGUpOm5ldyBjZShuLHMsbyxmKX07Y2UuZnJvbUNhcnRlc2lhbkFycmF5PWZ1bmN0aW9uKHQsZSxuKXt5LmRlZmluZWQoImNhcnRlc2lhbnMiLHQpLGU9ZT8/WS5kZWZhdWx0O2xldCBvPU51bWJlci5NQVhfVkFMVUUscj0tTnVtYmVyLk1BWF9WQUxVRSxpPU51bWJlci5NQVhfVkFMVUUscz0tTnVtYmVyLk1BWF9WQUxVRSxmPU51bWJlci5NQVhfVkFMVUUsdT0tTnVtYmVyLk1BWF9WQUxVRTtmb3IobGV0IGM9MCxsPXQubGVuZ3RoO2M8bDtjKyspe2xldCBwPWUuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWModFtjXSk7bz1NYXRoLm1pbihvLHAubG9uZ2l0dWRlKSxyPU1hdGgubWF4KHIscC5sb25naXR1ZGUpLGY9TWF0aC5taW4oZixwLmxhdGl0dWRlKSx1PU1hdGgubWF4KHUscC5sYXRpdHVkZSk7bGV0IGQ9cC5sb25naXR1ZGU+PTA/cC5sb25naXR1ZGU6cC5sb25naXR1ZGUrUC5UV09fUEk7aT1NYXRoLm1pbihpLGQpLHM9TWF0aC5tYXgocyxkKX1yZXR1cm4gci1vPnMtaSYmKG89aSxyPXMscj5QLlBJJiYocj1yLVAuVFdPX1BJKSxvPlAuUEkmJihvPW8tUC5UV09fUEkpKSxoKG4pPyhuLndlc3Q9byxuLnNvdXRoPWYsbi5lYXN0PXIsbi5ub3J0aD11LG4pOm5ldyBjZShvLGYscix1KX07UjM9bmV3IGEsUzM9bmV3IGEsQzM9bmV3IGEseDM9bmV3IGEsUDM9bmV3IGEsQWg9bmV3IEFycmF5KDUpO2ZvcihsZXQgdD0wO3Q8QWgubGVuZ3RoOysrdClBaFt0XT1uZXcgYTtjZS5mcm9tQm91bmRpbmdTcGhlcmU9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgiYm91bmRpbmdTcGhlcmUiLHQpO2xldCBvPXQuY2VudGVyLHI9dC5yYWRpdXM7aWYoaChlKXx8KGU9WS5kZWZhdWx0KSxoKG4pfHwobj1uZXcgY2UpLGEuZXF1YWxzKG8sYS5aRVJPKSlyZXR1cm4gY2UuY2xvbmUoY2UuTUFYX1ZBTFVFLG4pLG47bGV0IGk9WG8uZWFzdE5vcnRoVXBUb0ZpeGVkRnJhbWUobyxlLFIzKSxzPXN0Lm11bHRpcGx5QnlQb2ludEFzVmVjdG9yKGksYS5VTklUX1gsUzMpO2Eubm9ybWFsaXplKHMscyk7bGV0IGY9c3QubXVsdGlwbHlCeVBvaW50QXNWZWN0b3IoaSxhLlVOSVRfWSxDMyk7YS5ub3JtYWxpemUoZixmKSxhLm11bHRpcGx5QnlTY2FsYXIoZixyLGYpLGEubXVsdGlwbHlCeVNjYWxhcihzLHIscyk7bGV0IHU9YS5uZWdhdGUoZixQMyksYz1hLm5lZ2F0ZShzLHgzKSxsPUFoLHA9bFswXTtyZXR1cm4gYS5hZGQobyxmLHApLHA9bFsxXSxhLmFkZChvLGMscCkscD1sWzJdLGEuYWRkKG8sdSxwKSxwPWxbM10sYS5hZGQobyxzLHApLGxbNF09byxjZS5mcm9tQ2FydGVzaWFuQXJyYXkobCxlLG4pfTtjZS5jbG9uZT1mdW5jdGlvbih0LGUpe2lmKGgodCkpcmV0dXJuIGgoZSk/KGUud2VzdD10Lndlc3QsZS5zb3V0aD10LnNvdXRoLGUuZWFzdD10LmVhc3QsZS5ub3J0aD10Lm5vcnRoLGUpOm5ldyBjZSh0Lndlc3QsdC5zb3V0aCx0LmVhc3QsdC5ub3J0aCl9O2NlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlLG4pe3JldHVybiBuPW4/PzAsdD09PWV8fGgodCkmJmgoZSkmJk1hdGguYWJzKHQud2VzdC1lLndlc3QpPD1uJiZNYXRoLmFicyh0LnNvdXRoLWUuc291dGgpPD1uJiZNYXRoLmFicyh0LmVhc3QtZS5lYXN0KTw9biYmTWF0aC5hYnModC5ub3J0aC1lLm5vcnRoKTw9bn07Y2UucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiBjZS5jbG9uZSh0aGlzLHQpfTtjZS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiBjZS5lcXVhbHModGhpcyx0KX07Y2UuZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHxoKHQpJiZoKGUpJiZ0Lndlc3Q9PT1lLndlc3QmJnQuc291dGg9PT1lLnNvdXRoJiZ0LmVhc3Q9PT1lLmVhc3QmJnQubm9ydGg9PT1lLm5vcnRofTtjZS5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUpe3JldHVybiBjZS5lcXVhbHNFcHNpbG9uKHRoaXMsdCxlKX07Y2UuX3ZhbGlkYXRlPWZ1bmN0aW9uKHQpe3kudHlwZU9mLm9iamVjdCgicmVjdGFuZ2xlIix0KTtsZXQgZT10Lm5vcnRoO3kudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJub3J0aCIsZSwtUC5QSV9PVkVSX1RXTykseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoIm5vcnRoIixlLFAuUElfT1ZFUl9UV08pO2xldCBuPXQuc291dGg7eS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoInNvdXRoIixuLC1QLlBJX09WRVJfVFdPKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygic291dGgiLG4sUC5QSV9PVkVSX1RXTyk7bGV0IG89dC53ZXN0O3kudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJ3ZXN0IixvLC1NYXRoLlBJKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygid2VzdCIsbyxNYXRoLlBJKTtsZXQgcj10LmVhc3Q7eS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImVhc3QiLHIsLU1hdGguUEkpLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJlYXN0IixyLE1hdGguUEkpfTtjZS5zb3V0aHdlc3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpLGgoZSk/KGUubG9uZ2l0dWRlPXQud2VzdCxlLmxhdGl0dWRlPXQuc291dGgsZS5oZWlnaHQ9MCxlKTpuZXcgY3QodC53ZXN0LHQuc291dGgpfTtjZS5ub3J0aHdlc3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpLGgoZSk/KGUubG9uZ2l0dWRlPXQud2VzdCxlLmxhdGl0dWRlPXQubm9ydGgsZS5oZWlnaHQ9MCxlKTpuZXcgY3QodC53ZXN0LHQubm9ydGgpfTtjZS5ub3J0aGVhc3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpLGgoZSk/KGUubG9uZ2l0dWRlPXQuZWFzdCxlLmxhdGl0dWRlPXQubm9ydGgsZS5oZWlnaHQ9MCxlKTpuZXcgY3QodC5lYXN0LHQubm9ydGgpfTtjZS5zb3V0aGVhc3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpLGgoZSk/KGUubG9uZ2l0dWRlPXQuZWFzdCxlLmxhdGl0dWRlPXQuc291dGgsZS5oZWlnaHQ9MCxlKTpuZXcgY3QodC5lYXN0LHQuc291dGgpfTtjZS5jZW50ZXI9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoInJlY3RhbmdsZSIsdCk7bGV0IG49dC5lYXN0LG89dC53ZXN0O248byYmKG4rPVAuVFdPX1BJKTtsZXQgcj1QLm5lZ2F0aXZlUGlUb1BpKChvK24pKi41KSxpPSh0LnNvdXRoK3Qubm9ydGgpKi41O3JldHVybiBoKGUpPyhlLmxvbmdpdHVkZT1yLGUubGF0aXR1ZGU9aSxlLmhlaWdodD0wLGUpOm5ldyBjdChyLGkpfTtjZS5pbnRlcnNlY3Rpb249ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgicmVjdGFuZ2xlIix0KSx5LnR5cGVPZi5vYmplY3QoIm90aGVyUmVjdGFuZ2xlIixlKTtsZXQgbz10LmVhc3Qscj10Lndlc3QsaT1lLmVhc3Qscz1lLndlc3Q7bzxyJiZpPjA/bys9UC5UV09fUEk6aTxzJiZvPjAmJihpKz1QLlRXT19QSSksbzxyJiZzPDA/cys9UC5UV09fUEk6aTxzJiZyPDAmJihyKz1QLlRXT19QSSk7bGV0IGY9UC5uZWdhdGl2ZVBpVG9QaShNYXRoLm1heChyLHMpKSx1PVAubmVnYXRpdmVQaVRvUGkoTWF0aC5taW4obyxpKSk7aWYoKHQud2VzdDx0LmVhc3R8fGUud2VzdDxlLmVhc3QpJiZ1PD1mKXJldHVybjtsZXQgYz1NYXRoLm1heCh0LnNvdXRoLGUuc291dGgpLGw9TWF0aC5taW4odC5ub3J0aCxlLm5vcnRoKTtpZighKGM+PWwpKXJldHVybiBoKG4pPyhuLndlc3Q9ZixuLnNvdXRoPWMsbi5lYXN0PXUsbi5ub3J0aD1sLG4pOm5ldyBjZShmLGMsdSxsKX07Y2Uuc2ltcGxlSW50ZXJzZWN0aW9uPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoInJlY3RhbmdsZSIsdCkseS50eXBlT2Yub2JqZWN0KCJvdGhlclJlY3RhbmdsZSIsZSk7bGV0IG89TWF0aC5tYXgodC53ZXN0LGUud2VzdCkscj1NYXRoLm1heCh0LnNvdXRoLGUuc291dGgpLGk9TWF0aC5taW4odC5lYXN0LGUuZWFzdCkscz1NYXRoLm1pbih0Lm5vcnRoLGUubm9ydGgpO2lmKCEocj49c3x8bz49aSkpcmV0dXJuIGgobik/KG4ud2VzdD1vLG4uc291dGg9cixuLmVhc3Q9aSxuLm5vcnRoPXMsbik6bmV3IGNlKG8scixpLHMpfTtjZS51bmlvbj1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpLHkudHlwZU9mLm9iamVjdCgib3RoZXJSZWN0YW5nbGUiLGUpLGgobil8fChuPW5ldyBjZSk7bGV0IG89dC5lYXN0LHI9dC53ZXN0LGk9ZS5lYXN0LHM9ZS53ZXN0O288ciYmaT4wP28rPVAuVFdPX1BJOmk8cyYmbz4wJiYoaSs9UC5UV09fUEkpLG88ciYmczwwP3MrPVAuVFdPX1BJOmk8cyYmcjwwJiYocis9UC5UV09fUEkpO2xldCBmPVAubmVnYXRpdmVQaVRvUGkoTWF0aC5taW4ocixzKSksdT1QLm5lZ2F0aXZlUGlUb1BpKE1hdGgubWF4KG8saSkpO3JldHVybiBuLndlc3Q9ZixuLnNvdXRoPU1hdGgubWluKHQuc291dGgsZS5zb3V0aCksbi5lYXN0PXUsbi5ub3J0aD1NYXRoLm1heCh0Lm5vcnRoLGUubm9ydGgpLG59O2NlLmV4cGFuZD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgicmVjdGFuZ2xlIix0KSx5LnR5cGVPZi5vYmplY3QoImNhcnRvZ3JhcGhpYyIsZSksaChuKXx8KG49bmV3IGNlKSxuLndlc3Q9TWF0aC5taW4odC53ZXN0LGUubG9uZ2l0dWRlKSxuLnNvdXRoPU1hdGgubWluKHQuc291dGgsZS5sYXRpdHVkZSksbi5lYXN0PU1hdGgubWF4KHQuZWFzdCxlLmxvbmdpdHVkZSksbi5ub3J0aD1NYXRoLm1heCh0Lm5vcnRoLGUubGF0aXR1ZGUpLG59O2NlLmNvbnRhaW5zPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpLHkudHlwZU9mLm9iamVjdCgiY2FydG9ncmFwaGljIixlKTtsZXQgbj1lLmxvbmdpdHVkZSxvPWUubGF0aXR1ZGUscj10Lndlc3QsaT10LmVhc3Q7cmV0dXJuIGk8ciYmKGkrPVAuVFdPX1BJLG48MCYmKG4rPVAuVFdPX1BJKSksKG4+cnx8UC5lcXVhbHNFcHNpbG9uKG4scixQLkVQU0lMT04xNCkpJiYobjxpfHxQLmVxdWFsc0Vwc2lsb24obixpLFAuRVBTSUxPTjE0KSkmJm8+PXQuc291dGgmJm88PXQubm9ydGh9O00zPW5ldyBjdDtjZS5zdWJzYW1wbGU9ZnVuY3Rpb24odCxlLG4sbyl7eS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpLGU9ZT8/WS5kZWZhdWx0LG49bj8/MCxoKG8pfHwobz1bXSk7bGV0IHI9MCxpPXQubm9ydGgscz10LnNvdXRoLGY9dC5lYXN0LHU9dC53ZXN0LGM9TTM7Yy5oZWlnaHQ9bixjLmxvbmdpdHVkZT11LGMubGF0aXR1ZGU9aSxvW3JdPWUuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oYyxvW3JdKSxyKyssYy5sb25naXR1ZGU9ZixvW3JdPWUuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oYyxvW3JdKSxyKyssYy5sYXRpdHVkZT1zLG9bcl09ZS5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihjLG9bcl0pLHIrKyxjLmxvbmdpdHVkZT11LG9bcl09ZS5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihjLG9bcl0pLHIrKyxpPDA/Yy5sYXRpdHVkZT1pOnM+MD9jLmxhdGl0dWRlPXM6Yy5sYXRpdHVkZT0wO2ZvcihsZXQgbD0xO2w8ODsrK2wpYy5sb25naXR1ZGU9LU1hdGguUEkrbCpQLlBJX09WRVJfVFdPLGNlLmNvbnRhaW5zKHQsYykmJihvW3JdPWUuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oYyxvW3JdKSxyKyspO3JldHVybiBjLmxhdGl0dWRlPT09MCYmKGMubG9uZ2l0dWRlPXUsb1tyXT1lLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGMsb1tyXSkscisrLGMubG9uZ2l0dWRlPWYsb1tyXT1lLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGMsb1tyXSkscisrKSxvLmxlbmd0aD1yLG99O2NlLnN1YnNlY3Rpb249ZnVuY3Rpb24odCxlLG4sbyxyLGkpe2lmKHkudHlwZU9mLm9iamVjdCgicmVjdGFuZ2xlIix0KSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygid2VzdExlcnAiLGUsMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoIndlc3RMZXJwIixlLDEpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJzb3V0aExlcnAiLG4sMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoInNvdXRoTGVycCIsbiwxKSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiZWFzdExlcnAiLG8sMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoImVhc3RMZXJwIixvLDEpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJub3J0aExlcnAiLHIsMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoIm5vcnRoTGVycCIsciwxKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygid2VzdExlcnAiLGUsbykseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoInNvdXRoTGVycCIsbixyKSxoKGkpfHwoaT1uZXcgY2UpLHQud2VzdDw9dC5lYXN0KXtsZXQgZj10LmVhc3QtdC53ZXN0O2kud2VzdD10Lndlc3QrZSpmLGkuZWFzdD10Lndlc3QrbypmfWVsc2V7bGV0IGY9UC5UV09fUEkrdC5lYXN0LXQud2VzdDtpLndlc3Q9UC5uZWdhdGl2ZVBpVG9QaSh0Lndlc3QrZSpmKSxpLmVhc3Q9UC5uZWdhdGl2ZVBpVG9QaSh0Lndlc3QrbypmKX1sZXQgcz10Lm5vcnRoLXQuc291dGg7cmV0dXJuIGkuc291dGg9dC5zb3V0aCtuKnMsaS5ub3J0aD10LnNvdXRoK3IqcyxlPT09MSYmKGkud2VzdD10LmVhc3QpLG89PT0xJiYoaS5lYXN0PXQuZWFzdCksbj09PTEmJihpLnNvdXRoPXQubm9ydGgpLHI9PT0xJiYoaS5ub3J0aD10Lm5vcnRoKSxpfTtjZS5NQVhfVkFMVUU9T2JqZWN0LmZyZWV6ZShuZXcgY2UoLU1hdGguUEksLVAuUElfT1ZFUl9UV08sTWF0aC5QSSxQLlBJX09WRVJfVFdPKSk7TnQ9Y2V9KTtmdW5jdGlvbiBlZSh0LGUpe3RoaXMuY2VudGVyPWEuY2xvbmUodD8/YS5aRVJPKSx0aGlzLnJhZGl1cz1lPz8wfXZhciB3aCxPaCxFaCxSaCxTaCxDaCx4aCxpbyxQaCxNaCxOaCxJaCxOMyxzYixJMyx2MyxiaCxUaCxGMyxMMyxEMyxCMyxVMyxrMyxHMyxWMyx6MyxqMyxIMyxxMyxjYixLMyxXMyxYMyxZMywkMyxmYixhYixndCx2ZT0kKCgpPT57THQoKTtJZSgpO1d0KCk7ZnQoKTskdCgpO1NpKCk7R3MoKTtIbCgpO0t0KCk7Qm4oKTtVbigpO3duKCk7d2g9bmV3IGEsT2g9bmV3IGEsRWg9bmV3IGEsUmg9bmV3IGEsU2g9bmV3IGEsQ2g9bmV3IGEseGg9bmV3IGEsaW89bmV3IGEsUGg9bmV3IGEsTWg9bmV3IGEsTmg9bmV3IGEsSWg9bmV3IGEsTjM9NC8zKlAuUEk7ZWUuZnJvbVBvaW50cz1mdW5jdGlvbih0LGUpe2lmKGgoZSl8fChlPW5ldyBlZSksIWgodCl8fHQubGVuZ3RoPT09MClyZXR1cm4gZS5jZW50ZXI9YS5jbG9uZShhLlpFUk8sZS5jZW50ZXIpLGUucmFkaXVzPTAsZTtsZXQgbj1hLmNsb25lKHRbMF0seGgpLG89YS5jbG9uZShuLHdoKSxyPWEuY2xvbmUobixPaCksaT1hLmNsb25lKG4sRWgpLHM9YS5jbG9uZShuLFJoKSxmPWEuY2xvbmUobixTaCksdT1hLmNsb25lKG4sQ2gpLGM9dC5sZW5ndGgsbDtmb3IobD0xO2w8YztsKyspe2EuY2xvbmUodFtsXSxuKTtsZXQgRj1uLngsST1uLnksdj1uLno7RjxvLngmJmEuY2xvbmUobixvKSxGPnMueCYmYS5jbG9uZShuLHMpLEk8ci55JiZhLmNsb25lKG4sciksST5mLnkmJmEuY2xvbmUobixmKSx2PGkueiYmYS5jbG9uZShuLGkpLHY+dS56JiZhLmNsb25lKG4sdSl9bGV0IHA9YS5tYWduaXR1ZGVTcXVhcmVkKGEuc3VidHJhY3QocyxvLGlvKSksZD1hLm1hZ25pdHVkZVNxdWFyZWQoYS5zdWJ0cmFjdChmLHIsaW8pKSxtPWEubWFnbml0dWRlU3F1YXJlZChhLnN1YnRyYWN0KHUsaSxpbykpLF89byxnPXMsYj1wO2Q+YiYmKGI9ZCxfPXIsZz1mKSxtPmImJihiPW0sXz1pLGc9dSk7bGV0IFQ9UGg7VC54PShfLngrZy54KSouNSxULnk9KF8ueStnLnkpKi41LFQuej0oXy56K2cueikqLjU7bGV0IE89YS5tYWduaXR1ZGVTcXVhcmVkKGEuc3VidHJhY3QoZyxULGlvKSksRT1NYXRoLnNxcnQoTyksdz1NaDt3Lng9by54LHcueT1yLnksdy56PWkuejtsZXQgQz1OaDtDLng9cy54LEMueT1mLnksQy56PXUuejtsZXQgTT1hLm1pZHBvaW50KHcsQyxJaCksTj0wO2ZvcihsPTA7bDxjO2wrKyl7YS5jbG9uZSh0W2xdLG4pO2xldCBGPWEubWFnbml0dWRlKGEuc3VidHJhY3QobixNLGlvKSk7Rj5OJiYoTj1GKTtsZXQgST1hLm1hZ25pdHVkZVNxdWFyZWQoYS5zdWJ0cmFjdChuLFQsaW8pKTtpZihJPk8pe2xldCB2PU1hdGguc3FydChJKTtFPShFK3YpKi41LE89RSpFO2xldCBCPXYtRTtULng9KEUqVC54K0Iqbi54KS92LFQueT0oRSpULnkrQipuLnkpL3YsVC56PShFKlQueitCKm4ueikvdn19cmV0dXJuIEU8Tj8oYS5jbG9uZShULGUuY2VudGVyKSxlLnJhZGl1cz1FKTooYS5jbG9uZShNLGUuY2VudGVyKSxlLnJhZGl1cz1OKSxlfTtzYj1uZXcgSm4sSTM9bmV3IGEsdjM9bmV3IGEsYmg9bmV3IGN0LFRoPW5ldyBjdDtlZS5mcm9tUmVjdGFuZ2xlMkQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBlZS5mcm9tUmVjdGFuZ2xlV2l0aEhlaWdodHMyRCh0LGUsMCwwLG4pfTtlZS5mcm9tUmVjdGFuZ2xlV2l0aEhlaWdodHMyRD1mdW5jdGlvbih0LGUsbixvLHIpe2lmKGgocil8fChyPW5ldyBlZSksIWgodCkpcmV0dXJuIHIuY2VudGVyPWEuY2xvbmUoYS5aRVJPLHIuY2VudGVyKSxyLnJhZGl1cz0wLHI7c2IuX2VsbGlwc29pZD1ZLmRlZmF1bHQsZT1lPz9zYixOdC5zb3V0aHdlc3QodCxiaCksYmguaGVpZ2h0PW4sTnQubm9ydGhlYXN0KHQsVGgpLFRoLmhlaWdodD1vO2xldCBpPWUucHJvamVjdChiaCxJMykscz1lLnByb2plY3QoVGgsdjMpLGY9cy54LWkueCx1PXMueS1pLnksYz1zLnotaS56O3IucmFkaXVzPU1hdGguc3FydChmKmYrdSp1K2MqYykqLjU7bGV0IGw9ci5jZW50ZXI7cmV0dXJuIGwueD1pLngrZiouNSxsLnk9aS55K3UqLjUsbC56PWkueitjKi41LHJ9O0YzPVtdO2VlLmZyb21SZWN0YW5nbGUzRD1mdW5jdGlvbih0LGUsbixvKXtpZihlPWU/P1kuZGVmYXVsdCxuPW4/PzAsaChvKXx8KG89bmV3IGVlKSwhaCh0KSlyZXR1cm4gby5jZW50ZXI9YS5jbG9uZShhLlpFUk8sby5jZW50ZXIpLG8ucmFkaXVzPTAsbztsZXQgcj1OdC5zdWJzYW1wbGUodCxlLG4sRjMpO3JldHVybiBlZS5mcm9tUG9pbnRzKHIsbyl9O2VlLmZyb21WZXJ0aWNlcz1mdW5jdGlvbih0LGUsbixvKXtpZihoKG8pfHwobz1uZXcgZWUpLCFoKHQpfHx0Lmxlbmd0aD09PTApcmV0dXJuIG8uY2VudGVyPWEuY2xvbmUoYS5aRVJPLG8uY2VudGVyKSxvLnJhZGl1cz0wLG87ZT1lPz9hLlpFUk8sbj1uPz8zLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJzdHJpZGUiLG4sMyk7bGV0IHI9eGg7ci54PXRbMF0rZS54LHIueT10WzFdK2UueSxyLno9dFsyXStlLno7bGV0IGk9YS5jbG9uZShyLHdoKSxzPWEuY2xvbmUocixPaCksZj1hLmNsb25lKHIsRWgpLHU9YS5jbG9uZShyLFJoKSxjPWEuY2xvbmUocixTaCksbD1hLmNsb25lKHIsQ2gpLHA9dC5sZW5ndGgsZDtmb3IoZD0wO2Q8cDtkKz1uKXtsZXQgdj10W2RdK2UueCxCPXRbZCsxXStlLnksQT10W2QrMl0rZS56O3IueD12LHIueT1CLHIuej1BLHY8aS54JiZhLmNsb25lKHIsaSksdj51LngmJmEuY2xvbmUocix1KSxCPHMueSYmYS5jbG9uZShyLHMpLEI+Yy55JiZhLmNsb25lKHIsYyksQTxmLnomJmEuY2xvbmUocixmKSxBPmwueiYmYS5jbG9uZShyLGwpfWxldCBtPWEubWFnbml0dWRlU3F1YXJlZChhLnN1YnRyYWN0KHUsaSxpbykpLF89YS5tYWduaXR1ZGVTcXVhcmVkKGEuc3VidHJhY3QoYyxzLGlvKSksZz1hLm1hZ25pdHVkZVNxdWFyZWQoYS5zdWJ0cmFjdChsLGYsaW8pKSxiPWksVD11LE89bTtfPk8mJihPPV8sYj1zLFQ9YyksZz5PJiYoTz1nLGI9ZixUPWwpO2xldCBFPVBoO0UueD0oYi54K1QueCkqLjUsRS55PShiLnkrVC55KSouNSxFLno9KGIueitULnopKi41O2xldCB3PWEubWFnbml0dWRlU3F1YXJlZChhLnN1YnRyYWN0KFQsRSxpbykpLEM9TWF0aC5zcXJ0KHcpLE09TWg7TS54PWkueCxNLnk9cy55LE0uej1mLno7bGV0IE49Tmg7Ti54PXUueCxOLnk9Yy55LE4uej1sLno7bGV0IEY9YS5taWRwb2ludChNLE4sSWgpLEk9MDtmb3IoZD0wO2Q8cDtkKz1uKXtyLng9dFtkXStlLngsci55PXRbZCsxXStlLnksci56PXRbZCsyXStlLno7bGV0IHY9YS5tYWduaXR1ZGUoYS5zdWJ0cmFjdChyLEYsaW8pKTt2PkkmJihJPXYpO2xldCBCPWEubWFnbml0dWRlU3F1YXJlZChhLnN1YnRyYWN0KHIsRSxpbykpO2lmKEI+dyl7bGV0IEE9TWF0aC5zcXJ0KEIpO0M9KEMrQSkqLjUsdz1DKkM7bGV0IFM9QS1DO0UueD0oQypFLngrUypyLngpL0EsRS55PShDKkUueStTKnIueSkvQSxFLno9KEMqRS56K1Mqci56KS9BfX1yZXR1cm4gQzxJPyhhLmNsb25lKEUsby5jZW50ZXIpLG8ucmFkaXVzPUMpOihhLmNsb25lKEYsby5jZW50ZXIpLG8ucmFkaXVzPUkpLG99O2VlLmZyb21FbmNvZGVkQ2FydGVzaWFuVmVydGljZXM9ZnVuY3Rpb24odCxlLG4pe2lmKGgobil8fChuPW5ldyBlZSksIWgodCl8fCFoKGUpfHx0Lmxlbmd0aCE9PWUubGVuZ3RofHx0Lmxlbmd0aD09PTApcmV0dXJuIG4uY2VudGVyPWEuY2xvbmUoYS5aRVJPLG4uY2VudGVyKSxuLnJhZGl1cz0wLG47bGV0IG89eGg7by54PXRbMF0rZVswXSxvLnk9dFsxXStlWzFdLG8uej10WzJdK2VbMl07bGV0IHI9YS5jbG9uZShvLHdoKSxpPWEuY2xvbmUobyxPaCkscz1hLmNsb25lKG8sRWgpLGY9YS5jbG9uZShvLFJoKSx1PWEuY2xvbmUobyxTaCksYz1hLmNsb25lKG8sQ2gpLGw9dC5sZW5ndGgscDtmb3IocD0wO3A8bDtwKz0zKXtsZXQgST10W3BdK2VbcF0sdj10W3ArMV0rZVtwKzFdLEI9dFtwKzJdK2VbcCsyXTtvLng9SSxvLnk9dixvLno9QixJPHIueCYmYS5jbG9uZShvLHIpLEk+Zi54JiZhLmNsb25lKG8sZiksdjxpLnkmJmEuY2xvbmUobyxpKSx2PnUueSYmYS5jbG9uZShvLHUpLEI8cy56JiZhLmNsb25lKG8scyksQj5jLnomJmEuY2xvbmUobyxjKX1sZXQgZD1hLm1hZ25pdHVkZVNxdWFyZWQoYS5zdWJ0cmFjdChmLHIsaW8pKSxtPWEubWFnbml0dWRlU3F1YXJlZChhLnN1YnRyYWN0KHUsaSxpbykpLF89YS5tYWduaXR1ZGVTcXVhcmVkKGEuc3VidHJhY3QoYyxzLGlvKSksZz1yLGI9ZixUPWQ7bT5UJiYoVD1tLGc9aSxiPXUpLF8+VCYmKFQ9XyxnPXMsYj1jKTtsZXQgTz1QaDtPLng9KGcueCtiLngpKi41LE8ueT0oZy55K2IueSkqLjUsTy56PShnLnorYi56KSouNTtsZXQgRT1hLm1hZ25pdHVkZVNxdWFyZWQoYS5zdWJ0cmFjdChiLE8saW8pKSx3PU1hdGguc3FydChFKSxDPU1oO0MueD1yLngsQy55PWkueSxDLno9cy56O2xldCBNPU5oO00ueD1mLngsTS55PXUueSxNLno9Yy56O2xldCBOPWEubWlkcG9pbnQoQyxNLEloKSxGPTA7Zm9yKHA9MDtwPGw7cCs9Myl7by54PXRbcF0rZVtwXSxvLnk9dFtwKzFdK2VbcCsxXSxvLno9dFtwKzJdK2VbcCsyXTtsZXQgST1hLm1hZ25pdHVkZShhLnN1YnRyYWN0KG8sTixpbykpO0k+RiYmKEY9SSk7bGV0IHY9YS5tYWduaXR1ZGVTcXVhcmVkKGEuc3VidHJhY3QobyxPLGlvKSk7aWYodj5FKXtsZXQgQj1NYXRoLnNxcnQodik7dz0odytCKSouNSxFPXcqdztsZXQgQT1CLXc7Ty54PSh3Kk8ueCtBKm8ueCkvQixPLnk9KHcqTy55K0Eqby55KS9CLE8uej0odypPLnorQSpvLnopL0J9fXJldHVybiB3PEY/KGEuY2xvbmUoTyxuLmNlbnRlciksbi5yYWRpdXM9dyk6KGEuY2xvbmUoTixuLmNlbnRlciksbi5yYWRpdXM9Riksbn07ZWUuZnJvbUNvcm5lclBvaW50cz1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJjb3JuZXIiLHQpLHkudHlwZU9mLm9iamVjdCgib3Bwb3NpdGVDb3JuZXIiLGUpLGgobil8fChuPW5ldyBlZSk7bGV0IG89YS5taWRwb2ludCh0LGUsbi5jZW50ZXIpO3JldHVybiBuLnJhZGl1cz1hLmRpc3RhbmNlKG8sZSksbn07ZWUuZnJvbUVsbGlwc29pZD1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImVsbGlwc29pZCIsdCksaChlKXx8KGU9bmV3IGVlKSxhLmNsb25lKGEuWkVSTyxlLmNlbnRlciksZS5yYWRpdXM9dC5tYXhpbXVtUmFkaXVzLGV9O0wzPW5ldyBhO2VlLmZyb21Cb3VuZGluZ1NwaGVyZXM9ZnVuY3Rpb24odCxlKXtpZihoKGUpfHwoZT1uZXcgZWUpLCFoKHQpfHx0Lmxlbmd0aD09PTApcmV0dXJuIGUuY2VudGVyPWEuY2xvbmUoYS5aRVJPLGUuY2VudGVyKSxlLnJhZGl1cz0wLGU7bGV0IG49dC5sZW5ndGg7aWYobj09PTEpcmV0dXJuIGVlLmNsb25lKHRbMF0sZSk7aWYobj09PTIpcmV0dXJuIGVlLnVuaW9uKHRbMF0sdFsxXSxlKTtsZXQgbz1bXSxyO2ZvcihyPTA7cjxuO3IrKylvLnB1c2godFtyXS5jZW50ZXIpO2U9ZWUuZnJvbVBvaW50cyhvLGUpO2xldCBpPWUuY2VudGVyLHM9ZS5yYWRpdXM7Zm9yKHI9MDtyPG47cisrKXtsZXQgZj10W3JdO3M9TWF0aC5tYXgocyxhLmRpc3RhbmNlKGksZi5jZW50ZXIsTDMpK2YucmFkaXVzKX1yZXR1cm4gZS5yYWRpdXM9cyxlfTtEMz1uZXcgYSxCMz1uZXcgYSxVMz1uZXcgYTtlZS5mcm9tT3JpZW50ZWRCb3VuZGluZ0JveD1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgib3JpZW50ZWRCb3VuZGluZ0JveCIsdCksaChlKXx8KGU9bmV3IGVlKTtsZXQgbj10LmhhbGZBeGVzLG89Wi5nZXRDb2x1bW4obiwwLEQzKSxyPVouZ2V0Q29sdW1uKG4sMSxCMyksaT1aLmdldENvbHVtbihuLDIsVTMpO3JldHVybiBhLmFkZChvLHIsbyksYS5hZGQobyxpLG8pLGUuY2VudGVyPWEuY2xvbmUodC5jZW50ZXIsZS5jZW50ZXIpLGUucmFkaXVzPWEubWFnbml0dWRlKG8pLGV9O2szPW5ldyBhLEczPW5ldyBhO2VlLmZyb21UcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgidHJhbnNmb3JtYXRpb24iLHQpLGgoZSl8fChlPW5ldyBlZSk7bGV0IG49c3QuZ2V0VHJhbnNsYXRpb24odCxrMyksbz1zdC5nZXRTY2FsZSh0LEczKSxyPS41KmEubWFnbml0dWRlKG8pO3JldHVybiBlLmNlbnRlcj1hLmNsb25lKG4sZS5jZW50ZXIpLGUucmFkaXVzPXIsZX07ZWUuY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihoKHQpKXJldHVybiBoKGUpPyhlLmNlbnRlcj1hLmNsb25lKHQuY2VudGVyLGUuY2VudGVyKSxlLnJhZGl1cz10LnJhZGl1cyxlKTpuZXcgZWUodC5jZW50ZXIsdC5yYWRpdXMpfTtlZS5wYWNrZWRMZW5ndGg9NDtlZS5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPW4/PzA7bGV0IG89dC5jZW50ZXI7cmV0dXJuIGVbbisrXT1vLngsZVtuKytdPW8ueSxlW24rK109by56LGVbbl09dC5yYWRpdXMsZX07ZWUudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LmRlZmluZWQoImFycmF5Iix0KSxlPWU/PzAsaChuKXx8KG49bmV3IGVlKTtsZXQgbz1uLmNlbnRlcjtyZXR1cm4gby54PXRbZSsrXSxvLnk9dFtlKytdLG8uej10W2UrK10sbi5yYWRpdXM9dFtlXSxufTtWMz1uZXcgYSx6Mz1uZXcgYTtlZS51bmlvbj1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSxoKG4pfHwobj1uZXcgZWUpO2xldCBvPXQuY2VudGVyLHI9dC5yYWRpdXMsaT1lLmNlbnRlcixzPWUucmFkaXVzLGY9YS5zdWJ0cmFjdChpLG8sVjMpLHU9YS5tYWduaXR1ZGUoZik7aWYocj49dStzKXJldHVybiB0LmNsb25lKG4pLG47aWYocz49dStyKXJldHVybiBlLmNsb25lKG4pLG47bGV0IGM9KHIrdStzKSouNSxsPWEubXVsdGlwbHlCeVNjYWxhcihmLCgtcitjKS91LHozKTtyZXR1cm4gYS5hZGQobCxvLGwpLGEuY2xvbmUobCxuLmNlbnRlciksbi5yYWRpdXM9YyxufTtqMz1uZXcgYTtlZS5leHBhbmQ9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgic3BoZXJlIix0KSx5LnR5cGVPZi5vYmplY3QoInBvaW50IixlKSxuPWVlLmNsb25lKHQsbik7bGV0IG89YS5tYWduaXR1ZGUoYS5zdWJ0cmFjdChlLG4uY2VudGVyLGozKSk7cmV0dXJuIG8+bi5yYWRpdXMmJihuLnJhZGl1cz1vKSxufTtlZS5pbnRlcnNlY3RQbGFuZT1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgic3BoZXJlIix0KSx5LnR5cGVPZi5vYmplY3QoInBsYW5lIixlKTtsZXQgbj10LmNlbnRlcixvPXQucmFkaXVzLHI9ZS5ub3JtYWwsaT1hLmRvdChyLG4pK2UuZGlzdGFuY2U7cmV0dXJuIGk8LW8/U24uT1VUU0lERTppPG8/U24uSU5URVJTRUNUSU5HOlNuLklOU0lERX07ZWUudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJzcGhlcmUiLHQpLHkudHlwZU9mLm9iamVjdCgidHJhbnNmb3JtIixlKSxoKG4pfHwobj1uZXcgZWUpLG4uY2VudGVyPXN0Lm11bHRpcGx5QnlQb2ludChlLHQuY2VudGVyLG4uY2VudGVyKSxuLnJhZGl1cz1zdC5nZXRNYXhpbXVtU2NhbGUoZSkqdC5yYWRpdXMsbn07SDM9bmV3IGE7ZWUuZGlzdGFuY2VTcXVhcmVkVG89ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoInNwaGVyZSIsdCkseS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLGUpO2xldCBuPWEuc3VidHJhY3QodC5jZW50ZXIsZSxIMyksbz1hLm1hZ25pdHVkZShuKS10LnJhZGl1cztyZXR1cm4gbzw9MD8wOm8qb307ZWUudHJhbnNmb3JtV2l0aG91dFNjYWxlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJzcGhlcmUiLHQpLHkudHlwZU9mLm9iamVjdCgidHJhbnNmb3JtIixlKSxoKG4pfHwobj1uZXcgZWUpLG4uY2VudGVyPXN0Lm11bHRpcGx5QnlQb2ludChlLHQuY2VudGVyLG4uY2VudGVyKSxuLnJhZGl1cz10LnJhZGl1cyxufTtxMz1uZXcgYTtlZS5jb21wdXRlUGxhbmVEaXN0YW5jZXM9ZnVuY3Rpb24odCxlLG4sbyl7eS50eXBlT2Yub2JqZWN0KCJzcGhlcmUiLHQpLHkudHlwZU9mLm9iamVjdCgicG9zaXRpb24iLGUpLHkudHlwZU9mLm9iamVjdCgiZGlyZWN0aW9uIixuKSxoKG8pfHwobz1uZXcgUXIpO2xldCByPWEuc3VidHJhY3QodC5jZW50ZXIsZSxxMyksaT1hLmRvdChuLHIpO3JldHVybiBvLnN0YXJ0PWktdC5yYWRpdXMsby5zdG9wPWkrdC5yYWRpdXMsb307Y2I9bmV3IGEsSzM9bmV3IGEsVzM9bmV3IGEsWDM9bmV3IGEsWTM9bmV3IGEsJDM9bmV3IGN0LGZiPW5ldyBBcnJheSg4KTtmb3IobGV0IHQ9MDt0PDg7Kyt0KWZiW3RdPW5ldyBhO2FiPW5ldyBKbjtlZS5wcm9qZWN0VG8yRD1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJzcGhlcmUiLHQpLGFiLl9lbGxpcHNvaWQ9WS5kZWZhdWx0LGU9ZT8/YWI7bGV0IG89ZS5lbGxpcHNvaWQscj10LmNlbnRlcixpPXQucmFkaXVzLHM7YS5lcXVhbHMocixhLlpFUk8pP3M9YS5jbG9uZShhLlVOSVRfWCxjYik6cz1vLmdlb2RldGljU3VyZmFjZU5vcm1hbChyLGNiKTtsZXQgZj1hLmNyb3NzKGEuVU5JVF9aLHMsSzMpO2Eubm9ybWFsaXplKGYsZik7bGV0IHU9YS5jcm9zcyhzLGYsVzMpO2Eubm9ybWFsaXplKHUsdSksYS5tdWx0aXBseUJ5U2NhbGFyKHMsaSxzKSxhLm11bHRpcGx5QnlTY2FsYXIodSxpLHUpLGEubXVsdGlwbHlCeVNjYWxhcihmLGksZik7bGV0IGM9YS5uZWdhdGUodSxZMyksbD1hLm5lZ2F0ZShmLFgzKSxwPWZiLGQ9cFswXTthLmFkZChzLHUsZCksYS5hZGQoZCxmLGQpLGQ9cFsxXSxhLmFkZChzLHUsZCksYS5hZGQoZCxsLGQpLGQ9cFsyXSxhLmFkZChzLGMsZCksYS5hZGQoZCxsLGQpLGQ9cFszXSxhLmFkZChzLGMsZCksYS5hZGQoZCxmLGQpLGEubmVnYXRlKHMscyksZD1wWzRdLGEuYWRkKHMsdSxkKSxhLmFkZChkLGYsZCksZD1wWzVdLGEuYWRkKHMsdSxkKSxhLmFkZChkLGwsZCksZD1wWzZdLGEuYWRkKHMsYyxkKSxhLmFkZChkLGwsZCksZD1wWzddLGEuYWRkKHMsYyxkKSxhLmFkZChkLGYsZCk7bGV0IG09cC5sZW5ndGg7Zm9yKGxldCBUPTA7VDxtOysrVCl7bGV0IE89cFtUXTthLmFkZChyLE8sTyk7bGV0IEU9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhPLCQzKTtlLnByb2plY3QoRSxPKX1uPWVlLmZyb21Qb2ludHMocCxuKSxyPW4uY2VudGVyO2xldCBfPXIueCxnPXIueSxiPXIuejtyZXR1cm4gci54PWIsci55PV8sci56PWcsbn07ZWUuaXNPY2NsdWRlZD1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInNwaGVyZSIsdCkseS50eXBlT2Yub2JqZWN0KCJvY2NsdWRlciIsZSksIWUuaXNCb3VuZGluZ1NwaGVyZVZpc2libGUodCl9O2VlLmVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZXx8aCh0KSYmaChlKSYmYS5lcXVhbHModC5jZW50ZXIsZS5jZW50ZXIpJiZ0LnJhZGl1cz09PWUucmFkaXVzfTtlZS5wcm90b3R5cGUuaW50ZXJzZWN0UGxhbmU9ZnVuY3Rpb24odCl7cmV0dXJuIGVlLmludGVyc2VjdFBsYW5lKHRoaXMsdCl9O2VlLnByb3RvdHlwZS5kaXN0YW5jZVNxdWFyZWRUbz1mdW5jdGlvbih0KXtyZXR1cm4gZWUuZGlzdGFuY2VTcXVhcmVkVG8odGhpcyx0KX07ZWUucHJvdG90eXBlLmNvbXB1dGVQbGFuZURpc3RhbmNlcz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGVlLmNvbXB1dGVQbGFuZURpc3RhbmNlcyh0aGlzLHQsZSxuKX07ZWUucHJvdG90eXBlLmlzT2NjbHVkZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIGVlLmlzT2NjbHVkZWQodGhpcyx0KX07ZWUucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gZWUuZXF1YWxzKHRoaXMsdCl9O2VlLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gZWUuY2xvbmUodGhpcyx0KX07ZWUucHJvdG90eXBlLnZvbHVtZT1mdW5jdGlvbigpe2xldCB0PXRoaXMucmFkaXVzO3JldHVybiBOMyp0KnQqdH07Z3Q9ZWV9KTt2YXIgWjMsSHQsJHM9JCgoKT0+e1ozPXtERVBUSF9CVUZGRVJfQklUOjI1NixTVEVOQ0lMX0JVRkZFUl9CSVQ6MTAyNCxDT0xPUl9CVUZGRVJfQklUOjE2Mzg0LFBPSU5UUzowLExJTkVTOjEsTElORV9MT09QOjIsTElORV9TVFJJUDozLFRSSUFOR0xFUzo0LFRSSUFOR0xFX1NUUklQOjUsVFJJQU5HTEVfRkFOOjYsWkVSTzowLE9ORToxLFNSQ19DT0xPUjo3NjgsT05FX01JTlVTX1NSQ19DT0xPUjo3NjksU1JDX0FMUEhBOjc3MCxPTkVfTUlOVVNfU1JDX0FMUEhBOjc3MSxEU1RfQUxQSEE6NzcyLE9ORV9NSU5VU19EU1RfQUxQSEE6NzczLERTVF9DT0xPUjo3NzQsT05FX01JTlVTX0RTVF9DT0xPUjo3NzUsU1JDX0FMUEhBX1NBVFVSQVRFOjc3NixGVU5DX0FERDozMjc3NCxCTEVORF9FUVVBVElPTjozMjc3NyxCTEVORF9FUVVBVElPTl9SR0I6MzI3NzcsQkxFTkRfRVFVQVRJT05fQUxQSEE6MzQ4NzcsRlVOQ19TVUJUUkFDVDozMjc3OCxGVU5DX1JFVkVSU0VfU1VCVFJBQ1Q6MzI3NzksQkxFTkRfRFNUX1JHQjozMjk2OCxCTEVORF9TUkNfUkdCOjMyOTY5LEJMRU5EX0RTVF9BTFBIQTozMjk3MCxCTEVORF9TUkNfQUxQSEE6MzI5NzEsQ09OU1RBTlRfQ09MT1I6MzI3NjksT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SOjMyNzcwLENPTlNUQU5UX0FMUEhBOjMyNzcxLE9ORV9NSU5VU19DT05TVEFOVF9BTFBIQTozMjc3MixCTEVORF9DT0xPUjozMjc3MyxBUlJBWV9CVUZGRVI6MzQ5NjIsRUxFTUVOVF9BUlJBWV9CVUZGRVI6MzQ5NjMsQVJSQVlfQlVGRkVSX0JJTkRJTkc6MzQ5NjQsRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORzozNDk2NSxTVFJFQU1fRFJBVzozNTA0MCxTVEFUSUNfRFJBVzozNTA0NCxEWU5BTUlDX0RSQVc6MzUwNDgsQlVGRkVSX1NJWkU6MzQ2NjAsQlVGRkVSX1VTQUdFOjM0NjYxLENVUlJFTlRfVkVSVEVYX0FUVFJJQjozNDM0MixGUk9OVDoxMDI4LEJBQ0s6MTAyOSxGUk9OVF9BTkRfQkFDSzoxMDMyLENVTExfRkFDRToyODg0LEJMRU5EOjMwNDIsRElUSEVSOjMwMjQsU1RFTkNJTF9URVNUOjI5NjAsREVQVEhfVEVTVDoyOTI5LFNDSVNTT1JfVEVTVDozMDg5LFBPTFlHT05fT0ZGU0VUX0ZJTEw6MzI4MjMsU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFOjMyOTI2LFNBTVBMRV9DT1ZFUkFHRTozMjkyOCxOT19FUlJPUjowLElOVkFMSURfRU5VTToxMjgwLElOVkFMSURfVkFMVUU6MTI4MSxJTlZBTElEX09QRVJBVElPTjoxMjgyLE9VVF9PRl9NRU1PUlk6MTI4NSxDVzoyMzA0LENDVzoyMzA1LExJTkVfV0lEVEg6Mjg0OSxBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0U6MzM5MDEsQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFOjMzOTAyLENVTExfRkFDRV9NT0RFOjI4ODUsRlJPTlRfRkFDRToyODg2LERFUFRIX1JBTkdFOjI5MjgsREVQVEhfV1JJVEVNQVNLOjI5MzAsREVQVEhfQ0xFQVJfVkFMVUU6MjkzMSxERVBUSF9GVU5DOjI5MzIsU1RFTkNJTF9DTEVBUl9WQUxVRToyOTYxLFNURU5DSUxfRlVOQzoyOTYyLFNURU5DSUxfRkFJTDoyOTY0LFNURU5DSUxfUEFTU19ERVBUSF9GQUlMOjI5NjUsU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1M6Mjk2NixTVEVOQ0lMX1JFRjoyOTY3LFNURU5DSUxfVkFMVUVfTUFTSzoyOTYzLFNURU5DSUxfV1JJVEVNQVNLOjI5NjgsU1RFTkNJTF9CQUNLX0ZVTkM6MzQ4MTYsU1RFTkNJTF9CQUNLX0ZBSUw6MzQ4MTcsU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTDozNDgxOCxTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTOjM0ODE5LFNURU5DSUxfQkFDS19SRUY6MzYwMDMsU1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6MzYwMDQsU1RFTkNJTF9CQUNLX1dSSVRFTUFTSzozNjAwNSxWSUVXUE9SVDoyOTc4LFNDSVNTT1JfQk9YOjMwODgsQ09MT1JfQ0xFQVJfVkFMVUU6MzEwNixDT0xPUl9XUklURU1BU0s6MzEwNyxVTlBBQ0tfQUxJR05NRU5UOjMzMTcsUEFDS19BTElHTk1FTlQ6MzMzMyxNQVhfVEVYVFVSRV9TSVpFOjMzNzksTUFYX1ZJRVdQT1JUX0RJTVM6MzM4NixTVUJQSVhFTF9CSVRTOjM0MDgsUkVEX0JJVFM6MzQxMCxHUkVFTl9CSVRTOjM0MTEsQkxVRV9CSVRTOjM0MTIsQUxQSEFfQklUUzozNDEzLERFUFRIX0JJVFM6MzQxNCxTVEVOQ0lMX0JJVFM6MzQxNSxQT0xZR09OX09GRlNFVF9VTklUUzoxMDc1MixQT0xZR09OX09GRlNFVF9GQUNUT1I6MzI4MjQsVEVYVFVSRV9CSU5ESU5HXzJEOjMyODczLFNBTVBMRV9CVUZGRVJTOjMyOTM2LFNBTVBMRVM6MzI5MzcsU0FNUExFX0NPVkVSQUdFX1ZBTFVFOjMyOTM4LFNBTVBMRV9DT1ZFUkFHRV9JTlZFUlQ6MzI5MzksQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6MzQ0NjcsRE9OVF9DQVJFOjQzNTIsRkFTVEVTVDo0MzUzLE5JQ0VTVDo0MzU0LEdFTkVSQVRFX01JUE1BUF9ISU5UOjMzMTcwLEJZVEU6NTEyMCxVTlNJR05FRF9CWVRFOjUxMjEsU0hPUlQ6NTEyMixVTlNJR05FRF9TSE9SVDo1MTIzLElOVDo1MTI0LFVOU0lHTkVEX0lOVDo1MTI1LEZMT0FUOjUxMjYsREVQVEhfQ09NUE9ORU5UOjY0MDIsQUxQSEE6NjQwNixSR0I6NjQwNyxSR0JBOjY0MDgsTFVNSU5BTkNFOjY0MDksTFVNSU5BTkNFX0FMUEhBOjY0MTAsVU5TSUdORURfU0hPUlRfNF80XzRfNDozMjgxOSxVTlNJR05FRF9TSE9SVF81XzVfNV8xOjMyODIwLFVOU0lHTkVEX1NIT1JUXzVfNl81OjMzNjM1LEZSQUdNRU5UX1NIQURFUjozNTYzMixWRVJURVhfU0hBREVSOjM1NjMzLE1BWF9WRVJURVhfQVRUUklCUzozNDkyMSxNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzozNjM0NyxNQVhfVkFSWUlOR19WRUNUT1JTOjM2MzQ4LE1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTOjM1NjYxLE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUzozNTY2MCxNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzozNDkzMCxNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOjM2MzQ5LFNIQURFUl9UWVBFOjM1NjYzLERFTEVURV9TVEFUVVM6MzU3MTIsTElOS19TVEFUVVM6MzU3MTQsVkFMSURBVEVfU1RBVFVTOjM1NzE1LEFUVEFDSEVEX1NIQURFUlM6MzU3MTcsQUNUSVZFX1VOSUZPUk1TOjM1NzE4LEFDVElWRV9BVFRSSUJVVEVTOjM1NzIxLFNIQURJTkdfTEFOR1VBR0VfVkVSU0lPTjozNTcyNCxDVVJSRU5UX1BST0dSQU06MzU3MjUsTkVWRVI6NTEyLExFU1M6NTEzLEVRVUFMOjUxNCxMRVFVQUw6NTE1LEdSRUFURVI6NTE2LE5PVEVRVUFMOjUxNyxHRVFVQUw6NTE4LEFMV0FZUzo1MTksS0VFUDo3NjgwLFJFUExBQ0U6NzY4MSxJTkNSOjc2ODIsREVDUjo3NjgzLElOVkVSVDo1Mzg2LElOQ1JfV1JBUDozNDA1NSxERUNSX1dSQVA6MzQwNTYsVkVORE9SOjc5MzYsUkVOREVSRVI6NzkzNyxWRVJTSU9OOjc5MzgsTkVBUkVTVDo5NzI4LExJTkVBUjo5NzI5LE5FQVJFU1RfTUlQTUFQX05FQVJFU1Q6OTk4NCxMSU5FQVJfTUlQTUFQX05FQVJFU1Q6OTk4NSxORUFSRVNUX01JUE1BUF9MSU5FQVI6OTk4NixMSU5FQVJfTUlQTUFQX0xJTkVBUjo5OTg3LFRFWFRVUkVfTUFHX0ZJTFRFUjoxMDI0MCxURVhUVVJFX01JTl9GSUxURVI6MTAyNDEsVEVYVFVSRV9XUkFQX1M6MTAyNDIsVEVYVFVSRV9XUkFQX1Q6MTAyNDMsVEVYVFVSRV8yRDozNTUzLFRFWFRVUkU6NTg5MCxURVhUVVJFX0NVQkVfTUFQOjM0MDY3LFRFWFRVUkVfQklORElOR19DVUJFX01BUDozNDA2OCxURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6MzQwNjksVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOjM0MDcwLFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWTozNDA3MSxURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6MzQwNzIsVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOjM0MDczLFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjozNDA3NCxNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFOjM0MDc2LFRFWFRVUkUwOjMzOTg0LFRFWFRVUkUxOjMzOTg1LFRFWFRVUkUyOjMzOTg2LFRFWFRVUkUzOjMzOTg3LFRFWFRVUkU0OjMzOTg4LFRFWFRVUkU1OjMzOTg5LFRFWFRVUkU2OjMzOTkwLFRFWFRVUkU3OjMzOTkxLFRFWFRVUkU4OjMzOTkyLFRFWFRVUkU5OjMzOTkzLFRFWFRVUkUxMDozMzk5NCxURVhUVVJFMTE6MzM5OTUsVEVYVFVSRTEyOjMzOTk2LFRFWFRVUkUxMzozMzk5NyxURVhUVVJFMTQ6MzM5OTgsVEVYVFVSRTE1OjMzOTk5LFRFWFRVUkUxNjozNGUzLFRFWFRVUkUxNzozNDAwMSxURVhUVVJFMTg6MzQwMDIsVEVYVFVSRTE5OjM0MDAzLFRFWFRVUkUyMDozNDAwNCxURVhUVVJFMjE6MzQwMDUsVEVYVFVSRTIyOjM0MDA2LFRFWFRVUkUyMzozNDAwNyxURVhUVVJFMjQ6MzQwMDgsVEVYVFVSRTI1OjM0MDA5LFRFWFRVUkUyNjozNDAxMCxURVhUVVJFMjc6MzQwMTEsVEVYVFVSRTI4OjM0MDEyLFRFWFRVUkUyOTozNDAxMyxURVhUVVJFMzA6MzQwMTQsVEVYVFVSRTMxOjM0MDE1LEFDVElWRV9URVhUVVJFOjM0MDE2LFJFUEVBVDoxMDQ5NyxDTEFNUF9UT19FREdFOjMzMDcxLE1JUlJPUkVEX1JFUEVBVDozMzY0OCxGTE9BVF9WRUMyOjM1NjY0LEZMT0FUX1ZFQzM6MzU2NjUsRkxPQVRfVkVDNDozNTY2NixJTlRfVkVDMjozNTY2NyxJTlRfVkVDMzozNTY2OCxJTlRfVkVDNDozNTY2OSxCT09MOjM1NjcwLEJPT0xfVkVDMjozNTY3MSxCT09MX1ZFQzM6MzU2NzIsQk9PTF9WRUM0OjM1NjczLEZMT0FUX01BVDI6MzU2NzQsRkxPQVRfTUFUMzozNTY3NSxGTE9BVF9NQVQ0OjM1Njc2LFNBTVBMRVJfMkQ6MzU2NzgsU0FNUExFUl9DVUJFOjM1NjgwLFZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRDozNDMzOCxWRVJURVhfQVRUUklCX0FSUkFZX1NJWkU6MzQzMzksVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREU6MzQzNDAsVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFOjM0MzQxLFZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRDozNDkyMixWRVJURVhfQVRUUklCX0FSUkFZX1BPSU5URVI6MzQzNzMsVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORzozNDk3NSxJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEU6MzU3MzgsSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQ6MzU3MzksQ09NUElMRV9TVEFUVVM6MzU3MTMsTE9XX0ZMT0FUOjM2MzM2LE1FRElVTV9GTE9BVDozNjMzNyxISUdIX0ZMT0FUOjM2MzM4LExPV19JTlQ6MzYzMzksTUVESVVNX0lOVDozNjM0MCxISUdIX0lOVDozNjM0MSxGUkFNRUJVRkZFUjozNjE2MCxSRU5ERVJCVUZGRVI6MzYxNjEsUkdCQTQ6MzI4NTQsUkdCNV9BMTozMjg1NSxSR0I1NjU6MzYxOTQsREVQVEhfQ09NUE9ORU5UMTY6MzMxODksU1RFTkNJTF9JTkRFWDo2NDAxLFNURU5DSUxfSU5ERVg4OjM2MTY4LERFUFRIX1NURU5DSUw6MzQwNDEsUkVOREVSQlVGRkVSX1dJRFRIOjM2MTYyLFJFTkRFUkJVRkZFUl9IRUlHSFQ6MzYxNjMsUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVDozNjE2NCxSRU5ERVJCVUZGRVJfUkVEX1NJWkU6MzYxNzYsUkVOREVSQlVGRkVSX0dSRUVOX1NJWkU6MzYxNzcsUkVOREVSQlVGRkVSX0JMVUVfU0laRTozNjE3OCxSRU5ERVJCVUZGRVJfQUxQSEFfU0laRTozNjE3OSxSRU5ERVJCVUZGRVJfREVQVEhfU0laRTozNjE4MCxSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFOjM2MTgxLEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6MzYwNDgsRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRTozNjA0OSxGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUw6MzYwNTAsRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0U6MzYwNTEsQ09MT1JfQVRUQUNITUVOVDA6MzYwNjQsREVQVEhfQVRUQUNITUVOVDozNjA5NixTVEVOQ0lMX0FUVEFDSE1FTlQ6MzYxMjgsREVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOjMzMzA2LE5PTkU6MCxGUkFNRUJVRkZFUl9DT01QTEVURTozNjA1MyxGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ6MzYwNTQsRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQ6MzYwNTUsRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TOjM2MDU3LEZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOjM2MDYxLEZSQU1FQlVGRkVSX0JJTkRJTkc6MzYwMDYsUkVOREVSQlVGRkVSX0JJTkRJTkc6MzYwMDcsTUFYX1JFTkRFUkJVRkZFUl9TSVpFOjM0MDI0LElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OOjEyODYsVU5QQUNLX0ZMSVBfWV9XRUJHTDozNzQ0MCxVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6Mzc0NDEsQ09OVEVYVF9MT1NUX1dFQkdMOjM3NDQyLFVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0w6Mzc0NDMsQlJPV1NFUl9ERUZBVUxUX1dFQkdMOjM3NDQ0LENPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6MzM3NzYsQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6MzM3NzcsQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ6MzM3NzgsQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6MzM3NzksQ09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRzozNTg0MCxDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HOjM1ODQxLENPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HOjM1ODQyLENPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HOjM1ODQzLENPTVBSRVNTRURfUkdCQV9BU1RDXzR4NF9XRUJHTDozNzgwOCxDT01QUkVTU0VEX1JHQl9FVEMxX1dFQkdMOjM2MTk2LENPTVBSRVNTRURfUkdCQV9CUFRDX1VOT1JNOjM2NDkyLEhBTEZfRkxPQVRfT0VTOjM2MTkzLERPVUJMRTo1MTMwLFJFQURfQlVGRkVSOjMwNzQsVU5QQUNLX1JPV19MRU5HVEg6MzMxNCxVTlBBQ0tfU0tJUF9ST1dTOjMzMTUsVU5QQUNLX1NLSVBfUElYRUxTOjMzMTYsUEFDS19ST1dfTEVOR1RIOjMzMzAsUEFDS19TS0lQX1JPV1M6MzMzMSxQQUNLX1NLSVBfUElYRUxTOjMzMzIsQ09MT1I6NjE0NCxERVBUSDo2MTQ1LFNURU5DSUw6NjE0NixSRUQ6NjQwMyxSR0I4OjMyODQ5LFJHQkE4OjMyODU2LFJHQjEwX0EyOjMyODU3LFRFWFRVUkVfQklORElOR18zRDozMjg3NCxVTlBBQ0tfU0tJUF9JTUFHRVM6MzI4NzcsVU5QQUNLX0lNQUdFX0hFSUdIVDozMjg3OCxURVhUVVJFXzNEOjMyODc5LFRFWFRVUkVfV1JBUF9SOjMyODgyLE1BWF8zRF9URVhUVVJFX1NJWkU6MzI4ODMsVU5TSUdORURfSU5UXzJfMTBfMTBfMTBfUkVWOjMzNjQwLE1BWF9FTEVNRU5UU19WRVJUSUNFUzozM2UzLE1BWF9FTEVNRU5UU19JTkRJQ0VTOjMzMDAxLFRFWFRVUkVfTUlOX0xPRDozMzA4MixURVhUVVJFX01BWF9MT0Q6MzMwODMsVEVYVFVSRV9CQVNFX0xFVkVMOjMzMDg0LFRFWFRVUkVfTUFYX0xFVkVMOjMzMDg1LE1JTjozMjc3NSxNQVg6MzI3NzYsREVQVEhfQ09NUE9ORU5UMjQ6MzMxOTAsTUFYX1RFWFRVUkVfTE9EX0JJQVM6MzQwNDUsVEVYVFVSRV9DT01QQVJFX01PREU6MzQ4OTIsVEVYVFVSRV9DT01QQVJFX0ZVTkM6MzQ4OTMsQ1VSUkVOVF9RVUVSWTozNDkxNyxRVUVSWV9SRVNVTFQ6MzQ5MTgsUVVFUllfUkVTVUxUX0FWQUlMQUJMRTozNDkxOSxTVFJFQU1fUkVBRDozNTA0MSxTVFJFQU1fQ09QWTozNTA0MixTVEFUSUNfUkVBRDozNTA0NSxTVEFUSUNfQ09QWTozNTA0NixEWU5BTUlDX1JFQUQ6MzUwNDksRFlOQU1JQ19DT1BZOjM1MDUwLE1BWF9EUkFXX0JVRkZFUlM6MzQ4NTIsRFJBV19CVUZGRVIwOjM0ODUzLERSQVdfQlVGRkVSMTozNDg1NCxEUkFXX0JVRkZFUjI6MzQ4NTUsRFJBV19CVUZGRVIzOjM0ODU2LERSQVdfQlVGRkVSNDozNDg1NyxEUkFXX0JVRkZFUjU6MzQ4NTgsRFJBV19CVUZGRVI2OjM0ODU5LERSQVdfQlVGRkVSNzozNDg2MCxEUkFXX0JVRkZFUjg6MzQ4NjEsRFJBV19CVUZGRVI5OjM0ODYyLERSQVdfQlVGRkVSMTA6MzQ4NjMsRFJBV19CVUZGRVIxMTozNDg2NCxEUkFXX0JVRkZFUjEyOjM0ODY1LERSQVdfQlVGRkVSMTM6MzQ4NjYsRFJBV19CVUZGRVIxNDozNDg2NyxEUkFXX0JVRkZFUjE1OjM0ODY4LE1BWF9GUkFHTUVOVF9VTklGT1JNX0NPTVBPTkVOVFM6MzU2NTcsTUFYX1ZFUlRFWF9VTklGT1JNX0NPTVBPTkVOVFM6MzU2NTgsU0FNUExFUl8zRDozNTY3OSxTQU1QTEVSXzJEX1NIQURPVzozNTY4MixGUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UOjM1NzIzLFBJWEVMX1BBQ0tfQlVGRkVSOjM1MDUxLFBJWEVMX1VOUEFDS19CVUZGRVI6MzUwNTIsUElYRUxfUEFDS19CVUZGRVJfQklORElORzozNTA1MyxQSVhFTF9VTlBBQ0tfQlVGRkVSX0JJTkRJTkc6MzUwNTUsRkxPQVRfTUFUMngzOjM1Njg1LEZMT0FUX01BVDJ4NDozNTY4NixGTE9BVF9NQVQzeDI6MzU2ODcsRkxPQVRfTUFUM3g0OjM1Njg4LEZMT0FUX01BVDR4MjozNTY4OSxGTE9BVF9NQVQ0eDM6MzU2OTAsU1JHQjozNTkwNCxTUkdCODozNTkwNSxTUkdCOF9BTFBIQTg6MzU5MDcsQ09NUEFSRV9SRUZfVE9fVEVYVFVSRTozNDg5NCxSR0JBMzJGOjM0ODM2LFJHQjMyRjozNDgzNyxSR0JBMTZGOjM0ODQyLFJHQjE2RjozNDg0MyxWRVJURVhfQVRUUklCX0FSUkFZX0lOVEVHRVI6MzUwNjksTUFYX0FSUkFZX1RFWFRVUkVfTEFZRVJTOjM1MDcxLE1JTl9QUk9HUkFNX1RFWEVMX09GRlNFVDozNTA3NixNQVhfUFJPR1JBTV9URVhFTF9PRkZTRVQ6MzUwNzcsTUFYX1ZBUllJTkdfQ09NUE9ORU5UUzozNTY1OSxURVhUVVJFXzJEX0FSUkFZOjM1ODY2LFRFWFRVUkVfQklORElOR18yRF9BUlJBWTozNTg2OSxSMTFGX0cxMUZfQjEwRjozNTg5OCxVTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWOjM1ODk5LFJHQjlfRTU6MzU5MDEsVU5TSUdORURfSU5UXzVfOV85XzlfUkVWOjM1OTAyLFRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfTU9ERTozNTk2NyxNQVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0NPTVBPTkVOVFM6MzU5NjgsVFJBTlNGT1JNX0ZFRURCQUNLX1ZBUllJTkdTOjM1OTcxLFRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfU1RBUlQ6MzU5NzIsVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TSVpFOjM1OTczLFRSQU5TRk9STV9GRUVEQkFDS19QUklNSVRJVkVTX1dSSVRURU46MzU5NzYsUkFTVEVSSVpFUl9ESVNDQVJEOjM1OTc3LE1BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfSU5URVJMRUFWRURfQ09NUE9ORU5UUzozNTk3OCxNQVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0FUVFJJQlM6MzU5NzksSU5URVJMRUFWRURfQVRUUklCUzozNTk4MCxTRVBBUkFURV9BVFRSSUJTOjM1OTgxLFRSQU5TRk9STV9GRUVEQkFDS19CVUZGRVI6MzU5ODIsVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9CSU5ESU5HOjM1OTgzLFJHQkEzMlVJOjM2MjA4LFJHQjMyVUk6MzYyMDksUkdCQTE2VUk6MzYyMTQsUkdCMTZVSTozNjIxNSxSR0JBOFVJOjM2MjIwLFJHQjhVSTozNjIyMSxSR0JBMzJJOjM2MjI2LFJHQjMySTozNjIyNyxSR0JBMTZJOjM2MjMyLFJHQjE2STozNjIzMyxSR0JBOEk6MzYyMzgsUkdCOEk6MzYyMzksUkVEX0lOVEVHRVI6MzYyNDQsUkdCX0lOVEVHRVI6MzYyNDgsUkdCQV9JTlRFR0VSOjM2MjQ5LFNBTVBMRVJfMkRfQVJSQVk6MzYyODksU0FNUExFUl8yRF9BUlJBWV9TSEFET1c6MzYyOTIsU0FNUExFUl9DVUJFX1NIQURPVzozNjI5MyxVTlNJR05FRF9JTlRfVkVDMjozNjI5NCxVTlNJR05FRF9JTlRfVkVDMzozNjI5NSxVTlNJR05FRF9JTlRfVkVDNDozNjI5NixJTlRfU0FNUExFUl8yRDozNjI5OCxJTlRfU0FNUExFUl8zRDozNjI5OSxJTlRfU0FNUExFUl9DVUJFOjM2MzAwLElOVF9TQU1QTEVSXzJEX0FSUkFZOjM2MzAzLFVOU0lHTkVEX0lOVF9TQU1QTEVSXzJEOjM2MzA2LFVOU0lHTkVEX0lOVF9TQU1QTEVSXzNEOjM2MzA3LFVOU0lHTkVEX0lOVF9TQU1QTEVSX0NVQkU6MzYzMDgsVU5TSUdORURfSU5UX1NBTVBMRVJfMkRfQVJSQVk6MzYzMTEsREVQVEhfQ09NUE9ORU5UMzJGOjM2MDEyLERFUFRIMzJGX1NURU5DSUw4OjM2MDEzLEZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFVjozNjI2OSxGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5HOjMzMjk2LEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09NUE9ORU5UX1RZUEU6MzMyOTcsRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9SRURfU0laRTozMzI5OCxGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0dSRUVOX1NJWkU6MzMyOTksRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9CTFVFX1NJWkU6MzMzMDAsRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTFBIQV9TSVpFOjMzMzAxLEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfREVQVEhfU0laRTozMzMwMixGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1NURU5DSUxfU0laRTozMzMwMyxGUkFNRUJVRkZFUl9ERUZBVUxUOjMzMzA0LFVOU0lHTkVEX0lOVF8yNF84OjM0MDQyLERFUFRIMjRfU1RFTkNJTDg6MzUwNTYsVU5TSUdORURfTk9STUFMSVpFRDozNTg2MyxEUkFXX0ZSQU1FQlVGRkVSX0JJTkRJTkc6MzYwMDYsUkVBRF9GUkFNRUJVRkZFUjozNjAwOCxEUkFXX0ZSQU1FQlVGRkVSOjM2MDA5LFJFQURfRlJBTUVCVUZGRVJfQklORElORzozNjAxMCxSRU5ERVJCVUZGRVJfU0FNUExFUzozNjAxMSxGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEFZRVI6MzYwNTIsTUFYX0NPTE9SX0FUVEFDSE1FTlRTOjM2MDYzLENPTE9SX0FUVEFDSE1FTlQxOjM2MDY1LENPTE9SX0FUVEFDSE1FTlQyOjM2MDY2LENPTE9SX0FUVEFDSE1FTlQzOjM2MDY3LENPTE9SX0FUVEFDSE1FTlQ0OjM2MDY4LENPTE9SX0FUVEFDSE1FTlQ1OjM2MDY5LENPTE9SX0FUVEFDSE1FTlQ2OjM2MDcwLENPTE9SX0FUVEFDSE1FTlQ3OjM2MDcxLENPTE9SX0FUVEFDSE1FTlQ4OjM2MDcyLENPTE9SX0FUVEFDSE1FTlQ5OjM2MDczLENPTE9SX0FUVEFDSE1FTlQxMDozNjA3NCxDT0xPUl9BVFRBQ0hNRU5UMTE6MzYwNzUsQ09MT1JfQVRUQUNITUVOVDEyOjM2MDc2LENPTE9SX0FUVEFDSE1FTlQxMzozNjA3NyxDT0xPUl9BVFRBQ0hNRU5UMTQ6MzYwNzgsQ09MT1JfQVRUQUNITUVOVDE1OjM2MDc5LEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTVVMVElTQU1QTEU6MzYxODIsTUFYX1NBTVBMRVM6MzYxODMsSEFMRl9GTE9BVDo1MTMxLFJHOjMzMzE5LFJHX0lOVEVHRVI6MzMzMjAsUjg6MzMzMjEsUkc4OjMzMzIzLFIxNkY6MzMzMjUsUjMyRjozMzMyNixSRzE2RjozMzMyNyxSRzMyRjozMzMyOCxSOEk6MzMzMjksUjhVSTozMzMzMCxSMTZJOjMzMzMxLFIxNlVJOjMzMzMyLFIzMkk6MzMzMzMsUjMyVUk6MzMzMzQsUkc4STozMzMzNSxSRzhVSTozMzMzNixSRzE2STozMzMzNyxSRzE2VUk6MzMzMzgsUkczMkk6MzMzMzksUkczMlVJOjMzMzQwLFZFUlRFWF9BUlJBWV9CSU5ESU5HOjM0MjI5LFI4X1NOT1JNOjM2NzU2LFJHOF9TTk9STTozNjc1NyxSR0I4X1NOT1JNOjM2NzU4LFJHQkE4X1NOT1JNOjM2NzU5LFNJR05FRF9OT1JNQUxJWkVEOjM2NzY0LENPUFlfUkVBRF9CVUZGRVI6MzY2NjIsQ09QWV9XUklURV9CVUZGRVI6MzY2NjMsQ09QWV9SRUFEX0JVRkZFUl9CSU5ESU5HOjM2NjYyLENPUFlfV1JJVEVfQlVGRkVSX0JJTkRJTkc6MzY2NjMsVU5JRk9STV9CVUZGRVI6MzUzNDUsVU5JRk9STV9CVUZGRVJfQklORElORzozNTM2OCxVTklGT1JNX0JVRkZFUl9TVEFSVDozNTM2OSxVTklGT1JNX0JVRkZFUl9TSVpFOjM1MzcwLE1BWF9WRVJURVhfVU5JRk9STV9CTE9DS1M6MzUzNzEsTUFYX0ZSQUdNRU5UX1VOSUZPUk1fQkxPQ0tTOjM1MzczLE1BWF9DT01CSU5FRF9VTklGT1JNX0JMT0NLUzozNTM3NCxNQVhfVU5JRk9STV9CVUZGRVJfQklORElOR1M6MzUzNzUsTUFYX1VOSUZPUk1fQkxPQ0tfU0laRTozNTM3NixNQVhfQ09NQklORURfVkVSVEVYX1VOSUZPUk1fQ09NUE9ORU5UUzozNTM3NyxNQVhfQ09NQklORURfRlJBR01FTlRfVU5JRk9STV9DT01QT05FTlRTOjM1Mzc5LFVOSUZPUk1fQlVGRkVSX09GRlNFVF9BTElHTk1FTlQ6MzUzODAsQUNUSVZFX1VOSUZPUk1fQkxPQ0tTOjM1MzgyLFVOSUZPUk1fVFlQRTozNTM4MyxVTklGT1JNX1NJWkU6MzUzODQsVU5JRk9STV9CTE9DS19JTkRFWDozNTM4NixVTklGT1JNX09GRlNFVDozNTM4NyxVTklGT1JNX0FSUkFZX1NUUklERTozNTM4OCxVTklGT1JNX01BVFJJWF9TVFJJREU6MzUzODksVU5JRk9STV9JU19ST1dfTUFKT1I6MzUzOTAsVU5JRk9STV9CTE9DS19CSU5ESU5HOjM1MzkxLFVOSUZPUk1fQkxPQ0tfREFUQV9TSVpFOjM1MzkyLFVOSUZPUk1fQkxPQ0tfQUNUSVZFX1VOSUZPUk1TOjM1Mzk0LFVOSUZPUk1fQkxPQ0tfQUNUSVZFX1VOSUZPUk1fSU5ESUNFUzozNTM5NSxVTklGT1JNX0JMT0NLX1JFRkVSRU5DRURfQllfVkVSVEVYX1NIQURFUjozNTM5NixVTklGT1JNX0JMT0NLX1JFRkVSRU5DRURfQllfRlJBR01FTlRfU0hBREVSOjM1Mzk4LElOVkFMSURfSU5ERVg6NDI5NDk2NzI5NSxNQVhfVkVSVEVYX09VVFBVVF9DT01QT05FTlRTOjM3MTU0LE1BWF9GUkFHTUVOVF9JTlBVVF9DT01QT05FTlRTOjM3MTU3LE1BWF9TRVJWRVJfV0FJVF9USU1FT1VUOjM3MTM3LE9CSkVDVF9UWVBFOjM3MTM4LFNZTkNfQ09ORElUSU9OOjM3MTM5LFNZTkNfU1RBVFVTOjM3MTQwLFNZTkNfRkxBR1M6MzcxNDEsU1lOQ19GRU5DRTozNzE0MixTWU5DX0dQVV9DT01NQU5EU19DT01QTEVURTozNzE0MyxVTlNJR05BTEVEOjM3MTQ0LFNJR05BTEVEOjM3MTQ1LEFMUkVBRFlfU0lHTkFMRUQ6MzcxNDYsVElNRU9VVF9FWFBJUkVEOjM3MTQ3LENPTkRJVElPTl9TQVRJU0ZJRUQ6MzcxNDgsV0FJVF9GQUlMRUQ6MzcxNDksU1lOQ19GTFVTSF9DT01NQU5EU19CSVQ6MSxWRVJURVhfQVRUUklCX0FSUkFZX0RJVklTT1I6MzUwNzAsQU5ZX1NBTVBMRVNfUEFTU0VEOjM1ODg3LEFOWV9TQU1QTEVTX1BBU1NFRF9DT05TRVJWQVRJVkU6MzYyMDIsU0FNUExFUl9CSU5ESU5HOjM1MDk3LFJHQjEwX0EyVUk6MzY5NzUsSU5UXzJfMTBfMTBfMTBfUkVWOjM2MjU1LFRSQU5TRk9STV9GRUVEQkFDSzozNjM4NixUUkFOU0ZPUk1fRkVFREJBQ0tfUEFVU0VEOjM2Mzg3LFRSQU5TRk9STV9GRUVEQkFDS19BQ1RJVkU6MzYzODgsVFJBTlNGT1JNX0ZFRURCQUNLX0JJTkRJTkc6MzYzODksQ09NUFJFU1NFRF9SMTFfRUFDOjM3NDg4LENPTVBSRVNTRURfU0lHTkVEX1IxMV9FQUM6Mzc0ODksQ09NUFJFU1NFRF9SRzExX0VBQzozNzQ5MCxDT01QUkVTU0VEX1NJR05FRF9SRzExX0VBQzozNzQ5MSxDT01QUkVTU0VEX1JHQjhfRVRDMjozNzQ5MixDT01QUkVTU0VEX1NSR0I4X0VUQzI6Mzc0OTMsQ09NUFJFU1NFRF9SR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMjozNzQ5NCxDT01QUkVTU0VEX1NSR0I4X1BVTkNIVEhST1VHSF9BTFBIQTFfRVRDMjozNzQ5NSxDT01QUkVTU0VEX1JHQkE4X0VUQzJfRUFDOjM3NDk2LENPTVBSRVNTRURfU1JHQjhfQUxQSEE4X0VUQzJfRUFDOjM3NDk3LFRFWFRVUkVfSU1NVVRBQkxFX0ZPUk1BVDozNzE2NyxNQVhfRUxFTUVOVF9JTkRFWDozNjIwMyxURVhUVVJFX0lNTVVUQUJMRV9MRVZFTFM6MzM1MDMsTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOjM0MDQ3fSxIdD1PYmplY3QuZnJlZXplKFozKX0pO3ZhciBzZSxldCxEZT0kKCgpPT57ZnQoKTtqdCgpOyRzKCk7c2U9e0JZVEU6SHQuQllURSxVTlNJR05FRF9CWVRFOkh0LlVOU0lHTkVEX0JZVEUsU0hPUlQ6SHQuU0hPUlQsVU5TSUdORURfU0hPUlQ6SHQuVU5TSUdORURfU0hPUlQsSU5UOkh0LklOVCxVTlNJR05FRF9JTlQ6SHQuVU5TSUdORURfSU5ULEZMT0FUOkh0LkZMT0FULERPVUJMRTpIdC5ET1VCTEV9O3NlLmdldFNpemVJbkJ5dGVzPWZ1bmN0aW9uKHQpe2lmKCFoKHQpKXRocm93IG5ldyBEKCJ2YWx1ZSBpcyByZXF1aXJlZC4iKTtzd2l0Y2godCl7Y2FzZSBzZS5CWVRFOnJldHVybiBJbnQ4QXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7Y2FzZSBzZS5VTlNJR05FRF9CWVRFOnJldHVybiBVaW50OEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO2Nhc2Ugc2UuU0hPUlQ6cmV0dXJuIEludDE2QXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7Y2FzZSBzZS5VTlNJR05FRF9TSE9SVDpyZXR1cm4gVWludDE2QXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7Y2FzZSBzZS5JTlQ6cmV0dXJuIEludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7Y2FzZSBzZS5VTlNJR05FRF9JTlQ6cmV0dXJuIFVpbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO2Nhc2Ugc2UuRkxPQVQ6cmV0dXJuIEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVDtjYXNlIHNlLkRPVUJMRTpyZXR1cm4gRmxvYXQ2NEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO2RlZmF1bHQ6dGhyb3cgbmV3IEQoImNvbXBvbmVudERhdGF0eXBlIGlzIG5vdCBhIHZhbGlkIHZhbHVlLiIpfX07c2UuZnJvbVR5cGVkQXJyYXk9ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIEludDhBcnJheSlyZXR1cm4gc2UuQllURTtpZih0IGluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gc2UuVU5TSUdORURfQllURTtpZih0IGluc3RhbmNlb2YgSW50MTZBcnJheSlyZXR1cm4gc2UuU0hPUlQ7aWYodCBpbnN0YW5jZW9mIFVpbnQxNkFycmF5KXJldHVybiBzZS5VTlNJR05FRF9TSE9SVDtpZih0IGluc3RhbmNlb2YgSW50MzJBcnJheSlyZXR1cm4gc2UuSU5UO2lmKHQgaW5zdGFuY2VvZiBVaW50MzJBcnJheSlyZXR1cm4gc2UuVU5TSUdORURfSU5UO2lmKHQgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpcmV0dXJuIHNlLkZMT0FUO2lmKHQgaW5zdGFuY2VvZiBGbG9hdDY0QXJyYXkpcmV0dXJuIHNlLkRPVUJMRTt0aHJvdyBuZXcgRCgiYXJyYXkgbXVzdCBiZSBhbiBJbnQ4QXJyYXksIFVpbnQ4QXJyYXksIEludDE2QXJyYXksIFVpbnQxNkFycmF5LCBJbnQzMkFycmF5LCBVaW50MzJBcnJheSwgRmxvYXQzMkFycmF5LCBvciBGbG9hdDY0QXJyYXkuIil9O3NlLnZhbGlkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBoKHQpJiYodD09PXNlLkJZVEV8fHQ9PT1zZS5VTlNJR05FRF9CWVRFfHx0PT09c2UuU0hPUlR8fHQ9PT1zZS5VTlNJR05FRF9TSE9SVHx8dD09PXNlLklOVHx8dD09PXNlLlVOU0lHTkVEX0lOVHx8dD09PXNlLkZMT0FUfHx0PT09c2UuRE9VQkxFKX07c2UuY3JlYXRlVHlwZWRBcnJheT1mdW5jdGlvbih0LGUpe2lmKCFoKHQpKXRocm93IG5ldyBEKCJjb21wb25lbnREYXRhdHlwZSBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgRCgidmFsdWVzT3JMZW5ndGggaXMgcmVxdWlyZWQuIik7c3dpdGNoKHQpe2Nhc2Ugc2UuQllURTpyZXR1cm4gbmV3IEludDhBcnJheShlKTtjYXNlIHNlLlVOU0lHTkVEX0JZVEU6cmV0dXJuIG5ldyBVaW50OEFycmF5KGUpO2Nhc2Ugc2UuU0hPUlQ6cmV0dXJuIG5ldyBJbnQxNkFycmF5KGUpO2Nhc2Ugc2UuVU5TSUdORURfU0hPUlQ6cmV0dXJuIG5ldyBVaW50MTZBcnJheShlKTtjYXNlIHNlLklOVDpyZXR1cm4gbmV3IEludDMyQXJyYXkoZSk7Y2FzZSBzZS5VTlNJR05FRF9JTlQ6cmV0dXJuIG5ldyBVaW50MzJBcnJheShlKTtjYXNlIHNlLkZMT0FUOnJldHVybiBuZXcgRmxvYXQzMkFycmF5KGUpO2Nhc2Ugc2UuRE9VQkxFOnJldHVybiBuZXcgRmxvYXQ2NEFycmF5KGUpO2RlZmF1bHQ6dGhyb3cgbmV3IEQoImNvbXBvbmVudERhdGF0eXBlIGlzIG5vdCBhIHZhbGlkIHZhbHVlLiIpfX07c2UuY3JlYXRlQXJyYXlCdWZmZXJWaWV3PWZ1bmN0aW9uKHQsZSxuLG8pe2lmKCFoKHQpKXRocm93IG5ldyBEKCJjb21wb25lbnREYXRhdHlwZSBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgRCgiYnVmZmVyIGlzIHJlcXVpcmVkLiIpO3N3aXRjaChuPW4/PzAsbz1vPz8oZS5ieXRlTGVuZ3RoLW4pL3NlLmdldFNpemVJbkJ5dGVzKHQpLHQpe2Nhc2Ugc2UuQllURTpyZXR1cm4gbmV3IEludDhBcnJheShlLG4sbyk7Y2FzZSBzZS5VTlNJR05FRF9CWVRFOnJldHVybiBuZXcgVWludDhBcnJheShlLG4sbyk7Y2FzZSBzZS5TSE9SVDpyZXR1cm4gbmV3IEludDE2QXJyYXkoZSxuLG8pO2Nhc2Ugc2UuVU5TSUdORURfU0hPUlQ6cmV0dXJuIG5ldyBVaW50MTZBcnJheShlLG4sbyk7Y2FzZSBzZS5JTlQ6cmV0dXJuIG5ldyBJbnQzMkFycmF5KGUsbixvKTtjYXNlIHNlLlVOU0lHTkVEX0lOVDpyZXR1cm4gbmV3IFVpbnQzMkFycmF5KGUsbixvKTtjYXNlIHNlLkZMT0FUOnJldHVybiBuZXcgRmxvYXQzMkFycmF5KGUsbixvKTtjYXNlIHNlLkRPVUJMRTpyZXR1cm4gbmV3IEZsb2F0NjRBcnJheShlLG4sbyk7ZGVmYXVsdDp0aHJvdyBuZXcgRCgiY29tcG9uZW50RGF0YXR5cGUgaXMgbm90IGEgdmFsaWQgdmFsdWUuIil9fTtzZS5mcm9tTmFtZT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSJCWVRFIjpyZXR1cm4gc2UuQllURTtjYXNlIlVOU0lHTkVEX0JZVEUiOnJldHVybiBzZS5VTlNJR05FRF9CWVRFO2Nhc2UiU0hPUlQiOnJldHVybiBzZS5TSE9SVDtjYXNlIlVOU0lHTkVEX1NIT1JUIjpyZXR1cm4gc2UuVU5TSUdORURfU0hPUlQ7Y2FzZSJJTlQiOnJldHVybiBzZS5JTlQ7Y2FzZSJVTlNJR05FRF9JTlQiOnJldHVybiBzZS5VTlNJR05FRF9JTlQ7Y2FzZSJGTE9BVCI6cmV0dXJuIHNlLkZMT0FUO2Nhc2UiRE9VQkxFIjpyZXR1cm4gc2UuRE9VQkxFO2RlZmF1bHQ6dGhyb3cgbmV3IEQoIm5hbWUgaXMgbm90IGEgdmFsaWQgdmFsdWUuIil9fTtldD1PYmplY3QuZnJlZXplKHNlKX0pO3ZhciBRMyxNaSx2cD0kKCgpPT57UTM9e05PTkU6MCxUUklBTkdMRVM6MSxMSU5FUzoyLFBPTFlMSU5FUzozfSxNaT1PYmplY3QuZnJlZXplKFEzKX0pO2Z1bmN0aW9uIFh0KHQsZSxuLG8pe3RoaXNbMF09dD8/MCx0aGlzWzFdPW4/PzAsdGhpc1syXT1lPz8wLHRoaXNbM109bz8/MH12YXIgSjMsdFAsdWIsbGIsZVAsblAsWW8sQWY9JCgoKT0+e1VlKCk7V3QoKTtmdCgpO2p0KCk7WHQucGFja2VkTGVuZ3RoPTQ7WHQucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLG49bj8/MCxlW24rK109dFswXSxlW24rK109dFsxXSxlW24rK109dFsyXSxlW24rK109dFszXSxlfTtYdC51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LmRlZmluZWQoImFycmF5Iix0KSxlPWU/PzAsaChuKXx8KG49bmV3IFh0KSxuWzBdPXRbZSsrXSxuWzFdPXRbZSsrXSxuWzJdPXRbZSsrXSxuWzNdPXRbZSsrXSxufTtYdC5wYWNrQXJyYXk9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoImFycmF5Iix0KTtsZXQgbj10Lmxlbmd0aCxvPW4qNDtpZighaChlKSllPW5ldyBBcnJheShvKTtlbHNle2lmKCFBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aCE9PW8pdGhyb3cgbmV3IEQoIklmIHJlc3VsdCBpcyBhIHR5cGVkIGFycmF5LCBpdCBtdXN0IGhhdmUgZXhhY3RseSBhcnJheS5sZW5ndGggKiA0IGVsZW1lbnRzIik7ZS5sZW5ndGghPT1vJiYoZS5sZW5ndGg9byl9Zm9yKGxldCByPTA7cjxuOysrcilYdC5wYWNrKHRbcl0sZSxyKjQpO3JldHVybiBlfTtYdC51bnBhY2tBcnJheT1mdW5jdGlvbih0LGUpe2lmKHkuZGVmaW5lZCgiYXJyYXkiLHQpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJhcnJheS5sZW5ndGgiLHQubGVuZ3RoLDQpLHQubGVuZ3RoJTQhPT0wKXRocm93IG5ldyBEKCJhcnJheSBsZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQuIik7bGV0IG49dC5sZW5ndGg7aChlKT9lLmxlbmd0aD1uLzQ6ZT1uZXcgQXJyYXkobi80KTtmb3IobGV0IG89MDtvPG47bys9NCl7bGV0IHI9by80O2Vbcl09WHQudW5wYWNrKHQsbyxlW3JdKX1yZXR1cm4gZX07WHQuY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihoKHQpKXJldHVybiBoKGUpPyhlWzBdPXRbMF0sZVsxXT10WzFdLGVbMl09dFsyXSxlWzNdPXRbM10sZSk6bmV3IFh0KHRbMF0sdFsyXSx0WzFdLHRbM10pfTtYdC5mcm9tQXJyYXk9WHQudW5wYWNrO1h0LmZyb21Db2x1bW5NYWpvckFycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkuZGVmaW5lZCgidmFsdWVzIix0KSxYdC5jbG9uZSh0LGUpfTtYdC5mcm9tUm93TWFqb3JBcnJheT1mdW5jdGlvbih0LGUpe3JldHVybiB5LmRlZmluZWQoInZhbHVlcyIsdCksaChlKT8oZVswXT10WzBdLGVbMV09dFsyXSxlWzJdPXRbMV0sZVszXT10WzNdLGUpOm5ldyBYdCh0WzBdLHRbMV0sdFsyXSx0WzNdKX07WHQuZnJvbVNjYWxlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgic2NhbGUiLHQpLGgoZSk/KGVbMF09dC54LGVbMV09MCxlWzJdPTAsZVszXT10LnksZSk6bmV3IFh0KHQueCwwLDAsdC55KX07WHQuZnJvbVVuaWZvcm1TY2FsZT1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5udW1iZXIoInNjYWxlIix0KSxoKGUpPyhlWzBdPXQsZVsxXT0wLGVbMl09MCxlWzNdPXQsZSk6bmV3IFh0KHQsMCwwLHQpfTtYdC5mcm9tUm90YXRpb249ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5udW1iZXIoImFuZ2xlIix0KTtsZXQgbj1NYXRoLmNvcyh0KSxvPU1hdGguc2luKHQpO3JldHVybiBoKGUpPyhlWzBdPW4sZVsxXT1vLGVbMl09LW8sZVszXT1uLGUpOm5ldyBYdChuLC1vLG8sbil9O1h0LnRvQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLGgoZSk/KGVbMF09dFswXSxlWzFdPXRbMV0sZVsyXT10WzJdLGVbM109dFszXSxlKTpbdFswXSx0WzFdLHRbMl0sdFszXV19O1h0LmdldEVsZW1lbnRJbmRleD1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygicm93IixlLDApLHkudHlwZU9mLm51bWJlci5sZXNzVGhhbk9yRXF1YWxzKCJyb3ciLGUsMSkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImNvbHVtbiIsdCwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiY29sdW1uIix0LDEpLHQqMitlfTtYdC5nZXRDb2x1bW49ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiaW5kZXgiLGUsMCkseS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoImluZGV4IixlLDEpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz1lKjIscj10W29dLGk9dFtvKzFdO3JldHVybiBuLng9cixuLnk9aSxufTtYdC5zZXRDb2x1bW49ZnVuY3Rpb24odCxlLG4sbyl7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiaW5kZXgiLGUsMSkseS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLG4pLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixvKSxvPVh0LmNsb25lKHQsbyk7bGV0IHI9ZSoyO3JldHVybiBvW3JdPW4ueCxvW3IrMV09bi55LG99O1h0LmdldFJvdz1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiaW5kZXgiLGUsMSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pO2xldCBvPXRbZV0scj10W2UrMl07cmV0dXJuIG4ueD1vLG4ueT1yLG59O1h0LnNldFJvdz1mdW5jdGlvbih0LGUsbixvKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJpbmRleCIsZSwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygiaW5kZXgiLGUsMSkseS50eXBlT2Yub2JqZWN0KCJjYXJ0ZXNpYW4iLG4pLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixvKSxvPVh0LmNsb25lKHQsbyksb1tlXT1uLngsb1tlKzJdPW4ueSxvfTtKMz1uZXcgSjtYdC5zZXRTY2FsZT1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgic2NhbGUiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz1YdC5nZXRTY2FsZSh0LEozKSxyPWUueC9vLngsaT1lLnkvby55O3JldHVybiBuWzBdPXRbMF0qcixuWzFdPXRbMV0qcixuWzJdPXRbMl0qaSxuWzNdPXRbM10qaSxufTt0UD1uZXcgSjtYdC5zZXRVbmlmb3JtU2NhbGU9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5udW1iZXIoInNjYWxlIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbik7bGV0IG89WHQuZ2V0U2NhbGUodCx0UCkscj1lL28ueCxpPWUvby55O3JldHVybiBuWzBdPXRbMF0qcixuWzFdPXRbMV0qcixuWzJdPXRbMl0qaSxuWzNdPXRbM10qaSxufTt1Yj1uZXcgSjtYdC5nZXRTY2FsZT1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpLGUueD1KLm1hZ25pdHVkZShKLmZyb21FbGVtZW50cyh0WzBdLHRbMV0sdWIpKSxlLnk9Si5tYWduaXR1ZGUoSi5mcm9tRWxlbWVudHModFsyXSx0WzNdLHViKSksZX07bGI9bmV3IEo7WHQuZ2V0TWF4aW11bVNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBYdC5nZXRTY2FsZSh0LGxiKSxKLm1heGltdW1Db21wb25lbnQobGIpfTtlUD1uZXcgSjtYdC5zZXRSb3RhdGlvbj1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKTtsZXQgbz1YdC5nZXRTY2FsZSh0LGVQKTtyZXR1cm4gblswXT1lWzBdKm8ueCxuWzFdPWVbMV0qby54LG5bMl09ZVsyXSpvLnksblszXT1lWzNdKm8ueSxufTtuUD1uZXcgSjtYdC5nZXRSb3RhdGlvbj1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSk7bGV0IG49WHQuZ2V0U2NhbGUodCxuUCk7cmV0dXJuIGVbMF09dFswXS9uLngsZVsxXT10WzFdL24ueCxlWzJdPXRbMl0vbi55LGVbM109dFszXS9uLnksZX07WHQubXVsdGlwbHk9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pO2xldCBvPXRbMF0qZVswXSt0WzJdKmVbMV0scj10WzBdKmVbMl0rdFsyXSplWzNdLGk9dFsxXSplWzBdK3RbM10qZVsxXSxzPXRbMV0qZVsyXSt0WzNdKmVbM107cmV0dXJuIG5bMF09byxuWzFdPWksblsyXT1yLG5bM109cyxufTtYdC5hZGQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuWzBdPXRbMF0rZVswXSxuWzFdPXRbMV0rZVsxXSxuWzJdPXRbMl0rZVsyXSxuWzNdPXRbM10rZVszXSxufTtYdC5zdWJ0cmFjdD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG5bMF09dFswXS1lWzBdLG5bMV09dFsxXS1lWzFdLG5bMl09dFsyXS1lWzJdLG5bM109dFszXS1lWzNdLG59O1h0Lm11bHRpcGx5QnlWZWN0b3I9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoImNhcnRlc2lhbiIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pO2xldCBvPXRbMF0qZS54K3RbMl0qZS55LHI9dFsxXSplLngrdFszXSplLnk7cmV0dXJuIG4ueD1vLG4ueT1yLG59O1h0Lm11bHRpcGx5QnlTY2FsYXI9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2YubnVtYmVyKCJzY2FsYXIiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuWzBdPXRbMF0qZSxuWzFdPXRbMV0qZSxuWzJdPXRbMl0qZSxuWzNdPXRbM10qZSxufTtYdC5tdWx0aXBseUJ5U2NhbGU9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJzY2FsZSIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG5bMF09dFswXSplLngsblsxXT10WzFdKmUueCxuWzJdPXRbMl0qZS55LG5bM109dFszXSplLnksbn07WHQubXVsdGlwbHlCeVVuaWZvcm1TY2FsZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5udW1iZXIoInNjYWxlIixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksblswXT10WzBdKmUsblsxXT10WzFdKmUsblsyXT10WzJdKmUsblszXT10WzNdKmUsbn07WHQubmVnYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibWF0cml4Iix0KSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsZSksZVswXT0tdFswXSxlWzFdPS10WzFdLGVbMl09LXRbMl0sZVszXT0tdFszXSxlfTtYdC50cmFuc3Bvc2U9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoIm1hdHJpeCIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpO2xldCBuPXRbMF0sbz10WzJdLHI9dFsxXSxpPXRbM107cmV0dXJuIGVbMF09bixlWzFdPW8sZVsyXT1yLGVbM109aSxlfTtYdC5hYnM9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJtYXRyaXgiLHQpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKSxlWzBdPU1hdGguYWJzKHRbMF0pLGVbMV09TWF0aC5hYnModFsxXSksZVsyXT1NYXRoLmFicyh0WzJdKSxlWzNdPU1hdGguYWJzKHRbM10pLGV9O1h0LmVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZXx8aCh0KSYmaChlKSYmdFswXT09PWVbMF0mJnRbMV09PT1lWzFdJiZ0WzJdPT09ZVsyXSYmdFszXT09PWVbM119O1h0LmVxdWFsc0FycmF5PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdFswXT09PWVbbl0mJnRbMV09PT1lW24rMV0mJnRbMl09PT1lW24rMl0mJnRbM109PT1lW24rM119O1h0LmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlLG4pe3JldHVybiBuPW4/PzAsdD09PWV8fGgodCkmJmgoZSkmJk1hdGguYWJzKHRbMF0tZVswXSk8PW4mJk1hdGguYWJzKHRbMV0tZVsxXSk8PW4mJk1hdGguYWJzKHRbMl0tZVsyXSk8PW4mJk1hdGguYWJzKHRbM10tZVszXSk8PW59O1h0LklERU5USVRZPU9iamVjdC5mcmVlemUobmV3IFh0KDEsMCwwLDEpKTtYdC5aRVJPPU9iamVjdC5mcmVlemUobmV3IFh0KDAsMCwwLDApKTtYdC5DT0xVTU4wUk9XMD0wO1h0LkNPTFVNTjBST1cxPTE7WHQuQ09MVU1OMVJPVzA9MjtYdC5DT0xVTU4xUk9XMT0zO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFh0LnByb3RvdHlwZSx7bGVuZ3RoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWHQucGFja2VkTGVuZ3RofX19KTtYdC5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24odCl7cmV0dXJuIFh0LmNsb25lKHRoaXMsdCl9O1h0LnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIFh0LmVxdWFscyh0aGlzLHQpfTtYdC5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUpe3JldHVybiBYdC5lcXVhbHNFcHNpbG9uKHRoaXMsdCxlKX07WHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuYCgke3RoaXNbMF19LCAke3RoaXNbMl19KQooJHt0aGlzWzFdfSwgJHt0aGlzWzNdfSlgfTtZbz1YdH0pO3ZhciBtbyxEdCx0bj0kKCgpPT57JHMoKTttbz17UE9JTlRTOkh0LlBPSU5UUyxMSU5FUzpIdC5MSU5FUyxMSU5FX0xPT1A6SHQuTElORV9MT09QLExJTkVfU1RSSVA6SHQuTElORV9TVFJJUCxUUklBTkdMRVM6SHQuVFJJQU5HTEVTLFRSSUFOR0xFX1NUUklQOkh0LlRSSUFOR0xFX1NUUklQLFRSSUFOR0xFX0ZBTjpIdC5UUklBTkdMRV9GQU59O21vLmlzTGluZXM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1tby5MSU5FU3x8dD09PW1vLkxJTkVfTE9PUHx8dD09PW1vLkxJTkVfU1RSSVB9O21vLmlzVHJpYW5nbGVzPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09bW8uVFJJQU5HTEVTfHx0PT09bW8uVFJJQU5HTEVfU1RSSVB8fHQ9PT1tby5UUklBTkdMRV9GQU59O21vLnZhbGlkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09bW8uUE9JTlRTfHx0PT09bW8uTElORVN8fHQ9PT1tby5MSU5FX0xPT1B8fHQ9PT1tby5MSU5FX1NUUklQfHx0PT09bW8uVFJJQU5HTEVTfHx0PT09bW8uVFJJQU5HTEVfU1RSSVB8fHQ9PT1tby5UUklBTkdMRV9GQU59O0R0PU9iamVjdC5mcmVlemUobW8pfSk7ZnVuY3Rpb24gdmgodCl7dD10Pz9JdC5FTVBUWV9PQkpFQ1QseS50eXBlT2Yub2JqZWN0KCJvcHRpb25zLmF0dHJpYnV0ZXMiLHQuYXR0cmlidXRlcyksdGhpcy5hdHRyaWJ1dGVzPXQuYXR0cmlidXRlcyx0aGlzLmluZGljZXM9dC5pbmRpY2VzLHRoaXMucHJpbWl0aXZlVHlwZT10LnByaW1pdGl2ZVR5cGU/P0R0LlRSSUFOR0xFUyx0aGlzLmJvdW5kaW5nU3BoZXJlPXQuYm91bmRpbmdTcGhlcmUsdGhpcy5nZW9tZXRyeVR5cGU9dC5nZW9tZXRyeVR5cGU/P01pLk5PTkUsdGhpcy5ib3VuZGluZ1NwaGVyZUNWPXQuYm91bmRpbmdTcGhlcmVDVix0aGlzLm9mZnNldEF0dHJpYnV0ZT10Lm9mZnNldEF0dHJpYnV0ZX12YXIgb1AsclAscGIsaVAsc1AsY1AsYVAsZlAsdVAsbFAsQnQsWGU9JCgoKT0+e1VlKCk7THQoKTtJZSgpO1d0KCk7eWUoKTtmdCgpO2p0KCk7dnAoKTtBZigpO0JuKCk7VW4oKTt0bigpO0tvKCk7d24oKTtjcygpO3ZoLmNvbXB1dGVOdW1iZXJPZlZlcnRpY2VzPWZ1bmN0aW9uKHQpe3kudHlwZU9mLm9iamVjdCgiZ2VvbWV0cnkiLHQpO2xldCBlPS0xO2ZvcihsZXQgbiBpbiB0LmF0dHJpYnV0ZXMpaWYodC5hdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KG4pJiZoKHQuYXR0cmlidXRlc1tuXSkmJmgodC5hdHRyaWJ1dGVzW25dLnZhbHVlcykpe2xldCBvPXQuYXR0cmlidXRlc1tuXSxyPW8udmFsdWVzLmxlbmd0aC9vLmNvbXBvbmVudHNQZXJBdHRyaWJ1dGU7aWYoZSE9PXImJmUhPT0tMSl0aHJvdyBuZXcgRCgiQWxsIGF0dHJpYnV0ZSBsaXN0cyBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGF0dHJpYnV0ZXMuIik7ZT1yfXJldHVybiBlfTtvUD1uZXcgY3QsclA9bmV3IGEscGI9bmV3IHN0LGlQPVtuZXcgY3QsbmV3IGN0LG5ldyBjdF0sc1A9W25ldyBKLG5ldyBKLG5ldyBKXSxjUD1bbmV3IEosbmV3IEosbmV3IEpdLGFQPW5ldyBhLGZQPW5ldyB0ZSx1UD1uZXcgc3QsbFA9bmV3IFlvO3ZoLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzPWZ1bmN0aW9uKHQsZSxuLG8pe2xldCByLGk9TnQuY2VudGVyKG8sb1ApLHM9Y3QudG9DYXJ0ZXNpYW4oaSxuLHJQKSxmPVhvLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKHMsbixwYiksdT1zdC5pbnZlcnNlKGYscGIpLGM9c1AsbD1pUDtsWzBdLmxvbmdpdHVkZT1vLndlc3QsbFswXS5sYXRpdHVkZT1vLnNvdXRoLGxbMV0ubG9uZ2l0dWRlPW8ud2VzdCxsWzFdLmxhdGl0dWRlPW8ubm9ydGgsbFsyXS5sb25naXR1ZGU9by5lYXN0LGxbMl0ubGF0aXR1ZGU9by5zb3V0aDtsZXQgcD1hUDtmb3Iocj0wO3I8MztyKyspY3QudG9DYXJ0ZXNpYW4obFtyXSxuLHApLHA9c3QubXVsdGlwbHlCeVBvaW50QXNWZWN0b3IodSxwLHApLGNbcl0ueD1wLngsY1tyXS55PXAueTtsZXQgZD10ZS5mcm9tQXhpc0FuZ2xlKGEuVU5JVF9aLC1lLGZQKSxtPVouZnJvbVF1YXRlcm5pb24oZCx1UCksXz10Lmxlbmd0aCxnPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxiPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxUPU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxPPU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtmb3Iocj0wO3I8XztyKyspcD1zdC5tdWx0aXBseUJ5UG9pbnRBc1ZlY3Rvcih1LHRbcl0scCkscD1aLm11bHRpcGx5QnlWZWN0b3IobSxwLHApLGc9TWF0aC5taW4oZyxwLngpLGI9TWF0aC5taW4oYixwLnkpLFQ9TWF0aC5tYXgoVCxwLngpLE89TWF0aC5tYXgoTyxwLnkpO2xldCBFPVlvLmZyb21Sb3RhdGlvbihlLGxQKSx3PWNQO3dbMF0ueD1nLHdbMF0ueT1iLHdbMV0ueD1nLHdbMV0ueT1PLHdbMl0ueD1ULHdbMl0ueT1iO2xldCBDPWNbMF0sTT1jWzJdLngtQy54LE49Y1sxXS55LUMueTtmb3Iocj0wO3I8MztyKyspe2xldCBBPXdbcl07WW8ubXVsdGlwbHlCeVZlY3RvcihFLEEsQSksQS54PShBLngtQy54KS9NLEEueT0oQS55LUMueSkvTn1sZXQgRj13WzBdLEk9d1sxXSx2PXdbMl0sQj1uZXcgQXJyYXkoNik7cmV0dXJuIEoucGFjayhGLEIpLEoucGFjayhJLEIsMiksSi5wYWNrKHYsQiw0KSxCfTtCdD12aH0pO2Z1bmN0aW9uIHBQKHQpe2lmKHQ9dD8/SXQuRU1QVFlfT0JKRUNULCFoKHQuY29tcG9uZW50RGF0YXR5cGUpKXRocm93IG5ldyBEKCJvcHRpb25zLmNvbXBvbmVudERhdGF0eXBlIGlzIHJlcXVpcmVkLiIpO2lmKCFoKHQuY29tcG9uZW50c1BlckF0dHJpYnV0ZSkpdGhyb3cgbmV3IEQoIm9wdGlvbnMuY29tcG9uZW50c1BlckF0dHJpYnV0ZSBpcyByZXF1aXJlZC4iKTtpZih0LmNvbXBvbmVudHNQZXJBdHRyaWJ1dGU8MXx8dC5jb21wb25lbnRzUGVyQXR0cmlidXRlPjQpdGhyb3cgbmV3IEQoIm9wdGlvbnMuY29tcG9uZW50c1BlckF0dHJpYnV0ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNC4iKTtpZighaCh0LnZhbHVlcykpdGhyb3cgbmV3IEQoIm9wdGlvbnMudmFsdWVzIGlzIHJlcXVpcmVkLiIpO3RoaXMuY29tcG9uZW50RGF0YXR5cGU9dC5jb21wb25lbnREYXRhdHlwZSx0aGlzLmNvbXBvbmVudHNQZXJBdHRyaWJ1dGU9dC5jb21wb25lbnRzUGVyQXR0cmlidXRlLHRoaXMubm9ybWFsaXplPXQubm9ybWFsaXplPz8hMSx0aGlzLnZhbHVlcz10LnZhbHVlc312YXIgaXQsWWU9JCgoKT0+e3llKCk7ZnQoKTtqdCgpO2l0PXBQfSk7ZnVuY3Rpb24gZFAodCl7dD10Pz9JdC5FTVBUWV9PQkpFQ1QsdGhpcy5wb3NpdGlvbj10LnBvc2l0aW9uLHRoaXMubm9ybWFsPXQubm9ybWFsLHRoaXMuc3Q9dC5zdCx0aGlzLmJpdGFuZ2VudD10LmJpdGFuZ2VudCx0aGlzLnRhbmdlbnQ9dC50YW5nZW50LHRoaXMuY29sb3I9dC5jb2xvcn12YXIgaWUsYW49JCgoKT0+e3llKCk7aWU9ZFB9KTt2YXIgSGUsZGIsbWI9JCgoKT0+e1VlKCk7THQoKTtocigpO1d0KCk7anQoKTtBZigpO0JuKCk7VW4oKTtIZT17U0NBTEFSOiJTQ0FMQVIiLFZFQzI6IlZFQzIiLFZFQzM6IlZFQzMiLFZFQzQ6IlZFQzQiLE1BVDI6Ik1BVDIiLE1BVDM6Ik1BVDMiLE1BVDQ6Ik1BVDQifTtIZS5nZXRNYXRoVHlwZT1mdW5jdGlvbih0KXtzd2l0Y2godCl7Y2FzZSBIZS5TQ0FMQVI6cmV0dXJuIE51bWJlcjtjYXNlIEhlLlZFQzI6cmV0dXJuIEo7Y2FzZSBIZS5WRUMzOnJldHVybiBhO2Nhc2UgSGUuVkVDNDpyZXR1cm4gbWU7Y2FzZSBIZS5NQVQyOnJldHVybiBZbztjYXNlIEhlLk1BVDM6cmV0dXJuIFo7Y2FzZSBIZS5NQVQ0OnJldHVybiBzdDtkZWZhdWx0OnRocm93IG5ldyBEKCJhdHRyaWJ1dGVUeXBlIGlzIG5vdCBhIHZhbGlkIHZhbHVlLiIpfX07SGUuZ2V0TnVtYmVyT2ZDb21wb25lbnRzPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIEhlLlNDQUxBUjpyZXR1cm4gMTtjYXNlIEhlLlZFQzI6cmV0dXJuIDI7Y2FzZSBIZS5WRUMzOnJldHVybiAzO2Nhc2UgSGUuVkVDNDpjYXNlIEhlLk1BVDI6cmV0dXJuIDQ7Y2FzZSBIZS5NQVQzOnJldHVybiA5O2Nhc2UgSGUuTUFUNDpyZXR1cm4gMTY7ZGVmYXVsdDp0aHJvdyBuZXcgRCgiYXR0cmlidXRlVHlwZSBpcyBub3QgYSB2YWxpZCB2YWx1ZS4iKX19O0hlLmdldEF0dHJpYnV0ZUxvY2F0aW9uQ291bnQ9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgSGUuU0NBTEFSOmNhc2UgSGUuVkVDMjpjYXNlIEhlLlZFQzM6Y2FzZSBIZS5WRUM0OnJldHVybiAxO2Nhc2UgSGUuTUFUMjpyZXR1cm4gMjtjYXNlIEhlLk1BVDM6cmV0dXJuIDM7Y2FzZSBIZS5NQVQ0OnJldHVybiA0O2RlZmF1bHQ6dGhyb3cgbmV3IEQoImF0dHJpYnV0ZVR5cGUgaXMgbm90IGEgdmFsaWQgdmFsdWUuIil9fTtIZS5nZXRHbHNsVHlwZT1mdW5jdGlvbih0KXtzd2l0Y2goeS50eXBlT2Yuc3RyaW5nKCJhdHRyaWJ1dGVUeXBlIix0KSx0KXtjYXNlIEhlLlNDQUxBUjpyZXR1cm4iZmxvYXQiO2Nhc2UgSGUuVkVDMjpyZXR1cm4idmVjMiI7Y2FzZSBIZS5WRUMzOnJldHVybiJ2ZWMzIjtjYXNlIEhlLlZFQzQ6cmV0dXJuInZlYzQiO2Nhc2UgSGUuTUFUMjpyZXR1cm4ibWF0MiI7Y2FzZSBIZS5NQVQzOnJldHVybiJtYXQzIjtjYXNlIEhlLk1BVDQ6cmV0dXJuIm1hdDQiO2RlZmF1bHQ6dGhyb3cgbmV3IEQoImF0dHJpYnV0ZVR5cGUgaXMgbm90IGEgdmFsaWQgdmFsdWUuIil9fTtkYj1PYmplY3QuZnJlZXplKEhlKX0pO2Z1bmN0aW9uIEZwKHQpe3JldHVybiB5YlswXT10LHliWzBdfWZ1bmN0aW9uIEZoKHQpe3JldHVybiB0Pj4xXi0odCYxKX12YXIgaGIsX2IsZW4sYmYseWIsTGgsbm4sYXM9JCgoKT0+e1VlKCk7THQoKTtEZSgpO1d0KCk7ZnQoKTtqdCgpO0t0KCk7bWIoKTtoYj0xLzI1NixfYj0yNTYsZW49e307ZW4ub2N0RW5jb2RlSW5SYW5nZT1mdW5jdGlvbih0LGUsbil7eS5kZWZpbmVkKCJ2ZWN0b3IiLHQpLHkuZGVmaW5lZCgicmVzdWx0IixuKTtsZXQgbz1hLm1hZ25pdHVkZVNxdWFyZWQodCk7aWYoTWF0aC5hYnMoby0xKT5QLkVQU0lMT042KXRocm93IG5ldyBEKCJ2ZWN0b3IgbXVzdCBiZSBub3JtYWxpemVkLiIpO2lmKG4ueD10LngvKE1hdGguYWJzKHQueCkrTWF0aC5hYnModC55KStNYXRoLmFicyh0LnopKSxuLnk9dC55LyhNYXRoLmFicyh0LngpK01hdGguYWJzKHQueSkrTWF0aC5hYnModC56KSksdC56PDApe2xldCByPW4ueCxpPW4ueTtuLng9KDEtTWF0aC5hYnMoaSkpKlAuc2lnbk5vdFplcm8ociksbi55PSgxLU1hdGguYWJzKHIpKSpQLnNpZ25Ob3RaZXJvKGkpfXJldHVybiBuLng9UC50b1NOb3JtKG4ueCxlKSxuLnk9UC50b1NOb3JtKG4ueSxlKSxufTtlbi5vY3RFbmNvZGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZW4ub2N0RW5jb2RlSW5SYW5nZSh0LDI1NSxlKX07YmY9bmV3IEoseWI9bmV3IFVpbnQ4QXJyYXkoMSk7ZW4ub2N0RW5jb2RlVG9DYXJ0ZXNpYW40PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGVuLm9jdEVuY29kZUluUmFuZ2UodCw2NTUzNSxiZiksZS54PUZwKGJmLngqaGIpLGUueT1GcChiZi54KSxlLno9RnAoYmYueSpoYiksZS53PUZwKGJmLnkpLGV9O2VuLm9jdERlY29kZUluUmFuZ2U9ZnVuY3Rpb24odCxlLG4sbyl7aWYoeS5kZWZpbmVkKCJyZXN1bHQiLG8pLHQ8MHx8dD5ufHxlPDB8fGU+bil0aHJvdyBuZXcgRChgeCBhbmQgeSBtdXN0IGJlIHVuc2lnbmVkIG5vcm1hbGl6ZWQgaW50ZWdlcnMgYmV0d2VlbiAwIGFuZCAke259YCk7aWYoby54PVAuZnJvbVNOb3JtKHQsbiksby55PVAuZnJvbVNOb3JtKGUsbiksby56PTEtKE1hdGguYWJzKG8ueCkrTWF0aC5hYnMoby55KSksby56PDApe2xldCByPW8ueDtvLng9KDEtTWF0aC5hYnMoby55KSkqUC5zaWduTm90WmVybyhyKSxvLnk9KDEtTWF0aC5hYnMocikpKlAuc2lnbk5vdFplcm8oby55KX1yZXR1cm4gYS5ub3JtYWxpemUobyxvKX07ZW4ub2N0RGVjb2RlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZW4ub2N0RGVjb2RlSW5SYW5nZSh0LGUsMjU1LG4pfTtlbi5vY3REZWNvZGVGcm9tQ2FydGVzaWFuND1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgiZW5jb2RlZCIsdCkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLGUpO2xldCBuPXQueCxvPXQueSxyPXQueixpPXQudztpZihuPDB8fG4+MjU1fHxvPDB8fG8+MjU1fHxyPDB8fHI+MjU1fHxpPDB8fGk+MjU1KXRocm93IG5ldyBEKCJ4LCB5LCB6LCBhbmQgdyBtdXN0IGJlIHVuc2lnbmVkIG5vcm1hbGl6ZWQgaW50ZWdlcnMgYmV0d2VlbiAwIGFuZCAyNTUiKTtsZXQgcz1uKl9iK28sZj1yKl9iK2k7cmV0dXJuIGVuLm9jdERlY29kZUluUmFuZ2UocyxmLDY1NTM1LGUpfTtlbi5vY3RQYWNrRmxvYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHkuZGVmaW5lZCgiZW5jb2RlZCIsdCksMjU2KnQueCt0Lnl9O0xoPW5ldyBKO2VuLm9jdEVuY29kZUZsb2F0PWZ1bmN0aW9uKHQpe3JldHVybiBlbi5vY3RFbmNvZGUodCxMaCksZW4ub2N0UGFja0Zsb2F0KExoKX07ZW4ub2N0RGVjb2RlRmxvYXQ9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoInZhbHVlIix0KTtsZXQgbj10LzI1NixvPU1hdGguZmxvb3Iobikscj0obi1vKSoyNTY7cmV0dXJuIGVuLm9jdERlY29kZShvLHIsZSl9O2VuLm9jdFBhY2s9ZnVuY3Rpb24odCxlLG4sbyl7eS5kZWZpbmVkKCJ2MSIsdCkseS5kZWZpbmVkKCJ2MiIsZSkseS5kZWZpbmVkKCJ2MyIsbikseS5kZWZpbmVkKCJyZXN1bHQiLG8pO2xldCByPWVuLm9jdEVuY29kZUZsb2F0KHQpLGk9ZW4ub2N0RW5jb2RlRmxvYXQoZSkscz1lbi5vY3RFbmNvZGUobixMaCk7cmV0dXJuIG8ueD02NTUzNipzLngrcixvLnk9NjU1MzYqcy55K2ksb307ZW4ub2N0VW5wYWNrPWZ1bmN0aW9uKHQsZSxuLG8pe3kuZGVmaW5lZCgicGFja2VkIix0KSx5LmRlZmluZWQoInYxIixlKSx5LmRlZmluZWQoInYyIixuKSx5LmRlZmluZWQoInYzIixvKTtsZXQgcj10LngvNjU1MzYsaT1NYXRoLmZsb29yKHIpLHM9KHItaSkqNjU1MzY7cj10LnkvNjU1MzY7bGV0IGY9TWF0aC5mbG9vcihyKSx1PShyLWYpKjY1NTM2O2VuLm9jdERlY29kZUZsb2F0KHMsZSksZW4ub2N0RGVjb2RlRmxvYXQodSxuKSxlbi5vY3REZWNvZGUoaSxmLG8pfTtlbi5jb21wcmVzc1RleHR1cmVDb29yZGluYXRlcz1mdW5jdGlvbih0KXt5LmRlZmluZWQoInRleHR1cmVDb29yZGluYXRlcyIsdCk7bGV0IGU9dC54KjQwOTV8MCxuPXQueSo0MDk1fDA7cmV0dXJuIDQwOTYqZStufTtlbi5kZWNvbXByZXNzVGV4dHVyZUNvb3JkaW5hdGVzPWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJjb21wcmVzc2VkIix0KSx5LmRlZmluZWQoInJlc3VsdCIsZSk7bGV0IG49dC80MDk2LG89TWF0aC5mbG9vcihuKTtyZXR1cm4gZS54PW8vNDA5NSxlLnk9KHQtbyo0MDk2KS80MDk1LGV9O2VuLnppZ1phZ0RlbHRhRGVjb2RlPWZ1bmN0aW9uKHQsZSxuKXt5LmRlZmluZWQoInVCdWZmZXIiLHQpLHkuZGVmaW5lZCgidkJ1ZmZlciIsZSkseS50eXBlT2YubnVtYmVyLmVxdWFscygidUJ1ZmZlci5sZW5ndGgiLCJ2QnVmZmVyLmxlbmd0aCIsdC5sZW5ndGgsZS5sZW5ndGgpLGgobikmJnkudHlwZU9mLm51bWJlci5lcXVhbHMoInVCdWZmZXIubGVuZ3RoIiwiaGVpZ2h0QnVmZmVyLmxlbmd0aCIsdC5sZW5ndGgsbi5sZW5ndGgpO2xldCBvPXQubGVuZ3RoLHI9MCxpPTAscz0wO2ZvcihsZXQgZj0wO2Y8bzsrK2Ypcis9RmgodFtmXSksaSs9RmgoZVtmXSksdFtmXT1yLGVbZl09aSxoKG4pJiYocys9RmgobltmXSksbltmXT1zKX07ZW4uZGVxdWFudGl6ZT1mdW5jdGlvbih0LGUsbixvKXt5LmRlZmluZWQoInR5cGVkQXJyYXkiLHQpLHkuZGVmaW5lZCgiY29tcG9uZW50RGF0YXR5cGUiLGUpLHkuZGVmaW5lZCgidHlwZSIsbikseS5kZWZpbmVkKCJjb3VudCIsbyk7bGV0IHI9ZGIuZ2V0TnVtYmVyT2ZDb21wb25lbnRzKG4pLGk7c3dpdGNoKGUpe2Nhc2UgZXQuQllURTppPTEyNzticmVhaztjYXNlIGV0LlVOU0lHTkVEX0JZVEU6aT0yNTU7YnJlYWs7Y2FzZSBldC5TSE9SVDppPTMyNzY3O2JyZWFrO2Nhc2UgZXQuVU5TSUdORURfU0hPUlQ6aT02NTUzNTticmVhaztjYXNlIGV0LklOVDppPTIxNDc0ODM2NDc7YnJlYWs7Y2FzZSBldC5VTlNJR05FRF9JTlQ6aT00Mjk0OTY3Mjk1O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEQoYENhbm5vdCBkZXF1YW50aXplIGNvbXBvbmVudCBkYXRhdHlwZTogJHtlfWApfWxldCBzPW5ldyBGbG9hdDMyQXJyYXkobypyKTtmb3IobGV0IGY9MDtmPG87ZisrKWZvcihsZXQgdT0wO3U8cjt1Kyspe2xldCBjPWYqcit1O3NbY109TWF0aC5tYXgodFtjXS9pLC0xKX1yZXR1cm4gc307ZW4uZGVjb2RlUkdCNTY1PWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJ0eXBlZEFycmF5Iix0KTtsZXQgbj10Lmxlbmd0aCozO2goZSkmJnkudHlwZU9mLm51bWJlci5lcXVhbHMoInJlc3VsdC5sZW5ndGgiLCJ0eXBlZEFycmF5Lmxlbmd0aCAqIDMiLGUubGVuZ3RoLG4pO2xldCBvPXQubGVuZ3RoO2goZSl8fChlPW5ldyBGbG9hdDMyQXJyYXkobyozKSk7bGV0IHI9MzEsaT02MyxzPTEvMzEsZj0xLzYzO2ZvcihsZXQgdT0wO3U8bzt1Kyspe2xldCBjPXRbdV0sbD1jPj4xMSxwPWM+PjUmaSxkPWMmcixtPTMqdTtlW21dPWwqcyxlW20rMV09cCpmLGVbbSsyXT1kKnN9cmV0dXJuIGV9O25uPWVufSk7ZnVuY3Rpb24gbVAodCxlLG4sbyxyKXt5LmRlZmluZWQoInBvaW50Iix0KSx5LmRlZmluZWQoInAwIixlKSx5LmRlZmluZWQoInAxIixuKSx5LmRlZmluZWQoInAyIixvKSxoKHIpfHwocj1uZXcgYSk7bGV0IGkscyxmLHUsYyxsLHAsZDtpZihoKGUueikpe2lmKGEuZXF1YWxzRXBzaWxvbih0LGUsUC5FUFNJTE9OMTQpKXJldHVybiBhLmNsb25lKGEuVU5JVF9YLHIpO2lmKGEuZXF1YWxzRXBzaWxvbih0LG4sUC5FUFNJTE9OMTQpKXJldHVybiBhLmNsb25lKGEuVU5JVF9ZLHIpO2lmKGEuZXF1YWxzRXBzaWxvbih0LG8sUC5FUFNJTE9OMTQpKXJldHVybiBhLmNsb25lKGEuVU5JVF9aLHIpO2k9YS5zdWJ0cmFjdChuLGUsZ2IpLHM9YS5zdWJ0cmFjdChvLGUsQWIpLGY9YS5zdWJ0cmFjdCh0LGUsYmIpLHU9YS5kb3QoaSxpKSxjPWEuZG90KGkscyksbD1hLmRvdChpLGYpLHA9YS5kb3QocyxzKSxkPWEuZG90KHMsZil9ZWxzZXtpZihKLmVxdWFsc0Vwc2lsb24odCxlLFAuRVBTSUxPTjE0KSlyZXR1cm4gYS5jbG9uZShhLlVOSVRfWCxyKTtpZihKLmVxdWFsc0Vwc2lsb24odCxuLFAuRVBTSUxPTjE0KSlyZXR1cm4gYS5jbG9uZShhLlVOSVRfWSxyKTtpZihKLmVxdWFsc0Vwc2lsb24odCxvLFAuRVBTSUxPTjE0KSlyZXR1cm4gYS5jbG9uZShhLlVOSVRfWixyKTtpPUouc3VidHJhY3QobixlLGdiKSxzPUouc3VidHJhY3QobyxlLEFiKSxmPUouc3VidHJhY3QodCxlLGJiKSx1PUouZG90KGksaSksYz1KLmRvdChpLHMpLGw9Si5kb3QoaSxmKSxwPUouZG90KHMscyksZD1KLmRvdChzLGYpfXIueT1wKmwtYypkLHIuej11KmQtYypsO2xldCBtPXUqcC1jKmM7aWYobSE9PTApcmV0dXJuIHIueS89bSxyLnovPW0sci54PTEtci55LXIueixyfXZhciBnYixBYixiYixUYix3Yj0kKCgpPT57VWUoKTtMdCgpO1d0KCk7ZnQoKTtLdCgpO2diPW5ldyBhLEFiPW5ldyBhLGJiPW5ldyBhO1RiPW1QfSk7ZnVuY3Rpb24gcmkoKXt0aGlzLmhpZ2g9YS5jbG9uZShhLlpFUk8pLHRoaXMubG93PWEuY2xvbmUoYS5aRVJPKX12YXIgTmksRGgsWnMsQmg9JCgoKT0+e0x0KCk7V3QoKTtmdCgpO3JpLmVuY29kZT1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm51bWJlcigidmFsdWUiLHQpLGgoZSl8fChlPXtoaWdoOjAsbG93OjB9KTtsZXQgbjtyZXR1cm4gdD49MD8obj1NYXRoLmZsb29yKHQvNjU1MzYpKjY1NTM2LGUuaGlnaD1uLGUubG93PXQtbik6KG49TWF0aC5mbG9vcigtdC82NTUzNikqNjU1MzYsZS5oaWdoPS1uLGUubG93PXQrbiksZX07Tmk9e2hpZ2g6MCxsb3c6MH07cmkuZnJvbUNhcnRlc2lhbj1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSxoKGUpfHwoZT1uZXcgcmkpO2xldCBuPWUuaGlnaCxvPWUubG93O3JldHVybiByaS5lbmNvZGUodC54LE5pKSxuLng9TmkuaGlnaCxvLng9TmkubG93LHJpLmVuY29kZSh0LnksTmkpLG4ueT1OaS5oaWdoLG8ueT1OaS5sb3cscmkuZW5jb2RlKHQueixOaSksbi56PU5pLmhpZ2gsby56PU5pLmxvdyxlfTtEaD1uZXcgcmk7cmkud3JpdGVFbGVtZW50cz1mdW5jdGlvbih0LGUsbil7eS5kZWZpbmVkKCJjYXJ0ZXNpYW5BcnJheSIsZSkseS50eXBlT2YubnVtYmVyKCJpbmRleCIsbikseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImluZGV4IixuLDApLHJpLmZyb21DYXJ0ZXNpYW4odCxEaCk7bGV0IG89RGguaGlnaCxyPURoLmxvdztlW25dPW8ueCxlW24rMV09by55LGVbbisyXT1vLnosZVtuKzNdPXIueCxlW24rNF09ci55LGVbbis1XT1yLnp9O1pzPXJpfSk7dmFyIHRvLEZ0LCRlPSQoKCk9PntmdCgpO2p0KCk7S3QoKTskcygpO3RvPXtVTlNJR05FRF9CWVRFOkh0LlVOU0lHTkVEX0JZVEUsVU5TSUdORURfU0hPUlQ6SHQuVU5TSUdORURfU0hPUlQsVU5TSUdORURfSU5UOkh0LlVOU0lHTkVEX0lOVH07dG8uZ2V0U2l6ZUluQnl0ZXM9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgdG8uVU5TSUdORURfQllURTpyZXR1cm4gVWludDhBcnJheS5CWVRFU19QRVJfRUxFTUVOVDtjYXNlIHRvLlVOU0lHTkVEX1NIT1JUOnJldHVybiBVaW50MTZBcnJheS5CWVRFU19QRVJfRUxFTUVOVDtjYXNlIHRvLlVOU0lHTkVEX0lOVDpyZXR1cm4gVWludDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlR9dGhyb3cgbmV3IEQoImluZGV4RGF0YXR5cGUgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYSB2YWxpZCBJbmRleERhdGF0eXBlIGNvbnN0YW50LiIpfTt0by5mcm9tU2l6ZUluQnl0ZXM9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgMjpyZXR1cm4gdG8uVU5TSUdORURfU0hPUlQ7Y2FzZSA0OnJldHVybiB0by5VTlNJR05FRF9JTlQ7Y2FzZSAxOnJldHVybiB0by5VTlNJR05FRF9CWVRFO2RlZmF1bHQ6dGhyb3cgbmV3IEQoIlNpemUgaW4gYnl0ZXMgY2Fubm90IGJlIG1hcHBlZCB0byBhbiBJbmRleERhdGF0eXBlIil9fTt0by52YWxpZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gaCh0KSYmKHQ9PT10by5VTlNJR05FRF9CWVRFfHx0PT09dG8uVU5TSUdORURfU0hPUlR8fHQ9PT10by5VTlNJR05FRF9JTlQpfTt0by5jcmVhdGVUeXBlZEFycmF5PWZ1bmN0aW9uKHQsZSl7aWYoIWgodCkpdGhyb3cgbmV3IEQoIm51bWJlck9mVmVydGljZXMgaXMgcmVxdWlyZWQuIik7cmV0dXJuIHQ+PVAuU0lYVFlfRk9VUl9LSUxPQllURVM/bmV3IFVpbnQzMkFycmF5KGUpOm5ldyBVaW50MTZBcnJheShlKX07dG8uY3JlYXRlVHlwZWRBcnJheUZyb21BcnJheUJ1ZmZlcj1mdW5jdGlvbih0LGUsbixvKXtpZighaCh0KSl0aHJvdyBuZXcgRCgibnVtYmVyT2ZWZXJ0aWNlcyBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgRCgic291cmNlQXJyYXkgaXMgcmVxdWlyZWQuIik7aWYoIWgobikpdGhyb3cgbmV3IEQoImJ5dGVPZmZzZXQgaXMgcmVxdWlyZWQuIik7cmV0dXJuIHQ+PVAuU0lYVFlfRk9VUl9LSUxPQllURVM/bmV3IFVpbnQzMkFycmF5KGUsbixvKTpuZXcgVWludDE2QXJyYXkoZSxuLG8pfTt0by5mcm9tVHlwZWRBcnJheT1mdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gdG8uVU5TSUdORURfQllURTtpZih0IGluc3RhbmNlb2YgVWludDE2QXJyYXkpcmV0dXJuIHRvLlVOU0lHTkVEX1NIT1JUO2lmKHQgaW5zdGFuY2VvZiBVaW50MzJBcnJheSlyZXR1cm4gdG8uVU5TSUdORURfSU5UO3Rocm93IG5ldyBEKCJhcnJheSBtdXN0IGJlIGEgVWludDhBcnJheSwgVWludDE2QXJyYXksIG9yIFVpbnQzMkFycmF5LiIpfTtGdD1PYmplY3QuZnJlZXplKHRvKX0pO2Z1bmN0aW9uIE9iKHQsZSxuKXtsZXQgbz10K2U7cmV0dXJuIFAuc2lnbih0KSE9PVAuc2lnbihlKSYmTWF0aC5hYnMoby9NYXRoLm1heChNYXRoLmFicyh0KSxNYXRoLmFicyhlKSkpPG4/MDpvfXZhciBVaCxncixMcD0kKCgpPT57anQoKTtLdCgpO1VoPXt9O1VoLmNvbXB1dGVEaXNjcmltaW5hbnQ9ZnVuY3Rpb24odCxlLG4pe2lmKHR5cGVvZiB0IT0ibnVtYmVyIil0aHJvdyBuZXcgRCgiYSBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtpZih0eXBlb2YgZSE9Im51bWJlciIpdGhyb3cgbmV3IEQoImIgaXMgYSByZXF1aXJlZCBudW1iZXIuIik7aWYodHlwZW9mIG4hPSJudW1iZXIiKXRocm93IG5ldyBEKCJjIGlzIGEgcmVxdWlyZWQgbnVtYmVyLiIpO3JldHVybiBlKmUtNCp0Km59O1VoLmNvbXB1dGVSZWFsUm9vdHM9ZnVuY3Rpb24odCxlLG4pe2lmKHR5cGVvZiB0IT0ibnVtYmVyIil0aHJvdyBuZXcgRCgiYSBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtpZih0eXBlb2YgZSE9Im51bWJlciIpdGhyb3cgbmV3IEQoImIgaXMgYSByZXF1aXJlZCBudW1iZXIuIik7aWYodHlwZW9mIG4hPSJudW1iZXIiKXRocm93IG5ldyBEKCJjIGlzIGEgcmVxdWlyZWQgbnVtYmVyLiIpO2xldCBvO2lmKHQ9PT0wKXJldHVybiBlPT09MD9bXTpbLW4vZV07aWYoZT09PTApe2lmKG49PT0wKXJldHVyblswLDBdO2xldCB1PU1hdGguYWJzKG4pLGM9TWF0aC5hYnModCk7aWYodTxjJiZ1L2M8UC5FUFNJTE9OMTQpcmV0dXJuWzAsMF07aWYodT5jJiZjL3U8UC5FUFNJTE9OMTQpcmV0dXJuW107aWYobz0tbi90LG88MClyZXR1cm5bXTtsZXQgbD1NYXRoLnNxcnQobyk7cmV0dXJuWy1sLGxdfWVsc2UgaWYobj09PTApcmV0dXJuIG89LWUvdCxvPDA/W28sMF06WzAsb107bGV0IHI9ZSplLGk9NCp0Km4scz1PYihyLC1pLFAuRVBTSUxPTjE0KTtpZihzPDApcmV0dXJuW107bGV0IGY9LS41Kk9iKGUsUC5zaWduKGUpKk1hdGguc3FydChzKSxQLkVQU0lMT04xNCk7cmV0dXJuIGU+MD9bZi90LG4vZl06W24vZixmL3RdfTtncj1VaH0pO2Z1bmN0aW9uIGtoKHQsZSxuLG8pe2xldCByPXQsaT1lLzMscz1uLzMsZj1vLHU9cipzLGM9aSpmLGw9aSppLHA9cypzLGQ9cipzLWwsbT1yKmYtaSpzLF89aSpmLXAsZz00KmQqXy1tKm0sYixUO2lmKGc8MCl7bGV0IFIsbnQsYXQ7bCpjPj11KnA/KFI9cixudD1kLGF0PS0yKmkqZCtyKm0pOihSPWYsbnQ9XyxhdD0tZiptKzIqcypfKTtsZXQgaHQ9LShhdDwwPy0xOjEpKk1hdGguYWJzKFIpKk1hdGguc3FydCgtZyk7VD0tYXQraHQ7bGV0IG90PVQvMixQdD1vdDwwPy1NYXRoLnBvdygtb3QsMS8zKTpNYXRoLnBvdyhvdCwxLzMpLHl0PVQ9PT1odD8tUHQ6LW50L1B0O3JldHVybiBiPW50PD0wP1B0K3l0Oi1hdC8oUHQqUHQreXQqeXQrbnQpLGwqYz49dSpwP1soYi1pKS9yXTpbLWYvKGIrcyldfWxldCBPPWQsRT0tMippKmQrciptLHc9XyxDPS1mKm0rMipzKl8sTT1NYXRoLnNxcnQoZyksTj1NYXRoLnNxcnQoMykvMixGPU1hdGguYWJzKE1hdGguYXRhbjIocipNLC1FKS8zKTtiPTIqTWF0aC5zcXJ0KC1PKTtsZXQgST1NYXRoLmNvcyhGKTtUPWIqSTtsZXQgdj1iKigtSS8yLU4qTWF0aC5zaW4oRikpLEI9VCt2PjIqaT9ULWk6di1pLEE9cixTPUIvQTtGPU1hdGguYWJzKE1hdGguYXRhbjIoZipNLC1DKS8zKSxiPTIqTWF0aC5zcXJ0KC13KSxJPU1hdGguY29zKEYpLFQ9YipJLHY9YiooLUkvMi1OKk1hdGguc2luKEYpKTtsZXQgeD0tZixMPVQrdjwyKnM/VCtzOnYrcyx6PXgvTCxqPUEqTCxrPS1CKkwtQSp4LHE9Qip4LFc9KHMqay1pKnEpLygtaSprK3Mqaik7cmV0dXJuIFM8PVc/Uzw9ej9XPD16P1tTLFcsel06W1MseixXXTpbeixTLFddOlM8PXo/W1csUyx6XTpXPD16P1tXLHosU106W3osVyxTXX12YXIgR2gsRHAsRWI9JCgoKT0+e2p0KCk7THAoKTtHaD17fTtHaC5jb21wdXRlRGlzY3JpbWluYW50PWZ1bmN0aW9uKHQsZSxuLG8pe2lmKHR5cGVvZiB0IT0ibnVtYmVyIil0aHJvdyBuZXcgRCgiYSBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtpZih0eXBlb2YgZSE9Im51bWJlciIpdGhyb3cgbmV3IEQoImIgaXMgYSByZXF1aXJlZCBudW1iZXIuIik7aWYodHlwZW9mIG4hPSJudW1iZXIiKXRocm93IG5ldyBEKCJjIGlzIGEgcmVxdWlyZWQgbnVtYmVyLiIpO2lmKHR5cGVvZiBvIT0ibnVtYmVyIil0aHJvdyBuZXcgRCgiZCBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtsZXQgcj10KnQsaT1lKmUscz1uKm4sZj1vKm87cmV0dXJuIDE4KnQqZSpuKm8raSpzLTI3KnIqZi00Kih0KnMqbitpKmUqbyl9O0doLmNvbXB1dGVSZWFsUm9vdHM9ZnVuY3Rpb24odCxlLG4sbyl7aWYodHlwZW9mIHQhPSJudW1iZXIiKXRocm93IG5ldyBEKCJhIGlzIGEgcmVxdWlyZWQgbnVtYmVyLiIpO2lmKHR5cGVvZiBlIT0ibnVtYmVyIil0aHJvdyBuZXcgRCgiYiBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtpZih0eXBlb2YgbiE9Im51bWJlciIpdGhyb3cgbmV3IEQoImMgaXMgYSByZXF1aXJlZCBudW1iZXIuIik7aWYodHlwZW9mIG8hPSJudW1iZXIiKXRocm93IG5ldyBEKCJkIGlzIGEgcmVxdWlyZWQgbnVtYmVyLiIpO2xldCByLGk7aWYodD09PTApcmV0dXJuIGdyLmNvbXB1dGVSZWFsUm9vdHMoZSxuLG8pO2lmKGU9PT0wKXtpZihuPT09MCl7aWYobz09PTApcmV0dXJuWzAsMCwwXTtpPS1vL3Q7bGV0IHM9aTwwPy1NYXRoLnBvdygtaSwxLzMpOk1hdGgucG93KGksMS8zKTtyZXR1cm5bcyxzLHNdfWVsc2UgaWYobz09PTApcmV0dXJuIHI9Z3IuY29tcHV0ZVJlYWxSb290cyh0LDAsbiksci5MZW5ndGg9PT0wP1swXTpbclswXSwwLHJbMV1dO3JldHVybiBraCh0LDAsbixvKX1lbHNle2lmKG49PT0wKXJldHVybiBvPT09MD8oaT0tZS90LGk8MD9baSwwLDBdOlswLDAsaV0pOmtoKHQsZSwwLG8pO2lmKG89PT0wKXJldHVybiByPWdyLmNvbXB1dGVSZWFsUm9vdHModCxlLG4pLHIubGVuZ3RoPT09MD9bMF06clsxXTw9MD9bclswXSxyWzFdLDBdOnJbMF0+PTA/WzAsclswXSxyWzFdXTpbclswXSwwLHJbMV1dfXJldHVybiBraCh0LGUsbixvKX07RHA9R2h9KTtmdW5jdGlvbiBCcih0LGUsbixvKXtsZXQgcj10KnQsaT1lLTMqci84LHM9bi1lKnQvMityKnQvOCxmPW8tbip0LzQrZSpyLzE2LTMqcipyLzI1Nix1PURwLmNvbXB1dGVSZWFsUm9vdHMoMSwyKmksaSppLTQqZiwtcypzKTtpZih1Lmxlbmd0aD4wKXtsZXQgYz0tdC80LGw9dVt1Lmxlbmd0aC0xXTtpZihNYXRoLmFicyhsKTxQLkVQU0lMT04xNCl7bGV0IHA9Z3IuY29tcHV0ZVJlYWxSb290cygxLGksZik7aWYocC5sZW5ndGg9PT0yKXtsZXQgZD1wWzBdLG09cFsxXSxfO2lmKGQ+PTAmJm0+PTApe2xldCBnPU1hdGguc3FydChkKSxiPU1hdGguc3FydChtKTtyZXR1cm5bYy1iLGMtZyxjK2csYytiXX1lbHNle2lmKGQ+PTAmJm08MClyZXR1cm4gXz1NYXRoLnNxcnQoZCksW2MtXyxjK19dO2lmKGQ8MCYmbT49MClyZXR1cm4gXz1NYXRoLnNxcnQobSksW2MtXyxjK19dfX1yZXR1cm5bXX1lbHNlIGlmKGw+MCl7bGV0IHA9TWF0aC5zcXJ0KGwpLGQ9KGkrbC1zL3ApLzIsbT0oaStsK3MvcCkvMixfPWdyLmNvbXB1dGVSZWFsUm9vdHMoMSxwLGQpLGc9Z3IuY29tcHV0ZVJlYWxSb290cygxLC1wLG0pO3JldHVybiBfLmxlbmd0aCE9PTA/KF9bMF0rPWMsX1sxXSs9YyxnLmxlbmd0aCE9PTA/KGdbMF0rPWMsZ1sxXSs9YyxfWzFdPD1nWzBdP1tfWzBdLF9bMV0sZ1swXSxnWzFdXTpnWzFdPD1fWzBdP1tnWzBdLGdbMV0sX1swXSxfWzFdXTpfWzBdPj1nWzBdJiZfWzFdPD1nWzFdP1tnWzBdLF9bMF0sX1sxXSxnWzFdXTpnWzBdPj1fWzBdJiZnWzFdPD1fWzFdP1tfWzBdLGdbMF0sZ1sxXSxfWzFdXTpfWzBdPmdbMF0mJl9bMF08Z1sxXT9bZ1swXSxfWzBdLGdbMV0sX1sxXV06W19bMF0sZ1swXSxfWzFdLGdbMV1dKTpfKTpnLmxlbmd0aCE9PTA/KGdbMF0rPWMsZ1sxXSs9YyxnKTpbXX19cmV0dXJuW119ZnVuY3Rpb24gVGYodCxlLG4sbyl7bGV0IHI9bipuLGk9ZSplLHM9dCp0LGY9LTIqZSx1PW4qdCtpLTQqbyxjPXMqby1uKmUqdCtyLGw9RHAuY29tcHV0ZVJlYWxSb290cygxLGYsdSxjKTtpZihsLmxlbmd0aD4wKXtsZXQgcD1sWzBdLGQ9ZS1wLG09ZCpkLF89dC8yLGc9ZC8yLGI9bS00Km8sVD1tKzQqTWF0aC5hYnMobyksTz1zLTQqcCxFPXMrNCpNYXRoLmFicyhwKSx3LEM7aWYocDwwfHxiKkU8TypUKXtsZXQgQT1NYXRoLnNxcnQoTyk7dz1BLzIsQz1BPT09MD8wOih0KmctbikvQX1lbHNle2xldCBBPU1hdGguc3FydChiKTt3PUE9PT0wPzA6KHQqZy1uKS9BLEM9QS8yfWxldCBNLE47Xz09PTAmJnc9PT0wPyhNPTAsTj0wKTpQLnNpZ24oXyk9PT1QLnNpZ24odyk/KE09Xyt3LE49cC9NKTooTj1fLXcsTT1wL04pO2xldCBGLEk7Zz09PTAmJkM9PT0wPyhGPTAsST0wKTpQLnNpZ24oZyk9PT1QLnNpZ24oQyk/KEY9ZytDLEk9by9GKTooST1nLUMsRj1vL0kpO2xldCB2PWdyLmNvbXB1dGVSZWFsUm9vdHMoMSxNLEYpLEI9Z3IuY29tcHV0ZVJlYWxSb290cygxLE4sSSk7aWYodi5sZW5ndGghPT0wKXJldHVybiBCLmxlbmd0aCE9PTA/dlsxXTw9QlswXT9bdlswXSx2WzFdLEJbMF0sQlsxXV06QlsxXTw9dlswXT9bQlswXSxCWzFdLHZbMF0sdlsxXV06dlswXT49QlswXSYmdlsxXTw9QlsxXT9bQlswXSx2WzBdLHZbMV0sQlsxXV06QlswXT49dlswXSYmQlsxXTw9dlsxXT9bdlswXSxCWzBdLEJbMV0sdlsxXV06dlswXT5CWzBdJiZ2WzBdPEJbMV0/W0JbMF0sdlswXSxCWzFdLHZbMV1dOlt2WzBdLEJbMF0sdlsxXSxCWzFdXTp2O2lmKEIubGVuZ3RoIT09MClyZXR1cm4gQn1yZXR1cm5bXX12YXIgVmgsUmIsU2I9JCgoKT0+e0ViKCk7anQoKTtLdCgpO0xwKCk7Vmg9e307VmguY29tcHV0ZURpc2NyaW1pbmFudD1mdW5jdGlvbih0LGUsbixvLHIpe2lmKHR5cGVvZiB0IT0ibnVtYmVyIil0aHJvdyBuZXcgRCgiYSBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtpZih0eXBlb2YgZSE9Im51bWJlciIpdGhyb3cgbmV3IEQoImIgaXMgYSByZXF1aXJlZCBudW1iZXIuIik7aWYodHlwZW9mIG4hPSJudW1iZXIiKXRocm93IG5ldyBEKCJjIGlzIGEgcmVxdWlyZWQgbnVtYmVyLiIpO2lmKHR5cGVvZiBvIT0ibnVtYmVyIil0aHJvdyBuZXcgRCgiZCBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtpZih0eXBlb2YgciE9Im51bWJlciIpdGhyb3cgbmV3IEQoImUgaXMgYSByZXF1aXJlZCBudW1iZXIuIik7bGV0IGk9dCp0LHM9aSp0LGY9ZSplLHU9ZiplLGM9bipuLGw9YypuLHA9bypvLGQ9cCpvLG09cipyLF89bSpyO3JldHVybiBmKmMqcC00KnUqZC00KnQqbCpwKzE4KnQqZSpuKmQtMjcqaSpwKnArMjU2KnMqXytyKigxOCp1Km4qby00KmYqbCsxNip0KmMqYy04MCp0KmUqYypvLTYqdCpmKnArMTQ0KmkqbipwKSttKigxNDQqdCpmKm4tMjcqZipmLTEyOCppKmMtMTkyKmkqZSpvKX07VmguY29tcHV0ZVJlYWxSb290cz1mdW5jdGlvbih0LGUsbixvLHIpe2lmKHR5cGVvZiB0IT0ibnVtYmVyIil0aHJvdyBuZXcgRCgiYSBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtpZih0eXBlb2YgZSE9Im51bWJlciIpdGhyb3cgbmV3IEQoImIgaXMgYSByZXF1aXJlZCBudW1iZXIuIik7aWYodHlwZW9mIG4hPSJudW1iZXIiKXRocm93IG5ldyBEKCJjIGlzIGEgcmVxdWlyZWQgbnVtYmVyLiIpO2lmKHR5cGVvZiBvIT0ibnVtYmVyIil0aHJvdyBuZXcgRCgiZCBpcyBhIHJlcXVpcmVkIG51bWJlci4iKTtpZih0eXBlb2YgciE9Im51bWJlciIpdGhyb3cgbmV3IEQoImUgaXMgYSByZXF1aXJlZCBudW1iZXIuIik7aWYoTWF0aC5hYnModCk8UC5FUFNJTE9OMTUpcmV0dXJuIERwLmNvbXB1dGVSZWFsUm9vdHMoZSxuLG8scik7bGV0IGk9ZS90LHM9bi90LGY9by90LHU9ci90LGM9aTwwPzE6MDtzd2l0Y2goYys9czwwP2MrMTpjLGMrPWY8MD9jKzE6YyxjKz11PDA/YysxOmMsYyl7Y2FzZSAwOnJldHVybiBCcihpLHMsZix1KTtjYXNlIDE6cmV0dXJuIFRmKGkscyxmLHUpO2Nhc2UgMjpyZXR1cm4gVGYoaSxzLGYsdSk7Y2FzZSAzOnJldHVybiBCcihpLHMsZix1KTtjYXNlIDQ6cmV0dXJuIEJyKGkscyxmLHUpO2Nhc2UgNTpyZXR1cm4gVGYoaSxzLGYsdSk7Y2FzZSA2OnJldHVybiBCcihpLHMsZix1KTtjYXNlIDc6cmV0dXJuIEJyKGkscyxmLHUpO2Nhc2UgODpyZXR1cm4gVGYoaSxzLGYsdSk7Y2FzZSA5OnJldHVybiBCcihpLHMsZix1KTtjYXNlIDEwOnJldHVybiBCcihpLHMsZix1KTtjYXNlIDExOnJldHVybiBUZihpLHMsZix1KTtjYXNlIDEyOnJldHVybiBCcihpLHMsZix1KTtjYXNlIDEzOnJldHVybiBCcihpLHMsZix1KTtjYXNlIDE0OnJldHVybiBCcihpLHMsZix1KTtjYXNlIDE1OnJldHVybiBCcihpLHMsZix1KTtkZWZhdWx0OnJldHVybn19O1JiPVZofSk7ZnVuY3Rpb24gQnAodCxlKXtlPWEuY2xvbmUoZT8/YS5aRVJPKSxhLmVxdWFscyhlLGEuWkVSTyl8fGEubm9ybWFsaXplKGUsZSksdGhpcy5vcmlnaW49YS5jbG9uZSh0Pz9hLlpFUk8pLHRoaXMuZGlyZWN0aW9uPWV9dmFyIFFzLFVwPSQoKCk9PntMdCgpO1d0KCk7ZnQoKTtCcC5jbG9uZT1mdW5jdGlvbih0LGUpe2lmKGgodCkpcmV0dXJuIGgoZSk/KGUub3JpZ2luPWEuY2xvbmUodC5vcmlnaW4pLGUuZGlyZWN0aW9uPWEuY2xvbmUodC5kaXJlY3Rpb24pLGUpOm5ldyBCcCh0Lm9yaWdpbix0LmRpcmVjdGlvbil9O0JwLmdldFBvaW50PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJyYXkiLHQpLHkudHlwZU9mLm51bWJlcigidCIsZSksaChuKXx8KG49bmV3IGEpLG49YS5tdWx0aXBseUJ5U2NhbGFyKHQuZGlyZWN0aW9uLGUsbiksYS5hZGQodC5vcmlnaW4sbixuKX07UXM9QnB9KTtmdW5jdGlvbiBnUCh0LGUsbixvKXtsZXQgcj1lKmUtNCp0Km47aWYocjwwKXJldHVybjtpZihyPjApe2xldCBzPTEvKDIqdCksZj1NYXRoLnNxcnQociksdT0oLWUrZikqcyxjPSgtZS1mKSpzO3JldHVybiB1PGM/KG8ucm9vdDA9dSxvLnJvb3QxPWMpOihvLnJvb3QwPWMsby5yb290MT11KSxvfWxldCBpPS1lLygyKnQpO2lmKGkhPT0wKXJldHVybiBvLnJvb3QwPW8ucm9vdDE9aSxvfWZ1bmN0aW9uIExiKHQsZSxuKXtoKG4pfHwobj1uZXcgUXIpO2xldCBvPXQub3JpZ2luLHI9dC5kaXJlY3Rpb24saT1lLmNlbnRlcixzPWUucmFkaXVzKmUucmFkaXVzLGY9YS5zdWJ0cmFjdChvLGksRmIpLHU9YS5kb3QocixyKSxjPTIqYS5kb3QocixmKSxsPWEubWFnbml0dWRlU3F1YXJlZChmKS1zLHA9Z1AodSxjLGwsQVApO2lmKGgocCkpcmV0dXJuIG4uc3RhcnQ9cC5yb290MCxuLnN0b3A9cC5yb290MSxufWZ1bmN0aW9uIEpzKHQsZSxuKXtsZXQgbz10K2U7cmV0dXJuIFAuc2lnbih0KSE9PVAuc2lnbihlKSYmTWF0aC5hYnMoby9NYXRoLm1heChNYXRoLmFicyh0KSxNYXRoLmFicyhlKSkpPG4/MDpvfXZhciBnbixoUCxfUCxGYixDYix4Yix5UCxBUCxiUCxUUCx3UCx6aCxQYixNYixrcCxPUCxFUCxSUCxTUCxDUCx4UCxOYixJYix2YixQUCxNUCxOUCxobyx0Yz0kKCgpPT57THQoKTtJZSgpO2Z0KCk7anQoKTtIbCgpO0t0KCk7Qm4oKTtMcCgpO1NiKCk7VXAoKTtnbj17fTtnbi5yYXlQbGFuZT1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEQoInJheSBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgRCgicGxhbmUgaXMgcmVxdWlyZWQuIik7aChuKXx8KG49bmV3IGEpO2xldCBvPXQub3JpZ2luLHI9dC5kaXJlY3Rpb24saT1lLm5vcm1hbCxzPWEuZG90KGkscik7aWYoTWF0aC5hYnMocyk8UC5FUFNJTE9OMTUpcmV0dXJuO2xldCBmPSgtZS5kaXN0YW5jZS1hLmRvdChpLG8pKS9zO2lmKCEoZjwwKSlyZXR1cm4gbj1hLm11bHRpcGx5QnlTY2FsYXIocixmLG4pLGEuYWRkKG8sbixuKX07aFA9bmV3IGEsX1A9bmV3IGEsRmI9bmV3IGEsQ2I9bmV3IGEseGI9bmV3IGE7Z24ucmF5VHJpYW5nbGVQYXJhbWV0cmljPWZ1bmN0aW9uKHQsZSxuLG8scil7aWYoIWgodCkpdGhyb3cgbmV3IEQoInJheSBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgRCgicDAgaXMgcmVxdWlyZWQuIik7aWYoIWgobikpdGhyb3cgbmV3IEQoInAxIGlzIHJlcXVpcmVkLiIpO2lmKCFoKG8pKXRocm93IG5ldyBEKCJwMiBpcyByZXF1aXJlZC4iKTtyPXI/PyExO2xldCBpPXQub3JpZ2luLHM9dC5kaXJlY3Rpb24sZj1hLnN1YnRyYWN0KG4sZSxoUCksdT1hLnN1YnRyYWN0KG8sZSxfUCksYz1hLmNyb3NzKHMsdSxGYiksbD1hLmRvdChmLGMpLHAsZCxtLF8sZztpZihyKXtpZihsPFAuRVBTSUxPTjZ8fChwPWEuc3VidHJhY3QoaSxlLENiKSxtPWEuZG90KHAsYyksbTwwfHxtPmwpfHwoZD1hLmNyb3NzKHAsZix4YiksXz1hLmRvdChzLGQpLF88MHx8bStfPmwpKXJldHVybjtnPWEuZG90KHUsZCkvbH1lbHNle2lmKE1hdGguYWJzKGwpPFAuRVBTSUxPTjYpcmV0dXJuO2xldCBiPTEvbDtpZihwPWEuc3VidHJhY3QoaSxlLENiKSxtPWEuZG90KHAsYykqYixtPDB8fG0+MXx8KGQ9YS5jcm9zcyhwLGYseGIpLF89YS5kb3QocyxkKSpiLF88MHx8bStfPjEpKXJldHVybjtnPWEuZG90KHUsZCkqYn1yZXR1cm4gZ307Z24ucmF5VHJpYW5nbGU9ZnVuY3Rpb24odCxlLG4sbyxyLGkpe2xldCBzPWduLnJheVRyaWFuZ2xlUGFyYW1ldHJpYyh0LGUsbixvLHIpO2lmKCEoIWgocyl8fHM8MCkpcmV0dXJuIGgoaSl8fChpPW5ldyBhKSxhLm11bHRpcGx5QnlTY2FsYXIodC5kaXJlY3Rpb24scyxpKSxhLmFkZCh0Lm9yaWdpbixpLGkpfTt5UD1uZXcgUXM7Z24ubGluZVNlZ21lbnRUcmlhbmdsZT1mdW5jdGlvbih0LGUsbixvLHIsaSxzKXtpZighaCh0KSl0aHJvdyBuZXcgRCgidjAgaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEQoInYxIGlzIHJlcXVpcmVkLiIpO2lmKCFoKG4pKXRocm93IG5ldyBEKCJwMCBpcyByZXF1aXJlZC4iKTtpZighaChvKSl0aHJvdyBuZXcgRCgicDEgaXMgcmVxdWlyZWQuIik7aWYoIWgocikpdGhyb3cgbmV3IEQoInAyIGlzIHJlcXVpcmVkLiIpO2xldCBmPXlQO2EuY2xvbmUodCxmLm9yaWdpbiksYS5zdWJ0cmFjdChlLHQsZi5kaXJlY3Rpb24pLGEubm9ybWFsaXplKGYuZGlyZWN0aW9uLGYuZGlyZWN0aW9uKTtsZXQgdT1nbi5yYXlUcmlhbmdsZVBhcmFtZXRyaWMoZixuLG8scixpKTtpZighKCFoKHUpfHx1PDB8fHU+YS5kaXN0YW5jZSh0LGUpKSlyZXR1cm4gaChzKXx8KHM9bmV3IGEpLGEubXVsdGlwbHlCeVNjYWxhcihmLmRpcmVjdGlvbix1LHMpLGEuYWRkKGYub3JpZ2luLHMscyl9O0FQPXtyb290MDowLHJvb3QxOjB9O2duLnJheVNwaGVyZT1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEQoInJheSBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgRCgic3BoZXJlIGlzIHJlcXVpcmVkLiIpO2lmKG49TGIodCxlLG4pLCEoIWgobil8fG4uc3RvcDwwKSlyZXR1cm4gbi5zdGFydD1NYXRoLm1heChuLnN0YXJ0LDApLG59O2JQPW5ldyBRcztnbi5saW5lU2VnbWVudFNwaGVyZT1mdW5jdGlvbih0LGUsbixvKXtpZighaCh0KSl0aHJvdyBuZXcgRCgicDAgaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEQoInAxIGlzIHJlcXVpcmVkLiIpO2lmKCFoKG4pKXRocm93IG5ldyBEKCJzcGhlcmUgaXMgcmVxdWlyZWQuIik7bGV0IHI9YlA7YS5jbG9uZSh0LHIub3JpZ2luKTtsZXQgaT1hLnN1YnRyYWN0KGUsdCxyLmRpcmVjdGlvbikscz1hLm1hZ25pdHVkZShpKTtpZihhLm5vcm1hbGl6ZShpLGkpLG89TGIocixuLG8pLCEoIWgobyl8fG8uc3RvcDwwfHxvLnN0YXJ0PnMpKXJldHVybiBvLnN0YXJ0PU1hdGgubWF4KG8uc3RhcnQsMCksby5zdG9wPU1hdGgubWluKG8uc3RvcCxzKSxvfTtUUD1uZXcgYSx3UD1uZXcgYTtnbi5yYXlFbGxpcHNvaWQ9ZnVuY3Rpb24odCxlKXtpZighaCh0KSl0aHJvdyBuZXcgRCgicmF5IGlzIHJlcXVpcmVkLiIpO2lmKCFoKGUpKXRocm93IG5ldyBEKCJlbGxpcHNvaWQgaXMgcmVxdWlyZWQuIik7bGV0IG49ZS5vbmVPdmVyUmFkaWksbz1hLm11bHRpcGx5Q29tcG9uZW50cyhuLHQub3JpZ2luLFRQKSxyPWEubXVsdGlwbHlDb21wb25lbnRzKG4sdC5kaXJlY3Rpb24sd1ApLGk9YS5tYWduaXR1ZGVTcXVhcmVkKG8pLHM9YS5kb3QobyxyKSxmLHUsYyxsLHA7aWYoaT4xKXtpZihzPj0wKXJldHVybjtsZXQgZD1zKnM7aWYoZj1pLTEsdT1hLm1hZ25pdHVkZVNxdWFyZWQociksYz11KmYsZDxjKXJldHVybjtpZihkPmMpe2w9cypzLWMscD0tcytNYXRoLnNxcnQobCk7bGV0IF89cC91LGc9Zi9wO3JldHVybiBfPGc/bmV3IFFyKF8sZyk6e3N0YXJ0Omcsc3RvcDpffX1sZXQgbT1NYXRoLnNxcnQoZi91KTtyZXR1cm4gbmV3IFFyKG0sbSl9ZWxzZSBpZihpPDEpcmV0dXJuIGY9aS0xLHU9YS5tYWduaXR1ZGVTcXVhcmVkKHIpLGM9dSpmLGw9cypzLWMscD0tcytNYXRoLnNxcnQobCksbmV3IFFyKDAscC91KTtpZihzPDApcmV0dXJuIHU9YS5tYWduaXR1ZGVTcXVhcmVkKHIpLG5ldyBRcigwLC1zL3UpfTtnbi5xdWFkcmF0aWNWZWN0b3JFeHByZXNzaW9uPWZ1bmN0aW9uKHQsZSxuLG8scil7bGV0IGk9bypvLHM9cipyLGY9KHRbWi5DT0xVTU4xUk9XMV0tdFtaLkNPTFVNTjJST1cyXSkqcyx1PXIqKG8qSnModFtaLkNPTFVNTjFST1cwXSx0W1ouQ09MVU1OMFJPVzFdLFAuRVBTSUxPTjE1KStlLnkpLGM9dFtaLkNPTFVNTjBST1cwXSppK3RbWi5DT0xVTU4yUk9XMl0qcytvKmUueCtuLGw9cypKcyh0W1ouQ09MVU1OMlJPVzFdLHRbWi5DT0xVTU4xUk9XMl0sUC5FUFNJTE9OMTUpLHA9cioobypKcyh0W1ouQ09MVU1OMlJPVzBdLHRbWi5DT0xVTU4wUk9XMl0pK2UueiksZCxtPVtdO2lmKHA9PT0wJiZsPT09MCl7aWYoZD1nci5jb21wdXRlUmVhbFJvb3RzKGYsdSxjKSxkLmxlbmd0aD09PTApcmV0dXJuIG07bGV0IEY9ZFswXSxJPU1hdGguc3FydChNYXRoLm1heCgxLUYqRiwwKSk7aWYobS5wdXNoKG5ldyBhKG8scipGLHIqLUkpKSxtLnB1c2gobmV3IGEobyxyKkYscipJKSksZC5sZW5ndGg9PT0yKXtsZXQgdj1kWzFdLEI9TWF0aC5zcXJ0KE1hdGgubWF4KDEtdip2LDApKTttLnB1c2gobmV3IGEobyxyKnYsciotQikpLG0ucHVzaChuZXcgYShvLHIqdixyKkIpKX1yZXR1cm4gbX1sZXQgXz1wKnAsZz1sKmwsYj1mKmYsVD1wKmwsTz1iK2csRT0yKih1KmYrVCksdz0yKmMqZit1KnUtZytfLEM9MiooYyp1LVQpLE09YypjLV87aWYoTz09PTAmJkU9PT0wJiZ3PT09MCYmQz09PTApcmV0dXJuIG07ZD1SYi5jb21wdXRlUmVhbFJvb3RzKE8sRSx3LEMsTSk7bGV0IE49ZC5sZW5ndGg7aWYoTj09PTApcmV0dXJuIG07Zm9yKGxldCBGPTA7RjxOOysrRil7bGV0IEk9ZFtGXSx2PUkqSSxCPU1hdGgubWF4KDEtdiwwKSxBPU1hdGguc3FydChCKSxTO1Auc2lnbihmKT09PVAuc2lnbihjKT9TPUpzKGYqditjLHUqSSxQLkVQU0lMT04xMik6UC5zaWduKGMpPT09UC5zaWduKHUqSSk/Uz1KcyhmKnYsdSpJK2MsUC5FUFNJTE9OMTIpOlM9SnMoZip2K3UqSSxjLFAuRVBTSUxPTjEyKTtsZXQgeD1KcyhsKkkscCxQLkVQU0lMT04xNSksTD1TKng7TDwwP20ucHVzaChuZXcgYShvLHIqSSxyKkEpKTpMPjA/bS5wdXNoKG5ldyBhKG8scipJLHIqLUEpKTpBIT09MD8obS5wdXNoKG5ldyBhKG8scipJLHIqLUEpKSxtLnB1c2gobmV3IGEobyxyKkkscipBKSksKytGKTptLnB1c2gobmV3IGEobyxyKkkscipBKSl9cmV0dXJuIG19O3poPW5ldyBhLFBiPW5ldyBhLE1iPW5ldyBhLGtwPW5ldyBhLE9QPW5ldyBhLEVQPW5ldyBaLFJQPW5ldyBaLFNQPW5ldyBaLENQPW5ldyBaLHhQPW5ldyBaLE5iPW5ldyBaLEliPW5ldyBaLHZiPW5ldyBhLFBQPW5ldyBhLE1QPW5ldyBjdDtnbi5ncmF6aW5nQWx0aXR1ZGVMb2NhdGlvbj1mdW5jdGlvbih0LGUpe2lmKCFoKHQpKXRocm93IG5ldyBEKCJyYXkgaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEQoImVsbGlwc29pZCBpcyByZXF1aXJlZC4iKTtsZXQgbj10Lm9yaWdpbixvPXQuZGlyZWN0aW9uO2lmKCFhLmVxdWFscyhuLGEuWkVSTykpe2xldCBNPWUuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKG4semgpO2lmKGEuZG90KG8sTSk+PTApcmV0dXJuIG59bGV0IHI9aCh0aGlzLnJheUVsbGlwc29pZCh0LGUpKSxpPWUudHJhbnNmb3JtUG9zaXRpb25Ub1NjYWxlZFNwYWNlKG8semgpLHM9YS5ub3JtYWxpemUoaSxpKSxmPWEubW9zdE9ydGhvZ29uYWxBeGlzKGksa3ApLHU9YS5ub3JtYWxpemUoYS5jcm9zcyhmLHMsUGIpLFBiKSxjPWEubm9ybWFsaXplKGEuY3Jvc3Mocyx1LE1iKSxNYiksbD1FUDtsWzBdPXMueCxsWzFdPXMueSxsWzJdPXMueixsWzNdPXUueCxsWzRdPXUueSxsWzVdPXUueixsWzZdPWMueCxsWzddPWMueSxsWzhdPWMuejtsZXQgcD1aLnRyYW5zcG9zZShsLFJQKSxkPVouZnJvbVNjYWxlKGUucmFkaWksU1ApLG09Wi5mcm9tU2NhbGUoZS5vbmVPdmVyUmFkaWksQ1ApLF89eFA7X1swXT0wLF9bMV09LW8ueixfWzJdPW8ueSxfWzNdPW8ueixfWzRdPTAsX1s1XT0tby54LF9bNl09LW8ueSxfWzddPW8ueCxfWzhdPTA7bGV0IGc9Wi5tdWx0aXBseShaLm11bHRpcGx5KHAsbSxOYiksXyxOYiksYj1aLm11bHRpcGx5KFoubXVsdGlwbHkoZyxkLEliKSxsLEliKSxUPVoubXVsdGlwbHlCeVZlY3RvcihnLG4sT1ApLE89Z24ucXVhZHJhdGljVmVjdG9yRXhwcmVzc2lvbihiLGEubmVnYXRlKFQsemgpLDAsMCwxKSxFLHcsQz1PLmxlbmd0aDtpZihDPjApe2xldCBNPWEuY2xvbmUoYS5aRVJPLFBQKSxOPU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtmb3IobGV0IEk9MDtJPEM7KytJKXtFPVoubXVsdGlwbHlCeVZlY3RvcihkLFoubXVsdGlwbHlCeVZlY3RvcihsLE9bSV0sdmIpLHZiKTtsZXQgdj1hLm5vcm1hbGl6ZShhLnN1YnRyYWN0KEUsbixrcCksa3ApLEI9YS5kb3QodixvKTtCPk4mJihOPUIsTT1hLmNsb25lKEUsTSkpfWxldCBGPWUuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoTSxNUCk7cmV0dXJuIE49UC5jbGFtcChOLDAsMSksdz1hLm1hZ25pdHVkZShhLnN1YnRyYWN0KE0sbixrcCkpKk1hdGguc3FydCgxLU4qTiksdz1yPy13OncsRi5oZWlnaHQ9dyxlLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKEYsbmV3IGEpfX07TlA9bmV3IGE7Z24ubGluZVNlZ21lbnRQbGFuZT1mdW5jdGlvbih0LGUsbixvKXtpZighaCh0KSl0aHJvdyBuZXcgRCgiZW5kUG9pbnQwIGlzIHJlcXVpcmVkLiIpO2lmKCFoKGUpKXRocm93IG5ldyBEKCJlbmRQb2ludDEgaXMgcmVxdWlyZWQuIik7aWYoIWgobikpdGhyb3cgbmV3IEQoInBsYW5lIGlzIHJlcXVpcmVkLiIpO2gobyl8fChvPW5ldyBhKTtsZXQgcj1hLnN1YnRyYWN0KGUsdCxOUCksaT1uLm5vcm1hbCxzPWEuZG90KGkscik7aWYoTWF0aC5hYnMocyk8UC5FUFNJTE9ONilyZXR1cm47bGV0IGY9YS5kb3QoaSx0KSx1PS0obi5kaXN0YW5jZStmKS9zO2lmKCEodTwwfHx1PjEpKXJldHVybiBhLm11bHRpcGx5QnlTY2FsYXIocix1LG8pLGEuYWRkKHQsbyxvKSxvfTtnbi50cmlhbmdsZVBsYW5lSW50ZXJzZWN0aW9uPWZ1bmN0aW9uKHQsZSxuLG8pe2lmKCFoKHQpfHwhaChlKXx8IWgobil8fCFoKG8pKXRocm93IG5ldyBEKCJwMCwgcDEsIHAyLCBhbmQgcGxhbmUgYXJlIHJlcXVpcmVkLiIpO2xldCByPW8ubm9ybWFsLGk9by5kaXN0YW5jZSxzPWEuZG90KHIsdCkraTwwLGY9YS5kb3QocixlKStpPDAsdT1hLmRvdChyLG4pK2k8MCxjPTA7Yys9cz8xOjAsYys9Zj8xOjAsYys9dT8xOjA7bGV0IGwscDtpZigoYz09PTF8fGM9PT0yKSYmKGw9bmV3IGEscD1uZXcgYSksYz09PTEpe2lmKHMpcmV0dXJuIGduLmxpbmVTZWdtZW50UGxhbmUodCxlLG8sbCksZ24ubGluZVNlZ21lbnRQbGFuZSh0LG4sbyxwKSx7cG9zaXRpb25zOlt0LGUsbixsLHBdLGluZGljZXM6WzAsMyw0LDEsMiw0LDEsNCwzXX07aWYoZilyZXR1cm4gZ24ubGluZVNlZ21lbnRQbGFuZShlLG4sbyxsKSxnbi5saW5lU2VnbWVudFBsYW5lKGUsdCxvLHApLHtwb3NpdGlvbnM6W3QsZSxuLGwscF0saW5kaWNlczpbMSwzLDQsMiwwLDQsMiw0LDNdfTtpZih1KXJldHVybiBnbi5saW5lU2VnbWVudFBsYW5lKG4sdCxvLGwpLGduLmxpbmVTZWdtZW50UGxhbmUobixlLG8scCkse3Bvc2l0aW9uczpbdCxlLG4sbCxwXSxpbmRpY2VzOlsyLDMsNCwwLDEsNCwwLDQsM119fWVsc2UgaWYoYz09PTIpaWYocylpZihmKXtpZighdSlyZXR1cm4gZ24ubGluZVNlZ21lbnRQbGFuZSh0LG4sbyxsKSxnbi5saW5lU2VnbWVudFBsYW5lKGUsbixvLHApLHtwb3NpdGlvbnM6W3QsZSxuLGwscF0saW5kaWNlczpbMCwxLDQsMCw0LDMsMiwzLDRdfX1lbHNlIHJldHVybiBnbi5saW5lU2VnbWVudFBsYW5lKG4sZSxvLGwpLGduLmxpbmVTZWdtZW50UGxhbmUodCxlLG8scCkse3Bvc2l0aW9uczpbdCxlLG4sbCxwXSxpbmRpY2VzOlsyLDAsNCwyLDQsMywxLDMsNF19O2Vsc2UgcmV0dXJuIGduLmxpbmVTZWdtZW50UGxhbmUoZSx0LG8sbCksZ24ubGluZVNlZ21lbnRQbGFuZShuLHQsbyxwKSx7cG9zaXRpb25zOlt0LGUsbixsLHBdLGluZGljZXM6WzEsMiw0LDEsNCwzLDAsMyw0XX19O2hvPWdufSk7ZnVuY3Rpb24gZW8odCxlKXtpZih5LnR5cGVPZi5vYmplY3QoIm5vcm1hbCIsdCksIVAuZXF1YWxzRXBzaWxvbihhLm1hZ25pdHVkZSh0KSwxLFAuRVBTSUxPTjYpKXRocm93IG5ldyBEKCJub3JtYWwgbXVzdCBiZSBub3JtYWxpemVkLiIpO3kudHlwZU9mLm51bWJlcigiZGlzdGFuY2UiLGUpLHRoaXMubm9ybWFsPWEuY2xvbmUodCksdGhpcy5kaXN0YW5jZT1lfXZhciBJUCx2UCxGUCxMUCxEUCxvbixmcz0kKCgpPT57THQoKTtocigpO1d0KCk7ZnQoKTtqdCgpO0t0KCk7VW4oKTtlby5mcm9tUG9pbnROb3JtYWw9ZnVuY3Rpb24odCxlLG4pe2lmKHkudHlwZU9mLm9iamVjdCgicG9pbnQiLHQpLHkudHlwZU9mLm9iamVjdCgibm9ybWFsIixlKSwhUC5lcXVhbHNFcHNpbG9uKGEubWFnbml0dWRlKGUpLDEsUC5FUFNJTE9ONikpdGhyb3cgbmV3IEQoIm5vcm1hbCBtdXN0IGJlIG5vcm1hbGl6ZWQuIik7bGV0IG89LWEuZG90KGUsdCk7cmV0dXJuIGgobik/KGEuY2xvbmUoZSxuLm5vcm1hbCksbi5kaXN0YW5jZT1vLG4pOm5ldyBlbyhlLG8pfTtJUD1uZXcgYTtlby5mcm9tQ2FydGVzaWFuND1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgiY29lZmZpY2llbnRzIix0KTtsZXQgbj1hLmZyb21DYXJ0ZXNpYW40KHQsSVApLG89dC53O2lmKCFQLmVxdWFsc0Vwc2lsb24oYS5tYWduaXR1ZGUobiksMSxQLkVQU0lMT042KSl0aHJvdyBuZXcgRCgibm9ybWFsIG11c3QgYmUgbm9ybWFsaXplZC4iKTtyZXR1cm4gaChlKT8oYS5jbG9uZShuLGUubm9ybWFsKSxlLmRpc3RhbmNlPW8sZSk6bmV3IGVvKG4sbyl9O2VvLmdldFBvaW50RGlzdGFuY2U9ZnVuY3Rpb24odCxlKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJwbGFuZSIsdCkseS50eXBlT2Yub2JqZWN0KCJwb2ludCIsZSksYS5kb3QodC5ub3JtYWwsZSkrdC5kaXN0YW5jZX07dlA9bmV3IGE7ZW8ucHJvamVjdFBvaW50T250b1BsYW5lPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoInBsYW5lIix0KSx5LnR5cGVPZi5vYmplY3QoInBvaW50IixlKSxoKG4pfHwobj1uZXcgYSk7bGV0IG89ZW8uZ2V0UG9pbnREaXN0YW5jZSh0LGUpLHI9YS5tdWx0aXBseUJ5U2NhbGFyKHQubm9ybWFsLG8sdlApO3JldHVybiBhLnN1YnRyYWN0KGUscixuKX07RlA9bmV3IHN0LExQPW5ldyBtZSxEUD1uZXcgYTtlby50cmFuc2Zvcm09ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgicGxhbmUiLHQpLHkudHlwZU9mLm9iamVjdCgidHJhbnNmb3JtIixlKTtsZXQgbz10Lm5vcm1hbCxyPXQuZGlzdGFuY2UsaT1zdC5pbnZlcnNlVHJhbnNwb3NlKGUsRlApLHM9bWUuZnJvbUVsZW1lbnRzKG8ueCxvLnksby56LHIsTFApO3M9c3QubXVsdGlwbHlCeVZlY3RvcihpLHMscyk7bGV0IGY9YS5mcm9tQ2FydGVzaWFuNChzLERQKTtyZXR1cm4gcz1tZS5kaXZpZGVCeVNjYWxhcihzLGEubWFnbml0dWRlKGYpLHMpLGVvLmZyb21DYXJ0ZXNpYW40KHMsbil9O2VvLmNsb25lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgicGxhbmUiLHQpLGgoZSk/KGEuY2xvbmUodC5ub3JtYWwsZS5ub3JtYWwpLGUuZGlzdGFuY2U9dC5kaXN0YW5jZSxlKTpuZXcgZW8odC5ub3JtYWwsdC5kaXN0YW5jZSl9O2VvLmVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHQuZGlzdGFuY2U9PT1lLmRpc3RhbmNlJiZhLmVxdWFscyh0Lm5vcm1hbCxlLm5vcm1hbCl9O2VvLk9SSUdJTl9YWV9QTEFORT1PYmplY3QuZnJlZXplKG5ldyBlbyhhLlVOSVRfWiwwKSk7ZW8uT1JJR0lOX1laX1BMQU5FPU9iamVjdC5mcmVlemUobmV3IGVvKGEuVU5JVF9YLDApKTtlby5PUklHSU5fWlhfUExBTkU9T2JqZWN0LmZyZWV6ZShuZXcgZW8oYS5VTklUX1ksMCkpO29uPWVvfSk7dmFyIGpoLERiLEJiPSQoKCk9Pnt5ZSgpO2Z0KCk7anQoKTtqaD17fTtqaC5jYWxjdWxhdGVBQ01SPWZ1bmN0aW9uKHQpe3Q9dD8/SXQuRU1QVFlfT0JKRUNUO2xldCBlPXQuaW5kaWNlcyxuPXQubWF4aW11bUluZGV4LG89dC5jYWNoZVNpemU/PzI0O2lmKCFoKGUpKXRocm93IG5ldyBEKCJpbmRpY2VzIGlzIHJlcXVpcmVkLiIpO2xldCByPWUubGVuZ3RoO2lmKHI8M3x8ciUzIT09MCl0aHJvdyBuZXcgRCgiaW5kaWNlcyBsZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIHRocmVlLiIpO2lmKG48PTApdGhyb3cgbmV3IEQoIm1heGltdW1JbmRleCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLiIpO2lmKG88Myl0aHJvdyBuZXcgRCgiY2FjaGVTaXplIG11c3QgYmUgZ3JlYXRlciB0aGFuIHR3by4iKTtpZighaChuKSl7bj0wO2xldCBmPTAsdT1lW2ZdO2Zvcig7ZjxyOyl1Pm4mJihuPXUpLCsrZix1PWVbZl19bGV0IGk9W107Zm9yKGxldCBmPTA7ZjxuKzE7ZisrKWlbZl09MDtsZXQgcz1vKzE7Zm9yKGxldCBmPTA7ZjxyOysrZilzLWlbZVtmXV0+byYmKGlbZVtmXV09cywrK3MpO3JldHVybihzLW8rMSkvKHIvMyl9O2poLnRpcHNpZnk9ZnVuY3Rpb24odCl7dD10Pz9JdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC5pbmRpY2VzLG49dC5tYXhpbXVtSW5kZXgsbz10LmNhY2hlU2l6ZT8/MjQscjtmdW5jdGlvbiBpKEIsQSxTLHgpe2Zvcig7QS5sZW5ndGg+PTE7KXtsZXQgTD1BW0EubGVuZ3RoLTFdO2lmKEEuc3BsaWNlKEEubGVuZ3RoLTEsMSksQltMXS5udW1MaXZlVHJpYW5nbGVzPjApcmV0dXJuIEx9Zm9yKDtyPHg7KXtpZihCW3JdLm51bUxpdmVUcmlhbmdsZXM+MClyZXR1cm4rK3Isci0xOysrcn1yZXR1cm4tMX1mdW5jdGlvbiBzKEIsQSxTLHgsTCx6LGope2xldCBrPS0xLHEsVz0tMSxSPTA7Zm9yKDtSPFMubGVuZ3RoOyl7bGV0IG50PVNbUl07eFtudF0ubnVtTGl2ZVRyaWFuZ2xlcyYmKHE9MCxMLXhbbnRdLnRpbWVTdGFtcCsyKnhbbnRdLm51bUxpdmVUcmlhbmdsZXM8PUEmJihxPUwteFtudF0udGltZVN0YW1wKSwocT5XfHxXPT09LTEpJiYoVz1xLGs9bnQpKSwrK1J9cmV0dXJuIGs9PT0tMT9pKHgseixCLGopOmt9aWYoIWgoZSkpdGhyb3cgbmV3IEQoImluZGljZXMgaXMgcmVxdWlyZWQuIik7bGV0IGY9ZS5sZW5ndGg7aWYoZjwzfHxmJTMhPT0wKXRocm93IG5ldyBEKCJpbmRpY2VzIGxlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhyZWUuIik7aWYobjw9MCl0aHJvdyBuZXcgRCgibWF4aW11bUluZGV4IG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uIik7aWYobzwzKXRocm93IG5ldyBEKCJjYWNoZVNpemUgbXVzdCBiZSBncmVhdGVyIHRoYW4gdHdvLiIpO2xldCB1PTAsYz0wLGw9ZVtjXSxwPWY7aWYoaChuKSl1PW4rMTtlbHNle2Zvcig7YzxwOylsPnUmJih1PWwpLCsrYyxsPWVbY107aWYodT09PS0xKXJldHVybiAwOysrdX1sZXQgZD1bXSxtO2ZvcihtPTA7bTx1O20rKylkW21dPXtudW1MaXZlVHJpYW5nbGVzOjAsdGltZVN0YW1wOjAsdmVydGV4VHJpYW5nbGVzOltdfTtjPTA7bGV0IF89MDtmb3IoO2M8cDspZFtlW2NdXS52ZXJ0ZXhUcmlhbmdsZXMucHVzaChfKSwrK2RbZVtjXV0ubnVtTGl2ZVRyaWFuZ2xlcyxkW2VbYysxXV0udmVydGV4VHJpYW5nbGVzLnB1c2goXyksKytkW2VbYysxXV0ubnVtTGl2ZVRyaWFuZ2xlcyxkW2VbYysyXV0udmVydGV4VHJpYW5nbGVzLnB1c2goXyksKytkW2VbYysyXV0ubnVtTGl2ZVRyaWFuZ2xlcywrK18sYys9MztsZXQgZz0wLGI9bysxO3I9MTtsZXQgVD1bXSxPPVtdLEUsdyxDPTAsTT1bXSxOPWYvMyxGPVtdO2ZvcihtPTA7bTxOO20rKylGW21dPSExO2xldCBJLHY7Zm9yKDtnIT09LTE7KXtUPVtdLHc9ZFtnXSx2PXcudmVydGV4VHJpYW5nbGVzLmxlbmd0aDtmb3IobGV0IEI9MDtCPHY7KytCKWlmKF89dy52ZXJ0ZXhUcmlhbmdsZXNbQl0sIUZbX10pe0ZbX109ITAsYz1fK18rXztmb3IobGV0IEE9MDtBPDM7KytBKUk9ZVtjXSxULnB1c2goSSksTy5wdXNoKEkpLE1bQ109SSwrK0MsRT1kW0ldLC0tRS5udW1MaXZlVHJpYW5nbGVzLGItRS50aW1lU3RhbXA+byYmKEUudGltZVN0YW1wPWIsKytiKSwrK2N9Zz1zKGUsbyxULGQsYixPLHUpfXJldHVybiBNfTtEYj1qaH0pO2Z1bmN0aW9uIEtwKHQsZSxuLG8scil7dFtlKytdPW4sdFtlKytdPW8sdFtlKytdPW8sdFtlKytdPXIsdFtlKytdPXIsdFtlXT1ufWZ1bmN0aW9uIEJQKHQpe2xldCBlPXQubGVuZ3RoLG49ZS8zKjYsbz1GdC5jcmVhdGVUeXBlZEFycmF5KGUsbikscj0wO2ZvcihsZXQgaT0wO2k8ZTtpKz0zLHIrPTYpS3AobyxyLHRbaV0sdFtpKzFdLHRbaSsyXSk7cmV0dXJuIG99ZnVuY3Rpb24gVVAodCl7bGV0IGU9dC5sZW5ndGg7aWYoZT49Myl7bGV0IG49KGUtMikqNixvPUZ0LmNyZWF0ZVR5cGVkQXJyYXkoZSxuKTtLcChvLDAsdFswXSx0WzFdLHRbMl0pO2xldCByPTY7Zm9yKGxldCBpPTM7aTxlOysraSxyKz02KUtwKG8scix0W2ktMV0sdFtpXSx0W2ktMl0pO3JldHVybiBvfXJldHVybiBuZXcgVWludDE2QXJyYXl9ZnVuY3Rpb24ga1AodCl7aWYodC5sZW5ndGg+MCl7bGV0IGU9dC5sZW5ndGgtMSxuPShlLTEpKjYsbz1GdC5jcmVhdGVUeXBlZEFycmF5KGUsbikscj10WzBdLGk9MDtmb3IobGV0IHM9MTtzPGU7KytzLGkrPTYpS3AobyxpLHIsdFtzXSx0W3MrMV0pO3JldHVybiBvfXJldHVybiBuZXcgVWludDE2QXJyYXl9ZnVuY3Rpb24gVWIodCl7bGV0IGU9e307Zm9yKGxldCBuIGluIHQpaWYodC5oYXNPd25Qcm9wZXJ0eShuKSYmaCh0W25dKSYmaCh0W25dLnZhbHVlcykpe2xldCBvPXRbbl07ZVtuXT1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOm8uY29tcG9uZW50RGF0YXR5cGUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTpvLmNvbXBvbmVudHNQZXJBdHRyaWJ1dGUsbm9ybWFsaXplOm8ubm9ybWFsaXplLHZhbHVlczpbXX0pfXJldHVybiBlfWZ1bmN0aW9uIEdQKHQsZSxuKXtmb3IobGV0IG8gaW4gZSlpZihlLmhhc093blByb3BlcnR5KG8pJiZoKGVbb10pJiZoKGVbb10udmFsdWVzKSl7bGV0IHI9ZVtvXTtmb3IobGV0IGk9MDtpPHIuY29tcG9uZW50c1BlckF0dHJpYnV0ZTsrK2kpdFtvXS52YWx1ZXMucHVzaChyLnZhbHVlc1tuKnIuY29tcG9uZW50c1BlckF0dHJpYnV0ZStpXSl9fWZ1bmN0aW9uIHFoKHQsZSl7aWYoaChlKSl7bGV0IG49ZS52YWx1ZXMsbz1uLmxlbmd0aDtmb3IobGV0IHI9MDtyPG87cis9MylhLnVucGFjayhuLHIsa3IpLHN0Lm11bHRpcGx5QnlQb2ludCh0LGtyLGtyKSxhLnBhY2soa3IsbixyKX19ZnVuY3Rpb24gS2godCxlKXtpZihoKGUpKXtsZXQgbj1lLnZhbHVlcyxvPW4ubGVuZ3RoO2ZvcihsZXQgcj0wO3I8bztyKz0zKWEudW5wYWNrKG4scixrciksWi5tdWx0aXBseUJ5VmVjdG9yKHQsa3Isa3IpLGtyPWEubm9ybWFsaXplKGtyLGtyKSxhLnBhY2soa3IsbixyKX19ZnVuY3Rpb24gelAodCxlKXtsZXQgbj10Lmxlbmd0aCxvPXt9LHI9dFswXVtlXS5hdHRyaWJ1dGVzLGk7Zm9yKGkgaW4gcilpZihyLmhhc093blByb3BlcnR5KGkpJiZoKHJbaV0pJiZoKHJbaV0udmFsdWVzKSl7bGV0IHM9cltpXSxmPXMudmFsdWVzLmxlbmd0aCx1PSEwO2ZvcihsZXQgYz0xO2M8bjsrK2Mpe2xldCBsPXRbY11bZV0uYXR0cmlidXRlc1tpXTtpZighaChsKXx8cy5jb21wb25lbnREYXRhdHlwZSE9PWwuY29tcG9uZW50RGF0YXR5cGV8fHMuY29tcG9uZW50c1BlckF0dHJpYnV0ZSE9PWwuY29tcG9uZW50c1BlckF0dHJpYnV0ZXx8cy5ub3JtYWxpemUhPT1sLm5vcm1hbGl6ZSl7dT0hMTticmVha31mKz1sLnZhbHVlcy5sZW5ndGh9dSYmKG9baV09bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpzLmNvbXBvbmVudERhdGF0eXBlLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6cy5jb21wb25lbnRzUGVyQXR0cmlidXRlLG5vcm1hbGl6ZTpzLm5vcm1hbGl6ZSx2YWx1ZXM6ZXQuY3JlYXRlVHlwZWRBcnJheShzLmNvbXBvbmVudERhdGF0eXBlLGYpfSkpfXJldHVybiBvfWZ1bmN0aW9uIFdoKHQsZSl7bGV0IG49dC5sZW5ndGgsbyxyLGkscyxmPXRbMF0ubW9kZWxNYXRyaXgsdT1oKHRbMF1bZV0uaW5kaWNlcyksYz10WzBdW2VdLnByaW1pdGl2ZVR5cGU7Zm9yKHI9MTtyPG47KytyKXtpZighc3QuZXF1YWxzKHRbcl0ubW9kZWxNYXRyaXgsZikpdGhyb3cgbmV3IEQoIkFsbCBpbnN0YW5jZXMgbXVzdCBoYXZlIHRoZSBzYW1lIG1vZGVsTWF0cml4LiIpO2lmKGgodFtyXVtlXS5pbmRpY2VzKSE9PXUpdGhyb3cgbmV3IEQoIkFsbCBpbnN0YW5jZSBnZW9tZXRyaWVzIG11c3QgaGF2ZSBhbiBpbmRpY2VzIG9yIG5vdCBoYXZlIG9uZS4iKTtpZih0W3JdW2VdLnByaW1pdGl2ZVR5cGUhPT1jKXRocm93IG5ldyBEKCJBbGwgaW5zdGFuY2UgZ2VvbWV0cmllcyBtdXN0IGhhdmUgdGhlIHNhbWUgcHJpbWl0aXZlVHlwZS4iKX1sZXQgbD16UCh0LGUpLHAsZCxtO2ZvcihvIGluIGwpaWYobC5oYXNPd25Qcm9wZXJ0eShvKSlmb3IocD1sW29dLnZhbHVlcyxzPTAscj0wO3I8bjsrK3IpZm9yKGQ9dFtyXVtlXS5hdHRyaWJ1dGVzW29dLnZhbHVlcyxtPWQubGVuZ3RoLGk9MDtpPG07KytpKXBbcysrXT1kW2ldO2xldCBfO2lmKHUpe2xldCBPPTA7Zm9yKHI9MDtyPG47KytyKU8rPXRbcl1bZV0uaW5kaWNlcy5sZW5ndGg7bGV0IEU9QnQuY29tcHV0ZU51bWJlck9mVmVydGljZXMobmV3IEJ0KHthdHRyaWJ1dGVzOmwscHJpbWl0aXZlVHlwZTpEdC5QT0lOVFN9KSksdz1GdC5jcmVhdGVUeXBlZEFycmF5KEUsTyksQz0wLE09MDtmb3Iocj0wO3I8bjsrK3Ipe2xldCBOPXRbcl1bZV0uaW5kaWNlcyxGPU4ubGVuZ3RoO2ZvcihzPTA7czxGOysrcyl3W0MrK109TStOW3NdO00rPUJ0LmNvbXB1dGVOdW1iZXJPZlZlcnRpY2VzKHRbcl1bZV0pfV89d31sZXQgZz1uZXcgYSxiPTAsVDtmb3Iocj0wO3I8bjsrK3Ipe2lmKFQ9dFtyXVtlXS5ib3VuZGluZ1NwaGVyZSwhaChUKSl7Zz12b2lkIDA7YnJlYWt9YS5hZGQoVC5jZW50ZXIsZyxnKX1pZihoKGcpKWZvcihhLmRpdmlkZUJ5U2NhbGFyKGcsbixnKSxyPTA7cjxuOysrcil7VD10W3JdW2VdLmJvdW5kaW5nU3BoZXJlO2xldCBPPWEubWFnbml0dWRlKGEuc3VidHJhY3QoVC5jZW50ZXIsZyxqUCkpK1QucmFkaXVzO08+YiYmKGI9Tyl9cmV0dXJuIG5ldyBCdCh7YXR0cmlidXRlczpsLGluZGljZXM6XyxwcmltaXRpdmVUeXBlOmMsYm91bmRpbmdTcGhlcmU6aChnKT9uZXcgZ3QoZyxiKTp2b2lkIDB9KX1mdW5jdGlvbiBLUCh0KXtpZihoKHQuaW5kaWNlcykpcmV0dXJuIHQ7bGV0IGU9QnQuY29tcHV0ZU51bWJlck9mVmVydGljZXModCk7aWYoZTwzKXRocm93IG5ldyBEKCJUaGUgbnVtYmVyIG9mIHZlcnRpY2VzIG11c3QgYmUgYXQgbGVhc3QgdGhyZWUuIik7aWYoZSUzIT09MCl0aHJvdyBuZXcgRCgiVGhlIG51bWJlciBvZiB2ZXJ0aWNlcyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhyZWUuIik7bGV0IG49RnQuY3JlYXRlVHlwZWRBcnJheShlLGUpO2ZvcihsZXQgbz0wO288ZTsrK28pbltvXT1vO3JldHVybiB0LmluZGljZXM9bix0fWZ1bmN0aW9uIFdQKHQpe2xldCBlPUJ0LmNvbXB1dGVOdW1iZXJPZlZlcnRpY2VzKHQpO2lmKGU8Myl0aHJvdyBuZXcgRCgiVGhlIG51bWJlciBvZiB2ZXJ0aWNlcyBtdXN0IGJlIGF0IGxlYXN0IHRocmVlLiIpO2xldCBuPUZ0LmNyZWF0ZVR5cGVkQXJyYXkoZSwoZS0yKSozKTtuWzBdPTEsblsxXT0wLG5bMl09MjtsZXQgbz0zO2ZvcihsZXQgcj0zO3I8ZTsrK3IpbltvKytdPXItMSxuW28rK109MCxuW28rK109cjtyZXR1cm4gdC5pbmRpY2VzPW4sdC5wcmltaXRpdmVUeXBlPUR0LlRSSUFOR0xFUyx0fWZ1bmN0aW9uIFhQKHQpe2xldCBlPUJ0LmNvbXB1dGVOdW1iZXJPZlZlcnRpY2VzKHQpO2lmKGU8Myl0aHJvdyBuZXcgRCgiVGhlIG51bWJlciBvZiB2ZXJ0aWNlcyBtdXN0IGJlIGF0IGxlYXN0IDMuIik7bGV0IG49RnQuY3JlYXRlVHlwZWRBcnJheShlLChlLTIpKjMpO25bMF09MCxuWzFdPTEsblsyXT0yLGU+MyYmKG5bM109MCxuWzRdPTIsbls1XT0zKTtsZXQgbz02O2ZvcihsZXQgcj0zO3I8ZS0xO3IrPTIpbltvKytdPXIsbltvKytdPXItMSxuW28rK109cisxLHIrMjxlJiYobltvKytdPXIsbltvKytdPXIrMSxuW28rK109cisyKTtyZXR1cm4gdC5pbmRpY2VzPW4sdC5wcmltaXRpdmVUeXBlPUR0LlRSSUFOR0xFUyx0fWZ1bmN0aW9uIFlQKHQpe2lmKGgodC5pbmRpY2VzKSlyZXR1cm4gdDtsZXQgZT1CdC5jb21wdXRlTnVtYmVyT2ZWZXJ0aWNlcyh0KTtpZihlPDIpdGhyb3cgbmV3IEQoIlRoZSBudW1iZXIgb2YgdmVydGljZXMgbXVzdCBiZSBhdCBsZWFzdCB0d28uIik7aWYoZSUyIT09MCl0aHJvdyBuZXcgRCgiVGhlIG51bWJlciBvZiB2ZXJ0aWNlcyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMi4iKTtsZXQgbj1GdC5jcmVhdGVUeXBlZEFycmF5KGUsZSk7Zm9yKGxldCBvPTA7bzxlOysrbyluW29dPW87cmV0dXJuIHQuaW5kaWNlcz1uLHR9ZnVuY3Rpb24gJFAodCl7bGV0IGU9QnQuY29tcHV0ZU51bWJlck9mVmVydGljZXModCk7aWYoZTwyKXRocm93IG5ldyBEKCJUaGUgbnVtYmVyIG9mIHZlcnRpY2VzIG11c3QgYmUgYXQgbGVhc3QgdHdvLiIpO2xldCBuPUZ0LmNyZWF0ZVR5cGVkQXJyYXkoZSwoZS0xKSoyKTtuWzBdPTAsblsxXT0xO2xldCBvPTI7Zm9yKGxldCByPTI7cjxlOysrciluW28rK109ci0xLG5bbysrXT1yO3JldHVybiB0LmluZGljZXM9bix0LnByaW1pdGl2ZVR5cGU9RHQuTElORVMsdH1mdW5jdGlvbiBaUCh0KXtsZXQgZT1CdC5jb21wdXRlTnVtYmVyT2ZWZXJ0aWNlcyh0KTtpZihlPDIpdGhyb3cgbmV3IEQoIlRoZSBudW1iZXIgb2YgdmVydGljZXMgbXVzdCBiZSBhdCBsZWFzdCB0d28uIik7bGV0IG49RnQuY3JlYXRlVHlwZWRBcnJheShlLGUqMik7blswXT0wLG5bMV09MTtsZXQgbz0yO2ZvcihsZXQgcj0yO3I8ZTsrK3IpbltvKytdPXItMSxuW28rK109cjtyZXR1cm4gbltvKytdPWUtMSxuW29dPTAsdC5pbmRpY2VzPW4sdC5wcmltaXRpdmVUeXBlPUR0LkxJTkVTLHR9ZnVuY3Rpb24gUVAodCl7c3dpdGNoKHQucHJpbWl0aXZlVHlwZSl7Y2FzZSBEdC5UUklBTkdMRV9GQU46cmV0dXJuIFdQKHQpO2Nhc2UgRHQuVFJJQU5HTEVfU1RSSVA6cmV0dXJuIFhQKHQpO2Nhc2UgRHQuVFJJQU5HTEVTOnJldHVybiBLUCh0KTtjYXNlIER0LkxJTkVfU1RSSVA6cmV0dXJuICRQKHQpO2Nhc2UgRHQuTElORV9MT09QOnJldHVybiBaUCh0KTtjYXNlIER0LkxJTkVTOnJldHVybiBZUCh0KX1yZXR1cm4gdH1mdW5jdGlvbiB1cyh0LGUpe01hdGguYWJzKHQueSk8UC5FUFNJTE9ONiYmKGU/dC55PS1QLkVQU0lMT042OnQueT1QLkVQU0lMT042KX1mdW5jdGlvbiBKUCh0LGUsbil7aWYodC55IT09MCYmZS55IT09MCYmbi55IT09MCl7dXModCx0Lnk8MCksdXMoZSxlLnk8MCksdXMobixuLnk8MCk7cmV0dXJufWxldCBvPU1hdGguYWJzKHQueSkscj1NYXRoLmFicyhlLnkpLGk9TWF0aC5hYnMobi55KSxzO28+cj9vPmk/cz1QLnNpZ24odC55KTpzPVAuc2lnbihuLnkpOnI+aT9zPVAuc2lnbihlLnkpOnM9UC5zaWduKG4ueSk7bGV0IGY9czwwO3VzKHQsZiksdXMoZSxmKSx1cyhuLGYpfWZ1bmN0aW9uIGJyKHQsZSxuLG8pe2EuYWRkKHQsYS5tdWx0aXBseUJ5U2NhbGFyKGEuc3VidHJhY3QoZSx0LGpiKSx0LnkvKHQueS1lLnkpLGpiKSxuKSxhLmNsb25lKG4sbyksdXMobiwhMCksdXMobywhMSl9ZnVuY3Rpb24gdE0odCxlLG4pe2lmKHQueD49MHx8ZS54Pj0wfHxuLng+PTApcmV0dXJuO0pQKHQsZSxuKTtsZXQgbz10Lnk8MCxyPWUueTwwLGk9bi55PDAscz0wO3MrPW8/MTowLHMrPXI/MTowLHMrPWk/MTowO2xldCBmPVhoLmluZGljZXM7cz09PTE/KGZbMV09MyxmWzJdPTQsZls1XT02LGZbN109NixmWzhdPTUsbz8oYnIodCxlLGVjLG9jKSxicih0LG4sbmMscmMpLGZbMF09MCxmWzNdPTEsZls0XT0yLGZbNl09MSk6cj8oYnIoZSxuLGVjLG9jKSxicihlLHQsbmMscmMpLGZbMF09MSxmWzNdPTIsZls0XT0wLGZbNl09Mik6aSYmKGJyKG4sdCxlYyxvYyksYnIobixlLG5jLHJjKSxmWzBdPTIsZlszXT0wLGZbNF09MSxmWzZdPTApKTpzPT09MiYmKGZbMl09NCxmWzRdPTQsZls1XT0zLGZbN109NSxmWzhdPTYsbz9yP2l8fChicihuLHQsZWMsb2MpLGJyKG4sZSxuYyxyYyksZlswXT0wLGZbMV09MSxmWzNdPTAsZls2XT0yKTooYnIoZSxuLGVjLG9jKSxicihlLHQsbmMscmMpLGZbMF09MixmWzFdPTAsZlszXT0yLGZbNl09MSk6KGJyKHQsZSxlYyxvYyksYnIodCxuLG5jLHJjKSxmWzBdPTEsZlsxXT0yLGZbM109MSxmWzZdPTApKTtsZXQgdT1YaC5wb3NpdGlvbnM7cmV0dXJuIHVbMF09dCx1WzFdPWUsdVsyXT1uLHUubGVuZ3RoPTMsKHM9PT0xfHxzPT09MikmJih1WzNdPWVjLHVbNF09bmMsdVs1XT1vYyx1WzZdPXJjLHUubGVuZ3RoPTcpLFhofWZ1bmN0aW9uIEhiKHQsZSl7bGV0IG49dC5hdHRyaWJ1dGVzO2lmKG4ucG9zaXRpb24udmFsdWVzLmxlbmd0aD09PTApcmV0dXJuO2ZvcihsZXQgciBpbiBuKWlmKG4uaGFzT3duUHJvcGVydHkocikmJmgobltyXSkmJmgobltyXS52YWx1ZXMpKXtsZXQgaT1uW3JdO2kudmFsdWVzPWV0LmNyZWF0ZVR5cGVkQXJyYXkoaS5jb21wb25lbnREYXRhdHlwZSxpLnZhbHVlcyl9bGV0IG89QnQuY29tcHV0ZU51bWJlck9mVmVydGljZXModCk7cmV0dXJuIHQuaW5kaWNlcz1GdC5jcmVhdGVUeXBlZEFycmF5KG8sdC5pbmRpY2VzKSxlJiYodC5ib3VuZGluZ1NwaGVyZT1ndC5mcm9tVmVydGljZXMobi5wb3NpdGlvbi52YWx1ZXMpKSx0fWZ1bmN0aW9uIGlhKHQpe2xldCBlPXQuYXR0cmlidXRlcyxuPXt9O2ZvcihsZXQgbyBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkobykmJmgoZVtvXSkmJmgoZVtvXS52YWx1ZXMpKXtsZXQgcj1lW29dO25bb109bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpyLmNvbXBvbmVudERhdGF0eXBlLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6ci5jb21wb25lbnRzUGVyQXR0cmlidXRlLG5vcm1hbGl6ZTpyLm5vcm1hbGl6ZSx2YWx1ZXM6W119KX1yZXR1cm4gbmV3IEJ0KHthdHRyaWJ1dGVzOm4saW5kaWNlczpbXSxwcmltaXRpdmVUeXBlOnQucHJpbWl0aXZlVHlwZX0pfWZ1bmN0aW9uIFFoKHQsZSxuKXtsZXQgbz1oKHQuZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUpO2U9SGIoZSxvKSxuPUhiKG4sbyksaChuKSYmIWgoZSk/dC5nZW9tZXRyeT1uOiFoKG4pJiZoKGUpP3QuZ2VvbWV0cnk9ZToodC53ZXN0SGVtaXNwaGVyZUdlb21ldHJ5PWUsdC5lYXN0SGVtaXNwaGVyZUdlb21ldHJ5PW4sdC5nZW9tZXRyeT12b2lkIDApfWZ1bmN0aW9uIEpoKHQsZSl7bGV0IG49bmV3IHQsbz1uZXcgdCxyPW5ldyB0O3JldHVybiBmdW5jdGlvbihpLHMsZix1LGMsbCxwLGQpe2xldCBtPXQuZnJvbUFycmF5KGMsaSplLG4pLF89dC5mcm9tQXJyYXkoYyxzKmUsbyksZz10LmZyb21BcnJheShjLGYqZSxyKTt0Lm11bHRpcGx5QnlTY2FsYXIobSx1LngsbSksdC5tdWx0aXBseUJ5U2NhbGFyKF8sdS55LF8pLHQubXVsdGlwbHlCeVNjYWxhcihnLHUueixnKTtsZXQgYj10LmFkZChtLF8sbSk7dC5hZGQoYixnLGIpLGQmJnQubm9ybWFsaXplKGIsYiksdC5wYWNrKGIsbCxwKmUpfX1mdW5jdGlvbiBqcCh0LGUsbixvLHIsaSxzLGYsdSxjLGwscCxkLG0sXyxnKXtpZighaChpKSYmIWgocykmJiFoKGYpJiYhaCh1KSYmIWgoYykmJm09PT0wKXJldHVybjtsZXQgYj1hLmZyb21BcnJheShyLHQqMyxFZiksVD1hLmZyb21BcnJheShyLGUqMyxZaCksTz1hLmZyb21BcnJheShyLG4qMywkaCksRT1UYihvLGIsVCxPLG9NKTtpZihoKEUpKXtpZihoKGkpJiZxcCh0LGUsbixFLGkscC5ub3JtYWwudmFsdWVzLGcsITApLGgoYykpe2xldCB3PWEuZnJvbUFycmF5KGMsdCozLEVmKSxDPWEuZnJvbUFycmF5KGMsZSozLFloKSxNPWEuZnJvbUFycmF5KGMsbiozLCRoKTthLm11bHRpcGx5QnlTY2FsYXIodyxFLngsdyksYS5tdWx0aXBseUJ5U2NhbGFyKEMsRS55LEMpLGEubXVsdGlwbHlCeVNjYWxhcihNLEUueixNKTtsZXQgTjshYS5lcXVhbHModyxhLlpFUk8pfHwhYS5lcXVhbHMoQyxhLlpFUk8pfHwhYS5lcXVhbHMoTSxhLlpFUk8pPyhOPWEuYWRkKHcsQyx3KSxhLmFkZChOLE0sTiksYS5ub3JtYWxpemUoTixOKSk6KE49RWYsTi54PTAsTi55PTAsTi56PTApLGEucGFjayhOLHAuZXh0cnVkZURpcmVjdGlvbi52YWx1ZXMsZyozKX1pZihoKGwpJiZuTSh0LGUsbixFLGwscC5hcHBseU9mZnNldC52YWx1ZXMsZyksaChzKSYmcXAodCxlLG4sRSxzLHAudGFuZ2VudC52YWx1ZXMsZywhMCksaChmKSYmcXAodCxlLG4sRSxmLHAuYml0YW5nZW50LnZhbHVlcyxnLCEwKSxoKHUpJiYkYih0LGUsbixFLHUscC5zdC52YWx1ZXMsZyksbT4wKWZvcihsZXQgdz0wO3c8bTt3Kyspe2xldCBDPWRbd107ck0odCxlLG4sRSxnLF9bQ10scFtDXSl9fX1mdW5jdGlvbiByTSh0LGUsbixvLHIsaSxzKXtsZXQgZj1pLmNvbXBvbmVudHNQZXJBdHRyaWJ1dGUsdT1pLnZhbHVlcyxjPXMudmFsdWVzO3N3aXRjaChmKXtjYXNlIDQ6ZU0odCxlLG4sbyx1LGMsciwhMSk7YnJlYWs7Y2FzZSAzOnFwKHQsZSxuLG8sdSxjLHIsITEpO2JyZWFrO2Nhc2UgMjokYih0LGUsbixvLHUsYyxyLCExKTticmVhaztkZWZhdWx0OmNbcl09dVt0XSpvLngrdVtlXSpvLnkrdVtuXSpvLnp9fWZ1bmN0aW9uIGlpKHQsZSxuLG8scixpKXtsZXQgcz10LnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMztpZihyIT09LTEpe2xldCBmPW9bcl0sdT1uW2ZdO3JldHVybiB1PT09LTE/KG5bZl09cyx0LnBvc2l0aW9uLnZhbHVlcy5wdXNoKGkueCxpLnksaS56KSxlLnB1c2gocykscyk6KGUucHVzaCh1KSx1KX1yZXR1cm4gdC5wb3NpdGlvbi52YWx1ZXMucHVzaChpLngsaS55LGkueiksZS5wdXNoKHMpLHN9ZnVuY3Rpb24gcWIodCl7bGV0IGU9dC5nZW9tZXRyeSxuPWUuYXR0cmlidXRlcyxvPW4ucG9zaXRpb24udmFsdWVzLHI9aChuLm5vcm1hbCk/bi5ub3JtYWwudmFsdWVzOnZvaWQgMCxpPWgobi5iaXRhbmdlbnQpP24uYml0YW5nZW50LnZhbHVlczp2b2lkIDAscz1oKG4udGFuZ2VudCk/bi50YW5nZW50LnZhbHVlczp2b2lkIDAsZj1oKG4uc3QpP24uc3QudmFsdWVzOnZvaWQgMCx1PWgobi5leHRydWRlRGlyZWN0aW9uKT9uLmV4dHJ1ZGVEaXJlY3Rpb24udmFsdWVzOnZvaWQgMCxjPWgobi5hcHBseU9mZnNldCk/bi5hcHBseU9mZnNldC52YWx1ZXM6dm9pZCAwLGw9ZS5pbmRpY2VzLHA9W107Zm9yKGxldCBOIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShOKSYmIWlNW05dJiZoKG5bTl0pJiZwLnB1c2goTik7bGV0IGQ9cC5sZW5ndGgsbT1pYShlKSxfPWlhKGUpLGcsYixULE8sRSx3PVtdO3cubGVuZ3RoPW8ubGVuZ3RoLzM7bGV0IEM9W107Zm9yKEMubGVuZ3RoPW8ubGVuZ3RoLzMsRT0wO0U8dy5sZW5ndGg7KytFKXdbRV09LTEsQ1tFXT0tMTtsZXQgTT1sLmxlbmd0aDtmb3IoRT0wO0U8TTtFKz0zKXtsZXQgTj1sW0VdLEY9bFtFKzFdLEk9bFtFKzJdLHY9YS5mcm9tQXJyYXkobyxOKjMpLEI9YS5mcm9tQXJyYXkobyxGKjMpLEE9YS5mcm9tQXJyYXkobyxJKjMpLFM9dE0odixCLEEpO2lmKGgoUykmJlMucG9zaXRpb25zLmxlbmd0aD4zKXtsZXQgeD1TLnBvc2l0aW9ucyxMPVMuaW5kaWNlcyx6PUwubGVuZ3RoO2ZvcihsZXQgaj0wO2o8ejsrK2ope2xldCBrPUxbal0scT14W2tdO3EueTwwPyhnPV8uYXR0cmlidXRlcyxiPV8uaW5kaWNlcyxUPXcpOihnPW0uYXR0cmlidXRlcyxiPW0uaW5kaWNlcyxUPUMpLE89aWkoZyxiLFQsbCxrPDM/RStrOi0xLHEpLGpwKE4sRixJLHEsbyxyLHMsaSxmLHUsYyxnLHAsZCxuLE8pfX1lbHNlIGgoUykmJih2PVMucG9zaXRpb25zWzBdLEI9Uy5wb3NpdGlvbnNbMV0sQT1TLnBvc2l0aW9uc1syXSksdi55PDA/KGc9Xy5hdHRyaWJ1dGVzLGI9Xy5pbmRpY2VzLFQ9dyk6KGc9bS5hdHRyaWJ1dGVzLGI9bS5pbmRpY2VzLFQ9QyksTz1paShnLGIsVCxsLEUsdiksanAoTixGLEksdixvLHIscyxpLGYsdSxjLGcscCxkLG4sTyksTz1paShnLGIsVCxsLEUrMSxCKSxqcChOLEYsSSxCLG8scixzLGksZix1LGMsZyxwLGQsbixPKSxPPWlpKGcsYixULGwsRSsyLEEpLGpwKE4sRixJLEEsbyxyLHMsaSxmLHUsYyxnLHAsZCxuLE8pfVFoKHQsXyxtKX1mdW5jdGlvbiByYSh0LGUsbixvLHIsaSxzKXtpZighaChzKSlyZXR1cm47bGV0IGY9YS5mcm9tQXJyYXkobyx0KjMsRWYpO2EuZXF1YWxzRXBzaWxvbihmLG4sUC5FUFNJTE9OMTApP2kuYXBwbHlPZmZzZXQudmFsdWVzW3JdPXNbdF06aS5hcHBseU9mZnNldC52YWx1ZXNbcl09c1tlXX1mdW5jdGlvbiBLYih0KXtsZXQgZT10Lmdlb21ldHJ5LG49ZS5hdHRyaWJ1dGVzLG89bi5wb3NpdGlvbi52YWx1ZXMscj1oKG4uYXBwbHlPZmZzZXQpP24uYXBwbHlPZmZzZXQudmFsdWVzOnZvaWQgMCxpPWUuaW5kaWNlcyxzPWlhKGUpLGY9aWEoZSksdSxjPWkubGVuZ3RoLGw9W107bC5sZW5ndGg9by5sZW5ndGgvMztsZXQgcD1bXTtmb3IocC5sZW5ndGg9by5sZW5ndGgvMyx1PTA7dTxsLmxlbmd0aDsrK3UpbFt1XT0tMSxwW3VdPS0xO2Zvcih1PTA7dTxjO3UrPTIpe2xldCBkPWlbdV0sbT1pW3UrMV0sXz1hLmZyb21BcnJheShvLGQqMyxFZiksZz1hLmZyb21BcnJheShvLG0qMyxZaCksYjtNYXRoLmFicyhfLnkpPFAuRVBTSUxPTjYmJihfLnk8MD9fLnk9LVAuRVBTSUxPTjY6Xy55PVAuRVBTSUxPTjYpLE1hdGguYWJzKGcueSk8UC5FUFNJTE9ONiYmKGcueTwwP2cueT0tUC5FUFNJTE9ONjpnLnk9UC5FUFNJTE9ONik7bGV0IFQ9cy5hdHRyaWJ1dGVzLE89cy5pbmRpY2VzLEU9cCx3PWYuYXR0cmlidXRlcyxDPWYuaW5kaWNlcyxNPWwsTj1oby5saW5lU2VnbWVudFBsYW5lKF8sZyxaYiwkaCk7aWYoaChOKSl7bGV0IEY9YS5tdWx0aXBseUJ5U2NhbGFyKGEuVU5JVF9ZLDUqUC5FUFNJTE9OOSxzTSk7Xy55PDAmJihhLm5lZ2F0ZShGLEYpLFQ9Zi5hdHRyaWJ1dGVzLE89Zi5pbmRpY2VzLEU9bCx3PXMuYXR0cmlidXRlcyxDPXMuaW5kaWNlcyxNPXApO2xldCBJPWEuYWRkKE4sRixjTSk7Yj1paShULE8sRSxpLHUsXykscmEoZCxtLF8sbyxiLFQsciksYj1paShULE8sRSxpLC0xLEkpLHJhKGQsbSxJLG8sYixULHIpLGEubmVnYXRlKEYsRiksYS5hZGQoTixGLEkpLGI9aWkodyxDLE0saSwtMSxJKSxyYShkLG0sSSxvLGIsdyxyKSxiPWlpKHcsQyxNLGksdSsxLGcpLHJhKGQsbSxnLG8sYix3LHIpfWVsc2V7bGV0IEYsSSx2O18ueTwwPyhGPWYuYXR0cmlidXRlcyxJPWYuaW5kaWNlcyx2PWwpOihGPXMuYXR0cmlidXRlcyxJPXMuaW5kaWNlcyx2PXApLGI9aWkoRixJLHYsaSx1LF8pLHJhKGQsbSxfLG8sYixGLHIpLGI9aWkoRixJLHYsaSx1KzEsZykscmEoZCxtLGcsbyxiLEYscil9fVFoKHQsZixzKX1mdW5jdGlvbiBZYih0KXtsZXQgZT10LmF0dHJpYnV0ZXMsbj1lLnBvc2l0aW9uLnZhbHVlcyxvPWUucHJldlBvc2l0aW9uLnZhbHVlcyxyPWUubmV4dFBvc2l0aW9uLnZhbHVlcyxpPW4ubGVuZ3RoO2ZvcihsZXQgcz0wO3M8aTtzKz0zKXtsZXQgZj1hLnVucGFjayhuLHMsUWIpO2lmKGYueD4wKWNvbnRpbnVlO2xldCB1PWEudW5wYWNrKG8scyxKYik7KGYueTwwJiZ1Lnk+MHx8Zi55PjAmJnUueTwwKSYmKHMtMz4wPyhvW3NdPW5bcy0zXSxvW3MrMV09bltzLTJdLG9bcysyXT1uW3MtMV0pOmEucGFjayhmLG8scykpO2xldCBjPWEudW5wYWNrKHIscyxaaCk7KGYueTwwJiZjLnk+MHx8Zi55PjAmJmMueTwwKSYmKHMrMzxpPyhyW3NdPW5bcyszXSxyW3MrMV09bltzKzRdLHJbcysyXT1uW3MrNV0pOmEucGFjayhmLHIscykpfX1mdW5jdGlvbiBkTSh0KXtsZXQgZT10Lmdlb21ldHJ5LG49ZS5hdHRyaWJ1dGVzLG89bi5wb3NpdGlvbi52YWx1ZXMscj1uLnByZXZQb3NpdGlvbi52YWx1ZXMsaT1uLm5leHRQb3NpdGlvbi52YWx1ZXMscz1uLmV4cGFuZEFuZFdpZHRoLnZhbHVlcyxmPWgobi5zdCk/bi5zdC52YWx1ZXM6dm9pZCAwLHU9aChuLmNvbG9yKT9uLmNvbG9yLnZhbHVlczp2b2lkIDAsYz1pYShlKSxsPWlhKGUpLHAsZCxtLF89ITEsZz1vLmxlbmd0aC8zO2ZvcihwPTA7cDxnO3ArPTQpe2xldCBiPXAsVD1wKzIsTz1hLmZyb21BcnJheShvLGIqMyxRYiksRT1hLmZyb21BcnJheShvLFQqMyxKYik7aWYoTWF0aC5hYnMoTy55KTxIcClmb3IoTy55PUhwKihFLnk8MD8tMToxKSxvW3AqMysxXT1PLnksb1socCsxKSozKzFdPU8ueSxkPWIqMztkPGIqMys0KjM7ZCs9MylyW2RdPW9bcCozXSxyW2QrMV09b1twKjMrMV0scltkKzJdPW9bcCozKzJdO2lmKE1hdGguYWJzKEUueSk8SHApZm9yKEUueT1IcCooTy55PDA/LTE6MSksb1socCsyKSozKzFdPUUueSxvWyhwKzMpKjMrMV09RS55LGQ9YiozO2Q8YiozKzQqMztkKz0zKWlbZF09b1socCsyKSozXSxpW2QrMV09b1socCsyKSozKzFdLGlbZCsyXT1vWyhwKzIpKjMrMl07bGV0IHc9Yy5hdHRyaWJ1dGVzLEM9Yy5pbmRpY2VzLE09bC5hdHRyaWJ1dGVzLE49bC5pbmRpY2VzLEY9aG8ubGluZVNlZ21lbnRQbGFuZShPLEUsWmIsZk0pO2lmKGgoRikpe189ITA7bGV0IEk9YS5tdWx0aXBseUJ5U2NhbGFyKGEuVU5JVF9ZLHBNLHVNKTtPLnk8MCYmKGEubmVnYXRlKEksSSksdz1sLmF0dHJpYnV0ZXMsQz1sLmluZGljZXMsTT1jLmF0dHJpYnV0ZXMsTj1jLmluZGljZXMpO2xldCB2PWEuYWRkKEYsSSxsTSk7dy5wb3NpdGlvbi52YWx1ZXMucHVzaChPLngsTy55LE8ueixPLngsTy55LE8ueiksdy5wb3NpdGlvbi52YWx1ZXMucHVzaCh2Lngsdi55LHYueiksdy5wb3NpdGlvbi52YWx1ZXMucHVzaCh2Lngsdi55LHYueiksdy5wcmV2UG9zaXRpb24udmFsdWVzLnB1c2gocltiKjNdLHJbYiozKzFdLHJbYiozKzJdKSx3LnByZXZQb3NpdGlvbi52YWx1ZXMucHVzaChyW2IqMyszXSxyW2IqMys0XSxyW2IqMys1XSksdy5wcmV2UG9zaXRpb24udmFsdWVzLnB1c2goTy54LE8ueSxPLnosTy54LE8ueSxPLnopLHcubmV4dFBvc2l0aW9uLnZhbHVlcy5wdXNoKHYueCx2Lnksdi56KSx3Lm5leHRQb3NpdGlvbi52YWx1ZXMucHVzaCh2Lngsdi55LHYueiksdy5uZXh0UG9zaXRpb24udmFsdWVzLnB1c2godi54LHYueSx2LnopLHcubmV4dFBvc2l0aW9uLnZhbHVlcy5wdXNoKHYueCx2Lnksdi56KSxhLm5lZ2F0ZShJLEkpLGEuYWRkKEYsSSx2KSxNLnBvc2l0aW9uLnZhbHVlcy5wdXNoKHYueCx2Lnksdi56KSxNLnBvc2l0aW9uLnZhbHVlcy5wdXNoKHYueCx2Lnksdi56KSxNLnBvc2l0aW9uLnZhbHVlcy5wdXNoKEUueCxFLnksRS56LEUueCxFLnksRS56KSxNLnByZXZQb3NpdGlvbi52YWx1ZXMucHVzaCh2Lngsdi55LHYueiksTS5wcmV2UG9zaXRpb24udmFsdWVzLnB1c2godi54LHYueSx2LnopLE0ucHJldlBvc2l0aW9uLnZhbHVlcy5wdXNoKHYueCx2Lnksdi56KSxNLnByZXZQb3NpdGlvbi52YWx1ZXMucHVzaCh2Lngsdi55LHYueiksTS5uZXh0UG9zaXRpb24udmFsdWVzLnB1c2goRS54LEUueSxFLnosRS54LEUueSxFLnopLE0ubmV4dFBvc2l0aW9uLnZhbHVlcy5wdXNoKGlbVCozXSxpW1QqMysxXSxpW1QqMysyXSksTS5uZXh0UG9zaXRpb24udmFsdWVzLnB1c2goaVtUKjMrM10saVtUKjMrNF0saVtUKjMrNV0pO2xldCBCPUouZnJvbUFycmF5KHMsYioyLFdiKSxBPU1hdGguYWJzKEIueSk7dy5leHBhbmRBbmRXaWR0aC52YWx1ZXMucHVzaCgtMSxBLDEsQSksdy5leHBhbmRBbmRXaWR0aC52YWx1ZXMucHVzaCgtMSwtQSwxLC1BKSxNLmV4cGFuZEFuZFdpZHRoLnZhbHVlcy5wdXNoKC0xLEEsMSxBKSxNLmV4cGFuZEFuZFdpZHRoLnZhbHVlcy5wdXNoKC0xLC1BLDEsLUEpO2xldCBTPWEubWFnbml0dWRlU3F1YXJlZChhLnN1YnRyYWN0KEYsTyxaaCkpO2lmKFMvPWEubWFnbml0dWRlU3F1YXJlZChhLnN1YnRyYWN0KEUsTyxaaCkpLGgodSkpe2xldCB4PW1lLmZyb21BcnJheSh1LGIqNCxYYiksTD1tZS5mcm9tQXJyYXkodSxUKjQsWGIpLHo9UC5sZXJwKHgueCxMLngsUyksaj1QLmxlcnAoeC55LEwueSxTKSxrPVAubGVycCh4LnosTC56LFMpLHE9UC5sZXJwKHgudyxMLncsUyk7Zm9yKGQ9Yio0O2Q8Yio0KzIqNDsrK2Qpdy5jb2xvci52YWx1ZXMucHVzaCh1W2RdKTtmb3Iody5jb2xvci52YWx1ZXMucHVzaCh6LGosayxxKSx3LmNvbG9yLnZhbHVlcy5wdXNoKHosaixrLHEpLE0uY29sb3IudmFsdWVzLnB1c2goeixqLGsscSksTS5jb2xvci52YWx1ZXMucHVzaCh6LGosayxxKSxkPVQqNDtkPFQqNCsyKjQ7KytkKU0uY29sb3IudmFsdWVzLnB1c2godVtkXSl9aWYoaChmKSl7bGV0IHg9Si5mcm9tQXJyYXkoZixiKjIsV2IpLEw9Si5mcm9tQXJyYXkoZiwocCszKSoyLGFNKSx6PVAubGVycCh4LngsTC54LFMpO2ZvcihkPWIqMjtkPGIqMisyKjI7KytkKXcuc3QudmFsdWVzLnB1c2goZltkXSk7Zm9yKHcuc3QudmFsdWVzLnB1c2goeix4LnkpLHcuc3QudmFsdWVzLnB1c2goeixMLnkpLE0uc3QudmFsdWVzLnB1c2goeix4LnkpLE0uc3QudmFsdWVzLnB1c2goeixMLnkpLGQ9VCoyO2Q8VCoyKzIqMjsrK2QpTS5zdC52YWx1ZXMucHVzaChmW2RdKX1tPXcucG9zaXRpb24udmFsdWVzLmxlbmd0aC8zLTQsQy5wdXNoKG0sbSsyLG0rMSksQy5wdXNoKG0rMSxtKzIsbSszKSxtPU0ucG9zaXRpb24udmFsdWVzLmxlbmd0aC8zLTQsTi5wdXNoKG0sbSsyLG0rMSksTi5wdXNoKG0rMSxtKzIsbSszKX1lbHNle2xldCBJLHY7Zm9yKE8ueTwwPyhJPWwuYXR0cmlidXRlcyx2PWwuaW5kaWNlcyk6KEk9Yy5hdHRyaWJ1dGVzLHY9Yy5pbmRpY2VzKSxJLnBvc2l0aW9uLnZhbHVlcy5wdXNoKE8ueCxPLnksTy56KSxJLnBvc2l0aW9uLnZhbHVlcy5wdXNoKE8ueCxPLnksTy56KSxJLnBvc2l0aW9uLnZhbHVlcy5wdXNoKEUueCxFLnksRS56KSxJLnBvc2l0aW9uLnZhbHVlcy5wdXNoKEUueCxFLnksRS56KSxkPXAqMztkPHAqMys0KjM7KytkKUkucHJldlBvc2l0aW9uLnZhbHVlcy5wdXNoKHJbZF0pLEkubmV4dFBvc2l0aW9uLnZhbHVlcy5wdXNoKGlbZF0pO2ZvcihkPXAqMjtkPHAqMis0KjI7KytkKUkuZXhwYW5kQW5kV2lkdGgudmFsdWVzLnB1c2goc1tkXSksaChmKSYmSS5zdC52YWx1ZXMucHVzaChmW2RdKTtpZihoKHUpKWZvcihkPXAqNDtkPHAqNCs0KjQ7KytkKUkuY29sb3IudmFsdWVzLnB1c2godVtkXSk7bT1JLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMy00LHYucHVzaChtLG0rMixtKzEpLHYucHVzaChtKzEsbSsyLG0rMyl9fV8mJihZYihsKSxZYihjKSksUWgodCxsLGMpfXZhciB2byxrYixWUCxIaCxrcixHcCxWcCxqUCxBcix3ZixuYSxvYSxIUCxHYixxUCxPZixVcixWYix6Yix6cCxqYixlYyxuYyxvYyxyYyxYaCxlTSxxcCwkYixuTSxFZixZaCwkaCxvTSxpTSxaYixzTSxjTSxXYixhTSxRYixKYixaaCxmTSx1TSxsTSxYYixwTSxIcCxrZSxzaT0kKCgpPT57YXMoKTt3YigpO3ZlKCk7VWUoKTtMdCgpO2hyKCk7SWUoKTtEZSgpO2Z0KCk7anQoKTtCaCgpO1NpKCk7WGUoKTtZZSgpO3ZwKCk7JGUoKTtHcygpO3RjKCk7S3QoKTtCbigpO1VuKCk7ZnMoKTt0bigpO0JiKCk7dm89e307dm8udG9XaXJlZnJhbWU9ZnVuY3Rpb24odCl7aWYoIWgodCkpdGhyb3cgbmV3IEQoImdlb21ldHJ5IGlzIHJlcXVpcmVkLiIpO2xldCBlPXQuaW5kaWNlcztpZihoKGUpKXtzd2l0Y2godC5wcmltaXRpdmVUeXBlKXtjYXNlIER0LlRSSUFOR0xFUzp0LmluZGljZXM9QlAoZSk7YnJlYWs7Y2FzZSBEdC5UUklBTkdMRV9TVFJJUDp0LmluZGljZXM9VVAoZSk7YnJlYWs7Y2FzZSBEdC5UUklBTkdMRV9GQU46dC5pbmRpY2VzPWtQKGUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEQoImdlb21ldHJ5LnByaW1pdGl2ZVR5cGUgbXVzdCBiZSBUUklBTkdMRVMsIFRSSUFOR0xFX1NUUklQLCBvciBUUklBTkdMRV9GQU4uIil9dC5wcmltaXRpdmVUeXBlPUR0LkxJTkVTfXJldHVybiB0fTt2by5jcmVhdGVMaW5lU2VnbWVudHNGb3JWZWN0b3JzPWZ1bmN0aW9uKHQsZSxuKXtpZihlPWU/PyJub3JtYWwiLCFoKHQpKXRocm93IG5ldyBEKCJnZW9tZXRyeSBpcyByZXF1aXJlZC4iKTtpZighaCh0LmF0dHJpYnV0ZXMucG9zaXRpb24pKXRocm93IG5ldyBEKCJnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uIGlzIHJlcXVpcmVkLiIpO2lmKCFoKHQuYXR0cmlidXRlc1tlXSkpdGhyb3cgbmV3IEQoYGdlb21ldHJ5LmF0dHJpYnV0ZXMgbXVzdCBoYXZlIGFuIGF0dHJpYnV0ZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGF0dHJpYnV0ZU5hbWUgcGFyYW1ldGVyLCAke2V9LmApO249bj8/MWU0O2xldCBvPXQuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMscj10LmF0dHJpYnV0ZXNbZV0udmFsdWVzLGk9by5sZW5ndGgscz1uZXcgRmxvYXQ2NEFycmF5KDIqaSksZj0wO2ZvcihsZXQgbD0wO2w8aTtsKz0zKXNbZisrXT1vW2xdLHNbZisrXT1vW2wrMV0sc1tmKytdPW9bbCsyXSxzW2YrK109b1tsXStyW2xdKm4sc1tmKytdPW9bbCsxXStyW2wrMV0qbixzW2YrK109b1tsKzJdK3JbbCsyXSpuO2xldCB1LGM9dC5ib3VuZGluZ1NwaGVyZTtyZXR1cm4gaChjKSYmKHU9bmV3IGd0KGMuY2VudGVyLGMucmFkaXVzK24pKSxuZXcgQnQoe2F0dHJpYnV0ZXM6e3Bvc2l0aW9uOm5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6c30pfSxwcmltaXRpdmVUeXBlOkR0LkxJTkVTLGJvdW5kaW5nU3BoZXJlOnV9KX07dm8uY3JlYXRlQXR0cmlidXRlTG9jYXRpb25zPWZ1bmN0aW9uKHQpe2lmKCFoKHQpKXRocm93IG5ldyBEKCJnZW9tZXRyeSBpcyByZXF1aXJlZC4iKTtsZXQgZT1bInBvc2l0aW9uIiwicG9zaXRpb25IaWdoIiwicG9zaXRpb25Mb3ciLCJwb3NpdGlvbjNESGlnaCIsInBvc2l0aW9uM0RMb3ciLCJwb3NpdGlvbjJESGlnaCIsInBvc2l0aW9uMkRMb3ciLCJwaWNrQ29sb3IiLCJub3JtYWwiLCJzdCIsInRhbmdlbnQiLCJiaXRhbmdlbnQiLCJleHRydWRlRGlyZWN0aW9uIiwiY29tcHJlc3NlZEF0dHJpYnV0ZXMiXSxuPXQuYXR0cmlidXRlcyxvPXt9LHI9MCxpLHM9ZS5sZW5ndGg7Zm9yKGk9MDtpPHM7KytpKXtsZXQgZj1lW2ldO2gobltmXSkmJihvW2ZdPXIrKyl9Zm9yKGxldCBmIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShmKSYmIWgob1tmXSkmJihvW2ZdPXIrKyk7cmV0dXJuIG99O3ZvLnJlb3JkZXJGb3JQcmVWZXJ0ZXhDYWNoZT1mdW5jdGlvbih0KXtpZighaCh0KSl0aHJvdyBuZXcgRCgiZ2VvbWV0cnkgaXMgcmVxdWlyZWQuIik7bGV0IGU9QnQuY29tcHV0ZU51bWJlck9mVmVydGljZXModCksbj10LmluZGljZXM7aWYoaChuKSl7bGV0IG89bmV3IEludDMyQXJyYXkoZSk7Zm9yKGxldCBkPTA7ZDxlO2QrKylvW2RdPS0xO2xldCByPW4saT1yLmxlbmd0aCxzPUZ0LmNyZWF0ZVR5cGVkQXJyYXkoZSxpKSxmPTAsdT0wLGM9MCxsO2Zvcig7ZjxpOylsPW9bcltmXV0sbCE9PS0xP3NbdV09bDoobD1yW2ZdLG9bbF09YyxzW3VdPWMsKytjKSwrK2YsKyt1O3QuaW5kaWNlcz1zO2xldCBwPXQuYXR0cmlidXRlcztmb3IobGV0IGQgaW4gcClpZihwLmhhc093blByb3BlcnR5KGQpJiZoKHBbZF0pJiZoKHBbZF0udmFsdWVzKSl7bGV0IG09cFtkXSxfPW0udmFsdWVzLGc9MCxiPW0uY29tcG9uZW50c1BlckF0dHJpYnV0ZSxUPWV0LmNyZWF0ZVR5cGVkQXJyYXkobS5jb21wb25lbnREYXRhdHlwZSxjKmIpO2Zvcig7ZzxlOyl7bGV0IE89b1tnXTtpZihPIT09LTEpZm9yKGxldCBFPTA7RTxiO0UrKylUW2IqTytFXT1fW2IqZytFXTsrK2d9bS52YWx1ZXM9VH19cmV0dXJuIHR9O3ZvLnJlb3JkZXJGb3JQb3N0VmVydGV4Q2FjaGU9ZnVuY3Rpb24odCxlKXtpZighaCh0KSl0aHJvdyBuZXcgRCgiZ2VvbWV0cnkgaXMgcmVxdWlyZWQuIik7bGV0IG49dC5pbmRpY2VzO2lmKHQucHJpbWl0aXZlVHlwZT09PUR0LlRSSUFOR0xFUyYmaChuKSl7bGV0IG89bi5sZW5ndGgscj0wO2ZvcihsZXQgaT0wO2k8bztpKyspbltpXT5yJiYocj1uW2ldKTt0LmluZGljZXM9RGIudGlwc2lmeSh7aW5kaWNlczpuLG1heGltdW1JbmRleDpyLGNhY2hlU2l6ZTplfSl9cmV0dXJuIHR9O3ZvLmZpdFRvVW5zaWduZWRTaG9ydEluZGljZXM9ZnVuY3Rpb24odCl7aWYoIWgodCkpdGhyb3cgbmV3IEQoImdlb21ldHJ5IGlzIHJlcXVpcmVkLiIpO2lmKGgodC5pbmRpY2VzKSYmdC5wcmltaXRpdmVUeXBlIT09RHQuVFJJQU5HTEVTJiZ0LnByaW1pdGl2ZVR5cGUhPT1EdC5MSU5FUyYmdC5wcmltaXRpdmVUeXBlIT09RHQuUE9JTlRTKXRocm93IG5ldyBEKCJnZW9tZXRyeS5wcmltaXRpdmVUeXBlIG11c3QgZXF1YWwgdG8gUHJpbWl0aXZlVHlwZS5UUklBTkdMRVMsIFByaW1pdGl2ZVR5cGUuTElORVMsIG9yIFByaW1pdGl2ZVR5cGUuUE9JTlRTLiIpO2xldCBlPVtdLG49QnQuY29tcHV0ZU51bWJlck9mVmVydGljZXModCk7aWYoaCh0LmluZGljZXMpJiZuPj1QLlNJWFRZX0ZPVVJfS0lMT0JZVEVTKXtsZXQgbz1bXSxyPVtdLGk9MCxzPVViKHQuYXR0cmlidXRlcyksZj10LmluZGljZXMsdT1mLmxlbmd0aCxjO3QucHJpbWl0aXZlVHlwZT09PUR0LlRSSUFOR0xFUz9jPTM6dC5wcmltaXRpdmVUeXBlPT09RHQuTElORVM/Yz0yOnQucHJpbWl0aXZlVHlwZT09PUR0LlBPSU5UUyYmKGM9MSk7Zm9yKGxldCBsPTA7bDx1O2wrPWMpe2ZvcihsZXQgcD0wO3A8YzsrK3Ape2xldCBkPWZbbCtwXSxtPW9bZF07aChtKXx8KG09aSsrLG9bZF09bSxHUChzLHQuYXR0cmlidXRlcyxkKSksci5wdXNoKG0pfWkrYz49UC5TSVhUWV9GT1VSX0tJTE9CWVRFUyYmKGUucHVzaChuZXcgQnQoe2F0dHJpYnV0ZXM6cyxpbmRpY2VzOnIscHJpbWl0aXZlVHlwZTp0LnByaW1pdGl2ZVR5cGUsYm91bmRpbmdTcGhlcmU6dC5ib3VuZGluZ1NwaGVyZSxib3VuZGluZ1NwaGVyZUNWOnQuYm91bmRpbmdTcGhlcmVDVn0pKSxvPVtdLHI9W10saT0wLHM9VWIodC5hdHRyaWJ1dGVzKSl9ci5sZW5ndGghPT0wJiZlLnB1c2gobmV3IEJ0KHthdHRyaWJ1dGVzOnMsaW5kaWNlczpyLHByaW1pdGl2ZVR5cGU6dC5wcmltaXRpdmVUeXBlLGJvdW5kaW5nU3BoZXJlOnQuYm91bmRpbmdTcGhlcmUsYm91bmRpbmdTcGhlcmVDVjp0LmJvdW5kaW5nU3BoZXJlQ1Z9KSl9ZWxzZSBlLnB1c2godCk7cmV0dXJuIGV9O2tiPW5ldyBhLFZQPW5ldyBjdDt2by5wcm9qZWN0VG8yRD1mdW5jdGlvbih0LGUsbixvLHIpe2lmKCFoKHQpKXRocm93IG5ldyBEKCJnZW9tZXRyeSBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgRCgiYXR0cmlidXRlTmFtZSBpcyByZXF1aXJlZC4iKTtpZighaChuKSl0aHJvdyBuZXcgRCgiYXR0cmlidXRlTmFtZTNEIGlzIHJlcXVpcmVkLiIpO2lmKCFoKG8pKXRocm93IG5ldyBEKCJhdHRyaWJ1dGVOYW1lMkQgaXMgcmVxdWlyZWQuIik7aWYoIWgodC5hdHRyaWJ1dGVzW2VdKSl0aHJvdyBuZXcgRChgZ2VvbWV0cnkgbXVzdCBoYXZlIGF0dHJpYnV0ZSBtYXRjaGluZyB0aGUgYXR0cmlidXRlTmFtZSBhcmd1bWVudDogJHtlfS5gKTtpZih0LmF0dHJpYnV0ZXNbZV0uY29tcG9uZW50RGF0YXR5cGUhPT1ldC5ET1VCTEUpdGhyb3cgbmV3IEQoIlRoZSBhdHRyaWJ1dGUgY29tcG9uZW50RGF0YXR5cGUgbXVzdCBiZSBDb21wb25lbnREYXRhdHlwZS5ET1VCTEUuIik7bGV0IGk9dC5hdHRyaWJ1dGVzW2VdO3I9aChyKT9yOm5ldyBKbjtsZXQgcz1yLmVsbGlwc29pZCxmPWkudmFsdWVzLHU9bmV3IEZsb2F0NjRBcnJheShmLmxlbmd0aCksYz0wO2ZvcihsZXQgbD0wO2w8Zi5sZW5ndGg7bCs9Myl7bGV0IHA9YS5mcm9tQXJyYXkoZixsLGtiKSxkPXMuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMocCxWUCk7aWYoIWgoZCkpdGhyb3cgbmV3IEQoYENvdWxkIG5vdCBwcm9qZWN0IHBvaW50ICgke3AueH0sICR7cC55fSwgJHtwLnp9KSB0byAyRC5gKTtsZXQgbT1yLnByb2plY3QoZCxrYik7dVtjKytdPW0ueCx1W2MrK109bS55LHVbYysrXT1tLnp9cmV0dXJuIHQuYXR0cmlidXRlc1tuXT1pLHQuYXR0cmlidXRlc1tvXT1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnV9KSxkZWxldGUgdC5hdHRyaWJ1dGVzW2VdLHR9O0hoPXtoaWdoOjAsbG93OjB9O3ZvLmVuY29kZUF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbixvKXtpZighaCh0KSl0aHJvdyBuZXcgRCgiZ2VvbWV0cnkgaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEQoImF0dHJpYnV0ZU5hbWUgaXMgcmVxdWlyZWQuIik7aWYoIWgobikpdGhyb3cgbmV3IEQoImF0dHJpYnV0ZUhpZ2hOYW1lIGlzIHJlcXVpcmVkLiIpO2lmKCFoKG8pKXRocm93IG5ldyBEKCJhdHRyaWJ1dGVMb3dOYW1lIGlzIHJlcXVpcmVkLiIpO2lmKCFoKHQuYXR0cmlidXRlc1tlXSkpdGhyb3cgbmV3IEQoYGdlb21ldHJ5IG11c3QgaGF2ZSBhdHRyaWJ1dGUgbWF0Y2hpbmcgdGhlIGF0dHJpYnV0ZU5hbWUgYXJndW1lbnQ6ICR7ZX0uYCk7aWYodC5hdHRyaWJ1dGVzW2VdLmNvbXBvbmVudERhdGF0eXBlIT09ZXQuRE9VQkxFKXRocm93IG5ldyBEKCJUaGUgYXR0cmlidXRlIGNvbXBvbmVudERhdGF0eXBlIG11c3QgYmUgQ29tcG9uZW50RGF0YXR5cGUuRE9VQkxFLiIpO2xldCByPXQuYXR0cmlidXRlc1tlXSxpPXIudmFsdWVzLHM9aS5sZW5ndGgsZj1uZXcgRmxvYXQzMkFycmF5KHMpLHU9bmV3IEZsb2F0MzJBcnJheShzKTtmb3IobGV0IGw9MDtsPHM7KytsKVpzLmVuY29kZShpW2xdLEhoKSxmW2xdPUhoLmhpZ2gsdVtsXT1IaC5sb3c7bGV0IGM9ci5jb21wb25lbnRzUGVyQXR0cmlidXRlO3JldHVybiB0LmF0dHJpYnV0ZXNbbl09bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOmMsdmFsdWVzOmZ9KSx0LmF0dHJpYnV0ZXNbb109bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOmMsdmFsdWVzOnV9KSxkZWxldGUgdC5hdHRyaWJ1dGVzW2VdLHR9O2tyPW5ldyBhO0dwPW5ldyBzdCxWcD1uZXcgWjt2by50cmFuc2Zvcm1Ub1dvcmxkQ29vcmRpbmF0ZXM9ZnVuY3Rpb24odCl7aWYoIWgodCkpdGhyb3cgbmV3IEQoImluc3RhbmNlIGlzIHJlcXVpcmVkLiIpO2xldCBlPXQubW9kZWxNYXRyaXg7aWYoc3QuZXF1YWxzKGUsc3QuSURFTlRJVFkpKXJldHVybiB0O2xldCBuPXQuZ2VvbWV0cnkuYXR0cmlidXRlcztxaChlLG4ucG9zaXRpb24pLHFoKGUsbi5wcmV2UG9zaXRpb24pLHFoKGUsbi5uZXh0UG9zaXRpb24pLChoKG4ubm9ybWFsKXx8aChuLnRhbmdlbnQpfHxoKG4uYml0YW5nZW50KSkmJihzdC5pbnZlcnNlKGUsR3ApLHN0LnRyYW5zcG9zZShHcCxHcCksc3QuZ2V0TWF0cml4MyhHcCxWcCksS2goVnAsbi5ub3JtYWwpLEtoKFZwLG4udGFuZ2VudCksS2goVnAsbi5iaXRhbmdlbnQpKTtsZXQgbz10Lmdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlO3JldHVybiBoKG8pJiYodC5nZW9tZXRyeS5ib3VuZGluZ1NwaGVyZT1ndC50cmFuc2Zvcm0obyxlLG8pKSx0Lm1vZGVsTWF0cml4PXN0LmNsb25lKHN0LklERU5USVRZKSx0fTtqUD1uZXcgYTt2by5jb21iaW5lSW5zdGFuY2VzPWZ1bmN0aW9uKHQpe2lmKCFoKHQpfHx0Lmxlbmd0aDwxKXRocm93IG5ldyBEKCJpbnN0YW5jZXMgaXMgcmVxdWlyZWQgYW5kIG11c3QgaGF2ZSBsZW5ndGggZ3JlYXRlciB0aGFuIHplcm8uIik7bGV0IGU9W10sbj1bXSxvPXQubGVuZ3RoO2ZvcihsZXQgaT0wO2k8bzsrK2kpe2xldCBzPXRbaV07aChzLmdlb21ldHJ5KT9lLnB1c2gocyk6aChzLndlc3RIZW1pc3BoZXJlR2VvbWV0cnkpJiZoKHMuZWFzdEhlbWlzcGhlcmVHZW9tZXRyeSkmJm4ucHVzaChzKX1sZXQgcj1bXTtyZXR1cm4gZS5sZW5ndGg+MCYmci5wdXNoKFdoKGUsImdlb21ldHJ5IikpLG4ubGVuZ3RoPjAmJihyLnB1c2goV2gobiwid2VzdEhlbWlzcGhlcmVHZW9tZXRyeSIpKSxyLnB1c2goV2gobiwiZWFzdEhlbWlzcGhlcmVHZW9tZXRyeSIpKSkscn07QXI9bmV3IGEsd2Y9bmV3IGEsbmE9bmV3IGEsb2E9bmV3IGE7dm8uY29tcHV0ZU5vcm1hbD1mdW5jdGlvbih0KXtpZighaCh0KSl0aHJvdyBuZXcgRCgiZ2VvbWV0cnkgaXMgcmVxdWlyZWQuIik7aWYoIWgodC5hdHRyaWJ1dGVzLnBvc2l0aW9uKXx8IWgodC5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcykpdGhyb3cgbmV3IEQoImdlb21ldHJ5LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzIGlzIHJlcXVpcmVkLiIpO2lmKCFoKHQuaW5kaWNlcykpdGhyb3cgbmV3IEQoImdlb21ldHJ5LmluZGljZXMgaXMgcmVxdWlyZWQuIik7aWYodC5pbmRpY2VzLmxlbmd0aDwyfHx0LmluZGljZXMubGVuZ3RoJTMhPT0wKXRocm93IG5ldyBEKCJnZW9tZXRyeS5pbmRpY2VzIGxlbmd0aCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwIGFuZCBiZSBhIG11bHRpcGxlIG9mIDMuIik7aWYodC5wcmltaXRpdmVUeXBlIT09RHQuVFJJQU5HTEVTKXRocm93IG5ldyBEKCJnZW9tZXRyeS5wcmltaXRpdmVUeXBlIG11c3QgYmUgUHJpbWl0aXZlVHlwZS5UUklBTkdMRVMuIik7bGV0IGU9dC5pbmRpY2VzLG49dC5hdHRyaWJ1dGVzLG89bi5wb3NpdGlvbi52YWx1ZXMscj1uLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMyxpPWUubGVuZ3RoLHM9bmV3IEFycmF5KHIpLGY9bmV3IEFycmF5KGkvMyksdT1uZXcgQXJyYXkoaSksYztmb3IoYz0wO2M8cjtjKyspc1tjXT17aW5kZXhPZmZzZXQ6MCxjb3VudDowLGN1cnJlbnRDb3VudDowfTtsZXQgbD0wO2ZvcihjPTA7YzxpO2MrPTMpe2xldCBfPWVbY10sZz1lW2MrMV0sYj1lW2MrMl0sVD1fKjMsTz1nKjMsRT1iKjM7d2YueD1vW1RdLHdmLnk9b1tUKzFdLHdmLno9b1tUKzJdLG5hLng9b1tPXSxuYS55PW9bTysxXSxuYS56PW9bTysyXSxvYS54PW9bRV0sb2EueT1vW0UrMV0sb2Euej1vW0UrMl0sc1tfXS5jb3VudCsrLHNbZ10uY291bnQrKyxzW2JdLmNvdW50KyssYS5zdWJ0cmFjdChuYSx3ZixuYSksYS5zdWJ0cmFjdChvYSx3ZixvYSksZltsXT1hLmNyb3NzKG5hLG9hLG5ldyBhKSxsKyt9bGV0IHA9MDtmb3IoYz0wO2M8cjtjKyspc1tjXS5pbmRleE9mZnNldCs9cCxwKz1zW2NdLmNvdW50O2w9MDtsZXQgZDtmb3IoYz0wO2M8aTtjKz0zKXtkPXNbZVtjXV07bGV0IF89ZC5pbmRleE9mZnNldCtkLmN1cnJlbnRDb3VudDt1W19dPWwsZC5jdXJyZW50Q291bnQrKyxkPXNbZVtjKzFdXSxfPWQuaW5kZXhPZmZzZXQrZC5jdXJyZW50Q291bnQsdVtfXT1sLGQuY3VycmVudENvdW50KyssZD1zW2VbYysyXV0sXz1kLmluZGV4T2Zmc2V0K2QuY3VycmVudENvdW50LHVbX109bCxkLmN1cnJlbnRDb3VudCsrLGwrK31sZXQgbT1uZXcgRmxvYXQzMkFycmF5KHIqMyk7Zm9yKGM9MDtjPHI7YysrKXtsZXQgXz1jKjM7aWYoZD1zW2NdLGEuY2xvbmUoYS5aRVJPLEFyKSxkLmNvdW50PjApe2ZvcihsPTA7bDxkLmNvdW50O2wrKylhLmFkZChBcixmW3VbZC5pbmRleE9mZnNldCtsXV0sQXIpO2EuZXF1YWxzRXBzaWxvbihhLlpFUk8sQXIsUC5FUFNJTE9OMTApJiZhLmNsb25lKGZbdVtkLmluZGV4T2Zmc2V0XV0sQXIpfWEuZXF1YWxzRXBzaWxvbihhLlpFUk8sQXIsUC5FUFNJTE9OMTApJiYoQXIuej0xKSxhLm5vcm1hbGl6ZShBcixBciksbVtfXT1Bci54LG1bXysxXT1Bci55LG1bXysyXT1Bci56fXJldHVybiB0LmF0dHJpYnV0ZXMubm9ybWFsPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczptfSksdH07SFA9bmV3IGEsR2I9bmV3IGEscVA9bmV3IGE7dm8uY29tcHV0ZVRhbmdlbnRBbmRCaXRhbmdlbnQ9ZnVuY3Rpb24odCl7aWYoIWgodCkpdGhyb3cgbmV3IEQoImdlb21ldHJ5IGlzIHJlcXVpcmVkLiIpO2xldCBlPXQuYXR0cmlidXRlcyxuPXQuaW5kaWNlcztpZighaChlLnBvc2l0aW9uKXx8IWgoZS5wb3NpdGlvbi52YWx1ZXMpKXRocm93IG5ldyBEKCJnZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyBpcyByZXF1aXJlZC4iKTtpZighaChlLm5vcm1hbCl8fCFoKGUubm9ybWFsLnZhbHVlcykpdGhyb3cgbmV3IEQoImdlb21ldHJ5LmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlcyBpcyByZXF1aXJlZC4iKTtpZighaChlLnN0KXx8IWgoZS5zdC52YWx1ZXMpKXRocm93IG5ldyBEKCJnZW9tZXRyeS5hdHRyaWJ1dGVzLnN0LnZhbHVlcyBpcyByZXF1aXJlZC4iKTtpZighaChuKSl0aHJvdyBuZXcgRCgiZ2VvbWV0cnkuaW5kaWNlcyBpcyByZXF1aXJlZC4iKTtpZihuLmxlbmd0aDwyfHxuLmxlbmd0aCUzIT09MCl0aHJvdyBuZXcgRCgiZ2VvbWV0cnkuaW5kaWNlcyBsZW5ndGggbXVzdCBiZSBncmVhdGVyIHRoYW4gMCBhbmQgYmUgYSBtdWx0aXBsZSBvZiAzLiIpO2lmKHQucHJpbWl0aXZlVHlwZSE9PUR0LlRSSUFOR0xFUyl0aHJvdyBuZXcgRCgiZ2VvbWV0cnkucHJpbWl0aXZlVHlwZSBtdXN0IGJlIFByaW1pdGl2ZVR5cGUuVFJJQU5HTEVTLiIpO2xldCBvPXQuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMscj10LmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlcyxpPXQuYXR0cmlidXRlcy5zdC52YWx1ZXMscz10LmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aC8zLGY9bi5sZW5ndGgsdT1uZXcgQXJyYXkocyozKSxjO2ZvcihjPTA7Yzx1Lmxlbmd0aDtjKyspdVtjXT0wO2xldCBsLHAsZDtmb3IoYz0wO2M8ZjtjKz0zKXtsZXQgZz1uW2NdLGI9bltjKzFdLFQ9bltjKzJdO2w9ZyozLHA9YiozLGQ9VCozO2xldCBPPWcqMixFPWIqMix3PVQqMixDPW9bbF0sTT1vW2wrMV0sTj1vW2wrMl0sRj1pW09dLEk9aVtPKzFdLHY9aVtFKzFdLUksQj1pW3crMV0tSSxBPTEvKChpW0VdLUYpKkItKGlbd10tRikqdiksUz0oQioob1twXS1DKS12KihvW2RdLUMpKSpBLHg9KEIqKG9bcCsxXS1NKS12KihvW2QrMV0tTSkpKkEsTD0oQioob1twKzJdLU4pLXYqKG9bZCsyXS1OKSkqQTt1W2xdKz1TLHVbbCsxXSs9eCx1W2wrMl0rPUwsdVtwXSs9Uyx1W3ArMV0rPXgsdVtwKzJdKz1MLHVbZF0rPVMsdVtkKzFdKz14LHVbZCsyXSs9TH1sZXQgbT1uZXcgRmxvYXQzMkFycmF5KHMqMyksXz1uZXcgRmxvYXQzMkFycmF5KHMqMyk7Zm9yKGM9MDtjPHM7YysrKXtsPWMqMyxwPWwrMSxkPWwrMjtsZXQgZz1hLmZyb21BcnJheShyLGwsSFApLGI9YS5mcm9tQXJyYXkodSxsLHFQKSxUPWEuZG90KGcsYik7YS5tdWx0aXBseUJ5U2NhbGFyKGcsVCxHYiksYS5ub3JtYWxpemUoYS5zdWJ0cmFjdChiLEdiLGIpLGIpLG1bbF09Yi54LG1bcF09Yi55LG1bZF09Yi56LGEubm9ybWFsaXplKGEuY3Jvc3MoZyxiLGIpLGIpLF9bbF09Yi54LF9bcF09Yi55LF9bZF09Yi56fXJldHVybiB0LmF0dHJpYnV0ZXMudGFuZ2VudD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6bX0pLHQuYXR0cmlidXRlcy5iaXRhbmdlbnQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOl99KSx0fTtPZj1uZXcgSixVcj1uZXcgYSxWYj1uZXcgYSx6Yj1uZXcgYSx6cD1uZXcgSjt2by5jb21wcmVzc1ZlcnRpY2VzPWZ1bmN0aW9uKHQpe2lmKCFoKHQpKXRocm93IG5ldyBEKCJnZW9tZXRyeSBpcyByZXF1aXJlZC4iKTtsZXQgZT10LmF0dHJpYnV0ZXMuZXh0cnVkZURpcmVjdGlvbixuLG87aWYoaChlKSl7bGV0IE09ZS52YWx1ZXM7bz1NLmxlbmd0aC8zO2xldCBOPW5ldyBGbG9hdDMyQXJyYXkobyoyKSxGPTA7Zm9yKG49MDtuPG87KytuKXtpZihhLmZyb21BcnJheShNLG4qMyxVciksYS5lcXVhbHMoVXIsYS5aRVJPKSl7Ris9Mjtjb250aW51ZX16cD1ubi5vY3RFbmNvZGVJblJhbmdlKFVyLDY1NTM1LHpwKSxOW0YrK109enAueCxOW0YrK109enAueX1yZXR1cm4gdC5hdHRyaWJ1dGVzLmNvbXByZXNzZWRBdHRyaWJ1dGVzPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpOfSksZGVsZXRlIHQuYXR0cmlidXRlcy5leHRydWRlRGlyZWN0aW9uLHR9bGV0IHI9dC5hdHRyaWJ1dGVzLm5vcm1hbCxpPXQuYXR0cmlidXRlcy5zdCxzPWgociksZj1oKGkpO2lmKCFzJiYhZilyZXR1cm4gdDtsZXQgdT10LmF0dHJpYnV0ZXMudGFuZ2VudCxjPXQuYXR0cmlidXRlcy5iaXRhbmdlbnQsbD1oKHUpLHA9aChjKSxkLG0sXyxnO3MmJihkPXIudmFsdWVzKSxmJiYobT1pLnZhbHVlcyksbCYmKF89dS52YWx1ZXMpLHAmJihnPWMudmFsdWVzKSxvPShzP2QubGVuZ3RoOm0ubGVuZ3RoKS8ocz8zOjIpO2xldCBPPW8sRT1mJiZzPzI6MTtFKz1sfHxwPzE6MCxPKj1FO2xldCB3PW5ldyBGbG9hdDMyQXJyYXkoTyksQz0wO2ZvcihuPTA7bjxvOysrbil7ZiYmKEouZnJvbUFycmF5KG0sbioyLE9mKSx3W0MrK109bm4uY29tcHJlc3NUZXh0dXJlQ29vcmRpbmF0ZXMoT2YpKTtsZXQgTT1uKjM7cyYmaChfKSYmaChnKT8oYS5mcm9tQXJyYXkoZCxNLFVyKSxhLmZyb21BcnJheShfLE0sVmIpLGEuZnJvbUFycmF5KGcsTSx6Yiksbm4ub2N0UGFjayhVcixWYix6YixPZiksd1tDKytdPU9mLngsd1tDKytdPU9mLnkpOihzJiYoYS5mcm9tQXJyYXkoZCxNLFVyKSx3W0MrK109bm4ub2N0RW5jb2RlRmxvYXQoVXIpKSxsJiYoYS5mcm9tQXJyYXkoXyxNLFVyKSx3W0MrK109bm4ub2N0RW5jb2RlRmxvYXQoVXIpKSxwJiYoYS5mcm9tQXJyYXkoZyxNLFVyKSx3W0MrK109bm4ub2N0RW5jb2RlRmxvYXQoVXIpKSl9cmV0dXJuIHQuYXR0cmlidXRlcy5jb21wcmVzc2VkQXR0cmlidXRlcz1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6RSx2YWx1ZXM6d30pLHMmJmRlbGV0ZSB0LmF0dHJpYnV0ZXMubm9ybWFsLGYmJmRlbGV0ZSB0LmF0dHJpYnV0ZXMuc3QscCYmZGVsZXRlIHQuYXR0cmlidXRlcy5iaXRhbmdlbnQsbCYmZGVsZXRlIHQuYXR0cmlidXRlcy50YW5nZW50LHR9O2piPW5ldyBhO2VjPW5ldyBhLG5jPW5ldyBhLG9jPW5ldyBhLHJjPW5ldyBhLFhoPXtwb3NpdGlvbnM6bmV3IEFycmF5KDcpLGluZGljZXM6bmV3IEFycmF5KDMqMyl9O2VNPUpoKG1lLDQpLHFwPUpoKGEsMyksJGI9SmgoSiwyKSxuTT1mdW5jdGlvbih0LGUsbixvLHIsaSxzKXtsZXQgZj1yW3RdKm8ueCx1PXJbZV0qby55LGM9cltuXSpvLno7aVtzXT1mK3UrYz5QLkVQU0lMT042PzE6MH0sRWY9bmV3IGEsWWg9bmV3IGEsJGg9bmV3IGEsb009bmV3IGE7aU09e3Bvc2l0aW9uOiEwLG5vcm1hbDohMCxiaXRhbmdlbnQ6ITAsdGFuZ2VudDohMCxzdDohMCxleHRydWRlRGlyZWN0aW9uOiEwLGFwcGx5T2Zmc2V0OiEwfTtaYj1vbi5mcm9tUG9pbnROb3JtYWwoYS5aRVJPLGEuVU5JVF9ZKSxzTT1uZXcgYSxjTT1uZXcgYTtXYj1uZXcgSixhTT1uZXcgSixRYj1uZXcgYSxKYj1uZXcgYSxaaD1uZXcgYSxmTT1uZXcgYSx1TT1uZXcgYSxsTT1uZXcgYSxYYj1uZXcgbWU7cE09NSpQLkVQU0lMT045LEhwPVAuRVBTSUxPTjY7dm8uc3BsaXRMb25naXR1ZGU9ZnVuY3Rpb24odCl7aWYoIWgodCkpdGhyb3cgbmV3IEQoImluc3RhbmNlIGlzIHJlcXVpcmVkLiIpO2xldCBlPXQuZ2VvbWV0cnksbj1lLmJvdW5kaW5nU3BoZXJlO2lmKGgobikmJihuLmNlbnRlci54LW4ucmFkaXVzPjB8fGd0LmludGVyc2VjdFBsYW5lKG4sb24uT1JJR0lOX1pYX1BMQU5FKSE9PVNuLklOVEVSU0VDVElORykpcmV0dXJuIHQ7aWYoZS5nZW9tZXRyeVR5cGUhPT1NaS5OT05FKXN3aXRjaChlLmdlb21ldHJ5VHlwZSl7Y2FzZSBNaS5QT0xZTElORVM6ZE0odCk7YnJlYWs7Y2FzZSBNaS5UUklBTkdMRVM6cWIodCk7YnJlYWs7Y2FzZSBNaS5MSU5FUzpLYih0KTticmVha31lbHNlIFFQKGUpLGUucHJpbWl0aXZlVHlwZT09PUR0LlRSSUFOR0xFUz9xYih0KTplLnByaW1pdGl2ZVR5cGU9PT1EdC5MSU5FUyYmS2IodCk7cmV0dXJuIHR9O2tlPXZvfSk7ZnVuY3Rpb24gUmYodCxlLG4pe3Q9dD8/MCxlPWU/PzAsbj1uPz8wLHRoaXMudmFsdWU9bmV3IEZsb2F0MzJBcnJheShbdCxlLG5dKX12YXIgdFQsZVQ9JCgoKT0+e1d0KCk7RGUoKTtmdCgpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJmLnByb3RvdHlwZSx7Y29tcG9uZW50RGF0YXR5cGU6e2dldDpmdW5jdGlvbigpe3JldHVybiBldC5GTE9BVH19LGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6e2dldDpmdW5jdGlvbigpe3JldHVybiAzfX0sbm9ybWFsaXplOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMX19fSk7UmYuZnJvbUNhcnRlc2lhbjM9ZnVuY3Rpb24odCl7cmV0dXJuIHkuZGVmaW5lZCgib2Zmc2V0Iix0KSxuZXcgUmYodC54LHQueSx0LnopfTtSZi50b1ZhbHVlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkuZGVmaW5lZCgib2Zmc2V0Iix0KSxoKGUpfHwoZT1uZXcgRmxvYXQzMkFycmF5KFt0LngsdC55LHQuel0pKSxlWzBdPXQueCxlWzFdPXQueSxlWzJdPXQueixlfTt0VD1SZn0pO2Z1bmN0aW9uICRvKHQpe3RoaXMuX2VsbGlwc29pZD10Pz9ZLldHUzg0LHRoaXMuX3NlbWltYWpvckF4aXM9dGhpcy5fZWxsaXBzb2lkLm1heGltdW1SYWRpdXMsdGhpcy5fb25lT3ZlclNlbWltYWpvckF4aXM9MS90aGlzLl9zZW1pbWFqb3JBeGlzfXZhciBubyxpYz0kKCgpPT57THQoKTtJZSgpO2Z0KCk7anQoKTskdCgpO0t0KCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoJG8ucHJvdG90eXBlLHtlbGxpcHNvaWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGxpcHNvaWR9fX0pOyRvLm1lcmNhdG9yQW5nbGVUb0dlb2RldGljTGF0aXR1ZGU9ZnVuY3Rpb24odCl7cmV0dXJuIFAuUElfT1ZFUl9UV08tMipNYXRoLmF0YW4oTWF0aC5leHAoLXQpKX07JG8uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZT1mdW5jdGlvbih0KXt0PiRvLk1heGltdW1MYXRpdHVkZT90PSRvLk1heGltdW1MYXRpdHVkZTp0PC0kby5NYXhpbXVtTGF0aXR1ZGUmJih0PS0kby5NYXhpbXVtTGF0aXR1ZGUpO2xldCBlPU1hdGguc2luKHQpO3JldHVybiAuNSpNYXRoLmxvZygoMStlKS8oMS1lKSl9OyRvLk1heGltdW1MYXRpdHVkZT0kby5tZXJjYXRvckFuZ2xlVG9HZW9kZXRpY0xhdGl0dWRlKE1hdGguUEkpOyRvLnByb3RvdHlwZS5wcm9qZWN0PWZ1bmN0aW9uKHQsZSl7bGV0IG49dGhpcy5fc2VtaW1ham9yQXhpcyxvPXQubG9uZ2l0dWRlKm4scj0kby5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKHQubGF0aXR1ZGUpKm4saT10LmhlaWdodDtyZXR1cm4gaChlKT8oZS54PW8sZS55PXIsZS56PWksZSk6bmV3IGEobyxyLGkpfTskby5wcm90b3R5cGUudW5wcm9qZWN0PWZ1bmN0aW9uKHQsZSl7aWYoIWgodCkpdGhyb3cgbmV3IEQoImNhcnRlc2lhbiBpcyByZXF1aXJlZCIpO2xldCBuPXRoaXMuX29uZU92ZXJTZW1pbWFqb3JBeGlzLG89dC54Km4scj0kby5tZXJjYXRvckFuZ2xlVG9HZW9kZXRpY0xhdGl0dWRlKHQueSpuKSxpPXQuejtyZXR1cm4gaChlKT8oZS5sb25naXR1ZGU9byxlLmxhdGl0dWRlPXIsZS5oZWlnaHQ9aSxlKTpuZXcgY3QobyxyLGkpfTtubz0kb30pO2Z1bmN0aW9uIG1NKHQsZSxuKXtsZXQgbz0hbixyPXQubGVuZ3RoLGk7aWYoIW8mJnI+MSl7bGV0IHM9dFswXS5tb2RlbE1hdHJpeDtmb3IoaT0xO2k8cjsrK2kpaWYoIXN0LmVxdWFscyhzLHRbaV0ubW9kZWxNYXRyaXgpKXtvPSEwO2JyZWFrfX1pZihvKWZvcihpPTA7aTxyOysraSloKHRbaV0uZ2VvbWV0cnkpJiZrZS50cmFuc2Zvcm1Ub1dvcmxkQ29vcmRpbmF0ZXModFtpXSk7ZWxzZSBzdC5tdWx0aXBseVRyYW5zZm9ybWF0aW9uKGUsdFswXS5tb2RlbE1hdHJpeCxlKX1mdW5jdGlvbiB0MCh0LGUpe2xldCBuPXQuYXR0cmlidXRlcyxvPW4ucG9zaXRpb24scj1vLnZhbHVlcy5sZW5ndGgvby5jb21wb25lbnRzUGVyQXR0cmlidXRlO24uYmF0Y2hJZD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6bmV3IEZsb2F0MzJBcnJheShyKX0pO2xldCBpPW4uYmF0Y2hJZC52YWx1ZXM7Zm9yKGxldCBzPTA7czxyOysrcylpW3NdPWV9ZnVuY3Rpb24gaE0odCl7bGV0IGU9dC5sZW5ndGg7Zm9yKGxldCBuPTA7bjxlOysrbil7bGV0IG89dFtuXTtoKG8uZ2VvbWV0cnkpP3QwKG8uZ2VvbWV0cnksbik6aChvLndlc3RIZW1pc3BoZXJlR2VvbWV0cnkpJiZoKG8uZWFzdEhlbWlzcGhlcmVHZW9tZXRyeSkmJih0MChvLndlc3RIZW1pc3BoZXJlR2VvbWV0cnksbiksdDAoby5lYXN0SGVtaXNwaGVyZUdlb21ldHJ5LG4pKX19ZnVuY3Rpb24gX00odCl7bGV0IGU9dC5pbnN0YW5jZXMsbj10LnByb2plY3Rpb24sbz10LmVsZW1lbnRJbmRleFVpbnRTdXBwb3J0ZWQscj10LnNjZW5lM0RPbmx5LGk9dC52ZXJ0ZXhDYWNoZU9wdGltaXplLHM9dC5jb21wcmVzc1ZlcnRpY2VzLGY9dC5tb2RlbE1hdHJpeCx1LGMsbCxwPWUubGVuZ3RoO2Zvcih1PTA7dTxwOysrdSlpZihoKGVbdV0uZ2VvbWV0cnkpKXtsPWVbdV0uZ2VvbWV0cnkucHJpbWl0aXZlVHlwZTticmVha31mb3IodT0xO3U8cDsrK3UpaWYoaChlW3VdLmdlb21ldHJ5KSYmZVt1XS5nZW9tZXRyeS5wcmltaXRpdmVUeXBlIT09bCl0aHJvdyBuZXcgRCgiQWxsIGluc3RhbmNlIGdlb21ldHJpZXMgbXVzdCBoYXZlIHRoZSBzYW1lIHByaW1pdGl2ZVR5cGUuIik7aWYobU0oZSxmLHIpLCFyKWZvcih1PTA7dTxwOysrdSloKGVbdV0uZ2VvbWV0cnkpJiZrZS5zcGxpdExvbmdpdHVkZShlW3VdKTtpZihoTShlKSxpKWZvcih1PTA7dTxwOysrdSl7bGV0IG09ZVt1XTtoKG0uZ2VvbWV0cnkpPyhrZS5yZW9yZGVyRm9yUG9zdFZlcnRleENhY2hlKG0uZ2VvbWV0cnkpLGtlLnJlb3JkZXJGb3JQcmVWZXJ0ZXhDYWNoZShtLmdlb21ldHJ5KSk6aChtLndlc3RIZW1pc3BoZXJlR2VvbWV0cnkpJiZoKG0uZWFzdEhlbWlzcGhlcmVHZW9tZXRyeSkmJihrZS5yZW9yZGVyRm9yUG9zdFZlcnRleENhY2hlKG0ud2VzdEhlbWlzcGhlcmVHZW9tZXRyeSksa2UucmVvcmRlckZvclByZVZlcnRleENhY2hlKG0ud2VzdEhlbWlzcGhlcmVHZW9tZXRyeSksa2UucmVvcmRlckZvclBvc3RWZXJ0ZXhDYWNoZShtLmVhc3RIZW1pc3BoZXJlR2VvbWV0cnkpLGtlLnJlb3JkZXJGb3JQcmVWZXJ0ZXhDYWNoZShtLmVhc3RIZW1pc3BoZXJlR2VvbWV0cnkpKX1sZXQgZD1rZS5jb21iaW5lSW5zdGFuY2VzKGUpO2ZvcihwPWQubGVuZ3RoLHU9MDt1PHA7Kyt1KXtjPWRbdV07bGV0IG09Yy5hdHRyaWJ1dGVzO2lmKHIpZm9yKGxldCBfIGluIG0pbS5oYXNPd25Qcm9wZXJ0eShfKSYmbVtfXS5jb21wb25lbnREYXRhdHlwZT09PWV0LkRPVUJMRSYma2UuZW5jb2RlQXR0cmlidXRlKGMsXyxgJHtffTNESGlnaGAsYCR7X30zRExvd2ApO2Vsc2UgZm9yKGxldCBfIGluIG0paWYobS5oYXNPd25Qcm9wZXJ0eShfKSYmbVtfXS5jb21wb25lbnREYXRhdHlwZT09PWV0LkRPVUJMRSl7bGV0IGc9YCR7X30zRGAsYj1gJHtffTJEYDtrZS5wcm9qZWN0VG8yRChjLF8sZyxiLG4pLGgoYy5ib3VuZGluZ1NwaGVyZSkmJl89PT0icG9zaXRpb24iJiYoYy5ib3VuZGluZ1NwaGVyZUNWPWd0LmZyb21WZXJ0aWNlcyhjLmF0dHJpYnV0ZXMucG9zaXRpb24yRC52YWx1ZXMpKSxrZS5lbmNvZGVBdHRyaWJ1dGUoYyxnLGAke2d9SGlnaGAsYCR7Z31Mb3dgKSxrZS5lbmNvZGVBdHRyaWJ1dGUoYyxiLGAke2J9SGlnaGAsYCR7Yn1Mb3dgKX1zJiZrZS5jb21wcmVzc1ZlcnRpY2VzKGMpfWlmKCFvKXtsZXQgbT1bXTtmb3IocD1kLmxlbmd0aCx1PTA7dTxwOysrdSljPWRbdV0sbT1tLmNvbmNhdChrZS5maXRUb1Vuc2lnbmVkU2hvcnRJbmRpY2VzKGMpKTtkPW19cmV0dXJuIGR9ZnVuY3Rpb24gZTAodCxlLG4sbyl7bGV0IHIsaSxzLGY9by5sZW5ndGgtMTtpZihmPj0wKXtsZXQgYz1vW2ZdO3I9Yy5vZmZzZXQrYy5jb3VudCxzPWMuaW5kZXgsaT1uW3NdLmluZGljZXMubGVuZ3RofWVsc2Ugcj0wLHM9MCxpPW5bc10uaW5kaWNlcy5sZW5ndGg7bGV0IHU9dC5sZW5ndGg7Zm9yKGxldCBjPTA7Yzx1OysrYyl7bGV0IHA9dFtjXVtlXTtpZighaChwKSljb250aW51ZTtsZXQgZD1wLmluZGljZXMubGVuZ3RoO3IrZD5pJiYocj0wLGk9blsrK3NdLmluZGljZXMubGVuZ3RoKSxvLnB1c2goe2luZGV4OnMsb2Zmc2V0OnIsY291bnQ6ZH0pLHIrPWR9fWZ1bmN0aW9uIHlNKHQsZSl7bGV0IG49W107cmV0dXJuIGUwKHQsImdlb21ldHJ5IixlLG4pLGUwKHQsIndlc3RIZW1pc3BoZXJlR2VvbWV0cnkiLGUsbiksZTAodCwiZWFzdEhlbWlzcGhlcmVHZW9tZXRyeSIsZSxuKSxufWZ1bmN0aW9uIGdNKHQsZSl7bGV0IG49dC5hdHRyaWJ1dGVzO2ZvcihsZXQgbyBpbiBuKWlmKG4uaGFzT3duUHJvcGVydHkobykpe2xldCByPW5bb107aChyKSYmaChyLnZhbHVlcykmJmUucHVzaChyLnZhbHVlcy5idWZmZXIpfWgodC5pbmRpY2VzKSYmZS5wdXNoKHQuaW5kaWNlcy5idWZmZXIpfWZ1bmN0aW9uIEFNKHQsZSl7bGV0IG49dC5sZW5ndGg7Zm9yKGxldCBvPTA7bzxuOysrbylnTSh0W29dLGUpfWZ1bmN0aW9uIGJNKHQpe2xldCBlPTEsbj10Lmxlbmd0aDtmb3IobGV0IG89MDtvPG47bysrKXtsZXQgcj10W29dO2lmKCsrZSwhaChyKSljb250aW51ZTtsZXQgaT1yLmF0dHJpYnV0ZXM7ZSs9NysyKmd0LnBhY2tlZExlbmd0aCsoaChyLmluZGljZXMpP3IuaW5kaWNlcy5sZW5ndGg6MCk7Zm9yKGxldCBzIGluIGkpaWYoaS5oYXNPd25Qcm9wZXJ0eShzKSYmaChpW3NdKSl7bGV0IGY9aVtzXTtlKz01K2YudmFsdWVzLmxlbmd0aH19cmV0dXJuIGV9ZnVuY3Rpb24gVE0odCxlKXtsZXQgbj10Lmxlbmd0aCxvPW5ldyBGbG9hdDY0QXJyYXkoMStuKjE5KSxyPTA7b1tyKytdPW47Zm9yKGxldCBpPTA7aTxuO2krKyl7bGV0IHM9dFtpXTtpZihzdC5wYWNrKHMubW9kZWxNYXRyaXgsbyxyKSxyKz1zdC5wYWNrZWRMZW5ndGgsaChzLmF0dHJpYnV0ZXMpJiZoKHMuYXR0cmlidXRlcy5vZmZzZXQpKXtsZXQgZj1zLmF0dHJpYnV0ZXMub2Zmc2V0LnZhbHVlO29bcl09ZlswXSxvW3IrMV09ZlsxXSxvW3IrMl09ZlsyXX1yKz0zfXJldHVybiBlLnB1c2goby5idWZmZXIpLG99ZnVuY3Rpb24gd00odCl7bGV0IGU9dCxuPW5ldyBBcnJheShlWzBdKSxvPTAscj0xO2Zvcig7cjxlLmxlbmd0aDspe2xldCBpPXN0LnVucGFjayhlLHIpLHM7cis9c3QucGFja2VkTGVuZ3RoLGgoZVtyXSkmJihzPXtvZmZzZXQ6bmV3IHRUKGVbcl0sZVtyKzFdLGVbcisyXSl9KSxyKz0zLG5bbysrXT17bW9kZWxNYXRyaXg6aSxhdHRyaWJ1dGVzOnN9fXJldHVybiBufWZ1bmN0aW9uIG5UKHQpe2xldCBlPXQubGVuZ3RoLG49MSsoZ3QucGFja2VkTGVuZ3RoKzEpKmUsbz1uZXcgRmxvYXQzMkFycmF5KG4pLHI9MDtvW3IrK109ZTtmb3IobGV0IGk9MDtpPGU7KytpKXtsZXQgcz10W2ldO2gocyk/KG9bcisrXT0xLGd0LnBhY2sodFtpXSxvLHIpKTpvW3IrK109MCxyKz1ndC5wYWNrZWRMZW5ndGh9cmV0dXJuIG99ZnVuY3Rpb24gb1QodCl7bGV0IGU9bmV3IEFycmF5KHRbMF0pLG49MCxvPTE7Zm9yKDtvPHQubGVuZ3RoOyl0W28rK109PT0xJiYoZVtuXT1ndC51bnBhY2sodCxvKSksKytuLG8rPWd0LnBhY2tlZExlbmd0aDtyZXR1cm4gZX12YXIgSWksc2EsbjA9JCgoKT0+e3ZlKCk7RGUoKTtmdCgpO2p0KCk7JHQoKTtTaSgpO1hlKCk7WWUoKTthbigpO3NpKCk7JGUoKTtVbigpO2VUKCk7aWMoKTtJaT17fTtJaS5jb21iaW5lR2VvbWV0cnk9ZnVuY3Rpb24odCl7bGV0IGUsbixvPXQuaW5zdGFuY2VzLHI9by5sZW5ndGgsaSxzLGY9ITE7cj4wJiYoZT1fTSh0KSxlLmxlbmd0aD4wJiYobj1rZS5jcmVhdGVBdHRyaWJ1dGVMb2NhdGlvbnMoZVswXSksdC5jcmVhdGVQaWNrT2Zmc2V0cyYmKGk9eU0obyxlKSkpLGgob1swXS5hdHRyaWJ1dGVzKSYmaChvWzBdLmF0dHJpYnV0ZXMub2Zmc2V0KSYmKHM9bmV3IEFycmF5KHIpLGY9ITApKTtsZXQgdT1uZXcgQXJyYXkociksYz1uZXcgQXJyYXkocik7Zm9yKGxldCBsPTA7bDxyOysrbCl7bGV0IHA9b1tsXSxkPXAuZ2VvbWV0cnk7aChkKSYmKHVbbF09ZC5ib3VuZGluZ1NwaGVyZSxjW2xdPWQuYm91bmRpbmdTcGhlcmVDVixmJiYoc1tsXT1wLmdlb21ldHJ5Lm9mZnNldEF0dHJpYnV0ZSkpO2xldCBtPXAuZWFzdEhlbWlzcGhlcmVHZW9tZXRyeSxfPXAud2VzdEhlbWlzcGhlcmVHZW9tZXRyeTtoKG0pJiZoKF8pJiYoaChtLmJvdW5kaW5nU3BoZXJlKSYmaChfLmJvdW5kaW5nU3BoZXJlKSYmKHVbbF09Z3QudW5pb24obS5ib3VuZGluZ1NwaGVyZSxfLmJvdW5kaW5nU3BoZXJlKSksaChtLmJvdW5kaW5nU3BoZXJlQ1YpJiZoKF8uYm91bmRpbmdTcGhlcmVDVikmJihjW2xdPWd0LnVuaW9uKG0uYm91bmRpbmdTcGhlcmVDVixfLmJvdW5kaW5nU3BoZXJlQ1YpKSl9cmV0dXJue2dlb21ldHJpZXM6ZSxtb2RlbE1hdHJpeDp0Lm1vZGVsTWF0cml4LGF0dHJpYnV0ZUxvY2F0aW9uczpuLHBpY2tPZmZzZXRzOmksb2Zmc2V0SW5zdGFuY2VFeHRlbmQ6cyxib3VuZGluZ1NwaGVyZXM6dSxib3VuZGluZ1NwaGVyZXNDVjpjfX07SWkucGFja0NyZWF0ZUdlb21ldHJ5UmVzdWx0cz1mdW5jdGlvbih0LGUpe2xldCBuPW5ldyBGbG9hdDY0QXJyYXkoYk0odCkpLG89W10scj17fSxpPXQubGVuZ3RoLHM9MDtuW3MrK109aTtmb3IobGV0IGY9MDtmPGk7ZisrKXtsZXQgdT10W2ZdLGM9aCh1KTtpZihuW3MrK109Yz8xOjAsIWMpY29udGludWU7bltzKytdPXUucHJpbWl0aXZlVHlwZSxuW3MrK109dS5nZW9tZXRyeVR5cGUsbltzKytdPXUub2Zmc2V0QXR0cmlidXRlPz8tMTtsZXQgbD1oKHUuYm91bmRpbmdTcGhlcmUpPzE6MDtuW3MrK109bCxsJiZndC5wYWNrKHUuYm91bmRpbmdTcGhlcmUsbixzKSxzKz1ndC5wYWNrZWRMZW5ndGg7bGV0IHA9aCh1LmJvdW5kaW5nU3BoZXJlQ1YpPzE6MDtuW3MrK109cCxwJiZndC5wYWNrKHUuYm91bmRpbmdTcGhlcmVDVixuLHMpLHMrPWd0LnBhY2tlZExlbmd0aDtsZXQgZD11LmF0dHJpYnV0ZXMsbT1bXTtmb3IobGV0IGcgaW4gZClkLmhhc093blByb3BlcnR5KGcpJiZoKGRbZ10pJiYobS5wdXNoKGcpLGgocltnXSl8fChyW2ddPW8ubGVuZ3RoLG8ucHVzaChnKSkpO25bcysrXT1tLmxlbmd0aDtmb3IobGV0IGc9MDtnPG0ubGVuZ3RoO2crKyl7bGV0IGI9bVtnXSxUPWRbYl07bltzKytdPXJbYl0sbltzKytdPVQuY29tcG9uZW50RGF0YXR5cGUsbltzKytdPVQuY29tcG9uZW50c1BlckF0dHJpYnV0ZSxuW3MrK109VC5ub3JtYWxpemU/MTowLG5bcysrXT1ULnZhbHVlcy5sZW5ndGgsbi5zZXQoVC52YWx1ZXMscykscys9VC52YWx1ZXMubGVuZ3RofWxldCBfPWgodS5pbmRpY2VzKT91LmluZGljZXMubGVuZ3RoOjA7bltzKytdPV8sXz4wJiYobi5zZXQodS5pbmRpY2VzLHMpLHMrPV8pfXJldHVybiBlLnB1c2gobi5idWZmZXIpLHtzdHJpbmdUYWJsZTpvLHBhY2tlZERhdGE6bn19O0lpLnVucGFja0NyZWF0ZUdlb21ldHJ5UmVzdWx0cz1mdW5jdGlvbih0KXtsZXQgZT10LnN0cmluZ1RhYmxlLG49dC5wYWNrZWREYXRhLG8scj1uZXcgQXJyYXkoblswXSksaT0wLHM9MTtmb3IoO3M8bi5sZW5ndGg7KXtpZighKG5bcysrXT09PTEpKXtyW2krK109dm9pZCAwO2NvbnRpbnVlfWxldCB1PW5bcysrXSxjPW5bcysrXSxsPW5bcysrXTtsPT09LTEmJihsPXZvaWQgMCk7bGV0IHAsZDtuW3MrK109PT0xJiYocD1ndC51bnBhY2sobixzKSkscys9Z3QucGFja2VkTGVuZ3RoLG5bcysrXT09PTEmJihkPWd0LnVucGFjayhuLHMpKSxzKz1ndC5wYWNrZWRMZW5ndGg7bGV0IGcsYixULE89bmV3IGllLEU9bltzKytdO2ZvcihvPTA7bzxFO28rKyl7bGV0IEM9ZVtuW3MrK11dLE09bltzKytdO1Q9bltzKytdO2xldCBOPW5bcysrXSE9PTA7Zz1uW3MrK10sYj1ldC5jcmVhdGVUeXBlZEFycmF5KE0sZyk7Zm9yKGxldCBGPTA7RjxnO0YrKyliW0ZdPW5bcysrXTtPW0NdPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6TSxjb21wb25lbnRzUGVyQXR0cmlidXRlOlQsbm9ybWFsaXplOk4sdmFsdWVzOmJ9KX1sZXQgdztpZihnPW5bcysrXSxnPjApe2xldCBDPWIubGVuZ3RoL1Q7Zm9yKHc9RnQuY3JlYXRlVHlwZWRBcnJheShDLGcpLG89MDtvPGc7bysrKXdbb109bltzKytdfXJbaSsrXT1uZXcgQnQoe3ByaW1pdGl2ZVR5cGU6dSxnZW9tZXRyeVR5cGU6Yyxib3VuZGluZ1NwaGVyZTpwLGJvdW5kaW5nU3BoZXJlQ1Y6ZCxpbmRpY2VzOncsYXR0cmlidXRlczpPLG9mZnNldEF0dHJpYnV0ZTpsfSl9cmV0dXJuIHJ9O0lpLnBhY2tDb21iaW5lR2VvbWV0cnlQYXJhbWV0ZXJzPWZ1bmN0aW9uKHQsZSl7bGV0IG49dC5jcmVhdGVHZW9tZXRyeVJlc3VsdHMsbz1uLmxlbmd0aDtmb3IobGV0IHI9MDtyPG87cisrKWUucHVzaChuW3JdLnBhY2tlZERhdGEuYnVmZmVyKTtyZXR1cm57Y3JlYXRlR2VvbWV0cnlSZXN1bHRzOnQuY3JlYXRlR2VvbWV0cnlSZXN1bHRzLHBhY2tlZEluc3RhbmNlczpUTSh0Lmluc3RhbmNlcyxlKSxlbGxpcHNvaWQ6dC5lbGxpcHNvaWQsaXNHZW9ncmFwaGljOnQucHJvamVjdGlvbiBpbnN0YW5jZW9mIEpuLGVsZW1lbnRJbmRleFVpbnRTdXBwb3J0ZWQ6dC5lbGVtZW50SW5kZXhVaW50U3VwcG9ydGVkLHNjZW5lM0RPbmx5OnQuc2NlbmUzRE9ubHksdmVydGV4Q2FjaGVPcHRpbWl6ZTp0LnZlcnRleENhY2hlT3B0aW1pemUsY29tcHJlc3NWZXJ0aWNlczp0LmNvbXByZXNzVmVydGljZXMsbW9kZWxNYXRyaXg6dC5tb2RlbE1hdHJpeCxjcmVhdGVQaWNrT2Zmc2V0czp0LmNyZWF0ZVBpY2tPZmZzZXRzfX07SWkudW5wYWNrQ29tYmluZUdlb21ldHJ5UGFyYW1ldGVycz1mdW5jdGlvbih0KXtsZXQgZT13TSh0LnBhY2tlZEluc3RhbmNlcyksbj10LmNyZWF0ZUdlb21ldHJ5UmVzdWx0cyxvPW4ubGVuZ3RoLHI9MDtmb3IobGV0IGY9MDtmPG87ZisrKXtsZXQgdT1JaS51bnBhY2tDcmVhdGVHZW9tZXRyeVJlc3VsdHMobltmXSksYz11Lmxlbmd0aDtmb3IobGV0IGw9MDtsPGM7bCsrKXtsZXQgcD11W2xdLGQ9ZVtyXTtkLmdlb21ldHJ5PXAsKytyfX1sZXQgaT1ZLmNsb25lKHQuZWxsaXBzb2lkKSxzPXQuaXNHZW9ncmFwaGljP25ldyBKbihpKTpuZXcgbm8oaSk7cmV0dXJue2luc3RhbmNlczplLGVsbGlwc29pZDppLHByb2plY3Rpb246cyxlbGVtZW50SW5kZXhVaW50U3VwcG9ydGVkOnQuZWxlbWVudEluZGV4VWludFN1cHBvcnRlZCxzY2VuZTNET25seTp0LnNjZW5lM0RPbmx5LHZlcnRleENhY2hlT3B0aW1pemU6dC52ZXJ0ZXhDYWNoZU9wdGltaXplLGNvbXByZXNzVmVydGljZXM6dC5jb21wcmVzc1ZlcnRpY2VzLG1vZGVsTWF0cml4OnN0LmNsb25lKHQubW9kZWxNYXRyaXgpLGNyZWF0ZVBpY2tPZmZzZXRzOnQuY3JlYXRlUGlja09mZnNldHN9fTtJaS5wYWNrQ29tYmluZUdlb21ldHJ5UmVzdWx0cz1mdW5jdGlvbih0LGUpe2godC5nZW9tZXRyaWVzKSYmQU0odC5nZW9tZXRyaWVzLGUpO2xldCBuPW5UKHQuYm91bmRpbmdTcGhlcmVzKSxvPW5UKHQuYm91bmRpbmdTcGhlcmVzQ1YpO3JldHVybiBlLnB1c2gobi5idWZmZXIsby5idWZmZXIpLHtnZW9tZXRyaWVzOnQuZ2VvbWV0cmllcyxhdHRyaWJ1dGVMb2NhdGlvbnM6dC5hdHRyaWJ1dGVMb2NhdGlvbnMsbW9kZWxNYXRyaXg6dC5tb2RlbE1hdHJpeCxwaWNrT2Zmc2V0czp0LnBpY2tPZmZzZXRzLG9mZnNldEluc3RhbmNlRXh0ZW5kOnQub2Zmc2V0SW5zdGFuY2VFeHRlbmQsYm91bmRpbmdTcGhlcmVzOm4sYm91bmRpbmdTcGhlcmVzQ1Y6b319O0lpLnVucGFja0NvbWJpbmVHZW9tZXRyeVJlc3VsdHM9ZnVuY3Rpb24odCl7cmV0dXJue2dlb21ldHJpZXM6dC5nZW9tZXRyaWVzLGF0dHJpYnV0ZUxvY2F0aW9uczp0LmF0dHJpYnV0ZUxvY2F0aW9ucyxtb2RlbE1hdHJpeDp0Lm1vZGVsTWF0cml4LHBpY2tPZmZzZXRzOnQucGlja09mZnNldHMsb2Zmc2V0SW5zdGFuY2VFeHRlbmQ6dC5vZmZzZXRJbnN0YW5jZUV4dGVuZCxib3VuZGluZ1NwaGVyZXM6b1QodC5ib3VuZGluZ1NwaGVyZXMpLGJvdW5kaW5nU3BoZXJlc0NWOm9UKHQuYm91bmRpbmdTcGhlcmVzQ1YpfX07c2E9SWl9KTtmdW5jdGlvbiBPTSh0KXtsZXQgZSxuPXQubmFtZSxvPXQubWVzc2FnZTtoKG4pJiZoKG8pP2U9YCR7bn06ICR7b31gOmU9dC50b1N0cmluZygpO2xldCByPXQuc3RhY2s7cmV0dXJuIGgocikmJihlKz1gCiR7cn1gKSxlfXZhciByVCxpVD0kKCgpPT57ZnQoKTtyVD1PTX0pO3ZhciBvMD17fTtkZShvMCx7ZGVmYXVsdDooKT0+UWV9KTtmdW5jdGlvbiBFTSh0KXthc3luYyBmdW5jdGlvbiBlKHtkYXRhOm99KXtsZXQgcj1bXSxpPXtpZDpvLmlkLHJlc3VsdDp2b2lkIDAsZXJyb3I6dm9pZCAwfTtzZWxmLkNFU0lVTV9CQVNFX1VSTD1vLmJhc2VVcmw7dHJ5e2xldCBzPWF3YWl0IHQoby5wYXJhbWV0ZXJzLHIpO2kucmVzdWx0PXN9Y2F0Y2gocyl7cyBpbnN0YW5jZW9mIEVycm9yP2kuZXJyb3I9e25hbWU6cy5uYW1lLG1lc3NhZ2U6cy5tZXNzYWdlLHN0YWNrOnMuc3RhY2t9OmkuZXJyb3I9c31vLmNhblRyYW5zZmVyQXJyYXlCdWZmZXJ8fChyLmxlbmd0aD0wKTt0cnl7cG9zdE1lc3NhZ2UoaSxyKX1jYXRjaChzKXtpLnJlc3VsdD12b2lkIDAsaS5lcnJvcj1gcG9zdE1lc3NhZ2UgZmFpbGVkIHdpdGggZXJyb3I6ICR7clQocyl9CiAgd2l0aCByZXNwb25zZU1lc3NhZ2U6ICR7SlNPTi5zdHJpbmdpZnkoaSl9YCxwb3N0TWVzc2FnZShpKX19ZnVuY3Rpb24gbihvKXtwb3N0TWVzc2FnZSh7aWQ6by5kYXRhPy5pZCxlcnJvcjpgcG9zdE1lc3NhZ2UgZmFpbGVkIHdpdGggZXJyb3I6ICR7SlNPTi5zdHJpbmdpZnkobyl9YH0pfXJldHVybiBzZWxmLm9ubWVzc2FnZT1lLHNlbGYub25tZXNzYWdlZXJyb3I9bixzZWxmfXZhciBRZSxzbz0kKCgpPT57aVQoKTtRZT1FTX0pO3ZhciByMD17fTtkZShyMCx7ZGVmYXVsdDooKT0+U019KTtmdW5jdGlvbiBSTSh0LGUpe2xldCBuPXNhLnVucGFja0NvbWJpbmVHZW9tZXRyeVBhcmFtZXRlcnModCksbz1zYS5jb21iaW5lR2VvbWV0cnkobik7cmV0dXJuIHNhLnBhY2tDb21iaW5lR2VvbWV0cnlSZXN1bHRzKG8sZSl9dmFyIFNNLGkwPSQoKCk9PntuMCgpO3NvKCk7U009UWUoUk0pfSk7dmFyIENNLGFlLEZvPSQoKCk9PntDTT17Tk9ORTowLFRPUDoxLEFMTDoyfSxhZT1PYmplY3QuZnJlZXplKENNKX0pO2Z1bmN0aW9uIFZuKHQpe3Q9dD8/SXQuRU1QVFlfT0JKRUNULHRoaXMucG9zaXRpb249dC5wb3NpdGlvbj8/ITEsdGhpcy5ub3JtYWw9dC5ub3JtYWw/PyExLHRoaXMuc3Q9dC5zdD8/ITEsdGhpcy5iaXRhbmdlbnQ9dC5iaXRhbmdlbnQ/PyExLHRoaXMudGFuZ2VudD10LnRhbmdlbnQ/PyExLHRoaXMuY29sb3I9dC5jb2xvcj8/ITF9dmFyIHB0LFJvPSQoKCk9Pnt5ZSgpO2Z0KCk7anQoKTtWbi5QT1NJVElPTl9PTkxZPU9iamVjdC5mcmVlemUobmV3IFZuKHtwb3NpdGlvbjohMH0pKTtWbi5QT1NJVElPTl9BTkRfTk9STUFMPU9iamVjdC5mcmVlemUobmV3IFZuKHtwb3NpdGlvbjohMCxub3JtYWw6ITB9KSk7Vm4uUE9TSVRJT05fTk9STUFMX0FORF9TVD1PYmplY3QuZnJlZXplKG5ldyBWbih7cG9zaXRpb246ITAsbm9ybWFsOiEwLHN0OiEwfSkpO1ZuLlBPU0lUSU9OX0FORF9TVD1PYmplY3QuZnJlZXplKG5ldyBWbih7cG9zaXRpb246ITAsc3Q6ITB9KSk7Vm4uUE9TSVRJT05fQU5EX0NPTE9SPU9iamVjdC5mcmVlemUobmV3IFZuKHtwb3NpdGlvbjohMCxjb2xvcjohMH0pKTtWbi5BTEw9T2JqZWN0LmZyZWV6ZShuZXcgVm4oe3Bvc2l0aW9uOiEwLG5vcm1hbDohMCxzdDohMCx0YW5nZW50OiEwLGJpdGFuZ2VudDohMH0pKTtWbi5ERUZBVUxUPVZuLlBPU0lUSU9OX05PUk1BTF9BTkRfU1Q7Vm4ucGFja2VkTGVuZ3RoPTY7Vm4ucGFjaz1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEQoInZhbHVlIGlzIHJlcXVpcmVkIik7aWYoIWgoZSkpdGhyb3cgbmV3IEQoImFycmF5IGlzIHJlcXVpcmVkIik7cmV0dXJuIG49bj8/MCxlW24rK109dC5wb3NpdGlvbj8xOjAsZVtuKytdPXQubm9ybWFsPzE6MCxlW24rK109dC5zdD8xOjAsZVtuKytdPXQudGFuZ2VudD8xOjAsZVtuKytdPXQuYml0YW5nZW50PzE6MCxlW25dPXQuY29sb3I/MTowLGV9O1ZuLnVucGFjaz1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEQoImFycmF5IGlzIHJlcXVpcmVkIik7cmV0dXJuIGU9ZT8/MCxoKG4pfHwobj1uZXcgVm4pLG4ucG9zaXRpb249dFtlKytdPT09MSxuLm5vcm1hbD10W2UrK109PT0xLG4uc3Q9dFtlKytdPT09MSxuLnRhbmdlbnQ9dFtlKytdPT09MSxuLmJpdGFuZ2VudD10W2UrK109PT0xLG4uY29sb3I9dFtlXT09PTEsbn07Vm4uY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihoKHQpKXJldHVybiBoKGUpfHwoZT1uZXcgVm4pLGUucG9zaXRpb249dC5wb3NpdGlvbixlLm5vcm1hbD10Lm5vcm1hbCxlLnN0PXQuc3QsZS50YW5nZW50PXQudGFuZ2VudCxlLmJpdGFuZ2VudD10LmJpdGFuZ2VudCxlLmNvbG9yPXQuY29sb3IsZX07cHQ9Vm59KTtmdW5jdGlvbiBycih0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVDtsZXQgZT10Lm1pbmltdW0sbj10Lm1heGltdW07aWYoeS50eXBlT2Yub2JqZWN0KCJtaW4iLGUpLHkudHlwZU9mLm9iamVjdCgibWF4IixuKSxoKHQub2Zmc2V0QXR0cmlidXRlKSYmdC5vZmZzZXRBdHRyaWJ1dGU9PT1hZS5UT1ApdGhyb3cgbmV3IEQoIkdlb21ldHJ5T2Zmc2V0QXR0cmlidXRlLlRPUCBpcyBub3QgYSBzdXBwb3J0ZWQgb3B0aW9ucy5vZmZzZXRBdHRyaWJ1dGUgZm9yIHRoaXMgZ2VvbWV0cnkuIik7bGV0IG89dC52ZXJ0ZXhGb3JtYXQ/P3B0LkRFRkFVTFQ7dGhpcy5fbWluaW11bT1hLmNsb25lKGUpLHRoaXMuX21heGltdW09YS5jbG9uZShuKSx0aGlzLl92ZXJ0ZXhGb3JtYXQ9byx0aGlzLl9vZmZzZXRBdHRyaWJ1dGU9dC5vZmZzZXRBdHRyaWJ1dGUsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlQm94R2VvbWV0cnkifXZhciB4TSxjVCxhVCxmVCxzVCxzMCxTZixjMD0kKCgpPT57dmUoKTtMdCgpO1d0KCk7RGUoKTt5ZSgpO2Z0KCk7anQoKTtYZSgpO1llKCk7YW4oKTtGbygpO3RuKCk7Um8oKTt4TT1uZXcgYTtyci5mcm9tRGltZW5zaW9ucz1mdW5jdGlvbih0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVDtsZXQgZT10LmRpbWVuc2lvbnM7eS50eXBlT2Yub2JqZWN0KCJkaW1lbnNpb25zIixlKSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiZGltZW5zaW9ucy54IixlLngsMCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImRpbWVuc2lvbnMueSIsZS55LDApLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJkaW1lbnNpb25zLnoiLGUueiwwKTtsZXQgbj1hLm11bHRpcGx5QnlTY2FsYXIoZSwuNSxuZXcgYSk7cmV0dXJuIG5ldyBycih7bWluaW11bTphLm5lZ2F0ZShuLG5ldyBhKSxtYXhpbXVtOm4sdmVydGV4Rm9ybWF0OnQudmVydGV4Rm9ybWF0LG9mZnNldEF0dHJpYnV0ZTp0Lm9mZnNldEF0dHJpYnV0ZX0pfTtyci5mcm9tQXhpc0FsaWduZWRCb3VuZGluZ0JveD1mdW5jdGlvbih0KXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJib3VuZGluZ0JveCIsdCksbmV3IHJyKHttaW5pbXVtOnQubWluaW11bSxtYXhpbXVtOnQubWF4aW11bX0pfTtyci5wYWNrZWRMZW5ndGg9MiphLnBhY2tlZExlbmd0aCtwdC5wYWNrZWRMZW5ndGgrMTtyci5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj1uPz8wLGEucGFjayh0Ll9taW5pbXVtLGUsbiksYS5wYWNrKHQuX21heGltdW0sZSxuK2EucGFja2VkTGVuZ3RoKSxwdC5wYWNrKHQuX3ZlcnRleEZvcm1hdCxlLG4rMiphLnBhY2tlZExlbmd0aCksZVtuKzIqYS5wYWNrZWRMZW5ndGgrcHQucGFja2VkTGVuZ3RoXT10Ll9vZmZzZXRBdHRyaWJ1dGU/Py0xLGV9O2NUPW5ldyBhLGFUPW5ldyBhLGZUPW5ldyBwdCxzVD17bWluaW11bTpjVCxtYXhpbXVtOmFULHZlcnRleEZvcm1hdDpmVCxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTtyci51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3kuZGVmaW5lZCgiYXJyYXkiLHQpLGU9ZT8/MDtsZXQgbz1hLnVucGFjayh0LGUsY1QpLHI9YS51bnBhY2sodCxlK2EucGFja2VkTGVuZ3RoLGFUKSxpPXB0LnVucGFjayh0LGUrMiphLnBhY2tlZExlbmd0aCxmVCkscz10W2UrMiphLnBhY2tlZExlbmd0aCtwdC5wYWNrZWRMZW5ndGhdO3JldHVybiBoKG4pPyhuLl9taW5pbXVtPWEuY2xvbmUobyxuLl9taW5pbXVtKSxuLl9tYXhpbXVtPWEuY2xvbmUocixuLl9tYXhpbXVtKSxuLl92ZXJ0ZXhGb3JtYXQ9cHQuY2xvbmUoaSxuLl92ZXJ0ZXhGb3JtYXQpLG4uX29mZnNldEF0dHJpYnV0ZT1zPT09LTE/dm9pZCAwOnMsbik6KHNULm9mZnNldEF0dHJpYnV0ZT1zPT09LTE/dm9pZCAwOnMsbmV3IHJyKHNUKSl9O3JyLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX21pbmltdW0sbj10Ll9tYXhpbXVtLG89dC5fdmVydGV4Rm9ybWF0O2lmKGEuZXF1YWxzKGUsbikpcmV0dXJuO2xldCByPW5ldyBpZSxpLHM7aWYoby5wb3NpdGlvbiYmKG8uc3R8fG8ubm9ybWFsfHxvLnRhbmdlbnR8fG8uYml0YW5nZW50KSl7aWYoby5wb3NpdGlvbiYmKHM9bmV3IEZsb2F0NjRBcnJheSg2KjQqMyksc1swXT1lLngsc1sxXT1lLnksc1syXT1uLnosc1szXT1uLngsc1s0XT1lLnksc1s1XT1uLnosc1s2XT1uLngsc1s3XT1uLnksc1s4XT1uLnosc1s5XT1lLngsc1sxMF09bi55LHNbMTFdPW4ueixzWzEyXT1lLngsc1sxM109ZS55LHNbMTRdPWUueixzWzE1XT1uLngsc1sxNl09ZS55LHNbMTddPWUueixzWzE4XT1uLngsc1sxOV09bi55LHNbMjBdPWUueixzWzIxXT1lLngsc1syMl09bi55LHNbMjNdPWUueixzWzI0XT1uLngsc1syNV09ZS55LHNbMjZdPWUueixzWzI3XT1uLngsc1syOF09bi55LHNbMjldPWUueixzWzMwXT1uLngsc1szMV09bi55LHNbMzJdPW4ueixzWzMzXT1uLngsc1szNF09ZS55LHNbMzVdPW4ueixzWzM2XT1lLngsc1szN109ZS55LHNbMzhdPWUueixzWzM5XT1lLngsc1s0MF09bi55LHNbNDFdPWUueixzWzQyXT1lLngsc1s0M109bi55LHNbNDRdPW4ueixzWzQ1XT1lLngsc1s0Nl09ZS55LHNbNDddPW4ueixzWzQ4XT1lLngsc1s0OV09bi55LHNbNTBdPWUueixzWzUxXT1uLngsc1s1Ml09bi55LHNbNTNdPWUueixzWzU0XT1uLngsc1s1NV09bi55LHNbNTZdPW4ueixzWzU3XT1lLngsc1s1OF09bi55LHNbNTldPW4ueixzWzYwXT1lLngsc1s2MV09ZS55LHNbNjJdPWUueixzWzYzXT1uLngsc1s2NF09ZS55LHNbNjVdPWUueixzWzY2XT1uLngsc1s2N109ZS55LHNbNjhdPW4ueixzWzY5XT1lLngsc1s3MF09ZS55LHNbNzFdPW4ueixyLnBvc2l0aW9uPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6c30pKSxvLm5vcm1hbCl7bGV0IGM9bmV3IEZsb2F0MzJBcnJheSg3Mik7Y1swXT0wLGNbMV09MCxjWzJdPTEsY1szXT0wLGNbNF09MCxjWzVdPTEsY1s2XT0wLGNbN109MCxjWzhdPTEsY1s5XT0wLGNbMTBdPTAsY1sxMV09MSxjWzEyXT0wLGNbMTNdPTAsY1sxNF09LTEsY1sxNV09MCxjWzE2XT0wLGNbMTddPS0xLGNbMThdPTAsY1sxOV09MCxjWzIwXT0tMSxjWzIxXT0wLGNbMjJdPTAsY1syM109LTEsY1syNF09MSxjWzI1XT0wLGNbMjZdPTAsY1syN109MSxjWzI4XT0wLGNbMjldPTAsY1szMF09MSxjWzMxXT0wLGNbMzJdPTAsY1szM109MSxjWzM0XT0wLGNbMzVdPTAsY1szNl09LTEsY1szN109MCxjWzM4XT0wLGNbMzldPS0xLGNbNDBdPTAsY1s0MV09MCxjWzQyXT0tMSxjWzQzXT0wLGNbNDRdPTAsY1s0NV09LTEsY1s0Nl09MCxjWzQ3XT0wLGNbNDhdPTAsY1s0OV09MSxjWzUwXT0wLGNbNTFdPTAsY1s1Ml09MSxjWzUzXT0wLGNbNTRdPTAsY1s1NV09MSxjWzU2XT0wLGNbNTddPTAsY1s1OF09MSxjWzU5XT0wLGNbNjBdPTAsY1s2MV09LTEsY1s2Ml09MCxjWzYzXT0wLGNbNjRdPS0xLGNbNjVdPTAsY1s2Nl09MCxjWzY3XT0tMSxjWzY4XT0wLGNbNjldPTAsY1s3MF09LTEsY1s3MV09MCxyLm5vcm1hbD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Y30pfWlmKG8uc3Qpe2xldCBjPW5ldyBGbG9hdDMyQXJyYXkoNDgpO2NbMF09MCxjWzFdPTAsY1syXT0xLGNbM109MCxjWzRdPTEsY1s1XT0xLGNbNl09MCxjWzddPTEsY1s4XT0xLGNbOV09MCxjWzEwXT0wLGNbMTFdPTAsY1sxMl09MCxjWzEzXT0xLGNbMTRdPTEsY1sxNV09MSxjWzE2XT0wLGNbMTddPTAsY1sxOF09MSxjWzE5XT0wLGNbMjBdPTEsY1syMV09MSxjWzIyXT0wLGNbMjNdPTEsY1syNF09MSxjWzI1XT0wLGNbMjZdPTAsY1syN109MCxjWzI4XT0wLGNbMjldPTEsY1szMF09MSxjWzMxXT0xLGNbMzJdPTEsY1szM109MCxjWzM0XT0wLGNbMzVdPTAsY1szNl09MCxjWzM3XT0xLGNbMzhdPTEsY1szOV09MSxjWzQwXT0wLGNbNDFdPTAsY1s0Ml09MSxjWzQzXT0wLGNbNDRdPTEsY1s0NV09MSxjWzQ2XT0wLGNbNDddPTEsci5zdD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6Y30pfWlmKG8udGFuZ2VudCl7bGV0IGM9bmV3IEZsb2F0MzJBcnJheSg3Mik7Y1swXT0xLGNbMV09MCxjWzJdPTAsY1szXT0xLGNbNF09MCxjWzVdPTAsY1s2XT0xLGNbN109MCxjWzhdPTAsY1s5XT0xLGNbMTBdPTAsY1sxMV09MCxjWzEyXT0tMSxjWzEzXT0wLGNbMTRdPTAsY1sxNV09LTEsY1sxNl09MCxjWzE3XT0wLGNbMThdPS0xLGNbMTldPTAsY1syMF09MCxjWzIxXT0tMSxjWzIyXT0wLGNbMjNdPTAsY1syNF09MCxjWzI1XT0xLGNbMjZdPTAsY1syN109MCxjWzI4XT0xLGNbMjldPTAsY1szMF09MCxjWzMxXT0xLGNbMzJdPTAsY1szM109MCxjWzM0XT0xLGNbMzVdPTAsY1szNl09MCxjWzM3XT0tMSxjWzM4XT0wLGNbMzldPTAsY1s0MF09LTEsY1s0MV09MCxjWzQyXT0wLGNbNDNdPS0xLGNbNDRdPTAsY1s0NV09MCxjWzQ2XT0tMSxjWzQ3XT0wLGNbNDhdPS0xLGNbNDldPTAsY1s1MF09MCxjWzUxXT0tMSxjWzUyXT0wLGNbNTNdPTAsY1s1NF09LTEsY1s1NV09MCxjWzU2XT0wLGNbNTddPS0xLGNbNThdPTAsY1s1OV09MCxjWzYwXT0xLGNbNjFdPTAsY1s2Ml09MCxjWzYzXT0xLGNbNjRdPTAsY1s2NV09MCxjWzY2XT0xLGNbNjddPTAsY1s2OF09MCxjWzY5XT0xLGNbNzBdPTAsY1s3MV09MCxyLnRhbmdlbnQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmN9KX1pZihvLmJpdGFuZ2VudCl7bGV0IGM9bmV3IEZsb2F0MzJBcnJheSg3Mik7Y1swXT0wLGNbMV09MSxjWzJdPTAsY1szXT0wLGNbNF09MSxjWzVdPTAsY1s2XT0wLGNbN109MSxjWzhdPTAsY1s5XT0wLGNbMTBdPTEsY1sxMV09MCxjWzEyXT0wLGNbMTNdPTEsY1sxNF09MCxjWzE1XT0wLGNbMTZdPTEsY1sxN109MCxjWzE4XT0wLGNbMTldPTEsY1syMF09MCxjWzIxXT0wLGNbMjJdPTEsY1syM109MCxjWzI0XT0wLGNbMjVdPTAsY1syNl09MSxjWzI3XT0wLGNbMjhdPTAsY1syOV09MSxjWzMwXT0wLGNbMzFdPTAsY1szMl09MSxjWzMzXT0wLGNbMzRdPTAsY1szNV09MSxjWzM2XT0wLGNbMzddPTAsY1szOF09MSxjWzM5XT0wLGNbNDBdPTAsY1s0MV09MSxjWzQyXT0wLGNbNDNdPTAsY1s0NF09MSxjWzQ1XT0wLGNbNDZdPTAsY1s0N109MSxjWzQ4XT0wLGNbNDldPTAsY1s1MF09MSxjWzUxXT0wLGNbNTJdPTAsY1s1M109MSxjWzU0XT0wLGNbNTVdPTAsY1s1Nl09MSxjWzU3XT0wLGNbNThdPTAsY1s1OV09MSxjWzYwXT0wLGNbNjFdPTAsY1s2Ml09MSxjWzYzXT0wLGNbNjRdPTAsY1s2NV09MSxjWzY2XT0wLGNbNjddPTAsY1s2OF09MSxjWzY5XT0wLGNbNzBdPTAsY1s3MV09MSxyLmJpdGFuZ2VudD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Y30pfWk9bmV3IFVpbnQxNkFycmF5KDYqMiozKSxpWzBdPTAsaVsxXT0xLGlbMl09MixpWzNdPTAsaVs0XT0yLGlbNV09MyxpWzZdPTYsaVs3XT01LGlbOF09NCxpWzldPTcsaVsxMF09NixpWzExXT00LGlbMTJdPTgsaVsxM109OSxpWzE0XT0xMCxpWzE1XT04LGlbMTZdPTEwLGlbMTddPTExLGlbMThdPTE0LGlbMTldPTEzLGlbMjBdPTEyLGlbMjFdPTE1LGlbMjJdPTE0LGlbMjNdPTEyLGlbMjRdPTE4LGlbMjVdPTE3LGlbMjZdPTE2LGlbMjddPTE5LGlbMjhdPTE4LGlbMjldPTE2LGlbMzBdPTIwLGlbMzFdPTIxLGlbMzJdPTIyLGlbMzNdPTIwLGlbMzRdPTIyLGlbMzVdPTIzfWVsc2Ugcz1uZXcgRmxvYXQ2NEFycmF5KDgqMyksc1swXT1lLngsc1sxXT1lLnksc1syXT1lLnosc1szXT1uLngsc1s0XT1lLnksc1s1XT1lLnosc1s2XT1uLngsc1s3XT1uLnksc1s4XT1lLnosc1s5XT1lLngsc1sxMF09bi55LHNbMTFdPWUueixzWzEyXT1lLngsc1sxM109ZS55LHNbMTRdPW4ueixzWzE1XT1uLngsc1sxNl09ZS55LHNbMTddPW4ueixzWzE4XT1uLngsc1sxOV09bi55LHNbMjBdPW4ueixzWzIxXT1lLngsc1syMl09bi55LHNbMjNdPW4ueixyLnBvc2l0aW9uPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6c30pLGk9bmV3IFVpbnQxNkFycmF5KDYqMiozKSxpWzBdPTQsaVsxXT01LGlbMl09NixpWzNdPTQsaVs0XT02LGlbNV09NyxpWzZdPTEsaVs3XT0wLGlbOF09MyxpWzldPTEsaVsxMF09MyxpWzExXT0yLGlbMTJdPTEsaVsxM109NixpWzE0XT01LGlbMTVdPTEsaVsxNl09MixpWzE3XT02LGlbMThdPTIsaVsxOV09MyxpWzIwXT03LGlbMjFdPTIsaVsyMl09NyxpWzIzXT02LGlbMjRdPTMsaVsyNV09MCxpWzI2XT00LGlbMjddPTMsaVsyOF09NCxpWzI5XT03LGlbMzBdPTAsaVszMV09MSxpWzMyXT01LGlbMzNdPTAsaVszNF09NSxpWzM1XT00O2xldCBmPWEuc3VidHJhY3QobixlLHhNKSx1PWEubWFnbml0dWRlKGYpKi41O2lmKGgodC5fb2Zmc2V0QXR0cmlidXRlKSl7bGV0IGM9cy5sZW5ndGgsbD10Ll9vZmZzZXRBdHRyaWJ1dGU9PT1hZS5OT05FPzA6MSxwPW5ldyBVaW50OEFycmF5KGMvMykuZmlsbChsKTtyLmFwcGx5T2Zmc2V0PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOnB9KX1yZXR1cm4gbmV3IEJ0KHthdHRyaWJ1dGVzOnIsaW5kaWNlczppLHByaW1pdGl2ZVR5cGU6RHQuVFJJQU5HTEVTLGJvdW5kaW5nU3BoZXJlOm5ldyBndChhLlpFUk8sdSksb2Zmc2V0QXR0cmlidXRlOnQuX29mZnNldEF0dHJpYnV0ZX0pfTtyci5nZXRVbml0Qm94PWZ1bmN0aW9uKCl7cmV0dXJuIGgoczApfHwoczA9cnIuY3JlYXRlR2VvbWV0cnkocnIuZnJvbURpbWVuc2lvbnMoe2RpbWVuc2lvbnM6bmV3IGEoMSwxLDEpLHZlcnRleEZvcm1hdDpwdC5QT1NJVElPTl9PTkxZfSkpKSxzMH07U2Y9cnJ9KTt2YXIgYTA9e307ZGUoYTAse2RlZmF1bHQ6KCk9Pk1NfSk7ZnVuY3Rpb24gUE0odCxlKXtyZXR1cm4gaChlKSYmKHQ9U2YudW5wYWNrKHQsZSkpLFNmLmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBNTSxmMD0kKCgpPT57YzAoKTtmdCgpO01NPVBNfSk7ZnVuY3Rpb24gY2kodCl7dD10Pz9JdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC5taW5pbXVtLG49dC5tYXhpbXVtO2lmKHkudHlwZU9mLm9iamVjdCgibWluIixlKSx5LnR5cGVPZi5vYmplY3QoIm1heCIsbiksaCh0Lm9mZnNldEF0dHJpYnV0ZSkmJnQub2Zmc2V0QXR0cmlidXRlPT09YWUuVE9QKXRocm93IG5ldyBEKCJHZW9tZXRyeU9mZnNldEF0dHJpYnV0ZS5UT1AgaXMgbm90IGEgc3VwcG9ydGVkIG9wdGlvbnMub2Zmc2V0QXR0cmlidXRlIGZvciB0aGlzIGdlb21ldHJ5LiIpO3RoaXMuX21pbj1hLmNsb25lKGUpLHRoaXMuX21heD1hLmNsb25lKG4pLHRoaXMuX29mZnNldEF0dHJpYnV0ZT10Lm9mZnNldEF0dHJpYnV0ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVCb3hPdXRsaW5lR2VvbWV0cnkifXZhciBOTSxsVCxwVCx1VCx1MCxkVD0kKCgpPT57dmUoKTtMdCgpO1d0KCk7RGUoKTt5ZSgpO2Z0KCk7anQoKTtYZSgpO1llKCk7YW4oKTtGbygpO3RuKCk7Tk09bmV3IGE7Y2kuZnJvbURpbWVuc2lvbnM9ZnVuY3Rpb24odCl7dD10Pz9JdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC5kaW1lbnNpb25zO3kudHlwZU9mLm9iamVjdCgiZGltZW5zaW9ucyIsZSkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImRpbWVuc2lvbnMueCIsZS54LDApLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJkaW1lbnNpb25zLnkiLGUueSwwKSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiZGltZW5zaW9ucy56IixlLnosMCk7bGV0IG49YS5tdWx0aXBseUJ5U2NhbGFyKGUsLjUsbmV3IGEpO3JldHVybiBuZXcgY2koe21pbmltdW06YS5uZWdhdGUobixuZXcgYSksbWF4aW11bTpuLG9mZnNldEF0dHJpYnV0ZTp0Lm9mZnNldEF0dHJpYnV0ZX0pfTtjaS5mcm9tQXhpc0FsaWduZWRCb3VuZGluZ0JveD1mdW5jdGlvbih0KXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJib3VuZGluZEJveCIsdCksbmV3IGNpKHttaW5pbXVtOnQubWluaW11bSxtYXhpbXVtOnQubWF4aW11bX0pfTtjaS5wYWNrZWRMZW5ndGg9MiphLnBhY2tlZExlbmd0aCsxO2NpLnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPW4/PzAsYS5wYWNrKHQuX21pbixlLG4pLGEucGFjayh0Ll9tYXgsZSxuK2EucGFja2VkTGVuZ3RoKSxlW24rYS5wYWNrZWRMZW5ndGgqMl09dC5fb2Zmc2V0QXR0cmlidXRlPz8tMSxlfTtsVD1uZXcgYSxwVD1uZXcgYSx1VD17bWluaW11bTpsVCxtYXhpbXVtOnBULG9mZnNldEF0dHJpYnV0ZTp2b2lkIDB9O2NpLnVucGFjaz1mdW5jdGlvbih0LGUsbil7eS5kZWZpbmVkKCJhcnJheSIsdCksZT1lPz8wO2xldCBvPWEudW5wYWNrKHQsZSxsVCkscj1hLnVucGFjayh0LGUrYS5wYWNrZWRMZW5ndGgscFQpLGk9dFtlK2EucGFja2VkTGVuZ3RoKjJdO3JldHVybiBoKG4pPyhuLl9taW49YS5jbG9uZShvLG4uX21pbiksbi5fbWF4PWEuY2xvbmUocixuLl9tYXgpLG4uX29mZnNldEF0dHJpYnV0ZT1pPT09LTE/dm9pZCAwOmksbik6KHVULm9mZnNldEF0dHJpYnV0ZT1pPT09LTE/dm9pZCAwOmksbmV3IGNpKHVUKSl9O2NpLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX21pbixuPXQuX21heDtpZihhLmVxdWFscyhlLG4pKXJldHVybjtsZXQgbz1uZXcgaWUscj1uZXcgVWludDE2QXJyYXkoMTIqMiksaT1uZXcgRmxvYXQ2NEFycmF5KDgqMyk7aVswXT1lLngsaVsxXT1lLnksaVsyXT1lLnosaVszXT1uLngsaVs0XT1lLnksaVs1XT1lLnosaVs2XT1uLngsaVs3XT1uLnksaVs4XT1lLnosaVs5XT1lLngsaVsxMF09bi55LGlbMTFdPWUueixpWzEyXT1lLngsaVsxM109ZS55LGlbMTRdPW4ueixpWzE1XT1uLngsaVsxNl09ZS55LGlbMTddPW4ueixpWzE4XT1uLngsaVsxOV09bi55LGlbMjBdPW4ueixpWzIxXT1lLngsaVsyMl09bi55LGlbMjNdPW4ueixvLnBvc2l0aW9uPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6aX0pLHJbMF09NCxyWzFdPTUsclsyXT01LHJbM109NixyWzRdPTYscls1XT03LHJbNl09NyxyWzddPTQscls4XT0wLHJbOV09MSxyWzEwXT0xLHJbMTFdPTIsclsxMl09MixyWzEzXT0zLHJbMTRdPTMsclsxNV09MCxyWzE2XT0wLHJbMTddPTQsclsxOF09MSxyWzE5XT01LHJbMjBdPTIsclsyMV09NixyWzIyXT0zLHJbMjNdPTc7bGV0IHM9YS5zdWJ0cmFjdChuLGUsTk0pLGY9YS5tYWduaXR1ZGUocykqLjU7aWYoaCh0Ll9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgdT1pLmxlbmd0aCxjPXQuX29mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxLGw9bmV3IFVpbnQ4QXJyYXkodS8zKS5maWxsKGMpO28uYXBwbHlPZmZzZXQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6bH0pfXJldHVybiBuZXcgQnQoe2F0dHJpYnV0ZXM6byxpbmRpY2VzOnIscHJpbWl0aXZlVHlwZTpEdC5MSU5FUyxib3VuZGluZ1NwaGVyZTpuZXcgZ3QoYS5aRVJPLGYpLG9mZnNldEF0dHJpYnV0ZTp0Ll9vZmZzZXRBdHRyaWJ1dGV9KX07dTA9Y2l9KTt2YXIgbDA9e307ZGUobDAse2RlZmF1bHQ6KCk9PnZNfSk7ZnVuY3Rpb24gSU0odCxlKXtyZXR1cm4gaChlKSYmKHQ9dTAudW5wYWNrKHQsZSkpLHUwLmNyZWF0ZUdlb21ldHJ5KHQpfXZhciB2TSxwMD0kKCgpPT57ZFQoKTtmdCgpO3ZNPUlNfSk7ZnVuY3Rpb24gY2EodCxlLG4sbyxyLGkscyxmLHUsYyl7bGV0IGw9dCtlO2EubXVsdGlwbHlCeVNjYWxhcihvLE1hdGguY29zKGwpLFdwKSxhLm11bHRpcGx5QnlTY2FsYXIobixNYXRoLnNpbihsKSxtVCksYS5hZGQoV3AsbVQsV3ApO2xldCBwPU1hdGguY29zKHQpO3A9cCpwO2xldCBkPU1hdGguc2luKHQpO2Q9ZCpkO2xldCBfPWkvTWF0aC5zcXJ0KHMqcCtyKmQpL2Y7cmV0dXJuIHRlLmZyb21BeGlzQW5nbGUoV3AsXyxoVCksWi5mcm9tUXVhdGVybmlvbihoVCxfVCksWi5tdWx0aXBseUJ5VmVjdG9yKF9ULHUsYyksYS5ub3JtYWxpemUoYyxjKSxhLm11bHRpcGx5QnlTY2FsYXIoYyxmLGMpLGN9dmFyIG0wLFdwLG1ULGhULF9ULHlULGdULGQwLEZNLExNLERNLEJNLEdyLGgwPSQoKCk9PntMdCgpO0t0KCk7Qm4oKTtLbygpO20wPXt9LFdwPW5ldyBhLG1UPW5ldyBhLGhUPW5ldyB0ZSxfVD1uZXcgWjt5VD1uZXcgYSxnVD1uZXcgYSxkMD1uZXcgYSxGTT1uZXcgYTttMC5yYWlzZVBvc2l0aW9uc1RvSGVpZ2h0PWZ1bmN0aW9uKHQsZSxuKXtsZXQgbz1lLmVsbGlwc29pZCxyPWUuaGVpZ2h0LGk9ZS5leHRydWRlZEhlaWdodCxzPW4/dC5sZW5ndGgvMyoyOnQubGVuZ3RoLzMsZj1uZXcgRmxvYXQ2NEFycmF5KHMqMyksdT10Lmxlbmd0aCxjPW4/dTowO2ZvcihsZXQgbD0wO2w8dTtsKz0zKXtsZXQgcD1sKzEsZD1sKzIsbT1hLmZyb21BcnJheSh0LGwseVQpO28uc2NhbGVUb0dlb2RldGljU3VyZmFjZShtLG0pO2xldCBfPWEuY2xvbmUobSxnVCksZz1vLmdlb2RldGljU3VyZmFjZU5vcm1hbChtLEZNKSxiPWEubXVsdGlwbHlCeVNjYWxhcihnLHIsZDApO2EuYWRkKG0sYixtKSxuJiYoYS5tdWx0aXBseUJ5U2NhbGFyKGcsaSxiKSxhLmFkZChfLGIsXyksZltsK2NdPV8ueCxmW3ArY109Xy55LGZbZCtjXT1fLnopLGZbbF09bS54LGZbcF09bS55LGZbZF09bS56fXJldHVybiBmfTtMTT1uZXcgYSxETT1uZXcgYSxCTT1uZXcgYTttMC5jb21wdXRlRWxsaXBzZVBvc2l0aW9ucz1mdW5jdGlvbih0LGUsbil7bGV0IG89dC5zZW1pTWlub3JBeGlzLHI9dC5zZW1pTWFqb3JBeGlzLGk9dC5yb3RhdGlvbixzPXQuY2VudGVyLGY9dC5ncmFudWxhcml0eSo4LHU9bypvLGM9cipyLGw9cipvLHA9YS5tYWduaXR1ZGUocyksZD1hLm5vcm1hbGl6ZShzLExNKSxtPWEuY3Jvc3MoYS5VTklUX1oscyxETSk7bT1hLm5vcm1hbGl6ZShtLG0pO2xldCBfPWEuY3Jvc3MoZCxtLEJNKSxnPTErTWF0aC5jZWlsKFAuUElfT1ZFUl9UV08vZiksYj1QLlBJX09WRVJfVFdPLyhnLTEpLFQ9UC5QSV9PVkVSX1RXTy1nKmI7VDwwJiYoZy09TWF0aC5jZWlsKE1hdGguYWJzKFQpL2IpKTtsZXQgTz0yKihnKihnKzIpKSxFPWU/bmV3IEFycmF5KE8qMyk6dm9pZCAwLHc9MCxDPXlULE09Z1QsTj1nKjQqMyxGPU4tMSxJPTAsdj1uP25ldyBBcnJheShOKTp2b2lkIDAsQixBLFMseCxMO2ZvcihUPVAuUElfT1ZFUl9UV08sQz1jYShULGksXyxtLHUsbCxjLHAsZCxDKSxlJiYoRVt3KytdPUMueCxFW3crK109Qy55LEVbdysrXT1DLnopLG4mJih2W0YtLV09Qy56LHZbRi0tXT1DLnksdltGLS1dPUMueCksVD1QLlBJX09WRVJfVFdPLWIsQj0xO0I8ZysxOysrQil7aWYoQz1jYShULGksXyxtLHUsbCxjLHAsZCxDKSxNPWNhKE1hdGguUEktVCxpLF8sbSx1LGwsYyxwLGQsTSksZSl7Zm9yKEVbdysrXT1DLngsRVt3KytdPUMueSxFW3crK109Qy56LFM9MipCKzIsQT0xO0E8Uy0xOysrQSl4PUEvKFMtMSksTD1hLmxlcnAoQyxNLHgsZDApLEVbdysrXT1MLngsRVt3KytdPUwueSxFW3crK109TC56O0VbdysrXT1NLngsRVt3KytdPU0ueSxFW3crK109TS56fW4mJih2W0YtLV09Qy56LHZbRi0tXT1DLnksdltGLS1dPUMueCx2W0krK109TS54LHZbSSsrXT1NLnksdltJKytdPU0ueiksVD1QLlBJX09WRVJfVFdPLShCKzEpKmJ9Zm9yKEI9ZztCPjE7LS1CKXtpZihUPVAuUElfT1ZFUl9UV08tKEItMSkqYixDPWNhKC1ULGksXyxtLHUsbCxjLHAsZCxDKSxNPWNhKFQrTWF0aC5QSSxpLF8sbSx1LGwsYyxwLGQsTSksZSl7Zm9yKEVbdysrXT1DLngsRVt3KytdPUMueSxFW3crK109Qy56LFM9MiooQi0xKSsyLEE9MTtBPFMtMTsrK0EpeD1BLyhTLTEpLEw9YS5sZXJwKEMsTSx4LGQwKSxFW3crK109TC54LEVbdysrXT1MLnksRVt3KytdPUwuejtFW3crK109TS54LEVbdysrXT1NLnksRVt3KytdPU0uen1uJiYodltGLS1dPUMueix2W0YtLV09Qy55LHZbRi0tXT1DLngsdltJKytdPU0ueCx2W0krK109TS55LHZbSSsrXT1NLnopfVQ9UC5QSV9PVkVSX1RXTyxDPWNhKC1ULGksXyxtLHUsbCxjLHAsZCxDKTtsZXQgej17fTtyZXR1cm4gZSYmKEVbdysrXT1DLngsRVt3KytdPUMueSxFW3crK109Qy56LHoucG9zaXRpb25zPUUsei5udW1QdHM9ZyksbiYmKHZbRi0tXT1DLnosdltGLS1dPUMueSx2W0YtLV09Qy54LHoub3V0ZXJQb3NpdGlvbnM9diksen07R3I9bTB9KTtmdW5jdGlvbiBVTSh0KXtpZih0PXQ/P0l0LkVNUFRZX09CSkVDVCwhaCh0Lmdlb21ldHJ5KSl0aHJvdyBuZXcgRCgib3B0aW9ucy5nZW9tZXRyeSBpcyByZXF1aXJlZC4iKTt0aGlzLmdlb21ldHJ5PXQuZ2VvbWV0cnksdGhpcy5tb2RlbE1hdHJpeD1zdC5jbG9uZSh0Lm1vZGVsTWF0cml4Pz9zdC5JREVOVElUWSksdGhpcy5pZD10LmlkLHRoaXMucGlja1ByaW1pdGl2ZT10LnBpY2tQcmltaXRpdmUsdGhpcy5hdHRyaWJ1dGVzPXQuYXR0cmlidXRlcz8/e30sdGhpcy53ZXN0SGVtaXNwaGVyZUdlb21ldHJ5PXZvaWQgMCx0aGlzLmVhc3RIZW1pc3BoZXJlR2VvbWV0cnk9dm9pZCAwfXZhciBjbyxzYz0kKCgpPT57eWUoKTtmdCgpO2p0KCk7VW4oKTtjbz1VTX0pO2Z1bmN0aW9uIENUKHQsZSxuKXtsZXQgbz1lLnZlcnRleEZvcm1hdCxyPWUuY2VudGVyLGk9ZS5zZW1pTWFqb3JBeGlzLHM9ZS5zZW1pTWlub3JBeGlzLGY9ZS5lbGxpcHNvaWQsdT1lLnN0Um90YXRpb24sYz1uP3QubGVuZ3RoLzMqMjp0Lmxlbmd0aC8zLGw9ZS5zaGFkb3dWb2x1bWUscD1vLnN0P25ldyBGbG9hdDMyQXJyYXkoYyoyKTp2b2lkIDAsZD1vLm5vcm1hbD9uZXcgRmxvYXQzMkFycmF5KGMqMyk6dm9pZCAwLG09by50YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoYyozKTp2b2lkIDAsXz1vLmJpdGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KGMqMyk6dm9pZCAwLGc9bD9uZXcgRmxvYXQzMkFycmF5KGMqMyk6dm9pZCAwLGI9MCxUPVRULE89d1QsRT1PVCx3PW5ldyBKbihmKSxDPXcucHJvamVjdChmLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHIsJHApLEVUKSxNPWYuc2NhbGVUb0dlb2RldGljU3VyZmFjZShyLGFhKTtmLmdlb2RldGljU3VyZmFjZU5vcm1hbChNLE0pO2xldCBOPWJULEY9a007aWYodSE9PTApe2xldCBMPXRlLmZyb21BeGlzQW5nbGUoTSx1LGcwKTtOPVouZnJvbVF1YXRlcm5pb24oTCxOKSxMPXRlLmZyb21BeGlzQW5nbGUoTSwtdSxnMCksRj1aLmZyb21RdWF0ZXJuaW9uKEwsRil9ZWxzZSBOPVouY2xvbmUoWi5JREVOVElUWSxOKSxGPVouY2xvbmUoWi5JREVOVElUWSxGKTtsZXQgST1KLmZyb21FbGVtZW50cyhOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFJUKSx2PUouZnJvbUVsZW1lbnRzKE51bWJlci5ORUdBVElWRV9JTkZJTklUWSxOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksU1QpLEI9dC5sZW5ndGgsQT1uP0I6MCxTPUEvMyoyO2ZvcihsZXQgTD0wO0w8QjtMKz0zKXtsZXQgej1MKzEsaj1MKzIsaz1hLmZyb21BcnJheSh0LEwsYWEpO2lmKG8uc3Qpe2xldCBxPVoubXVsdGlwbHlCeVZlY3RvcihOLGssXzApLFc9dy5wcm9qZWN0KGYuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMocSwkcCkseTApO2Euc3VidHJhY3QoVyxDLFcpLCRuLng9KFcueCtpKS8oMippKSwkbi55PShXLnkrcykvKDIqcyksSS54PU1hdGgubWluKCRuLngsSS54KSxJLnk9TWF0aC5taW4oJG4ueSxJLnkpLHYueD1NYXRoLm1heCgkbi54LHYueCksdi55PU1hdGgubWF4KCRuLnksdi55KSxuJiYocFtiK1NdPSRuLngscFtiKzErU109JG4ueSkscFtiKytdPSRuLngscFtiKytdPSRuLnl9KG8ubm9ybWFsfHxvLnRhbmdlbnR8fG8uYml0YW5nZW50fHxsKSYmKFQ9Zi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoayxUKSxsJiYoZ1tMK0FdPS1ULngsZ1t6K0FdPS1ULnksZ1tqK0FdPS1ULnopLChvLm5vcm1hbHx8by50YW5nZW50fHxvLmJpdGFuZ2VudCkmJigoby50YW5nZW50fHxvLmJpdGFuZ2VudCkmJihPPWEubm9ybWFsaXplKGEuY3Jvc3MoYS5VTklUX1osVCxPKSxPKSxaLm11bHRpcGx5QnlWZWN0b3IoRixPLE8pKSxvLm5vcm1hbCYmKGRbTF09VC54LGRbel09VC55LGRbal09VC56LG4mJihkW0wrQV09LVQueCxkW3orQV09LVQueSxkW2orQV09LVQueikpLG8udGFuZ2VudCYmKG1bTF09Ty54LG1bel09Ty55LG1bal09Ty56LG4mJihtW0wrQV09LU8ueCxtW3orQV09LU8ueSxtW2orQV09LU8ueikpLG8uYml0YW5nZW50JiYoRT1hLm5vcm1hbGl6ZShhLmNyb3NzKFQsTyxFKSxFKSxfW0xdPUUueCxfW3pdPUUueSxfW2pdPUUueixuJiYoX1tMK0FdPUUueCxfW3orQV09RS55LF9baitBXT1FLnopKSkpfWlmKG8uc3Qpe0I9cC5sZW5ndGg7Zm9yKGxldCBMPTA7TDxCO0wrPTIpcFtMXT0ocFtMXS1JLngpLyh2LngtSS54KSxwW0wrMV09KHBbTCsxXS1JLnkpLyh2LnktSS55KX1sZXQgeD1uZXcgaWU7aWYoby5wb3NpdGlvbil7bGV0IEw9R3IucmFpc2VQb3NpdGlvbnNUb0hlaWdodCh0LGUsbik7eC5wb3NpdGlvbj1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOkx9KX1pZihvLnN0JiYoeC5zdD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6cH0pKSxvLm5vcm1hbCYmKHgubm9ybWFsPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpkfSkpLG8udGFuZ2VudCYmKHgudGFuZ2VudD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6bX0pKSxvLmJpdGFuZ2VudCYmKHguYml0YW5nZW50PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpffSkpLGwmJih4LmV4dHJ1ZGVEaXJlY3Rpb249bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmd9KSksbiYmaChlLm9mZnNldEF0dHJpYnV0ZSkpe2xldCBMPW5ldyBVaW50OEFycmF5KGMpO2lmKGUub2Zmc2V0QXR0cmlidXRlPT09YWUuVE9QKUw9TC5maWxsKDEsMCxjLzIpO2Vsc2V7bGV0IHo9ZS5vZmZzZXRBdHRyaWJ1dGU9PT1hZS5OT05FPzA6MTtMPUwuZmlsbCh6KX14LmFwcGx5T2Zmc2V0PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOkx9KX1yZXR1cm4geH1mdW5jdGlvbiB4VCh0KXtsZXQgZT1uZXcgQXJyYXkoMTIqKHQqKHQrMSkpLTYpLG49MCxvLHIsaSxzLGY7Zm9yKG89MCxpPTEscz0wO3M8MztzKyspZVtuKytdPWkrKyxlW24rK109byxlW24rK109aTtmb3Iocz0yO3M8dCsxOysrcyl7Zm9yKGk9cyoocysxKS0xLG89KHMtMSkqcy0xLGVbbisrXT1pKyssZVtuKytdPW8sZVtuKytdPWkscj0yKnMsZj0wO2Y8ci0xOysrZillW24rK109aSxlW24rK109bysrLGVbbisrXT1vLGVbbisrXT1pKyssZVtuKytdPW8sZVtuKytdPWk7ZVtuKytdPWkrKyxlW24rK109byxlW24rK109aX1mb3Iocj10KjIsKytpLCsrbyxzPTA7czxyLTE7KytzKWVbbisrXT1pLGVbbisrXT1vKyssZVtuKytdPW8sZVtuKytdPWkrKyxlW24rK109byxlW24rK109aTtmb3IoZVtuKytdPWksZVtuKytdPW8rKyxlW24rK109byxlW24rK109aSsrLGVbbisrXT1vKyssZVtuKytdPW8sKytvLHM9dC0xO3M+MTstLXMpe2ZvcihlW24rK109bysrLGVbbisrXT1vLGVbbisrXT1pLHI9MipzLGY9MDtmPHItMTsrK2YpZVtuKytdPWksZVtuKytdPW8rKyxlW24rK109byxlW24rK109aSsrLGVbbisrXT1vLGVbbisrXT1pO2VbbisrXT1vKyssZVtuKytdPW8rKyxlW24rK109aSsrfWZvcihzPTA7czwzO3MrKyllW24rK109bysrLGVbbisrXT1vLGVbbisrXT1pO3JldHVybiBlfWZ1bmN0aW9uIEdNKHQpe2xldCBlPXQuY2VudGVyO2NjPWEubXVsdGlwbHlCeVNjYWxhcih0LmVsbGlwc29pZC5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoZSxjYyksdC5oZWlnaHQsY2MpLGNjPWEuYWRkKGUsY2MsY2MpO2xldCBuPW5ldyBndChjYyx0LnNlbWlNYWpvckF4aXMpLG89R3IuY29tcHV0ZUVsbGlwc2VQb3NpdGlvbnModCwhMCwhMSkscj1vLnBvc2l0aW9ucyxpPW8ubnVtUHRzLHM9Q1Qocix0LCExKSxmPXhUKGkpO3JldHVybiBmPUZ0LmNyZWF0ZVR5cGVkQXJyYXkoci5sZW5ndGgvMyxmKSx7Ym91bmRpbmdTcGhlcmU6bixhdHRyaWJ1dGVzOnMsaW5kaWNlczpmfX1mdW5jdGlvbiBWTSh0LGUpe2xldCBuPWUudmVydGV4Rm9ybWF0LG89ZS5jZW50ZXIscj1lLnNlbWlNYWpvckF4aXMsaT1lLnNlbWlNaW5vckF4aXMscz1lLmVsbGlwc29pZCxmPWUuaGVpZ2h0LHU9ZS5leHRydWRlZEhlaWdodCxjPWUuc3RSb3RhdGlvbixsPXQubGVuZ3RoLzMqMixwPW5ldyBGbG9hdDY0QXJyYXkobCozKSxkPW4uc3Q/bmV3IEZsb2F0MzJBcnJheShsKjIpOnZvaWQgMCxtPW4ubm9ybWFsP25ldyBGbG9hdDMyQXJyYXkobCozKTp2b2lkIDAsXz1uLnRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShsKjMpOnZvaWQgMCxnPW4uYml0YW5nZW50P25ldyBGbG9hdDMyQXJyYXkobCozKTp2b2lkIDAsYj1lLnNoYWRvd1ZvbHVtZSxUPWI/bmV3IEZsb2F0MzJBcnJheShsKjMpOnZvaWQgMCxPPTAsRT1UVCx3PXdULEM9T1QsTT1uZXcgSm4ocyksTj1NLnByb2plY3Qocy5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhvLCRwKSxFVCksRj1zLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UobyxhYSk7cy5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoRixGKTtsZXQgST10ZS5mcm9tQXhpc0FuZ2xlKEYsYyxnMCksdj1aLmZyb21RdWF0ZXJuaW9uKEksYlQpLEI9Si5mcm9tRWxlbWVudHMoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxSVCksQT1KLmZyb21FbGVtZW50cyhOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLFNUKSxTPXQubGVuZ3RoLHg9Uy8zKjI7Zm9yKGxldCB6PTA7ejxTO3orPTMpe2xldCBqPXorMSxrPXorMixxPWEuZnJvbUFycmF5KHQseixhYSksVztpZihuLnN0KXtsZXQgbnQ9Wi5tdWx0aXBseUJ5VmVjdG9yKHYscSxfMCksYXQ9TS5wcm9qZWN0KHMuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMobnQsJHApLHkwKTthLnN1YnRyYWN0KGF0LE4sYXQpLCRuLng9KGF0LngrcikvKDIqciksJG4ueT0oYXQueStpKS8oMippKSxCLng9TWF0aC5taW4oJG4ueCxCLngpLEIueT1NYXRoLm1pbigkbi55LEIueSksQS54PU1hdGgubWF4KCRuLngsQS54KSxBLnk9TWF0aC5tYXgoJG4ueSxBLnkpLGRbTyt4XT0kbi54LGRbTysxK3hdPSRuLnksZFtPKytdPSRuLngsZFtPKytdPSRuLnl9cT1zLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UocSxxKSxXPWEuY2xvbmUocSxfMCksRT1zLmdlb2RldGljU3VyZmFjZU5vcm1hbChxLEUpLGImJihUW3orU109LUUueCxUW2orU109LUUueSxUW2srU109LUUueik7bGV0IFI9YS5tdWx0aXBseUJ5U2NhbGFyKEUsZixBVCk7aWYocT1hLmFkZChxLFIscSksUj1hLm11bHRpcGx5QnlTY2FsYXIoRSx1LFIpLFc9YS5hZGQoVyxSLFcpLG4ucG9zaXRpb24mJihwW3orU109Vy54LHBbaitTXT1XLnkscFtrK1NdPVcueixwW3pdPXEueCxwW2pdPXEueSxwW2tdPXEueiksbi5ub3JtYWx8fG4udGFuZ2VudHx8bi5iaXRhbmdlbnQpe0M9YS5jbG9uZShFLEMpO2xldCBudD1hLmZyb21BcnJheSh0LCh6KzMpJVMsQVQpO2Euc3VidHJhY3QobnQscSxudCk7bGV0IGF0PWEuc3VidHJhY3QoVyxxLHkwKTtFPWEubm9ybWFsaXplKGEuY3Jvc3MoYXQsbnQsRSksRSksbi5ub3JtYWwmJihtW3pdPUUueCxtW2pdPUUueSxtW2tdPUUueixtW3orU109RS54LG1baitTXT1FLnksbVtrK1NdPUUueiksbi50YW5nZW50JiYodz1hLm5vcm1hbGl6ZShhLmNyb3NzKEMsRSx3KSx3KSxfW3pdPXcueCxfW2pdPXcueSxfW2tdPXcueixfW3orU109dy54LF9beisxK1NdPXcueSxfW3orMitTXT13LnopLG4uYml0YW5nZW50JiYoZ1t6XT1DLngsZ1tqXT1DLnksZ1trXT1DLnosZ1t6K1NdPUMueCxnW2orU109Qy55LGdbaytTXT1DLnopfX1pZihuLnN0KXtTPWQubGVuZ3RoO2ZvcihsZXQgej0wO3o8Uzt6Kz0yKWRbel09KGRbel0tQi54KS8oQS54LUIueCksZFt6KzFdPShkW3orMV0tQi55KS8oQS55LUIueSl9bGV0IEw9bmV3IGllO2lmKG4ucG9zaXRpb24mJihMLnBvc2l0aW9uPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6cH0pKSxuLnN0JiYoTC5zdD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6ZH0pKSxuLm5vcm1hbCYmKEwubm9ybWFsPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczptfSkpLG4udGFuZ2VudCYmKEwudGFuZ2VudD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6X30pKSxuLmJpdGFuZ2VudCYmKEwuYml0YW5nZW50PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpnfSkpLGImJihMLmV4dHJ1ZGVEaXJlY3Rpb249bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOlR9KSksaChlLm9mZnNldEF0dHJpYnV0ZSkpe2xldCB6PW5ldyBVaW50OEFycmF5KGwpO2lmKGUub2Zmc2V0QXR0cmlidXRlPT09YWUuVE9QKXo9ei5maWxsKDEsMCxsLzIpO2Vsc2V7bGV0IGo9ZS5vZmZzZXRBdHRyaWJ1dGU9PT1hZS5OT05FPzA6MTt6PXouZmlsbChqKX1MLmFwcGx5T2Zmc2V0PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOnp9KX1yZXR1cm4gTH1mdW5jdGlvbiB6TSh0KXtsZXQgZT10Lmxlbmd0aC8zLG49RnQuY3JlYXRlVHlwZWRBcnJheShlLGUqNiksbz0wO2ZvcihsZXQgcj0wO3I8ZTtyKyspe2xldCBpPXIscz1yK2UsZj0oaSsxKSVlLHU9ZitlO25bbysrXT1pLG5bbysrXT1zLG5bbysrXT1mLG5bbysrXT1mLG5bbysrXT1zLG5bbysrXT11fXJldHVybiBufWZ1bmN0aW9uIGpNKHQpe2xldCBlPXQuY2VudGVyLG49dC5lbGxpcHNvaWQsbz10LnNlbWlNYWpvckF4aXMscj1hLm11bHRpcGx5QnlTY2FsYXIobi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoZSxhYSksdC5oZWlnaHQsYWEpO1hwLmNlbnRlcj1hLmFkZChlLHIsWHAuY2VudGVyKSxYcC5yYWRpdXM9byxyPWEubXVsdGlwbHlCeVNjYWxhcihuLmdlb2RldGljU3VyZmFjZU5vcm1hbChlLHIpLHQuZXh0cnVkZWRIZWlnaHQsciksWXAuY2VudGVyPWEuYWRkKGUscixZcC5jZW50ZXIpLFlwLnJhZGl1cz1vO2xldCBpPUdyLmNvbXB1dGVFbGxpcHNlUG9zaXRpb25zKHQsITAsITApLHM9aS5wb3NpdGlvbnMsZj1pLm51bVB0cyx1PWkub3V0ZXJQb3NpdGlvbnMsYz1ndC51bmlvbihYcCxZcCksbD1DVChzLHQsITApLHA9eFQoZiksZD1wLmxlbmd0aDtwLmxlbmd0aD1kKjI7bGV0IG09cy5sZW5ndGgvMztmb3IobGV0IHc9MDt3PGQ7dys9MylwW3crZF09cFt3KzJdK20scFt3KzErZF09cFt3KzFdK20scFt3KzIrZF09cFt3XSttO2xldCBfPUZ0LmNyZWF0ZVR5cGVkQXJyYXkobSoyLzMscCksZz1uZXcgQnQoe2F0dHJpYnV0ZXM6bCxpbmRpY2VzOl8scHJpbWl0aXZlVHlwZTpEdC5UUklBTkdMRVN9KSxiPVZNKHUsdCk7cD16TSh1KTtsZXQgVD1GdC5jcmVhdGVUeXBlZEFycmF5KHUubGVuZ3RoKjIvMyxwKSxPPW5ldyBCdCh7YXR0cmlidXRlczpiLGluZGljZXM6VCxwcmltaXRpdmVUeXBlOkR0LlRSSUFOR0xFU30pLEU9a2UuY29tYmluZUluc3RhbmNlcyhbbmV3IGNvKHtnZW9tZXRyeTpnfSksbmV3IGNvKHtnZW9tZXRyeTpPfSldKTtyZXR1cm57Ym91bmRpbmdTcGhlcmU6YyxhdHRyaWJ1dGVzOkVbMF0uYXR0cmlidXRlcyxpbmRpY2VzOkVbMF0uaW5kaWNlc319ZnVuY3Rpb24gUFQodCxlLG4sbyxyLGkscyl7bGV0IHU9R3IuY29tcHV0ZUVsbGlwc2VQb3NpdGlvbnMoe2NlbnRlcjp0LHNlbWlNYWpvckF4aXM6ZSxzZW1pTWlub3JBeGlzOm4scm90YXRpb246byxncmFudWxhcml0eTpyfSwhMSwhMCkub3V0ZXJQb3NpdGlvbnMsYz11Lmxlbmd0aC8zLGw9bmV3IEFycmF5KGMpO2ZvcihsZXQgZD0wO2Q8YzsrK2QpbFtkXT1hLmZyb21BcnJheSh1LGQqMyk7bGV0IHA9TnQuZnJvbUNhcnRlc2lhbkFycmF5KGwsaSxzKTtyZXR1cm4gcC53aWR0aD5QLlBJJiYocC5ub3J0aD1wLm5vcnRoPjA/UC5QSV9PVkVSX1RXTy1QLkVQU0lMT043OnAubm9ydGgscC5zb3V0aD1wLnNvdXRoPDA/UC5FUFNJTE9ONy1QLlBJX09WRVJfVFdPOnAuc291dGgscC5lYXN0PVAuUEkscC53ZXN0PS1QLlBJKSxwfWZ1bmN0aW9uIGZpKHQpe3Q9dD8/SXQuRU1QVFlfT0JKRUNUO2xldCBlPXQuY2VudGVyLG49dC5lbGxpcHNvaWQ/P1kuZGVmYXVsdCxvPXQuc2VtaU1ham9yQXhpcyxyPXQuc2VtaU1pbm9yQXhpcyxpPXQuZ3JhbnVsYXJpdHk/P1AuUkFESUFOU19QRVJfREVHUkVFLHM9dC52ZXJ0ZXhGb3JtYXQ/P3B0LkRFRkFVTFQ7aWYoeS5kZWZpbmVkKCJvcHRpb25zLmNlbnRlciIsZSkseS50eXBlT2YubnVtYmVyKCJvcHRpb25zLnNlbWlNYWpvckF4aXMiLG8pLHkudHlwZU9mLm51bWJlcigib3B0aW9ucy5zZW1pTWlub3JBeGlzIixyKSxvPHIpdGhyb3cgbmV3IEQoInNlbWlNYWpvckF4aXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNlbWlNaW5vckF4aXMuIik7aWYoaTw9MCl0aHJvdyBuZXcgRCgiZ3JhbnVsYXJpdHkgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4iKTtsZXQgZj10LmhlaWdodD8/MCx1PXQuZXh0cnVkZWRIZWlnaHQ/P2Y7dGhpcy5fY2VudGVyPWEuY2xvbmUoZSksdGhpcy5fc2VtaU1ham9yQXhpcz1vLHRoaXMuX3NlbWlNaW5vckF4aXM9cix0aGlzLl9lbGxpcHNvaWQ9WS5jbG9uZShuKSx0aGlzLl9yb3RhdGlvbj10LnJvdGF0aW9uPz8wLHRoaXMuX3N0Um90YXRpb249dC5zdFJvdGF0aW9uPz8wLHRoaXMuX2hlaWdodD1NYXRoLm1heCh1LGYpLHRoaXMuX2dyYW51bGFyaXR5PWksdGhpcy5fdmVydGV4Rm9ybWF0PXB0LmNsb25lKHMpLHRoaXMuX2V4dHJ1ZGVkSGVpZ2h0PU1hdGgubWluKHUsZiksdGhpcy5fc2hhZG93Vm9sdW1lPXQuc2hhZG93Vm9sdW1lPz8hMSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVFbGxpcHNlR2VvbWV0cnkiLHRoaXMuX29mZnNldEF0dHJpYnV0ZT10Lm9mZnNldEF0dHJpYnV0ZSx0aGlzLl9yZWN0YW5nbGU9dm9pZCAwLHRoaXMuX3RleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHM9dm9pZCAwfWZ1bmN0aW9uIEhNKHQpe2xldCBlPS10Ll9zdFJvdGF0aW9uO2lmKGU9PT0wKXJldHVyblswLDAsMCwxLDEsMF07bGV0IG89R3IuY29tcHV0ZUVsbGlwc2VQb3NpdGlvbnMoe2NlbnRlcjp0Ll9jZW50ZXIsc2VtaU1ham9yQXhpczp0Ll9zZW1pTWFqb3JBeGlzLHNlbWlNaW5vckF4aXM6dC5fc2VtaU1pbm9yQXhpcyxyb3RhdGlvbjp0Ll9yb3RhdGlvbixncmFudWxhcml0eTp0Ll9ncmFudWxhcml0eX0sITEsITApLm91dGVyUG9zaXRpb25zLHI9by5sZW5ndGgvMyxpPW5ldyBBcnJheShyKTtmb3IobGV0IHU9MDt1PHI7Kyt1KWlbdV09YS5mcm9tQXJyYXkobyx1KjMpO2xldCBzPXQuX2VsbGlwc29pZCxmPXQucmVjdGFuZ2xlO3JldHVybiBCdC5fdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50cyhpLGUscyxmKX12YXIgYWEsXzAseTAsQVQsJG4sYlQsa00sZzAsVFQsd1QsT1QsJHAsRVQsUlQsU1QsY2MsWHAsWXAsTVQsTlQsSVQsYWksVnIsQTA9JCgoKT0+e3ZlKCk7VWUoKTtMdCgpO0llKCk7V3QoKTtEZSgpO3llKCk7ZnQoKTtqdCgpO2gwKCk7JHQoKTtTaSgpO1hlKCk7WWUoKTthbigpO3NjKCk7Rm8oKTtzaSgpOyRlKCk7S3QoKTtCbigpO3RuKCk7S28oKTt3bigpO1JvKCk7YWE9bmV3IGEsXzA9bmV3IGEseTA9bmV3IGEsQVQ9bmV3IGEsJG49bmV3IEosYlQ9bmV3IFosa009bmV3IFosZzA9bmV3IHRlLFRUPW5ldyBhLHdUPW5ldyBhLE9UPW5ldyBhLCRwPW5ldyBjdCxFVD1uZXcgYSxSVD1uZXcgSixTVD1uZXcgSjtjYz1uZXcgYTtYcD1uZXcgZ3QsWXA9bmV3IGd0O2ZpLnBhY2tlZExlbmd0aD1hLnBhY2tlZExlbmd0aCtZLnBhY2tlZExlbmd0aCtwdC5wYWNrZWRMZW5ndGgrOTtmaS5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS5kZWZpbmVkKCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj1uPz8wLGEucGFjayh0Ll9jZW50ZXIsZSxuKSxuKz1hLnBhY2tlZExlbmd0aCxZLnBhY2sodC5fZWxsaXBzb2lkLGUsbiksbis9WS5wYWNrZWRMZW5ndGgscHQucGFjayh0Ll92ZXJ0ZXhGb3JtYXQsZSxuKSxuKz1wdC5wYWNrZWRMZW5ndGgsZVtuKytdPXQuX3NlbWlNYWpvckF4aXMsZVtuKytdPXQuX3NlbWlNaW5vckF4aXMsZVtuKytdPXQuX3JvdGF0aW9uLGVbbisrXT10Ll9zdFJvdGF0aW9uLGVbbisrXT10Ll9oZWlnaHQsZVtuKytdPXQuX2dyYW51bGFyaXR5LGVbbisrXT10Ll9leHRydWRlZEhlaWdodCxlW24rK109dC5fc2hhZG93Vm9sdW1lPzE6MCxlW25dPXQuX29mZnNldEF0dHJpYnV0ZT8/LTEsZX07TVQ9bmV3IGEsTlQ9bmV3IFksSVQ9bmV3IHB0LGFpPXtjZW50ZXI6TVQsZWxsaXBzb2lkOk5ULHZlcnRleEZvcm1hdDpJVCxzZW1pTWFqb3JBeGlzOnZvaWQgMCxzZW1pTWlub3JBeGlzOnZvaWQgMCxyb3RhdGlvbjp2b2lkIDAsc3RSb3RhdGlvbjp2b2lkIDAsaGVpZ2h0OnZvaWQgMCxncmFudWxhcml0eTp2b2lkIDAsZXh0cnVkZWRIZWlnaHQ6dm9pZCAwLHNoYWRvd1ZvbHVtZTp2b2lkIDAsb2Zmc2V0QXR0cmlidXRlOnZvaWQgMH07ZmkudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LmRlZmluZWQoImFycmF5Iix0KSxlPWU/PzA7bGV0IG89YS51bnBhY2sodCxlLE1UKTtlKz1hLnBhY2tlZExlbmd0aDtsZXQgcj1ZLnVucGFjayh0LGUsTlQpO2UrPVkucGFja2VkTGVuZ3RoO2xldCBpPXB0LnVucGFjayh0LGUsSVQpO2UrPXB0LnBhY2tlZExlbmd0aDtsZXQgcz10W2UrK10sZj10W2UrK10sdT10W2UrK10sYz10W2UrK10sbD10W2UrK10scD10W2UrK10sZD10W2UrK10sbT10W2UrK109PT0xLF89dFtlXTtyZXR1cm4gaChuKT8obi5fY2VudGVyPWEuY2xvbmUobyxuLl9jZW50ZXIpLG4uX2VsbGlwc29pZD1ZLmNsb25lKHIsbi5fZWxsaXBzb2lkKSxuLl92ZXJ0ZXhGb3JtYXQ9cHQuY2xvbmUoaSxuLl92ZXJ0ZXhGb3JtYXQpLG4uX3NlbWlNYWpvckF4aXM9cyxuLl9zZW1pTWlub3JBeGlzPWYsbi5fcm90YXRpb249dSxuLl9zdFJvdGF0aW9uPWMsbi5faGVpZ2h0PWwsbi5fZ3JhbnVsYXJpdHk9cCxuLl9leHRydWRlZEhlaWdodD1kLG4uX3NoYWRvd1ZvbHVtZT1tLG4uX29mZnNldEF0dHJpYnV0ZT1fPT09LTE/dm9pZCAwOl8sbik6KGFpLmhlaWdodD1sLGFpLmV4dHJ1ZGVkSGVpZ2h0PWQsYWkuZ3JhbnVsYXJpdHk9cCxhaS5zdFJvdGF0aW9uPWMsYWkucm90YXRpb249dSxhaS5zZW1pTWFqb3JBeGlzPXMsYWkuc2VtaU1pbm9yQXhpcz1mLGFpLnNoYWRvd1ZvbHVtZT1tLGFpLm9mZnNldEF0dHJpYnV0ZT1fPT09LTE/dm9pZCAwOl8sbmV3IGZpKGFpKSl9O2ZpLmNvbXB1dGVSZWN0YW5nbGU9ZnVuY3Rpb24odCxlKXt0PXQ/P0l0LkVNUFRZX09CSkVDVDtsZXQgbj10LmNlbnRlcixvPXQuZWxsaXBzb2lkPz9ZLmRlZmF1bHQscj10LnNlbWlNYWpvckF4aXMsaT10LnNlbWlNaW5vckF4aXMscz10LmdyYW51bGFyaXR5Pz9QLlJBRElBTlNfUEVSX0RFR1JFRSxmPXQucm90YXRpb24/PzA7aWYoeS5kZWZpbmVkKCJvcHRpb25zLmNlbnRlciIsbikseS50eXBlT2YubnVtYmVyKCJvcHRpb25zLnNlbWlNYWpvckF4aXMiLHIpLHkudHlwZU9mLm51bWJlcigib3B0aW9ucy5zZW1pTWlub3JBeGlzIixpKSxyPGkpdGhyb3cgbmV3IEQoInNlbWlNYWpvckF4aXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNlbWlNaW5vckF4aXMuIik7aWYoczw9MCl0aHJvdyBuZXcgRCgiZ3JhbnVsYXJpdHkgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4iKTtyZXR1cm4gUFQobixyLGksZixzLG8sZSl9O2ZpLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2lmKHQuX3NlbWlNYWpvckF4aXM8PTB8fHQuX3NlbWlNaW5vckF4aXM8PTApcmV0dXJuO2xldCBlPXQuX2hlaWdodCxuPXQuX2V4dHJ1ZGVkSGVpZ2h0LG89IVAuZXF1YWxzRXBzaWxvbihlLG4sMCxQLkVQU0lMT04yKTt0Ll9jZW50ZXI9dC5fZWxsaXBzb2lkLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UodC5fY2VudGVyLHQuX2NlbnRlcik7bGV0IHI9e2NlbnRlcjp0Ll9jZW50ZXIsc2VtaU1ham9yQXhpczp0Ll9zZW1pTWFqb3JBeGlzLHNlbWlNaW5vckF4aXM6dC5fc2VtaU1pbm9yQXhpcyxlbGxpcHNvaWQ6dC5fZWxsaXBzb2lkLHJvdGF0aW9uOnQuX3JvdGF0aW9uLGhlaWdodDplLGdyYW51bGFyaXR5OnQuX2dyYW51bGFyaXR5LHZlcnRleEZvcm1hdDp0Ll92ZXJ0ZXhGb3JtYXQsc3RSb3RhdGlvbjp0Ll9zdFJvdGF0aW9ufSxpO2lmKG8pci5leHRydWRlZEhlaWdodD1uLHIuc2hhZG93Vm9sdW1lPXQuX3NoYWRvd1ZvbHVtZSxyLm9mZnNldEF0dHJpYnV0ZT10Ll9vZmZzZXRBdHRyaWJ1dGUsaT1qTShyKTtlbHNlIGlmKGk9R00ociksaCh0Ll9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgcz1pLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aCxmPXQuX29mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxLHU9bmV3IFVpbnQ4QXJyYXkocy8zKS5maWxsKGYpO2kuYXR0cmlidXRlcy5hcHBseU9mZnNldD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczp1fSl9cmV0dXJuIG5ldyBCdCh7YXR0cmlidXRlczppLmF0dHJpYnV0ZXMsaW5kaWNlczppLmluZGljZXMscHJpbWl0aXZlVHlwZTpEdC5UUklBTkdMRVMsYm91bmRpbmdTcGhlcmU6aS5ib3VuZGluZ1NwaGVyZSxvZmZzZXRBdHRyaWJ1dGU6dC5fb2Zmc2V0QXR0cmlidXRlfSl9O2ZpLmNyZWF0ZVNoYWRvd1ZvbHVtZT1mdW5jdGlvbih0LGUsbil7bGV0IG89dC5fZ3JhbnVsYXJpdHkscj10Ll9lbGxpcHNvaWQsaT1lKG8scikscz1uKG8scik7cmV0dXJuIG5ldyBmaSh7Y2VudGVyOnQuX2NlbnRlcixzZW1pTWFqb3JBeGlzOnQuX3NlbWlNYWpvckF4aXMsc2VtaU1pbm9yQXhpczp0Ll9zZW1pTWlub3JBeGlzLGVsbGlwc29pZDpyLHJvdGF0aW9uOnQuX3JvdGF0aW9uLHN0Um90YXRpb246dC5fc3RSb3RhdGlvbixncmFudWxhcml0eTpvLGV4dHJ1ZGVkSGVpZ2h0OmksaGVpZ2h0OnMsdmVydGV4Rm9ybWF0OnB0LlBPU0lUSU9OX09OTFksc2hhZG93Vm9sdW1lOiEwfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGZpLnByb3RvdHlwZSx7cmVjdGFuZ2xlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaCh0aGlzLl9yZWN0YW5nbGUpfHwodGhpcy5fcmVjdGFuZ2xlPVBUKHRoaXMuX2NlbnRlcix0aGlzLl9zZW1pTWFqb3JBeGlzLHRoaXMuX3NlbWlNaW5vckF4aXMsdGhpcy5fcm90YXRpb24sdGhpcy5fZ3JhbnVsYXJpdHksdGhpcy5fZWxsaXBzb2lkKSksdGhpcy5fcmVjdGFuZ2xlfX0sdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50czp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGgodGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50cyl8fCh0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzPUhNKHRoaXMpKSx0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzfX19KTtWcj1maX0pO2Z1bmN0aW9uIHZpKHQpe3Q9dD8/SXQuRU1QVFlfT0JKRUNUO2xldCBlPXQucmFkaXVzO3kudHlwZU9mLm51bWJlcigicmFkaXVzIixlKTtsZXQgbj17Y2VudGVyOnQuY2VudGVyLHNlbWlNYWpvckF4aXM6ZSxzZW1pTWlub3JBeGlzOmUsZWxsaXBzb2lkOnQuZWxsaXBzb2lkLGhlaWdodDp0LmhlaWdodCxleHRydWRlZEhlaWdodDp0LmV4dHJ1ZGVkSGVpZ2h0LGdyYW51bGFyaXR5OnQuZ3JhbnVsYXJpdHksdmVydGV4Rm9ybWF0OnQudmVydGV4Rm9ybWF0LHN0Um90YXRpb246dC5zdFJvdGF0aW9uLHNoYWRvd1ZvbHVtZTp0LnNoYWRvd1ZvbHVtZX07dGhpcy5fZWxsaXBzZUdlb21ldHJ5PW5ldyBWcihuKSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVDaXJjbGVHZW9tZXRyeSJ9dmFyIHZULF9vLGIwLEZUPSQoKCk9PntMdCgpO1d0KCk7eWUoKTtmdCgpO0EwKCk7JHQoKTtSbygpO3ZpLnBhY2tlZExlbmd0aD1Wci5wYWNrZWRMZW5ndGg7dmkucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLFZyLnBhY2sodC5fZWxsaXBzZUdlb21ldHJ5LGUsbil9O3ZUPW5ldyBWcih7Y2VudGVyOm5ldyBhLHNlbWlNYWpvckF4aXM6MSxzZW1pTWlub3JBeGlzOjF9KSxfbz17Y2VudGVyOm5ldyBhLHJhZGl1czp2b2lkIDAsZWxsaXBzb2lkOlkuY2xvbmUoWS5kZWZhdWx0KSxoZWlnaHQ6dm9pZCAwLGV4dHJ1ZGVkSGVpZ2h0OnZvaWQgMCxncmFudWxhcml0eTp2b2lkIDAsdmVydGV4Rm9ybWF0Om5ldyBwdCxzdFJvdGF0aW9uOnZvaWQgMCxzZW1pTWFqb3JBeGlzOnZvaWQgMCxzZW1pTWlub3JBeGlzOnZvaWQgMCxzaGFkb3dWb2x1bWU6dm9pZCAwfTt2aS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe2xldCBvPVZyLnVucGFjayh0LGUsdlQpO3JldHVybiBfby5jZW50ZXI9YS5jbG9uZShvLl9jZW50ZXIsX28uY2VudGVyKSxfby5lbGxpcHNvaWQ9WS5jbG9uZShvLl9lbGxpcHNvaWQsX28uZWxsaXBzb2lkKSxfby5lbGxpcHNvaWQ9WS5jbG9uZShvLl9lbGxpcHNvaWQsdlQuX2VsbGlwc29pZCksX28uaGVpZ2h0PW8uX2hlaWdodCxfby5leHRydWRlZEhlaWdodD1vLl9leHRydWRlZEhlaWdodCxfby5ncmFudWxhcml0eT1vLl9ncmFudWxhcml0eSxfby52ZXJ0ZXhGb3JtYXQ9cHQuY2xvbmUoby5fdmVydGV4Rm9ybWF0LF9vLnZlcnRleEZvcm1hdCksX28uc3RSb3RhdGlvbj1vLl9zdFJvdGF0aW9uLF9vLnNoYWRvd1ZvbHVtZT1vLl9zaGFkb3dWb2x1bWUsaChuKT8oX28uc2VtaU1ham9yQXhpcz1vLl9zZW1pTWFqb3JBeGlzLF9vLnNlbWlNaW5vckF4aXM9by5fc2VtaU1pbm9yQXhpcyxuLl9lbGxpcHNlR2VvbWV0cnk9bmV3IFZyKF9vKSxuKTooX28ucmFkaXVzPW8uX3NlbWlNYWpvckF4aXMsbmV3IHZpKF9vKSl9O3ZpLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe3JldHVybiBWci5jcmVhdGVHZW9tZXRyeSh0Ll9lbGxpcHNlR2VvbWV0cnkpfTt2aS5jcmVhdGVTaGFkb3dWb2x1bWU9ZnVuY3Rpb24odCxlLG4pe2xldCBvPXQuX2VsbGlwc2VHZW9tZXRyeS5fZ3JhbnVsYXJpdHkscj10Ll9lbGxpcHNlR2VvbWV0cnkuX2VsbGlwc29pZCxpPWUobyxyKSxzPW4obyxyKTtyZXR1cm4gbmV3IHZpKHtjZW50ZXI6dC5fZWxsaXBzZUdlb21ldHJ5Ll9jZW50ZXIscmFkaXVzOnQuX2VsbGlwc2VHZW9tZXRyeS5fc2VtaU1ham9yQXhpcyxlbGxpcHNvaWQ6cixzdFJvdGF0aW9uOnQuX2VsbGlwc2VHZW9tZXRyeS5fc3RSb3RhdGlvbixncmFudWxhcml0eTpvLGV4dHJ1ZGVkSGVpZ2h0OmksaGVpZ2h0OnMsdmVydGV4Rm9ybWF0OnB0LlBPU0lUSU9OX09OTFksc2hhZG93Vm9sdW1lOiEwfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHZpLnByb3RvdHlwZSx7cmVjdGFuZ2xlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxsaXBzZUdlb21ldHJ5LnJlY3RhbmdsZX19LHRleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGxpcHNlR2VvbWV0cnkudGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50c319fSk7YjA9dml9KTt2YXIgVDA9e307ZGUoVDAse2RlZmF1bHQ6KCk9PktNfSk7ZnVuY3Rpb24gcU0odCxlKXtyZXR1cm4gaChlKSYmKHQ9YjAudW5wYWNrKHQsZSkpLHQuX2VsbGlwc2VHZW9tZXRyeS5fY2VudGVyPWEuY2xvbmUodC5fZWxsaXBzZUdlb21ldHJ5Ll9jZW50ZXIpLHQuX2VsbGlwc2VHZW9tZXRyeS5fZWxsaXBzb2lkPVkuY2xvbmUodC5fZWxsaXBzZUdlb21ldHJ5Ll9lbGxpcHNvaWQpLGIwLmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBLTSx3MD0kKCgpPT57THQoKTtGVCgpO2Z0KCk7JHQoKTtLTT1xTX0pO2Z1bmN0aW9uIFdNKHQpe2xldCBlPXQuY2VudGVyO2FjPWEubXVsdGlwbHlCeVNjYWxhcih0LmVsbGlwc29pZC5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoZSxhYyksdC5oZWlnaHQsYWMpLGFjPWEuYWRkKGUsYWMsYWMpO2xldCBuPW5ldyBndChhYyx0LnNlbWlNYWpvckF4aXMpLG89R3IuY29tcHV0ZUVsbGlwc2VQb3NpdGlvbnModCwhMSwhMCkub3V0ZXJQb3NpdGlvbnMscj1uZXcgaWUoe3Bvc2l0aW9uOm5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6R3IucmFpc2VQb3NpdGlvbnNUb0hlaWdodChvLHQsITEpfSl9KSxpPW8ubGVuZ3RoLzMscz1GdC5jcmVhdGVUeXBlZEFycmF5KGksaSoyKSxmPTA7Zm9yKGxldCB1PTA7dTxpOysrdSlzW2YrK109dSxzW2YrK109KHUrMSklaTtyZXR1cm57Ym91bmRpbmdTcGhlcmU6bixhdHRyaWJ1dGVzOnIsaW5kaWNlczpzfX1mdW5jdGlvbiBYTSh0KXtsZXQgZT10LmNlbnRlcixuPXQuZWxsaXBzb2lkLG89dC5zZW1pTWFqb3JBeGlzLHI9YS5tdWx0aXBseUJ5U2NhbGFyKG4uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGUsTFQpLHQuaGVpZ2h0LExUKTtacC5jZW50ZXI9YS5hZGQoZSxyLFpwLmNlbnRlciksWnAucmFkaXVzPW8scj1hLm11bHRpcGx5QnlTY2FsYXIobi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoZSxyKSx0LmV4dHJ1ZGVkSGVpZ2h0LHIpLFFwLmNlbnRlcj1hLmFkZChlLHIsUXAuY2VudGVyKSxRcC5yYWRpdXM9bztsZXQgaT1Hci5jb21wdXRlRWxsaXBzZVBvc2l0aW9ucyh0LCExLCEwKS5vdXRlclBvc2l0aW9ucyxzPW5ldyBpZSh7cG9zaXRpb246bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpHci5yYWlzZVBvc2l0aW9uc1RvSGVpZ2h0KGksdCwhMCl9KX0pO2k9cy5wb3NpdGlvbi52YWx1ZXM7bGV0IGY9Z3QudW5pb24oWnAsUXApLHU9aS5sZW5ndGgvMztpZihoKHQub2Zmc2V0QXR0cmlidXRlKSl7bGV0IF89bmV3IFVpbnQ4QXJyYXkodSk7aWYodC5vZmZzZXRBdHRyaWJ1dGU9PT1hZS5UT1ApXz1fLmZpbGwoMSwwLHUvMik7ZWxzZXtsZXQgZz10Lm9mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxO189Xy5maWxsKGcpfXMuYXBwbHlPZmZzZXQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6X30pfWxldCBjPXQubnVtYmVyT2ZWZXJ0aWNhbExpbmVzPz8xNjtjPVAuY2xhbXAoYywwLHUvMik7bGV0IGw9RnQuY3JlYXRlVHlwZWRBcnJheSh1LHUqMitjKjIpO3UvPTI7bGV0IHA9MCxkO2ZvcihkPTA7ZDx1OysrZClsW3ArK109ZCxsW3ArK109KGQrMSkldSxsW3ArK109ZCt1LGxbcCsrXT0oZCsxKSV1K3U7bGV0IG07aWYoYz4wKXtsZXQgXz1NYXRoLm1pbihjLHUpO209TWF0aC5yb3VuZCh1L18pO2xldCBnPU1hdGgubWluKG0qYyx1KTtmb3IoZD0wO2Q8ZztkKz1tKWxbcCsrXT1kLGxbcCsrXT1kK3V9cmV0dXJue2JvdW5kaW5nU3BoZXJlOmYsYXR0cmlidXRlczpzLGluZGljZXM6bH19ZnVuY3Rpb24gZmEodCl7dD10Pz9JdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC5jZW50ZXIsbj10LmVsbGlwc29pZD8/WS5kZWZhdWx0LG89dC5zZW1pTWFqb3JBeGlzLHI9dC5zZW1pTWlub3JBeGlzLGk9dC5ncmFudWxhcml0eT8/UC5SQURJQU5TX1BFUl9ERUdSRUU7aWYoIWgoZSkpdGhyb3cgbmV3IEQoImNlbnRlciBpcyByZXF1aXJlZC4iKTtpZighaChvKSl0aHJvdyBuZXcgRCgic2VtaU1ham9yQXhpcyBpcyByZXF1aXJlZC4iKTtpZighaChyKSl0aHJvdyBuZXcgRCgic2VtaU1pbm9yQXhpcyBpcyByZXF1aXJlZC4iKTtpZihvPHIpdGhyb3cgbmV3IEQoInNlbWlNYWpvckF4aXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNlbWlNaW5vckF4aXMuIik7aWYoaTw9MCl0aHJvdyBuZXcgRCgiZ3JhbnVsYXJpdHkgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4iKTtsZXQgcz10LmhlaWdodD8/MCxmPXQuZXh0cnVkZWRIZWlnaHQ/P3M7dGhpcy5fY2VudGVyPWEuY2xvbmUoZSksdGhpcy5fc2VtaU1ham9yQXhpcz1vLHRoaXMuX3NlbWlNaW5vckF4aXM9cix0aGlzLl9lbGxpcHNvaWQ9WS5jbG9uZShuKSx0aGlzLl9yb3RhdGlvbj10LnJvdGF0aW9uPz8wLHRoaXMuX2hlaWdodD1NYXRoLm1heChmLHMpLHRoaXMuX2dyYW51bGFyaXR5PWksdGhpcy5fZXh0cnVkZWRIZWlnaHQ9TWF0aC5taW4oZixzKSx0aGlzLl9udW1iZXJPZlZlcnRpY2FsTGluZXM9TWF0aC5tYXgodC5udW1iZXJPZlZlcnRpY2FsTGluZXM/PzE2LDApLHRoaXMuX29mZnNldEF0dHJpYnV0ZT10Lm9mZnNldEF0dHJpYnV0ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVFbGxpcHNlT3V0bGluZUdlb21ldHJ5In12YXIgTFQsYWMsWnAsUXAsRFQsQlQsRmksenIsTzA9JCgoKT0+e3ZlKCk7THQoKTtEZSgpO3llKCk7ZnQoKTtqdCgpO2gwKCk7JHQoKTtYZSgpO1llKCk7YW4oKTtGbygpOyRlKCk7S3QoKTt0bigpO0xUPW5ldyBhLGFjPW5ldyBhO1pwPW5ldyBndCxRcD1uZXcgZ3Q7ZmEucGFja2VkTGVuZ3RoPWEucGFja2VkTGVuZ3RoK1kucGFja2VkTGVuZ3RoKzg7ZmEucGFjaz1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEQoInZhbHVlIGlzIHJlcXVpcmVkIik7aWYoIWgoZSkpdGhyb3cgbmV3IEQoImFycmF5IGlzIHJlcXVpcmVkIik7cmV0dXJuIG49bj8/MCxhLnBhY2sodC5fY2VudGVyLGUsbiksbis9YS5wYWNrZWRMZW5ndGgsWS5wYWNrKHQuX2VsbGlwc29pZCxlLG4pLG4rPVkucGFja2VkTGVuZ3RoLGVbbisrXT10Ll9zZW1pTWFqb3JBeGlzLGVbbisrXT10Ll9zZW1pTWlub3JBeGlzLGVbbisrXT10Ll9yb3RhdGlvbixlW24rK109dC5faGVpZ2h0LGVbbisrXT10Ll9ncmFudWxhcml0eSxlW24rK109dC5fZXh0cnVkZWRIZWlnaHQsZVtuKytdPXQuX251bWJlck9mVmVydGljYWxMaW5lcyxlW25dPXQuX29mZnNldEF0dHJpYnV0ZT8/LTEsZX07RFQ9bmV3IGEsQlQ9bmV3IFksRmk9e2NlbnRlcjpEVCxlbGxpcHNvaWQ6QlQsc2VtaU1ham9yQXhpczp2b2lkIDAsc2VtaU1pbm9yQXhpczp2b2lkIDAscm90YXRpb246dm9pZCAwLGhlaWdodDp2b2lkIDAsZ3JhbnVsYXJpdHk6dm9pZCAwLGV4dHJ1ZGVkSGVpZ2h0OnZvaWQgMCxudW1iZXJPZlZlcnRpY2FsTGluZXM6dm9pZCAwLG9mZnNldEF0dHJpYnV0ZTp2b2lkIDB9O2ZhLnVucGFjaz1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEQoImFycmF5IGlzIHJlcXVpcmVkIik7ZT1lPz8wO2xldCBvPWEudW5wYWNrKHQsZSxEVCk7ZSs9YS5wYWNrZWRMZW5ndGg7bGV0IHI9WS51bnBhY2sodCxlLEJUKTtlKz1ZLnBhY2tlZExlbmd0aDtsZXQgaT10W2UrK10scz10W2UrK10sZj10W2UrK10sdT10W2UrK10sYz10W2UrK10sbD10W2UrK10scD10W2UrK10sZD10W2VdO3JldHVybiBoKG4pPyhuLl9jZW50ZXI9YS5jbG9uZShvLG4uX2NlbnRlciksbi5fZWxsaXBzb2lkPVkuY2xvbmUocixuLl9lbGxpcHNvaWQpLG4uX3NlbWlNYWpvckF4aXM9aSxuLl9zZW1pTWlub3JBeGlzPXMsbi5fcm90YXRpb249ZixuLl9oZWlnaHQ9dSxuLl9ncmFudWxhcml0eT1jLG4uX2V4dHJ1ZGVkSGVpZ2h0PWwsbi5fbnVtYmVyT2ZWZXJ0aWNhbExpbmVzPXAsbi5fb2Zmc2V0QXR0cmlidXRlPWQ9PT0tMT92b2lkIDA6ZCxuKTooRmkuaGVpZ2h0PXUsRmkuZXh0cnVkZWRIZWlnaHQ9bCxGaS5ncmFudWxhcml0eT1jLEZpLnJvdGF0aW9uPWYsRmkuc2VtaU1ham9yQXhpcz1pLEZpLnNlbWlNaW5vckF4aXM9cyxGaS5udW1iZXJPZlZlcnRpY2FsTGluZXM9cCxGaS5vZmZzZXRBdHRyaWJ1dGU9ZD09PS0xP3ZvaWQgMDpkLG5ldyBmYShGaSkpfTtmYS5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbih0KXtpZih0Ll9zZW1pTWFqb3JBeGlzPD0wfHx0Ll9zZW1pTWlub3JBeGlzPD0wKXJldHVybjtsZXQgZT10Ll9oZWlnaHQsbj10Ll9leHRydWRlZEhlaWdodCxvPSFQLmVxdWFsc0Vwc2lsb24oZSxuLDAsUC5FUFNJTE9OMik7dC5fY2VudGVyPXQuX2VsbGlwc29pZC5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKHQuX2NlbnRlcix0Ll9jZW50ZXIpO2xldCByPXtjZW50ZXI6dC5fY2VudGVyLHNlbWlNYWpvckF4aXM6dC5fc2VtaU1ham9yQXhpcyxzZW1pTWlub3JBeGlzOnQuX3NlbWlNaW5vckF4aXMsZWxsaXBzb2lkOnQuX2VsbGlwc29pZCxyb3RhdGlvbjp0Ll9yb3RhdGlvbixoZWlnaHQ6ZSxncmFudWxhcml0eTp0Ll9ncmFudWxhcml0eSxudW1iZXJPZlZlcnRpY2FsTGluZXM6dC5fbnVtYmVyT2ZWZXJ0aWNhbExpbmVzfSxpO2lmKG8pci5leHRydWRlZEhlaWdodD1uLHIub2Zmc2V0QXR0cmlidXRlPXQuX29mZnNldEF0dHJpYnV0ZSxpPVhNKHIpO2Vsc2UgaWYoaT1XTShyKSxoKHQuX29mZnNldEF0dHJpYnV0ZSkpe2xldCBzPWkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoLGY9dC5fb2Zmc2V0QXR0cmlidXRlPT09YWUuTk9ORT8wOjEsdT1uZXcgVWludDhBcnJheShzLzMpLmZpbGwoZik7aS5hdHRyaWJ1dGVzLmFwcGx5T2Zmc2V0PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOnV9KX1yZXR1cm4gbmV3IEJ0KHthdHRyaWJ1dGVzOmkuYXR0cmlidXRlcyxpbmRpY2VzOmkuaW5kaWNlcyxwcmltaXRpdmVUeXBlOkR0LkxJTkVTLGJvdW5kaW5nU3BoZXJlOmkuYm91bmRpbmdTcGhlcmUsb2Zmc2V0QXR0cmlidXRlOnQuX29mZnNldEF0dHJpYnV0ZX0pfTt6cj1mYX0pO2Z1bmN0aW9uIHVhKHQpe3Q9dD8/SXQuRU1QVFlfT0JKRUNUO2xldCBlPXQucmFkaXVzO3kudHlwZU9mLm51bWJlcigicmFkaXVzIixlKTtsZXQgbj17Y2VudGVyOnQuY2VudGVyLHNlbWlNYWpvckF4aXM6ZSxzZW1pTWlub3JBeGlzOmUsZWxsaXBzb2lkOnQuZWxsaXBzb2lkLGhlaWdodDp0LmhlaWdodCxleHRydWRlZEhlaWdodDp0LmV4dHJ1ZGVkSGVpZ2h0LGdyYW51bGFyaXR5OnQuZ3JhbnVsYXJpdHksbnVtYmVyT2ZWZXJ0aWNhbExpbmVzOnQubnVtYmVyT2ZWZXJ0aWNhbExpbmVzfTt0aGlzLl9lbGxpcHNlR2VvbWV0cnk9bmV3IHpyKG4pLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUNpcmNsZU91dGxpbmVHZW9tZXRyeSJ9dmFyIFlNLGlyLEUwLFVUPSQoKCk9PntMdCgpO1d0KCk7eWUoKTtmdCgpO08wKCk7JHQoKTt1YS5wYWNrZWRMZW5ndGg9enIucGFja2VkTGVuZ3RoO3VhLnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx6ci5wYWNrKHQuX2VsbGlwc2VHZW9tZXRyeSxlLG4pfTtZTT1uZXcgenIoe2NlbnRlcjpuZXcgYSxzZW1pTWFqb3JBeGlzOjEsc2VtaU1pbm9yQXhpczoxfSksaXI9e2NlbnRlcjpuZXcgYSxyYWRpdXM6dm9pZCAwLGVsbGlwc29pZDpZLmNsb25lKFkuVU5JVF9TUEhFUkUpLGhlaWdodDp2b2lkIDAsZXh0cnVkZWRIZWlnaHQ6dm9pZCAwLGdyYW51bGFyaXR5OnZvaWQgMCxudW1iZXJPZlZlcnRpY2FsTGluZXM6dm9pZCAwLHNlbWlNYWpvckF4aXM6dm9pZCAwLHNlbWlNaW5vckF4aXM6dm9pZCAwfTt1YS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe2xldCBvPXpyLnVucGFjayh0LGUsWU0pO3JldHVybiBpci5jZW50ZXI9YS5jbG9uZShvLl9jZW50ZXIsaXIuY2VudGVyKSxpci5lbGxpcHNvaWQ9WS5jbG9uZShvLl9lbGxpcHNvaWQsaXIuZWxsaXBzb2lkKSxpci5oZWlnaHQ9by5faGVpZ2h0LGlyLmV4dHJ1ZGVkSGVpZ2h0PW8uX2V4dHJ1ZGVkSGVpZ2h0LGlyLmdyYW51bGFyaXR5PW8uX2dyYW51bGFyaXR5LGlyLm51bWJlck9mVmVydGljYWxMaW5lcz1vLl9udW1iZXJPZlZlcnRpY2FsTGluZXMsaChuKT8oaXIuc2VtaU1ham9yQXhpcz1vLl9zZW1pTWFqb3JBeGlzLGlyLnNlbWlNaW5vckF4aXM9by5fc2VtaU1pbm9yQXhpcyxuLl9lbGxpcHNlR2VvbWV0cnk9bmV3IHpyKGlyKSxuKTooaXIucmFkaXVzPW8uX3NlbWlNYWpvckF4aXMsbmV3IHVhKGlyKSl9O3VhLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe3JldHVybiB6ci5jcmVhdGVHZW9tZXRyeSh0Ll9lbGxpcHNlR2VvbWV0cnkpfTtFMD11YX0pO3ZhciBSMD17fTtkZShSMCx7ZGVmYXVsdDooKT0+Wk19KTtmdW5jdGlvbiAkTSh0LGUpe3JldHVybiBoKGUpJiYodD1FMC51bnBhY2sodCxlKSksdC5fZWxsaXBzZUdlb21ldHJ5Ll9jZW50ZXI9YS5jbG9uZSh0Ll9lbGxpcHNlR2VvbWV0cnkuX2NlbnRlciksdC5fZWxsaXBzZUdlb21ldHJ5Ll9lbGxpcHNvaWQ9WS5jbG9uZSh0Ll9lbGxpcHNlR2VvbWV0cnkuX2VsbGlwc29pZCksRTAuY3JlYXRlR2VvbWV0cnkodCl9dmFyIFpNLFMwPSQoKCk9PntMdCgpO1VUKCk7ZnQoKTskdCgpO1pNPSRNfSk7ZnVuY3Rpb24gUU0odCxlLG4sbyl7aWYoeS5kZWZpbmVkKCJlcXVhbHNFcHNpbG9uIixlKSwhaCh0KSlyZXR1cm47bj1uPz8hMTtsZXQgcj1oKG8pLGk9dC5sZW5ndGg7aWYoaTwyKXJldHVybiB0O2xldCBzLGY9dFswXSx1LGMsbD0wLHA9LTE7Zm9yKHM9MTtzPGk7KytzKXU9dFtzXSxlKGYsdSxrVCk/KGgoYyl8fChjPXQuc2xpY2UoMCxzKSxsPXMtMSxwPTApLHImJm8ucHVzaChzKSk6KGgoYykmJihjLnB1c2godSksbD1zLHImJihwPW8ubGVuZ3RoKSksZj11KTtyZXR1cm4gbiYmZSh0WzBdLHRbaS0xXSxrVCkmJihyJiYoaChjKT9vLnNwbGljZShwLDAsbCk6by5wdXNoKGktMSkpLGgoYyk/Yy5sZW5ndGgtPTE6Yz10LnNsaWNlKDAsLTEpKSxoKGMpP2M6dH12YXIga1QseG4sanI9JCgoKT0+e1d0KCk7ZnQoKTtLdCgpO2tUPVAuRVBTSUxPTjEwO3huPVFNfSk7ZnVuY3Rpb24gSW4odCxlLG4sbyl7dGhpcy54PXQ/PzAsdGhpcy55PWU/PzAsdGhpcy53aWR0aD1uPz8wLHRoaXMuaGVpZ2h0PW8/PzB9dmFyIEdULEpNLHROLEhyLENmPSQoKCk9PntVZSgpO0llKCk7V3QoKTtmdCgpOyR0KCk7U2koKTtHcygpO3duKCk7SW4ucGFja2VkTGVuZ3RoPTQ7SW4ucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLG49bj8/MCxlW24rK109dC54LGVbbisrXT10LnksZVtuKytdPXQud2lkdGgsZVtuXT10LmhlaWdodCxlfTtJbi51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LmRlZmluZWQoImFycmF5Iix0KSxlPWU/PzAsaChuKXx8KG49bmV3IEluKSxuLng9dFtlKytdLG4ueT10W2UrK10sbi53aWR0aD10W2UrK10sbi5oZWlnaHQ9dFtlXSxufTtJbi5mcm9tUG9pbnRzPWZ1bmN0aW9uKHQsZSl7aWYoaChlKXx8KGU9bmV3IEluKSwhaCh0KXx8dC5sZW5ndGg9PT0wKXJldHVybiBlLng9MCxlLnk9MCxlLndpZHRoPTAsZS5oZWlnaHQ9MCxlO2xldCBuPXQubGVuZ3RoLG89dFswXS54LHI9dFswXS55LGk9dFswXS54LHM9dFswXS55O2ZvcihsZXQgZj0xO2Y8bjtmKyspe2xldCB1PXRbZl0sYz11LngsbD11Lnk7bz1NYXRoLm1pbihjLG8pLGk9TWF0aC5tYXgoYyxpKSxyPU1hdGgubWluKGwscikscz1NYXRoLm1heChsLHMpfXJldHVybiBlLng9byxlLnk9cixlLndpZHRoPWktbyxlLmhlaWdodD1zLXIsZX07R1Q9bmV3IEpuLEpNPW5ldyBjdCx0Tj1uZXcgY3Q7SW4uZnJvbVJlY3RhbmdsZT1mdW5jdGlvbih0LGUsbil7aWYoaChuKXx8KG49bmV3IEluKSwhaCh0KSlyZXR1cm4gbi54PTAsbi55PTAsbi53aWR0aD0wLG4uaGVpZ2h0PTAsbjtHVC5fZWxsaXBzb2lkPVkuZGVmYXVsdCxlPWU/P0dUO2xldCBvPWUucHJvamVjdChOdC5zb3V0aHdlc3QodCxKTSkpLHI9ZS5wcm9qZWN0KE50Lm5vcnRoZWFzdCh0LHROKSk7cmV0dXJuIEouc3VidHJhY3QocixvLHIpLG4ueD1vLngsbi55PW8ueSxuLndpZHRoPXIueCxuLmhlaWdodD1yLnksbn07SW4uY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihoKHQpKXJldHVybiBoKGUpPyhlLng9dC54LGUueT10LnksZS53aWR0aD10LndpZHRoLGUuaGVpZ2h0PXQuaGVpZ2h0LGUpOm5ldyBJbih0LngsdC55LHQud2lkdGgsdC5oZWlnaHQpfTtJbi51bmlvbj1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSxoKG4pfHwobj1uZXcgSW4pO2xldCBvPU1hdGgubWluKHQueCxlLngpLHI9TWF0aC5taW4odC55LGUueSksaT1NYXRoLm1heCh0LngrdC53aWR0aCxlLngrZS53aWR0aCkscz1NYXRoLm1heCh0LnkrdC5oZWlnaHQsZS55K2UuaGVpZ2h0KTtyZXR1cm4gbi54PW8sbi55PXIsbi53aWR0aD1pLW8sbi5oZWlnaHQ9cy1yLG59O0luLmV4cGFuZD1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJyZWN0YW5nbGUiLHQpLHkudHlwZU9mLm9iamVjdCgicG9pbnQiLGUpLG49SW4uY2xvbmUodCxuKTtsZXQgbz1lLngtbi54LHI9ZS55LW4ueTtyZXR1cm4gbz5uLndpZHRoP24ud2lkdGg9bzpvPDAmJihuLndpZHRoLT1vLG4ueD1lLngpLHI+bi5oZWlnaHQ/bi5oZWlnaHQ9cjpyPDAmJihuLmhlaWdodC09cixuLnk9ZS55KSxufTtJbi5pbnRlcnNlY3Q9ZnVuY3Rpb24odCxlKXt5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpO2xldCBuPXQueCxvPXQueSxyPWUueCxpPWUueTtyZXR1cm4gbj5yK2Uud2lkdGh8fG4rdC53aWR0aDxyfHxvK3QuaGVpZ2h0PGl8fG8+aStlLmhlaWdodD9Tbi5PVVRTSURFOlNuLklOVEVSU0VDVElOR307SW4uZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHxoKHQpJiZoKGUpJiZ0Lng9PT1lLngmJnQueT09PWUueSYmdC53aWR0aD09PWUud2lkdGgmJnQuaGVpZ2h0PT09ZS5oZWlnaHR9O0luLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gSW4uY2xvbmUodGhpcyx0KX07SW4ucHJvdG90eXBlLmludGVyc2VjdD1mdW5jdGlvbih0KXtyZXR1cm4gSW4uaW50ZXJzZWN0KHRoaXMsdCl9O0luLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIEluLmVxdWFscyh0aGlzLHQpfTtIcj1Jbn0pO2Z1bmN0aW9uIExvKHQsZSxuKXt0aGlzLm1pbmltdW09YS5jbG9uZSh0Pz9hLlpFUk8pLHRoaXMubWF4aW11bT1hLmNsb25lKGU/P2EuWkVSTyksaChuKT9uPWEuY2xvbmUobik6bj1hLm1pZHBvaW50KHRoaXMubWluaW11bSx0aGlzLm1heGltdW0sbmV3IGEpLHRoaXMuY2VudGVyPW59dmFyIEpwLExpLHhmPSQoKCk9PntMdCgpO1d0KCk7ZnQoKTtHcygpO0xvLmZyb21Db3JuZXJzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS5kZWZpbmVkKCJtaW5pbXVtIix0KSx5LmRlZmluZWQoIm1heGltdW0iLGUpLGgobil8fChuPW5ldyBMbyksbi5taW5pbXVtPWEuY2xvbmUodCxuLm1pbmltdW0pLG4ubWF4aW11bT1hLmNsb25lKGUsbi5tYXhpbXVtKSxuLmNlbnRlcj1hLm1pZHBvaW50KHQsZSxuLmNlbnRlciksbn07TG8uZnJvbVBvaW50cz1mdW5jdGlvbih0LGUpe2lmKGgoZSl8fChlPW5ldyBMbyksIWgodCl8fHQubGVuZ3RoPT09MClyZXR1cm4gZS5taW5pbXVtPWEuY2xvbmUoYS5aRVJPLGUubWluaW11bSksZS5tYXhpbXVtPWEuY2xvbmUoYS5aRVJPLGUubWF4aW11bSksZS5jZW50ZXI9YS5jbG9uZShhLlpFUk8sZS5jZW50ZXIpLGU7bGV0IG49dFswXS54LG89dFswXS55LHI9dFswXS56LGk9dFswXS54LHM9dFswXS55LGY9dFswXS56LHU9dC5sZW5ndGg7Zm9yKGxldCBwPTE7cDx1O3ArKyl7bGV0IGQ9dFtwXSxtPWQueCxfPWQueSxnPWQuejtuPU1hdGgubWluKG0sbiksaT1NYXRoLm1heChtLGkpLG89TWF0aC5taW4oXyxvKSxzPU1hdGgubWF4KF8scykscj1NYXRoLm1pbihnLHIpLGY9TWF0aC5tYXgoZyxmKX1sZXQgYz1lLm1pbmltdW07Yy54PW4sYy55PW8sYy56PXI7bGV0IGw9ZS5tYXhpbXVtO3JldHVybiBsLng9aSxsLnk9cyxsLno9ZixlLmNlbnRlcj1hLm1pZHBvaW50KGMsbCxlLmNlbnRlciksZX07TG8uY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihoKHQpKXJldHVybiBoKGUpPyhlLm1pbmltdW09YS5jbG9uZSh0Lm1pbmltdW0sZS5taW5pbXVtKSxlLm1heGltdW09YS5jbG9uZSh0Lm1heGltdW0sZS5tYXhpbXVtKSxlLmNlbnRlcj1hLmNsb25lKHQuY2VudGVyLGUuY2VudGVyKSxlKTpuZXcgTG8odC5taW5pbXVtLHQubWF4aW11bSx0LmNlbnRlcil9O0xvLmVxdWFscz1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZXx8aCh0KSYmaChlKSYmYS5lcXVhbHModC5jZW50ZXIsZS5jZW50ZXIpJiZhLmVxdWFscyh0Lm1pbmltdW0sZS5taW5pbXVtKSYmYS5lcXVhbHModC5tYXhpbXVtLGUubWF4aW11bSl9O0pwPW5ldyBhO0xvLmludGVyc2VjdFBsYW5lPWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJib3giLHQpLHkuZGVmaW5lZCgicGxhbmUiLGUpLEpwPWEuc3VidHJhY3QodC5tYXhpbXVtLHQubWluaW11bSxKcCk7bGV0IG49YS5tdWx0aXBseUJ5U2NhbGFyKEpwLC41LEpwKSxvPWUubm9ybWFsLHI9bi54Kk1hdGguYWJzKG8ueCkrbi55Kk1hdGguYWJzKG8ueSkrbi56Kk1hdGguYWJzKG8ueiksaT1hLmRvdCh0LmNlbnRlcixvKStlLmRpc3RhbmNlO3JldHVybiBpLXI+MD9Tbi5JTlNJREU6aStyPDA/U24uT1VUU0lERTpTbi5JTlRFUlNFQ1RJTkd9O0xvLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gTG8uY2xvbmUodGhpcyx0KX07TG8ucHJvdG90eXBlLmludGVyc2VjdFBsYW5lPWZ1bmN0aW9uKHQpe3JldHVybiBMby5pbnRlcnNlY3RQbGFuZSh0aGlzLHQpfTtMby5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiBMby5lcXVhbHModGhpcyx0KX07TGk9TG99KTtmdW5jdGlvbiB1aSh0LGUpe2lmKHkuZGVmaW5lZCgib3JpZ2luIix0KSxlPWU/P1kuZGVmYXVsdCx0PWUuc2NhbGVUb0dlb2RldGljU3VyZmFjZSh0KSwhaCh0KSl0aHJvdyBuZXcgRCgib3JpZ2luIG11c3Qgbm90IGJlIGF0IHRoZSBjZW50ZXIgb2YgdGhlIGVsbGlwc29pZC4iKTtsZXQgbj1Yby5lYXN0Tm9ydGhVcFRvRml4ZWRGcmFtZSh0LGUpO3RoaXMuX2VsbGlwc29pZD1lLHRoaXMuX29yaWdpbj10LHRoaXMuX3hBeGlzPWEuZnJvbUNhcnRlc2lhbjQoc3QuZ2V0Q29sdW1uKG4sMCxDMCkpLHRoaXMuX3lBeGlzPWEuZnJvbUNhcnRlc2lhbjQoc3QuZ2V0Q29sdW1uKG4sMSxDMCkpO2xldCBvPWEuZnJvbUNhcnRlc2lhbjQoc3QuZ2V0Q29sdW1uKG4sMixDMCkpO3RoaXMuX3BsYW5lPW9uLmZyb21Qb2ludE5vcm1hbCh0LG8pfXZhciBDMCxlTixWVCx0ZCxuTix5byxsYT0kKCgpPT57eGYoKTtVZSgpO0x0KCk7aHIoKTtXdCgpO2Z0KCk7anQoKTskdCgpO3RjKCk7VW4oKTtmcygpO1VwKCk7Y3MoKTtDMD1uZXcgbWU7T2JqZWN0LmRlZmluZVByb3BlcnRpZXModWkucHJvdG90eXBlLHtlbGxpcHNvaWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbGxpcHNvaWR9fSxvcmlnaW46e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9vcmlnaW59fSxwbGFuZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BsYW5lfX0seEF4aXM6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl94QXhpc319LHlBeGlzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5feUF4aXN9fSx6QXhpczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BsYW5lLm5vcm1hbH19fSk7ZU49bmV3IExpO3VpLmZyb21Qb2ludHM9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoImNhcnRlc2lhbnMiLHQpO2xldCBuPUxpLmZyb21Qb2ludHModCxlTik7cmV0dXJuIG5ldyB1aShuLmNlbnRlcixlKX07VlQ9bmV3IFFzLHRkPW5ldyBhO3VpLnByb3RvdHlwZS5wcm9qZWN0UG9pbnRPbnRvUGxhbmU9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoImNhcnRlc2lhbiIsdCk7bGV0IG49VlQ7bi5vcmlnaW49dCxhLm5vcm1hbGl6ZSh0LG4uZGlyZWN0aW9uKTtsZXQgbz1oby5yYXlQbGFuZShuLHRoaXMuX3BsYW5lLHRkKTtpZihoKG8pfHwoYS5uZWdhdGUobi5kaXJlY3Rpb24sbi5kaXJlY3Rpb24pLG89aG8ucmF5UGxhbmUobix0aGlzLl9wbGFuZSx0ZCkpLGgobykpe2xldCByPWEuc3VidHJhY3Qobyx0aGlzLl9vcmlnaW4sbyksaT1hLmRvdCh0aGlzLl94QXhpcyxyKSxzPWEuZG90KHRoaXMuX3lBeGlzLHIpO3JldHVybiBoKGUpPyhlLng9aSxlLnk9cyxlKTpuZXcgSihpLHMpfX07dWkucHJvdG90eXBlLnByb2plY3RQb2ludHNPbnRvUGxhbmU9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoImNhcnRlc2lhbnMiLHQpLGgoZSl8fChlPVtdKTtsZXQgbj0wLG89dC5sZW5ndGg7Zm9yKGxldCByPTA7cjxvO3IrKyl7bGV0IGk9dGhpcy5wcm9qZWN0UG9pbnRPbnRvUGxhbmUodFtyXSxlW25dKTtoKGkpJiYoZVtuXT1pLG4rKyl9cmV0dXJuIGUubGVuZ3RoPW4sZX07dWkucHJvdG90eXBlLnByb2plY3RQb2ludFRvTmVhcmVzdE9uUGxhbmU9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoImNhcnRlc2lhbiIsdCksaChlKXx8KGU9bmV3IEopO2xldCBuPVZUO24ub3JpZ2luPXQsYS5jbG9uZSh0aGlzLl9wbGFuZS5ub3JtYWwsbi5kaXJlY3Rpb24pO2xldCBvPWhvLnJheVBsYW5lKG4sdGhpcy5fcGxhbmUsdGQpO2gobyl8fChhLm5lZ2F0ZShuLmRpcmVjdGlvbixuLmRpcmVjdGlvbiksbz1oby5yYXlQbGFuZShuLHRoaXMuX3BsYW5lLHRkKSk7bGV0IHI9YS5zdWJ0cmFjdChvLHRoaXMuX29yaWdpbixvKSxpPWEuZG90KHRoaXMuX3hBeGlzLHIpLHM9YS5kb3QodGhpcy5feUF4aXMscik7cmV0dXJuIGUueD1pLGUueT1zLGV9O3VpLnByb3RvdHlwZS5wcm9qZWN0UG9pbnRzVG9OZWFyZXN0T25QbGFuZT1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgiY2FydGVzaWFucyIsdCksaChlKXx8KGU9W10pO2xldCBuPXQubGVuZ3RoO2UubGVuZ3RoPW47Zm9yKGxldCBvPTA7bzxuO28rKyllW29dPXRoaXMucHJvamVjdFBvaW50VG9OZWFyZXN0T25QbGFuZSh0W29dLGVbb10pO3JldHVybiBlfTtuTj1uZXcgYTt1aS5wcm90b3R5cGUucHJvamVjdFBvaW50T250b0VsbGlwc29pZD1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgiY2FydGVzaWFuIix0KSxoKGUpfHwoZT1uZXcgYSk7bGV0IG49dGhpcy5fZWxsaXBzb2lkLG89dGhpcy5fb3JpZ2luLHI9dGhpcy5feEF4aXMsaT10aGlzLl95QXhpcyxzPW5OO3JldHVybiBhLm11bHRpcGx5QnlTY2FsYXIocix0LngscyksZT1hLmFkZChvLHMsZSksYS5tdWx0aXBseUJ5U2NhbGFyKGksdC55LHMpLGEuYWRkKGUscyxlKSxuLnNjYWxlVG9HZW9jZW50cmljU3VyZmFjZShlLGUpLGV9O3VpLnByb3RvdHlwZS5wcm9qZWN0UG9pbnRzT250b0VsbGlwc29pZD1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgiY2FydGVzaWFucyIsdCk7bGV0IG49dC5sZW5ndGg7aChlKT9lLmxlbmd0aD1uOmU9bmV3IEFycmF5KG4pO2ZvcihsZXQgbz0wO288bjsrK28pZVtvXT10aGlzLnByb2plY3RQb2ludE9udG9FbGxpcHNvaWQodFtvXSxlW29dKTtyZXR1cm4gZX07eW89dWl9KTtmdW5jdGlvbiBCZSh0LGUpe3RoaXMuY2VudGVyPWEuY2xvbmUodD8/YS5aRVJPKSx0aGlzLmhhbGZBeGVzPVouY2xvbmUoZT8/Wi5aRVJPKX1mdW5jdGlvbiB6VCh0LGUsbixvLHIsaSxzLGYsdSxjLGwpe2lmKCFoKHIpfHwhaChpKXx8IWgocyl8fCFoKGYpfHwhaCh1KXx8IWgoYykpdGhyb3cgbmV3IEQoImFsbCBleHRlbnRzIChtaW5pbXVtL21heGltdW0gWC9ZL1opIGFyZSByZXF1aXJlZC4iKTtoKGwpfHwobD1uZXcgQmUpO2xldCBwPWwuaGFsZkF4ZXM7Wi5zZXRDb2x1bW4ocCwwLGUscCksWi5zZXRDb2x1bW4ocCwxLG4scCksWi5zZXRDb2x1bW4ocCwyLG8scCk7bGV0IGQ9V1Q7ZC54PShyK2kpLzIsZC55PShzK2YpLzIsZC56PSh1K2MpLzI7bGV0IG09bE47bS54PShpLXIpLzIsbS55PShmLXMpLzIsbS56PShjLXUpLzI7bGV0IF89bC5jZW50ZXI7cmV0dXJuIGQ9Wi5tdWx0aXBseUJ5VmVjdG9yKHAsZCxkKSxhLmFkZCh0LGQsXyksWi5tdWx0aXBseUJ5U2NhbGUocCxtLHApLGx9dmFyIG9OLHJOLGlOLHNOLGNOLGFOLGZOLHVOLFdULGxOLGpULHBOLGROLG1OLGhOLF9OLHlOLGdOLEhULEFOLHFULGJOLFROLHdOLE9OLEVOLFJOLFNOLENOLHhOLFBOLE1OLE5OLElOLHZOLEZOLFhULFlULCRULExOLEtULEROLEJOLFVOLGtOLEdOLFZOLHpOLGpOLFNvLHBhPSQoKCk9Pnt2ZSgpO1VlKCk7THQoKTtJZSgpO1d0KCk7ZnQoKTtqdCgpOyR0KCk7bGEoKTtHcygpO0hsKCk7S3QoKTtCbigpO1VuKCk7ZnMoKTt3bigpO0JlLnBhY2tlZExlbmd0aD1hLnBhY2tlZExlbmd0aCtaLnBhY2tlZExlbmd0aDtCZS5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj1uPz8wLGEucGFjayh0LmNlbnRlcixlLG4pLFoucGFjayh0LmhhbGZBeGVzLGUsbithLnBhY2tlZExlbmd0aCksZX07QmUudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS5kZWZpbmVkKCJhcnJheSIsdCksZT1lPz8wLGgobil8fChuPW5ldyBCZSksYS51bnBhY2sodCxlLG4uY2VudGVyKSxaLnVucGFjayh0LGUrYS5wYWNrZWRMZW5ndGgsbi5oYWxmQXhlcyksbn07b049bmV3IGEsck49bmV3IGEsaU49bmV3IGEsc049bmV3IGEsY049bmV3IGEsYU49bmV3IGEsZk49bmV3IFosdU49e3VuaXRhcnk6bmV3IFosZGlhZ29uYWw6bmV3IFp9O0JlLmZyb21Qb2ludHM9ZnVuY3Rpb24odCxlKXtpZihoKGUpfHwoZT1uZXcgQmUpLCFoKHQpfHx0Lmxlbmd0aD09PTApcmV0dXJuIGUuaGFsZkF4ZXM9Wi5aRVJPLGUuY2VudGVyPWEuWkVSTyxlO2xldCBuLG89dC5sZW5ndGgscj1hLmNsb25lKHRbMF0sb04pO2ZvcihuPTE7bjxvO24rKylhLmFkZChyLHRbbl0scik7bGV0IGk9MS9vO2EubXVsdGlwbHlCeVNjYWxhcihyLGkscik7bGV0IHM9MCxmPTAsdT0wLGM9MCxsPTAscD0wLGQ7Zm9yKG49MDtuPG87bisrKWQ9YS5zdWJ0cmFjdCh0W25dLHIsck4pLHMrPWQueCpkLngsZis9ZC54KmQueSx1Kz1kLngqZC56LGMrPWQueSpkLnksbCs9ZC55KmQueixwKz1kLnoqZC56O3MqPWksZio9aSx1Kj1pLGMqPWksbCo9aSxwKj1pO2xldCBtPWZOO21bMF09cyxtWzFdPWYsbVsyXT11LG1bM109ZixtWzRdPWMsbVs1XT1sLG1bNl09dSxtWzddPWwsbVs4XT1wO2xldCBfPVouY29tcHV0ZUVpZ2VuRGVjb21wb3NpdGlvbihtLHVOKSxnPVouY2xvbmUoXy51bml0YXJ5LGUuaGFsZkF4ZXMpLGI9Wi5nZXRDb2x1bW4oZywwLHNOKSxUPVouZ2V0Q29sdW1uKGcsMSxjTiksTz1aLmdldENvbHVtbihnLDIsYU4pLEU9LU51bWJlci5NQVhfVkFMVUUsdz0tTnVtYmVyLk1BWF9WQUxVRSxDPS1OdW1iZXIuTUFYX1ZBTFVFLE09TnVtYmVyLk1BWF9WQUxVRSxOPU51bWJlci5NQVhfVkFMVUUsRj1OdW1iZXIuTUFYX1ZBTFVFO2ZvcihuPTA7bjxvO24rKylkPXRbbl0sRT1NYXRoLm1heChhLmRvdChiLGQpLEUpLHc9TWF0aC5tYXgoYS5kb3QoVCxkKSx3KSxDPU1hdGgubWF4KGEuZG90KE8sZCksQyksTT1NYXRoLm1pbihhLmRvdChiLGQpLE0pLE49TWF0aC5taW4oYS5kb3QoVCxkKSxOKSxGPU1hdGgubWluKGEuZG90KE8sZCksRik7Yj1hLm11bHRpcGx5QnlTY2FsYXIoYiwuNSooTStFKSxiKSxUPWEubXVsdGlwbHlCeVNjYWxhcihULC41KihOK3cpLFQpLE89YS5tdWx0aXBseUJ5U2NhbGFyKE8sLjUqKEYrQyksTyk7bGV0IEk9YS5hZGQoYixULGUuY2VudGVyKTthLmFkZChJLE8sSSk7bGV0IHY9aU47cmV0dXJuIHYueD1FLU0sdi55PXctTix2Lno9Qy1GLGEubXVsdGlwbHlCeVNjYWxhcih2LC41LHYpLFoubXVsdGlwbHlCeVNjYWxlKGUuaGFsZkF4ZXMsdixlLmhhbGZBeGVzKSxlfTtXVD1uZXcgYSxsTj1uZXcgYTtqVD1uZXcgY3QscE49bmV3IGEsZE49bmV3IGN0LG1OPW5ldyBjdCxoTj1uZXcgY3QsX049bmV3IGN0LHlOPW5ldyBjdCxnTj1uZXcgYSxIVD1uZXcgYSxBTj1uZXcgYSxxVD1uZXcgYSxiTj1uZXcgYSxUTj1uZXcgSix3Tj1uZXcgSixPTj1uZXcgSixFTj1uZXcgSixSTj1uZXcgSixTTj1uZXcgYSxDTj1uZXcgYSx4Tj1uZXcgYSxQTj1uZXcgYSxNTj1uZXcgSixOTj1uZXcgYSxJTj1uZXcgYSx2Tj1uZXcgYSxGTj1uZXcgb24oYS5VTklUX1gsMCk7QmUuZnJvbVJlY3RhbmdsZT1mdW5jdGlvbih0LGUsbixvLHIpe2lmKCFoKHQpKXRocm93IG5ldyBEKCJyZWN0YW5nbGUgaXMgcmVxdWlyZWQiKTtpZih0LndpZHRoPDB8fHQud2lkdGg+UC5UV09fUEkpdGhyb3cgbmV3IEQoIlJlY3RhbmdsZSB3aWR0aCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMiAqIHBpIik7aWYodC5oZWlnaHQ8MHx8dC5oZWlnaHQ+UC5QSSl0aHJvdyBuZXcgRCgiUmVjdGFuZ2xlIGhlaWdodCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgcGkiKTtpZihoKG8pJiYhUC5lcXVhbHNFcHNpbG9uKG8ucmFkaWkueCxvLnJhZGlpLnksUC5FUFNJTE9OMTUpKXRocm93IG5ldyBEKCJFbGxpcHNvaWQgbXVzdCBiZSBhbiBlbGxpcHNvaWQgb2YgcmV2b2x1dGlvbiAocmFkaWkueCA9PSByYWRpaS55KSIpO2U9ZT8/MCxuPW4/PzAsbz1vPz9ZLmRlZmF1bHQ7bGV0IGkscyxmLHUsYyxsLHA7aWYodC53aWR0aDw9UC5QSSl7bGV0IE49TnQuY2VudGVyKHQsalQpLEY9by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihOLHBOKSxJPW5ldyB5byhGLG8pO3A9SS5wbGFuZTtsZXQgdj1OLmxvbmdpdHVkZSxCPXQuc291dGg8MCYmdC5ub3J0aD4wPzA6Ti5sYXRpdHVkZSxBPWN0LmZyb21SYWRpYW5zKHYsdC5ub3J0aCxuLGROKSxTPWN0LmZyb21SYWRpYW5zKHQud2VzdCx0Lm5vcnRoLG4sbU4pLHg9Y3QuZnJvbVJhZGlhbnModC53ZXN0LEIsbixoTiksTD1jdC5mcm9tUmFkaWFucyh0Lndlc3QsdC5zb3V0aCxuLF9OKSx6PWN0LmZyb21SYWRpYW5zKHYsdC5zb3V0aCxuLHlOKSxqPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oQSxnTiksaz1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKFMsSFQpLHE9by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbih4LEFOKSxXPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oTCxxVCksUj1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKHosYk4pLG50PUkucHJvamVjdFBvaW50VG9OZWFyZXN0T25QbGFuZShqLFROKSxhdD1JLnByb2plY3RQb2ludFRvTmVhcmVzdE9uUGxhbmUoayx3TiksbHQ9SS5wcm9qZWN0UG9pbnRUb05lYXJlc3RPblBsYW5lKHEsT04pLGh0PUkucHJvamVjdFBvaW50VG9OZWFyZXN0T25QbGFuZShXLEVOKSxvdD1JLnByb2plY3RQb2ludFRvTmVhcmVzdE9uUGxhbmUoUixSTik7cmV0dXJuIGk9TWF0aC5taW4oYXQueCxsdC54LGh0LngpLHM9LWksdT1NYXRoLm1heChhdC55LG50LnkpLGY9TWF0aC5taW4oaHQueSxvdC55KSxTLmhlaWdodD1MLmhlaWdodD1lLGs9by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihTLEhUKSxXPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oTCxxVCksYz1NYXRoLm1pbihvbi5nZXRQb2ludERpc3RhbmNlKHAsayksb24uZ2V0UG9pbnREaXN0YW5jZShwLFcpKSxsPW4selQoSS5vcmlnaW4sSS54QXhpcyxJLnlBeGlzLEkuekF4aXMsaSxzLGYsdSxjLGwscil9bGV0IGQ9dC5zb3V0aD4wLG09dC5ub3J0aDwwLF89ZD90LnNvdXRoOm0/dC5ub3J0aDowLGc9TnQuY2VudGVyKHQsalQpLmxvbmdpdHVkZSxiPWEuZnJvbVJhZGlhbnMoZyxfLG4sbyxTTik7Yi56PTA7bGV0IE89TWF0aC5hYnMoYi54KTxQLkVQU0lMT04xMCYmTWF0aC5hYnMoYi55KTxQLkVQU0lMT04xMD9hLlVOSVRfWDphLm5vcm1hbGl6ZShiLENOKSxFPWEuVU5JVF9aLHc9YS5jcm9zcyhPLEUseE4pO3A9b24uZnJvbVBvaW50Tm9ybWFsKGIsTyxGTik7bGV0IEM9YS5mcm9tUmFkaWFucyhnK1AuUElfT1ZFUl9UV08sXyxuLG8sUE4pO3M9YS5kb3Qob24ucHJvamVjdFBvaW50T250b1BsYW5lKHAsQyxNTiksdyksaT0tcyx1PWEuZnJvbVJhZGlhbnMoMCx0Lm5vcnRoLG0/ZTpuLG8sTk4pLnosZj1hLmZyb21SYWRpYW5zKDAsdC5zb3V0aCxkP2U6bixvLElOKS56O2xldCBNPWEuZnJvbVJhZGlhbnModC5lYXN0LF8sbixvLHZOKTtyZXR1cm4gYz1vbi5nZXRQb2ludERpc3RhbmNlKHAsTSksbD0wLHpUKGIsdyxFLE8saSxzLGYsdSxjLGwscil9O0JlLmZyb21UcmFuc2Zvcm1hdGlvbj1mdW5jdGlvbih0LGUpe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInRyYW5zZm9ybWF0aW9uIix0KSxoKGUpfHwoZT1uZXcgQmUpLGUuY2VudGVyPXN0LmdldFRyYW5zbGF0aW9uKHQsZS5jZW50ZXIpLGUuaGFsZkF4ZXM9c3QuZ2V0TWF0cml4Myh0LGUuaGFsZkF4ZXMpLGUuaGFsZkF4ZXM9Wi5tdWx0aXBseUJ5U2NhbGFyKGUuaGFsZkF4ZXMsLjUsZS5oYWxmQXhlcyksZX07QmUuY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihoKHQpKXJldHVybiBoKGUpPyhhLmNsb25lKHQuY2VudGVyLGUuY2VudGVyKSxaLmNsb25lKHQuaGFsZkF4ZXMsZS5oYWxmQXhlcyksZSk6bmV3IEJlKHQuY2VudGVyLHQuaGFsZkF4ZXMpfTtCZS5pbnRlcnNlY3RQbGFuZT1mdW5jdGlvbih0LGUpe2lmKCFoKHQpKXRocm93IG5ldyBEKCJib3ggaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEQoInBsYW5lIGlzIHJlcXVpcmVkLiIpO2xldCBuPXQuY2VudGVyLG89ZS5ub3JtYWwscj10LmhhbGZBeGVzLGk9by54LHM9by55LGY9by56LHU9TWF0aC5hYnMoaSpyW1ouQ09MVU1OMFJPVzBdK3MqcltaLkNPTFVNTjBST1cxXStmKnJbWi5DT0xVTU4wUk9XMl0pK01hdGguYWJzKGkqcltaLkNPTFVNTjFST1cwXStzKnJbWi5DT0xVTU4xUk9XMV0rZipyW1ouQ09MVU1OMVJPVzJdKStNYXRoLmFicyhpKnJbWi5DT0xVTU4yUk9XMF0rcypyW1ouQ09MVU1OMlJPVzFdK2YqcltaLkNPTFVNTjJST1cyXSksYz1hLmRvdChvLG4pK2UuZGlzdGFuY2U7cmV0dXJuIGM8PS11P1NuLk9VVFNJREU6Yz49dT9Tbi5JTlNJREU6U24uSU5URVJTRUNUSU5HfTtYVD1uZXcgYSxZVD1uZXcgYSwkVD1uZXcgYSxMTj1uZXcgYSxLVD1uZXcgYSxETj1uZXcgYTtCZS5kaXN0YW5jZVNxdWFyZWRUbz1mdW5jdGlvbih0LGUpe2lmKCFoKHQpKXRocm93IG5ldyBEKCJib3ggaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEQoImNhcnRlc2lhbiBpcyByZXF1aXJlZC4iKTtsZXQgbj1hLnN1YnRyYWN0KGUsdC5jZW50ZXIsV1QpLG89dC5oYWxmQXhlcyxyPVouZ2V0Q29sdW1uKG8sMCxYVCksaT1aLmdldENvbHVtbihvLDEsWVQpLHM9Wi5nZXRDb2x1bW4obywyLCRUKSxmPWEubWFnbml0dWRlKHIpLHU9YS5tYWduaXR1ZGUoaSksYz1hLm1hZ25pdHVkZShzKSxsPSEwLHA9ITAsZD0hMDtmPjA/YS5kaXZpZGVCeVNjYWxhcihyLGYscik6bD0hMSx1PjA/YS5kaXZpZGVCeVNjYWxhcihpLHUsaSk6cD0hMSxjPjA/YS5kaXZpZGVCeVNjYWxhcihzLGMscyk6ZD0hMTtsZXQgbT0hbCshcCshZCxfLGcsYjtpZihtPT09MSl7bGV0IHc9cjtfPWksZz1zLHA/ZHx8KHc9cyxnPXIpOih3PWksXz1yKSxiPWEuY3Jvc3MoXyxnLEtUKSx3PT09cj9yPWI6dz09PWk/aT1iOnc9PT1zJiYocz1iKX1lbHNlIGlmKG09PT0yKXtfPXIscD9fPWk6ZCYmKF89cyk7bGV0IHc9YS5VTklUX1k7dy5lcXVhbHNFcHNpbG9uKF8sUC5FUFNJTE9OMykmJih3PWEuVU5JVF9YKSxnPWEuY3Jvc3MoXyx3LExOKSxhLm5vcm1hbGl6ZShnLGcpLGI9YS5jcm9zcyhfLGcsS1QpLGEubm9ybWFsaXplKGIsYiksXz09PXI/KGk9ZyxzPWIpOl89PT1pPyhzPWcscj1iKTpfPT09cyYmKHI9ZyxpPWIpfWVsc2UgbT09PTMmJihyPWEuVU5JVF9YLGk9YS5VTklUX1kscz1hLlVOSVRfWik7bGV0IFQ9RE47VC54PWEuZG90KG4sciksVC55PWEuZG90KG4saSksVC56PWEuZG90KG4scyk7bGV0IE89MCxFO3JldHVybiBULng8LWY/KEU9VC54K2YsTys9RSpFKTpULng+ZiYmKEU9VC54LWYsTys9RSpFKSxULnk8LXU/KEU9VC55K3UsTys9RSpFKTpULnk+dSYmKEU9VC55LXUsTys9RSpFKSxULno8LWM/KEU9VC56K2MsTys9RSpFKTpULno+YyYmKEU9VC56LWMsTys9RSpFKSxPfTtCTj1uZXcgYSxVTj1uZXcgYTtCZS5jb21wdXRlUGxhbmVEaXN0YW5jZXM9ZnVuY3Rpb24odCxlLG4sbyl7aWYoIWgodCkpdGhyb3cgbmV3IEQoImJveCBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgRCgicG9zaXRpb24gaXMgcmVxdWlyZWQuIik7aWYoIWgobikpdGhyb3cgbmV3IEQoImRpcmVjdGlvbiBpcyByZXF1aXJlZC4iKTtoKG8pfHwobz1uZXcgUXIpO2xldCByPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxpPU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxzPXQuY2VudGVyLGY9dC5oYWxmQXhlcyx1PVouZ2V0Q29sdW1uKGYsMCxYVCksYz1aLmdldENvbHVtbihmLDEsWVQpLGw9Wi5nZXRDb2x1bW4oZiwyLCRUKSxwPWEuYWRkKHUsYyxCTik7YS5hZGQocCxsLHApLGEuYWRkKHAscyxwKTtsZXQgZD1hLnN1YnRyYWN0KHAsZSxVTiksbT1hLmRvdChuLGQpO3JldHVybiByPU1hdGgubWluKG0sciksaT1NYXRoLm1heChtLGkpLGEuYWRkKHMsdSxwKSxhLmFkZChwLGMscCksYS5zdWJ0cmFjdChwLGwscCksYS5zdWJ0cmFjdChwLGUsZCksbT1hLmRvdChuLGQpLHI9TWF0aC5taW4obSxyKSxpPU1hdGgubWF4KG0saSksYS5hZGQocyx1LHApLGEuc3VidHJhY3QocCxjLHApLGEuYWRkKHAsbCxwKSxhLnN1YnRyYWN0KHAsZSxkKSxtPWEuZG90KG4sZCkscj1NYXRoLm1pbihtLHIpLGk9TWF0aC5tYXgobSxpKSxhLmFkZChzLHUscCksYS5zdWJ0cmFjdChwLGMscCksYS5zdWJ0cmFjdChwLGwscCksYS5zdWJ0cmFjdChwLGUsZCksbT1hLmRvdChuLGQpLHI9TWF0aC5taW4obSxyKSxpPU1hdGgubWF4KG0saSksYS5zdWJ0cmFjdChzLHUscCksYS5hZGQocCxjLHApLGEuYWRkKHAsbCxwKSxhLnN1YnRyYWN0KHAsZSxkKSxtPWEuZG90KG4sZCkscj1NYXRoLm1pbihtLHIpLGk9TWF0aC5tYXgobSxpKSxhLnN1YnRyYWN0KHMsdSxwKSxhLmFkZChwLGMscCksYS5zdWJ0cmFjdChwLGwscCksYS5zdWJ0cmFjdChwLGUsZCksbT1hLmRvdChuLGQpLHI9TWF0aC5taW4obSxyKSxpPU1hdGgubWF4KG0saSksYS5zdWJ0cmFjdChzLHUscCksYS5zdWJ0cmFjdChwLGMscCksYS5hZGQocCxsLHApLGEuc3VidHJhY3QocCxlLGQpLG09YS5kb3QobixkKSxyPU1hdGgubWluKG0sciksaT1NYXRoLm1heChtLGkpLGEuc3VidHJhY3Qocyx1LHApLGEuc3VidHJhY3QocCxjLHApLGEuc3VidHJhY3QocCxsLHApLGEuc3VidHJhY3QocCxlLGQpLG09YS5kb3QobixkKSxyPU1hdGgubWluKG0sciksaT1NYXRoLm1heChtLGkpLG8uc3RhcnQ9cixvLnN0b3A9aSxvfTtrTj1uZXcgYSxHTj1uZXcgYSxWTj1uZXcgYTtCZS5jb21wdXRlQ29ybmVycz1mdW5jdGlvbih0LGUpe3kudHlwZU9mLm9iamVjdCgiYm94Iix0KSxoKGUpfHwoZT1bbmV3IGEsbmV3IGEsbmV3IGEsbmV3IGEsbmV3IGEsbmV3IGEsbmV3IGEsbmV3IGFdKTtsZXQgbj10LmNlbnRlcixvPXQuaGFsZkF4ZXMscj1aLmdldENvbHVtbihvLDAsa04pLGk9Wi5nZXRDb2x1bW4obywxLEdOKSxzPVouZ2V0Q29sdW1uKG8sMixWTik7cmV0dXJuIGEuY2xvbmUobixlWzBdKSxhLnN1YnRyYWN0KGVbMF0scixlWzBdKSxhLnN1YnRyYWN0KGVbMF0saSxlWzBdKSxhLnN1YnRyYWN0KGVbMF0scyxlWzBdKSxhLmNsb25lKG4sZVsxXSksYS5zdWJ0cmFjdChlWzFdLHIsZVsxXSksYS5zdWJ0cmFjdChlWzFdLGksZVsxXSksYS5hZGQoZVsxXSxzLGVbMV0pLGEuY2xvbmUobixlWzJdKSxhLnN1YnRyYWN0KGVbMl0scixlWzJdKSxhLmFkZChlWzJdLGksZVsyXSksYS5zdWJ0cmFjdChlWzJdLHMsZVsyXSksYS5jbG9uZShuLGVbM10pLGEuc3VidHJhY3QoZVszXSxyLGVbM10pLGEuYWRkKGVbM10saSxlWzNdKSxhLmFkZChlWzNdLHMsZVszXSksYS5jbG9uZShuLGVbNF0pLGEuYWRkKGVbNF0scixlWzRdKSxhLnN1YnRyYWN0KGVbNF0saSxlWzRdKSxhLnN1YnRyYWN0KGVbNF0scyxlWzRdKSxhLmNsb25lKG4sZVs1XSksYS5hZGQoZVs1XSxyLGVbNV0pLGEuc3VidHJhY3QoZVs1XSxpLGVbNV0pLGEuYWRkKGVbNV0scyxlWzVdKSxhLmNsb25lKG4sZVs2XSksYS5hZGQoZVs2XSxyLGVbNl0pLGEuYWRkKGVbNl0saSxlWzZdKSxhLnN1YnRyYWN0KGVbNl0scyxlWzZdKSxhLmNsb25lKG4sZVs3XSksYS5hZGQoZVs3XSxyLGVbN10pLGEuYWRkKGVbN10saSxlWzddKSxhLmFkZChlWzddLHMsZVs3XSksZX07ek49bmV3IFo7QmUuY29tcHV0ZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQsZSl7eS50eXBlT2Yub2JqZWN0KCJib3giLHQpLGgoZSl8fChlPW5ldyBzdCk7bGV0IG49dC5jZW50ZXIsbz1aLm11bHRpcGx5QnlVbmlmb3JtU2NhbGUodC5oYWxmQXhlcywyLHpOKTtyZXR1cm4gc3QuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24obyxuLGUpfTtqTj1uZXcgZ3Q7QmUuaXNPY2NsdWRlZD1mdW5jdGlvbih0LGUpe2lmKCFoKHQpKXRocm93IG5ldyBEKCJib3ggaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEQoIm9jY2x1ZGVyIGlzIHJlcXVpcmVkLiIpO2xldCBuPWd0LmZyb21PcmllbnRlZEJvdW5kaW5nQm94KHQsak4pO3JldHVybiFlLmlzQm91bmRpbmdTcGhlcmVWaXNpYmxlKG4pfTtCZS5wcm90b3R5cGUuaW50ZXJzZWN0UGxhbmU9ZnVuY3Rpb24odCl7cmV0dXJuIEJlLmludGVyc2VjdFBsYW5lKHRoaXMsdCl9O0JlLnByb3RvdHlwZS5kaXN0YW5jZVNxdWFyZWRUbz1mdW5jdGlvbih0KXtyZXR1cm4gQmUuZGlzdGFuY2VTcXVhcmVkVG8odGhpcyx0KX07QmUucHJvdG90eXBlLmNvbXB1dGVQbGFuZURpc3RhbmNlcz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIEJlLmNvbXB1dGVQbGFuZURpc3RhbmNlcyh0aGlzLHQsZSxuKX07QmUucHJvdG90eXBlLmNvbXB1dGVDb3JuZXJzPWZ1bmN0aW9uKHQpe3JldHVybiBCZS5jb21wdXRlQ29ybmVycyh0aGlzLHQpfTtCZS5wcm90b3R5cGUuY29tcHV0ZVRyYW5zZm9ybWF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBCZS5jb21wdXRlVHJhbnNmb3JtYXRpb24odGhpcyx0KX07QmUucHJvdG90eXBlLmlzT2NjbHVkZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIEJlLmlzT2NjbHVkZWQodGhpcyx0KX07QmUuZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHxoKHQpJiZoKGUpJiZhLmVxdWFscyh0LmNlbnRlcixlLmNlbnRlcikmJlouZXF1YWxzKHQuaGFsZkF4ZXMsZS5oYWxmQXhlcyl9O0JlLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gQmUuY2xvbmUodGhpcyx0KX07QmUucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4gQmUuZXF1YWxzKHRoaXMsdCl9O1NvPUJlfSk7ZnVuY3Rpb24gZXcodCxlLG4sbyxyKXtsZXQgaT1hLnN1YnRyYWN0KHQsZSxITikscz1hLmRvdChuLGkpLGY9YS5kb3QobyxpKTtyZXR1cm4gSi5mcm9tRWxlbWVudHMocyxmLHIpfXZhciBQZixITixaVCxRVCxKVCx0dyxkYSx4MD0kKCgpPT57VWUoKTtMdCgpO1d0KCk7Qm4oKTtwYSgpO1BmPXt9LEhOPW5ldyBhLFpUPW5ldyBhLFFUPW5ldyBhLEpUPW5ldyBhLHR3PW5ldyBTbztQZi52YWxpZE91dGxpbmU9ZnVuY3Rpb24odCl7eS5kZWZpbmVkKCJwb3NpdGlvbnMiLHQpO2xldCBuPVNvLmZyb21Qb2ludHModCx0dykuaGFsZkF4ZXMsbz1aLmdldENvbHVtbihuLDAsWlQpLHI9Wi5nZXRDb2x1bW4obiwxLFFUKSxpPVouZ2V0Q29sdW1uKG4sMixKVCkscz1hLm1hZ25pdHVkZShvKSxmPWEubWFnbml0dWRlKHIpLHU9YS5tYWduaXR1ZGUoaSk7cmV0dXJuIShzPT09MCYmKGY9PT0wfHx1PT09MCl8fGY9PT0wJiZ1PT09MCl9O1BmLmNvbXB1dGVQcm9qZWN0VG8yREFyZ3VtZW50cz1mdW5jdGlvbih0LGUsbixvKXt5LmRlZmluZWQoInBvc2l0aW9ucyIsdCkseS5kZWZpbmVkKCJjZW50ZXJSZXN1bHQiLGUpLHkuZGVmaW5lZCgicGxhbmVBeGlzMVJlc3VsdCIsbikseS5kZWZpbmVkKCJwbGFuZUF4aXMyUmVzdWx0IixvKTtsZXQgcj1Tby5mcm9tUG9pbnRzKHQsdHcpLGk9ci5oYWxmQXhlcyxzPVouZ2V0Q29sdW1uKGksMCxaVCksZj1aLmdldENvbHVtbihpLDEsUVQpLHU9Wi5nZXRDb2x1bW4oaSwyLEpUKSxjPWEubWFnbml0dWRlKHMpLGw9YS5tYWduaXR1ZGUoZikscD1hLm1hZ25pdHVkZSh1KSxkPU1hdGgubWluKGMsbCxwKTtpZihjPT09MCYmKGw9PT0wfHxwPT09MCl8fGw9PT0wJiZwPT09MClyZXR1cm4hMTtsZXQgbSxfO3JldHVybihkPT09bHx8ZD09PXApJiYobT1zKSxkPT09Yz9tPWY6ZD09PXAmJihfPWYpLChkPT09Y3x8ZD09PWwpJiYoXz11KSxhLm5vcm1hbGl6ZShtLG4pLGEubm9ybWFsaXplKF8sbyksYS5jbG9uZShyLmNlbnRlcixlKSwhMH07UGYuY3JlYXRlUHJvamVjdFBvaW50c1RvMkRGdW5jdGlvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKG8pe2xldCByPW5ldyBBcnJheShvLmxlbmd0aCk7Zm9yKGxldCBpPTA7aTxvLmxlbmd0aDtpKyspcltpXT1ldyhvW2ldLHQsZSxuKTtyZXR1cm4gcn19O1BmLmNyZWF0ZVByb2plY3RQb2ludFRvMkRGdW5jdGlvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGZ1bmN0aW9uKG8scil7cmV0dXJuIGV3KG8sdCxlLG4scil9fTtkYT1QZn0pO3ZhciBxTixoZSxmYz0kKCgpPT57cU49e05PTkU6MCxHRU9ERVNJQzoxLFJIVU1COjJ9LGhlPU9iamVjdC5mcmVlemUocU4pfSk7ZnVuY3Rpb24gTTAodCxlLG4pe2lmKHQ9PT0wKXJldHVybiBlKm47bGV0IG89dCp0LHI9bypvLGk9cipvLHM9aSpvLGY9cypvLHU9ZipvLGM9bixsPU1hdGguc2luKDIqYykscD1NYXRoLnNpbig0KmMpLGQ9TWF0aC5zaW4oNipjKSxtPU1hdGguc2luKDgqYyksXz1NYXRoLnNpbigxMCpjKSxnPU1hdGguc2luKDEyKmMpO3JldHVybiBlKigoMS1vLzQtMypyLzY0LTUqaS8yNTYtMTc1KnMvMTYzODQtNDQxKmYvNjU1MzYtNDg1MSp1LzEwNDg1NzYpKmMtKDMqby84KzMqci8zMis0NSppLzEwMjQrMTA1KnMvNDA5NisyMjA1KmYvMTMxMDcyKzYyMzcqdS81MjQyODgpKmwrKDE1KnIvMjU2KzQ1KmkvMTAyNCs1MjUqcy8xNjM4NCsxNTc1KmYvNjU1MzYrMTU1OTI1KnUvODM4ODYwOCkqcC0oMzUqaS8zMDcyKzE3NSpzLzEyMjg4KzM2NzUqZi8yNjIxNDQrMTM0NzUqdS8xMDQ4NTc2KSpkKygzMTUqcy8xMzEwNzIrMjIwNSpmLzUyNDI4OCs0MzY1OSp1LzgzODg2MDgpKm0tKDY5MypmLzEzMTA3MjArNjIzNyp1LzUyNDI4ODApKl8rMTAwMSp1LzgzODg2MDgqZyl9ZnVuY3Rpb24gS04odCxlLG4pe2xldCBvPXQvbjtpZihlPT09MClyZXR1cm4gbztsZXQgcj1vKm8saT1yKm8scz1pKm8sZj1lLHU9ZipmLGM9dSp1LGw9Yyp1LHA9bCp1LGQ9cCp1LG09ZCp1LF89TWF0aC5zaW4oMipvKSxnPU1hdGguY29zKDIqbyksYj1NYXRoLnNpbig0Km8pLFQ9TWF0aC5jb3MoNCpvKSxPPU1hdGguc2luKDYqbyksRT1NYXRoLmNvcyg2Km8pLHc9TWF0aC5zaW4oOCpvKSxDPU1hdGguY29zKDgqbyksTT1NYXRoLnNpbigxMCpvKSxOPU1hdGguY29zKDEwKm8pLEY9TWF0aC5zaW4oMTIqbyk7cmV0dXJuIG8rbyp1LzQrNypvKmMvNjQrMTUqbypsLzI1Nis1NzkqbypwLzE2Mzg0KzE1MTUqbypkLzY1NTM2KzE2ODM3Km8qbS8xMDQ4NTc2KygzKm8qYy8xNis0NSpvKmwvMjU2LW8qKDMyKnItNTYxKSpwLzQwOTYtbyooMjMyKnItMTY3NykqZC8xNjM4NCtvKigzOTk5ODUtOTA1NjAqcis1MTIqcykqbS81MjQyODgwKSpnKygyMSpvKmwvMjU2KzQ4MypvKnAvNDA5Ni1vKigyMjQqci0xOTY5KSpkLzE2Mzg0LW8qKDMzMTUyKnItMTEyNTk5KSptLzEwNDg1NzYpKlQrKDE1MSpvKnAvNDA5Nis0NjgxKm8qZC82NTUzNisxNDc5Km8qbS8xNjM4NC00NTMqaSptLzMyNzY4KSpFKygxMDk3Km8qZC82NTUzNis0Mjc4MypvKm0vMTA0ODU3NikqQys4MDExKm8qbS8xMDQ4NTc2Kk4rKDMqdS84KzMqYy8xNisyMTMqbC8yMDQ4LTMqcipsLzY0KzI1NSpwLzQwOTYtMzMqcipwLzUxMisyMDg2MSpkLzUyNDI4OC0zMypyKmQvNTEyK3MqZC8xMDI0KzI4MjczKm0vMTA0ODU3Ni00NzEqciptLzgxOTIrOSpzKm0vNDA5NikqXysoMjEqYy8yNTYrMjEqbC8yNTYrNTMzKnAvODE5Mi0yMSpyKnAvNTEyKzE5NypkLzQwOTYtMzE1KnIqZC80MDk2KzU4NDAzOSptLzE2Nzc3MjE2LTEyNTE3KnIqbS8xMzEwNzIrNypzKm0vMjA0OCkqYisoMTUxKmwvNjE0NCsxNTEqcC80MDk2KzUwMTkqZC8xMzEwNzItNDUzKnIqZC8xNjM4NCsyNjk2NSptLzc4NjQzMi04NjA3KnIqbS8xMzEwNzIpKk8rKDEwOTcqcC8xMzEwNzIrMTA5NypkLzY1NTM2KzIyNTc5NyptLzEwNDg1NzYwLTEwOTcqciptLzY1NTM2KSp3Kyg4MDExKmQvMjYyMTQ0MCs4MDExKm0vMTA0ODU3NikqTSsyOTMzOTMqbS8yNTE2NTgyNDAqRn1mdW5jdGlvbiBtYSh0LGUpe2lmKHQ9PT0wKXJldHVybiBNYXRoLmxvZyhNYXRoLnRhbiguNSooUC5QSV9PVkVSX1RXTytlKSkpO2xldCBuPXQqTWF0aC5zaW4oZSk7cmV0dXJuIE1hdGgubG9nKE1hdGgudGFuKC41KihQLlBJX09WRVJfVFdPK2UpKSktdC8yKk1hdGgubG9nKCgxK24pLygxLW4pKX1mdW5jdGlvbiBXTih0LGUsbixvLHIpe2xldCBpPW1hKHQuX2VsbGlwdGljaXR5LG4pLHM9bWEodC5fZWxsaXB0aWNpdHkscik7cmV0dXJuIE1hdGguYXRhbjIoUC5uZWdhdGl2ZVBpVG9QaShvLWUpLHMtaSl9ZnVuY3Rpb24gWE4odCxlLG4sbyxyLGkscyl7bGV0IGY9dC5faGVhZGluZyx1PWktbyxjPTA7aWYoUC5lcXVhbHNFcHNpbG9uKE1hdGguYWJzKGYpLFAuUElfT1ZFUl9UV08sUC5FUFNJTE9OOCkpaWYoZT09PW4pYz1lKk1hdGguY29zKHIpKlAubmVnYXRpdmVQaVRvUGkodSk7ZWxzZXtsZXQgbD1NYXRoLnNpbihyKTtjPWUqTWF0aC5jb3MocikqUC5uZWdhdGl2ZVBpVG9QaSh1KS9NYXRoLnNxcnQoMS10Ll9lbGxpcHRpY2l0eVNxdWFyZWQqbCpsKX1lbHNle2xldCBsPU0wKHQuX2VsbGlwdGljaXR5LGUscik7Yz0oTTAodC5fZWxsaXB0aWNpdHksZSxzKS1sKS9NYXRoLmNvcyhmKX1yZXR1cm4gTWF0aC5hYnMoYyl9ZnVuY3Rpb24gbncodCxlLG4sbyl7bGV0IHI9YS5ub3JtYWxpemUoby5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihlLFAwKSxZTiksaT1hLm5vcm1hbGl6ZShvLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKG4sUDApLFAwKTt5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygidmFsdWUiLE1hdGguYWJzKE1hdGguYWJzKGEuYW5nbGVCZXR3ZWVuKHIsaSkpLU1hdGguUEkpLC4wMTI1KTtsZXQgcz1vLm1heGltdW1SYWRpdXMsZj1vLm1pbmltdW1SYWRpdXMsdT1zKnMsYz1mKmY7dC5fZWxsaXB0aWNpdHlTcXVhcmVkPSh1LWMpL3UsdC5fZWxsaXB0aWNpdHk9TWF0aC5zcXJ0KHQuX2VsbGlwdGljaXR5U3F1YXJlZCksdC5fc3RhcnQ9Y3QuY2xvbmUoZSx0Ll9zdGFydCksdC5fc3RhcnQuaGVpZ2h0PTAsdC5fZW5kPWN0LmNsb25lKG4sdC5fZW5kKSx0Ll9lbmQuaGVpZ2h0PTAsdC5faGVhZGluZz1XTih0LGUubG9uZ2l0dWRlLGUubGF0aXR1ZGUsbi5sb25naXR1ZGUsbi5sYXRpdHVkZSksdC5fZGlzdGFuY2U9WE4odCxvLm1heGltdW1SYWRpdXMsby5taW5pbXVtUmFkaXVzLGUubG9uZ2l0dWRlLGUubGF0aXR1ZGUsbi5sb25naXR1ZGUsbi5sYXRpdHVkZSl9ZnVuY3Rpb24gb3codCxlLG4sbyxyLGkpe2lmKG49PT0wKXJldHVybiBjdC5jbG9uZSh0LGkpO2xldCBzPXIqcixmLHUsYztpZihNYXRoLmFicyhQLlBJX09WRVJfVFdPLU1hdGguYWJzKGUpKT5QLkVQU0lMT044KXtsZXQgbD1NMChyLG8sdC5sYXRpdHVkZSkscD1uKk1hdGguY29zKGUpLGQ9bCtwO2lmKHU9S04oZCxyLG8pLE1hdGguYWJzKGUpPFAuRVBTSUxPTjEwKWY9UC5uZWdhdGl2ZVBpVG9QaSh0LmxvbmdpdHVkZSk7ZWxzZXtsZXQgbT1tYShyLHQubGF0aXR1ZGUpLF89bWEocix1KTtjPU1hdGgudGFuKGUpKihfLW0pLGY9UC5uZWdhdGl2ZVBpVG9QaSh0LmxvbmdpdHVkZStjKX19ZWxzZXt1PXQubGF0aXR1ZGU7bGV0IGw7aWYocj09PTApbD1vKk1hdGguY29zKHQubGF0aXR1ZGUpO2Vsc2V7bGV0IHA9TWF0aC5zaW4odC5sYXRpdHVkZSk7bD1vKk1hdGguY29zKHQubGF0aXR1ZGUpL01hdGguc3FydCgxLXMqcCpwKX1jPW4vbCxlPjA/Zj1QLm5lZ2F0aXZlUGlUb1BpKHQubG9uZ2l0dWRlK2MpOmY9UC5uZWdhdGl2ZVBpVG9QaSh0LmxvbmdpdHVkZS1jKX1yZXR1cm4gaChpKT8oaS5sb25naXR1ZGU9ZixpLmxhdGl0dWRlPXUsaS5oZWlnaHQ9MCxpKTpuZXcgY3QoZix1LDApfWZ1bmN0aW9uIERpKHQsZSxuKXtsZXQgbz1uPz9ZLmRlZmF1bHQ7dGhpcy5fZWxsaXBzb2lkPW8sdGhpcy5fc3RhcnQ9bmV3IGN0LHRoaXMuX2VuZD1uZXcgY3QsdGhpcy5faGVhZGluZz12b2lkIDAsdGhpcy5fZGlzdGFuY2U9dm9pZCAwLHRoaXMuX2VsbGlwdGljaXR5PXZvaWQgMCx0aGlzLl9lbGxpcHRpY2l0eVNxdWFyZWQ9dm9pZCAwLGgodCkmJmgoZSkmJm53KHRoaXMsdCxlLG8pfXZhciBZTixQMCxabyxNZj0kKCgpPT57THQoKTtJZSgpO1d0KCk7ZnQoKTtqdCgpOyR0KCk7S3QoKTtZTj1uZXcgYSxQMD1uZXcgYTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhEaS5wcm90b3R5cGUse2VsbGlwc29pZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsbGlwc29pZH19LHN1cmZhY2VEaXN0YW5jZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHkuZGVmaW5lZCgiZGlzdGFuY2UiLHRoaXMuX2Rpc3RhbmNlKSx0aGlzLl9kaXN0YW5jZX19LHN0YXJ0OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RhcnR9fSxlbmQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9lbmR9fSxoZWFkaW5nOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geS5kZWZpbmVkKCJkaXN0YW5jZSIsdGhpcy5fZGlzdGFuY2UpLHRoaXMuX2hlYWRpbmd9fX0pO0RpLmZyb21TdGFydEhlYWRpbmdEaXN0YW5jZT1mdW5jdGlvbih0LGUsbixvLHIpe3kuZGVmaW5lZCgic3RhcnQiLHQpLHkuZGVmaW5lZCgiaGVhZGluZyIsZSkseS5kZWZpbmVkKCJkaXN0YW5jZSIsbikseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuKCJkaXN0YW5jZSIsbiwwKTtsZXQgaT1vPz9ZLmRlZmF1bHQscz1pLm1heGltdW1SYWRpdXMsZj1pLm1pbmltdW1SYWRpdXMsdT1zKnMsYz1mKmYsbD1NYXRoLnNxcnQoKHUtYykvdSk7ZT1QLm5lZ2F0aXZlUGlUb1BpKGUpO2xldCBwPW93KHQsZSxuLGkubWF4aW11bVJhZGl1cyxsKTtyZXR1cm4haChyKXx8aChvKSYmIW8uZXF1YWxzKHIuZWxsaXBzb2lkKT9uZXcgRGkodCxwLGkpOihyLnNldEVuZFBvaW50cyh0LHApLHIpfTtEaS5wcm90b3R5cGUuc2V0RW5kUG9pbnRzPWZ1bmN0aW9uKHQsZSl7eS5kZWZpbmVkKCJzdGFydCIsdCkseS5kZWZpbmVkKCJlbmQiLGUpLG53KHRoaXMsdCxlLHRoaXMuX2VsbGlwc29pZCl9O0RpLnByb3RvdHlwZS5pbnRlcnBvbGF0ZVVzaW5nRnJhY3Rpb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5pbnRlcnBvbGF0ZVVzaW5nU3VyZmFjZURpc3RhbmNlKHQqdGhpcy5fZGlzdGFuY2UsZSl9O0RpLnByb3RvdHlwZS5pbnRlcnBvbGF0ZVVzaW5nU3VyZmFjZURpc3RhbmNlPWZ1bmN0aW9uKHQsZSl7aWYoeS50eXBlT2YubnVtYmVyKCJkaXN0YW5jZSIsdCksIWgodGhpcy5fZGlzdGFuY2UpfHx0aGlzLl9kaXN0YW5jZT09PTApdGhyb3cgbmV3IEQoIkVsbGlwc29pZFJodW1iTGluZSBtdXN0IGhhdmUgZGlzdGluY3Qgc3RhcnQgYW5kIGVuZCBzZXQuIik7cmV0dXJuIG93KHRoaXMuX3N0YXJ0LHRoaXMuX2hlYWRpbmcsdCx0aGlzLl9lbGxpcHNvaWQubWF4aW11bVJhZGl1cyx0aGlzLl9lbGxpcHRpY2l0eSxlKX07RGkucHJvdG90eXBlLmZpbmRJbnRlcnNlY3Rpb25XaXRoTG9uZ2l0dWRlPWZ1bmN0aW9uKHQsZSl7aWYoeS50eXBlT2YubnVtYmVyKCJpbnRlcnNlY3Rpb25Mb25naXR1ZGUiLHQpLCFoKHRoaXMuX2Rpc3RhbmNlKXx8dGhpcy5fZGlzdGFuY2U9PT0wKXRocm93IG5ldyBEKCJFbGxpcHNvaWRSaHVtYkxpbmUgbXVzdCBoYXZlIGRpc3RpbmN0IHN0YXJ0IGFuZCBlbmQgc2V0LiIpO2xldCBuPXRoaXMuX2VsbGlwdGljaXR5LG89dGhpcy5faGVhZGluZyxyPU1hdGguYWJzKG8pLGk9dGhpcy5fc3RhcnQ7aWYodD1QLm5lZ2F0aXZlUGlUb1BpKHQpLFAuZXF1YWxzRXBzaWxvbihNYXRoLmFicyh0KSxNYXRoLlBJLFAuRVBTSUxPTjE0KSYmKHQ9UC5zaWduKGkubG9uZ2l0dWRlKSpNYXRoLlBJKSxoKGUpfHwoZT1uZXcgY3QpLE1hdGguYWJzKFAuUElfT1ZFUl9UV08tcik8PVAuRVBTSUxPTjgpcmV0dXJuIGUubG9uZ2l0dWRlPXQsZS5sYXRpdHVkZT1pLmxhdGl0dWRlLGUuaGVpZ2h0PTAsZTtpZihQLmVxdWFsc0Vwc2lsb24oTWF0aC5hYnMoUC5QSV9PVkVSX1RXTy1yKSxQLlBJX09WRVJfVFdPLFAuRVBTSUxPTjgpKXJldHVybiBQLmVxdWFsc0Vwc2lsb24odCxpLmxvbmdpdHVkZSxQLkVQU0lMT04xMik/dm9pZCAwOihlLmxvbmdpdHVkZT10LGUubGF0aXR1ZGU9UC5QSV9PVkVSX1RXTypQLnNpZ24oUC5QSV9PVkVSX1RXTy1vKSxlLmhlaWdodD0wLGUpO2xldCBzPWkubGF0aXR1ZGUsZj1uKk1hdGguc2luKHMpLHU9TWF0aC50YW4oLjUqKFAuUElfT1ZFUl9UV08rcykpKk1hdGguZXhwKCh0LWkubG9uZ2l0dWRlKS9NYXRoLnRhbihvKSksYz0oMStmKS8oMS1mKSxsPWkubGF0aXR1ZGUscDtkb3twPWw7bGV0IGQ9bipNYXRoLnNpbihwKSxtPSgxK2QpLygxLWQpO2w9MipNYXRoLmF0YW4odSpNYXRoLnBvdyhtL2Msbi8yKSktUC5QSV9PVkVSX1RXT313aGlsZSghUC5lcXVhbHNFcHNpbG9uKGwscCxQLkVQU0lMT04xMikpO3JldHVybiBlLmxvbmdpdHVkZT10LGUubGF0aXR1ZGU9bCxlLmhlaWdodD0wLGV9O0RpLnByb3RvdHlwZS5maW5kSW50ZXJzZWN0aW9uV2l0aExhdGl0dWRlPWZ1bmN0aW9uKHQsZSl7aWYoeS50eXBlT2YubnVtYmVyKCJpbnRlcnNlY3Rpb25MYXRpdHVkZSIsdCksIWgodGhpcy5fZGlzdGFuY2UpfHx0aGlzLl9kaXN0YW5jZT09PTApdGhyb3cgbmV3IEQoIkVsbGlwc29pZFJodW1iTGluZSBtdXN0IGhhdmUgZGlzdGluY3Qgc3RhcnQgYW5kIGVuZCBzZXQuIik7bGV0IG49dGhpcy5fZWxsaXB0aWNpdHksbz10aGlzLl9oZWFkaW5nLHI9dGhpcy5fc3RhcnQ7aWYoUC5lcXVhbHNFcHNpbG9uKE1hdGguYWJzKG8pLFAuUElfT1ZFUl9UV08sUC5FUFNJTE9OOCkpcmV0dXJuO2xldCBpPW1hKG4sci5sYXRpdHVkZSkscz1tYShuLHQpLGY9TWF0aC50YW4obykqKHMtaSksdT1QLm5lZ2F0aXZlUGlUb1BpKHIubG9uZ2l0dWRlK2YpO3JldHVybiBoKGUpPyhlLmxvbmdpdHVkZT11LGUubGF0aXR1ZGU9dCxlLmhlaWdodD0wLGUpOm5ldyBjdCh1LHQsMCl9O1pvPURpfSk7ZnVuY3Rpb24gJE4odCxlKXt0aGlzLnBvc2l0aW9ucz1oKHQpP3Q6W10sdGhpcy5ob2xlcz1oKGUpP2U6W119dmFyIHJ3LGl3PSQoKCk9PntmdCgpO3J3PSROfSk7ZnVuY3Rpb24gdjAodCxlLG49Mil7bGV0IG89ZSYmZS5sZW5ndGgscj1vP2VbMF0qbjp0Lmxlbmd0aCxpPWN3KHQsMCxyLG4sITApLHM9W107aWYoIWl8fGkubmV4dD09PWkucHJldilyZXR1cm4gcztsZXQgZix1LGM7aWYobyYmKGk9ZUkodCxlLGksbikpLHQubGVuZ3RoPjgwKm4pe2Y9MS8wLHU9MS8wO2xldCBsPS0xLzAscD0tMS8wO2ZvcihsZXQgZD1uO2Q8cjtkKz1uKXtsZXQgbT10W2RdLF89dFtkKzFdO208ZiYmKGY9bSksXzx1JiYodT1fKSxtPmwmJihsPW0pLF8+cCYmKHA9Xyl9Yz1NYXRoLm1heChsLWYscC11KSxjPWMhPT0wPzMyNzY3L2M6MH1yZXR1cm4gSWYoaSxzLG4sZix1LGMsMCksc31mdW5jdGlvbiBjdyh0LGUsbixvLHIpe2xldCBpO2lmKHI9PT1wSSh0LGUsbixvKT4wKWZvcihsZXQgcz1lO3M8bjtzKz1vKWk9c3cocy9vfDAsdFtzXSx0W3MrMV0saSk7ZWxzZSBmb3IobGV0IHM9bi1vO3M+PWU7cy09bylpPXN3KHMvb3wwLHRbc10sdFtzKzFdLGkpO3JldHVybiBpJiZoYShpLGkubmV4dCkmJihGZihpKSxpPWkubmV4dCksaX1mdW5jdGlvbiB1Yyh0LGUpe2lmKCF0KXJldHVybiB0O2V8fChlPXQpO2xldCBuPXQsbztkbyBpZihvPSExLCFuLnN0ZWluZXImJihoYShuLG4ubmV4dCl8fHZuKG4ucHJldixuLG4ubmV4dCk9PT0wKSl7aWYoRmYobiksbj1lPW4ucHJldixuPT09bi5uZXh0KWJyZWFrO289ITB9ZWxzZSBuPW4ubmV4dDt3aGlsZShvfHxuIT09ZSk7cmV0dXJuIGV9ZnVuY3Rpb24gSWYodCxlLG4sbyxyLGkscyl7aWYoIXQpcmV0dXJuOyFzJiZpJiZzSSh0LG8scixpKTtsZXQgZj10O2Zvcig7dC5wcmV2IT09dC5uZXh0Oyl7bGV0IHU9dC5wcmV2LGM9dC5uZXh0O2lmKGk/UU4odCxvLHIsaSk6Wk4odCkpe2UucHVzaCh1LmksdC5pLGMuaSksRmYodCksdD1jLm5leHQsZj1jLm5leHQ7Y29udGludWV9aWYodD1jLHQ9PT1mKXtzP3M9PT0xPyh0PUpOKHVjKHQpLGUpLElmKHQsZSxuLG8scixpLDIpKTpzPT09MiYmdEkodCxlLG4sbyxyLGkpOklmKHVjKHQpLGUsbixvLHIsaSwxKTticmVha319fWZ1bmN0aW9uIFpOKHQpe2xldCBlPXQucHJldixuPXQsbz10Lm5leHQ7aWYodm4oZSxuLG8pPj0wKXJldHVybiExO2xldCByPWUueCxpPW4ueCxzPW8ueCxmPWUueSx1PW4ueSxjPW8ueSxsPU1hdGgubWluKHIsaSxzKSxwPU1hdGgubWluKGYsdSxjKSxkPU1hdGgubWF4KHIsaSxzKSxtPU1hdGgubWF4KGYsdSxjKSxfPW8ubmV4dDtmb3IoO18hPT1lOyl7aWYoXy54Pj1sJiZfLng8PWQmJl8ueT49cCYmXy55PD1tJiZOZihyLGYsaSx1LHMsYyxfLngsXy55KSYmdm4oXy5wcmV2LF8sXy5uZXh0KT49MClyZXR1cm4hMTtfPV8ubmV4dH1yZXR1cm4hMH1mdW5jdGlvbiBRTih0LGUsbixvKXtsZXQgcj10LnByZXYsaT10LHM9dC5uZXh0O2lmKHZuKHIsaSxzKT49MClyZXR1cm4hMTtsZXQgZj1yLngsdT1pLngsYz1zLngsbD1yLnkscD1pLnksZD1zLnksbT1NYXRoLm1pbihmLHUsYyksXz1NYXRoLm1pbihsLHAsZCksZz1NYXRoLm1heChmLHUsYyksYj1NYXRoLm1heChsLHAsZCksVD1OMChtLF8sZSxuLG8pLE89TjAoZyxiLGUsbixvKSxFPXQucHJldlosdz10Lm5leHRaO2Zvcig7RSYmRS56Pj1UJiZ3JiZ3Lno8PU87KXtpZihFLng+PW0mJkUueDw9ZyYmRS55Pj1fJiZFLnk8PWImJkUhPT1yJiZFIT09cyYmTmYoZixsLHUscCxjLGQsRS54LEUueSkmJnZuKEUucHJldixFLEUubmV4dCk+PTB8fChFPUUucHJldlosdy54Pj1tJiZ3Lng8PWcmJncueT49XyYmdy55PD1iJiZ3IT09ciYmdyE9PXMmJk5mKGYsbCx1LHAsYyxkLHcueCx3LnkpJiZ2bih3LnByZXYsdyx3Lm5leHQpPj0wKSlyZXR1cm4hMTt3PXcubmV4dFp9Zm9yKDtFJiZFLno+PVQ7KXtpZihFLng+PW0mJkUueDw9ZyYmRS55Pj1fJiZFLnk8PWImJkUhPT1yJiZFIT09cyYmTmYoZixsLHUscCxjLGQsRS54LEUueSkmJnZuKEUucHJldixFLEUubmV4dCk+PTApcmV0dXJuITE7RT1FLnByZXZafWZvcig7dyYmdy56PD1POyl7aWYody54Pj1tJiZ3Lng8PWcmJncueT49XyYmdy55PD1iJiZ3IT09ciYmdyE9PXMmJk5mKGYsbCx1LHAsYyxkLHcueCx3LnkpJiZ2bih3LnByZXYsdyx3Lm5leHQpPj0wKXJldHVybiExO3c9dy5uZXh0Wn1yZXR1cm4hMH1mdW5jdGlvbiBKTih0LGUpe2xldCBuPXQ7ZG97bGV0IG89bi5wcmV2LHI9bi5uZXh0Lm5leHQ7IWhhKG8scikmJmZ3KG8sbixuLm5leHQscikmJnZmKG8scikmJnZmKHIsbykmJihlLnB1c2goby5pLG4uaSxyLmkpLEZmKG4pLEZmKG4ubmV4dCksbj10PXIpLG49bi5uZXh0fXdoaWxlKG4hPT10KTtyZXR1cm4gdWMobil9ZnVuY3Rpb24gdEkodCxlLG4sbyxyLGkpe2xldCBzPXQ7ZG97bGV0IGY9cy5uZXh0Lm5leHQ7Zm9yKDtmIT09cy5wcmV2Oyl7aWYocy5pIT09Zi5pJiZmSShzLGYpKXtsZXQgdT11dyhzLGYpO3M9dWMocyxzLm5leHQpLHU9dWModSx1Lm5leHQpLElmKHMsZSxuLG8scixpLDApLElmKHUsZSxuLG8scixpLDApO3JldHVybn1mPWYubmV4dH1zPXMubmV4dH13aGlsZShzIT09dCl9ZnVuY3Rpb24gZUkodCxlLG4sbyl7bGV0IHI9W107Zm9yKGxldCBpPTAscz1lLmxlbmd0aDtpPHM7aSsrKXtsZXQgZj1lW2ldKm8sdT1pPHMtMT9lW2krMV0qbzp0Lmxlbmd0aCxjPWN3KHQsZix1LG8sITEpO2M9PT1jLm5leHQmJihjLnN0ZWluZXI9ITApLHIucHVzaChhSShjKSl9ci5zb3J0KG5JKTtmb3IobGV0IGk9MDtpPHIubGVuZ3RoO2krKyluPW9JKHJbaV0sbik7cmV0dXJuIG59ZnVuY3Rpb24gbkkodCxlKXtsZXQgbj10LngtZS54O2lmKG49PT0wJiYobj10LnktZS55LG49PT0wKSl7bGV0IG89KHQubmV4dC55LXQueSkvKHQubmV4dC54LXQueCkscj0oZS5uZXh0LnktZS55KS8oZS5uZXh0LngtZS54KTtuPW8tcn1yZXR1cm4gbn1mdW5jdGlvbiBvSSh0LGUpe2xldCBuPXJJKHQsZSk7aWYoIW4pcmV0dXJuIGU7bGV0IG89dXcobix0KTtyZXR1cm4gdWMobyxvLm5leHQpLHVjKG4sbi5uZXh0KX1mdW5jdGlvbiBySSh0LGUpe2xldCBuPWUsbz10Lngscj10LnksaT0tMS8wLHM7aWYoaGEodCxuKSlyZXR1cm4gbjtkb3tpZihoYSh0LG4ubmV4dCkpcmV0dXJuIG4ubmV4dDtpZihyPD1uLnkmJnI+PW4ubmV4dC55JiZuLm5leHQueSE9PW4ueSl7bGV0IHA9bi54KyhyLW4ueSkqKG4ubmV4dC54LW4ueCkvKG4ubmV4dC55LW4ueSk7aWYocDw9byYmcD5pJiYoaT1wLHM9bi54PG4ubmV4dC54P246bi5uZXh0LHA9PT1vKSlyZXR1cm4gc31uPW4ubmV4dH13aGlsZShuIT09ZSk7aWYoIXMpcmV0dXJuIG51bGw7bGV0IGY9cyx1PXMueCxjPXMueSxsPTEvMDtuPXM7ZG97aWYobz49bi54JiZuLng+PXUmJm8hPT1uLngmJmF3KHI8Yz9vOmkscix1LGMscjxjP2k6byxyLG4ueCxuLnkpKXtsZXQgcD1NYXRoLmFicyhyLW4ueSkvKG8tbi54KTt2ZihuLHQpJiYocDxsfHxwPT09bCYmKG4ueD5zLnh8fG4ueD09PXMueCYmaUkocyxuKSkpJiYocz1uLGw9cCl9bj1uLm5leHR9d2hpbGUobiE9PWYpO3JldHVybiBzfWZ1bmN0aW9uIGlJKHQsZSl7cmV0dXJuIHZuKHQucHJldix0LGUucHJldik8MCYmdm4oZS5uZXh0LHQsdC5uZXh0KTwwfWZ1bmN0aW9uIHNJKHQsZSxuLG8pe2xldCByPXQ7ZG8gci56PT09MCYmKHIuej1OMChyLngsci55LGUsbixvKSksci5wcmV2Wj1yLnByZXYsci5uZXh0Wj1yLm5leHQscj1yLm5leHQ7d2hpbGUociE9PXQpO3IucHJldloubmV4dFo9bnVsbCxyLnByZXZaPW51bGwsY0kocil9ZnVuY3Rpb24gY0kodCl7bGV0IGUsbj0xO2Rve2xldCBvPXQscjt0PW51bGw7bGV0IGk9bnVsbDtmb3IoZT0wO287KXtlKys7bGV0IHM9byxmPTA7Zm9yKGxldCBjPTA7YzxuJiYoZisrLHM9cy5uZXh0WiwhIXMpO2MrKyk7bGV0IHU9bjtmb3IoO2Y+MHx8dT4wJiZzOylmIT09MCYmKHU9PT0wfHwhc3x8by56PD1zLnopPyhyPW8sbz1vLm5leHRaLGYtLSk6KHI9cyxzPXMubmV4dFosdS0tKSxpP2kubmV4dFo9cjp0PXIsci5wcmV2Wj1pLGk9cjtvPXN9aS5uZXh0Wj1udWxsLG4qPTJ9d2hpbGUoZT4xKTtyZXR1cm4gdH1mdW5jdGlvbiBOMCh0LGUsbixvLHIpe3JldHVybiB0PSh0LW4pKnJ8MCxlPShlLW8pKnJ8MCx0PSh0fHQ8PDgpJjE2NzExOTM1LHQ9KHR8dDw8NCkmMjUyNjQ1MTM1LHQ9KHR8dDw8MikmODU4OTkzNDU5LHQ9KHR8dDw8MSkmMTQzMTY1NTc2NSxlPShlfGU8PDgpJjE2NzExOTM1LGU9KGV8ZTw8NCkmMjUyNjQ1MTM1LGU9KGV8ZTw8MikmODU4OTkzNDU5LGU9KGV8ZTw8MSkmMTQzMTY1NTc2NSx0fGU8PDF9ZnVuY3Rpb24gYUkodCl7bGV0IGU9dCxuPXQ7ZG8oZS54PG4ueHx8ZS54PT09bi54JiZlLnk8bi55KSYmKG49ZSksZT1lLm5leHQ7d2hpbGUoZSE9PXQpO3JldHVybiBufWZ1bmN0aW9uIGF3KHQsZSxuLG8scixpLHMsZil7cmV0dXJuKHItcykqKGUtZik+PSh0LXMpKihpLWYpJiYodC1zKSooby1mKT49KG4tcykqKGUtZikmJihuLXMpKihpLWYpPj0oci1zKSooby1mKX1mdW5jdGlvbiBOZih0LGUsbixvLHIsaSxzLGYpe3JldHVybiEodD09PXMmJmU9PT1mKSYmYXcodCxlLG4sbyxyLGkscyxmKX1mdW5jdGlvbiBmSSh0LGUpe3JldHVybiB0Lm5leHQuaSE9PWUuaSYmdC5wcmV2LmkhPT1lLmkmJiF1SSh0LGUpJiYodmYodCxlKSYmdmYoZSx0KSYmbEkodCxlKSYmKHZuKHQucHJldix0LGUucHJldil8fHZuKHQsZS5wcmV2LGUpKXx8aGEodCxlKSYmdm4odC5wcmV2LHQsdC5uZXh0KT4wJiZ2bihlLnByZXYsZSxlLm5leHQpPjApfWZ1bmN0aW9uIHZuKHQsZSxuKXtyZXR1cm4oZS55LXQueSkqKG4ueC1lLngpLShlLngtdC54KSoobi55LWUueSl9ZnVuY3Rpb24gaGEodCxlKXtyZXR1cm4gdC54PT09ZS54JiZ0Lnk9PT1lLnl9ZnVuY3Rpb24gZncodCxlLG4sbyl7bGV0IHI9bmQodm4odCxlLG4pKSxpPW5kKHZuKHQsZSxvKSkscz1uZCh2bihuLG8sdCkpLGY9bmQodm4obixvLGUpKTtyZXR1cm4hIShyIT09aSYmcyE9PWZ8fHI9PT0wJiZlZCh0LG4sZSl8fGk9PT0wJiZlZCh0LG8sZSl8fHM9PT0wJiZlZChuLHQsbyl8fGY9PT0wJiZlZChuLGUsbykpfWZ1bmN0aW9uIGVkKHQsZSxuKXtyZXR1cm4gZS54PD1NYXRoLm1heCh0Lngsbi54KSYmZS54Pj1NYXRoLm1pbih0Lngsbi54KSYmZS55PD1NYXRoLm1heCh0Lnksbi55KSYmZS55Pj1NYXRoLm1pbih0Lnksbi55KX1mdW5jdGlvbiBuZCh0KXtyZXR1cm4gdD4wPzE6dDwwPy0xOjB9ZnVuY3Rpb24gdUkodCxlKXtsZXQgbj10O2Rve2lmKG4uaSE9PXQuaSYmbi5uZXh0LmkhPT10LmkmJm4uaSE9PWUuaSYmbi5uZXh0LmkhPT1lLmkmJmZ3KG4sbi5uZXh0LHQsZSkpcmV0dXJuITA7bj1uLm5leHR9d2hpbGUobiE9PXQpO3JldHVybiExfWZ1bmN0aW9uIHZmKHQsZSl7cmV0dXJuIHZuKHQucHJldix0LHQubmV4dCk8MD92bih0LGUsdC5uZXh0KT49MCYmdm4odCx0LnByZXYsZSk+PTA6dm4odCxlLHQucHJldik8MHx8dm4odCx0Lm5leHQsZSk8MH1mdW5jdGlvbiBsSSh0LGUpe2xldCBuPXQsbz0hMSxyPSh0LngrZS54KS8yLGk9KHQueStlLnkpLzI7ZG8gbi55PmkhPW4ubmV4dC55PmkmJm4ubmV4dC55IT09bi55JiZyPChuLm5leHQueC1uLngpKihpLW4ueSkvKG4ubmV4dC55LW4ueSkrbi54JiYobz0hbyksbj1uLm5leHQ7d2hpbGUobiE9PXQpO3JldHVybiBvfWZ1bmN0aW9uIHV3KHQsZSl7bGV0IG49STAodC5pLHQueCx0LnkpLG89STAoZS5pLGUueCxlLnkpLHI9dC5uZXh0LGk9ZS5wcmV2O3JldHVybiB0Lm5leHQ9ZSxlLnByZXY9dCxuLm5leHQ9cixyLnByZXY9bixvLm5leHQ9bixuLnByZXY9byxpLm5leHQ9byxvLnByZXY9aSxvfWZ1bmN0aW9uIHN3KHQsZSxuLG8pe2xldCByPUkwKHQsZSxuKTtyZXR1cm4gbz8oci5uZXh0PW8ubmV4dCxyLnByZXY9byxvLm5leHQucHJldj1yLG8ubmV4dD1yKTooci5wcmV2PXIsci5uZXh0PXIpLHJ9ZnVuY3Rpb24gRmYodCl7dC5uZXh0LnByZXY9dC5wcmV2LHQucHJldi5uZXh0PXQubmV4dCx0LnByZXZaJiYodC5wcmV2Wi5uZXh0Wj10Lm5leHRaKSx0Lm5leHRaJiYodC5uZXh0Wi5wcmV2Wj10LnByZXZaKX1mdW5jdGlvbiBJMCh0LGUsbil7cmV0dXJue2k6dCx4OmUseTpuLHByZXY6bnVsbCxuZXh0Om51bGwsejowLHByZXZaOm51bGwsbmV4dFo6bnVsbCxzdGVpbmVyOiExfX1mdW5jdGlvbiBwSSh0LGUsbixvKXtsZXQgcj0wO2ZvcihsZXQgaT1lLHM9bi1vO2k8bjtpKz1vKXIrPSh0W3NdLXRbaV0pKih0W2krMV0rdFtzKzFdKSxzPWk7cmV0dXJuIHJ9dmFyIGx3PSQoKCk9Pnt9KTt2YXIgb2QsQ28sbGM9JCgoKT0+eyRzKCk7b2Q9e0NMT0NLV0lTRTpIdC5DVyxDT1VOVEVSX0NMT0NLV0lTRTpIdC5DQ1d9O29kLnZhbGlkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09b2QuQ0xPQ0tXSVNFfHx0PT09b2QuQ09VTlRFUl9DTE9DS1dJU0V9O0NvPU9iamVjdC5mcmVlemUob2QpfSk7dmFyIGRJLG1JLGxzLGh3LF93LHl3LHB3LGR3LG13LEJpLGd3LEF3LGJ3LF9hLGhJLF9JLHlJLEYwLFBlLHFyPSQoKCk9PntsdygpO1VlKCk7THQoKTtJZSgpO1d0KCk7RGUoKTtmdCgpOyR0KCk7TWYoKTtYZSgpO1llKCk7S3QoKTt0bigpO2xjKCk7ZEk9bmV3IGEsbUk9bmV3IGEsbHM9e307bHMuY29tcHV0ZUFyZWEyRD1mdW5jdGlvbih0KXt5LmRlZmluZWQoInBvc2l0aW9ucyIsdCkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoInBvc2l0aW9ucy5sZW5ndGgiLHQubGVuZ3RoLDMpO2xldCBlPXQubGVuZ3RoLG49MDtmb3IobGV0IG89ZS0xLHI9MDtyPGU7bz1yKyspe2xldCBpPXRbb10scz10W3JdO24rPWkueCpzLnktcy54KmkueX1yZXR1cm4gbiouNX07bHMuY29tcHV0ZVdpbmRpbmdPcmRlcjJEPWZ1bmN0aW9uKHQpe3JldHVybiBscy5jb21wdXRlQXJlYTJEKHQpPjA/Q28uQ09VTlRFUl9DTE9DS1dJU0U6Q28uQ0xPQ0tXSVNFfTtscy50cmlhbmd1bGF0ZT1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgicG9zaXRpb25zIix0KTtsZXQgbj1KLnBhY2tBcnJheSh0KTtyZXR1cm4gdjAobixlLDIpfTtodz1uZXcgYSxfdz1uZXcgYSx5dz1uZXcgYSxwdz1uZXcgYSxkdz1uZXcgYSxtdz1uZXcgYSxCaT1uZXcgYSxndz1uZXcgSixBdz1uZXcgSixidz1uZXcgSixfYT1uZXcgSjtscy5jb21wdXRlU3ViZGl2aXNpb249ZnVuY3Rpb24odCxlLG4sbyxyKXtyPXI/P1AuUkFESUFOU19QRVJfREVHUkVFO2xldCBpPWgobyk7eS50eXBlT2Yub2JqZWN0KCJlbGxpcHNvaWQiLHQpLHkuZGVmaW5lZCgicG9zaXRpb25zIixlKSx5LmRlZmluZWQoImluZGljZXMiLG4pLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJpbmRpY2VzLmxlbmd0aCIsbi5sZW5ndGgsMykseS50eXBlT2YubnVtYmVyLmVxdWFscygiaW5kaWNlcy5sZW5ndGggJSAzIiwiMCIsbi5sZW5ndGglMywwKSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW4oImdyYW51bGFyaXR5IixyLDApO2xldCBzPW4uc2xpY2UoMCksZix1PWUubGVuZ3RoLGM9bmV3IEFycmF5KHUqMyksbD1uZXcgQXJyYXkodSoyKSxwPTAsZD0wO2ZvcihmPTA7Zjx1O2YrKyl7bGV0IEU9ZVtmXTtpZihjW3ArK109RS54LGNbcCsrXT1FLnksY1twKytdPUUueixpKXtsZXQgdz1vW2ZdO2xbZCsrXT13LngsbFtkKytdPXcueX19bGV0IG09W10sXz17fSxnPXQubWF4aW11bVJhZGl1cyxiPVAuY2hvcmRMZW5ndGgocixnKSxUPWIqYjtmb3IoO3MubGVuZ3RoPjA7KXtsZXQgRT1zLnBvcCgpLHc9cy5wb3AoKSxDPXMucG9wKCksTT1hLmZyb21BcnJheShjLEMqMyxodyksTj1hLmZyb21BcnJheShjLHcqMyxfdyksRj1hLmZyb21BcnJheShjLEUqMyx5dyksSSx2LEI7aSYmKEk9Si5mcm9tQXJyYXkobCxDKjIsZ3cpLHY9Si5mcm9tQXJyYXkobCx3KjIsQXcpLEI9Si5mcm9tQXJyYXkobCxFKjIsYncpKTtsZXQgQT1hLm11bHRpcGx5QnlTY2FsYXIoYS5ub3JtYWxpemUoTSxwdyksZyxwdyksUz1hLm11bHRpcGx5QnlTY2FsYXIoYS5ub3JtYWxpemUoTixkdyksZyxkdykseD1hLm11bHRpcGx5QnlTY2FsYXIoYS5ub3JtYWxpemUoRixtdyksZyxtdyksTD1hLm1hZ25pdHVkZVNxdWFyZWQoYS5zdWJ0cmFjdChBLFMsQmkpKSx6PWEubWFnbml0dWRlU3F1YXJlZChhLnN1YnRyYWN0KFMseCxCaSkpLGo9YS5tYWduaXR1ZGVTcXVhcmVkKGEuc3VidHJhY3QoeCxBLEJpKSksaz1NYXRoLm1heChMLHosaikscSxXLFI7az5UP0w9PT1rPyhxPWAke01hdGgubWluKEMsdyl9ICR7TWF0aC5tYXgoQyx3KX1gLGY9X1txXSxoKGYpfHwoVz1hLmFkZChNLE4sQmkpLGEubXVsdGlwbHlCeVNjYWxhcihXLC41LFcpLGMucHVzaChXLngsVy55LFcueiksZj1jLmxlbmd0aC8zLTEsX1txXT1mLGkmJihSPUouYWRkKEksdixfYSksSi5tdWx0aXBseUJ5U2NhbGFyKFIsLjUsUiksbC5wdXNoKFIueCxSLnkpKSkscy5wdXNoKEMsZixFKSxzLnB1c2goZix3LEUpKTp6PT09az8ocT1gJHtNYXRoLm1pbih3LEUpfSAke01hdGgubWF4KHcsRSl9YCxmPV9bcV0saChmKXx8KFc9YS5hZGQoTixGLEJpKSxhLm11bHRpcGx5QnlTY2FsYXIoVywuNSxXKSxjLnB1c2goVy54LFcueSxXLnopLGY9Yy5sZW5ndGgvMy0xLF9bcV09ZixpJiYoUj1KLmFkZCh2LEIsX2EpLEoubXVsdGlwbHlCeVNjYWxhcihSLC41LFIpLGwucHVzaChSLngsUi55KSkpLHMucHVzaCh3LGYsQykscy5wdXNoKGYsRSxDKSk6aj09PWsmJihxPWAke01hdGgubWluKEUsQyl9ICR7TWF0aC5tYXgoRSxDKX1gLGY9X1txXSxoKGYpfHwoVz1hLmFkZChGLE0sQmkpLGEubXVsdGlwbHlCeVNjYWxhcihXLC41LFcpLGMucHVzaChXLngsVy55LFcueiksZj1jLmxlbmd0aC8zLTEsX1txXT1mLGkmJihSPUouYWRkKEIsSSxfYSksSi5tdWx0aXBseUJ5U2NhbGFyKFIsLjUsUiksbC5wdXNoKFIueCxSLnkpKSkscy5wdXNoKEUsZix3KSxzLnB1c2goZixDLHcpKToobS5wdXNoKEMpLG0ucHVzaCh3KSxtLnB1c2goRSkpfWxldCBPPXthdHRyaWJ1dGVzOntwb3NpdGlvbjpuZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmN9KX0saW5kaWNlczptLHByaW1pdGl2ZVR5cGU6RHQuVFJJQU5HTEVTfTtyZXR1cm4gaSYmKE8uYXR0cmlidXRlcy5zdD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6bH0pKSxuZXcgQnQoTyl9O2hJPW5ldyBjdCxfST1uZXcgY3QseUk9bmV3IGN0LEYwPW5ldyBjdDtscy5jb21wdXRlUmh1bWJMaW5lU3ViZGl2aXNpb249ZnVuY3Rpb24odCxlLG4sbyxyKXtyPXI/P1AuUkFESUFOU19QRVJfREVHUkVFO2xldCBpPWgobyk7eS50eXBlT2Yub2JqZWN0KCJlbGxpcHNvaWQiLHQpLHkuZGVmaW5lZCgicG9zaXRpb25zIixlKSx5LmRlZmluZWQoImluZGljZXMiLG4pLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJpbmRpY2VzLmxlbmd0aCIsbi5sZW5ndGgsMykseS50eXBlT2YubnVtYmVyLmVxdWFscygiaW5kaWNlcy5sZW5ndGggJSAzIiwiMCIsbi5sZW5ndGglMywwKSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW4oImdyYW51bGFyaXR5IixyLDApO2xldCBzPW4uc2xpY2UoMCksZix1PWUubGVuZ3RoLGM9bmV3IEFycmF5KHUqMyksbD1uZXcgQXJyYXkodSoyKSxwPTAsZD0wO2ZvcihmPTA7Zjx1O2YrKyl7bGV0IEM9ZVtmXTtpZihjW3ArK109Qy54LGNbcCsrXT1DLnksY1twKytdPUMueixpKXtsZXQgTT1vW2ZdO2xbZCsrXT1NLngsbFtkKytdPU0ueX19bGV0IG09W10sXz17fSxnPXQubWF4aW11bVJhZGl1cyxiPVAuY2hvcmRMZW5ndGgocixnKSxUPW5ldyBabyh2b2lkIDAsdm9pZCAwLHQpLE89bmV3IFpvKHZvaWQgMCx2b2lkIDAsdCksRT1uZXcgWm8odm9pZCAwLHZvaWQgMCx0KTtmb3IoO3MubGVuZ3RoPjA7KXtsZXQgQz1zLnBvcCgpLE09cy5wb3AoKSxOPXMucG9wKCksRj1hLmZyb21BcnJheShjLE4qMyxodyksST1hLmZyb21BcnJheShjLE0qMyxfdyksdj1hLmZyb21BcnJheShjLEMqMyx5dyksQixBLFM7aSYmKEI9Si5mcm9tQXJyYXkobCxOKjIsZ3cpLEE9Si5mcm9tQXJyYXkobCxNKjIsQXcpLFM9Si5mcm9tQXJyYXkobCxDKjIsYncpKTtsZXQgeD10LmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKEYsaEkpLEw9dC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhJLF9JKSx6PXQuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWModix5SSk7VC5zZXRFbmRQb2ludHMoeCxMKTtsZXQgaj1ULnN1cmZhY2VEaXN0YW5jZTtPLnNldEVuZFBvaW50cyhMLHopO2xldCBrPU8uc3VyZmFjZURpc3RhbmNlO0Uuc2V0RW5kUG9pbnRzKHoseCk7bGV0IHE9RS5zdXJmYWNlRGlzdGFuY2UsVz1NYXRoLm1heChqLGsscSksUixudCxhdCxsdCxodDtXPmI/aj09PVc/KFI9YCR7TWF0aC5taW4oTixNKX0gJHtNYXRoLm1heChOLE0pfWAsZj1fW1JdLGgoZil8fChudD1ULmludGVycG9sYXRlVXNpbmdGcmFjdGlvbiguNSxGMCksYXQ9KHguaGVpZ2h0K0wuaGVpZ2h0KSouNSxsdD1hLmZyb21SYWRpYW5zKG50LmxvbmdpdHVkZSxudC5sYXRpdHVkZSxhdCx0LEJpKSxjLnB1c2gobHQueCxsdC55LGx0LnopLGY9Yy5sZW5ndGgvMy0xLF9bUl09ZixpJiYoaHQ9Si5hZGQoQixBLF9hKSxKLm11bHRpcGx5QnlTY2FsYXIoaHQsLjUsaHQpLGwucHVzaChodC54LGh0LnkpKSkscy5wdXNoKE4sZixDKSxzLnB1c2goZixNLEMpKTprPT09Vz8oUj1gJHtNYXRoLm1pbihNLEMpfSAke01hdGgubWF4KE0sQyl9YCxmPV9bUl0saChmKXx8KG50PU8uaW50ZXJwb2xhdGVVc2luZ0ZyYWN0aW9uKC41LEYwKSxhdD0oTC5oZWlnaHQrei5oZWlnaHQpKi41LGx0PWEuZnJvbVJhZGlhbnMobnQubG9uZ2l0dWRlLG50LmxhdGl0dWRlLGF0LHQsQmkpLGMucHVzaChsdC54LGx0LnksbHQueiksZj1jLmxlbmd0aC8zLTEsX1tSXT1mLGkmJihodD1KLmFkZChBLFMsX2EpLEoubXVsdGlwbHlCeVNjYWxhcihodCwuNSxodCksbC5wdXNoKGh0LngsaHQueSkpKSxzLnB1c2goTSxmLE4pLHMucHVzaChmLEMsTikpOnE9PT1XJiYoUj1gJHtNYXRoLm1pbihDLE4pfSAke01hdGgubWF4KEMsTil9YCxmPV9bUl0saChmKXx8KG50PUUuaW50ZXJwb2xhdGVVc2luZ0ZyYWN0aW9uKC41LEYwKSxhdD0oei5oZWlnaHQreC5oZWlnaHQpKi41LGx0PWEuZnJvbVJhZGlhbnMobnQubG9uZ2l0dWRlLG50LmxhdGl0dWRlLGF0LHQsQmkpLGMucHVzaChsdC54LGx0LnksbHQueiksZj1jLmxlbmd0aC8zLTEsX1tSXT1mLGkmJihodD1KLmFkZChTLEIsX2EpLEoubXVsdGlwbHlCeVNjYWxhcihodCwuNSxodCksbC5wdXNoKGh0LngsaHQueSkpKSxzLnB1c2goQyxmLE0pLHMucHVzaChmLE4sTSkpOihtLnB1c2goTiksbS5wdXNoKE0pLG0ucHVzaChDKSl9bGV0IHc9e2F0dHJpYnV0ZXM6e3Bvc2l0aW9uOm5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Y30pfSxpbmRpY2VzOm0scHJpbWl0aXZlVHlwZTpEdC5UUklBTkdMRVN9O3JldHVybiBpJiYody5hdHRyaWJ1dGVzLnN0PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpsfSkpLG5ldyBCdCh3KX07bHMuc2NhbGVUb0dlb2RldGljSGVpZ2h0PWZ1bmN0aW9uKHQsZSxuLG8pe249bj8/WS5kZWZhdWx0O2xldCByPWRJLGk9bUk7aWYoZT1lPz8wLG89bz8/ITAsaCh0KSl7bGV0IHM9dC5sZW5ndGg7Zm9yKGxldCBmPTA7ZjxzO2YrPTMpYS5mcm9tQXJyYXkodCxmLGkpLG8mJihpPW4uc2NhbGVUb0dlb2RldGljU3VyZmFjZShpLGkpKSxlIT09MCYmKHI9bi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoaSxyKSxhLm11bHRpcGx5QnlTY2FsYXIocixlLHIpLGEuYWRkKGkscixpKSksdFtmXT1pLngsdFtmKzFdPWkueSx0W2YrMl09aS56fXJldHVybiB0fTtQZT1sc30pO2Z1bmN0aW9uIHBzKCl7dGhpcy5fYXJyYXk9W10sdGhpcy5fb2Zmc2V0PTAsdGhpcy5fbGVuZ3RoPTB9dmFyIEwwLFR3PSQoKCk9PntPYmplY3QuZGVmaW5lUHJvcGVydGllcyhwcy5wcm90b3R5cGUse2xlbmd0aDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xlbmd0aH19fSk7cHMucHJvdG90eXBlLmVucXVldWU9ZnVuY3Rpb24odCl7dGhpcy5fYXJyYXkucHVzaCh0KSx0aGlzLl9sZW5ndGgrK307cHMucHJvdG90eXBlLmRlcXVldWU9ZnVuY3Rpb24oKXtpZih0aGlzLl9sZW5ndGg9PT0wKXJldHVybjtsZXQgdD10aGlzLl9hcnJheSxlPXRoaXMuX29mZnNldCxuPXRbZV07cmV0dXJuIHRbZV09dm9pZCAwLGUrKyxlPjEwJiZlKjI+dC5sZW5ndGgmJih0aGlzLl9hcnJheT10LnNsaWNlKGUpLGU9MCksdGhpcy5fb2Zmc2V0PWUsdGhpcy5fbGVuZ3RoLS0sbn07cHMucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXtpZih0aGlzLl9sZW5ndGghPT0wKXJldHVybiB0aGlzLl9hcnJheVt0aGlzLl9vZmZzZXRdfTtwcy5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2FycmF5LmluZGV4T2YodCkhPT0tMX07cHMucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fYXJyYXkubGVuZ3RoPXRoaXMuX29mZnNldD10aGlzLl9sZW5ndGg9MH07cHMucHJvdG90eXBlLnNvcnQ9ZnVuY3Rpb24odCl7dGhpcy5fb2Zmc2V0PjAmJih0aGlzLl9hcnJheT10aGlzLl9hcnJheS5zbGljZSh0aGlzLl9vZmZzZXQpLHRoaXMuX29mZnNldD0wKSx0aGlzLl9hcnJheS5zb3J0KHQpfTtMMD1wc30pO2Z1bmN0aW9uIEV3KHQsZSxuLG8pe3JldHVybiBKLnN1YnRyYWN0KGUsdCxwYyksSi5tdWx0aXBseUJ5U2NhbGFyKHBjLG4vbyxwYyksSi5hZGQodCxwYyxwYyksW3BjLngscGMueV19ZnVuY3Rpb24gZ0kodCxlLG4sbyl7cmV0dXJuIGEuc3VidHJhY3QoZSx0LGRzKSxhLm11bHRpcGx5QnlTY2FsYXIoZHMsbi9vLGRzKSxhLmFkZCh0LGRzLGRzKSxbZHMueCxkcy55LGRzLnpdfWZ1bmN0aW9uIFNJKHQsZSxuKXtsZXQgbz1uLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHQsaWQpLHI9bi5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhlLHNkKTtpZihNYXRoLnNpZ24oby5sYXRpdHVkZSk9PT1NYXRoLnNpZ24oci5sYXRpdHVkZSkpcmV0dXJuO3JkLnNldEVuZFBvaW50cyhvLHIpO2xldCBpPXJkLmZpbmRJbnRlcnNlY3Rpb25XaXRoTGF0aXR1ZGUoMCxSSSk7aWYoIWgoaSkpcmV0dXJuO2xldCBzPU1hdGgubWluKG8ubG9uZ2l0dWRlLHIubG9uZ2l0dWRlKSxmPU1hdGgubWF4KG8ubG9uZ2l0dWRlLHIubG9uZ2l0dWRlKTtpZihNYXRoLmFicyhmLXMpPlAuUEkpe2xldCB1PXM7cz1mLGY9dX1pZighKGkubG9uZ2l0dWRlPHN8fGkubG9uZ2l0dWRlPmYpKXJldHVybiBuLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGkpfWZ1bmN0aW9uIENJKHQsZSxuLG8pe2lmKG89PT1oZS5SSFVNQilyZXR1cm4gU0kodCxlLG4pO2xldCByPWhvLmxpbmVTZWdtZW50UGxhbmUodCxlLG9uLk9SSUdJTl9YWV9QTEFORSk7aWYoaChyKSlyZXR1cm4gbi5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKHIscil9ZnVuY3Rpb24gUEkodCxlLG4pe2xldCBvPVtdLHIsaSxzLGYsdSxjPTA7Zm9yKDtjPHQubGVuZ3RoOyl7cj10W2NdLGk9dFsoYysxKSV0Lmxlbmd0aF0scz1QLnNpZ24oci56KSxmPVAuc2lnbihpLnopO2xldCBsPXA9PmUuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMocCx4SSkubG9uZ2l0dWRlO2lmKHM9PT0wKW8ucHVzaCh7cG9zaXRpb246Yyx0eXBlOnMsdmlzaXRlZDohMSxuZXh0OmYsdGhldGE6bChyKX0pO2Vsc2UgaWYoZiE9PTApe2lmKHU9Q0kocixpLGUsbiksKytjLCFoKHUpKWNvbnRpbnVlO3Quc3BsaWNlKGMsMCx1KSxvLnB1c2goe3Bvc2l0aW9uOmMsdHlwZTpzLHZpc2l0ZWQ6ITEsbmV4dDpmLHRoZXRhOmwodSl9KX0rK2N9cmV0dXJuIG99ZnVuY3Rpb24gUncodCxlLG4sbyxyLGkscyl7bGV0IGY9W10sdT1pLGM9cD0+ZD0+ZC5wb3NpdGlvbj09PXAsbD1bXTtkb3tsZXQgcD1uW3VdO2YucHVzaChwKTtsZXQgZD1vLmZpbmRJbmRleChjKHUpKSxtPW9bZF07aWYoIWgobSkpeysrdTtjb250aW51ZX1sZXR7dmlzaXRlZDpfLHR5cGU6ZyxuZXh0OmJ9PW07aWYobS52aXNpdGVkPSEwLGc9PT0wKXtpZihiPT09MCl7bGV0IHc9b1tkLShzPzE6LTEpXTtpZih3Py5wb3NpdGlvbj09PXUrMSl3LnZpc2l0ZWQ9ITA7ZWxzZXsrK3U7Y29udGludWV9fWlmKCFfJiZzJiZiPjB8fGk9PT11JiYhcyYmYjwwKXsrK3U7Y29udGludWV9fWlmKCEocz9nPj0wOmc8PTApKXsrK3U7Y29udGludWV9X3x8bC5wdXNoKHUpO2xldCBPPWQrKHM/MTotMSksRT1vW09dO2lmKCFoKEUpKXsrK3U7Y29udGludWV9dT1FLnBvc2l0aW9ufXdoaWxlKHU8bi5sZW5ndGgmJnU+PTAmJnUhPT1pJiZmLmxlbmd0aDxuLmxlbmd0aCk7dC5zcGxpY2UoZSxyLGYpO2ZvcihsZXQgcCBvZiBsKWU9UncodCwrK2UsbixvLDAscCwhcyk7cmV0dXJuIGV9dmFyIE9uLHBjLGRzLGlkLHNkLEFJLGJJLHJkLFRJLHdJLE9JLEVJLFJJLHhJLE1JLE5JLElJLHZJLHd3LE93LEZJLExJLF9lLExmPSQoKCk9PntmYygpO2pyKCk7VWUoKTtMdCgpO0llKCk7RGUoKTtmdCgpOyR0KCk7TWYoKTtYZSgpO1llKCk7YW4oKTtzaSgpOyRlKCk7dGMoKTtLdCgpO0JuKCk7ZnMoKTtpdygpO3FyKCk7dG4oKTtLbygpO1R3KCk7bGMoKTtPbj17fTtPbi5jb21wdXRlSGllcmFyY2h5UGFja2VkTGVuZ3RoPWZ1bmN0aW9uKHQsZSl7bGV0IG49MCxvPVt0XTtmb3IoO28ubGVuZ3RoPjA7KXtsZXQgcj1vLnBvcCgpO2lmKCFoKHIpKWNvbnRpbnVlO24rPTI7bGV0IGk9ci5wb3NpdGlvbnMscz1yLmhvbGVzO2lmKGgoaSkmJmkubGVuZ3RoPjAmJihuKz1pLmxlbmd0aCplLnBhY2tlZExlbmd0aCksaChzKSl7bGV0IGY9cy5sZW5ndGg7Zm9yKGxldCB1PTA7dTxmOysrdSlvLnB1c2goc1t1XSl9fXJldHVybiBufTtPbi5wYWNrUG9seWdvbkhpZXJhcmNoeT1mdW5jdGlvbih0LGUsbixvKXtsZXQgcj1bdF07Zm9yKDtyLmxlbmd0aD4wOyl7bGV0IGk9ci5wb3AoKTtpZighaChpKSljb250aW51ZTtsZXQgcz1pLnBvc2l0aW9ucyxmPWkuaG9sZXM7aWYoZVtuKytdPWgocyk/cy5sZW5ndGg6MCxlW24rK109aChmKT9mLmxlbmd0aDowLGgocykpe2xldCB1PXMubGVuZ3RoO2ZvcihsZXQgYz0wO2M8dTsrK2Msbis9by5wYWNrZWRMZW5ndGgpby5wYWNrKHNbY10sZSxuKX1pZihoKGYpKXtsZXQgdT1mLmxlbmd0aDtmb3IobGV0IGM9MDtjPHU7KytjKXIucHVzaChmW2NdKX19cmV0dXJuIG59O09uLnVucGFja1BvbHlnb25IaWVyYXJjaHk9ZnVuY3Rpb24odCxlLG4pe2xldCBvPXRbZSsrXSxyPXRbZSsrXSxpPW5ldyBBcnJheShvKSxzPXI+MD9uZXcgQXJyYXkocik6dm9pZCAwO2ZvcihsZXQgZj0wO2Y8bzsrK2YsZSs9bi5wYWNrZWRMZW5ndGgpaVtmXT1uLnVucGFjayh0LGUpO2ZvcihsZXQgZj0wO2Y8cjsrK2Ypc1tmXT1Pbi51bnBhY2tQb2x5Z29uSGllcmFyY2h5KHQsZSxuKSxlPXNbZl0uc3RhcnRpbmdJbmRleCxkZWxldGUgc1tmXS5zdGFydGluZ0luZGV4O3JldHVybntwb3NpdGlvbnM6aSxob2xlczpzLHN0YXJ0aW5nSW5kZXg6ZX19O3BjPW5ldyBKO2RzPW5ldyBhO09uLnN1YmRpdmlkZUxpbmVDb3VudD1mdW5jdGlvbih0LGUsbil7bGV0IHI9YS5kaXN0YW5jZSh0LGUpL24saT1NYXRoLm1heCgwLE1hdGguY2VpbChQLmxvZzIocikpKTtyZXR1cm4gTWF0aC5wb3coMixpKX07aWQ9bmV3IGN0LHNkPW5ldyBjdCxBST1uZXcgY3QsYkk9bmV3IGEscmQ9bmV3IFpvO09uLnN1YmRpdmlkZVJodW1iTGluZUNvdW50PWZ1bmN0aW9uKHQsZSxuLG8pe2xldCByPXQuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoZSxpZCksaT10LmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKG4sc2QpLGY9bmV3IFpvKHIsaSx0KS5zdXJmYWNlRGlzdGFuY2Uvbyx1PU1hdGgubWF4KDAsTWF0aC5jZWlsKFAubG9nMihmKSkpO3JldHVybiBNYXRoLnBvdygyLHUpfTtPbi5zdWJkaXZpZGVUZXhjb29yZExpbmU9ZnVuY3Rpb24odCxlLG4sbyxyLGkpe2xldCBzPU9uLnN1YmRpdmlkZUxpbmVDb3VudChuLG8sciksZj1KLmRpc3RhbmNlKHQsZSksdT1mL3MsYz1pO2MubGVuZ3RoPXMqMjtsZXQgbD0wO2ZvcihsZXQgcD0wO3A8cztwKyspe2xldCBkPUV3KHQsZSxwKnUsZik7Y1tsKytdPWRbMF0sY1tsKytdPWRbMV19cmV0dXJuIGN9O09uLnN1YmRpdmlkZUxpbmU9ZnVuY3Rpb24odCxlLG4sbyl7bGV0IHI9T24uc3ViZGl2aWRlTGluZUNvdW50KHQsZSxuKSxpPWEuZGlzdGFuY2UodCxlKSxzPWkvcjtoKG8pfHwobz1bXSk7bGV0IGY9bztmLmxlbmd0aD1yKjM7bGV0IHU9MDtmb3IobGV0IGM9MDtjPHI7YysrKXtsZXQgbD1nSSh0LGUsYypzLGkpO2ZbdSsrXT1sWzBdLGZbdSsrXT1sWzFdLGZbdSsrXT1sWzJdfXJldHVybiBmfTtPbi5zdWJkaXZpZGVUZXhjb29yZFJodW1iTGluZT1mdW5jdGlvbih0LGUsbixvLHIsaSxzKXtsZXQgZj1uLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKG8saWQpLHU9bi5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhyLHNkKTtyZC5zZXRFbmRQb2ludHMoZix1KTtsZXQgYz1yZC5zdXJmYWNlRGlzdGFuY2UvaSxsPU1hdGgubWF4KDAsTWF0aC5jZWlsKFAubG9nMihjKSkpLHA9TWF0aC5wb3coMixsKSxkPUouZGlzdGFuY2UodCxlKSxtPWQvcCxfPXM7Xy5sZW5ndGg9cCoyO2xldCBnPTA7Zm9yKGxldCBiPTA7YjxwO2IrKyl7bGV0IFQ9RXcodCxlLGIqbSxkKTtfW2crK109VFswXSxfW2crK109VFsxXX1yZXR1cm4gX307T24uc3ViZGl2aWRlUmh1bWJMaW5lPWZ1bmN0aW9uKHQsZSxuLG8scil7bGV0IGk9dC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhlLGlkKSxzPXQuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMobixzZCksZj1uZXcgWm8oaSxzLHQpO2lmKGgocil8fChyPVtdKSxmLnN1cmZhY2VEaXN0YW5jZTw9bylyZXR1cm4gci5sZW5ndGg9MyxyWzBdPWUueCxyWzFdPWUueSxyWzJdPWUueixyO2xldCB1PWYuc3VyZmFjZURpc3RhbmNlL28sYz1NYXRoLm1heCgwLE1hdGguY2VpbChQLmxvZzIodSkpKSxsPU1hdGgucG93KDIsYykscD1mLnN1cmZhY2VEaXN0YW5jZS9sLGQ9cjtkLmxlbmd0aD1sKjM7bGV0IG09MDtmb3IobGV0IF89MDtfPGw7XysrKXtsZXQgZz1mLmludGVycG9sYXRlVXNpbmdTdXJmYWNlRGlzdGFuY2UoXypwLEFJKSxiPXQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oZyxiSSk7ZFttKytdPWIueCxkW20rK109Yi55LGRbbSsrXT1iLnp9cmV0dXJuIGR9O1RJPW5ldyBhLHdJPW5ldyBhLE9JPW5ldyBhLEVJPW5ldyBhO09uLnNjYWxlVG9HZW9kZXRpY0hlaWdodEV4dHJ1ZGVkPWZ1bmN0aW9uKHQsZSxuLG8scil7bz1vPz9ZLmRlZmF1bHQ7bGV0IGk9VEkscz13SSxmPU9JLHU9RUk7aWYoaCh0KSYmaCh0LmF0dHJpYnV0ZXMpJiZoKHQuYXR0cmlidXRlcy5wb3NpdGlvbikpe2xldCBjPXQuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsbD1jLmxlbmd0aC8yO2ZvcihsZXQgcD0wO3A8bDtwKz0zKWEuZnJvbUFycmF5KGMscCxmKSxvLmdlb2RldGljU3VyZmFjZU5vcm1hbChmLGkpLHU9by5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKGYsdSkscz1hLm11bHRpcGx5QnlTY2FsYXIoaSxuLHMpLHM9YS5hZGQodSxzLHMpLGNbcCtsXT1zLngsY1twKzErbF09cy55LGNbcCsyK2xdPXMueixyJiYodT1hLmNsb25lKGYsdSkpLHM9YS5tdWx0aXBseUJ5U2NhbGFyKGksZSxzKSxzPWEuYWRkKHUscyxzKSxjW3BdPXMueCxjW3ArMV09cy55LGNbcCsyXT1zLnp9cmV0dXJuIHR9O09uLnBvbHlnb25PdXRsaW5lc0Zyb21IaWVyYXJjaHk9ZnVuY3Rpb24odCxlLG4pe2xldCBvPVtdLHI9bmV3IEwwO3IuZW5xdWV1ZSh0KTtsZXQgaSxzLGY7Zm9yKDtyLmxlbmd0aCE9PTA7KXtsZXQgdT1yLmRlcXVldWUoKSxjPXUucG9zaXRpb25zO2lmKGUpZm9yKGY9Yy5sZW5ndGgsaT0wO2k8ZjtpKyspbi5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKGNbaV0sY1tpXSk7aWYoYz14bihjLGEuZXF1YWxzRXBzaWxvbiwhMCksYy5sZW5ndGg8Myljb250aW51ZTtsZXQgbD11LmhvbGVzP3UuaG9sZXMubGVuZ3RoOjA7Zm9yKGk9MDtpPGw7aSsrKXtsZXQgcD11LmhvbGVzW2ldLGQ9cC5wb3NpdGlvbnM7aWYoZSlmb3IoZj1kLmxlbmd0aCxzPTA7czxmOysrcyluLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoZFtzXSxkW3NdKTtpZihkPXhuKGQsYS5lcXVhbHNFcHNpbG9uLCEwKSxkLmxlbmd0aDwzKWNvbnRpbnVlO28ucHVzaChkKTtsZXQgbT0wO2ZvcihoKHAuaG9sZXMpJiYobT1wLmhvbGVzLmxlbmd0aCkscz0wO3M8bTtzKyspci5lbnF1ZXVlKHAuaG9sZXNbc10pfW8ucHVzaChjKX1yZXR1cm4gb307Ukk9bmV3IGN0O3hJPW5ldyBjdDtPbi5zcGxpdFBvbHlnb25zT25FcXVhdG9yPWZ1bmN0aW9uKHQsZSxuLG8pe2gobyl8fChvPVtdKSxvLnNwbGljZSgwLDAsLi4udCksby5sZW5ndGg9dC5sZW5ndGg7bGV0IHI9MDtmb3IoO3I8by5sZW5ndGg7KXtsZXQgaT1vW3JdLHM9aS5zbGljZSgpO2lmKGkubGVuZ3RoPDMpe29bcl09cywrK3I7Y29udGludWV9bGV0IGY9UEkocyxlLG4pO2lmKHMubGVuZ3RoPT09aS5sZW5ndGh8fGYubGVuZ3RoPD0xKXtvW3JdPXMsKytyO2NvbnRpbnVlfWYuc29ydCgoYyxsKT0+Yy50aGV0YS1sLnRoZXRhKTtsZXQgdT1zWzBdLno+PTA7cj1SdyhvLHIscyxmLDEsMCx1KX1yZXR1cm4gb307T24ucG9seWdvbnNGcm9tSGllcmFyY2h5PWZ1bmN0aW9uKHQsZSxuLG8scixpKXtsZXQgcz1bXSxmPVtdLHU9bmV3IEwwO3UuZW5xdWV1ZSh0KTtsZXQgYz1oKGkpO2Zvcig7dS5sZW5ndGghPT0wOyl7bGV0IGw9dS5kZXF1ZXVlKCkscD1sLnBvc2l0aW9ucyxkPWwuaG9sZXMsbSxfO2lmKG8pZm9yKF89cC5sZW5ndGgsbT0wO208XzttKyspci5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKHBbbV0scFttXSk7aWYoZXx8KHA9eG4ocCxhLmVxdWFsc0Vwc2lsb24sITApKSxwLmxlbmd0aDwzKWNvbnRpbnVlO2xldCBnPW4ocCk7aWYoIWgoZykpY29udGludWU7bGV0IGI9W10sVD1QZS5jb21wdXRlV2luZGluZ09yZGVyMkQoZyk7aWYoVD09PUNvLkNMT0NLV0lTRSYmKGcucmV2ZXJzZSgpLHA9cC5zbGljZSgpLnJldmVyc2UoKSksYyl7Yz0hMTtsZXQgTT1bcF07aWYoTT1pKE0sTSksTS5sZW5ndGg+MSl7Zm9yKGxldCBOIG9mIE0pdS5lbnF1ZXVlKG5ldyBydyhOLGQpKTtjb250aW51ZX19bGV0IE89cC5zbGljZSgpLEU9aChkKT9kLmxlbmd0aDowLHc9W10sQztmb3IobT0wO208RTttKyspe2xldCBNPWRbbV0sTj1NLnBvc2l0aW9ucztpZihvKWZvcihfPU4ubGVuZ3RoLEM9MDtDPF87KytDKXIuc2NhbGVUb0dlb2RldGljU3VyZmFjZShOW0NdLE5bQ10pO2lmKGV8fChOPXhuKE4sYS5lcXVhbHNFcHNpbG9uLCEwKSksTi5sZW5ndGg8Myljb250aW51ZTtsZXQgRj1uKE4pO2lmKCFoKEYpKWNvbnRpbnVlO1Q9UGUuY29tcHV0ZVdpbmRpbmdPcmRlcjJEKEYpLFQ9PT1Dby5DTE9DS1dJU0UmJihGLnJldmVyc2UoKSxOPU4uc2xpY2UoKS5yZXZlcnNlKCkpLHcucHVzaChOKSxiLnB1c2goTy5sZW5ndGgpLE89Ty5jb25jYXQoTiksZz1nLmNvbmNhdChGKTtsZXQgST0wO2ZvcihoKE0uaG9sZXMpJiYoST1NLmhvbGVzLmxlbmd0aCksQz0wO0M8STtDKyspdS5lbnF1ZXVlKE0uaG9sZXNbQ10pfXMucHVzaCh7b3V0ZXJSaW5nOnAsaG9sZXM6d30pLGYucHVzaCh7cG9zaXRpb25zOk8scG9zaXRpb25zMkQ6Zyxob2xlczpifSl9cmV0dXJue2hpZXJhcmNoeTpzLHBvbHlnb25zOmZ9fTtNST1uZXcgSixOST1uZXcgYSxJST1uZXcgdGUsdkk9bmV3IFo7T24uY29tcHV0ZUJvdW5kaW5nUmVjdGFuZ2xlPWZ1bmN0aW9uKHQsZSxuLG8scil7bGV0IGk9dGUuZnJvbUF4aXNBbmdsZSh0LG8sSUkpLHM9Wi5mcm9tUXVhdGVybmlvbihpLHZJKSxmPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSx1PU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxjPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxsPU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxwPW4ubGVuZ3RoO2ZvcihsZXQgZD0wO2Q8cDsrK2Qpe2xldCBtPWEuY2xvbmUobltkXSxOSSk7Wi5tdWx0aXBseUJ5VmVjdG9yKHMsbSxtKTtsZXQgXz1lKG0sTUkpO2goXykmJihmPU1hdGgubWluKGYsXy54KSx1PU1hdGgubWF4KHUsXy54KSxjPU1hdGgubWluKGMsXy55KSxsPU1hdGgubWF4KGwsXy55KSl9cmV0dXJuIHIueD1mLHIueT1jLHIud2lkdGg9dS1mLHIuaGVpZ2h0PWwtYyxyfTtPbi5jcmVhdGVHZW9tZXRyeUZyb21Qb3NpdGlvbnM9ZnVuY3Rpb24odCxlLG4sbyxyLGkscyl7bGV0IGY9UGUudHJpYW5ndWxhdGUoZS5wb3NpdGlvbnMyRCxlLmhvbGVzKTtmLmxlbmd0aDwzJiYoZj1bMCwxLDJdKTtsZXQgdT1lLnBvc2l0aW9ucyxjPWgobiksbD1jP24ucG9zaXRpb25zOnZvaWQgMDtpZihyKXtsZXQgcD11Lmxlbmd0aCxkPW5ldyBBcnJheShwKjMpLG09MDtmb3IobGV0IGI9MDtiPHA7YisrKXtsZXQgVD11W2JdO2RbbSsrXT1ULngsZFttKytdPVQueSxkW20rK109VC56fWxldCBfPXthdHRyaWJ1dGVzOntwb3NpdGlvbjpuZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmR9KX0saW5kaWNlczpmLHByaW1pdGl2ZVR5cGU6RHQuVFJJQU5HTEVTfTtjJiYoXy5hdHRyaWJ1dGVzLnN0PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpKLnBhY2tBcnJheShsKX0pKTtsZXQgZz1uZXcgQnQoXyk7cmV0dXJuIGkubm9ybWFsP2tlLmNvbXB1dGVOb3JtYWwoZyk6Z31pZihzPT09aGUuR0VPREVTSUMpcmV0dXJuIFBlLmNvbXB1dGVTdWJkaXZpc2lvbih0LHUsZixsLG8pO2lmKHM9PT1oZS5SSFVNQilyZXR1cm4gUGUuY29tcHV0ZVJodW1iTGluZVN1YmRpdmlzaW9uKHQsdSxmLGwsbyl9O3d3PVtdLE93PVtdLEZJPW5ldyBhLExJPW5ldyBhO09uLmNvbXB1dGVXYWxsR2VvbWV0cnk9ZnVuY3Rpb24odCxlLG4sbyxyLGkpe2xldCBzLGYsdSxjLGwscCxkLG0sXyxnPXQubGVuZ3RoLGI9MCxUPTAsTz1oKGUpLEU9Tz9lLnBvc2l0aW9uczp2b2lkIDA7aWYocilmb3IoZj1nKjMqMixzPW5ldyBBcnJheShmKjIpLE8mJihfPWcqMioyLG09bmV3IEFycmF5KF8qMikpLHU9MDt1PGc7dSsrKWM9dFt1XSxsPXRbKHUrMSklZ10sc1tiXT1zW2IrZl09Yy54LCsrYixzW2JdPXNbYitmXT1jLnksKytiLHNbYl09c1tiK2ZdPWMueiwrK2Isc1tiXT1zW2IrZl09bC54LCsrYixzW2JdPXNbYitmXT1sLnksKytiLHNbYl09c1tiK2ZdPWwueiwrK2IsTyYmKHA9RVt1XSxkPUVbKHUrMSklZ10sbVtUXT1tW1QrX109cC54LCsrVCxtW1RdPW1bVCtfXT1wLnksKytULG1bVF09bVtUK19dPWQueCwrK1QsbVtUXT1tW1QrX109ZC55LCsrVCk7ZWxzZXtsZXQgRj1QLmNob3JkTGVuZ3RoKG8sbi5tYXhpbXVtUmFkaXVzKSxJPTA7aWYoaT09PWhlLkdFT0RFU0lDKWZvcih1PTA7dTxnO3UrKylJKz1Pbi5zdWJkaXZpZGVMaW5lQ291bnQodFt1XSx0Wyh1KzEpJWddLEYpO2Vsc2UgaWYoaT09PWhlLlJIVU1CKWZvcih1PTA7dTxnO3UrKylJKz1Pbi5zdWJkaXZpZGVSaHVtYkxpbmVDb3VudChuLHRbdV0sdFsodSsxKSVnXSxGKTtmb3IoZj0oSStnKSozLHM9bmV3IEFycmF5KGYqMiksTyYmKF89KEkrZykqMixtPW5ldyBBcnJheShfKjIpKSx1PTA7dTxnO3UrKyl7Yz10W3VdLGw9dFsodSsxKSVnXTtsZXQgdixCO08mJihwPUVbdV0sZD1FWyh1KzEpJWddKSxpPT09aGUuR0VPREVTSUM/KHY9T24uc3ViZGl2aWRlTGluZShjLGwsRixPdyksTyYmKEI9T24uc3ViZGl2aWRlVGV4Y29vcmRMaW5lKHAsZCxjLGwsRix3dykpKTppPT09aGUuUkhVTUImJih2PU9uLnN1YmRpdmlkZVJodW1iTGluZShuLGMsbCxGLE93KSxPJiYoQj1Pbi5zdWJkaXZpZGVUZXhjb29yZFJodW1iTGluZShwLGQsbixjLGwsRix3dykpKTtsZXQgQT12Lmxlbmd0aDtmb3IobGV0IFM9MDtTPEE7KytTLCsrYilzW2JdPXZbU10sc1tiK2ZdPXZbU107aWYoc1tiXT1sLngsc1tiK2ZdPWwueCwrK2Isc1tiXT1sLnksc1tiK2ZdPWwueSwrK2Isc1tiXT1sLnosc1tiK2ZdPWwueiwrK2IsTyl7bGV0IFM9Qi5sZW5ndGg7Zm9yKGxldCB4PTA7eDxTOysreCwrK1QpbVtUXT1CW3hdLG1bVCtfXT1CW3hdO21bVF09ZC54LG1bVCtfXT1kLngsKytULG1bVF09ZC55LG1bVCtfXT1kLnksKytUfX19Zz1zLmxlbmd0aDtsZXQgdz1GdC5jcmVhdGVUeXBlZEFycmF5KGcvMyxnLXQubGVuZ3RoKjYpLEM9MDtmb3IoZy89Nix1PTA7dTxnO3UrKyl7bGV0IEY9dSxJPUYrMSx2PUYrZyxCPXYrMTtjPWEuZnJvbUFycmF5KHMsRiozLEZJKSxsPWEuZnJvbUFycmF5KHMsSSozLExJKSwhYS5lcXVhbHNFcHNpbG9uKGMsbCxQLkVQU0lMT04xMCxQLkVQU0lMT04xMCkmJih3W0MrK109Rix3W0MrK109dix3W0MrK109SSx3W0MrK109SSx3W0MrK109dix3W0MrK109Qil9bGV0IE09e2F0dHJpYnV0ZXM6bmV3IGllKHtwb3NpdGlvbjpuZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnN9KX0pLGluZGljZXM6dyxwcmltaXRpdmVUeXBlOkR0LlRSSUFOR0xFU307cmV0dXJuIE8mJihNLmF0dHJpYnV0ZXMuc3Q9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOm19KSksbmV3IEJ0KE0pfTtfZT1Pbn0pO2Z1bmN0aW9uIFhJKHQsZSxuLG8scixpLHMsZix1KXtsZXQgYz10LnBvc2l0aW9ucyxsPVBlLnRyaWFuZ3VsYXRlKHQucG9zaXRpb25zMkQsdC5ob2xlcyk7bC5sZW5ndGg8MyYmKGw9WzAsMSwyXSk7bGV0IHA9RnQuY3JlYXRlVHlwZWRBcnJheShjLmxlbmd0aCxsLmxlbmd0aCk7cC5zZXQobCk7bGV0IGQ9cUk7aWYobyE9PTApe2xldCBCPXRlLmZyb21BeGlzQW5nbGUocyxvLFN3KTtpZihkPVouZnJvbVF1YXRlcm5pb24oQixkKSxlLnRhbmdlbnR8fGUuYml0YW5nZW50KXtCPXRlLmZyb21BeGlzQW5nbGUocywtbyxTdyk7bGV0IEE9Wi5mcm9tUXVhdGVybmlvbihCLEtJKTtmPWEubm9ybWFsaXplKFoubXVsdGlwbHlCeVZlY3RvcihBLGYsZiksZiksZS5iaXRhbmdlbnQmJih1PWEubm9ybWFsaXplKGEuY3Jvc3MocyxmLHUpLHUpKX19ZWxzZSBkPVouY2xvbmUoWi5JREVOVElUWSxkKTtsZXQgbT1rSTtlLnN0JiYobS54PW4ueCxtLnk9bi55KTtsZXQgXz1jLmxlbmd0aCxnPV8qMyxiPW5ldyBGbG9hdDY0QXJyYXkoZyksVD1lLm5vcm1hbD9uZXcgRmxvYXQzMkFycmF5KGcpOnZvaWQgMCxPPWUudGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KGcpOnZvaWQgMCxFPWUuYml0YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoZyk6dm9pZCAwLHc9ZS5zdD9uZXcgRmxvYXQzMkFycmF5KF8qMik6dm9pZCAwLEM9MCxNPTAsTj0wLEY9MCxJPTA7Zm9yKGxldCBCPTA7QjxfO0IrKyl7bGV0IEE9Y1tCXTtpZihiW0MrK109QS54LGJbQysrXT1BLnksYltDKytdPUEueixlLnN0KWlmKGgocikmJnIucG9zaXRpb25zLmxlbmd0aD09PV8pd1tJKytdPXIucG9zaXRpb25zW0JdLngsd1tJKytdPXIucG9zaXRpb25zW0JdLnk7ZWxzZXtsZXQgUz1aLm11bHRpcGx5QnlWZWN0b3IoZCxBLERJKSx4PWkoUyxVSSk7Si5zdWJ0cmFjdCh4LG0seCk7bGV0IEw9UC5jbGFtcCh4Lngvbi53aWR0aCwwLDEpLHo9UC5jbGFtcCh4Lnkvbi5oZWlnaHQsMCwxKTt3W0krK109TCx3W0krK109en1lLm5vcm1hbCYmKFRbTSsrXT1zLngsVFtNKytdPXMueSxUW00rK109cy56KSxlLnRhbmdlbnQmJihPW0YrK109Zi54LE9bRisrXT1mLnksT1tGKytdPWYueiksZS5iaXRhbmdlbnQmJihFW04rK109dS54LEVbTisrXT11LnksRVtOKytdPXUueil9bGV0IHY9bmV3IGllO3JldHVybiBlLnBvc2l0aW9uJiYodi5wb3NpdGlvbj1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmJ9KSksZS5ub3JtYWwmJih2Lm5vcm1hbD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6VH0pKSxlLnRhbmdlbnQmJih2LnRhbmdlbnQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOk99KSksZS5iaXRhbmdlbnQmJih2LmJpdGFuZ2VudD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6RX0pKSxlLnN0JiYodi5zdD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6d30pKSxuZXcgQnQoe2F0dHJpYnV0ZXM6dixpbmRpY2VzOnAscHJpbWl0aXZlVHlwZTpEdC5UUklBTkdMRVN9KX1mdW5jdGlvbiBkYyh0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVDtsZXQgZT10LnBvbHlnb25IaWVyYXJjaHksbj10LnRleHR1cmVDb29yZGluYXRlczt5LmRlZmluZWQoIm9wdGlvbnMucG9seWdvbkhpZXJhcmNoeSIsZSk7bGV0IG89dC52ZXJ0ZXhGb3JtYXQ/P3B0LkRFRkFVTFQ7dGhpcy5fdmVydGV4Rm9ybWF0PXB0LmNsb25lKG8pLHRoaXMuX3BvbHlnb25IaWVyYXJjaHk9ZSx0aGlzLl9zdFJvdGF0aW9uPXQuc3RSb3RhdGlvbj8/MCx0aGlzLl9lbGxpcHNvaWQ9WS5jbG9uZSh0LmVsbGlwc29pZD8/WS5kZWZhdWx0KSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVDb3BsYW5hclBvbHlnb25HZW9tZXRyeSIsdGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVzPW4sdGhpcy5wYWNrZWRMZW5ndGg9X2UuY29tcHV0ZUhpZXJhcmNoeVBhY2tlZExlbmd0aChlLGEpK3B0LnBhY2tlZExlbmd0aCtZLnBhY2tlZExlbmd0aCsoaChuKT9fZS5jb21wdXRlSGllcmFyY2h5UGFja2VkTGVuZ3RoKG4sSik6MSkrMn12YXIgREksQkksVUksa0ksR0ksVkksekksRGYsakksSEksU3cscUksS0ksV0ksWUksJEksWkksRDAsQ3c9JCgoKT0+e2pyKCk7Q2YoKTt2ZSgpO1VlKCk7THQoKTtXdCgpO0RlKCk7eDAoKTt5ZSgpO2Z0KCk7JHQoKTtYZSgpO1llKCk7YW4oKTtzYygpO3NpKCk7JGUoKTtLdCgpO0JuKCk7TGYoKTtxcigpO3RuKCk7S28oKTtSbygpO0RJPW5ldyBhLEJJPW5ldyBIcixVST1uZXcgSixrST1uZXcgSixHST1uZXcgYSxWST1uZXcgYSx6ST1uZXcgYSxEZj1uZXcgYSxqST1uZXcgYSxIST1uZXcgYSxTdz1uZXcgdGUscUk9bmV3IFosS0k9bmV3IFosV0k9bmV3IGE7ZGMuZnJvbVBvc2l0aW9ucz1mdW5jdGlvbih0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVCx5LmRlZmluZWQoIm9wdGlvbnMucG9zaXRpb25zIix0LnBvc2l0aW9ucyk7bGV0IGU9e3BvbHlnb25IaWVyYXJjaHk6e3Bvc2l0aW9uczp0LnBvc2l0aW9uc30sdmVydGV4Rm9ybWF0OnQudmVydGV4Rm9ybWF0LHN0Um90YXRpb246dC5zdFJvdGF0aW9uLGVsbGlwc29pZDp0LmVsbGlwc29pZCx0ZXh0dXJlQ29vcmRpbmF0ZXM6dC50ZXh0dXJlQ29vcmRpbmF0ZXN9O3JldHVybiBuZXcgZGMoZSl9O2RjLnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPW4/PzAsbj1fZS5wYWNrUG9seWdvbkhpZXJhcmNoeSh0Ll9wb2x5Z29uSGllcmFyY2h5LGUsbixhKSxZLnBhY2sodC5fZWxsaXBzb2lkLGUsbiksbis9WS5wYWNrZWRMZW5ndGgscHQucGFjayh0Ll92ZXJ0ZXhGb3JtYXQsZSxuKSxuKz1wdC5wYWNrZWRMZW5ndGgsZVtuKytdPXQuX3N0Um90YXRpb24saCh0Ll90ZXh0dXJlQ29vcmRpbmF0ZXMpP249X2UucGFja1BvbHlnb25IaWVyYXJjaHkodC5fdGV4dHVyZUNvb3JkaW5hdGVzLGUsbixKKTplW24rK109LTEsZVtuKytdPXQucGFja2VkTGVuZ3RoLGV9O1lJPVkuY2xvbmUoWS5VTklUX1NQSEVSRSksJEk9bmV3IHB0LFpJPXtwb2x5Z29uSGllcmFyY2h5Ont9fTtkYy51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3kuZGVmaW5lZCgiYXJyYXkiLHQpLGU9ZT8/MDtsZXQgbz1fZS51bnBhY2tQb2x5Z29uSGllcmFyY2h5KHQsZSxhKTtlPW8uc3RhcnRpbmdJbmRleCxkZWxldGUgby5zdGFydGluZ0luZGV4O2xldCByPVkudW5wYWNrKHQsZSxZSSk7ZSs9WS5wYWNrZWRMZW5ndGg7bGV0IGk9cHQudW5wYWNrKHQsZSwkSSk7ZSs9cHQucGFja2VkTGVuZ3RoO2xldCBzPXRbZSsrXSxmPXRbZV09PT0tMT92b2lkIDA6X2UudW5wYWNrUG9seWdvbkhpZXJhcmNoeSh0LGUsSik7aChmKT8oZT1mLnN0YXJ0aW5nSW5kZXgsZGVsZXRlIGYuc3RhcnRpbmdJbmRleCk6ZSsrO2xldCB1PXRbZSsrXTtyZXR1cm4gaChuKXx8KG49bmV3IGRjKFpJKSksbi5fcG9seWdvbkhpZXJhcmNoeT1vLG4uX2VsbGlwc29pZD1ZLmNsb25lKHIsbi5fZWxsaXBzb2lkKSxuLl92ZXJ0ZXhGb3JtYXQ9cHQuY2xvbmUoaSxuLl92ZXJ0ZXhGb3JtYXQpLG4uX3N0Um90YXRpb249cyxuLl90ZXh0dXJlQ29vcmRpbmF0ZXM9ZixuLnBhY2tlZExlbmd0aD11LG59O2RjLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX3ZlcnRleEZvcm1hdCxuPXQuX3BvbHlnb25IaWVyYXJjaHksbz10Ll9zdFJvdGF0aW9uLHI9dC5fdGV4dHVyZUNvb3JkaW5hdGVzLGk9aChyKSxzPW4ucG9zaXRpb25zO2lmKHM9eG4ocyxhLmVxdWFsc0Vwc2lsb24sITApLHMubGVuZ3RoPDMpcmV0dXJuO2xldCBmPUdJLHU9VkksYz16SSxsPWpJLHA9SEk7aWYoIWRhLmNvbXB1dGVQcm9qZWN0VG8yREFyZ3VtZW50cyhzLERmLGwscCkpcmV0dXJuO2lmKGY9YS5jcm9zcyhsLHAsZiksZj1hLm5vcm1hbGl6ZShmLGYpLCFhLmVxdWFsc0Vwc2lsb24oRGYsYS5aRVJPLFAuRVBTSUxPTjYpKXtsZXQgST10Ll9lbGxpcHNvaWQuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKERmLFdJKTthLmRvdChmLEkpPDAmJihmPWEubmVnYXRlKGYsZiksbD1hLm5lZ2F0ZShsLGwpKX1sZXQgbT1kYS5jcmVhdGVQcm9qZWN0UG9pbnRzVG8yREZ1bmN0aW9uKERmLGwscCksXz1kYS5jcmVhdGVQcm9qZWN0UG9pbnRUbzJERnVuY3Rpb24oRGYsbCxwKTtlLnRhbmdlbnQmJih1PWEuY2xvbmUobCx1KSksZS5iaXRhbmdlbnQmJihjPWEuY2xvbmUocCxjKSk7bGV0IGc9X2UucG9seWdvbnNGcm9tSGllcmFyY2h5KG4saSxtLCExKSxiPWcuaGllcmFyY2h5LFQ9Zy5wb2x5Z29ucyxPPWZ1bmN0aW9uKEkpe3JldHVybiBJfSxFPWk/X2UucG9seWdvbnNGcm9tSGllcmFyY2h5KHIsITAsTywhMSkucG9seWdvbnM6dm9pZCAwO2lmKGIubGVuZ3RoPT09MClyZXR1cm47cz1iWzBdLm91dGVyUmluZztsZXQgdz1ndC5mcm9tUG9pbnRzKHMpLEM9X2UuY29tcHV0ZUJvdW5kaW5nUmVjdGFuZ2xlKGYsXyxzLG8sQkkpLE09W107Zm9yKGxldCBJPTA7STxULmxlbmd0aDtJKyspe2xldCB2PW5ldyBjbyh7Z2VvbWV0cnk6WEkoVFtJXSxlLEMsbyxpP0VbSV06dm9pZCAwLF8sZix1LGMpfSk7TS5wdXNoKHYpfWxldCBOPWtlLmNvbWJpbmVJbnN0YW5jZXMoTSlbMF07Ti5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcz1uZXcgRmxvYXQ2NEFycmF5KE4uYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMpLE4uaW5kaWNlcz1GdC5jcmVhdGVUeXBlZEFycmF5KE4uYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoLzMsTi5pbmRpY2VzKTtsZXQgRj1OLmF0dHJpYnV0ZXM7cmV0dXJuIGUucG9zaXRpb258fGRlbGV0ZSBGLnBvc2l0aW9uLG5ldyBCdCh7YXR0cmlidXRlczpGLGluZGljZXM6Ti5pbmRpY2VzLHByaW1pdGl2ZVR5cGU6Ti5wcmltaXRpdmVUeXBlLGJvdW5kaW5nU3BoZXJlOnd9KX07RDA9ZGN9KTt2YXIgQjA9e307ZGUoQjAse2RlZmF1bHQ6KCk9PkpJfSk7ZnVuY3Rpb24gUUkodCxlKXtyZXR1cm4gaChlKSYmKHQ9RDAudW5wYWNrKHQsZSkpLEQwLmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBKSSxVMD0kKCgpPT57Q3coKTtmdCgpO0pJPVFJfSk7ZnVuY3Rpb24gdHYodCl7bGV0IGU9dC5sZW5ndGgsbj1uZXcgRmxvYXQ2NEFycmF5KGUqMyksbz1GdC5jcmVhdGVUeXBlZEFycmF5KGUsZSoyKSxyPTAsaT0wO2ZvcihsZXQgZj0wO2Y8ZTtmKyspe2xldCB1PXRbZl07bltyKytdPXUueCxuW3IrK109dS55LG5bcisrXT11Lnosb1tpKytdPWYsb1tpKytdPShmKzEpJWV9bGV0IHM9bmV3IGllKHtwb3NpdGlvbjpuZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOm59KX0pO3JldHVybiBuZXcgQnQoe2F0dHJpYnV0ZXM6cyxpbmRpY2VzOm8scHJpbWl0aXZlVHlwZTpEdC5MSU5FU30pfWZ1bmN0aW9uIG1jKHQpe3Q9dD8/SXQuRU1QVFlfT0JKRUNUO2xldCBlPXQucG9seWdvbkhpZXJhcmNoeTt5LmRlZmluZWQoIm9wdGlvbnMucG9seWdvbkhpZXJhcmNoeSIsZSksdGhpcy5fcG9seWdvbkhpZXJhcmNoeT1lLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUNvcGxhbmFyUG9seWdvbk91dGxpbmVHZW9tZXRyeSIsdGhpcy5wYWNrZWRMZW5ndGg9X2UuY29tcHV0ZUhpZXJhcmNoeVBhY2tlZExlbmd0aChlLGEpKzF9dmFyIGV2LGswLHh3PSQoKCk9PntqcigpO3ZlKCk7THQoKTtXdCgpO0RlKCk7eDAoKTt5ZSgpO2Z0KCk7WGUoKTtZZSgpO2FuKCk7c2MoKTtzaSgpOyRlKCk7TGYoKTt0bigpO21jLmZyb21Qb3NpdGlvbnM9ZnVuY3Rpb24odCl7dD10Pz9JdC5FTVBUWV9PQkpFQ1QseS5kZWZpbmVkKCJvcHRpb25zLnBvc2l0aW9ucyIsdC5wb3NpdGlvbnMpO2xldCBlPXtwb2x5Z29uSGllcmFyY2h5Ontwb3NpdGlvbnM6dC5wb3NpdGlvbnN9fTtyZXR1cm4gbmV3IG1jKGUpfTttYy5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj1uPz8wLG49X2UucGFja1BvbHlnb25IaWVyYXJjaHkodC5fcG9seWdvbkhpZXJhcmNoeSxlLG4sYSksZVtuXT10LnBhY2tlZExlbmd0aCxlfTtldj17cG9seWdvbkhpZXJhcmNoeTp7fX07bWMudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LmRlZmluZWQoImFycmF5Iix0KSxlPWU/PzA7bGV0IG89X2UudW5wYWNrUG9seWdvbkhpZXJhcmNoeSh0LGUsYSk7ZT1vLnN0YXJ0aW5nSW5kZXgsZGVsZXRlIG8uc3RhcnRpbmdJbmRleDtsZXQgcj10W2VdO3JldHVybiBoKG4pfHwobj1uZXcgbWMoZXYpKSxuLl9wb2x5Z29uSGllcmFyY2h5PW8sbi5wYWNrZWRMZW5ndGg9cixufTttYy5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbih0KXtsZXQgZT10Ll9wb2x5Z29uSGllcmFyY2h5LG49ZS5wb3NpdGlvbnM7aWYobj14bihuLGEuZXF1YWxzRXBzaWxvbiwhMCksbi5sZW5ndGg8M3x8IWRhLnZhbGlkT3V0bGluZShuKSlyZXR1cm47bGV0IHI9X2UucG9seWdvbk91dGxpbmVzRnJvbUhpZXJhcmNoeShlLCExKTtpZihyLmxlbmd0aD09PTApcmV0dXJuO2xldCBpPVtdO2ZvcihsZXQgdT0wO3U8ci5sZW5ndGg7dSsrKXtsZXQgYz1uZXcgY28oe2dlb21ldHJ5OnR2KHJbdV0pfSk7aS5wdXNoKGMpfWxldCBzPWtlLmNvbWJpbmVJbnN0YW5jZXMoaSlbMF0sZj1ndC5mcm9tUG9pbnRzKGUucG9zaXRpb25zKTtyZXR1cm4gbmV3IEJ0KHthdHRyaWJ1dGVzOnMuYXR0cmlidXRlcyxpbmRpY2VzOnMuaW5kaWNlcyxwcmltaXRpdmVUeXBlOnMucHJpbWl0aXZlVHlwZSxib3VuZGluZ1NwaGVyZTpmfSl9O2swPW1jfSk7dmFyIEcwPXt9O2RlKEcwLHtkZWZhdWx0OigpPT5vdn0pO2Z1bmN0aW9uIG52KHQsZSl7cmV0dXJuIGgoZSkmJih0PWswLnVucGFjayh0LGUpKSx0Ll9lbGxpcHNvaWQ9WS5jbG9uZSh0Ll9lbGxpcHNvaWQpLGswLmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBvdixWMD0kKCgpPT57eHcoKTtmdCgpOyR0KCk7b3Y9bnZ9KTt2YXIgcnYsZm4saGM9JCgoKT0+e3J2PXtST1VOREVEOjAsTUlURVJFRDoxLEJFVkVMRUQ6Mn0sZm49T2JqZWN0LmZyZWV6ZShydil9KTtmdW5jdGlvbiBpdih0KXtsZXQgZT10Ll91U3F1YXJlZCxuPXQuX2VsbGlwc29pZC5tYXhpbXVtUmFkaXVzLG89dC5fZWxsaXBzb2lkLm1pbmltdW1SYWRpdXMscj0obi1vKS9uLGk9TWF0aC5jb3ModC5fc3RhcnRIZWFkaW5nKSxzPU1hdGguc2luKHQuX3N0YXJ0SGVhZGluZyksZj0oMS1yKSpNYXRoLnRhbih0Ll9zdGFydC5sYXRpdHVkZSksdT0xL01hdGguc3FydCgxK2YqZiksYz11KmYsbD1NYXRoLmF0YW4yKGYsaSkscD11KnMsZD1wKnAsbT0xLWQsXz1NYXRoLnNxcnQobSksZz1lLzQsYj1nKmcsVD1iKmcsTz1iKmIsRT0xK2ctMypiLzQrNSpULzQtMTc1Kk8vNjQsdz0xLWcrMTUqYi84LTM1KlQvOCxDPTEtMypnKzM1KmIvNCxNPTEtNSpnLE49RSpsLXcqTWF0aC5zaW4oMipsKSpnLzItQypNYXRoLnNpbig0KmwpKmIvMTYtTSpNYXRoLnNpbig2KmwpKlQvNDgtTWF0aC5zaW4oOCpsKSo1Kk8vNTEyLEY9dC5fY29uc3RhbnRzO0YuYT1uLEYuYj1vLEYuZj1yLEYuY29zaW5lSGVhZGluZz1pLEYuc2luZUhlYWRpbmc9cyxGLnRhblU9ZixGLmNvc2luZVU9dSxGLnNpbmVVPWMsRi5zaWdtYT1sLEYuc2luZUFscGhhPXAsRi5zaW5lU3F1YXJlZEFscGhhPWQsRi5jb3NpbmVTcXVhcmVkQWxwaGE9bSxGLmNvc2luZUFscGhhPV8sRi51Mk92ZXI0PWcsRi51NE92ZXIxNj1iLEYudTZPdmVyNjQ9VCxGLnU4T3ZlcjI1Nj1PLEYuYTA9RSxGLmExPXcsRi5hMj1DLEYuYTM9TSxGLmRpc3RhbmNlUmF0aW89Tn1mdW5jdGlvbiBzdih0LGUpe3JldHVybiB0KmUqKDQrdCooNC0zKmUpKS8xNn1mdW5jdGlvbiBQdyh0LGUsbixvLHIsaSxzKXtsZXQgZj1zdih0LG4pO3JldHVybigxLWYpKnQqZSoobytmKnIqKHMrZippKigyKnMqcy0xKSkpfWZ1bmN0aW9uIGN2KHQsZSxuLG8scixpLHMpe2xldCBmPShlLW4pL2UsdT1pLW8sYz1NYXRoLmF0YW4oKDEtZikqTWF0aC50YW4ocikpLGw9TWF0aC5hdGFuKCgxLWYpKk1hdGgudGFuKHMpKSxwPU1hdGguY29zKGMpLGQ9TWF0aC5zaW4oYyksbT1NYXRoLmNvcyhsKSxfPU1hdGguc2luKGwpLGc9cCptLGI9cCpfLFQ9ZCpfLE89ZCptLEU9dSx3PVAuVFdPX1BJLEM9TWF0aC5jb3MoRSksTT1NYXRoLnNpbihFKSxOLEYsSSx2LEI7ZG97Qz1NYXRoLmNvcyhFKSxNPU1hdGguc2luKEUpO2xldCBXPWItTypDO0k9TWF0aC5zcXJ0KG0qbSpNKk0rVypXKSxGPVQrZypDLE49TWF0aC5hdGFuMihJLEYpO2xldCBSO0k9PT0wPyhSPTAsdj0xKTooUj1nKk0vSSx2PTEtUipSKSx3PUUsQj1GLTIqVC92LGlzRmluaXRlKEIpfHwoQj0wKSxFPXUrUHcoZixSLHYsTixJLEYsQil9d2hpbGUoTWF0aC5hYnMoRS13KT5QLkVQU0lMT04xMik7bGV0IEE9diooZSplLW4qbikvKG4qbiksUz0xK0EqKDQwOTYrQSooQSooMzIwLTE3NSpBKS03NjgpKS8xNjM4NCx4PUEqKDI1NitBKihBKig3NC00NypBKS0xMjgpKS8xMDI0LEw9QipCLHo9eCpJKihCK3gqKEYqKDIqTC0xKS14KkIqKDQqSSpJLTMpKig0KkwtMykvNikvNCksaj1uKlMqKE4teiksaz1NYXRoLmF0YW4yKG0qTSxiLU8qQykscT1NYXRoLmF0YW4yKHAqTSxiKkMtTyk7dC5fZGlzdGFuY2U9aix0Ll9zdGFydEhlYWRpbmc9ayx0Ll9lbmRIZWFkaW5nPXEsdC5fdVNxdWFyZWQ9QX1mdW5jdGlvbiBNdyh0LGUsbixvKXtsZXQgcj1hLm5vcm1hbGl6ZShvLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGUsejApLGF2KSxpPWEubm9ybWFsaXplKG8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4obix6MCksejApO3kudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJ2YWx1ZSIsTWF0aC5hYnMoTWF0aC5hYnMoYS5hbmdsZUJldHdlZW4ocixpKSktTWF0aC5QSSksLjAxMjUpLGN2KHQsby5tYXhpbXVtUmFkaXVzLG8ubWluaW11bVJhZGl1cyxlLmxvbmdpdHVkZSxlLmxhdGl0dWRlLG4ubG9uZ2l0dWRlLG4ubGF0aXR1ZGUpLHQuX3N0YXJ0PWN0LmNsb25lKGUsdC5fc3RhcnQpLHQuX2VuZD1jdC5jbG9uZShuLHQuX2VuZCksdC5fc3RhcnQuaGVpZ2h0PTAsdC5fZW5kLmhlaWdodD0wLGl2KHQpfWZ1bmN0aW9uIEJmKHQsZSxuKXtsZXQgbz1uPz9ZLmRlZmF1bHQ7dGhpcy5fZWxsaXBzb2lkPW8sdGhpcy5fc3RhcnQ9bmV3IGN0LHRoaXMuX2VuZD1uZXcgY3QsdGhpcy5fY29uc3RhbnRzPXt9LHRoaXMuX3N0YXJ0SGVhZGluZz12b2lkIDAsdGhpcy5fZW5kSGVhZGluZz12b2lkIDAsdGhpcy5fZGlzdGFuY2U9dm9pZCAwLHRoaXMuX3VTcXVhcmVkPXZvaWQgMCxoKHQpJiZoKGUpJiZNdyh0aGlzLHQsZSxvKX12YXIgYXYsejAsY2QsajA9JCgoKT0+e0x0KCk7SWUoKTtXdCgpO2Z0KCk7JHQoKTtLdCgpO2F2PW5ldyBhLHowPW5ldyBhO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEJmLnByb3RvdHlwZSx7ZWxsaXBzb2lkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxsaXBzb2lkfX0sc3VyZmFjZURpc3RhbmNlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geS5kZWZpbmVkKCJkaXN0YW5jZSIsdGhpcy5fZGlzdGFuY2UpLHRoaXMuX2Rpc3RhbmNlfX0sc3RhcnQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zdGFydH19LGVuZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuZH19LHN0YXJ0SGVhZGluZzp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHkuZGVmaW5lZCgiZGlzdGFuY2UiLHRoaXMuX2Rpc3RhbmNlKSx0aGlzLl9zdGFydEhlYWRpbmd9fSxlbmRIZWFkaW5nOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geS5kZWZpbmVkKCJkaXN0YW5jZSIsdGhpcy5fZGlzdGFuY2UpLHRoaXMuX2VuZEhlYWRpbmd9fX0pO0JmLnByb3RvdHlwZS5zZXRFbmRQb2ludHM9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoInN0YXJ0Iix0KSx5LmRlZmluZWQoImVuZCIsZSksTXcodGhpcyx0LGUsdGhpcy5fZWxsaXBzb2lkKX07QmYucHJvdG90eXBlLmludGVycG9sYXRlVXNpbmdGcmFjdGlvbj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmludGVycG9sYXRlVXNpbmdTdXJmYWNlRGlzdGFuY2UodGhpcy5fZGlzdGFuY2UqdCxlKX07QmYucHJvdG90eXBlLmludGVycG9sYXRlVXNpbmdTdXJmYWNlRGlzdGFuY2U9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoImRpc3RhbmNlIix0aGlzLl9kaXN0YW5jZSk7bGV0IG49dGhpcy5fY29uc3RhbnRzLG89bi5kaXN0YW5jZVJhdGlvK3Qvbi5iLHI9TWF0aC5jb3MoMipvKSxpPU1hdGguY29zKDQqbykscz1NYXRoLmNvcyg2Km8pLGY9TWF0aC5zaW4oMipvKSx1PU1hdGguc2luKDQqbyksYz1NYXRoLnNpbig2Km8pLGw9TWF0aC5zaW4oOCpvKSxwPW8qbyxkPW8qcCxtPW4udThPdmVyMjU2LF89bi51Mk92ZXI0LGc9bi51Nk92ZXI2NCxiPW4udTRPdmVyMTYsVD0yKmQqbSpyLzMrbyooMS1fKzcqYi80LTE1KmcvNCs1NzkqbS82NC0oYi0xNSpnLzQrMTg3Km0vMTYpKnItKDUqZy80LTExNSptLzE2KSppLTI5Km0qcy8xNikrKF8vMi1iKzcxKmcvMzItODUqbS8xNikqZisoNSpiLzE2LTUqZy80KzM4MyptLzk2KSp1LXAqKChnLTExKm0vMikqZis1Km0qdS8yKSsoMjkqZy85Ni0yOSptLzE2KSpjKzUzOSptKmwvMTUzNixPPU1hdGguYXNpbihNYXRoLnNpbihUKSpuLmNvc2luZUFscGhhKSxFPU1hdGguYXRhbihuLmEvbi5iKk1hdGgudGFuKE8pKTtUPVQtbi5zaWdtYTtsZXQgdz1NYXRoLmNvcygyKm4uc2lnbWErVCksQz1NYXRoLnNpbihUKSxNPU1hdGguY29zKFQpLE49bi5jb3NpbmVVKk0sRj1uLnNpbmVVKkMsdj1NYXRoLmF0YW4yKEMqbi5zaW5lSGVhZGluZyxOLUYqbi5jb3NpbmVIZWFkaW5nKS1QdyhuLmYsbi5zaW5lQWxwaGEsbi5jb3NpbmVTcXVhcmVkQWxwaGEsVCxDLE0sdyk7cmV0dXJuIGgoZSk/KGUubG9uZ2l0dWRlPXRoaXMuX3N0YXJ0LmxvbmdpdHVkZSt2LGUubGF0aXR1ZGU9RSxlLmhlaWdodD0wLGUpOm5ldyBjdCh0aGlzLl9zdGFydC5sb25naXR1ZGUrdixFLDApfTtjZD1CZn0pO2Z1bmN0aW9uIEZ3KHQsZSxuKXtsZXQgbz1xMDtvLmxlbmd0aD10O2xldCByO2lmKGU9PT1uKXtmb3Iocj0wO3I8dDtyKyspb1tyXT1lO3JldHVybiBvfWxldCBzPShuLWUpL3Q7Zm9yKHI9MDtyPHQ7cisrKXtsZXQgZj1lK3IqcztvW3JdPWZ9cmV0dXJuIG99ZnVuY3Rpb24geXYodCxlLG4sbyxyLGkscyxmKXtsZXQgdT1vLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UodCxLMCksYz1vLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoZSxfdiksbD1Eby5udW1iZXJPZlBvaW50cyh0LGUsbikscD1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHUsZmQpLGQ9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhjLGFkKSxtPUZ3KGwscixpKTtIMC5zZXRFbmRQb2ludHMocCxkKTtsZXQgXz1IMC5zdXJmYWNlRGlzdGFuY2UvbCxnPWY7cC5oZWlnaHQ9cjtsZXQgYj1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKHAsbXMpO2EucGFjayhiLHMsZyksZys9Mztmb3IobGV0IFQ9MTtUPGw7VCsrKXtsZXQgTz1IMC5pbnRlcnBvbGF0ZVVzaW5nU3VyZmFjZURpc3RhbmNlKFQqXyxhZCk7Ty5oZWlnaHQ9bVtUXSxiPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oTyxtcyksYS5wYWNrKGIscyxnKSxnKz0zfXJldHVybiBnfWZ1bmN0aW9uIGd2KHQsZSxuLG8scixpLHMsZil7bGV0IHU9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyh0LGZkKSxjPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoZSxhZCksbD1Eby5udW1iZXJPZlBvaW50c1JodW1iTGluZSh1LGMsbik7dS5oZWlnaHQ9MCxjLmhlaWdodD0wO2xldCBwPUZ3KGwscixpKTtVZi5lbGxpcHNvaWQuZXF1YWxzKG8pfHwoVWY9bmV3IFpvKHZvaWQgMCx2b2lkIDAsbykpLFVmLnNldEVuZFBvaW50cyh1LGMpO2xldCBkPVVmLnN1cmZhY2VEaXN0YW5jZS9sLG09Zjt1LmhlaWdodD1yO2xldCBfPW8uY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4odSxtcyk7YS5wYWNrKF8scyxtKSxtKz0zO2ZvcihsZXQgZz0xO2c8bDtnKyspe2xldCBiPVVmLmludGVycG9sYXRlVXNpbmdTdXJmYWNlRGlzdGFuY2UoZypkLGFkKTtiLmhlaWdodD1wW2ddLF89by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihiLG1zKSxhLnBhY2soXyxzLG0pLG0rPTN9cmV0dXJuIG19dmFyIERvLGZ2LHV2LGx2LE53LHB2LEl3LGR2LG12LGh2LHEwLGZkLGFkLG1zLEswLF92LEgwLFVmLHZ3LEF2LEFuLHlhPSQoKCk9PntMdCgpO0llKCk7ZnQoKTtqdCgpOyR0KCk7ajAoKTtNZigpO3RjKCk7S3QoKTtVbigpO2ZzKCk7RG89e307RG8ubnVtYmVyT2ZQb2ludHM9ZnVuY3Rpb24odCxlLG4pe2xldCBvPWEuZGlzdGFuY2UodCxlKTtyZXR1cm4gTWF0aC5jZWlsKG8vbil9O0RvLm51bWJlck9mUG9pbnRzUmh1bWJMaW5lPWZ1bmN0aW9uKHQsZSxuKXtsZXQgbz1NYXRoLnBvdyh0LmxvbmdpdHVkZS1lLmxvbmdpdHVkZSwyKStNYXRoLnBvdyh0LmxhdGl0dWRlLWUubGF0aXR1ZGUsMik7cmV0dXJuIE1hdGgubWF4KDEsTWF0aC5jZWlsKE1hdGguc3FydChvLyhuKm4pKSkpfTtmdj1uZXcgY3Q7RG8uZXh0cmFjdEhlaWdodHM9ZnVuY3Rpb24odCxlKXtsZXQgbj10Lmxlbmd0aCxvPW5ldyBBcnJheShuKTtmb3IobGV0IHI9MDtyPG47cisrKXtsZXQgaT10W3JdO29bcl09ZS5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhpLGZ2KS5oZWlnaHR9cmV0dXJuIG99O3V2PW5ldyBzdCxsdj1uZXcgYSxOdz1uZXcgYSxwdj1uZXcgb24oYS5VTklUX1gsMCksSXc9bmV3IGEsZHY9bmV3IG9uKGEuVU5JVF9YLDApLG12PW5ldyBhLGh2PW5ldyBhLHEwPVtdO2ZkPW5ldyBjdCxhZD1uZXcgY3QsbXM9bmV3IGEsSzA9bmV3IGEsX3Y9bmV3IGEsSDA9bmV3IGNkLFVmPW5ldyBabztEby53cmFwTG9uZ2l0dWRlPWZ1bmN0aW9uKHQsZSl7bGV0IG49W10sbz1bXTtpZihoKHQpJiZ0Lmxlbmd0aD4wKXtlPWU/P3N0LklERU5USVRZO2xldCByPXN0LmludmVyc2VUcmFuc2Zvcm1hdGlvbihlLHV2KSxpPXN0Lm11bHRpcGx5QnlQb2ludChyLGEuWkVSTyxsdikscz1hLm5vcm1hbGl6ZShzdC5tdWx0aXBseUJ5UG9pbnRBc1ZlY3RvcihyLGEuVU5JVF9ZLE53KSxOdyksZj1vbi5mcm9tUG9pbnROb3JtYWwoaSxzLHB2KSx1PWEubm9ybWFsaXplKHN0Lm11bHRpcGx5QnlQb2ludEFzVmVjdG9yKHIsYS5VTklUX1gsSXcpLEl3KSxjPW9uLmZyb21Qb2ludE5vcm1hbChpLHUsZHYpLGw9MTtuLnB1c2goYS5jbG9uZSh0WzBdKSk7bGV0IHA9blswXSxkPXQubGVuZ3RoO2ZvcihsZXQgbT0xO208ZDsrK20pe2xldCBfPXRbbV07aWYob24uZ2V0UG9pbnREaXN0YW5jZShjLHApPDB8fG9uLmdldFBvaW50RGlzdGFuY2UoYyxfKTwwKXtsZXQgZz1oby5saW5lU2VnbWVudFBsYW5lKHAsXyxmLG12KTtpZihoKGcpKXtsZXQgYj1hLm11bHRpcGx5QnlTY2FsYXIocyw1ZS05LGh2KTtvbi5nZXRQb2ludERpc3RhbmNlKGYscCk8MCYmYS5uZWdhdGUoYixiKSxuLnB1c2goYS5hZGQoZyxiLG5ldyBhKSksby5wdXNoKGwrMSksYS5uZWdhdGUoYixiKSxuLnB1c2goYS5hZGQoZyxiLG5ldyBhKSksbD0xfX1uLnB1c2goYS5jbG9uZSh0W21dKSksbCsrLHA9X31vLnB1c2gobCl9cmV0dXJue3Bvc2l0aW9uczpuLGxlbmd0aHM6b319O0RvLmdlbmVyYXRlQXJjPWZ1bmN0aW9uKHQpe2godCl8fCh0PXt9KTtsZXQgZT10LnBvc2l0aW9ucztpZighaChlKSl0aHJvdyBuZXcgRCgib3B0aW9ucy5wb3NpdGlvbnMgaXMgcmVxdWlyZWQuIik7bGV0IG49ZS5sZW5ndGgsbz10LmVsbGlwc29pZD8/WS5kZWZhdWx0LHI9dC5oZWlnaHQ/PzAsaT1BcnJheS5pc0FycmF5KHIpO2lmKG48MSlyZXR1cm5bXTtpZihuPT09MSl7bGV0IGc9by5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKGVbMF0sSzApO2lmKHI9aT9yWzBdOnIsciE9PTApe2xldCBiPW8uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGcsbXMpO2EubXVsdGlwbHlCeVNjYWxhcihiLHIsYiksYS5hZGQoZyxiLGcpfXJldHVybltnLngsZy55LGcuel19bGV0IHM9dC5taW5EaXN0YW5jZTtpZighaChzKSl7bGV0IGc9dC5ncmFudWxhcml0eT8/UC5SQURJQU5TX1BFUl9ERUdSRUU7cz1QLmNob3JkTGVuZ3RoKGcsby5tYXhpbXVtUmFkaXVzKX1sZXQgZj0wLHU7Zm9yKHU9MDt1PG4tMTt1KyspZis9RG8ubnVtYmVyT2ZQb2ludHMoZVt1XSxlW3UrMV0scyk7bGV0IGM9KGYrMSkqMyxsPW5ldyBBcnJheShjKSxwPTA7Zm9yKHU9MDt1PG4tMTt1Kyspe2xldCBnPWVbdV0sYj1lW3UrMV0sVD1pP3JbdV06cixPPWk/clt1KzFdOnI7cD15dihnLGIscyxvLFQsTyxsLHApfXEwLmxlbmd0aD0wO2xldCBkPWVbbi0xXSxtPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoZCxmZCk7bS5oZWlnaHQ9aT9yW24tMV06cjtsZXQgXz1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKG0sbXMpO3JldHVybiBhLnBhY2soXyxsLGMtMyksbH07dnc9bmV3IGN0LEF2PW5ldyBjdDtEby5nZW5lcmF0ZVJodW1iQXJjPWZ1bmN0aW9uKHQpe2godCl8fCh0PXt9KTtsZXQgZT10LnBvc2l0aW9ucztpZighaChlKSl0aHJvdyBuZXcgRCgib3B0aW9ucy5wb3NpdGlvbnMgaXMgcmVxdWlyZWQuIik7bGV0IG49ZS5sZW5ndGgsbz10LmVsbGlwc29pZD8/WS5kZWZhdWx0LHI9dC5oZWlnaHQ/PzAsaT1BcnJheS5pc0FycmF5KHIpO2lmKG48MSlyZXR1cm5bXTtpZihuPT09MSl7bGV0IFQ9by5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKGVbMF0sSzApO2lmKHI9aT9yWzBdOnIsciE9PTApe2xldCBPPW8uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKFQsbXMpO2EubXVsdGlwbHlCeVNjYWxhcihPLHIsTyksYS5hZGQoVCxPLFQpfXJldHVybltULngsVC55LFQuel19bGV0IHM9dC5ncmFudWxhcml0eT8/UC5SQURJQU5TX1BFUl9ERUdSRUUsZj0wLHUsYz1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGVbMF0sdncpLGw7Zm9yKHU9MDt1PG4tMTt1KyspbD1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGVbdSsxXSxBdiksZis9RG8ubnVtYmVyT2ZQb2ludHNSaHVtYkxpbmUoYyxsLHMpLGM9Y3QuY2xvbmUobCx2dyk7bGV0IHA9KGYrMSkqMyxkPW5ldyBBcnJheShwKSxtPTA7Zm9yKHU9MDt1PG4tMTt1Kyspe2xldCBUPWVbdV0sTz1lW3UrMV0sRT1pP3JbdV06cix3PWk/clt1KzFdOnI7bT1ndihULE8scyxvLEUsdyxkLG0pfXEwLmxlbmd0aD0wO2xldCBfPWVbbi0xXSxnPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoXyxmZCk7Zy5oZWlnaHQ9aT9yW24tMV06cjtsZXQgYj1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGcsbXMpO3JldHVybiBhLnBhY2soYixkLHAtMyksZH07RG8uZ2VuZXJhdGVDYXJ0ZXNpYW5BcmM9ZnVuY3Rpb24odCl7bGV0IGU9RG8uZ2VuZXJhdGVBcmModCksbj1lLmxlbmd0aC8zLG89bmV3IEFycmF5KG4pO2ZvcihsZXQgcj0wO3I8bjtyKyspb1tyXT1hLnVucGFjayhlLHIqMyk7cmV0dXJuIG99O0RvLmdlbmVyYXRlQ2FydGVzaWFuUmh1bWJBcmM9ZnVuY3Rpb24odCl7bGV0IGU9RG8uZ2VuZXJhdGVSaHVtYkFyYyh0KSxuPWUubGVuZ3RoLzMsbz1uZXcgQXJyYXkobik7Zm9yKGxldCByPTA7cjxuO3IrKylvW3JdPWEudW5wYWNrKGUsciozKTtyZXR1cm4gb307QW49RG99KTtmdW5jdGlvbiBrZih0LGUpe2lmKCFoKHQpKXRocm93IG5ldyBEKCJpZGVudGlmaWVyIGlzIHJlcXVpcmVkLiIpO2goTHdbdF0pfHwoTHdbdF09ITAsY29uc29sZS53YXJuKGU/P3QpKX12YXIgTHcsdWQsVzA9JCgoKT0+e2Z0KCk7anQoKTtMdz17fTtrZi5nZW9tZXRyeU91dGxpbmVzPSJFbnRpdHkgZ2VvbWV0cnkgb3V0bGluZXMgYXJlIHVuc3VwcG9ydGVkIG9uIHRlcnJhaW4uIE91dGxpbmVzIHdpbGwgYmUgZGlzYWJsZWQuIFRvIGVuYWJsZSBvdXRsaW5lcywgZGlzYWJsZSBnZW9tZXRyeSB0ZXJyYWluIGNsYW1waW5nIGJ5IGV4cGxpY2l0bHkgc2V0dGluZyBoZWlnaHQgdG8gMC4iO2tmLmdlb21ldHJ5WkluZGV4PSJFbnRpdHkgZ2VvbWV0cnkgd2l0aCB6SW5kZXggYXJlIHVuc3VwcG9ydGVkIHdoZW4gaGVpZ2h0IG9yIGV4dHJ1ZGVkSGVpZ2h0IGFyZSBkZWZpbmVkLiAgekluZGV4IHdpbGwgYmUgaWdub3JlZCI7a2YuZ2VvbWV0cnlIZWlnaHRSZWZlcmVuY2U9IkVudGl0eSBjb3JyaWRvciwgZWxsaXBzZSwgcG9seWdvbiBvciByZWN0YW5nbGUgd2l0aCBoZWlnaHRSZWZlcmVuY2UgbXVzdCBhbHNvIGhhdmUgYSBkZWZpbmVkIGhlaWdodC4gIGhlaWdodFJlZmVyZW5jZSB3aWxsIGJlIGlnbm9yZWQiO2tmLmdlb21ldHJ5RXh0cnVkZWRIZWlnaHRSZWZlcmVuY2U9IkVudGl0eSBjb3JyaWRvciwgZWxsaXBzZSwgcG9seWdvbiBvciByZWN0YW5nbGUgd2l0aCBleHRydWRlZEhlaWdodFJlZmVyZW5jZSBtdXN0IGFsc28gaGF2ZSBhIGRlZmluZWQgZXh0cnVkZWRIZWlnaHQuICBleHRydWRlZEhlaWdodFJlZmVyZW5jZSB3aWxsIGJlIGlnbm9yZWQiO3VkPWtmfSk7ZnVuY3Rpb24gUHYodCxlKXtsZXQgbj1uZXcgQXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbz0wO288dC5sZW5ndGg7bysrKXtsZXQgcj10W29dO1gwPWUuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMocixYMCksbltvXT1YMC5oZWlnaHQsdFtvXT1lLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UocixyKX1yZXR1cm4gbn1mdW5jdGlvbiBZMCh0LGUsbixvKXtsZXQgcj10WzBdLGk9dFsxXSxzPWEuYW5nbGVCZXR3ZWVuKHIsaSksZj1NYXRoLmNlaWwocy9vKSx1PW5ldyBBcnJheShmKSxjO2lmKGU9PT1uKXtmb3IoYz0wO2M8ZjtjKyspdVtjXT1lO3JldHVybiB1LnB1c2gobiksdX1sZXQgcD0obi1lKS9mO2ZvcihjPTE7YzxmO2MrKyl7bGV0IGQ9ZStjKnA7dVtjXT1kfXJldHVybiB1WzBdPWUsdS5wdXNoKG4pLHV9ZnVuY3Rpb24gTXYodCxlLG4sbyl7bGV0IHI9bmV3IHlvKG4sbyksaT1yLnByb2plY3RQb2ludE9udG9QbGFuZShhLmFkZChuLHQscGQpLHBkKSxzPXIucHJvamVjdFBvaW50T250b1BsYW5lKGEuYWRkKG4sZSxkZCksZGQpLGY9Si5hbmdsZUJldHdlZW4oaSxzKTtyZXR1cm4gcy54KmkueS1zLnkqaS54Pj0wPy1mOmZ9ZnVuY3Rpb24gVWkodCxlLG4sbyxyLGkscyxmKXtsZXQgdT1GdixjPUx2O19jPVhvLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKHQscixfYyksdT1zdC5tdWx0aXBseUJ5UG9pbnRBc1ZlY3RvcihfYyxOdix1KSx1PWEubm9ybWFsaXplKHUsdSk7bGV0IGw9TXYodSxlLHQscik7JDA9Wi5mcm9tUm90YXRpb25aKGwsJDApLER3Lno9aSxfYz1zdC5tdWx0aXBseVRyYW5zZm9ybWF0aW9uKF9jLHN0LmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKCQwLER3LEl2KSxfYyk7bGV0IHA9dnY7cFswXT1zO2ZvcihsZXQgZD0wO2Q8ZjtkKyspZm9yKGxldCBtPTA7bTxuLmxlbmd0aDttKz0zKWM9YS5mcm9tQXJyYXkobixtLGMpLGM9Wi5tdWx0aXBseUJ5VmVjdG9yKHAsYyxjKSxjPXN0Lm11bHRpcGx5QnlQb2ludChfYyxjLGMpLG8ucHVzaChjLngsYy55LGMueik7cmV0dXJuIG99ZnVuY3Rpb24gWjAodCxlLG4sbyxyLGkscyl7Zm9yKGxldCBmPTA7Zjx0Lmxlbmd0aDtmKz0zKXtsZXQgdT1hLmZyb21BcnJheSh0LGYsRHYpO289VWkodSxlLG4sbyxyLGlbZi8zXSxzLDEpfXJldHVybiBvfWZ1bmN0aW9uIEJ2KHQsZSl7bGV0IG49dC5sZW5ndGgsbz1uZXcgQXJyYXkobio2KSxyPTAsaT1lLngrZS53aWR0aC8yLHM9ZS55K2UuaGVpZ2h0LzIsZj10WzBdO29bcisrXT1mLngtaSxvW3IrK109MCxvW3IrK109Zi55LXM7Zm9yKGxldCB1PTE7dTxuO3UrKyl7Zj10W3VdO2xldCBjPWYueC1pLGw9Zi55LXM7b1tyKytdPWMsb1tyKytdPTAsb1tyKytdPWwsb1tyKytdPWMsb1tyKytdPTAsb1tyKytdPWx9cmV0dXJuIGY9dFswXSxvW3IrK109Zi54LWksb1tyKytdPTAsb1tyKytdPWYueS1zLG99ZnVuY3Rpb24gQncodCxlKXtsZXQgbj10Lmxlbmd0aCxvPW5ldyBBcnJheShuKjMpLHI9MCxpPWUueCtlLndpZHRoLzIscz1lLnkrZS5oZWlnaHQvMjtmb3IobGV0IGY9MDtmPG47ZisrKW9bcisrXT10W2ZdLngtaSxvW3IrK109MCxvW3IrK109dFtmXS55LXM7cmV0dXJuIG99ZnVuY3Rpb24gVncodCxlLG4sbyxyLGkscyxmLHUsYyl7bGV0IGw9YS5hbmdsZUJldHdlZW4oYS5zdWJ0cmFjdChlLHQsZ2EpLGEuc3VidHJhY3Qobix0LGxkKSkscD1vPT09Zm4uQkVWRUxFRD8wOk1hdGguY2VpbChsL1AudG9SYWRpYW5zKDUpKSxkO3I/ZD1aLmZyb21RdWF0ZXJuaW9uKHRlLmZyb21BeGlzQW5nbGUoYS5uZWdhdGUodCxnYSksbC8ocCsxKSxVdyksR3cpOmQ9Wi5mcm9tUXVhdGVybmlvbih0ZS5mcm9tQXhpc0FuZ2xlKHQsbC8ocCsxKSxVdyksR3cpO2xldCBtLF87aWYoZT1hLmNsb25lKGUsa3cpLHA+MCl7bGV0IGc9Yz8yOjE7Zm9yKGxldCBiPTA7YjxwO2IrKyllPVoubXVsdGlwbHlCeVZlY3RvcihkLGUsZSksbT1hLnN1YnRyYWN0KGUsdCxnYSksbT1hLm5vcm1hbGl6ZShtLG0pLHJ8fChtPWEubmVnYXRlKG0sbSkpLF89aS5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKGUsbGQpLHM9VWkoXyxtLGYscyxpLHUsMSxnKX1lbHNlIG09YS5zdWJ0cmFjdChlLHQsZ2EpLG09YS5ub3JtYWxpemUobSxtKSxyfHwobT1hLm5lZ2F0ZShtLG0pKSxfPWkuc2NhbGVUb0dlb2RldGljU3VyZmFjZShlLGxkKSxzPVVpKF8sbSxmLHMsaSx1LDEsMSksbj1hLmNsb25lKG4sa3cpLG09YS5zdWJ0cmFjdChuLHQsZ2EpLG09YS5ub3JtYWxpemUobSxtKSxyfHwobT1hLm5lZ2F0ZShtLG0pKSxfPWkuc2NhbGVUb0dlb2RldGljU3VyZmFjZShuLGxkKSxzPVVpKF8sbSxmLHMsaSx1LDEsMSk7cmV0dXJuIHN9dmFyIGFvLGJ2LFR2LHd2LE92LEV2LFJ2LFN2LEN2LHh2LGdhLGxkLEdmLFgwLHBkLGRkLE52LF9jLEl2LCQwLHZ2LEZ2LEx2LER3LER2LFV3LGt3LEd3LFV2LGt2LGhzLG1kPSQoKCk9PntVZSgpO0x0KCk7aHIoKTtJZSgpO2hjKCk7bGEoKTtLdCgpO0JuKCk7VW4oKTt5YSgpO0tvKCk7Y3MoKTtXMCgpO2FvPVtuZXcgYSxuZXcgYV0sYnY9bmV3IGEsVHY9bmV3IGEsd3Y9bmV3IGEsT3Y9bmV3IGEsRXY9bmV3IGEsUnY9bmV3IGEsU3Y9bmV3IGEsQ3Y9bmV3IGEseHY9bmV3IGEsZ2E9bmV3IGEsbGQ9bmV3IGEsR2Y9e30sWDA9bmV3IGN0O3BkPW5ldyBhLGRkPW5ldyBhO052PW5ldyBhKC0xLDAsMCksX2M9bmV3IHN0LEl2PW5ldyBzdCwkMD1uZXcgWix2dj1aLklERU5USVRZLmNsb25lKCksRnY9bmV3IGEsTHY9bmV3IG1lLER3PW5ldyBhO0R2PW5ldyBhO1V3PW5ldyB0ZSxrdz1uZXcgYSxHdz1uZXcgWjtHZi5yZW1vdmVEdXBsaWNhdGVzRnJvbVNoYXBlPWZ1bmN0aW9uKHQpe2xldCBlPXQubGVuZ3RoLG49W107Zm9yKGxldCBvPWUtMSxyPTA7cjxlO289cisrKXtsZXQgaT10W29dLHM9dFtyXTtKLmVxdWFscyhpLHMpfHxuLnB1c2gocyl9cmV0dXJuIG59O0dmLmFuZ2xlSXNHcmVhdGVyVGhhblBpPWZ1bmN0aW9uKHQsZSxuLG8pe2xldCByPW5ldyB5byhuLG8pLGk9ci5wcm9qZWN0UG9pbnRPbnRvUGxhbmUoYS5hZGQobix0LHBkKSxwZCkscz1yLnByb2plY3RQb2ludE9udG9QbGFuZShhLmFkZChuLGUsZGQpLGRkKTtyZXR1cm4gcy54KmkueS1zLnkqaS54Pj0wfTtVdj1uZXcgYSxrdj1uZXcgYTtHZi5jb21wdXRlUG9zaXRpb25zPWZ1bmN0aW9uKHQsZSxuLG8scil7bGV0IGk9by5fZWxsaXBzb2lkLHM9UHYodCxpKSxmPW8uX2dyYW51bGFyaXR5LHU9by5fY29ybmVyVHlwZSxjPXI/QnYoZSxuKTpCdyhlLG4pLGw9cj9CdyhlLG4pOnZvaWQgMCxwPW4uaGVpZ2h0LzIsZD1uLndpZHRoLzIsbT10Lmxlbmd0aCxfPVtdLGc9cj9bXTp2b2lkIDAsYj1idixUPVR2LE89d3YsRT1Pdix3PUV2LEM9UnYsTT1TdixOPUN2LEY9eHYsST10WzBdLHY9dFsxXTtFPWkuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKEksRSksYj1hLnN1YnRyYWN0KHYsSSxiKSxiPWEubm9ybWFsaXplKGIsYiksTj1hLmNyb3NzKEUsYixOKSxOPWEubm9ybWFsaXplKE4sTik7bGV0IEI9c1swXSxBPXNbMV07ciYmKGc9VWkoSSxOLGwsZyxpLEIrcCwxLDEpKSxGPWEuY2xvbmUoSSxGKSxJPXYsVD1hLm5lZ2F0ZShiLFQpO2xldCBTLHg7Zm9yKGxldCBqPTE7ajxtLTE7aisrKXtsZXQgaz1yPzI6MTtpZih2PXRbaisxXSxJLmVxdWFscyh2KSl7dWQoIlBvc2l0aW9ucyBhcmUgdG9vIGNsb3NlIGFuZCBhcmUgY29uc2lkZXJlZCBlcXVpdmFsZW50IHdpdGggcm91bmRpbmcgZXJyb3IuIik7Y29udGludWV9Yj1hLnN1YnRyYWN0KHYsSSxiKSxiPWEubm9ybWFsaXplKGIsYiksRT1pLmdlb2RldGljU3VyZmFjZU5vcm1hbChJLEUpO2xldCBxPWEubXVsdGlwbHlCeVNjYWxhcihFLGEuZG90KGIsRSksVXYpO2Euc3VidHJhY3QoYixxLHEpLGEubm9ybWFsaXplKHEscSk7bGV0IFc9YS5tdWx0aXBseUJ5U2NhbGFyKEUsYS5kb3QoVCxFKSxrdik7aWYoYS5zdWJ0cmFjdChULFcsVyksYS5ub3JtYWxpemUoVyxXKSwhUC5lcXVhbHNFcHNpbG9uKE1hdGguYWJzKGEuZG90KHEsVykpLDEsUC5FUFNJTE9ONykpe089YS5hZGQoYixULE8pLE89YS5ub3JtYWxpemUoTyxPKSxPPWEuY3Jvc3MoTyxFLE8pLE89YS5jcm9zcyhFLE8sTyksTz1hLm5vcm1hbGl6ZShPLE8pO2xldCBudD0xL01hdGgubWF4KC4yNSxhLm1hZ25pdHVkZShhLmNyb3NzKE8sVCxnYSkpKSxhdD1HZi5hbmdsZUlzR3JlYXRlclRoYW5QaShiLFQsSSxpKTthdD8odz1hLmFkZChJLGEubXVsdGlwbHlCeVNjYWxhcihPLG50KmQsTyksdyksQz1hLmFkZCh3LGEubXVsdGlwbHlCeVNjYWxhcihOLGQsQyksQyksYW9bMF09YS5jbG9uZShGLGFvWzBdKSxhb1sxXT1hLmNsb25lKEMsYW9bMV0pLFM9WTAoYW8sQitwLEErcCxmKSx4PUFuLmdlbmVyYXRlQXJjKHtwb3NpdGlvbnM6YW8sZ3JhbnVsYXJpdHk6ZixlbGxpcHNvaWQ6aX0pLF89WjAoeCxOLGMsXyxpLFMsMSksTj1hLmNyb3NzKEUsYixOKSxOPWEubm9ybWFsaXplKE4sTiksTT1hLmFkZCh3LGEubXVsdGlwbHlCeVNjYWxhcihOLGQsTSksTSksdT09PWZuLlJPVU5ERUR8fHU9PT1mbi5CRVZFTEVEP1Z3KHcsQyxNLHUsYXQsaSxfLGMsQStwLHIpOihPPWEubmVnYXRlKE8sTyksXz1VaShJLE8sYyxfLGksQStwLG50LGspKSxGPWEuY2xvbmUoTSxGKSk6KHc9YS5hZGQoSSxhLm11bHRpcGx5QnlTY2FsYXIoTyxudCpkLE8pLHcpLEM9YS5hZGQodyxhLm11bHRpcGx5QnlTY2FsYXIoTiwtZCxDKSxDKSxhb1swXT1hLmNsb25lKEYsYW9bMF0pLGFvWzFdPWEuY2xvbmUoQyxhb1sxXSksUz1ZMChhbyxCK3AsQStwLGYpLHg9QW4uZ2VuZXJhdGVBcmMoe3Bvc2l0aW9uczphbyxncmFudWxhcml0eTpmLGVsbGlwc29pZDppfSksXz1aMCh4LE4sYyxfLGksUywxKSxOPWEuY3Jvc3MoRSxiLE4pLE49YS5ub3JtYWxpemUoTixOKSxNPWEuYWRkKHcsYS5tdWx0aXBseUJ5U2NhbGFyKE4sLWQsTSksTSksdT09PWZuLlJPVU5ERUR8fHU9PT1mbi5CRVZFTEVEP1Z3KHcsQyxNLHUsYXQsaSxfLGMsQStwLHIpOl89VWkoSSxPLGMsXyxpLEErcCxudCxrKSxGPWEuY2xvbmUoTSxGKSksVD1hLm5lZ2F0ZShiLFQpfWVsc2UgXz1VaShGLE4sYyxfLGksQitwLDEsMSksRj1JO0I9QSxBPXNbaisxXSxJPXZ9YW9bMF09YS5jbG9uZShGLGFvWzBdKSxhb1sxXT1hLmNsb25lKEksYW9bMV0pLFM9WTAoYW8sQitwLEErcCxmKSx4PUFuLmdlbmVyYXRlQXJjKHtwb3NpdGlvbnM6YW8sZ3JhbnVsYXJpdHk6ZixlbGxpcHNvaWQ6aX0pLF89WjAoeCxOLGMsXyxpLFMsMSksciYmKGc9VWkoSSxOLGwsZyxpLEErcCwxLDEpKSxtPV8ubGVuZ3RoO2xldCBMPXI/bStnLmxlbmd0aDptLHo9bmV3IEZsb2F0NjRBcnJheShMKTtyZXR1cm4gei5zZXQoXyksciYmei5zZXQoZyxtKSx6fTtocz1HZn0pO2Z1bmN0aW9uIGhkKHQsZSxuLG8scil7bGV0IGk9YS5hbmdsZUJldHdlZW4oYS5zdWJ0cmFjdChlLHQsQWEpLGEuc3VidHJhY3Qobix0LEt3KSkscz1vPT09Zm4uQkVWRUxFRD8xOk1hdGguY2VpbChpL1AudG9SYWRpYW5zKDUpKSsxLGY9cyozLHU9bmV3IEFycmF5KGYpO3VbZi0zXT1uLngsdVtmLTJdPW4ueSx1W2YtMV09bi56O2xldCBjO3I/Yz1aLmZyb21RdWF0ZXJuaW9uKHRlLmZyb21BeGlzQW5nbGUoYS5uZWdhdGUodCxBYSksaS9zLGp3KSxIdyk6Yz1aLmZyb21RdWF0ZXJuaW9uKHRlLmZyb21BeGlzQW5nbGUodCxpL3MsancpLEh3KTtsZXQgbD0wO2U9YS5jbG9uZShlLEFhKTtmb3IobGV0IHA9MDtwPHM7cCsrKWU9Wi5tdWx0aXBseUJ5VmVjdG9yKGMsZSxlKSx1W2wrK109ZS54LHVbbCsrXT1lLnksdVtsKytdPWUuejtyZXR1cm4gdX1mdW5jdGlvbiBYdih0KXtsZXQgZT1XdyxuPVh3LG89WXcscj10WzFdO249YS5mcm9tQXJyYXkodFsxXSxyLmxlbmd0aC0zLG4pLG89YS5mcm9tQXJyYXkodFswXSwwLG8pLGU9YS5taWRwb2ludChuLG8sZSk7bGV0IGk9aGQoZSxuLG8sZm4uUk9VTkRFRCwhMSkscz10Lmxlbmd0aC0xLGY9dFtzLTFdO3I9dFtzXSxuPWEuZnJvbUFycmF5KGYsZi5sZW5ndGgtMyxuKSxvPWEuZnJvbUFycmF5KHIsMCxvKSxlPWEubWlkcG9pbnQobixvLGUpO2xldCB1PWhkKGUsbixvLGZuLlJPVU5ERUQsITEpO3JldHVybltpLHVdfWZ1bmN0aW9uIHF3KHQsZSxuLG8pe2xldCByPUFhO3JldHVybiBvP3I9YS5hZGQodCxlLHIpOihlPWEubmVnYXRlKGUsZSkscj1hLmFkZCh0LGUscikpLFtyLngsci55LHIueixuLngsbi55LG4uel19ZnVuY3Rpb24gUTAodCxlLG4sbyl7bGV0IHI9bmV3IEFycmF5KHQubGVuZ3RoKSxpPW5ldyBBcnJheSh0Lmxlbmd0aCkscz1hLm11bHRpcGx5QnlTY2FsYXIoZSxuLEFhKSxmPWEubmVnYXRlKHMsS3cpLHU9MCxjPXQubGVuZ3RoLTE7Zm9yKGxldCBsPTA7bDx0Lmxlbmd0aDtsKz0zKXtsZXQgcD1hLmZyb21BcnJheSh0LGwsR3YpLGQ9YS5hZGQocCxmLHp3KTtyW3UrK109ZC54LHJbdSsrXT1kLnksclt1KytdPWQuejtsZXQgbT1hLmFkZChwLHMsencpO2lbYy0tXT1tLnosaVtjLS1dPW0ueSxpW2MtLV09bS54fXJldHVybiBvLnB1c2gocixpKSxvfXZhciBKMCxBYSxLdyxHdix6dyxCbyxXdyxYdyxZdyxWdix6dixqdixIdixxdixLdixXdixqdyxIdyxZdiwkdixxZSx0Xz0kKCgpPT57THQoKTtoYygpO2Z0KCk7S3QoKTtCbigpO3lhKCk7bWQoKTtLbygpO0owPXt9LEFhPW5ldyBhLEt3PW5ldyBhLEd2PW5ldyBhLHp3PW5ldyBhLEJvPVtuZXcgYSxuZXcgYV0sV3c9bmV3IGEsWHc9bmV3IGEsWXc9bmV3IGEsVnY9bmV3IGEsenY9bmV3IGEsanY9bmV3IGEsSHY9bmV3IGEscXY9bmV3IGEsS3Y9bmV3IGEsV3Y9bmV3IGEsanc9bmV3IHRlLEh3PW5ldyBaO0owLmFkZEF0dHJpYnV0ZT1mdW5jdGlvbih0LGUsbixvKXtsZXQgcj1lLngsaT1lLnkscz1lLno7aChuKSYmKHRbbl09cix0W24rMV09aSx0W24rMl09cyksaChvKSYmKHRbb109cyx0W28tMV09aSx0W28tMl09cil9O1l2PW5ldyBhLCR2PW5ldyBhO0owLmNvbXB1dGVQb3NpdGlvbnM9ZnVuY3Rpb24odCl7bGV0IGU9dC5ncmFudWxhcml0eSxuPXQucG9zaXRpb25zLG89dC5lbGxpcHNvaWQscj10LndpZHRoLzIsaT10LmNvcm5lclR5cGUscz10LnNhdmVBdHRyaWJ1dGVzLGY9V3csdT1YdyxjPVl3LGw9VnYscD16dixkPWp2LG09SHYsXz1xdixnPUt2LGI9V3YsVD1bXSxPPXM/W106dm9pZCAwLEU9cz9bXTp2b2lkIDAsdz1uWzBdLEM9blsxXTt1PWEubm9ybWFsaXplKGEuc3VidHJhY3QoQyx3LHUpLHUpLGY9by5nZW9kZXRpY1N1cmZhY2VOb3JtYWwodyxmKSxsPWEubm9ybWFsaXplKGEuY3Jvc3MoZix1LGwpLGwpLHMmJihPLnB1c2gobC54LGwueSxsLnopLEUucHVzaChmLngsZi55LGYueikpLG09YS5jbG9uZSh3LG0pLHc9QyxjPWEubmVnYXRlKHUsYyk7bGV0IE0sTj1bXSxGLEk9bi5sZW5ndGg7Zm9yKEY9MTtGPEktMTtGKyspe2Y9by5nZW9kZXRpY1N1cmZhY2VOb3JtYWwodyxmKSxDPW5bRisxXSx1PWEubm9ybWFsaXplKGEuc3VidHJhY3QoQyx3LHUpLHUpO2xldCBCPWEubXVsdGlwbHlCeVNjYWxhcihmLGEuZG90KHUsZiksWXYpO2Euc3VidHJhY3QodSxCLEIpLGEubm9ybWFsaXplKEIsQik7bGV0IEE9YS5tdWx0aXBseUJ5U2NhbGFyKGYsYS5kb3QoYyxmKSwkdik7aWYoYS5zdWJ0cmFjdChjLEEsQSksYS5ub3JtYWxpemUoQSxBKSwhUC5lcXVhbHNFcHNpbG9uKE1hdGguYWJzKGEuZG90KEIsQSkpLDEsUC5FUFNJTE9ONykpe3A9YS5ub3JtYWxpemUoYS5hZGQodSxjLHApLHApLHA9YS5jcm9zcyhwLGYscCkscD1hLmNyb3NzKGYscCxwKSxwPWEubm9ybWFsaXplKHAscCk7bGV0IHg9ci9NYXRoLm1heCguMjUsYS5tYWduaXR1ZGUoYS5jcm9zcyhwLGMsQWEpKSksTD1ocy5hbmdsZUlzR3JlYXRlclRoYW5QaSh1LGMsdyxvKTtwPWEubXVsdGlwbHlCeVNjYWxhcihwLHgscCksTD8oXz1hLmFkZCh3LHAsXyksYj1hLmFkZChfLGEubXVsdGlwbHlCeVNjYWxhcihsLHIsYiksYiksZz1hLmFkZChfLGEubXVsdGlwbHlCeVNjYWxhcihsLHIqMixnKSxnKSxCb1swXT1hLmNsb25lKG0sQm9bMF0pLEJvWzFdPWEuY2xvbmUoYixCb1sxXSksTT1Bbi5nZW5lcmF0ZUFyYyh7cG9zaXRpb25zOkJvLGdyYW51bGFyaXR5OmUsZWxsaXBzb2lkOm99KSxUPVEwKE0sbCxyLFQpLHMmJihPLnB1c2gobC54LGwueSxsLnopLEUucHVzaChmLngsZi55LGYueikpLGQ9YS5jbG9uZShnLGQpLGw9YS5ub3JtYWxpemUoYS5jcm9zcyhmLHUsbCksbCksZz1hLmFkZChfLGEubXVsdGlwbHlCeVNjYWxhcihsLHIqMixnKSxnKSxtPWEuYWRkKF8sYS5tdWx0aXBseUJ5U2NhbGFyKGwscixtKSxtKSxpPT09Zm4uUk9VTkRFRHx8aT09PWZuLkJFVkVMRUQ/Ti5wdXNoKHtsZWZ0UG9zaXRpb25zOmhkKF8sZCxnLGksTCl9KTpOLnB1c2goe2xlZnRQb3NpdGlvbnM6cXcodyxhLm5lZ2F0ZShwLHApLGcsTCl9KSk6KGc9YS5hZGQodyxwLGcpLGI9YS5hZGQoZyxhLm5lZ2F0ZShhLm11bHRpcGx5QnlTY2FsYXIobCxyLGIpLGIpLGIpLF89YS5hZGQoZyxhLm5lZ2F0ZShhLm11bHRpcGx5QnlTY2FsYXIobCxyKjIsXyksXyksXyksQm9bMF09YS5jbG9uZShtLEJvWzBdKSxCb1sxXT1hLmNsb25lKGIsQm9bMV0pLE09QW4uZ2VuZXJhdGVBcmMoe3Bvc2l0aW9uczpCbyxncmFudWxhcml0eTplLGVsbGlwc29pZDpvfSksVD1RMChNLGwscixUKSxzJiYoTy5wdXNoKGwueCxsLnksbC56KSxFLnB1c2goZi54LGYueSxmLnopKSxkPWEuY2xvbmUoXyxkKSxsPWEubm9ybWFsaXplKGEuY3Jvc3MoZix1LGwpLGwpLF89YS5hZGQoZyxhLm5lZ2F0ZShhLm11bHRpcGx5QnlTY2FsYXIobCxyKjIsXyksXyksXyksbT1hLmFkZChnLGEubmVnYXRlKGEubXVsdGlwbHlCeVNjYWxhcihsLHIsbSksbSksbSksaT09PWZuLlJPVU5ERUR8fGk9PT1mbi5CRVZFTEVEP04ucHVzaCh7cmlnaHRQb3NpdGlvbnM6aGQoZyxkLF8saSxMKX0pOk4ucHVzaCh7cmlnaHRQb3NpdGlvbnM6cXcodyxwLF8sTCl9KSksYz1hLm5lZ2F0ZSh1LGMpfXc9Q31mPW8uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKHcsZiksQm9bMF09YS5jbG9uZShtLEJvWzBdKSxCb1sxXT1hLmNsb25lKHcsQm9bMV0pLE09QW4uZ2VuZXJhdGVBcmMoe3Bvc2l0aW9uczpCbyxncmFudWxhcml0eTplLGVsbGlwc29pZDpvfSksVD1RMChNLGwscixUKSxzJiYoTy5wdXNoKGwueCxsLnksbC56KSxFLnB1c2goZi54LGYueSxmLnopKTtsZXQgdjtyZXR1cm4gaT09PWZuLlJPVU5ERUQmJih2PVh2KFQpKSx7cG9zaXRpb25zOlQsY29ybmVyczpOLGxlZnRzOk8sbm9ybWFsczpFLGVuZFBvc2l0aW9uczp2fX07cWU9SjB9KTtmdW5jdGlvbiBlTyh0LGUpe2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXRbbl09ZS5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKHRbbl0sdFtuXSk7cmV0dXJuIHR9ZnVuY3Rpb24gS3IodCxlLG4sbyxyLGkpe2xldCBzPXQubm9ybWFscyxmPXQudGFuZ2VudHMsdT10LmJpdGFuZ2VudHMsYz1hLm5vcm1hbGl6ZShhLmNyb3NzKG4sZSxfcyksX3MpO2kubm9ybWFsJiZxZS5hZGRBdHRyaWJ1dGUocyxlLG8sciksaS50YW5nZW50JiZxZS5hZGRBdHRyaWJ1dGUoZixjLG8sciksaS5iaXRhbmdlbnQmJnFlLmFkZEF0dHJpYnV0ZSh1LG4sbyxyKX1mdW5jdGlvbiBuTyh0LGUsbil7bGV0IG89dC5wb3NpdGlvbnMscj10LmNvcm5lcnMsaT10LmVuZFBvc2l0aW9ucyxzPXQubGVmdHMsZj10Lm5vcm1hbHMsdT1uZXcgaWUsYyxsPTAscD0wLGQsbT0wLF87Zm9yKGQ9MDtkPG8ubGVuZ3RoO2QrPTIpXz1vW2RdLmxlbmd0aC0zLGwrPV8sbSs9XyoyLHArPW9bZCsxXS5sZW5ndGgtMztmb3IobCs9MyxwKz0zLGQ9MDtkPHIubGVuZ3RoO2QrKyl7Yz1yW2RdO2xldCBvdD1yW2RdLmxlZnRQb3NpdGlvbnM7aChvdCk/KF89b3QubGVuZ3RoLGwrPV8sbSs9Xyk6KF89cltkXS5yaWdodFBvc2l0aW9ucy5sZW5ndGgscCs9XyxtKz1fKX1sZXQgZz1oKGkpLGI7ZyYmKGI9aVswXS5sZW5ndGgtMyxsKz1iLHArPWIsYi89MyxtKz1iKjYpO2xldCBUPWwrcCxPPW5ldyBGbG9hdDY0QXJyYXkoVCksRT1lLm5vcm1hbD9uZXcgRmxvYXQzMkFycmF5KFQpOnZvaWQgMCx3PWUudGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KFQpOnZvaWQgMCxDPWUuYml0YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoVCk6dm9pZCAwLE09e25vcm1hbHM6RSx0YW5nZW50czp3LGJpdGFuZ2VudHM6Q30sTj0wLEY9VC0xLEksdixCLEEsUz1Rdyx4PUp3LEwseixqPWIvMixrPUZ0LmNyZWF0ZVR5cGVkQXJyYXkoVC8zLG0pLHE9MDtpZihnKXt6PV9kLEw9eWQ7bGV0IG90PWlbMF07Zm9yKFM9YS5mcm9tQXJyYXkoZiwwLFMpLHg9YS5mcm9tQXJyYXkocywwLHgpLGQ9MDtkPGo7ZCsrKXo9YS5mcm9tQXJyYXkob3QsKGotMS1kKSozLHopLEw9YS5mcm9tQXJyYXkob3QsKGorZCkqMyxMKSxxZS5hZGRBdHRyaWJ1dGUoTyxMLE4pLHFlLmFkZEF0dHJpYnV0ZShPLHosdm9pZCAwLEYpLEtyKE0sUyx4LE4sRixlKSx2PU4vMyxBPXYrMSxJPShGLTIpLzMsQj1JLTEsa1txKytdPUksa1txKytdPXYsa1txKytdPUIsa1txKytdPUIsa1txKytdPXYsa1txKytdPUEsTis9MyxGLT0zfWxldCBXPTAsUj0wLG50PW9bVysrXSxhdD1vW1crK107Ty5zZXQobnQsTiksTy5zZXQoYXQsRi1hdC5sZW5ndGgrMSkseD1hLmZyb21BcnJheShzLFIseCk7bGV0IGx0LGh0O2ZvcihfPWF0Lmxlbmd0aC0zLGQ9MDtkPF87ZCs9MylsdD1uLmdlb2RldGljU3VyZmFjZU5vcm1hbChhLmZyb21BcnJheShudCxkLF9zKSxfcyksaHQ9bi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoYS5mcm9tQXJyYXkoYXQsXy1kLGJhKSxiYSksUz1hLm5vcm1hbGl6ZShhLmFkZChsdCxodCxTKSxTKSxLcihNLFMseCxOLEYsZSksdj1OLzMsQT12KzEsST0oRi0yKS8zLEI9SS0xLGtbcSsrXT1JLGtbcSsrXT12LGtbcSsrXT1CLGtbcSsrXT1CLGtbcSsrXT12LGtbcSsrXT1BLE4rPTMsRi09Mztmb3IobHQ9bi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoYS5mcm9tQXJyYXkobnQsXyxfcyksX3MpLGh0PW4uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGEuZnJvbUFycmF5KGF0LF8sYmEpLGJhKSxTPWEubm9ybWFsaXplKGEuYWRkKGx0LGh0LFMpLFMpLFIrPTMsZD0wO2Q8ci5sZW5ndGg7ZCsrKXtsZXQgb3Q7Yz1yW2RdO2xldCBQdD1jLmxlZnRQb3NpdGlvbnMseXQ9Yy5yaWdodFBvc2l0aW9ucyxFdCxkdCxydD10TyxDdD1fZCxrdD15ZDtpZihTPWEuZnJvbUFycmF5KGYsUixTKSxoKFB0KSl7Zm9yKEtyKE0sUyx4LHZvaWQgMCxGLGUpLEYtPTMsRXQ9QSxkdD1CLG90PTA7b3Q8UHQubGVuZ3RoLzM7b3QrKylydD1hLmZyb21BcnJheShQdCxvdCozLHJ0KSxrW3ErK109RXQsa1txKytdPWR0LW90LTEsa1txKytdPWR0LW90LHFlLmFkZEF0dHJpYnV0ZShPLHJ0LHZvaWQgMCxGKSxDdD1hLmZyb21BcnJheShPLChkdC1vdC0xKSozLEN0KSxrdD1hLmZyb21BcnJheShPLEV0KjMsa3QpLHg9YS5ub3JtYWxpemUoYS5zdWJ0cmFjdChDdCxrdCx4KSx4KSxLcihNLFMseCx2b2lkIDAsRixlKSxGLT0zO3J0PWEuZnJvbUFycmF5KE8sRXQqMyxydCksQ3Q9YS5zdWJ0cmFjdChhLmZyb21BcnJheShPLGR0KjMsQ3QpLHJ0LEN0KSxrdD1hLnN1YnRyYWN0KGEuZnJvbUFycmF5KE8sKGR0LW90KSozLGt0KSxydCxrdCkseD1hLm5vcm1hbGl6ZShhLmFkZChDdCxrdCx4KSx4KSxLcihNLFMseCxOLHZvaWQgMCxlKSxOKz0zfWVsc2V7Zm9yKEtyKE0sUyx4LE4sdm9pZCAwLGUpLE4rPTMsRXQ9QixkdD1BLG90PTA7b3Q8eXQubGVuZ3RoLzM7b3QrKylydD1hLmZyb21BcnJheSh5dCxvdCozLHJ0KSxrW3ErK109RXQsa1txKytdPWR0K290LGtbcSsrXT1kdCtvdCsxLHFlLmFkZEF0dHJpYnV0ZShPLHJ0LE4pLEN0PWEuZnJvbUFycmF5KE8sRXQqMyxDdCksa3Q9YS5mcm9tQXJyYXkoTywoZHQrb3QpKjMsa3QpLHg9YS5ub3JtYWxpemUoYS5zdWJ0cmFjdChDdCxrdCx4KSx4KSxLcihNLFMseCxOLHZvaWQgMCxlKSxOKz0zO3J0PWEuZnJvbUFycmF5KE8sRXQqMyxydCksQ3Q9YS5zdWJ0cmFjdChhLmZyb21BcnJheShPLChkdCtvdCkqMyxDdCkscnQsQ3QpLGt0PWEuc3VidHJhY3QoYS5mcm9tQXJyYXkoTyxkdCozLGt0KSxydCxrdCkseD1hLm5vcm1hbGl6ZShhLm5lZ2F0ZShhLmFkZChrdCxDdCx4KSx4KSx4KSxLcihNLFMseCx2b2lkIDAsRixlKSxGLT0zfWZvcihudD1vW1crK10sYXQ9b1tXKytdLG50LnNwbGljZSgwLDMpLGF0LnNwbGljZShhdC5sZW5ndGgtMywzKSxPLnNldChudCxOKSxPLnNldChhdCxGLWF0Lmxlbmd0aCsxKSxfPWF0Lmxlbmd0aC0zLFIrPTMseD1hLmZyb21BcnJheShzLFIseCksb3Q9MDtvdDxhdC5sZW5ndGg7b3QrPTMpbHQ9bi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoYS5mcm9tQXJyYXkobnQsb3QsX3MpLF9zKSxodD1uLmdlb2RldGljU3VyZmFjZU5vcm1hbChhLmZyb21BcnJheShhdCxfLW90LGJhKSxiYSksUz1hLm5vcm1hbGl6ZShhLmFkZChsdCxodCxTKSxTKSxLcihNLFMseCxOLEYsZSksQT1OLzMsdj1BLTEsQj0oRi0yKS8zLEk9QisxLGtbcSsrXT1JLGtbcSsrXT12LGtbcSsrXT1CLGtbcSsrXT1CLGtbcSsrXT12LGtbcSsrXT1BLE4rPTMsRi09MztOLT0zLEYrPTN9aWYoUz1hLmZyb21BcnJheShmLGYubGVuZ3RoLTMsUyksS3IoTSxTLHgsTixGLGUpLGcpe04rPTMsRi09Myx6PV9kLEw9eWQ7bGV0IG90PWlbMV07Zm9yKGQ9MDtkPGo7ZCsrKXo9YS5mcm9tQXJyYXkob3QsKGItZC0xKSozLHopLEw9YS5mcm9tQXJyYXkob3QsZCozLEwpLHFlLmFkZEF0dHJpYnV0ZShPLHosdm9pZCAwLEYpLHFlLmFkZEF0dHJpYnV0ZShPLEwsTiksS3IoTSxTLHgsTixGLGUpLEE9Ti8zLHY9QS0xLEI9KEYtMikvMyxJPUIrMSxrW3ErK109SSxrW3ErK109dixrW3ErK109QixrW3ErK109QixrW3ErK109dixrW3ErK109QSxOKz0zLEYtPTN9aWYodS5wb3NpdGlvbj1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOk99KSxlLnN0KXtsZXQgb3Q9bmV3IEZsb2F0MzJBcnJheShULzMqMiksUHQseXQsRXQ9MDtpZihnKXtsLz0zLHAvPTM7bGV0IGR0PU1hdGguUEkvKGIrMSk7eXQ9MS8obC1iKzEpLFB0PTEvKHAtYisxKTtsZXQgcnQsQ3Q9Yi8yO2ZvcihkPUN0KzE7ZDxiKzE7ZCsrKXJ0PVAuUElfT1ZFUl9UV08rZHQqZCxvdFtFdCsrXT1QdCooMStNYXRoLmNvcyhydCkpLG90W0V0KytdPS41KigxK01hdGguc2luKHJ0KSk7Zm9yKGQ9MTtkPHAtYisxO2QrKylvdFtFdCsrXT1kKlB0LG90W0V0KytdPTA7Zm9yKGQ9YjtkPkN0O2QtLSlydD1QLlBJX09WRVJfVFdPLWQqZHQsb3RbRXQrK109MS1QdCooMStNYXRoLmNvcyhydCkpLG90W0V0KytdPS41KigxK01hdGguc2luKHJ0KSk7Zm9yKGQ9Q3Q7ZD4wO2QtLSlydD1QLlBJX09WRVJfVFdPLWR0KmQsb3RbRXQrK109MS15dCooMStNYXRoLmNvcyhydCkpLG90W0V0KytdPS41KigxK01hdGguc2luKHJ0KSk7Zm9yKGQ9bC1iO2Q+MDtkLS0pb3RbRXQrK109ZCp5dCxvdFtFdCsrXT0xO2ZvcihkPTE7ZDxDdCsxO2QrKylydD1QLlBJX09WRVJfVFdPK2R0KmQsb3RbRXQrK109eXQqKDErTWF0aC5jb3MocnQpKSxvdFtFdCsrXT0uNSooMStNYXRoLnNpbihydCkpfWVsc2V7Zm9yKGwvPTMscC89Myx5dD0xLyhsLTEpLFB0PTEvKHAtMSksZD0wO2Q8cDtkKyspb3RbRXQrK109ZCpQdCxvdFtFdCsrXT0wO2ZvcihkPWw7ZD4wO2QtLSlvdFtFdCsrXT0oZC0xKSp5dCxvdFtFdCsrXT0xfXUuc3Q9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOm90fSl9cmV0dXJuIGUubm9ybWFsJiYodS5ub3JtYWw9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOk0ubm9ybWFsc30pKSxlLnRhbmdlbnQmJih1LnRhbmdlbnQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOk0udGFuZ2VudHN9KSksZS5iaXRhbmdlbnQmJih1LmJpdGFuZ2VudD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6TS5iaXRhbmdlbnRzfSkpLHthdHRyaWJ1dGVzOnUsaW5kaWNlczprfX1mdW5jdGlvbiBRdih0LGUpe2lmKCFlLm5vcm1hbCYmIWUudGFuZ2VudCYmIWUuYml0YW5nZW50JiYhZS5zdClyZXR1cm4gdDtsZXQgbj10LnBvc2l0aW9uLnZhbHVlcyxvLHI7KGUubm9ybWFsfHxlLmJpdGFuZ2VudCkmJihvPXQubm9ybWFsLnZhbHVlcyxyPXQuYml0YW5nZW50LnZhbHVlcyk7bGV0IGk9dC5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoLzE4LHM9aSozLGY9aSoyLHU9cyoyLGM7aWYoZS5ub3JtYWx8fGUuYml0YW5nZW50fHxlLnRhbmdlbnQpe2xldCBsPWUubm9ybWFsP25ldyBGbG9hdDMyQXJyYXkocyo2KTp2b2lkIDAscD1lLnRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShzKjYpOnZvaWQgMCxkPWUuYml0YW5nZW50P25ldyBGbG9hdDMyQXJyYXkocyo2KTp2b2lkIDAsbT1RdyxfPUp3LGc9X2QsYj15ZCxUPVp2LE89dE8sRT11O2ZvcihjPTA7YzxzO2MrPTMpe2xldCB3PUUrdTttPWEuZnJvbUFycmF5KG4sYyxtKSxfPWEuZnJvbUFycmF5KG4sYytzLF8pLGc9YS5mcm9tQXJyYXkobiwoYyszKSVzLGcpLF89YS5zdWJ0cmFjdChfLG0sXyksZz1hLnN1YnRyYWN0KGcsbSxnKSxiPWEubm9ybWFsaXplKGEuY3Jvc3MoXyxnLGIpLGIpLGUubm9ybWFsJiYocWUuYWRkQXR0cmlidXRlKGwsYix3KSxxZS5hZGRBdHRyaWJ1dGUobCxiLHcrMykscWUuYWRkQXR0cmlidXRlKGwsYixFKSxxZS5hZGRBdHRyaWJ1dGUobCxiLEUrMykpLChlLnRhbmdlbnR8fGUuYml0YW5nZW50KSYmKE89YS5mcm9tQXJyYXkobyxjLE8pLGUuYml0YW5nZW50JiYocWUuYWRkQXR0cmlidXRlKGQsTyx3KSxxZS5hZGRBdHRyaWJ1dGUoZCxPLHcrMykscWUuYWRkQXR0cmlidXRlKGQsTyxFKSxxZS5hZGRBdHRyaWJ1dGUoZCxPLEUrMykpLGUudGFuZ2VudCYmKFQ9YS5ub3JtYWxpemUoYS5jcm9zcyhPLGIsVCksVCkscWUuYWRkQXR0cmlidXRlKHAsVCx3KSxxZS5hZGRBdHRyaWJ1dGUocCxULHcrMykscWUuYWRkQXR0cmlidXRlKHAsVCxFKSxxZS5hZGRBdHRyaWJ1dGUocCxULEUrMykpKSxFKz02fWlmKGUubm9ybWFsKXtmb3IobC5zZXQobyksYz0wO2M8cztjKz0zKWxbYytzXT0tb1tjXSxsW2MrcysxXT0tb1tjKzFdLGxbYytzKzJdPS1vW2MrMl07dC5ub3JtYWwudmFsdWVzPWx9ZWxzZSB0Lm5vcm1hbD12b2lkIDA7aWYoZS5iaXRhbmdlbnQ/KGQuc2V0KHIpLGQuc2V0KHIscyksdC5iaXRhbmdlbnQudmFsdWVzPWQpOnQuYml0YW5nZW50PXZvaWQgMCxlLnRhbmdlbnQpe2xldCB3PXQudGFuZ2VudC52YWx1ZXM7cC5zZXQodykscC5zZXQodyxzKSx0LnRhbmdlbnQudmFsdWVzPXB9fWlmKGUuc3Qpe2xldCBsPXQuc3QudmFsdWVzLHA9bmV3IEZsb2F0MzJBcnJheShmKjYpO3Auc2V0KGwpLHAuc2V0KGwsZik7bGV0IGQ9ZioyO2ZvcihsZXQgbT0wO208MjttKyspe2ZvcihwW2QrK109bFswXSxwW2QrK109bFsxXSxjPTI7YzxmO2MrPTIpe2xldCBfPWxbY10sZz1sW2MrMV07cFtkKytdPV8scFtkKytdPWcscFtkKytdPV8scFtkKytdPWd9cFtkKytdPWxbMF0scFtkKytdPWxbMV19dC5zdC52YWx1ZXM9cH1yZXR1cm4gdH1mdW5jdGlvbiBlXyh0LGUsbil7bltlKytdPXRbMF0sbltlKytdPXRbMV0sbltlKytdPXRbMl07Zm9yKGxldCBvPTM7bzx0Lmxlbmd0aDtvKz0zKXtsZXQgcj10W29dLGk9dFtvKzFdLHM9dFtvKzJdO25bZSsrXT1yLG5bZSsrXT1pLG5bZSsrXT1zLG5bZSsrXT1yLG5bZSsrXT1pLG5bZSsrXT1zfXJldHVybiBuW2UrK109dFswXSxuW2UrK109dFsxXSxuW2UrK109dFsyXSxufWZ1bmN0aW9uIEp2KHQsZSl7bGV0IG49bmV3IHB0KHtwb3NpdGlvbjplLnBvc2l0aW9uLG5vcm1hbDplLm5vcm1hbHx8ZS5iaXRhbmdlbnR8fHQuc2hhZG93Vm9sdW1lLHRhbmdlbnQ6ZS50YW5nZW50LGJpdGFuZ2VudDplLm5vcm1hbHx8ZS5iaXRhbmdlbnQsc3Q6ZS5zdH0pLG89dC5lbGxpcHNvaWQscj1xZS5jb21wdXRlUG9zaXRpb25zKHQpLGk9bk8ocixuLG8pLHM9dC5oZWlnaHQsZj10LmV4dHJ1ZGVkSGVpZ2h0LHU9aS5hdHRyaWJ1dGVzLGM9aS5pbmRpY2VzLGw9dS5wb3NpdGlvbi52YWx1ZXMscD1sLmxlbmd0aCxkPW5ldyBGbG9hdDY0QXJyYXkocCo2KSxtPW5ldyBGbG9hdDY0QXJyYXkocCk7bS5zZXQobCk7bGV0IF89bmV3IEZsb2F0NjRBcnJheShwKjQpO2w9UGUuc2NhbGVUb0dlb2RldGljSGVpZ2h0KGwscyxvKSxfPWVfKGwsMCxfKSxtPVBlLnNjYWxlVG9HZW9kZXRpY0hlaWdodChtLGYsbyksXz1lXyhtLHAqMixfKSxkLnNldChsKSxkLnNldChtLHApLGQuc2V0KF8scCoyKSx1LnBvc2l0aW9uLnZhbHVlcz1kLHU9UXYodSxlKTtsZXQgZyxiPXAvMztpZih0LnNoYWRvd1ZvbHVtZSl7bGV0IEk9dS5ub3JtYWwudmFsdWVzO3A9SS5sZW5ndGg7bGV0IHY9bmV3IEZsb2F0MzJBcnJheShwKjYpO2ZvcihnPTA7ZzxwO2crKylJW2ddPS1JW2ddO3Yuc2V0KEkscCksdj1lXyhJLHAqNCx2KSx1LmV4dHJ1ZGVEaXJlY3Rpb249bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnZ9KSxlLm5vcm1hbHx8KHUubm9ybWFsPXZvaWQgMCl9aWYoaCh0Lm9mZnNldEF0dHJpYnV0ZSkpe2xldCBJPW5ldyBVaW50OEFycmF5KGIqNik7aWYodC5vZmZzZXRBdHRyaWJ1dGU9PT1hZS5UT1ApST1JLmZpbGwoMSwwLGIpLmZpbGwoMSxiKjIsYio0KTtlbHNle2xldCB2PXQub2Zmc2V0QXR0cmlidXRlPT09YWUuTk9ORT8wOjE7ST1JLmZpbGwodil9dS5hcHBseU9mZnNldD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpJfSl9bGV0IFQ9Yy5sZW5ndGgsTz1iK2IsRT1GdC5jcmVhdGVUeXBlZEFycmF5KGQubGVuZ3RoLzMsVCoyK08qMyk7RS5zZXQoYyk7bGV0IHc9VDtmb3IoZz0wO2c8VDtnKz0zKXtsZXQgST1jW2ddLHY9Y1tnKzFdLEI9Y1tnKzJdO0VbdysrXT1CK2IsRVt3KytdPXYrYixFW3crK109SStifWxldCBDLE0sTixGO2ZvcihnPTA7ZzxPO2crPTIpQz1nK08sTT1DK08sTj1DKzEsRj1NKzEsRVt3KytdPUMsRVt3KytdPU0sRVt3KytdPU4sRVt3KytdPU4sRVt3KytdPU0sRVt3KytdPUY7cmV0dXJue2F0dHJpYnV0ZXM6dSxpbmRpY2VzOkV9fWZ1bmN0aW9uIFp3KHQsZSxuLG8scixpKXtsZXQgcz1hLnN1YnRyYWN0KGUsdCwkdyk7YS5ub3JtYWxpemUocyxzKTtsZXQgZj1uLmdlb2RldGljU3VyZmFjZU5vcm1hbCh0LFZmKSx1PWEuY3Jvc3MocyxmLCR3KTthLm11bHRpcGx5QnlTY2FsYXIodSxvLHUpO2xldCBjPXIubGF0aXR1ZGUsbD1yLmxvbmdpdHVkZSxwPWkubGF0aXR1ZGUsZD1pLmxvbmdpdHVkZTthLmFkZCh0LHUsVmYpLG4uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoVmYsd3IpO2xldCBtPXdyLmxhdGl0dWRlLF89d3IubG9uZ2l0dWRlO2M9TWF0aC5taW4oYyxtKSxsPU1hdGgubWluKGwsXykscD1NYXRoLm1heChwLG0pLGQ9TWF0aC5tYXgoZCxfKSxhLnN1YnRyYWN0KHQsdSxWZiksbi5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhWZix3ciksbT13ci5sYXRpdHVkZSxfPXdyLmxvbmdpdHVkZSxjPU1hdGgubWluKGMsbSksbD1NYXRoLm1pbihsLF8pLHA9TWF0aC5tYXgocCxtKSxkPU1hdGgubWF4KGQsXyksci5sYXRpdHVkZT1jLHIubG9uZ2l0dWRlPWwsaS5sYXRpdHVkZT1wLGkubG9uZ2l0dWRlPWR9ZnVuY3Rpb24gb08odCxlLG4sbyxyKXt0PWVPKHQsZSk7bGV0IGk9eG4odCxhLmVxdWFsc0Vwc2lsb24pLHM9aS5sZW5ndGg7aWYoczwyfHxuPD0wKXJldHVybiBuZXcgTnQ7bGV0IGY9biouNTtRby5sYXRpdHVkZT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksUW8ubG9uZ2l0dWRlPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxKby5sYXRpdHVkZT1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksSm8ubG9uZ2l0dWRlPU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtsZXQgdSxjO2lmKG89PT1mbi5ST1VOREVEKXtsZXQgZD1pWzBdO2Euc3VidHJhY3QoZCxpWzFdLFRyKSxhLm5vcm1hbGl6ZShUcixUciksYS5tdWx0aXBseUJ5U2NhbGFyKFRyLGYsVHIpLGEuYWRkKGQsVHIsemYpLGUuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoemYsd3IpLHU9d3IubGF0aXR1ZGUsYz13ci5sb25naXR1ZGUsUW8ubGF0aXR1ZGU9TWF0aC5taW4oUW8ubGF0aXR1ZGUsdSksUW8ubG9uZ2l0dWRlPU1hdGgubWluKFFvLmxvbmdpdHVkZSxjKSxKby5sYXRpdHVkZT1NYXRoLm1heChKby5sYXRpdHVkZSx1KSxKby5sb25naXR1ZGU9TWF0aC5tYXgoSm8ubG9uZ2l0dWRlLGMpfWZvcihsZXQgZD0wO2Q8cy0xOysrZCladyhpW2RdLGlbZCsxXSxlLGYsUW8sSm8pO2xldCBsPWlbcy0xXTthLnN1YnRyYWN0KGwsaVtzLTJdLFRyKSxhLm5vcm1hbGl6ZShUcixUciksYS5tdWx0aXBseUJ5U2NhbGFyKFRyLGYsVHIpLGEuYWRkKGwsVHIsemYpLFp3KGwsemYsZSxmLFFvLEpvKSxvPT09Zm4uUk9VTkRFRCYmKGUuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoemYsd3IpLHU9d3IubGF0aXR1ZGUsYz13ci5sb25naXR1ZGUsUW8ubGF0aXR1ZGU9TWF0aC5taW4oUW8ubGF0aXR1ZGUsdSksUW8ubG9uZ2l0dWRlPU1hdGgubWluKFFvLmxvbmdpdHVkZSxjKSxKby5sYXRpdHVkZT1NYXRoLm1heChKby5sYXRpdHVkZSx1KSxKby5sb25naXR1ZGU9TWF0aC5tYXgoSm8ubG9uZ2l0dWRlLGMpKTtsZXQgcD1oKHIpP3I6bmV3IE50O3JldHVybiBwLm5vcnRoPUpvLmxhdGl0dWRlLHAuc291dGg9UW8ubGF0aXR1ZGUscC5lYXN0PUpvLmxvbmdpdHVkZSxwLndlc3Q9UW8ubG9uZ2l0dWRlLHB9ZnVuY3Rpb24gR2kodCl7dD10Pz9JdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC5wb3NpdGlvbnMsbj10LndpZHRoO3kuZGVmaW5lZCgib3B0aW9ucy5wb3NpdGlvbnMiLGUpLHkuZGVmaW5lZCgib3B0aW9ucy53aWR0aCIsbik7bGV0IG89dC5oZWlnaHQ/PzAscj10LmV4dHJ1ZGVkSGVpZ2h0Pz9vO3RoaXMuX3Bvc2l0aW9ucz1lLHRoaXMuX2VsbGlwc29pZD1ZLmNsb25lKHQuZWxsaXBzb2lkPz9ZLmRlZmF1bHQpLHRoaXMuX3ZlcnRleEZvcm1hdD1wdC5jbG9uZSh0LnZlcnRleEZvcm1hdD8/cHQuREVGQVVMVCksdGhpcy5fd2lkdGg9bix0aGlzLl9oZWlnaHQ9TWF0aC5tYXgobyxyKSx0aGlzLl9leHRydWRlZEhlaWdodD1NYXRoLm1pbihvLHIpLHRoaXMuX2Nvcm5lclR5cGU9dC5jb3JuZXJUeXBlPz9mbi5ST1VOREVELHRoaXMuX2dyYW51bGFyaXR5PXQuZ3JhbnVsYXJpdHk/P1AuUkFESUFOU19QRVJfREVHUkVFLHRoaXMuX3NoYWRvd1ZvbHVtZT10LnNoYWRvd1ZvbHVtZT8/ITEsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlQ29ycmlkb3JHZW9tZXRyeSIsdGhpcy5fb2Zmc2V0QXR0cmlidXRlPXQub2Zmc2V0QXR0cmlidXRlLHRoaXMuX3JlY3RhbmdsZT12b2lkIDAsdGhpcy5wYWNrZWRMZW5ndGg9MStlLmxlbmd0aCphLnBhY2tlZExlbmd0aCtZLnBhY2tlZExlbmd0aCtwdC5wYWNrZWRMZW5ndGgrN312YXIgUXcsSncsX2QseWQsWnYsdE8sX3MsYmEsJHcsVmYsd3IsVHIsemYsUW8sSm8sck8saU8sa2ksbl8sc089JCgoKT0+e2pyKCk7dmUoKTtMdCgpO0llKCk7V3QoKTtEZSgpO2hjKCk7dF8oKTt5ZSgpO2Z0KCk7JHQoKTtYZSgpO1llKCk7YW4oKTtGbygpOyRlKCk7S3QoKTtxcigpO3RuKCk7d24oKTtSbygpO1F3PW5ldyBhLEp3PW5ldyBhLF9kPW5ldyBhLHlkPW5ldyBhLFp2PW5ldyBhLHRPPW5ldyBhLF9zPW5ldyBhLGJhPW5ldyBhOyR3PW5ldyBhLFZmPW5ldyBhLHdyPW5ldyBjdDtUcj1uZXcgYSx6Zj1uZXcgYSxRbz1uZXcgY3QsSm89bmV3IGN0O0dpLnBhY2s9ZnVuY3Rpb24odCxlLG4pe3kuZGVmaW5lZCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLG49bj8/MDtsZXQgbz10Ll9wb3NpdGlvbnMscj1vLmxlbmd0aDtlW24rK109cjtmb3IobGV0IGk9MDtpPHI7KytpLG4rPWEucGFja2VkTGVuZ3RoKWEucGFjayhvW2ldLGUsbik7cmV0dXJuIFkucGFjayh0Ll9lbGxpcHNvaWQsZSxuKSxuKz1ZLnBhY2tlZExlbmd0aCxwdC5wYWNrKHQuX3ZlcnRleEZvcm1hdCxlLG4pLG4rPXB0LnBhY2tlZExlbmd0aCxlW24rK109dC5fd2lkdGgsZVtuKytdPXQuX2hlaWdodCxlW24rK109dC5fZXh0cnVkZWRIZWlnaHQsZVtuKytdPXQuX2Nvcm5lclR5cGUsZVtuKytdPXQuX2dyYW51bGFyaXR5LGVbbisrXT10Ll9zaGFkb3dWb2x1bWU/MTowLGVbbl09dC5fb2Zmc2V0QXR0cmlidXRlPz8tMSxlfTtyTz1ZLmNsb25lKFkuVU5JVF9TUEhFUkUpLGlPPW5ldyBwdCxraT17cG9zaXRpb25zOnZvaWQgMCxlbGxpcHNvaWQ6ck8sdmVydGV4Rm9ybWF0OmlPLHdpZHRoOnZvaWQgMCxoZWlnaHQ6dm9pZCAwLGV4dHJ1ZGVkSGVpZ2h0OnZvaWQgMCxjb3JuZXJUeXBlOnZvaWQgMCxncmFudWxhcml0eTp2b2lkIDAsc2hhZG93Vm9sdW1lOnZvaWQgMCxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTtHaS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3kuZGVmaW5lZCgiYXJyYXkiLHQpLGU9ZT8/MDtsZXQgbz10W2UrK10scj1uZXcgQXJyYXkobyk7Zm9yKGxldCBfPTA7XzxvOysrXyxlKz1hLnBhY2tlZExlbmd0aClyW19dPWEudW5wYWNrKHQsZSk7bGV0IGk9WS51bnBhY2sodCxlLHJPKTtlKz1ZLnBhY2tlZExlbmd0aDtsZXQgcz1wdC51bnBhY2sodCxlLGlPKTtlKz1wdC5wYWNrZWRMZW5ndGg7bGV0IGY9dFtlKytdLHU9dFtlKytdLGM9dFtlKytdLGw9dFtlKytdLHA9dFtlKytdLGQ9dFtlKytdPT09MSxtPXRbZV07cmV0dXJuIGgobik/KG4uX3Bvc2l0aW9ucz1yLG4uX2VsbGlwc29pZD1ZLmNsb25lKGksbi5fZWxsaXBzb2lkKSxuLl92ZXJ0ZXhGb3JtYXQ9cHQuY2xvbmUocyxuLl92ZXJ0ZXhGb3JtYXQpLG4uX3dpZHRoPWYsbi5faGVpZ2h0PXUsbi5fZXh0cnVkZWRIZWlnaHQ9YyxuLl9jb3JuZXJUeXBlPWwsbi5fZ3JhbnVsYXJpdHk9cCxuLl9zaGFkb3dWb2x1bWU9ZCxuLl9vZmZzZXRBdHRyaWJ1dGU9bT09PS0xP3ZvaWQgMDptLG4pOihraS5wb3NpdGlvbnM9cixraS53aWR0aD1mLGtpLmhlaWdodD11LGtpLmV4dHJ1ZGVkSGVpZ2h0PWMsa2kuY29ybmVyVHlwZT1sLGtpLmdyYW51bGFyaXR5PXAsa2kuc2hhZG93Vm9sdW1lPWQsa2kub2Zmc2V0QXR0cmlidXRlPW09PT0tMT92b2lkIDA6bSxuZXcgR2koa2kpKX07R2kuY29tcHV0ZVJlY3RhbmdsZT1mdW5jdGlvbih0LGUpe3Q9dD8/SXQuRU1QVFlfT0JKRUNUO2xldCBuPXQucG9zaXRpb25zLG89dC53aWR0aDt5LmRlZmluZWQoIm9wdGlvbnMucG9zaXRpb25zIixuKSx5LmRlZmluZWQoIm9wdGlvbnMud2lkdGgiLG8pO2xldCByPXQuZWxsaXBzb2lkPz9ZLmRlZmF1bHQsaT10LmNvcm5lclR5cGU/P2ZuLlJPVU5ERUQ7cmV0dXJuIG9PKG4scixvLGksZSl9O0dpLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX3Bvc2l0aW9ucyxuPXQuX3dpZHRoLG89dC5fZWxsaXBzb2lkO2U9ZU8oZSxvKTtsZXQgcj14bihlLGEuZXF1YWxzRXBzaWxvbik7aWYoci5sZW5ndGg8Mnx8bjw9MClyZXR1cm47bGV0IGk9dC5faGVpZ2h0LHM9dC5fZXh0cnVkZWRIZWlnaHQsZj0hUC5lcXVhbHNFcHNpbG9uKGkscywwLFAuRVBTSUxPTjIpLHU9dC5fdmVydGV4Rm9ybWF0LGM9e2VsbGlwc29pZDpvLHBvc2l0aW9uczpyLHdpZHRoOm4sY29ybmVyVHlwZTp0Ll9jb3JuZXJUeXBlLGdyYW51bGFyaXR5OnQuX2dyYW51bGFyaXR5LHNhdmVBdHRyaWJ1dGVzOiEwfSxsO2lmKGYpYy5oZWlnaHQ9aSxjLmV4dHJ1ZGVkSGVpZ2h0PXMsYy5zaGFkb3dWb2x1bWU9dC5fc2hhZG93Vm9sdW1lLGMub2Zmc2V0QXR0cmlidXRlPXQuX29mZnNldEF0dHJpYnV0ZSxsPUp2KGMsdSk7ZWxzZXtsZXQgbT1xZS5jb21wdXRlUG9zaXRpb25zKGMpO2lmKGw9bk8obSx1LG8pLGwuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9UGUuc2NhbGVUb0dlb2RldGljSGVpZ2h0KGwuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsaSxvKSxoKHQuX29mZnNldEF0dHJpYnV0ZSkpe2xldCBfPXQuX29mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxLGc9bC5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgsYj1uZXcgVWludDhBcnJheShnLzMpLmZpbGwoXyk7bC5hdHRyaWJ1dGVzLmFwcGx5T2Zmc2V0PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOmJ9KX19bGV0IHA9bC5hdHRyaWJ1dGVzLGQ9Z3QuZnJvbVZlcnRpY2VzKHAucG9zaXRpb24udmFsdWVzLHZvaWQgMCwzKTtyZXR1cm4gdS5wb3NpdGlvbnx8KGwuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9dm9pZCAwKSxuZXcgQnQoe2F0dHJpYnV0ZXM6cCxpbmRpY2VzOmwuaW5kaWNlcyxwcmltaXRpdmVUeXBlOkR0LlRSSUFOR0xFUyxib3VuZGluZ1NwaGVyZTpkLG9mZnNldEF0dHJpYnV0ZTp0Ll9vZmZzZXRBdHRyaWJ1dGV9KX07R2kuY3JlYXRlU2hhZG93Vm9sdW1lPWZ1bmN0aW9uKHQsZSxuKXtsZXQgbz10Ll9ncmFudWxhcml0eSxyPXQuX2VsbGlwc29pZCxpPWUobyxyKSxzPW4obyxyKTtyZXR1cm4gbmV3IEdpKHtwb3NpdGlvbnM6dC5fcG9zaXRpb25zLHdpZHRoOnQuX3dpZHRoLGNvcm5lclR5cGU6dC5fY29ybmVyVHlwZSxlbGxpcHNvaWQ6cixncmFudWxhcml0eTpvLGV4dHJ1ZGVkSGVpZ2h0OmksaGVpZ2h0OnMsdmVydGV4Rm9ybWF0OnB0LlBPU0lUSU9OX09OTFksc2hhZG93Vm9sdW1lOiEwfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEdpLnByb3RvdHlwZSx7cmVjdGFuZ2xlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaCh0aGlzLl9yZWN0YW5nbGUpfHwodGhpcy5fcmVjdGFuZ2xlPW9PKHRoaXMuX3Bvc2l0aW9ucyx0aGlzLl9lbGxpcHNvaWQsdGhpcy5fd2lkdGgsdGhpcy5fY29ybmVyVHlwZSkpLHRoaXMuX3JlY3RhbmdsZX19LHRleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHM6e2dldDpmdW5jdGlvbigpe3JldHVyblswLDAsMCwxLDEsMF19fX0pO25fPUdpfSk7dmFyIG9fPXt9O2RlKG9fLHtkZWZhdWx0OigpPT5lRn0pO2Z1bmN0aW9uIHRGKHQsZSl7cmV0dXJuIGgoZSkmJih0PW5fLnVucGFjayh0LGUpKSx0Ll9lbGxpcHNvaWQ9WS5jbG9uZSh0Ll9lbGxpcHNvaWQpLG5fLmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBlRixyXz0kKCgpPT57c08oKTtmdCgpOyR0KCk7ZUY9dEZ9KTtmdW5jdGlvbiBvRih0LGUpe2ZvcihsZXQgbj0wO248dC5sZW5ndGg7bisrKXRbbl09ZS5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKHRbbl0sdFtuXSk7cmV0dXJuIHR9ZnVuY3Rpb24gZk8odCxlKXtsZXQgbj1bXSxvPXQucG9zaXRpb25zLHI9dC5jb3JuZXJzLGk9dC5lbmRQb3NpdGlvbnMscz1uZXcgaWUsZix1PTAsYz0wLGwscD0wLGQ7Zm9yKGw9MDtsPG8ubGVuZ3RoO2wrPTIpZD1vW2xdLmxlbmd0aC0zLHUrPWQscCs9ZC8zKjQsYys9b1tsKzFdLmxlbmd0aC0zO2Zvcih1Kz0zLGMrPTMsbD0wO2w8ci5sZW5ndGg7bCsrKXtmPXJbbF07bGV0IEw9cltsXS5sZWZ0UG9zaXRpb25zO2goTCk/KGQ9TC5sZW5ndGgsdSs9ZCxwKz1kLzMqMik6KGQ9cltsXS5yaWdodFBvc2l0aW9ucy5sZW5ndGgsYys9ZCxwKz1kLzMqMil9bGV0IG09aChpKSxfO20mJihfPWlbMF0ubGVuZ3RoLTMsdSs9XyxjKz1fLF8vPTMscCs9Xyo0KTtsZXQgZz11K2MsYj1uZXcgRmxvYXQ2NEFycmF5KGcpLFQ9MCxPPWctMSxFLHcsQyxNLE4sRixJPV8vMix2PUZ0LmNyZWF0ZVR5cGVkQXJyYXkoZy8zLHArNCksQj0wO2lmKHZbQisrXT1ULzMsdltCKytdPShPLTIpLzMsbSl7bi5wdXNoKFQvMyksRj1jTyxOPWFPO2xldCBMPWlbMF07Zm9yKGw9MDtsPEk7bCsrKUY9YS5mcm9tQXJyYXkoTCwoSS0xLWwpKjMsRiksTj1hLmZyb21BcnJheShMLChJK2wpKjMsTikscWUuYWRkQXR0cmlidXRlKGIsTixUKSxxZS5hZGRBdHRyaWJ1dGUoYixGLHZvaWQgMCxPKSx3PVQvMyxNPXcrMSxFPShPLTIpLzMsQz1FLTEsdltCKytdPUUsdltCKytdPUMsdltCKytdPXcsdltCKytdPU0sVCs9MyxPLT0zfWxldCBBPTAsUz1vW0ErK10seD1vW0ErK107Zm9yKGIuc2V0KFMsVCksYi5zZXQoeCxPLXgubGVuZ3RoKzEpLGQ9eC5sZW5ndGgtMyxuLnB1c2goVC8zLChPLTIpLzMpLGw9MDtsPGQ7bCs9Myl3PVQvMyxNPXcrMSxFPShPLTIpLzMsQz1FLTEsdltCKytdPUUsdltCKytdPUMsdltCKytdPXcsdltCKytdPU0sVCs9MyxPLT0zO2ZvcihsPTA7bDxyLmxlbmd0aDtsKyspe2xldCBMO2Y9cltsXTtsZXQgej1mLmxlZnRQb3NpdGlvbnMsaj1mLnJpZ2h0UG9zaXRpb25zLGsscT1uRjtpZihoKHopKXtmb3IoTy09MyxrPUMsbi5wdXNoKE0pLEw9MDtMPHoubGVuZ3RoLzM7TCsrKXE9YS5mcm9tQXJyYXkoeixMKjMscSksdltCKytdPWstTC0xLHZbQisrXT1rLUwscWUuYWRkQXR0cmlidXRlKGIscSx2b2lkIDAsTyksTy09MztuLnB1c2goay1NYXRoLmZsb29yKHoubGVuZ3RoLzYpKSxlPT09Zm4uQkVWRUxFRCYmbi5wdXNoKChPLTIpLzMrMSksVCs9M31lbHNle2ZvcihUKz0zLGs9TSxuLnB1c2goQyksTD0wO0w8ai5sZW5ndGgvMztMKyspcT1hLmZyb21BcnJheShqLEwqMyxxKSx2W0IrK109aytMLHZbQisrXT1rK0wrMSxxZS5hZGRBdHRyaWJ1dGUoYixxLFQpLFQrPTM7bi5wdXNoKGsrTWF0aC5mbG9vcihqLmxlbmd0aC82KSksZT09PWZuLkJFVkVMRUQmJm4ucHVzaChULzMtMSksTy09M31mb3IoUz1vW0ErK10seD1vW0ErK10sUy5zcGxpY2UoMCwzKSx4LnNwbGljZSh4Lmxlbmd0aC0zLDMpLGIuc2V0KFMsVCksYi5zZXQoeCxPLXgubGVuZ3RoKzEpLGQ9eC5sZW5ndGgtMyxMPTA7TDx4Lmxlbmd0aDtMKz0zKU09VC8zLHc9TS0xLEM9KE8tMikvMyxFPUMrMSx2W0IrK109RSx2W0IrK109Qyx2W0IrK109dyx2W0IrK109TSxUKz0zLE8tPTM7VC09MyxPKz0zLG4ucHVzaChULzMsKE8tMikvMyl9aWYobSl7VCs9MyxPLT0zLEY9Y08sTj1hTztsZXQgTD1pWzFdO2ZvcihsPTA7bDxJO2wrKylGPWEuZnJvbUFycmF5KEwsKF8tbC0xKSozLEYpLE49YS5mcm9tQXJyYXkoTCxsKjMsTikscWUuYWRkQXR0cmlidXRlKGIsRix2b2lkIDAsTykscWUuYWRkQXR0cmlidXRlKGIsTixUKSxNPVQvMyx3PU0tMSxDPShPLTIpLzMsRT1DKzEsdltCKytdPUUsdltCKytdPUMsdltCKytdPXcsdltCKytdPU0sVCs9MyxPLT0zO24ucHVzaChULzMpfWVsc2Ugbi5wdXNoKFQvMywoTy0yKS8zKTtyZXR1cm4gdltCKytdPVQvMyx2W0IrK109KE8tMikvMyxzLnBvc2l0aW9uPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Yn0pLHthdHRyaWJ1dGVzOnMsaW5kaWNlczp2LHdhbGxJbmRpY2VzOm59fWZ1bmN0aW9uIHJGKHQpe2xldCBlPXQuZWxsaXBzb2lkLG49cWUuY29tcHV0ZVBvc2l0aW9ucyh0KSxvPWZPKG4sdC5jb3JuZXJUeXBlKSxyPW8ud2FsbEluZGljZXMsaT10LmhlaWdodCxzPXQuZXh0cnVkZWRIZWlnaHQsZj1vLmF0dHJpYnV0ZXMsdT1vLmluZGljZXMsYz1mLnBvc2l0aW9uLnZhbHVlcyxsPWMubGVuZ3RoLHA9bmV3IEZsb2F0NjRBcnJheShsKTtwLnNldChjKTtsZXQgZD1uZXcgRmxvYXQ2NEFycmF5KGwqMik7aWYoYz1QZS5zY2FsZVRvR2VvZGV0aWNIZWlnaHQoYyxpLGUpLHA9UGUuc2NhbGVUb0dlb2RldGljSGVpZ2h0KHAscyxlKSxkLnNldChjKSxkLnNldChwLGwpLGYucG9zaXRpb24udmFsdWVzPWQsbC89MyxoKHQub2Zmc2V0QXR0cmlidXRlKSl7bGV0IEU9bmV3IFVpbnQ4QXJyYXkobCoyKTtpZih0Lm9mZnNldEF0dHJpYnV0ZT09PWFlLlRPUClFPUUuZmlsbCgxLDAsbCk7ZWxzZXtsZXQgdz10Lm9mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxO0U9RS5maWxsKHcpfWYuYXBwbHlPZmZzZXQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6RX0pfWxldCBtLF89dS5sZW5ndGgsZz1GdC5jcmVhdGVUeXBlZEFycmF5KGQubGVuZ3RoLzMsKF8rci5sZW5ndGgpKjIpO2cuc2V0KHUpO2xldCBiPV87Zm9yKG09MDttPF87bSs9Mil7bGV0IEU9dVttXSx3PXVbbSsxXTtnW2IrK109RStsLGdbYisrXT13K2x9bGV0IFQsTztmb3IobT0wO208ci5sZW5ndGg7bSsrKVQ9clttXSxPPVQrbCxnW2IrK109VCxnW2IrK109TztyZXR1cm57YXR0cmlidXRlczpmLGluZGljZXM6Z319ZnVuY3Rpb24gamYodCl7dD10Pz9JdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC5wb3NpdGlvbnMsbj10LndpZHRoO3kudHlwZU9mLm9iamVjdCgib3B0aW9ucy5wb3NpdGlvbnMiLGUpLHkudHlwZU9mLm51bWJlcigib3B0aW9ucy53aWR0aCIsbik7bGV0IG89dC5oZWlnaHQ/PzAscj10LmV4dHJ1ZGVkSGVpZ2h0Pz9vO3RoaXMuX3Bvc2l0aW9ucz1lLHRoaXMuX2VsbGlwc29pZD1ZLmNsb25lKHQuZWxsaXBzb2lkPz9ZLmRlZmF1bHQpLHRoaXMuX3dpZHRoPW4sdGhpcy5faGVpZ2h0PU1hdGgubWF4KG8sciksdGhpcy5fZXh0cnVkZWRIZWlnaHQ9TWF0aC5taW4obyxyKSx0aGlzLl9jb3JuZXJUeXBlPXQuY29ybmVyVHlwZT8/Zm4uUk9VTkRFRCx0aGlzLl9ncmFudWxhcml0eT10LmdyYW51bGFyaXR5Pz9QLlJBRElBTlNfUEVSX0RFR1JFRSx0aGlzLl9vZmZzZXRBdHRyaWJ1dGU9dC5vZmZzZXRBdHRyaWJ1dGUsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlQ29ycmlkb3JPdXRsaW5lR2VvbWV0cnkiLHRoaXMucGFja2VkTGVuZ3RoPTErZS5sZW5ndGgqYS5wYWNrZWRMZW5ndGgrWS5wYWNrZWRMZW5ndGgrNn12YXIgY08sYU8sbkYsdU8seXMsaV8sbE89JCgoKT0+e2pyKCk7dmUoKTtMdCgpO1d0KCk7RGUoKTtoYygpO3RfKCk7eWUoKTtmdCgpOyR0KCk7WGUoKTtZZSgpO2FuKCk7Rm8oKTskZSgpO0t0KCk7cXIoKTt0bigpO2NPPW5ldyBhLGFPPW5ldyBhLG5GPW5ldyBhO2pmLnBhY2s9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkudHlwZU9mLm9iamVjdCgiYXJyYXkiLGUpLG49bj8/MDtsZXQgbz10Ll9wb3NpdGlvbnMscj1vLmxlbmd0aDtlW24rK109cjtmb3IobGV0IGk9MDtpPHI7KytpLG4rPWEucGFja2VkTGVuZ3RoKWEucGFjayhvW2ldLGUsbik7cmV0dXJuIFkucGFjayh0Ll9lbGxpcHNvaWQsZSxuKSxuKz1ZLnBhY2tlZExlbmd0aCxlW24rK109dC5fd2lkdGgsZVtuKytdPXQuX2hlaWdodCxlW24rK109dC5fZXh0cnVkZWRIZWlnaHQsZVtuKytdPXQuX2Nvcm5lclR5cGUsZVtuKytdPXQuX2dyYW51bGFyaXR5LGVbbl09dC5fb2Zmc2V0QXR0cmlidXRlPz8tMSxlfTt1Tz1ZLmNsb25lKFkuVU5JVF9TUEhFUkUpLHlzPXtwb3NpdGlvbnM6dm9pZCAwLGVsbGlwc29pZDp1Tyx3aWR0aDp2b2lkIDAsaGVpZ2h0OnZvaWQgMCxleHRydWRlZEhlaWdodDp2b2lkIDAsY29ybmVyVHlwZTp2b2lkIDAsZ3JhbnVsYXJpdHk6dm9pZCAwLG9mZnNldEF0dHJpYnV0ZTp2b2lkIDB9O2pmLnVucGFjaz1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJhcnJheSIsdCksZT1lPz8wO2xldCBvPXRbZSsrXSxyPW5ldyBBcnJheShvKTtmb3IobGV0IGQ9MDtkPG87KytkLGUrPWEucGFja2VkTGVuZ3RoKXJbZF09YS51bnBhY2sodCxlKTtsZXQgaT1ZLnVucGFjayh0LGUsdU8pO2UrPVkucGFja2VkTGVuZ3RoO2xldCBzPXRbZSsrXSxmPXRbZSsrXSx1PXRbZSsrXSxjPXRbZSsrXSxsPXRbZSsrXSxwPXRbZV07cmV0dXJuIGgobik/KG4uX3Bvc2l0aW9ucz1yLG4uX2VsbGlwc29pZD1ZLmNsb25lKGksbi5fZWxsaXBzb2lkKSxuLl93aWR0aD1zLG4uX2hlaWdodD1mLG4uX2V4dHJ1ZGVkSGVpZ2h0PXUsbi5fY29ybmVyVHlwZT1jLG4uX2dyYW51bGFyaXR5PWwsbi5fb2Zmc2V0QXR0cmlidXRlPXA9PT0tMT92b2lkIDA6cCxuKTooeXMucG9zaXRpb25zPXIseXMud2lkdGg9cyx5cy5oZWlnaHQ9Zix5cy5leHRydWRlZEhlaWdodD11LHlzLmNvcm5lclR5cGU9Yyx5cy5ncmFudWxhcml0eT1sLHlzLm9mZnNldEF0dHJpYnV0ZT1wPT09LTE/dm9pZCAwOnAsbmV3IGpmKHlzKSl9O2pmLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX3Bvc2l0aW9ucyxuPXQuX3dpZHRoLG89dC5fZWxsaXBzb2lkO2U9b0YoZSxvKTtsZXQgcj14bihlLGEuZXF1YWxzRXBzaWxvbik7aWYoci5sZW5ndGg8Mnx8bjw9MClyZXR1cm47bGV0IGk9dC5faGVpZ2h0LHM9dC5fZXh0cnVkZWRIZWlnaHQsZj0hUC5lcXVhbHNFcHNpbG9uKGkscywwLFAuRVBTSUxPTjIpLHU9e2VsbGlwc29pZDpvLHBvc2l0aW9uczpyLHdpZHRoOm4sY29ybmVyVHlwZTp0Ll9jb3JuZXJUeXBlLGdyYW51bGFyaXR5OnQuX2dyYW51bGFyaXR5LHNhdmVBdHRyaWJ1dGVzOiExfSxjO2lmKGYpdS5oZWlnaHQ9aSx1LmV4dHJ1ZGVkSGVpZ2h0PXMsdS5vZmZzZXRBdHRyaWJ1dGU9dC5fb2Zmc2V0QXR0cmlidXRlLGM9ckYodSk7ZWxzZXtsZXQgZD1xZS5jb21wdXRlUG9zaXRpb25zKHUpO2lmKGM9Zk8oZCx1LmNvcm5lclR5cGUpLGMuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9UGUuc2NhbGVUb0dlb2RldGljSGVpZ2h0KGMuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsaSxvKSxoKHQuX29mZnNldEF0dHJpYnV0ZSkpe2xldCBtPWMuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoLF89dC5fb2Zmc2V0QXR0cmlidXRlPT09YWUuTk9ORT8wOjEsZz1uZXcgVWludDhBcnJheShtLzMpLmZpbGwoXyk7Yy5hdHRyaWJ1dGVzLmFwcGx5T2Zmc2V0PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOmd9KX19bGV0IGw9Yy5hdHRyaWJ1dGVzLHA9Z3QuZnJvbVZlcnRpY2VzKGwucG9zaXRpb24udmFsdWVzLHZvaWQgMCwzKTtyZXR1cm4gbmV3IEJ0KHthdHRyaWJ1dGVzOmwsaW5kaWNlczpjLmluZGljZXMscHJpbWl0aXZlVHlwZTpEdC5MSU5FUyxib3VuZGluZ1NwaGVyZTpwLG9mZnNldEF0dHJpYnV0ZTp0Ll9vZmZzZXRBdHRyaWJ1dGV9KX07aV89amZ9KTt2YXIgc189e307ZGUoc18se2RlZmF1bHQ6KCk9PnNGfSk7ZnVuY3Rpb24gaUYodCxlKXtyZXR1cm4gaChlKSYmKHQ9aV8udW5wYWNrKHQsZSkpLHQuX2VsbGlwc29pZD1ZLmNsb25lKHQuX2VsbGlwc29pZCksaV8uY3JlYXRlR2VvbWV0cnkodCl9dmFyIHNGLGNfPSQoKCk9PntsTygpO2Z0KCk7JHQoKTtzRj1pRn0pO3ZhciBwTyxnZCxhXz0kKCgpPT57S3QoKTtwTz17fTtwTy5jb21wdXRlUG9zaXRpb25zPWZ1bmN0aW9uKHQsZSxuLG8scil7bGV0IGk9dCouNSxzPS1pLGY9bytvLHU9cj8yKmY6ZixjPW5ldyBGbG9hdDY0QXJyYXkodSozKSxsLHA9MCxkPTAsbT1yP2YqMzowLF89cj8oZitvKSozOm8qMztmb3IobD0wO2w8bztsKyspe2xldCBnPWwvbypQLlRXT19QSSxiPU1hdGguY29zKGcpLFQ9TWF0aC5zaW4oZyksTz1iKm4sRT1UKm4sdz1iKmUsQz1UKmU7Y1tkK21dPU8sY1tkK20rMV09RSxjW2QrbSsyXT1zLGNbZCtfXT13LGNbZCtfKzFdPUMsY1tkK18rMl09aSxkKz0zLHImJihjW3ArK109TyxjW3ArK109RSxjW3ArK109cyxjW3ArK109dyxjW3ArK109QyxjW3ArK109aSl9cmV0dXJuIGN9O2dkPXBPfSk7ZnVuY3Rpb24gVmkodCl7dD10Pz9JdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC5sZW5ndGgsbj10LnRvcFJhZGl1cyxvPXQuYm90dG9tUmFkaXVzLHI9dC52ZXJ0ZXhGb3JtYXQ/P3B0LkRFRkFVTFQsaT10LnNsaWNlcz8/MTI4O2lmKCFoKGUpKXRocm93IG5ldyBEKCJvcHRpb25zLmxlbmd0aCBtdXN0IGJlIGRlZmluZWQuIik7aWYoIWgobikpdGhyb3cgbmV3IEQoIm9wdGlvbnMudG9wUmFkaXVzIG11c3QgYmUgZGVmaW5lZC4iKTtpZighaChvKSl0aHJvdyBuZXcgRCgib3B0aW9ucy5ib3R0b21SYWRpdXMgbXVzdCBiZSBkZWZpbmVkLiIpO2lmKGk8Myl0aHJvdyBuZXcgRCgib3B0aW9ucy5zbGljZXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMy4iKTtpZihoKHQub2Zmc2V0QXR0cmlidXRlKSYmdC5vZmZzZXRBdHRyaWJ1dGU9PT1hZS5UT1ApdGhyb3cgbmV3IEQoIkdlb21ldHJ5T2Zmc2V0QXR0cmlidXRlLlRPUCBpcyBub3QgYSBzdXBwb3J0ZWQgb3B0aW9ucy5vZmZzZXRBdHRyaWJ1dGUgZm9yIHRoaXMgZ2VvbWV0cnkuIik7dGhpcy5fbGVuZ3RoPWUsdGhpcy5fdG9wUmFkaXVzPW4sdGhpcy5fYm90dG9tUmFkaXVzPW8sdGhpcy5fdmVydGV4Rm9ybWF0PXB0LmNsb25lKHIpLHRoaXMuX3NsaWNlcz1pLHRoaXMuX29mZnNldEF0dHJpYnV0ZT10Lm9mZnNldEF0dHJpYnV0ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVDeWxpbmRlckdlb21ldHJ5In12YXIgZl8sY0YsYUYsZkYsdUYsZE8sVGEsdV8sSGYsbF89JCgoKT0+e3ZlKCk7VWUoKTtMdCgpO0RlKCk7YV8oKTt5ZSgpO2Z0KCk7anQoKTtYZSgpO1llKCk7YW4oKTtGbygpOyRlKCk7S3QoKTt0bigpO1JvKCk7Zl89bmV3IEosY0Y9bmV3IGEsYUY9bmV3IGEsZkY9bmV3IGEsdUY9bmV3IGE7VmkucGFja2VkTGVuZ3RoPXB0LnBhY2tlZExlbmd0aCs1O1ZpLnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBEKCJ2YWx1ZSBpcyByZXF1aXJlZCIpO2lmKCFoKGUpKXRocm93IG5ldyBEKCJhcnJheSBpcyByZXF1aXJlZCIpO3JldHVybiBuPW4/PzAscHQucGFjayh0Ll92ZXJ0ZXhGb3JtYXQsZSxuKSxuKz1wdC5wYWNrZWRMZW5ndGgsZVtuKytdPXQuX2xlbmd0aCxlW24rK109dC5fdG9wUmFkaXVzLGVbbisrXT10Ll9ib3R0b21SYWRpdXMsZVtuKytdPXQuX3NsaWNlcyxlW25dPXQuX29mZnNldEF0dHJpYnV0ZT8/LTEsZX07ZE89bmV3IHB0LFRhPXt2ZXJ0ZXhGb3JtYXQ6ZE8sbGVuZ3RoOnZvaWQgMCx0b3BSYWRpdXM6dm9pZCAwLGJvdHRvbVJhZGl1czp2b2lkIDAsc2xpY2VzOnZvaWQgMCxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTtWaS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBEKCJhcnJheSBpcyByZXF1aXJlZCIpO2U9ZT8/MDtsZXQgbz1wdC51bnBhY2sodCxlLGRPKTtlKz1wdC5wYWNrZWRMZW5ndGg7bGV0IHI9dFtlKytdLGk9dFtlKytdLHM9dFtlKytdLGY9dFtlKytdLHU9dFtlXTtyZXR1cm4gaChuKT8obi5fdmVydGV4Rm9ybWF0PXB0LmNsb25lKG8sbi5fdmVydGV4Rm9ybWF0KSxuLl9sZW5ndGg9cixuLl90b3BSYWRpdXM9aSxuLl9ib3R0b21SYWRpdXM9cyxuLl9zbGljZXM9ZixuLl9vZmZzZXRBdHRyaWJ1dGU9dT09PS0xP3ZvaWQgMDp1LG4pOihUYS5sZW5ndGg9cixUYS50b3BSYWRpdXM9aSxUYS5ib3R0b21SYWRpdXM9cyxUYS5zbGljZXM9ZixUYS5vZmZzZXRBdHRyaWJ1dGU9dT09PS0xP3ZvaWQgMDp1LG5ldyBWaShUYSkpfTtWaS5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbih0KXtsZXQgZT10Ll9sZW5ndGgsbj10Ll90b3BSYWRpdXMsbz10Ll9ib3R0b21SYWRpdXMscj10Ll92ZXJ0ZXhGb3JtYXQsaT10Ll9zbGljZXM7aWYoZTw9MHx8bjwwfHxvPDB8fG49PT0wJiZvPT09MClyZXR1cm47bGV0IHM9aStpLGY9aStzLHU9cytzLGM9Z2QuY29tcHV0ZVBvc2l0aW9ucyhlLG4sbyxpLCEwKSxsPXIuc3Q/bmV3IEZsb2F0MzJBcnJheSh1KjIpOnZvaWQgMCxwPXIubm9ybWFsP25ldyBGbG9hdDMyQXJyYXkodSozKTp2b2lkIDAsZD1yLnRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheSh1KjMpOnZvaWQgMCxtPXIuYml0YW5nZW50P25ldyBGbG9hdDMyQXJyYXkodSozKTp2b2lkIDAsXyxnPXIubm9ybWFsfHxyLnRhbmdlbnR8fHIuYml0YW5nZW50O2lmKGcpe2xldCBOPXIudGFuZ2VudHx8ci5iaXRhbmdlbnQsRj0wLEk9MCx2PTAsQj1NYXRoLmF0YW4yKG8tbixlKSxBPWNGO0Euej1NYXRoLnNpbihCKTtsZXQgUz1NYXRoLmNvcyhCKSx4PWZGLEw9YUY7Zm9yKF89MDtfPGk7XysrKXtsZXQgej1fL2kqUC5UV09fUEksaj1TKk1hdGguY29zKHopLGs9UypNYXRoLnNpbih6KTtnJiYoQS54PWosQS55PWssTiYmKHg9YS5ub3JtYWxpemUoYS5jcm9zcyhhLlVOSVRfWixBLHgpLHgpKSxyLm5vcm1hbCYmKHBbRisrXT1BLngscFtGKytdPUEueSxwW0YrK109QS56LHBbRisrXT1BLngscFtGKytdPUEueSxwW0YrK109QS56KSxyLnRhbmdlbnQmJihkW0krK109eC54LGRbSSsrXT14LnksZFtJKytdPXgueixkW0krK109eC54LGRbSSsrXT14LnksZFtJKytdPXgueiksci5iaXRhbmdlbnQmJihMPWEubm9ybWFsaXplKGEuY3Jvc3MoQSx4LEwpLEwpLG1bdisrXT1MLngsbVt2KytdPUwueSxtW3YrK109TC56LG1bdisrXT1MLngsbVt2KytdPUwueSxtW3YrK109TC56KSl9Zm9yKF89MDtfPGk7XysrKXIubm9ybWFsJiYocFtGKytdPTAscFtGKytdPTAscFtGKytdPS0xKSxyLnRhbmdlbnQmJihkW0krK109MSxkW0krK109MCxkW0krK109MCksci5iaXRhbmdlbnQmJihtW3YrK109MCxtW3YrK109LTEsbVt2KytdPTApO2ZvcihfPTA7XzxpO18rKylyLm5vcm1hbCYmKHBbRisrXT0wLHBbRisrXT0wLHBbRisrXT0xKSxyLnRhbmdlbnQmJihkW0krK109MSxkW0krK109MCxkW0krK109MCksci5iaXRhbmdlbnQmJihtW3YrK109MCxtW3YrK109MSxtW3YrK109MCl9bGV0IGI9MTIqaS0xMixUPUZ0LmNyZWF0ZVR5cGVkQXJyYXkodSxiKSxPPTAsRT0wO2ZvcihfPTA7XzxpLTE7XysrKVRbTysrXT1FLFRbTysrXT1FKzIsVFtPKytdPUUrMyxUW08rK109RSxUW08rK109RSszLFRbTysrXT1FKzEsRSs9Mjtmb3IoVFtPKytdPXMtMixUW08rK109MCxUW08rK109MSxUW08rK109cy0yLFRbTysrXT0xLFRbTysrXT1zLTEsXz0xO188aS0xO18rKylUW08rK109cytfKzEsVFtPKytdPXMrXyxUW08rK109cztmb3IoXz0xO188aS0xO18rKylUW08rK109ZixUW08rK109ZitfLFRbTysrXT1mK18rMTtsZXQgdz0wO2lmKHIuc3Qpe2xldCBOPU1hdGgubWF4KG4sbyk7Zm9yKF89MDtfPHU7XysrKXtsZXQgRj1hLmZyb21BcnJheShjLF8qMyx1Rik7bFt3KytdPShGLngrTikvKDIqTiksbFt3KytdPShGLnkrTikvKDIqTil9fWxldCBDPW5ldyBpZTtyLnBvc2l0aW9uJiYoQy5wb3NpdGlvbj1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmN9KSksci5ub3JtYWwmJihDLm5vcm1hbD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6cH0pKSxyLnRhbmdlbnQmJihDLnRhbmdlbnQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmR9KSksci5iaXRhbmdlbnQmJihDLmJpdGFuZ2VudD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6bX0pKSxyLnN0JiYoQy5zdD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6bH0pKSxmXy54PWUqLjUsZl8ueT1NYXRoLm1heChvLG4pO2xldCBNPW5ldyBndChhLlpFUk8sSi5tYWduaXR1ZGUoZl8pKTtpZihoKHQuX29mZnNldEF0dHJpYnV0ZSkpe2U9Yy5sZW5ndGg7bGV0IE49dC5fb2Zmc2V0QXR0cmlidXRlPT09YWUuTk9ORT8wOjEsRj1uZXcgVWludDhBcnJheShlLzMpLmZpbGwoTik7Qy5hcHBseU9mZnNldD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpGfSl9cmV0dXJuIG5ldyBCdCh7YXR0cmlidXRlczpDLGluZGljZXM6VCxwcmltaXRpdmVUeXBlOkR0LlRSSUFOR0xFUyxib3VuZGluZ1NwaGVyZTpNLG9mZnNldEF0dHJpYnV0ZTp0Ll9vZmZzZXRBdHRyaWJ1dGV9KX07VmkuZ2V0VW5pdEN5bGluZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGgodV8pfHwodV89VmkuY3JlYXRlR2VvbWV0cnkobmV3IFZpKHt0b3BSYWRpdXM6MSxib3R0b21SYWRpdXM6MSxsZW5ndGg6MSx2ZXJ0ZXhGb3JtYXQ6cHQuUE9TSVRJT05fT05MWX0pKSksdV99O0hmPVZpfSk7dmFyIHBfPXt9O2RlKHBfLHtkZWZhdWx0OigpPT5wRn0pO2Z1bmN0aW9uIGxGKHQsZSl7cmV0dXJuIGgoZSkmJih0PUhmLnVucGFjayh0LGUpKSxIZi5jcmVhdGVHZW9tZXRyeSh0KX12YXIgcEYsZF89JCgoKT0+e2xfKCk7ZnQoKTtwRj1sRn0pO2Z1bmN0aW9uIHdhKHQpe3Q9dD8/SXQuRU1QVFlfT0JKRUNUO2xldCBlPXQubGVuZ3RoLG49dC50b3BSYWRpdXMsbz10LmJvdHRvbVJhZGl1cyxyPXQuc2xpY2VzPz8xMjgsaT1NYXRoLm1heCh0Lm51bWJlck9mVmVydGljYWxMaW5lcz8/MTYsMCk7aWYoeS50eXBlT2YubnVtYmVyKCJvcHRpb25zLnBvc2l0aW9ucyIsZSkseS50eXBlT2YubnVtYmVyKCJvcHRpb25zLnRvcFJhZGl1cyIsbikseS50eXBlT2YubnVtYmVyKCJvcHRpb25zLmJvdHRvbVJhZGl1cyIsbykseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoIm9wdGlvbnMuc2xpY2VzIixyLDMpLGgodC5vZmZzZXRBdHRyaWJ1dGUpJiZ0Lm9mZnNldEF0dHJpYnV0ZT09PWFlLlRPUCl0aHJvdyBuZXcgRCgiR2VvbWV0cnlPZmZzZXRBdHRyaWJ1dGUuVE9QIGlzIG5vdCBhIHN1cHBvcnRlZCBvcHRpb25zLm9mZnNldEF0dHJpYnV0ZSBmb3IgdGhpcyBnZW9tZXRyeS4iKTt0aGlzLl9sZW5ndGg9ZSx0aGlzLl90b3BSYWRpdXM9bix0aGlzLl9ib3R0b21SYWRpdXM9byx0aGlzLl9zbGljZXM9cix0aGlzLl9udW1iZXJPZlZlcnRpY2FsTGluZXM9aSx0aGlzLl9vZmZzZXRBdHRyaWJ1dGU9dC5vZmZzZXRBdHRyaWJ1dGUsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlQ3lsaW5kZXJPdXRsaW5lR2VvbWV0cnkifXZhciBtXyx5YyxoXyxtTz0kKCgpPT57dmUoKTtVZSgpO0x0KCk7V3QoKTtEZSgpO2FfKCk7eWUoKTtmdCgpO2p0KCk7WGUoKTtZZSgpO2FuKCk7Rm8oKTskZSgpO3RuKCk7bV89bmV3IEo7d2EucGFja2VkTGVuZ3RoPTY7d2EucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLG49bj8/MCxlW24rK109dC5fbGVuZ3RoLGVbbisrXT10Ll90b3BSYWRpdXMsZVtuKytdPXQuX2JvdHRvbVJhZGl1cyxlW24rK109dC5fc2xpY2VzLGVbbisrXT10Ll9udW1iZXJPZlZlcnRpY2FsTGluZXMsZVtuXT10Ll9vZmZzZXRBdHRyaWJ1dGU/Py0xLGV9O3ljPXtsZW5ndGg6dm9pZCAwLHRvcFJhZGl1czp2b2lkIDAsYm90dG9tUmFkaXVzOnZvaWQgMCxzbGljZXM6dm9pZCAwLG51bWJlck9mVmVydGljYWxMaW5lczp2b2lkIDAsb2Zmc2V0QXR0cmlidXRlOnZvaWQgMH07d2EudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LmRlZmluZWQoImFycmF5Iix0KSxlPWU/PzA7bGV0IG89dFtlKytdLHI9dFtlKytdLGk9dFtlKytdLHM9dFtlKytdLGY9dFtlKytdLHU9dFtlXTtyZXR1cm4gaChuKT8obi5fbGVuZ3RoPW8sbi5fdG9wUmFkaXVzPXIsbi5fYm90dG9tUmFkaXVzPWksbi5fc2xpY2VzPXMsbi5fbnVtYmVyT2ZWZXJ0aWNhbExpbmVzPWYsbi5fb2Zmc2V0QXR0cmlidXRlPXU9PT0tMT92b2lkIDA6dSxuKTooeWMubGVuZ3RoPW8seWMudG9wUmFkaXVzPXIseWMuYm90dG9tUmFkaXVzPWkseWMuc2xpY2VzPXMseWMubnVtYmVyT2ZWZXJ0aWNhbExpbmVzPWYseWMub2Zmc2V0QXR0cmlidXRlPXU9PT0tMT92b2lkIDA6dSxuZXcgd2EoeWMpKX07d2EuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7bGV0IGU9dC5fbGVuZ3RoLG49dC5fdG9wUmFkaXVzLG89dC5fYm90dG9tUmFkaXVzLHI9dC5fc2xpY2VzLGk9dC5fbnVtYmVyT2ZWZXJ0aWNhbExpbmVzO2lmKGU8PTB8fG48MHx8bzwwfHxuPT09MCYmbz09PTApcmV0dXJuO2xldCBzPXIqMixmPWdkLmNvbXB1dGVQb3NpdGlvbnMoZSxuLG8sciwhMSksdT1yKjIsYztpZihpPjApe2xldCBnPU1hdGgubWluKGkscik7Yz1NYXRoLnJvdW5kKHIvZyksdSs9Z31sZXQgbD1GdC5jcmVhdGVUeXBlZEFycmF5KHMsdSoyKSxwPTAsZDtmb3IoZD0wO2Q8ci0xO2QrKylsW3ArK109ZCxsW3ArK109ZCsxLGxbcCsrXT1kK3IsbFtwKytdPWQrMStyO2lmKGxbcCsrXT1yLTEsbFtwKytdPTAsbFtwKytdPXIrci0xLGxbcCsrXT1yLGk+MClmb3IoZD0wO2Q8cjtkKz1jKWxbcCsrXT1kLGxbcCsrXT1kK3I7bGV0IG09bmV3IGllO20ucG9zaXRpb249bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpmfSksbV8ueD1lKi41LG1fLnk9TWF0aC5tYXgobyxuKTtsZXQgXz1uZXcgZ3QoYS5aRVJPLEoubWFnbml0dWRlKG1fKSk7aWYoaCh0Ll9vZmZzZXRBdHRyaWJ1dGUpKXtlPWYubGVuZ3RoO2xldCBnPXQuX29mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxLGI9bmV3IFVpbnQ4QXJyYXkoZS8zKS5maWxsKGcpO20uYXBwbHlPZmZzZXQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6Yn0pfXJldHVybiBuZXcgQnQoe2F0dHJpYnV0ZXM6bSxpbmRpY2VzOmwscHJpbWl0aXZlVHlwZTpEdC5MSU5FUyxib3VuZGluZ1NwaGVyZTpfLG9mZnNldEF0dHJpYnV0ZTp0Ll9vZmZzZXRBdHRyaWJ1dGV9KX07aF89d2F9KTt2YXIgX189e307ZGUoX18se2RlZmF1bHQ6KCk9Pm1GfSk7ZnVuY3Rpb24gZEYodCxlKXtyZXR1cm4gaChlKSYmKHQ9aF8udW5wYWNrKHQsZSkpLGhfLmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBtRix5Xz0kKCgpPT57bU8oKTtmdCgpO21GPWRGfSk7dmFyIGdfPXt9O2RlKGdfLHtkZWZhdWx0OigpPT5fRn0pO2Z1bmN0aW9uIGhGKHQsZSl7cmV0dXJuIGgoZSkmJih0PVZyLnVucGFjayh0LGUpKSx0Ll9jZW50ZXI9YS5jbG9uZSh0Ll9jZW50ZXIpLHQuX2VsbGlwc29pZD1ZLmNsb25lKHQuX2VsbGlwc29pZCksVnIuY3JlYXRlR2VvbWV0cnkodCl9dmFyIF9GLEFfPSQoKCk9PntMdCgpO2Z0KCk7QTAoKTskdCgpO19GPWhGfSk7dmFyIGJfPXt9O2RlKGJfLHtkZWZhdWx0OigpPT5nRn0pO2Z1bmN0aW9uIHlGKHQsZSl7cmV0dXJuIGgoZSkmJih0PXpyLnVucGFjayh0LGUpKSx0Ll9jZW50ZXI9YS5jbG9uZSh0Ll9jZW50ZXIpLHQuX2VsbGlwc29pZD1ZLmNsb25lKHQuX2VsbGlwc29pZCksenIuY3JlYXRlR2VvbWV0cnkodCl9dmFyIGdGLFRfPSQoKCk9PntMdCgpO2Z0KCk7TzAoKTskdCgpO2dGPXlGfSk7ZnVuY3Rpb24gemkodCl7dD10Pz9JdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC5yYWRpaT8/RUYsbj10LmlubmVyUmFkaWk/P2Usbz10Lm1pbmltdW1DbG9jaz8/MCxyPXQubWF4aW11bUNsb2NrPz9QLlRXT19QSSxpPXQubWluaW11bUNvbmU/PzAscz10Lm1heGltdW1Db25lPz9QLlBJLGY9TWF0aC5yb3VuZCh0LnN0YWNrUGFydGl0aW9ucz8/NjQpLHU9TWF0aC5yb3VuZCh0LnNsaWNlUGFydGl0aW9ucz8/NjQpLGM9dC52ZXJ0ZXhGb3JtYXQ/P3B0LkRFRkFVTFQ7aWYodTwzKXRocm93IG5ldyBEKCJvcHRpb25zLnNsaWNlUGFydGl0aW9ucyBjYW5ub3QgYmUgbGVzcyB0aGFuIHRocmVlLiIpO2lmKGY8Myl0aHJvdyBuZXcgRCgib3B0aW9ucy5zdGFja1BhcnRpdGlvbnMgY2Fubm90IGJlIGxlc3MgdGhhbiB0aHJlZS4iKTt0aGlzLl9yYWRpaT1hLmNsb25lKGUpLHRoaXMuX2lubmVyUmFkaWk9YS5jbG9uZShuKSx0aGlzLl9taW5pbXVtQ2xvY2s9byx0aGlzLl9tYXhpbXVtQ2xvY2s9cix0aGlzLl9taW5pbXVtQ29uZT1pLHRoaXMuX21heGltdW1Db25lPXMsdGhpcy5fc3RhY2tQYXJ0aXRpb25zPWYsdGhpcy5fc2xpY2VQYXJ0aXRpb25zPXUsdGhpcy5fdmVydGV4Rm9ybWF0PXB0LmNsb25lKGMpLHRoaXMuX29mZnNldEF0dHJpYnV0ZT10Lm9mZnNldEF0dHJpYnV0ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVFbGxpcHNvaWRHZW9tZXRyeSJ9dmFyIEFGLGJGLFRGLHdGLE9GLEVGLGhPLF9PLHlPLGdPLEFPLGdzLHdfLHNyLEFkPSQoKCk9Pnt2ZSgpO1VlKCk7THQoKTtEZSgpO3llKCk7ZnQoKTtqdCgpOyR0KCk7WGUoKTtZZSgpO2FuKCk7Rm8oKTskZSgpO0t0KCk7dG4oKTtSbygpO0FGPW5ldyBhLGJGPW5ldyBhLFRGPW5ldyBhLHdGPW5ldyBhLE9GPW5ldyBhLEVGPW5ldyBhKDEsMSwxKSxoTz1NYXRoLmNvcyxfTz1NYXRoLnNpbjt6aS5wYWNrZWRMZW5ndGg9MiphLnBhY2tlZExlbmd0aCtwdC5wYWNrZWRMZW5ndGgrNzt6aS5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgRCgidmFsdWUgaXMgcmVxdWlyZWQiKTtpZighaChlKSl0aHJvdyBuZXcgRCgiYXJyYXkgaXMgcmVxdWlyZWQiKTtyZXR1cm4gbj1uPz8wLGEucGFjayh0Ll9yYWRpaSxlLG4pLG4rPWEucGFja2VkTGVuZ3RoLGEucGFjayh0Ll9pbm5lclJhZGlpLGUsbiksbis9YS5wYWNrZWRMZW5ndGgscHQucGFjayh0Ll92ZXJ0ZXhGb3JtYXQsZSxuKSxuKz1wdC5wYWNrZWRMZW5ndGgsZVtuKytdPXQuX21pbmltdW1DbG9jayxlW24rK109dC5fbWF4aW11bUNsb2NrLGVbbisrXT10Ll9taW5pbXVtQ29uZSxlW24rK109dC5fbWF4aW11bUNvbmUsZVtuKytdPXQuX3N0YWNrUGFydGl0aW9ucyxlW24rK109dC5fc2xpY2VQYXJ0aXRpb25zLGVbbl09dC5fb2Zmc2V0QXR0cmlidXRlPz8tMSxlfTt5Tz1uZXcgYSxnTz1uZXcgYSxBTz1uZXcgcHQsZ3M9e3JhZGlpOnlPLGlubmVyUmFkaWk6Z08sdmVydGV4Rm9ybWF0OkFPLG1pbmltdW1DbG9jazp2b2lkIDAsbWF4aW11bUNsb2NrOnZvaWQgMCxtaW5pbXVtQ29uZTp2b2lkIDAsbWF4aW11bUNvbmU6dm9pZCAwLHN0YWNrUGFydGl0aW9uczp2b2lkIDAsc2xpY2VQYXJ0aXRpb25zOnZvaWQgMCxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTt6aS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBEKCJhcnJheSBpcyByZXF1aXJlZCIpO2U9ZT8/MDtsZXQgbz1hLnVucGFjayh0LGUseU8pO2UrPWEucGFja2VkTGVuZ3RoO2xldCByPWEudW5wYWNrKHQsZSxnTyk7ZSs9YS5wYWNrZWRMZW5ndGg7bGV0IGk9cHQudW5wYWNrKHQsZSxBTyk7ZSs9cHQucGFja2VkTGVuZ3RoO2xldCBzPXRbZSsrXSxmPXRbZSsrXSx1PXRbZSsrXSxjPXRbZSsrXSxsPXRbZSsrXSxwPXRbZSsrXSxkPXRbZV07cmV0dXJuIGgobik/KG4uX3JhZGlpPWEuY2xvbmUobyxuLl9yYWRpaSksbi5faW5uZXJSYWRpaT1hLmNsb25lKHIsbi5faW5uZXJSYWRpaSksbi5fdmVydGV4Rm9ybWF0PXB0LmNsb25lKGksbi5fdmVydGV4Rm9ybWF0KSxuLl9taW5pbXVtQ2xvY2s9cyxuLl9tYXhpbXVtQ2xvY2s9ZixuLl9taW5pbXVtQ29uZT11LG4uX21heGltdW1Db25lPWMsbi5fc3RhY2tQYXJ0aXRpb25zPWwsbi5fc2xpY2VQYXJ0aXRpb25zPXAsbi5fb2Zmc2V0QXR0cmlidXRlPWQ9PT0tMT92b2lkIDA6ZCxuKTooZ3MubWluaW11bUNsb2NrPXMsZ3MubWF4aW11bUNsb2NrPWYsZ3MubWluaW11bUNvbmU9dSxncy5tYXhpbXVtQ29uZT1jLGdzLnN0YWNrUGFydGl0aW9ucz1sLGdzLnNsaWNlUGFydGl0aW9ucz1wLGdzLm9mZnNldEF0dHJpYnV0ZT1kPT09LTE/dm9pZCAwOmQsbmV3IHppKGdzKSl9O3ppLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX3JhZGlpO2lmKGUueDw9MHx8ZS55PD0wfHxlLno8PTApcmV0dXJuO2xldCBuPXQuX2lubmVyUmFkaWk7aWYobi54PD0wfHxuLnk8PTB8fG4uejw9MClyZXR1cm47bGV0IG89dC5fbWluaW11bUNsb2NrLHI9dC5fbWF4aW11bUNsb2NrLGk9dC5fbWluaW11bUNvbmUscz10Ll9tYXhpbXVtQ29uZSxmPXQuX3ZlcnRleEZvcm1hdCx1PXQuX3NsaWNlUGFydGl0aW9ucysxLGM9dC5fc3RhY2tQYXJ0aXRpb25zKzE7dT1NYXRoLnJvdW5kKHUqTWF0aC5hYnMoci1vKS9QLlRXT19QSSksYz1NYXRoLnJvdW5kKGMqTWF0aC5hYnMocy1pKS9QLlBJKSx1PDImJih1PTIpLGM8MiYmKGM9Mik7bGV0IGwscCxkPTAsbT1baV0sXz1bb107Zm9yKGw9MDtsPGM7bCsrKW0ucHVzaChpK2wqKHMtaSkvKGMtMSkpO2ZvcihtLnB1c2gocykscD0wO3A8dTtwKyspXy5wdXNoKG8rcCooci1vKS8odS0xKSk7Xy5wdXNoKHIpO2xldCBnPW0ubGVuZ3RoLGI9Xy5sZW5ndGgsVD0wLE89MSxFPW4ueCE9PWUueHx8bi55IT09ZS55fHxuLnohPT1lLnosdz0hMSxDPSExLE09ITE7RSYmKE89MixpPjAmJih3PSEwLFQrPXUtMSksczxNYXRoLlBJJiYoQz0hMCxUKz11LTEpLChyLW8pJVAuVFdPX1BJPyhNPSEwLFQrPShjLTEpKjIrMSk6VCs9MSk7bGV0IE49YipnKk8sRj1uZXcgRmxvYXQ2NEFycmF5KE4qMyksST1uZXcgQXJyYXkoTikuZmlsbCghMSksdj1uZXcgQXJyYXkoTikuZmlsbCghMSksQj11KmMqTyxBPTYqKEIrVCsxLSh1K2MpKk8pLFM9RnQuY3JlYXRlVHlwZWRBcnJheShCLEEpLHg9Zi5ub3JtYWw/bmV3IEZsb2F0MzJBcnJheShOKjMpOnZvaWQgMCxMPWYudGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KE4qMyk6dm9pZCAwLHo9Zi5iaXRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShOKjMpOnZvaWQgMCxqPWYuc3Q/bmV3IEZsb2F0MzJBcnJheShOKjIpOnZvaWQgMCxrPW5ldyBBcnJheShnKSxxPW5ldyBBcnJheShnKTtmb3IobD0wO2w8ZztsKyspa1tsXT1fTyhtW2xdKSxxW2xdPWhPKG1bbF0pO2xldCBXPW5ldyBBcnJheShiKSxSPW5ldyBBcnJheShiKTtmb3IocD0wO3A8YjtwKyspUltwXT1oTyhfW3BdKSxXW3BdPV9PKF9bcF0pO2ZvcihsPTA7bDxnO2wrKylmb3IocD0wO3A8YjtwKyspRltkKytdPWUueCprW2xdKlJbcF0sRltkKytdPWUueSprW2xdKldbcF0sRltkKytdPWUueipxW2xdO2xldCBudD1OLzI7aWYoRSlmb3IobD0wO2w8ZztsKyspZm9yKHA9MDtwPGI7cCsrKUZbZCsrXT1uLngqa1tsXSpSW3BdLEZbZCsrXT1uLnkqa1tsXSpXW3BdLEZbZCsrXT1uLnoqcVtsXSxJW250XT0hMCxsPjAmJmwhPT1nLTEmJnAhPT0wJiZwIT09Yi0xJiYodltudF09ITApLG50Kys7ZD0wO2xldCBhdCxsdDtmb3IobD0xO2w8Zy0yO2wrKylmb3IoYXQ9bCpiLGx0PShsKzEpKmIscD0xO3A8Yi0yO3ArKylTW2QrK109bHQrcCxTW2QrK109bHQrcCsxLFNbZCsrXT1hdCtwKzEsU1tkKytdPWx0K3AsU1tkKytdPWF0K3ArMSxTW2QrK109YXQrcDtpZihFKXtsZXQgcGU9ZypiO2ZvcihsPTE7bDxnLTI7bCsrKWZvcihhdD1wZStsKmIsbHQ9cGUrKGwrMSkqYixwPTE7cDxiLTI7cCsrKVNbZCsrXT1sdCtwLFNbZCsrXT1hdCtwLFNbZCsrXT1hdCtwKzEsU1tkKytdPWx0K3AsU1tkKytdPWF0K3ArMSxTW2QrK109bHQrcCsxfWxldCBodCxvdDtpZihFKXtpZih3KWZvcihvdD1nKmIsbD0xO2w8Yi0yO2wrKylTW2QrK109bCxTW2QrK109bCsxLFNbZCsrXT1vdCtsKzEsU1tkKytdPWwsU1tkKytdPW90K2wrMSxTW2QrK109b3QrbDtpZihDKWZvcihodD1nKmItYixvdD1nKmIqTy1iLGw9MTtsPGItMjtsKyspU1tkKytdPWh0K2wrMSxTW2QrK109aHQrbCxTW2QrK109b3QrbCxTW2QrK109aHQrbCsxLFNbZCsrXT1vdCtsLFNbZCsrXT1vdCtsKzF9aWYoTSl7Zm9yKGw9MTtsPGctMjtsKyspb3Q9YipnK2IqbCxodD1iKmwsU1tkKytdPW90LFNbZCsrXT1odCtiLFNbZCsrXT1odCxTW2QrK109b3QsU1tkKytdPW90K2IsU1tkKytdPWh0K2I7Zm9yKGw9MTtsPGctMjtsKyspb3Q9YipnK2IqKGwrMSktMSxodD1iKihsKzEpLTEsU1tkKytdPWh0K2IsU1tkKytdPW90LFNbZCsrXT1odCxTW2QrK109aHQrYixTW2QrK109b3QrYixTW2QrK109b3R9bGV0IFB0PW5ldyBpZTtmLnBvc2l0aW9uJiYoUHQucG9zaXRpb249bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpGfSkpO2xldCB5dD0wLEV0PTAsZHQ9MCxydD0wLEN0PU4vMixrdCxsZT1ZLmZyb21DYXJ0ZXNpYW4zKGUpLHJlPVkuZnJvbUNhcnRlc2lhbjMobik7aWYoZi5zdHx8Zi5ub3JtYWx8fGYudGFuZ2VudHx8Zi5iaXRhbmdlbnQpe2ZvcihsPTA7bDxOO2wrKyl7a3Q9SVtsXT9yZTpsZTtsZXQgcGU9YS5mcm9tQXJyYXkoRixsKjMsQUYpLGZlPWt0Lmdlb2RldGljU3VyZmFjZU5vcm1hbChwZSxiRik7aWYodltsXSYmYS5uZWdhdGUoZmUsZmUpLGYuc3Qpe2xldCBadD1KLm5lZ2F0ZShmZSxPRik7alt5dCsrXT1NYXRoLmF0YW4yKFp0LnksWnQueCkvUC5UV09fUEkrLjUsalt5dCsrXT1NYXRoLmFzaW4oZmUueikvTWF0aC5QSSsuNX1pZihmLm5vcm1hbCYmKHhbRXQrK109ZmUueCx4W0V0KytdPWZlLnkseFtFdCsrXT1mZS56KSxmLnRhbmdlbnR8fGYuYml0YW5nZW50KXtsZXQgWnQ9VEYsUXQ9MCxOZTtpZihJW2xdJiYoUXQ9Q3QpLCF3JiZsPj1RdCYmbDxRdCtiKjI/TmU9YS5VTklUX1g6TmU9YS5VTklUX1osYS5jcm9zcyhOZSxmZSxadCksYS5ub3JtYWxpemUoWnQsWnQpLGYudGFuZ2VudCYmKExbZHQrK109WnQueCxMW2R0KytdPVp0LnksTFtkdCsrXT1adC56KSxmLmJpdGFuZ2VudCl7bGV0IGdlPWEuY3Jvc3MoZmUsWnQsd0YpO2Eubm9ybWFsaXplKGdlLGdlKSx6W3J0KytdPWdlLngseltydCsrXT1nZS55LHpbcnQrK109Z2Uuen19fWYuc3QmJihQdC5zdD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6an0pKSxmLm5vcm1hbCYmKFB0Lm5vcm1hbD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6eH0pKSxmLnRhbmdlbnQmJihQdC50YW5nZW50PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpMfSkpLGYuYml0YW5nZW50JiYoUHQuYml0YW5nZW50PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczp6fSkpfWlmKGgodC5fb2Zmc2V0QXR0cmlidXRlKSl7bGV0IHBlPUYubGVuZ3RoLGZlPXQuX29mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxLFp0PW5ldyBVaW50OEFycmF5KHBlLzMpLmZpbGwoZmUpO1B0LmFwcGx5T2Zmc2V0PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOlp0fSl9cmV0dXJuIG5ldyBCdCh7YXR0cmlidXRlczpQdCxpbmRpY2VzOlMscHJpbWl0aXZlVHlwZTpEdC5UUklBTkdMRVMsYm91bmRpbmdTcGhlcmU6Z3QuZnJvbUVsbGlwc29pZChsZSksb2Zmc2V0QXR0cmlidXRlOnQuX29mZnNldEF0dHJpYnV0ZX0pfTt6aS5nZXRVbml0RWxsaXBzb2lkPWZ1bmN0aW9uKCl7cmV0dXJuIGgod18pfHwod189emkuY3JlYXRlR2VvbWV0cnkobmV3IHppKHtyYWRpaTpuZXcgYSgxLDEsMSksdmVydGV4Rm9ybWF0OnB0LlBPU0lUSU9OX09OTFl9KSkpLHdffTtzcj16aX0pO3ZhciBPXz17fTtkZShPXyx7ZGVmYXVsdDooKT0+U0Z9KTtmdW5jdGlvbiBSRih0LGUpe3JldHVybiBoKGUpJiYodD1zci51bnBhY2sodCxlKSksc3IuY3JlYXRlR2VvbWV0cnkodCl9dmFyIFNGLEVfPSQoKCk9PntmdCgpO0FkKCk7U0Y9UkZ9KTtmdW5jdGlvbiBPYSh0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVDtsZXQgZT10LnJhZGlpPz9DRixuPXQuaW5uZXJSYWRpaT8/ZSxvPXQubWluaW11bUNsb2NrPz8wLHI9dC5tYXhpbXVtQ2xvY2s/P1AuVFdPX1BJLGk9dC5taW5pbXVtQ29uZT8/MCxzPXQubWF4aW11bUNvbmU/P1AuUEksZj1NYXRoLnJvdW5kKHQuc3RhY2tQYXJ0aXRpb25zPz8xMCksdT1NYXRoLnJvdW5kKHQuc2xpY2VQYXJ0aXRpb25zPz84KSxjPU1hdGgucm91bmQodC5zdWJkaXZpc2lvbnM/PzEyOCk7aWYoZjwxKXRocm93IG5ldyBEKCJvcHRpb25zLnN0YWNrUGFydGl0aW9ucyBjYW5ub3QgYmUgbGVzcyB0aGFuIDEiKTtpZih1PDApdGhyb3cgbmV3IEQoIm9wdGlvbnMuc2xpY2VQYXJ0aXRpb25zIGNhbm5vdCBiZSBsZXNzIHRoYW4gMCIpO2lmKGM8MCl0aHJvdyBuZXcgRCgib3B0aW9ucy5zdWJkaXZpc2lvbnMgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gemVyby4iKTtpZihoKHQub2Zmc2V0QXR0cmlidXRlKSYmdC5vZmZzZXRBdHRyaWJ1dGU9PT1hZS5UT1ApdGhyb3cgbmV3IEQoIkdlb21ldHJ5T2Zmc2V0QXR0cmlidXRlLlRPUCBpcyBub3QgYSBzdXBwb3J0ZWQgb3B0aW9ucy5vZmZzZXRBdHRyaWJ1dGUgZm9yIHRoaXMgZ2VvbWV0cnkuIik7dGhpcy5fcmFkaWk9YS5jbG9uZShlKSx0aGlzLl9pbm5lclJhZGlpPWEuY2xvbmUobiksdGhpcy5fbWluaW11bUNsb2NrPW8sdGhpcy5fbWF4aW11bUNsb2NrPXIsdGhpcy5fbWluaW11bUNvbmU9aSx0aGlzLl9tYXhpbXVtQ29uZT1zLHRoaXMuX3N0YWNrUGFydGl0aW9ucz1mLHRoaXMuX3NsaWNlUGFydGl0aW9ucz11LHRoaXMuX3N1YmRpdmlzaW9ucz1jLHRoaXMuX29mZnNldEF0dHJpYnV0ZT10Lm9mZnNldEF0dHJpYnV0ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVFbGxpcHNvaWRPdXRsaW5lR2VvbWV0cnkifXZhciBDRixiZCxUZCxiTyxUTyxqaSxXcixSXz0kKCgpPT57dmUoKTtMdCgpO0RlKCk7eWUoKTtmdCgpO2p0KCk7JHQoKTtYZSgpO1llKCk7YW4oKTtGbygpOyRlKCk7S3QoKTt0bigpO0NGPW5ldyBhKDEsMSwxKSxiZD1NYXRoLmNvcyxUZD1NYXRoLnNpbjtPYS5wYWNrZWRMZW5ndGg9MiphLnBhY2tlZExlbmd0aCs4O09hLnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBEKCJ2YWx1ZSBpcyByZXF1aXJlZCIpO2lmKCFoKGUpKXRocm93IG5ldyBEKCJhcnJheSBpcyByZXF1aXJlZCIpO3JldHVybiBuPW4/PzAsYS5wYWNrKHQuX3JhZGlpLGUsbiksbis9YS5wYWNrZWRMZW5ndGgsYS5wYWNrKHQuX2lubmVyUmFkaWksZSxuKSxuKz1hLnBhY2tlZExlbmd0aCxlW24rK109dC5fbWluaW11bUNsb2NrLGVbbisrXT10Ll9tYXhpbXVtQ2xvY2ssZVtuKytdPXQuX21pbmltdW1Db25lLGVbbisrXT10Ll9tYXhpbXVtQ29uZSxlW24rK109dC5fc3RhY2tQYXJ0aXRpb25zLGVbbisrXT10Ll9zbGljZVBhcnRpdGlvbnMsZVtuKytdPXQuX3N1YmRpdmlzaW9ucyxlW25dPXQuX29mZnNldEF0dHJpYnV0ZT8/LTEsZX07Yk89bmV3IGEsVE89bmV3IGEsamk9e3JhZGlpOmJPLGlubmVyUmFkaWk6VE8sbWluaW11bUNsb2NrOnZvaWQgMCxtYXhpbXVtQ2xvY2s6dm9pZCAwLG1pbmltdW1Db25lOnZvaWQgMCxtYXhpbXVtQ29uZTp2b2lkIDAsc3RhY2tQYXJ0aXRpb25zOnZvaWQgMCxzbGljZVBhcnRpdGlvbnM6dm9pZCAwLHN1YmRpdmlzaW9uczp2b2lkIDAsb2Zmc2V0QXR0cmlidXRlOnZvaWQgMH07T2EudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgRCgiYXJyYXkgaXMgcmVxdWlyZWQiKTtlPWU/PzA7bGV0IG89YS51bnBhY2sodCxlLGJPKTtlKz1hLnBhY2tlZExlbmd0aDtsZXQgcj1hLnVucGFjayh0LGUsVE8pO2UrPWEucGFja2VkTGVuZ3RoO2xldCBpPXRbZSsrXSxzPXRbZSsrXSxmPXRbZSsrXSx1PXRbZSsrXSxjPXRbZSsrXSxsPXRbZSsrXSxwPXRbZSsrXSxkPXRbZV07cmV0dXJuIGgobik/KG4uX3JhZGlpPWEuY2xvbmUobyxuLl9yYWRpaSksbi5faW5uZXJSYWRpaT1hLmNsb25lKHIsbi5faW5uZXJSYWRpaSksbi5fbWluaW11bUNsb2NrPWksbi5fbWF4aW11bUNsb2NrPXMsbi5fbWluaW11bUNvbmU9ZixuLl9tYXhpbXVtQ29uZT11LG4uX3N0YWNrUGFydGl0aW9ucz1jLG4uX3NsaWNlUGFydGl0aW9ucz1sLG4uX3N1YmRpdmlzaW9ucz1wLG4uX29mZnNldEF0dHJpYnV0ZT1kPT09LTE/dm9pZCAwOmQsbik6KGppLm1pbmltdW1DbG9jaz1pLGppLm1heGltdW1DbG9jaz1zLGppLm1pbmltdW1Db25lPWYsamkubWF4aW11bUNvbmU9dSxqaS5zdGFja1BhcnRpdGlvbnM9YyxqaS5zbGljZVBhcnRpdGlvbnM9bCxqaS5zdWJkaXZpc2lvbnM9cCxqaS5vZmZzZXRBdHRyaWJ1dGU9ZD09PS0xP3ZvaWQgMDpkLG5ldyBPYShqaSkpfTtPYS5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbih0KXtsZXQgZT10Ll9yYWRpaTtpZihlLng8PTB8fGUueTw9MHx8ZS56PD0wKXJldHVybjtsZXQgbj10Ll9pbm5lclJhZGlpO2lmKG4ueDw9MHx8bi55PD0wfHxuLno8PTApcmV0dXJuO2xldCBvPXQuX21pbmltdW1DbG9jayxyPXQuX21heGltdW1DbG9jayxpPXQuX21pbmltdW1Db25lLHM9dC5fbWF4aW11bUNvbmUsZj10Ll9zdWJkaXZpc2lvbnMsdT1ZLmZyb21DYXJ0ZXNpYW4zKGUpLGM9dC5fc2xpY2VQYXJ0aXRpb25zKzEsbD10Ll9zdGFja1BhcnRpdGlvbnMrMTtjPU1hdGgucm91bmQoYypNYXRoLmFicyhyLW8pL1AuVFdPX1BJKSxsPU1hdGgucm91bmQobCpNYXRoLmFicyhzLWkpL1AuUEkpLGM8MiYmKGM9MiksbDwyJiYobD0yKTtsZXQgcD0wLGQ9MSxtPW4ueCE9PWUueHx8bi55IT09ZS55fHxuLnohPT1lLnosXz0hMSxnPSExO20mJihkPTIsaT4wJiYoXz0hMCxwKz1jKSxzPE1hdGguUEkmJihnPSEwLHArPWMpKTtsZXQgYj1mKmQqKGwrYyksVD1uZXcgRmxvYXQ2NEFycmF5KGIqMyksTz0yKihiK3AtKGMrbCkqZCksRT1GdC5jcmVhdGVUeXBlZEFycmF5KGIsTyksdyxDLE0sTixGPTAsST1uZXcgQXJyYXkobCksdj1uZXcgQXJyYXkobCk7Zm9yKHc9MDt3PGw7dysrKU49aSt3KihzLWkpLyhsLTEpLElbd109VGQoTiksdlt3XT1iZChOKTtsZXQgQj1uZXcgQXJyYXkoZiksQT1uZXcgQXJyYXkoZik7Zm9yKHc9MDt3PGY7dysrKU09byt3KihyLW8pLyhmLTEpLEJbd109VGQoTSksQVt3XT1iZChNKTtmb3Iodz0wO3c8bDt3KyspZm9yKEM9MDtDPGY7QysrKVRbRisrXT1lLngqSVt3XSpBW0NdLFRbRisrXT1lLnkqSVt3XSpCW0NdLFRbRisrXT1lLnoqdlt3XTtpZihtKWZvcih3PTA7dzxsO3crKylmb3IoQz0wO0M8ZjtDKyspVFtGKytdPW4ueCpJW3ddKkFbQ10sVFtGKytdPW4ueSpJW3ddKkJbQ10sVFtGKytdPW4ueip2W3ddO2ZvcihJLmxlbmd0aD1mLHYubGVuZ3RoPWYsdz0wO3c8Zjt3KyspTj1pK3cqKHMtaSkvKGYtMSksSVt3XT1UZChOKSx2W3ddPWJkKE4pO2ZvcihCLmxlbmd0aD1jLEEubGVuZ3RoPWMsdz0wO3c8Yzt3KyspTT1vK3cqKHItbykvKGMtMSksQlt3XT1UZChNKSxBW3ddPWJkKE0pO2Zvcih3PTA7dzxmO3crKylmb3IoQz0wO0M8YztDKyspVFtGKytdPWUueCpJW3ddKkFbQ10sVFtGKytdPWUueSpJW3ddKkJbQ10sVFtGKytdPWUueip2W3ddO2lmKG0pZm9yKHc9MDt3PGY7dysrKWZvcihDPTA7QzxjO0MrKylUW0YrK109bi54Kklbd10qQVtDXSxUW0YrK109bi55Kklbd10qQltDXSxUW0YrK109bi56KnZbd107Zm9yKEY9MCx3PTA7dzxsKmQ7dysrKXtsZXQgTD13KmY7Zm9yKEM9MDtDPGYtMTtDKyspRVtGKytdPUwrQyxFW0YrK109TCtDKzF9bGV0IFM9bCpmKmQ7Zm9yKHc9MDt3PGM7dysrKWZvcihDPTA7QzxmLTE7QysrKUVbRisrXT1TK3crQypjLEVbRisrXT1TK3crKEMrMSkqYztpZihtKWZvcihTPWwqZipkK2MqZix3PTA7dzxjO3crKylmb3IoQz0wO0M8Zi0xO0MrKylFW0YrK109Uyt3K0MqYyxFW0YrK109Uyt3KyhDKzEpKmM7aWYobSl7bGV0IEw9bCpmKmQsej1MK2YqYztpZihfKWZvcih3PTA7dzxjO3crKylFW0YrK109TCt3LEVbRisrXT16K3c7aWYoZylmb3IoTCs9ZipjLWMseis9ZipjLWMsdz0wO3c8Yzt3KyspRVtGKytdPUwrdyxFW0YrK109eit3fWxldCB4PW5ldyBpZSh7cG9zaXRpb246bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpUfSl9KTtpZihoKHQuX29mZnNldEF0dHJpYnV0ZSkpe2xldCBMPVQubGVuZ3RoLHo9dC5fb2Zmc2V0QXR0cmlidXRlPT09YWUuTk9ORT8wOjEsaj1uZXcgVWludDhBcnJheShMLzMpLmZpbGwoeik7eC5hcHBseU9mZnNldD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpqfSl9cmV0dXJuIG5ldyBCdCh7YXR0cmlidXRlczp4LGluZGljZXM6RSxwcmltaXRpdmVUeXBlOkR0LkxJTkVTLGJvdW5kaW5nU3BoZXJlOmd0LmZyb21FbGxpcHNvaWQodSksb2Zmc2V0QXR0cmlidXRlOnQuX29mZnNldEF0dHJpYnV0ZX0pfTtXcj1PYX0pO3ZhciBTXz17fTtkZShTXyx7ZGVmYXVsdDooKT0+UEZ9KTtmdW5jdGlvbiB4Rih0LGUpe3JldHVybiBoKHQuYnVmZmVyLGUpJiYodD1Xci51bnBhY2sodCxlKSksV3IuY3JlYXRlR2VvbWV0cnkodCl9dmFyIFBGLENfPSQoKCk9PntmdCgpO1JfKCk7UEY9eEZ9KTtmdW5jdGlvbiBPcih0KXt0aGlzLnBsYW5lcz10Pz9bXX12YXIgcWYsQXMsTUYsd08sd2QseF89JCgoKT0+e0x0KCk7aHIoKTtmdCgpO2p0KCk7R3MoKTtmcygpO3FmPVtuZXcgYSxuZXcgYSxuZXcgYV07YS5jbG9uZShhLlVOSVRfWCxxZlswXSk7YS5jbG9uZShhLlVOSVRfWSxxZlsxXSk7YS5jbG9uZShhLlVOSVRfWixxZlsyXSk7QXM9bmV3IGEsTUY9bmV3IGEsd089bmV3IG9uKG5ldyBhKDEsMCwwKSwwKTtPci5mcm9tQm91bmRpbmdTcGhlcmU9ZnVuY3Rpb24odCxlKXtpZighaCh0KSl0aHJvdyBuZXcgRCgiYm91bmRpbmdTcGhlcmUgaXMgcmVxdWlyZWQuIik7aChlKXx8KGU9bmV3IE9yKTtsZXQgbj1xZi5sZW5ndGgsbz1lLnBsYW5lcztvLmxlbmd0aD0yKm47bGV0IHI9dC5jZW50ZXIsaT10LnJhZGl1cyxzPTA7Zm9yKGxldCBmPTA7ZjxuOysrZil7bGV0IHU9cWZbZl0sYz1vW3NdLGw9b1tzKzFdO2goYyl8fChjPW9bc109bmV3IG1lKSxoKGwpfHwobD1vW3MrMV09bmV3IG1lKSxhLm11bHRpcGx5QnlTY2FsYXIodSwtaSxBcyksYS5hZGQocixBcyxBcyksYy54PXUueCxjLnk9dS55LGMuej11LnosYy53PS1hLmRvdCh1LEFzKSxhLm11bHRpcGx5QnlTY2FsYXIodSxpLEFzKSxhLmFkZChyLEFzLEFzKSxsLng9LXUueCxsLnk9LXUueSxsLno9LXUueixsLnc9LWEuZG90KGEubmVnYXRlKHUsTUYpLEFzKSxzKz0yfXJldHVybiBlfTtPci5wcm90b3R5cGUuY29tcHV0ZVZpc2liaWxpdHk9ZnVuY3Rpb24odCl7aWYoIWgodCkpdGhyb3cgbmV3IEQoImJvdW5kaW5nVm9sdW1lIGlzIHJlcXVpcmVkLiIpO2xldCBlPXRoaXMucGxhbmVzLG49ITE7Zm9yKGxldCBvPTAscj1lLmxlbmd0aDtvPHI7KytvKXtsZXQgaT10LmludGVyc2VjdFBsYW5lKG9uLmZyb21DYXJ0ZXNpYW40KGVbb10sd08pKTtpZihpPT09U24uT1VUU0lERSlyZXR1cm4gU24uT1VUU0lERTtpPT09U24uSU5URVJTRUNUSU5HJiYobj0hMCl9cmV0dXJuIG4/U24uSU5URVJTRUNUSU5HOlNuLklOU0lERX07T3IucHJvdG90eXBlLmNvbXB1dGVWaXNpYmlsaXR5V2l0aFBsYW5lTWFzaz1mdW5jdGlvbih0LGUpe2lmKCFoKHQpKXRocm93IG5ldyBEKCJib3VuZGluZ1ZvbHVtZSBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgRCgicGFyZW50UGxhbmVNYXNrIGlzIHJlcXVpcmVkLiIpO2lmKGU9PT1Pci5NQVNLX09VVFNJREV8fGU9PT1Pci5NQVNLX0lOU0lERSlyZXR1cm4gZTtsZXQgbj1Pci5NQVNLX0lOU0lERSxvPXRoaXMucGxhbmVzO2ZvcihsZXQgcj0wLGk9by5sZW5ndGg7cjxpOysrcil7bGV0IHM9cjwzMT8xPDxyOjA7aWYocjwzMSYmKGUmcyk9PT0wKWNvbnRpbnVlO2xldCBmPXQuaW50ZXJzZWN0UGxhbmUob24uZnJvbUNhcnRlc2lhbjQob1tyXSx3TykpO2lmKGY9PT1Tbi5PVVRTSURFKXJldHVybiBPci5NQVNLX09VVFNJREU7Zj09PVNuLklOVEVSU0VDVElORyYmKG58PXMpfXJldHVybiBufTtPci5NQVNLX09VVFNJREU9NDI5NDk2NzI5NTtPci5NQVNLX0lOU0lERT0wO09yLk1BU0tfSU5ERVRFUk1JTkFURT0yMTQ3NDgzNjQ3O3dkPU9yfSk7ZnVuY3Rpb24gbGkodCl7dD10Pz9JdC5FTVBUWV9PQkpFQ1QsdGhpcy5sZWZ0PXQubGVmdCx0aGlzLl9sZWZ0PXZvaWQgMCx0aGlzLnJpZ2h0PXQucmlnaHQsdGhpcy5fcmlnaHQ9dm9pZCAwLHRoaXMudG9wPXQudG9wLHRoaXMuX3RvcD12b2lkIDAsdGhpcy5ib3R0b209dC5ib3R0b20sdGhpcy5fYm90dG9tPXZvaWQgMCx0aGlzLm5lYXI9dC5uZWFyPz8xLHRoaXMuX25lYXI9dGhpcy5uZWFyLHRoaXMuZmFyPXQuZmFyPz81ZTgsdGhpcy5fZmFyPXRoaXMuZmFyLHRoaXMuX2N1bGxpbmdWb2x1bWU9bmV3IHdkLHRoaXMuX29ydGhvZ3JhcGhpY01hdHJpeD1uZXcgc3R9ZnVuY3Rpb24gT08odCl7aWYoIWgodC5yaWdodCl8fCFoKHQubGVmdCl8fCFoKHQudG9wKXx8IWgodC5ib3R0b20pfHwhaCh0Lm5lYXIpfHwhaCh0LmZhcikpdGhyb3cgbmV3IEQoInJpZ2h0LCBsZWZ0LCB0b3AsIGJvdHRvbSwgbmVhciwgb3IgZmFyIHBhcmFtZXRlcnMgYXJlIG5vdCBzZXQuIik7aWYodC50b3AhPT10Ll90b3B8fHQuYm90dG9tIT09dC5fYm90dG9tfHx0LmxlZnQhPT10Ll9sZWZ0fHx0LnJpZ2h0IT09dC5fcmlnaHR8fHQubmVhciE9PXQuX25lYXJ8fHQuZmFyIT09dC5fZmFyKXtpZih0LmxlZnQ+dC5yaWdodCl0aHJvdyBuZXcgRCgicmlnaHQgbXVzdCBiZSBncmVhdGVyIHRoYW4gbGVmdC4iKTtpZih0LmJvdHRvbT50LnRvcCl0aHJvdyBuZXcgRCgidG9wIG11c3QgYmUgZ3JlYXRlciB0aGFuIGJvdHRvbS4iKTtpZih0Lm5lYXI8PTB8fHQubmVhcj50LmZhcil0aHJvdyBuZXcgRCgibmVhciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCBsZXNzIHRoYW4gZmFyLiIpO3QuX2xlZnQ9dC5sZWZ0LHQuX3JpZ2h0PXQucmlnaHQsdC5fdG9wPXQudG9wLHQuX2JvdHRvbT10LmJvdHRvbSx0Ll9uZWFyPXQubmVhcix0Ll9mYXI9dC5mYXIsdC5fb3J0aG9ncmFwaGljTWF0cml4PXN0LmNvbXB1dGVPcnRob2dyYXBoaWNPZmZDZW50ZXIodC5sZWZ0LHQucmlnaHQsdC5ib3R0b20sdC50b3AsdC5uZWFyLHQuZmFyLHQuX29ydGhvZ3JhcGhpY01hdHJpeCl9fXZhciBORixJRix2RixQXyxFTyxSTz0kKCgpPT57THQoKTtocigpO3hfKCk7eWUoKTtmdCgpO2p0KCk7S3QoKTtVbigpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGxpLnByb3RvdHlwZSx7cHJvamVjdGlvbk1hdHJpeDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE9PKHRoaXMpLHRoaXMuX29ydGhvZ3JhcGhpY01hdHJpeH19fSk7TkY9bmV3IGEsSUY9bmV3IGEsdkY9bmV3IGEsUF89bmV3IGE7bGkucHJvdG90eXBlLmNvbXB1dGVDdWxsaW5nVm9sdW1lPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgRCgicG9zaXRpb24gaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEQoImRpcmVjdGlvbiBpcyByZXF1aXJlZC4iKTtpZighaChuKSl0aHJvdyBuZXcgRCgidXAgaXMgcmVxdWlyZWQuIik7bGV0IG89dGhpcy5fY3VsbGluZ1ZvbHVtZS5wbGFuZXMscj10aGlzLnRvcCxpPXRoaXMuYm90dG9tLHM9dGhpcy5yaWdodCxmPXRoaXMubGVmdCx1PXRoaXMubmVhcixjPXRoaXMuZmFyLGw9YS5jcm9zcyhlLG4sTkYpO2Eubm9ybWFsaXplKGwsbCk7bGV0IHA9SUY7YS5tdWx0aXBseUJ5U2NhbGFyKGUsdSxwKSxhLmFkZCh0LHAscCk7bGV0IGQ9dkY7YS5tdWx0aXBseUJ5U2NhbGFyKGwsZixkKSxhLmFkZChwLGQsZCk7bGV0IG09b1swXTtyZXR1cm4gaChtKXx8KG09b1swXT1uZXcgbWUpLG0ueD1sLngsbS55PWwueSxtLno9bC56LG0udz0tYS5kb3QobCxkKSxhLm11bHRpcGx5QnlTY2FsYXIobCxzLGQpLGEuYWRkKHAsZCxkKSxtPW9bMV0saChtKXx8KG09b1sxXT1uZXcgbWUpLG0ueD0tbC54LG0ueT0tbC55LG0uej0tbC56LG0udz0tYS5kb3QoYS5uZWdhdGUobCxQXyksZCksYS5tdWx0aXBseUJ5U2NhbGFyKG4saSxkKSxhLmFkZChwLGQsZCksbT1vWzJdLGgobSl8fChtPW9bMl09bmV3IG1lKSxtLng9bi54LG0ueT1uLnksbS56PW4ueixtLnc9LWEuZG90KG4sZCksYS5tdWx0aXBseUJ5U2NhbGFyKG4scixkKSxhLmFkZChwLGQsZCksbT1vWzNdLGgobSl8fChtPW9bM109bmV3IG1lKSxtLng9LW4ueCxtLnk9LW4ueSxtLno9LW4ueixtLnc9LWEuZG90KGEubmVnYXRlKG4sUF8pLGQpLG09b1s0XSxoKG0pfHwobT1vWzRdPW5ldyBtZSksbS54PWUueCxtLnk9ZS55LG0uej1lLnosbS53PS1hLmRvdChlLHApLGEubXVsdGlwbHlCeVNjYWxhcihlLGMsZCksYS5hZGQodCxkLGQpLG09b1s1XSxoKG0pfHwobT1vWzVdPW5ldyBtZSksbS54PS1lLngsbS55PS1lLnksbS56PS1lLnosbS53PS1hLmRvdChhLm5lZ2F0ZShlLFBfKSxkKSx0aGlzLl9jdWxsaW5nVm9sdW1lfTtsaS5wcm90b3R5cGUuZ2V0UGl4ZWxEaW1lbnNpb25zPWZ1bmN0aW9uKHQsZSxuLG8scil7aWYoT08odGhpcyksIWgodCl8fCFoKGUpKXRocm93IG5ldyBEKCJCb3RoIGRyYXdpbmdCdWZmZXJXaWR0aCBhbmQgZHJhd2luZ0J1ZmZlckhlaWdodCBhcmUgcmVxdWlyZWQuIik7aWYodDw9MCl0aHJvdyBuZXcgRCgiZHJhd2luZ0J1ZmZlcldpZHRoIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uIik7aWYoZTw9MCl0aHJvdyBuZXcgRCgiZHJhd2luZ0J1ZmZlckhlaWdodCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLiIpO2lmKCFoKG4pKXRocm93IG5ldyBEKCJkaXN0YW5jZSBpcyByZXF1aXJlZC4iKTtpZighaChvKSl0aHJvdyBuZXcgRCgicGl4ZWxSYXRpbyBpcyByZXF1aXJlZC4iKTtpZihvPD0wKXRocm93IG5ldyBEKCJwaXhlbFJhdGlvIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uIik7aWYoIWgocikpdGhyb3cgbmV3IEQoIkEgcmVzdWx0IG9iamVjdCBpcyByZXF1aXJlZC4iKTtsZXQgaT10aGlzLnJpZ2h0LXRoaXMubGVmdCxzPXRoaXMudG9wLXRoaXMuYm90dG9tLGY9byppL3QsdT1vKnMvZTtyZXR1cm4gci54PWYsci55PXUscn07bGkucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiBoKHQpfHwodD1uZXcgbGkpLHQubGVmdD10aGlzLmxlZnQsdC5yaWdodD10aGlzLnJpZ2h0LHQudG9wPXRoaXMudG9wLHQuYm90dG9tPXRoaXMuYm90dG9tLHQubmVhcj10aGlzLm5lYXIsdC5mYXI9dGhpcy5mYXIsdC5fbGVmdD12b2lkIDAsdC5fcmlnaHQ9dm9pZCAwLHQuX3RvcD12b2lkIDAsdC5fYm90dG9tPXZvaWQgMCx0Ll9uZWFyPXZvaWQgMCx0Ll9mYXI9dm9pZCAwLHR9O2xpLnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIGgodCkmJnQgaW5zdGFuY2VvZiBsaSYmdGhpcy5yaWdodD09PXQucmlnaHQmJnRoaXMubGVmdD09PXQubGVmdCYmdGhpcy50b3A9PT10LnRvcCYmdGhpcy5ib3R0b209PT10LmJvdHRvbSYmdGhpcy5uZWFyPT09dC5uZWFyJiZ0aGlzLmZhcj09PXQuZmFyfTtsaS5wcm90b3R5cGUuZXF1YWxzRXBzaWxvbj1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQ9PT10aGlzfHxoKHQpJiZ0IGluc3RhbmNlb2YgbGkmJlAuZXF1YWxzRXBzaWxvbih0aGlzLnJpZ2h0LHQucmlnaHQsZSxuKSYmUC5lcXVhbHNFcHNpbG9uKHRoaXMubGVmdCx0LmxlZnQsZSxuKSYmUC5lcXVhbHNFcHNpbG9uKHRoaXMudG9wLHQudG9wLGUsbikmJlAuZXF1YWxzRXBzaWxvbih0aGlzLmJvdHRvbSx0LmJvdHRvbSxlLG4pJiZQLmVxdWFsc0Vwc2lsb24odGhpcy5uZWFyLHQubmVhcixlLG4pJiZQLmVxdWFsc0Vwc2lsb24odGhpcy5mYXIsdC5mYXIsZSxuKX07RU89bGl9KTtmdW5jdGlvbiB0cih0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVCx0aGlzLl9vZmZDZW50ZXJGcnVzdHVtPW5ldyBFTyx0aGlzLndpZHRoPXQud2lkdGgsdGhpcy5fd2lkdGg9dm9pZCAwLHRoaXMuYXNwZWN0UmF0aW89dC5hc3BlY3RSYXRpbyx0aGlzLl9hc3BlY3RSYXRpbz12b2lkIDAsdGhpcy5uZWFyPXQubmVhcj8/MSx0aGlzLl9uZWFyPXRoaXMubmVhcix0aGlzLmZhcj10LmZhcj8/NWU4LHRoaXMuX2Zhcj10aGlzLmZhcn1mdW5jdGlvbiBicyh0KXtpZighaCh0LndpZHRoKXx8IWgodC5hc3BlY3RSYXRpbyl8fCFoKHQubmVhcil8fCFoKHQuZmFyKSl0aHJvdyBuZXcgRCgid2lkdGgsIGFzcGVjdFJhdGlvLCBuZWFyLCBvciBmYXIgcGFyYW1ldGVycyBhcmUgbm90IHNldC4iKTtsZXQgZT10Ll9vZmZDZW50ZXJGcnVzdHVtO2lmKHQud2lkdGghPT10Ll93aWR0aHx8dC5hc3BlY3RSYXRpbyE9PXQuX2FzcGVjdFJhdGlvfHx0Lm5lYXIhPT10Ll9uZWFyfHx0LmZhciE9PXQuX2Zhcil7aWYodC5hc3BlY3RSYXRpbzwwKXRocm93IG5ldyBEKCJhc3BlY3RSYXRpbyBtdXN0IGJlIHBvc2l0aXZlLiIpO2lmKHQubmVhcjwwfHx0Lm5lYXI+dC5mYXIpdGhyb3cgbmV3IEQoIm5lYXIgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyBhbmQgbGVzcyB0aGFuIGZhci4iKTt0Ll9hc3BlY3RSYXRpbz10LmFzcGVjdFJhdGlvLHQuX3dpZHRoPXQud2lkdGgsdC5fbmVhcj10Lm5lYXIsdC5fZmFyPXQuZmFyO2xldCBuPTEvdC5hc3BlY3RSYXRpbztlLnJpZ2h0PXQud2lkdGgqLjUsZS5sZWZ0PS1lLnJpZ2h0LGUudG9wPW4qZS5yaWdodCxlLmJvdHRvbT0tZS50b3AsZS5uZWFyPXQubmVhcixlLmZhcj10LmZhcn19dmFyIHhvLE1fPSQoKCk9PntXdCgpO3llKCk7ZnQoKTtqdCgpO0t0KCk7Uk8oKTt0ci5wYWNrZWRMZW5ndGg9NDt0ci5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj1uPz8wLGVbbisrXT10LndpZHRoLGVbbisrXT10LmFzcGVjdFJhdGlvLGVbbisrXT10Lm5lYXIsZVtuXT10LmZhcixlfTt0ci51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LmRlZmluZWQoImFycmF5Iix0KSxlPWU/PzAsaChuKXx8KG49bmV3IHRyKSxuLndpZHRoPXRbZSsrXSxuLmFzcGVjdFJhdGlvPXRbZSsrXSxuLm5lYXI9dFtlKytdLG4uZmFyPXRbZV0sbn07T2JqZWN0LmRlZmluZVByb3BlcnRpZXModHIucHJvdG90eXBlLHtwcm9qZWN0aW9uTWF0cml4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gYnModGhpcyksdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bS5wcm9qZWN0aW9uTWF0cml4fX0sb2ZmQ2VudGVyRnJ1c3R1bTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGJzKHRoaXMpLHRoaXMuX29mZkNlbnRlckZydXN0dW19fX0pO3RyLnByb3RvdHlwZS5jb21wdXRlQ3VsbGluZ1ZvbHVtZT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIGJzKHRoaXMpLHRoaXMuX29mZkNlbnRlckZydXN0dW0uY29tcHV0ZUN1bGxpbmdWb2x1bWUodCxlLG4pfTt0ci5wcm90b3R5cGUuZ2V0UGl4ZWxEaW1lbnNpb25zPWZ1bmN0aW9uKHQsZSxuLG8scil7cmV0dXJuIGJzKHRoaXMpLHRoaXMuX29mZkNlbnRlckZydXN0dW0uZ2V0UGl4ZWxEaW1lbnNpb25zKHQsZSxuLG8scil9O3RyLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gaCh0KXx8KHQ9bmV3IHRyKSx0LmFzcGVjdFJhdGlvPXRoaXMuYXNwZWN0UmF0aW8sdC53aWR0aD10aGlzLndpZHRoLHQubmVhcj10aGlzLm5lYXIsdC5mYXI9dGhpcy5mYXIsdC5fYXNwZWN0UmF0aW89dm9pZCAwLHQuX3dpZHRoPXZvaWQgMCx0Ll9uZWFyPXZvaWQgMCx0Ll9mYXI9dm9pZCAwLHRoaXMuX29mZkNlbnRlckZydXN0dW0uY2xvbmUodC5fb2ZmQ2VudGVyRnJ1c3R1bSksdH07dHIucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0KXtyZXR1cm4haCh0KXx8ISh0IGluc3RhbmNlb2YgdHIpPyExOihicyh0aGlzKSxicyh0KSx0aGlzLndpZHRoPT09dC53aWR0aCYmdGhpcy5hc3BlY3RSYXRpbz09PXQuYXNwZWN0UmF0aW8mJnRoaXMuX29mZkNlbnRlckZydXN0dW0uZXF1YWxzKHQuX29mZkNlbnRlckZydXN0dW0pKX07dHIucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlLG4pe3JldHVybiFoKHQpfHwhKHQgaW5zdGFuY2VvZiB0cik/ITE6KGJzKHRoaXMpLGJzKHQpLFAuZXF1YWxzRXBzaWxvbih0aGlzLndpZHRoLHQud2lkdGgsZSxuKSYmUC5lcXVhbHNFcHNpbG9uKHRoaXMuYXNwZWN0UmF0aW8sdC5hc3BlY3RSYXRpbyxlLG4pJiZ0aGlzLl9vZmZDZW50ZXJGcnVzdHVtLmVxdWFsc0Vwc2lsb24odC5fb2ZmQ2VudGVyRnJ1c3R1bSxlLG4pKX07eG89dHJ9KTtmdW5jdGlvbiBwaSh0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVCx0aGlzLmxlZnQ9dC5sZWZ0LHRoaXMuX2xlZnQ9dm9pZCAwLHRoaXMucmlnaHQ9dC5yaWdodCx0aGlzLl9yaWdodD12b2lkIDAsdGhpcy50b3A9dC50b3AsdGhpcy5fdG9wPXZvaWQgMCx0aGlzLmJvdHRvbT10LmJvdHRvbSx0aGlzLl9ib3R0b209dm9pZCAwLHRoaXMubmVhcj10Lm5lYXI/PzEsdGhpcy5fbmVhcj10aGlzLm5lYXIsdGhpcy5mYXI9dC5mYXI/PzVlOCx0aGlzLl9mYXI9dGhpcy5mYXIsdGhpcy5fY3VsbGluZ1ZvbHVtZT1uZXcgd2QsdGhpcy5fcGVyc3BlY3RpdmVNYXRyaXg9bmV3IHN0LHRoaXMuX2luZmluaXRlUGVyc3BlY3RpdmU9bmV3IHN0fWZ1bmN0aW9uIE5fKHQpe2lmKCFoKHQucmlnaHQpfHwhaCh0LmxlZnQpfHwhaCh0LnRvcCl8fCFoKHQuYm90dG9tKXx8IWgodC5uZWFyKXx8IWgodC5mYXIpKXRocm93IG5ldyBEKCJyaWdodCwgbGVmdCwgdG9wLCBib3R0b20sIG5lYXIsIG9yIGZhciBwYXJhbWV0ZXJzIGFyZSBub3Qgc2V0LiIpO2xldHt0b3A6ZSxib3R0b206bixyaWdodDpvLGxlZnQ6cixuZWFyOmksZmFyOnN9PXQ7aWYoZSE9PXQuX3RvcHx8biE9PXQuX2JvdHRvbXx8ciE9PXQuX2xlZnR8fG8hPT10Ll9yaWdodHx8aSE9PXQuX25lYXJ8fHMhPT10Ll9mYXIpe2lmKHQubmVhcjw9MHx8dC5uZWFyPnQuZmFyKXRocm93IG5ldyBEKCJuZWFyIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8gYW5kIGxlc3MgdGhhbiBmYXIuIik7dC5fbGVmdD1yLHQuX3JpZ2h0PW8sdC5fdG9wPWUsdC5fYm90dG9tPW4sdC5fbmVhcj1pLHQuX2Zhcj1zLHQuX3BlcnNwZWN0aXZlTWF0cml4PXN0LmNvbXB1dGVQZXJzcGVjdGl2ZU9mZkNlbnRlcihyLG8sbixlLGkscyx0Ll9wZXJzcGVjdGl2ZU1hdHJpeCksdC5faW5maW5pdGVQZXJzcGVjdGl2ZT1zdC5jb21wdXRlSW5maW5pdGVQZXJzcGVjdGl2ZU9mZkNlbnRlcihyLG8sbixlLGksdC5faW5maW5pdGVQZXJzcGVjdGl2ZSl9fXZhciBGRixMRixERixCRixTTyxDTz0kKCgpPT57THQoKTtocigpO3hfKCk7eWUoKTtmdCgpO2p0KCk7S3QoKTtVbigpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHBpLnByb3RvdHlwZSx7cHJvamVjdGlvbk1hdHJpeDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIE5fKHRoaXMpLHRoaXMuX3BlcnNwZWN0aXZlTWF0cml4fX0saW5maW5pdGVQcm9qZWN0aW9uTWF0cml4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTl8odGhpcyksdGhpcy5faW5maW5pdGVQZXJzcGVjdGl2ZX19fSk7RkY9bmV3IGEsTEY9bmV3IGEsREY9bmV3IGEsQkY9bmV3IGE7cGkucHJvdG90eXBlLmNvbXB1dGVDdWxsaW5nVm9sdW1lPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgRCgicG9zaXRpb24gaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEQoImRpcmVjdGlvbiBpcyByZXF1aXJlZC4iKTtpZighaChuKSl0aHJvdyBuZXcgRCgidXAgaXMgcmVxdWlyZWQuIik7bGV0IG89dGhpcy5fY3VsbGluZ1ZvbHVtZS5wbGFuZXMscj10aGlzLnRvcCxpPXRoaXMuYm90dG9tLHM9dGhpcy5yaWdodCxmPXRoaXMubGVmdCx1PXRoaXMubmVhcixjPXRoaXMuZmFyLGw9YS5jcm9zcyhlLG4sRkYpLHA9TEY7YS5tdWx0aXBseUJ5U2NhbGFyKGUsdSxwKSxhLmFkZCh0LHAscCk7bGV0IGQ9REY7YS5tdWx0aXBseUJ5U2NhbGFyKGUsYyxkKSxhLmFkZCh0LGQsZCk7bGV0IG09QkY7YS5tdWx0aXBseUJ5U2NhbGFyKGwsZixtKSxhLmFkZChwLG0sbSksYS5zdWJ0cmFjdChtLHQsbSksYS5ub3JtYWxpemUobSxtKSxhLmNyb3NzKG0sbixtKSxhLm5vcm1hbGl6ZShtLG0pO2xldCBfPW9bMF07cmV0dXJuIGgoXyl8fChfPW9bMF09bmV3IG1lKSxfLng9bS54LF8ueT1tLnksXy56PW0ueixfLnc9LWEuZG90KG0sdCksYS5tdWx0aXBseUJ5U2NhbGFyKGwscyxtKSxhLmFkZChwLG0sbSksYS5zdWJ0cmFjdChtLHQsbSksYS5jcm9zcyhuLG0sbSksYS5ub3JtYWxpemUobSxtKSxfPW9bMV0saChfKXx8KF89b1sxXT1uZXcgbWUpLF8ueD1tLngsXy55PW0ueSxfLno9bS56LF8udz0tYS5kb3QobSx0KSxhLm11bHRpcGx5QnlTY2FsYXIobixpLG0pLGEuYWRkKHAsbSxtKSxhLnN1YnRyYWN0KG0sdCxtKSxhLmNyb3NzKGwsbSxtKSxhLm5vcm1hbGl6ZShtLG0pLF89b1syXSxoKF8pfHwoXz1vWzJdPW5ldyBtZSksXy54PW0ueCxfLnk9bS55LF8uej1tLnosXy53PS1hLmRvdChtLHQpLGEubXVsdGlwbHlCeVNjYWxhcihuLHIsbSksYS5hZGQocCxtLG0pLGEuc3VidHJhY3QobSx0LG0pLGEuY3Jvc3MobSxsLG0pLGEubm9ybWFsaXplKG0sbSksXz1vWzNdLGgoXyl8fChfPW9bM109bmV3IG1lKSxfLng9bS54LF8ueT1tLnksXy56PW0ueixfLnc9LWEuZG90KG0sdCksXz1vWzRdLGgoXyl8fChfPW9bNF09bmV3IG1lKSxfLng9ZS54LF8ueT1lLnksXy56PWUueixfLnc9LWEuZG90KGUscCksYS5uZWdhdGUoZSxtKSxfPW9bNV0saChfKXx8KF89b1s1XT1uZXcgbWUpLF8ueD1tLngsXy55PW0ueSxfLno9bS56LF8udz0tYS5kb3QobSxkKSx0aGlzLl9jdWxsaW5nVm9sdW1lfTtwaS5wcm90b3R5cGUuZ2V0UGl4ZWxEaW1lbnNpb25zPWZ1bmN0aW9uKHQsZSxuLG8scil7aWYoTl8odGhpcyksIWgodCl8fCFoKGUpKXRocm93IG5ldyBEKCJCb3RoIGRyYXdpbmdCdWZmZXJXaWR0aCBhbmQgZHJhd2luZ0J1ZmZlckhlaWdodCBhcmUgcmVxdWlyZWQuIik7aWYodDw9MCl0aHJvdyBuZXcgRCgiZHJhd2luZ0J1ZmZlcldpZHRoIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uIik7aWYoZTw9MCl0aHJvdyBuZXcgRCgiZHJhd2luZ0J1ZmZlckhlaWdodCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLiIpO2lmKCFoKG4pKXRocm93IG5ldyBEKCJkaXN0YW5jZSBpcyByZXF1aXJlZC4iKTtpZighaChvKSl0aHJvdyBuZXcgRCgicGl4ZWxSYXRpbyBpcyByZXF1aXJlZCIpO2lmKG88PTApdGhyb3cgbmV3IEQoInBpeGVsUmF0aW8gbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4iKTtpZighaChyKSl0aHJvdyBuZXcgRCgiQSByZXN1bHQgb2JqZWN0IGlzIHJlcXVpcmVkLiIpO2xldCBpPTEvdGhpcy5uZWFyLHM9dGhpcy50b3AqaSxmPTIqbypuKnMvZTtzPXRoaXMucmlnaHQqaTtsZXQgdT0yKm8qbipzL3Q7cmV0dXJuIHIueD11LHIueT1mLHJ9O3BpLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gaCh0KXx8KHQ9bmV3IHBpKSx0LnJpZ2h0PXRoaXMucmlnaHQsdC5sZWZ0PXRoaXMubGVmdCx0LnRvcD10aGlzLnRvcCx0LmJvdHRvbT10aGlzLmJvdHRvbSx0Lm5lYXI9dGhpcy5uZWFyLHQuZmFyPXRoaXMuZmFyLHQuX2xlZnQ9dm9pZCAwLHQuX3JpZ2h0PXZvaWQgMCx0Ll90b3A9dm9pZCAwLHQuX2JvdHRvbT12b2lkIDAsdC5fbmVhcj12b2lkIDAsdC5fZmFyPXZvaWQgMCx0fTtwaS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiBoKHQpJiZ0IGluc3RhbmNlb2YgcGkmJnRoaXMucmlnaHQ9PT10LnJpZ2h0JiZ0aGlzLmxlZnQ9PT10LmxlZnQmJnRoaXMudG9wPT09dC50b3AmJnRoaXMuYm90dG9tPT09dC5ib3R0b20mJnRoaXMubmVhcj09PXQubmVhciYmdGhpcy5mYXI9PT10LmZhcn07cGkucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0PT09dGhpc3x8aCh0KSYmdCBpbnN0YW5jZW9mIHBpJiZQLmVxdWFsc0Vwc2lsb24odGhpcy5yaWdodCx0LnJpZ2h0LGUsbikmJlAuZXF1YWxzRXBzaWxvbih0aGlzLmxlZnQsdC5sZWZ0LGUsbikmJlAuZXF1YWxzRXBzaWxvbih0aGlzLnRvcCx0LnRvcCxlLG4pJiZQLmVxdWFsc0Vwc2lsb24odGhpcy5ib3R0b20sdC5ib3R0b20sZSxuKSYmUC5lcXVhbHNFcHNpbG9uKHRoaXMubmVhcix0Lm5lYXIsZSxuKSYmUC5lcXVhbHNFcHNpbG9uKHRoaXMuZmFyLHQuZmFyLGUsbil9O1NPPXBpfSk7ZnVuY3Rpb24gZXIodCl7dD10Pz9JdC5FTVBUWV9PQkpFQ1QsdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bT1uZXcgU08sdGhpcy5mb3Y9dC5mb3YsdGhpcy5fZm92PXZvaWQgMCx0aGlzLl9mb3Z5PXZvaWQgMCx0aGlzLl9zc2VEZW5vbWluYXRvcj12b2lkIDAsdGhpcy5hc3BlY3RSYXRpbz10LmFzcGVjdFJhdGlvLHRoaXMuX2FzcGVjdFJhdGlvPXZvaWQgMCx0aGlzLm5lYXI9dC5uZWFyPz8xLHRoaXMuX25lYXI9dGhpcy5uZWFyLHRoaXMuZmFyPXQuZmFyPz81ZTgsdGhpcy5fZmFyPXRoaXMuZmFyLHRoaXMueE9mZnNldD10LnhPZmZzZXQ/PzAsdGhpcy5feE9mZnNldD10aGlzLnhPZmZzZXQsdGhpcy55T2Zmc2V0PXQueU9mZnNldD8/MCx0aGlzLl95T2Zmc2V0PXRoaXMueU9mZnNldH1mdW5jdGlvbiBYcih0KXtpZighaCh0LmZvdil8fCFoKHQuYXNwZWN0UmF0aW8pfHwhaCh0Lm5lYXIpfHwhaCh0LmZhcikpdGhyb3cgbmV3IEQoImZvdiwgYXNwZWN0UmF0aW8sIG5lYXIsIG9yIGZhciBwYXJhbWV0ZXJzIGFyZSBub3Qgc2V0LiIpO2lmKCEodC5mb3YhPT10Ll9mb3Z8fHQuYXNwZWN0UmF0aW8hPT10Ll9hc3BlY3RSYXRpb3x8dC5uZWFyIT09dC5fbmVhcnx8dC5mYXIhPT10Ll9mYXJ8fHQueE9mZnNldCE9PXQuX3hPZmZzZXR8fHQueU9mZnNldCE9PXQuX3lPZmZzZXQpKXJldHVybjtpZih5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygiZm92Iix0LmZvdiwwKSx5LnR5cGVPZi5udW1iZXIubGVzc1RoYW4oImZvdiIsdC5mb3YsTWF0aC5QSSkseS50eXBlT2YubnVtYmVyLmdyZWF0ZXJUaGFuT3JFcXVhbHMoImFzcGVjdFJhdGlvIix0LmFzcGVjdFJhdGlvLDApLHkudHlwZU9mLm51bWJlci5ncmVhdGVyVGhhbk9yRXF1YWxzKCJuZWFyIix0Lm5lYXIsMCksdC5uZWFyPnQuZmFyKXRocm93IG5ldyBEKCJuZWFyIG11c3QgYmUgbGVzcyB0aGFuIGZhci4iKTt0Ll9hc3BlY3RSYXRpbz10LmFzcGVjdFJhdGlvLHQuX2Zvdj10LmZvdix0Ll9mb3Z5PXQuYXNwZWN0UmF0aW88PTE/dC5mb3Y6TWF0aC5hdGFuKE1hdGgudGFuKHQuZm92Ki41KS90LmFzcGVjdFJhdGlvKSoyLHQuX25lYXI9dC5uZWFyLHQuX2Zhcj10LmZhcix0Ll9zc2VEZW5vbWluYXRvcj0yKk1hdGgudGFuKC41KnQuX2ZvdnkpLHQuX3hPZmZzZXQ9dC54T2Zmc2V0LHQuX3lPZmZzZXQ9dC55T2Zmc2V0O2xldCBuPXQuX29mZkNlbnRlckZydXN0dW07bi50b3A9dC5uZWFyKk1hdGgudGFuKC41KnQuX2ZvdnkpLG4uYm90dG9tPS1uLnRvcCxuLnJpZ2h0PXQuYXNwZWN0UmF0aW8qbi50b3Asbi5sZWZ0PS1uLnJpZ2h0LG4ubmVhcj10Lm5lYXIsbi5mYXI9dC5mYXIsbi5yaWdodCs9dC54T2Zmc2V0LG4ubGVmdCs9dC54T2Zmc2V0LG4udG9wKz10LnlPZmZzZXQsbi5ib3R0b20rPXQueU9mZnNldH12YXIgUG8sSV89JCgoKT0+e1d0KCk7eWUoKTtmdCgpO2p0KCk7S3QoKTtDTygpO2VyLnBhY2tlZExlbmd0aD02O2VyLnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPW4/PzAsZVtuKytdPXQuZm92LGVbbisrXT10LmFzcGVjdFJhdGlvLGVbbisrXT10Lm5lYXIsZVtuKytdPXQuZmFyLGVbbisrXT10LnhPZmZzZXQsZVtuXT10LnlPZmZzZXQsZX07ZXIudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS5kZWZpbmVkKCJhcnJheSIsdCksZT1lPz8wLGgobil8fChuPW5ldyBlciksbi5mb3Y9dFtlKytdLG4uYXNwZWN0UmF0aW89dFtlKytdLG4ubmVhcj10W2UrK10sbi5mYXI9dFtlKytdLG4ueE9mZnNldD10W2UrK10sbi55T2Zmc2V0PXRbZV0sbn07T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZXIucHJvdG90eXBlLHtwcm9qZWN0aW9uTWF0cml4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWHIodGhpcyksdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bS5wcm9qZWN0aW9uTWF0cml4fX0saW5maW5pdGVQcm9qZWN0aW9uTWF0cml4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWHIodGhpcyksdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bS5pbmZpbml0ZVByb2plY3Rpb25NYXRyaXh9fSxmb3Z5OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWHIodGhpcyksdGhpcy5fZm92eX19LHNzZURlbm9taW5hdG9yOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWHIodGhpcyksdGhpcy5fc3NlRGVub21pbmF0b3J9fSxvZmZDZW50ZXJGcnVzdHVtOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gWHIodGhpcyksdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bX19fSk7ZXIucHJvdG90eXBlLmNvbXB1dGVDdWxsaW5nVm9sdW1lPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gWHIodGhpcyksdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bS5jb21wdXRlQ3VsbGluZ1ZvbHVtZSh0LGUsbil9O2VyLnByb3RvdHlwZS5nZXRQaXhlbERpbWVuc2lvbnM9ZnVuY3Rpb24odCxlLG4sbyxyKXtyZXR1cm4gWHIodGhpcyksdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bS5nZXRQaXhlbERpbWVuc2lvbnModCxlLG4sbyxyKX07ZXIucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKHQpe3JldHVybiBoKHQpfHwodD1uZXcgZXIpLHQuYXNwZWN0UmF0aW89dGhpcy5hc3BlY3RSYXRpbyx0LmZvdj10aGlzLmZvdix0Lm5lYXI9dGhpcy5uZWFyLHQuZmFyPXRoaXMuZmFyLHQuX2FzcGVjdFJhdGlvPXZvaWQgMCx0Ll9mb3Y9dm9pZCAwLHQuX25lYXI9dm9pZCAwLHQuX2Zhcj12b2lkIDAsdGhpcy5fb2ZmQ2VudGVyRnJ1c3R1bS5jbG9uZSh0Ll9vZmZDZW50ZXJGcnVzdHVtKSx0fTtlci5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKHQpe3JldHVybiFoKHQpfHwhKHQgaW5zdGFuY2VvZiBlcik/ITE6KFhyKHRoaXMpLFhyKHQpLHRoaXMuZm92PT09dC5mb3YmJnRoaXMuYXNwZWN0UmF0aW89PT10LmFzcGVjdFJhdGlvJiZ0aGlzLl9vZmZDZW50ZXJGcnVzdHVtLmVxdWFscyh0Ll9vZmZDZW50ZXJGcnVzdHVtKSl9O2VyLnByb3RvdHlwZS5lcXVhbHNFcHNpbG9uPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4haCh0KXx8ISh0IGluc3RhbmNlb2YgZXIpPyExOihYcih0aGlzKSxYcih0KSxQLmVxdWFsc0Vwc2lsb24odGhpcy5mb3YsdC5mb3YsZSxuKSYmUC5lcXVhbHNFcHNpbG9uKHRoaXMuYXNwZWN0UmF0aW8sdC5hc3BlY3RSYXRpbyxlLG4pJiZ0aGlzLl9vZmZDZW50ZXJGcnVzdHVtLmVxdWFsc0Vwc2lsb24odC5fb2ZmQ2VudGVyRnJ1c3R1bSxlLG4pKX07UG89ZXJ9KTtmdW5jdGlvbiBnYyh0KXt5LnR5cGVPZi5vYmplY3QoIm9wdGlvbnMiLHQpLHkudHlwZU9mLm9iamVjdCgib3B0aW9ucy5mcnVzdHVtIix0LmZydXN0dW0pLHkudHlwZU9mLm9iamVjdCgib3B0aW9ucy5vcmlnaW4iLHQub3JpZ2luKSx5LnR5cGVPZi5vYmplY3QoIm9wdGlvbnMub3JpZW50YXRpb24iLHQub3JpZW50YXRpb24pO2xldCBlPXQuZnJ1c3R1bSxuPXQub3JpZW50YXRpb24sbz10Lm9yaWdpbixyPXQudmVydGV4Rm9ybWF0Pz9wdC5ERUZBVUxULGk9dC5fZHJhd05lYXJQbGFuZT8/ITAscyxmO2UgaW5zdGFuY2VvZiBQbz8ocz1PZCxmPVBvLnBhY2tlZExlbmd0aCk6ZSBpbnN0YW5jZW9mIHhvJiYocz1VRixmPXhvLnBhY2tlZExlbmd0aCksdGhpcy5fZnJ1c3R1bVR5cGU9cyx0aGlzLl9mcnVzdHVtPWUuY2xvbmUoKSx0aGlzLl9vcmlnaW49YS5jbG9uZShvKSx0aGlzLl9vcmllbnRhdGlvbj10ZS5jbG9uZShuKSx0aGlzLl9kcmF3TmVhclBsYW5lPWksdGhpcy5fdmVydGV4Rm9ybWF0PXIsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlRnJ1c3R1bUdlb21ldHJ5Iix0aGlzLnBhY2tlZExlbmd0aD0yK2YrYS5wYWNrZWRMZW5ndGgrdGUucGFja2VkTGVuZ3RoK3B0LnBhY2tlZExlbmd0aH1mdW5jdGlvbiBFYSh0LGUsbixvLHIsaSxzLGYpe2xldCB1PXQvMyoyO2ZvcihsZXQgYz0wO2M8NDsrK2MpaChlKSYmKGVbdF09aS54LGVbdCsxXT1pLnksZVt0KzJdPWkueiksaChuKSYmKG5bdF09cy54LG5bdCsxXT1zLnksblt0KzJdPXMueiksaChvKSYmKG9bdF09Zi54LG9bdCsxXT1mLnksb1t0KzJdPWYueiksdCs9MztyW3VdPTAsclt1KzFdPTAsclt1KzJdPTEsclt1KzNdPTAsclt1KzRdPTEsclt1KzVdPTEsclt1KzZdPTAsclt1KzddPTF9dmFyIE9kLFVGLGtGLEdGLFZGLHpGLGpGLEhGLHFGLHZfLHhPLFBPLE1PLEtGLFdGLFhGLFRzLEtmLE5PLFdmLEZfPSQoKCk9Pnt2ZSgpO0x0KCk7aHIoKTtXdCgpO0RlKCk7ZnQoKTtYZSgpO1llKCk7YW4oKTtCbigpO1VuKCk7TV8oKTtJXygpO3RuKCk7S28oKTtSbygpO09kPTAsVUY9MTtnYy5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSx5LmRlZmluZWQoImFycmF5IixlKSxuPW4/PzA7bGV0IG89dC5fZnJ1c3R1bVR5cGUscj10Ll9mcnVzdHVtO3JldHVybiBlW24rK109byxvPT09T2Q/KFBvLnBhY2socixlLG4pLG4rPVBvLnBhY2tlZExlbmd0aCk6KHhvLnBhY2socixlLG4pLG4rPXhvLnBhY2tlZExlbmd0aCksYS5wYWNrKHQuX29yaWdpbixlLG4pLG4rPWEucGFja2VkTGVuZ3RoLHRlLnBhY2sodC5fb3JpZW50YXRpb24sZSxuKSxuKz10ZS5wYWNrZWRMZW5ndGgscHQucGFjayh0Ll92ZXJ0ZXhGb3JtYXQsZSxuKSxuKz1wdC5wYWNrZWRMZW5ndGgsZVtuXT10Ll9kcmF3TmVhclBsYW5lPzE6MCxlfTtrRj1uZXcgUG8sR0Y9bmV3IHhvLFZGPW5ldyB0ZSx6Rj1uZXcgYSxqRj1uZXcgcHQ7Z2MudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LmRlZmluZWQoImFycmF5Iix0KSxlPWU/PzA7bGV0IG89dFtlKytdLHI7bz09PU9kPyhyPVBvLnVucGFjayh0LGUsa0YpLGUrPVBvLnBhY2tlZExlbmd0aCk6KHI9eG8udW5wYWNrKHQsZSxHRiksZSs9eG8ucGFja2VkTGVuZ3RoKTtsZXQgaT1hLnVucGFjayh0LGUsekYpO2UrPWEucGFja2VkTGVuZ3RoO2xldCBzPXRlLnVucGFjayh0LGUsVkYpO2UrPXRlLnBhY2tlZExlbmd0aDtsZXQgZj1wdC51bnBhY2sodCxlLGpGKTtlKz1wdC5wYWNrZWRMZW5ndGg7bGV0IHU9dFtlXT09PTE7aWYoIWgobikpcmV0dXJuIG5ldyBnYyh7ZnJ1c3R1bTpyLG9yaWdpbjppLG9yaWVudGF0aW9uOnMsdmVydGV4Rm9ybWF0OmYsX2RyYXdOZWFyUGxhbmU6dX0pO2xldCBjPW89PT1uLl9mcnVzdHVtVHlwZT9uLl9mcnVzdHVtOnZvaWQgMDtyZXR1cm4gbi5fZnJ1c3R1bT1yLmNsb25lKGMpLG4uX2ZydXN0dW1UeXBlPW8sbi5fb3JpZ2luPWEuY2xvbmUoaSxuLl9vcmlnaW4pLG4uX29yaWVudGF0aW9uPXRlLmNsb25lKHMsbi5fb3JpZW50YXRpb24pLG4uX3ZlcnRleEZvcm1hdD1wdC5jbG9uZShmLG4uX3ZlcnRleEZvcm1hdCksbi5fZHJhd05lYXJQbGFuZT11LG59O0hGPW5ldyBaLHFGPW5ldyBzdCx2Xz1uZXcgc3QseE89bmV3IGEsUE89bmV3IGEsTU89bmV3IGEsS0Y9bmV3IGEsV0Y9bmV3IGEsWEY9bmV3IGEsVHM9bmV3IEFycmF5KDMpLEtmPW5ldyBBcnJheSg0KTtLZlswXT1uZXcgbWUoLTEsLTEsMSwxKTtLZlsxXT1uZXcgbWUoMSwtMSwxLDEpO0tmWzJdPW5ldyBtZSgxLDEsMSwxKTtLZlszXT1uZXcgbWUoLTEsMSwxLDEpO05PPW5ldyBBcnJheSg0KTtmb3IobGV0IHQ9MDt0PDQ7Kyt0KU5PW3RdPW5ldyBtZTtnYy5fY29tcHV0ZU5lYXJGYXJQbGFuZXM9ZnVuY3Rpb24odCxlLG4sbyxyLGkscyxmKXtsZXQgdT1aLmZyb21RdWF0ZXJuaW9uKGUsSEYpLGM9aT8/eE8sbD1zPz9QTyxwPWY/P01PO2M9Wi5nZXRDb2x1bW4odSwwLGMpLGw9Wi5nZXRDb2x1bW4odSwxLGwpLHA9Wi5nZXRDb2x1bW4odSwyLHApLGEubm9ybWFsaXplKGMsYyksYS5ub3JtYWxpemUobCxsKSxhLm5vcm1hbGl6ZShwLHApLGEubmVnYXRlKGMsYyk7bGV0IGQ9c3QuY29tcHV0ZVZpZXcodCxwLGwsYyxxRiksbSxfLGc9by5wcm9qZWN0aW9uTWF0cml4O2lmKG49PT1PZCl7bGV0IGI9c3QubXVsdGlwbHkoZyxkLHZfKTtfPXN0LmludmVyc2UoYix2Xyl9ZWxzZSBtPXN0LmludmVyc2VUcmFuc2Zvcm1hdGlvbihkLHZfKTtoKF8pPyhUc1swXT1vLm5lYXIsVHNbMV09by5mYXIpOihUc1swXT0wLFRzWzFdPW8ubmVhcixUc1syXT1vLmZhcik7Zm9yKGxldCBiPTA7YjwyOysrYilmb3IobGV0IFQ9MDtUPDQ7KytUKXtsZXQgTz1tZS5jbG9uZShLZltUXSxOT1tUXSk7aWYoaChfKSl7Tz1zdC5tdWx0aXBseUJ5VmVjdG9yKF8sTyxPKTtsZXQgRT0xL08udzthLm11bHRpcGx5QnlTY2FsYXIoTyxFLE8pLGEuc3VidHJhY3QoTyx0LE8pLGEubm9ybWFsaXplKE8sTyk7bGV0IHc9YS5kb3QocCxPKTthLm11bHRpcGx5QnlTY2FsYXIoTyxUc1tiXS93LE8pLGEuYWRkKE8sdCxPKX1lbHNle2xldCBFPW8ub2ZmQ2VudGVyRnJ1c3R1bTtoKEUpJiYobz1FKTtsZXQgdz1Uc1tiXSxDPVRzW2IrMV07Ty54PShPLngqKG8ucmlnaHQtby5sZWZ0KStvLmxlZnQrby5yaWdodCkqLjUsTy55PShPLnkqKG8udG9wLW8uYm90dG9tKStvLmJvdHRvbStvLnRvcCkqLjUsTy56PShPLnoqKHctQyktdy1DKSouNSxPLnc9MSxzdC5tdWx0aXBseUJ5VmVjdG9yKG0sTyxPKX1yWzEyKmIrVCozXT1PLngsclsxMipiK1QqMysxXT1PLnksclsxMipiK1QqMysyXT1PLnp9fTtnYy5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbih0KXtsZXQgZT10Ll9mcnVzdHVtVHlwZSxuPXQuX2ZydXN0dW0sbz10Ll9vcmlnaW4scj10Ll9vcmllbnRhdGlvbixpPXQuX2RyYXdOZWFyUGxhbmUscz10Ll92ZXJ0ZXhGb3JtYXQsZj1pPzY6NSx1PW5ldyBGbG9hdDY0QXJyYXkoMyo0KjYpO2djLl9jb21wdXRlTmVhckZhclBsYW5lcyhvLHIsZSxuLHUpO2xldCBjPTMqNCoyO3VbY109dVszKjRdLHVbYysxXT11WzMqNCsxXSx1W2MrMl09dVszKjQrMl0sdVtjKzNdPXVbMF0sdVtjKzRdPXVbMV0sdVtjKzVdPXVbMl0sdVtjKzZdPXVbMyozXSx1W2MrN109dVszKjMrMV0sdVtjKzhdPXVbMyozKzJdLHVbYys5XT11WzMqN10sdVtjKzEwXT11WzMqNysxXSx1W2MrMTFdPXVbMyo3KzJdLGMrPTMqNCx1W2NdPXVbMyo1XSx1W2MrMV09dVszKjUrMV0sdVtjKzJdPXVbMyo1KzJdLHVbYyszXT11WzNdLHVbYys0XT11WzRdLHVbYys1XT11WzVdLHVbYys2XT11WzBdLHVbYys3XT11WzFdLHVbYys4XT11WzJdLHVbYys5XT11WzMqNF0sdVtjKzEwXT11WzMqNCsxXSx1W2MrMTFdPXVbMyo0KzJdLGMrPTMqNCx1W2NdPXVbM10sdVtjKzFdPXVbNF0sdVtjKzJdPXVbNV0sdVtjKzNdPXVbMyo1XSx1W2MrNF09dVszKjUrMV0sdVtjKzVdPXVbMyo1KzJdLHVbYys2XT11WzMqNl0sdVtjKzddPXVbMyo2KzFdLHVbYys4XT11WzMqNisyXSx1W2MrOV09dVszKjJdLHVbYysxMF09dVszKjIrMV0sdVtjKzExXT11WzMqMisyXSxjKz0zKjQsdVtjXT11WzMqMl0sdVtjKzFdPXVbMyoyKzFdLHVbYysyXT11WzMqMisyXSx1W2MrM109dVszKjZdLHVbYys0XT11WzMqNisxXSx1W2MrNV09dVszKjYrMl0sdVtjKzZdPXVbMyo3XSx1W2MrN109dVszKjcrMV0sdVtjKzhdPXVbMyo3KzJdLHVbYys5XT11WzMqM10sdVtjKzEwXT11WzMqMysxXSx1W2MrMTFdPXVbMyozKzJdLGl8fCh1PXUuc3ViYXJyYXkoMyo0KSk7bGV0IGw9bmV3IGllKHtwb3NpdGlvbjpuZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnV9KX0pO2lmKGgocy5ub3JtYWwpfHxoKHMudGFuZ2VudCl8fGgocy5iaXRhbmdlbnQpfHxoKHMuc3QpKXtsZXQgZD1oKHMubm9ybWFsKT9uZXcgRmxvYXQzMkFycmF5KDEyKmYpOnZvaWQgMCxtPWgocy50YW5nZW50KT9uZXcgRmxvYXQzMkFycmF5KDMqNCpmKTp2b2lkIDAsXz1oKHMuYml0YW5nZW50KT9uZXcgRmxvYXQzMkFycmF5KDMqNCpmKTp2b2lkIDAsZz1oKHMuc3QpP25ldyBGbG9hdDMyQXJyYXkoMio0KmYpOnZvaWQgMCxiPXhPLFQ9UE8sTz1NTyxFPWEubmVnYXRlKGIsS0YpLHc9YS5uZWdhdGUoVCxXRiksQz1hLm5lZ2F0ZShPLFhGKTtjPTAsaSYmKEVhKGMsZCxtLF8sZyxDLGIsVCksYys9Myo0KSxFYShjLGQsbSxfLGcsTyxFLFQpLGMrPTMqNCxFYShjLGQsbSxfLGcsRSxDLFQpLGMrPTMqNCxFYShjLGQsbSxfLGcsdyxDLEUpLGMrPTMqNCxFYShjLGQsbSxfLGcsYixPLFQpLGMrPTMqNCxFYShjLGQsbSxfLGcsVCxPLEUpLGgoZCkmJihsLm5vcm1hbD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6ZH0pKSxoKG0pJiYobC50YW5nZW50PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczptfSkpLGgoXykmJihsLmJpdGFuZ2VudD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6X30pKSxoKGcpJiYobC5zdD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6Z30pKX1sZXQgcD1uZXcgVWludDE2QXJyYXkoNipmKTtmb3IobGV0IGQ9MDtkPGY7KytkKXtsZXQgbT1kKjYsXz1kKjQ7cFttXT1fLHBbbSsxXT1fKzEscFttKzJdPV8rMixwW20rM109XyxwW20rNF09XysyLHBbbSs1XT1fKzN9cmV0dXJuIG5ldyBCdCh7YXR0cmlidXRlczpsLGluZGljZXM6cCxwcmltaXRpdmVUeXBlOkR0LlRSSUFOR0xFUyxib3VuZGluZ1NwaGVyZTpndC5mcm9tVmVydGljZXModSl9KX07V2Y9Z2N9KTt2YXIgTF89e307ZGUoTF8se2RlZmF1bHQ6KCk9PiRGfSk7ZnVuY3Rpb24gWUYodCxlKXtyZXR1cm4gaChlKSYmKHQ9V2YudW5wYWNrKHQsZSkpLFdmLmNyZWF0ZUdlb21ldHJ5KHQpfXZhciAkRixEXz0kKCgpPT57ZnQoKTtGXygpOyRGPVlGfSk7ZnVuY3Rpb24gWGYodCl7eS50eXBlT2Yub2JqZWN0KCJvcHRpb25zIix0KSx5LnR5cGVPZi5vYmplY3QoIm9wdGlvbnMuZnJ1c3R1bSIsdC5mcnVzdHVtKSx5LnR5cGVPZi5vYmplY3QoIm9wdGlvbnMub3JpZ2luIix0Lm9yaWdpbikseS50eXBlT2Yub2JqZWN0KCJvcHRpb25zLm9yaWVudGF0aW9uIix0Lm9yaWVudGF0aW9uKTtsZXQgZT10LmZydXN0dW0sbj10Lm9yaWVudGF0aW9uLG89dC5vcmlnaW4scj10Ll9kcmF3TmVhclBsYW5lPz8hMCxpLHM7ZSBpbnN0YW5jZW9mIFBvPyhpPUJfLHM9UG8ucGFja2VkTGVuZ3RoKTplIGluc3RhbmNlb2YgeG8mJihpPVpGLHM9eG8ucGFja2VkTGVuZ3RoKSx0aGlzLl9mcnVzdHVtVHlwZT1pLHRoaXMuX2ZydXN0dW09ZS5jbG9uZSgpLHRoaXMuX29yaWdpbj1hLmNsb25lKG8pLHRoaXMuX29yaWVudGF0aW9uPXRlLmNsb25lKG4pLHRoaXMuX2RyYXdOZWFyUGxhbmU9cix0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVGcnVzdHVtT3V0bGluZUdlb21ldHJ5Iix0aGlzLnBhY2tlZExlbmd0aD0yK3MrYS5wYWNrZWRMZW5ndGgrdGUucGFja2VkTGVuZ3RofXZhciBCXyxaRixRRixKRix0TCxlTCxVXyxJTz0kKCgpPT57dmUoKTtMdCgpO1d0KCk7RGUoKTtmdCgpO0ZfKCk7WGUoKTtZZSgpO2FuKCk7TV8oKTtJXygpO3RuKCk7S28oKTtCXz0wLFpGPTE7WGYucGFjaz1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj1uPz8wO2xldCBvPXQuX2ZydXN0dW1UeXBlLHI9dC5fZnJ1c3R1bTtyZXR1cm4gZVtuKytdPW8sbz09PUJfPyhQby5wYWNrKHIsZSxuKSxuKz1Qby5wYWNrZWRMZW5ndGgpOih4by5wYWNrKHIsZSxuKSxuKz14by5wYWNrZWRMZW5ndGgpLGEucGFjayh0Ll9vcmlnaW4sZSxuKSxuKz1hLnBhY2tlZExlbmd0aCx0ZS5wYWNrKHQuX29yaWVudGF0aW9uLGUsbiksbis9dGUucGFja2VkTGVuZ3RoLGVbbl09dC5fZHJhd05lYXJQbGFuZT8xOjAsZX07UUY9bmV3IFBvLEpGPW5ldyB4byx0TD1uZXcgdGUsZUw9bmV3IGE7WGYudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LmRlZmluZWQoImFycmF5Iix0KSxlPWU/PzA7bGV0IG89dFtlKytdLHI7bz09PUJfPyhyPVBvLnVucGFjayh0LGUsUUYpLGUrPVBvLnBhY2tlZExlbmd0aCk6KHI9eG8udW5wYWNrKHQsZSxKRiksZSs9eG8ucGFja2VkTGVuZ3RoKTtsZXQgaT1hLnVucGFjayh0LGUsZUwpO2UrPWEucGFja2VkTGVuZ3RoO2xldCBzPXRlLnVucGFjayh0LGUsdEwpO2UrPXRlLnBhY2tlZExlbmd0aDtsZXQgZj10W2VdPT09MTtpZighaChuKSlyZXR1cm4gbmV3IFhmKHtmcnVzdHVtOnIsb3JpZ2luOmksb3JpZW50YXRpb246cyxfZHJhd05lYXJQbGFuZTpmfSk7bGV0IHU9bz09PW4uX2ZydXN0dW1UeXBlP24uX2ZydXN0dW06dm9pZCAwO3JldHVybiBuLl9mcnVzdHVtPXIuY2xvbmUodSksbi5fZnJ1c3R1bVR5cGU9byxuLl9vcmlnaW49YS5jbG9uZShpLG4uX29yaWdpbiksbi5fb3JpZW50YXRpb249dGUuY2xvbmUocyxuLl9vcmllbnRhdGlvbiksbi5fZHJhd05lYXJQbGFuZT1mLG59O1hmLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX2ZydXN0dW1UeXBlLG49dC5fZnJ1c3R1bSxvPXQuX29yaWdpbixyPXQuX29yaWVudGF0aW9uLGk9dC5fZHJhd05lYXJQbGFuZSxzPW5ldyBGbG9hdDY0QXJyYXkoMyo0KjIpO1dmLl9jb21wdXRlTmVhckZhclBsYW5lcyhvLHIsZSxuLHMpO2xldCBmPW5ldyBpZSh7cG9zaXRpb246bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpzfSl9KSx1LGMsbD1pPzI6MSxwPW5ldyBVaW50MTZBcnJheSg4KihsKzEpKSxkPWk/MDoxO2Zvcig7ZDwyOysrZCl1PWk/ZCo4OjAsYz1kKjQscFt1XT1jLHBbdSsxXT1jKzEscFt1KzJdPWMrMSxwW3UrM109YysyLHBbdSs0XT1jKzIscFt1KzVdPWMrMyxwW3UrNl09YyszLHBbdSs3XT1jO2ZvcihkPTA7ZDwyOysrZCl1PShsK2QpKjgsYz1kKjQscFt1XT1jLHBbdSsxXT1jKzQscFt1KzJdPWMrMSxwW3UrM109Yys1LHBbdSs0XT1jKzIscFt1KzVdPWMrNixwW3UrNl09YyszLHBbdSs3XT1jKzc7cmV0dXJuIG5ldyBCdCh7YXR0cmlidXRlczpmLGluZGljZXM6cCxwcmltaXRpdmVUeXBlOkR0LkxJTkVTLGJvdW5kaW5nU3BoZXJlOmd0LmZyb21WZXJ0aWNlcyhzKX0pfTtVXz1YZn0pO3ZhciBrXz17fTtkZShrXyx7ZGVmYXVsdDooKT0+b0x9KTtmdW5jdGlvbiBuTCh0LGUpe3JldHVybiBoKGUpJiYodD1VXy51bnBhY2sodCxlKSksVV8uY3JlYXRlR2VvbWV0cnkodCl9dmFyIG9MLEdfPSQoKCk9PntmdCgpO0lPKCk7b0w9bkx9KTtmdW5jdGlvbiB3cyh0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVCx0aGlzLl9lbGxpcHNvaWQ9dC5lbGxpcHNvaWQ/P1kuZGVmYXVsdCx0aGlzLl9yZWN0YW5nbGU9dC5yZWN0YW5nbGU/P050Lk1BWF9WQUxVRSx0aGlzLl9wcm9qZWN0aW9uPW5ldyBKbih0aGlzLl9lbGxpcHNvaWQpLHRoaXMuX251bWJlck9mTGV2ZWxaZXJvVGlsZXNYPXQubnVtYmVyT2ZMZXZlbFplcm9UaWxlc1g/PzIsdGhpcy5fbnVtYmVyT2ZMZXZlbFplcm9UaWxlc1k9dC5udW1iZXJPZkxldmVsWmVyb1RpbGVzWT8/MX12YXIgdk8sRk89JCgoKT0+e1VlKCk7V3QoKTt5ZSgpO2Z0KCk7JHQoKTtTaSgpO0t0KCk7d24oKTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh3cy5wcm90b3R5cGUse2VsbGlwc29pZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VsbGlwc29pZH19LHJlY3RhbmdsZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlY3RhbmdsZX19LHByb2plY3Rpb246e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcm9qZWN0aW9ufX19KTt3cy5wcm90b3R5cGUuZ2V0TnVtYmVyT2ZYVGlsZXNBdExldmVsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9udW1iZXJPZkxldmVsWmVyb1RpbGVzWDw8dH07d3MucHJvdG90eXBlLmdldE51bWJlck9mWVRpbGVzQXRMZXZlbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbnVtYmVyT2ZMZXZlbFplcm9UaWxlc1k8PHR9O3dzLnByb3RvdHlwZS5yZWN0YW5nbGVUb05hdGl2ZVJlY3RhbmdsZT1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgicmVjdGFuZ2xlIix0KTtsZXQgbj1QLnRvRGVncmVlcyh0Lndlc3QpLG89UC50b0RlZ3JlZXModC5zb3V0aCkscj1QLnRvRGVncmVlcyh0LmVhc3QpLGk9UC50b0RlZ3JlZXModC5ub3J0aCk7cmV0dXJuIGgoZSk/KGUud2VzdD1uLGUuc291dGg9byxlLmVhc3Q9cixlLm5vcnRoPWksZSk6bmV3IE50KG4sbyxyLGkpfTt3cy5wcm90b3R5cGUudGlsZVhZVG9OYXRpdmVSZWN0YW5nbGU9ZnVuY3Rpb24odCxlLG4sbyl7bGV0IHI9dGhpcy50aWxlWFlUb1JlY3RhbmdsZSh0LGUsbixvKTtyZXR1cm4gci53ZXN0PVAudG9EZWdyZWVzKHIud2VzdCksci5zb3V0aD1QLnRvRGVncmVlcyhyLnNvdXRoKSxyLmVhc3Q9UC50b0RlZ3JlZXMoci5lYXN0KSxyLm5vcnRoPVAudG9EZWdyZWVzKHIubm9ydGgpLHJ9O3dzLnByb3RvdHlwZS50aWxlWFlUb1JlY3RhbmdsZT1mdW5jdGlvbih0LGUsbixvKXtsZXQgcj10aGlzLl9yZWN0YW5nbGUsaT10aGlzLmdldE51bWJlck9mWFRpbGVzQXRMZXZlbChuKSxzPXRoaXMuZ2V0TnVtYmVyT2ZZVGlsZXNBdExldmVsKG4pLGY9ci53aWR0aC9pLHU9dCpmK3Iud2VzdCxjPSh0KzEpKmYrci53ZXN0LGw9ci5oZWlnaHQvcyxwPXIubm9ydGgtZSpsLGQ9ci5ub3J0aC0oZSsxKSpsO3JldHVybiBoKG8pfHwobz1uZXcgTnQodSxkLGMscCkpLG8ud2VzdD11LG8uc291dGg9ZCxvLmVhc3Q9YyxvLm5vcnRoPXAsb307d3MucHJvdG90eXBlLnBvc2l0aW9uVG9UaWxlWFk9ZnVuY3Rpb24odCxlLG4pe2xldCBvPXRoaXMuX3JlY3RhbmdsZTtpZighTnQuY29udGFpbnMobyx0KSlyZXR1cm47bGV0IHI9dGhpcy5nZXROdW1iZXJPZlhUaWxlc0F0TGV2ZWwoZSksaT10aGlzLmdldE51bWJlck9mWVRpbGVzQXRMZXZlbChlKSxzPW8ud2lkdGgvcixmPW8uaGVpZ2h0L2ksdT10LmxvbmdpdHVkZTtvLmVhc3Q8by53ZXN0JiYodSs9UC5UV09fUEkpO2xldCBjPSh1LW8ud2VzdCkvc3wwO2M+PXImJihjPXItMSk7bGV0IGw9KG8ubm9ydGgtdC5sYXRpdHVkZSkvZnwwO3JldHVybiBsPj1pJiYobD1pLTEpLGgobik/KG4ueD1jLG4ueT1sLG4pOm5ldyBKKGMsbCl9O3ZPPXdzfSk7ZnVuY3Rpb24ga08odCl7Y3QuZnJvbVJhZGlhbnModC5lYXN0LHQubm9ydGgsMCxZZlswXSksY3QuZnJvbVJhZGlhbnModC53ZXN0LHQubm9ydGgsMCxZZlsxXSksY3QuZnJvbVJhZGlhbnModC5lYXN0LHQuc291dGgsMCxZZlsyXSksY3QuZnJvbVJhZGlhbnModC53ZXN0LHQuc291dGgsMCxZZlszXSk7bGV0IGU9MCxuPTAsbz0wLHI9MCxpPVBuLl90ZXJyYWluSGVpZ2h0c01heExldmVsLHM7Zm9yKHM9MDtzPD1pOysrcyl7bGV0IGY9ITE7Zm9yKGxldCB1PTA7dTw0OysrdSl7bGV0IGM9WWZbdV07aWYoaUwucG9zaXRpb25Ub1RpbGVYWShjLHMsJGYpLHU9PT0wKW89JGYueCxyPSRmLnk7ZWxzZSBpZihvIT09JGYueHx8ciE9PSRmLnkpe2Y9ITA7YnJlYWt9fWlmKGYpYnJlYWs7ZT1vLG49cn1pZihzIT09MClyZXR1cm57eDplLHk6bixsZXZlbDpzPmk/aTpzLTF9fXZhciBMTyxETyxCTyxWXyxyTCxVTyxpTCxZZiwkZixQbixFZCx6Xz0kKCgpPT57dmUoKTtYbSgpO1VlKCk7THQoKTtJZSgpO1d0KCk7ZnQoKTtqdCgpOyR0KCk7Rk8oKTt3bigpO2RmKCk7TE89bmV3IGEsRE89bmV3IGEsQk89bmV3IGN0LFZfPW5ldyBhLHJMPW5ldyBhLFVPPW5ldyBndCxpTD1uZXcgdk8sWWY9W25ldyBjdCxuZXcgY3QsbmV3IGN0LG5ldyBjdF0sJGY9bmV3IEosUG49e307UG4uaW5pdGlhbGl6ZT1mdW5jdGlvbigpe2xldCB0PVBuLl9pbml0UHJvbWlzZTtyZXR1cm4gaCh0KXx8KHQ9b2kuZmV0Y2hKc29uKHlwKCJBc3NldHMvYXBwcm94aW1hdGVUZXJyYWluSGVpZ2h0cy5qc29uIikpLnRoZW4oZnVuY3Rpb24oZSl7UG4uX3RlcnJhaW5IZWlnaHRzPWV9KSxQbi5faW5pdFByb21pc2U9dCksdH07UG4uZ2V0TWluaW11bU1heGltdW1IZWlnaHRzPWZ1bmN0aW9uKHQsZSl7aWYoeS5kZWZpbmVkKCJyZWN0YW5nbGUiLHQpLCFoKFBuLl90ZXJyYWluSGVpZ2h0cykpdGhyb3cgbmV3IEQoIllvdSBtdXN0IGNhbGwgQXBwcm94aW1hdGVUZXJyYWluSGVpZ2h0cy5pbml0aWFsaXplIGFuZCB3YWl0IGZvciB0aGUgcHJvbWlzZSB0byByZXNvbHZlIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uIik7ZT1lPz9ZLmRlZmF1bHQ7bGV0IG49a08odCksbz1Qbi5fZGVmYXVsdE1pblRlcnJhaW5IZWlnaHQscj1Qbi5fZGVmYXVsdE1heFRlcnJhaW5IZWlnaHQ7aWYoaChuKSl7bGV0IGk9YCR7bi5sZXZlbH0tJHtuLnh9LSR7bi55fWAscz1Qbi5fdGVycmFpbkhlaWdodHNbaV07aChzKSYmKG89c1swXSxyPXNbMV0pLGUuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oTnQubm9ydGhlYXN0KHQsQk8pLExPKSxlLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKE50LnNvdXRod2VzdCh0LEJPKSxETyksYS5taWRwb2ludChETyxMTyxWXyk7bGV0IGY9ZS5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKFZfLHJMKTtpZihoKGYpKXtsZXQgdT1hLmRpc3RhbmNlKFZfLGYpO289TWF0aC5taW4obywtdSl9ZWxzZSBvPVBuLl9kZWZhdWx0TWluVGVycmFpbkhlaWdodH1yZXR1cm4gbz1NYXRoLm1heChQbi5fZGVmYXVsdE1pblRlcnJhaW5IZWlnaHQsbykse21pbmltdW1UZXJyYWluSGVpZ2h0Om8sbWF4aW11bVRlcnJhaW5IZWlnaHQ6cn19O1BuLmdldEJvdW5kaW5nU3BoZXJlPWZ1bmN0aW9uKHQsZSl7aWYoeS5kZWZpbmVkKCJyZWN0YW5nbGUiLHQpLCFoKFBuLl90ZXJyYWluSGVpZ2h0cykpdGhyb3cgbmV3IEQoIllvdSBtdXN0IGNhbGwgQXBwcm94aW1hdGVUZXJyYWluSGVpZ2h0cy5pbml0aWFsaXplIGFuZCB3YWl0IGZvciB0aGUgcHJvbWlzZSB0byByZXNvbHZlIGJlZm9yZSB1c2luZyB0aGlzIGZ1bmN0aW9uIik7ZT1lPz9ZLmRlZmF1bHQ7bGV0IG49a08odCksbz1Qbi5fZGVmYXVsdE1heFRlcnJhaW5IZWlnaHQ7aWYoaChuKSl7bGV0IGk9YCR7bi5sZXZlbH0tJHtuLnh9LSR7bi55fWAscz1Qbi5fdGVycmFpbkhlaWdodHNbaV07aChzKSYmKG89c1sxXSl9bGV0IHI9Z3QuZnJvbVJlY3RhbmdsZTNEKHQsZSwwKTtyZXR1cm4gZ3QuZnJvbVJlY3RhbmdsZTNEKHQsZSxvLFVPKSxndC51bmlvbihyLFVPLHIpfTtQbi5fdGVycmFpbkhlaWdodHNNYXhMZXZlbD02O1BuLl9kZWZhdWx0TWF4VGVycmFpbkhlaWdodD05ZTM7UG4uX2RlZmF1bHRNaW5UZXJyYWluSGVpZ2h0PS0xZTU7UG4uX3RlcnJhaW5IZWlnaHRzPXZvaWQgMDtQbi5faW5pdFByb21pc2U9dm9pZCAwO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFBuLHtpbml0aWFsaXplZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGgoUG4uX3RlcnJhaW5IZWlnaHRzKX19fSk7RWQ9UG59KTtmdW5jdGlvbiBFcyh0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVDtsZXQgZT10LnBvc2l0aW9ucztpZighaChlKXx8ZS5sZW5ndGg8Mil0aHJvdyBuZXcgRCgiQXQgbGVhc3QgdHdvIHBvc2l0aW9ucyBhcmUgcmVxdWlyZWQuIik7aWYoaCh0LmFyY1R5cGUpJiZ0LmFyY1R5cGUhPT1oZS5HRU9ERVNJQyYmdC5hcmNUeXBlIT09aGUuUkhVTUIpdGhyb3cgbmV3IEQoIlZhbGlkIG9wdGlvbnMgZm9yIGFyY1R5cGUgYXJlIEFyY1R5cGUuR0VPREVTSUMgYW5kIEFyY1R5cGUuUkhVTUIuIik7dGhpcy53aWR0aD10LndpZHRoPz8xLHRoaXMuX3Bvc2l0aW9ucz1lLHRoaXMuZ3JhbnVsYXJpdHk9dC5ncmFudWxhcml0eT8/OTk5OSx0aGlzLmxvb3A9dC5sb29wPz8hMSx0aGlzLmFyY1R5cGU9dC5hcmNUeXBlPz9oZS5HRU9ERVNJQyx0aGlzLl9lbGxpcHNvaWQ9WS5kZWZhdWx0LHRoaXMuX3Byb2plY3Rpb25JbmRleD0wLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZUdyb3VuZFBvbHlsaW5lR2VvbWV0cnkiLHRoaXMuX3NjZW5lM0RPbmx5PSExfWZ1bmN0aW9uIFlfKHQsZSxuLG8scil7bGV0IGk9VW8obyx0LDAsY0wpLHM9VW8obyx0LG4sVk8pLGY9VW8obyxlLDAsek8pLHU9SGkocyxpLFZPKSxjPUhpKGYsaSx6Tyk7cmV0dXJuIGEuY3Jvc3MoYyx1LHIpLGEubm9ybWFsaXplKHIscil9ZnVuY3Rpb24gal8odCxlLG4sbyxyLGkscyxmLHUsYyxsKXtpZihyPT09MClyZXR1cm47bGV0IHA7aT09PWhlLkdFT0RFU0lDP3A9bmV3IGNkKHQsZSxzKTppPT09aGUuUkhVTUImJihwPW5ldyBabyh0LGUscykpO2xldCBkPXAuc3VyZmFjZURpc3RhbmNlO2lmKGQ8cilyZXR1cm47bGV0IG09WV8odCxlLG8scyxsTCksXz1NYXRoLmNlaWwoZC9yKSxnPWQvXyxiPWcsVD1fLTEsTz1mLmxlbmd0aDtmb3IobGV0IEU9MDtFPFQ7RSsrKXtsZXQgdz1wLmludGVycG9sYXRlVXNpbmdTdXJmYWNlRGlzdGFuY2UoYixhTCksQz1VbyhzLHcsbixmTCksTT1VbyhzLHcsbyx1TCk7YS5wYWNrKG0sZixPKSxhLnBhY2soQyx1LE8pLGEucGFjayhNLGMsTyksbC5wdXNoKHcubGF0aXR1ZGUpLGwucHVzaCh3LmxvbmdpdHVkZSksTys9MyxiKz1nfX1mdW5jdGlvbiBVbyh0LGUsbixvKXtyZXR1cm4gY3QuY2xvbmUoZSxIXyksSF8uaGVpZ2h0PW4sY3QudG9DYXJ0ZXNpYW4oSF8sdCxvKX1mdW5jdGlvbiBIaSh0LGUsbil7cmV0dXJuIGEuc3VidHJhY3QodCxlLG4pLGEubm9ybWFsaXplKG4sbiksbn1mdW5jdGlvbiBqTyh0LGUsbixvKXtyZXR1cm4gbz1IaSh0LGUsbyksbz1hLmNyb3NzKG8sbixvKSxvPWEubm9ybWFsaXplKG8sbyksbz1hLmNyb3NzKG4sbyxvKSxvfWZ1bmN0aW9uIHFfKHQsZSxuLG8scil7bGV0IGk9SGkobixlLGFFKSxzPWpPKHQsZSxpLHBMKSxmPWpPKG8sZSxpLGRMKTtpZihQLmVxdWFsc0Vwc2lsb24oYS5kb3QocyxmKSxfTCxQLkVQU0lMT041KSlyZXR1cm4gcj1hLmNyb3NzKGkscyxyKSxyPWEubm9ybWFsaXplKHIscikscjtyPWEuYWRkKGYscyxyKSxyPWEubm9ybWFsaXplKHIscik7bGV0IHU9YS5jcm9zcyhpLHIsbUwpO3JldHVybiBhLmRvdChmLHUpPGhMJiYocj1hLm5lZ2F0ZShyLHIpKSxyfWZ1bmN0aW9uIEtPKHQsZSxuLG8pe2xldCByPUhpKG4sZSx3TCksaT1hLmRvdChyLHQpO2lmKGk+aUV8fGk8R08pe2xldCBzPUhpKG8sbixhRSksZj1pPEdPP1AuUElfT1ZFUl9UV086LVAuUElfT1ZFUl9UV08sdT10ZS5mcm9tQXhpc0FuZ2xlKHMsZixFTCksYz1aLmZyb21RdWF0ZXJuaW9uKHUsT0wpO3JldHVybiBaLm11bHRpcGx5QnlWZWN0b3IoYyx0LHQpLCEwfXJldHVybiExfWZ1bmN0aW9uIFpmKHQsZSxuLG8scil7bGV0IGk9Y3QudG9DYXJ0ZXNpYW4oZSx0Ll9lbGxpcHNvaWQsUkwpLHM9YS5hZGQoaSxuLFhPKSxmPSExLHU9dC5fZWxsaXBzb2lkLGM9dS5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhzLFdPKTtNYXRoLmFicyhlLmxvbmdpdHVkZS1jLmxvbmdpdHVkZSk+UC5QSV9PVkVSX1RXTyYmKGY9ITAscz1hLnN1YnRyYWN0KGksbixYTyksYz11LmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHMsV08pKSxjLmhlaWdodD0wO2xldCBsPXQucHJvamVjdChjLHIpO3JldHVybiByPWEuc3VidHJhY3QobCxvLHIpLHIuej0wLHI9YS5ub3JtYWxpemUocixyKSxmJiZhLm5lZ2F0ZShyLHIpLHJ9ZnVuY3Rpb24gJE8odCxlLG4sbyxyLGkpe2xldCBzPWEuc3VidHJhY3QoZSx0LFNMKTthLm5vcm1hbGl6ZShzLHMpO2xldCBmPW4tc0UsdT1hLm11bHRpcGx5QnlTY2FsYXIocyxmLFlPKTthLmFkZCh0LHUscik7bGV0IGM9by1jRTt1PWEubXVsdGlwbHlCeVNjYWxhcihzLGMsWU8pLGEuYWRkKGUsdSxpKX1mdW5jdGlvbiBDZCh0LGUpe2xldCBuPW9uLmdldFBvaW50RGlzdGFuY2UoeGQsdCksbz1vbi5nZXRQb2ludERpc3RhbmNlKHhkLGUpLHI9Q0w7UC5lcXVhbHNFcHNpbG9uKG4sMCxQLkVQU0lMT04yKT8ocj1IaShlLHQsciksYS5tdWx0aXBseUJ5U2NhbGFyKHIsUC5FUFNJTE9OMixyKSxhLmFkZCh0LHIsdCkpOlAuZXF1YWxzRXBzaWxvbihvLDAsUC5FUFNJTE9OMikmJihyPUhpKHQsZSxyKSxhLm11bHRpcGx5QnlTY2FsYXIocixQLkVQU0lMT04yLHIpLGEuYWRkKGUscixlKSl9ZnVuY3Rpb24geEwodCxlKXtsZXQgbj1NYXRoLmFicyh0LmxvbmdpdHVkZSksbz1NYXRoLmFicyhlLmxvbmdpdHVkZSk7aWYoUC5lcXVhbHNFcHNpbG9uKG4sUC5QSSxQLkVQU0lMT04xMSkpe2xldCByPVAuc2lnbihlLmxvbmdpdHVkZSk7cmV0dXJuIHQubG9uZ2l0dWRlPXIqKG4tUC5FUFNJTE9OMTEpLDF9ZWxzZSBpZihQLmVxdWFsc0Vwc2lsb24obyxQLlBJLFAuRVBTSUxPTjExKSl7bGV0IHI9UC5zaWduKHQubG9uZ2l0dWRlKTtyZXR1cm4gZS5sb25naXR1ZGU9ciooby1QLkVQU0lMT04xMSksMn1yZXR1cm4gMH1mdW5jdGlvbiBXTCh0LGUsbixvLHIsaSxzKXtsZXQgZix1LGM9ZS5fZWxsaXBzb2lkLGw9bi5sZW5ndGgvMy0xLHA9bCo4LGQ9cCo0LG09bCozNixfPXA+NjU1MzU/bmV3IFVpbnQzMkFycmF5KG0pOm5ldyBVaW50MTZBcnJheShtKSxnPW5ldyBGbG9hdDY0QXJyYXkocCozKSxiPW5ldyBGbG9hdDMyQXJyYXkoZCksVD1uZXcgRmxvYXQzMkFycmF5KGQpLE89bmV3IEZsb2F0MzJBcnJheShkKSxFPW5ldyBGbG9hdDMyQXJyYXkoZCksdz1uZXcgRmxvYXQzMkFycmF5KGQpLEMsTSxOLEY7cyYmKEM9bmV3IEZsb2F0MzJBcnJheShkKSxNPW5ldyBGbG9hdDMyQXJyYXkoZCksTj1uZXcgRmxvYXQzMkFycmF5KGQpLEY9bmV3IEZsb2F0MzJBcnJheShwKjIpKTtsZXQgST1pLmxlbmd0aC8yLHY9MCxCPWZFO0IuaGVpZ2h0PTA7bGV0IEE9dUU7QS5oZWlnaHQ9MDtsZXQgUz1aTyx4PUtfO2lmKHMpZm9yKHU9MCxmPTE7ZjxJO2YrKylCLmxhdGl0dWRlPWlbdV0sQi5sb25naXR1ZGU9aVt1KzFdLEEubGF0aXR1ZGU9aVt1KzJdLEEubG9uZ2l0dWRlPWlbdSszXSxTPWUucHJvamVjdChCLFMpLHg9ZS5wcm9qZWN0KEEseCksdis9YS5kaXN0YW5jZShTLHgpLHUrPTI7bGV0IEw9by5sZW5ndGgvMzt4PWEudW5wYWNrKG8sMCx4KTtsZXQgej0wO2Zvcih1PTMsZj0xO2Y8TDtmKyspUz1hLmNsb25lKHgsUykseD1hLnVucGFjayhvLHUseCkseis9YS5kaXN0YW5jZShTLHgpLHUrPTM7bGV0IGo7dT0zO2xldCBrPTAscT0wLFc9MCxSPTAsbnQ9ITEsYXQ9YS51bnBhY2sobiwwLEpPKSxsdD1hLnVucGFjayhvLDAsS18pLGh0PWEudW5wYWNrKHIsMCx0RSk7aWYodCl7bGV0IGt0PWEudW5wYWNrKG4sbi5sZW5ndGgtNixRTyk7S08oaHQsa3QsYXQsbHQpJiYoaHQ9YS5uZWdhdGUoaHQsaHQpKX1sZXQgb3Q9MCxQdD0wLHl0PTA7Zm9yKGY9MDtmPGw7ZisrKXtsZXQga3Q9YS5jbG9uZShhdCxRTyksbGU9YS5jbG9uZShsdCxaTykscmU9YS5jbG9uZShodCxQTCk7bnQmJihyZT1hLm5lZ2F0ZShyZSxyZSkpLGF0PWEudW5wYWNrKG4sdSxKTyksbHQ9YS51bnBhY2sobyx1LEtfKSxodD1hLnVucGFjayhyLHUsdEUpLG50PUtPKGh0LGt0LGF0LGx0KSxCLmxhdGl0dWRlPWlba10sQi5sb25naXR1ZGU9aVtrKzFdLEEubGF0aXR1ZGU9aVtrKzJdLEEubG9uZ2l0dWRlPWlbayszXTtsZXQgcGUsZmUsWnQsUXQ7aWYocyl7bGV0IEZlPXhMKEIsQSk7cGU9ZS5wcm9qZWN0KEIsREwpLGZlPWUucHJvamVjdChBLEJMKTtsZXQgTG49SGkoZmUscGUsbkUpO0xuLnk9TWF0aC5hYnMoTG4ueSksWnQ9V18sUXQ9WF8sRmU9PT0wfHxhLmRvdChMbixhLlVOSVRfWSk+aUU/KFp0PVpmKGUsQixyZSxwZSxXXyksUXQ9WmYoZSxBLGh0LGZlLFhfKSk6RmU9PT0xPyhRdD1aZihlLEEsaHQsZmUsWF8pLFp0Lng9MCxadC55PVAuc2lnbihCLmxvbmdpdHVkZS1NYXRoLmFicyhBLmxvbmdpdHVkZSkpLFp0Lno9MCk6KFp0PVpmKGUsQixyZSxwZSxXXyksUXQueD0wLFF0Lnk9UC5zaWduKEIubG9uZ2l0dWRlLUEubG9uZ2l0dWRlKSxRdC56PTApfWxldCBOZT1hLmRpc3RhbmNlKGxlLGx0KSxnZT1acy5mcm9tQ2FydGVzaWFuKGt0LGpMKSxFZT1hLnN1YnRyYWN0KGF0LGt0LFVMKSx1bj1hLm5vcm1hbGl6ZShFZSxlRSksR2U9YS5zdWJ0cmFjdChsZSxrdCxrTCk7R2U9YS5ub3JtYWxpemUoR2UsR2UpO2xldCBiZT1hLmNyb3NzKHVuLEdlLGVFKTtiZT1hLm5vcm1hbGl6ZShiZSxiZSk7bGV0IGxuPWEuY3Jvc3MoR2UscmUsVkwpO2xuPWEubm9ybWFsaXplKGxuLGxuKTtsZXQgcG49YS5zdWJ0cmFjdChsdCxhdCxHTCk7cG49YS5ub3JtYWxpemUocG4scG4pO2xldCBFbj1hLmNyb3NzKGh0LHBuLHpMKTtFbj1hLm5vcm1hbGl6ZShFbixFbik7bGV0IG9lPU5lL3osWXQ9b3QveixWZT0wLGRuLHNuLG1uLGZvPTAsSG49MDtpZihzKXtWZT1hLmRpc3RhbmNlKHBlLGZlKSxkbj1acy5mcm9tQ2FydGVzaWFuKHBlLEhMKSxzbj1hLnN1YnRyYWN0KGZlLHBlLG5FKSxtbj1hLm5vcm1hbGl6ZShzbixxTCk7bGV0IEZlPW1uLng7bW4ueD1tbi55LG1uLnk9LUZlLGZvPVZlL3YsSG49UHQvdn1mb3Ioaj0wO2o8ODtqKyspe2xldCBGZT1SK2oqNCxMbj1xK2oqMixXbj1GZSszLHpvPWo8ND8xOi0xLHJuPWo9PT0yfHxqPT09M3x8aj09PTZ8fGo9PT03PzE6LTE7YS5wYWNrKGdlLmhpZ2gsYixGZSksYltXbl09RWUueCxhLnBhY2soZ2UubG93LFQsRmUpLFRbV25dPUVlLnksYS5wYWNrKGxuLE8sRmUpLE9bV25dPUVlLnosYS5wYWNrKEVuLEUsRmUpLEVbV25dPW9lKnpvLGEucGFjayhiZSx3LEZlKTtsZXQgUm49WXQqcm47Um49PT0wJiZybjwwJiYoUm49OSksd1tXbl09Um4scyYmKENbRmVdPWRuLmhpZ2gueCxDW0ZlKzFdPWRuLmhpZ2gueSxDW0ZlKzJdPWRuLmxvdy54LENbRmUrM109ZG4ubG93LnksTltGZV09LVp0LnksTltGZSsxXT1adC54LE5bRmUrMl09UXQueSxOW0ZlKzNdPS1RdC54LE1bRmVdPXNuLngsTVtGZSsxXT1zbi55LE1bRmUrMl09bW4ueCxNW0ZlKzNdPW1uLnksRltMbl09Zm8qem8sUm49SG4qcm4sUm49PT0wJiZybjwwJiYoUm49OSksRltMbisxXT1Sbil9bGV0IFplPUZMLGNuPUxMLEtlPUlMLGhuPXZMLHVvPU50LmZyb21DYXJ0b2dyYXBoaWNBcnJheShNTCxOTCkscW49RWQuZ2V0TWluaW11bU1heGltdW1IZWlnaHRzKHVvLGMpLEtuPXFuLm1pbmltdW1UZXJyYWluSGVpZ2h0LGxvPXFuLm1heGltdW1UZXJyYWluSGVpZ2h0O3l0Kz1NYXRoLmFicyhLbikseXQrPU1hdGguYWJzKGxvKSwkTyhrdCxsZSxLbixsbyxaZSxLZSksJE8oYXQsbHQsS24sbG8sY24saG4pO2xldCB6ZT1hLm11bHRpcGx5QnlTY2FsYXIoYmUsUC5FUFNJTE9ONSxvRSk7YS5hZGQoWmUsemUsWmUpLGEuYWRkKGNuLHplLGNuKSxhLmFkZChLZSx6ZSxLZSksYS5hZGQoaG4semUsaG4pLENkKFplLGNuKSxDZChLZSxobiksYS5wYWNrKFplLGcsVyksYS5wYWNrKGNuLGcsVyszKSxhLnBhY2soaG4sZyxXKzYpLGEucGFjayhLZSxnLFcrOSksemU9YS5tdWx0aXBseUJ5U2NhbGFyKGJlLC0yKlAuRVBTSUxPTjUsb0UpLGEuYWRkKFplLHplLFplKSxhLmFkZChjbix6ZSxjbiksYS5hZGQoS2UsemUsS2UpLGEuYWRkKGhuLHplLGhuKSxDZChaZSxjbiksQ2QoS2UsaG4pLGEucGFjayhaZSxnLFcrMTIpLGEucGFjayhjbixnLFcrMTUpLGEucGFjayhobixnLFcrMTgpLGEucGFjayhLZSxnLFcrMjEpLGsrPTIsdSs9MyxxKz0xNixXKz0yNCxSKz0zMixvdCs9TmUsUHQrPVZlfXU9MDtsZXQgRXQ9MDtmb3IoZj0wO2Y8bDtmKyspe2ZvcihqPTA7ajxyRTtqKyspX1t1K2pdPWxFW2pdK0V0O0V0Kz04LHUrPXJFfWxldCBkdD1LTDtndC5mcm9tVmVydGljZXMobixhLlpFUk8sMyxkdFswXSksZ3QuZnJvbVZlcnRpY2VzKG8sYS5aRVJPLDMsZHRbMV0pO2xldCBydD1ndC5mcm9tQm91bmRpbmdTcGhlcmVzKGR0KTtydC5yYWRpdXMrPXl0LyhsKjIpO2xldCBDdD17cG9zaXRpb246bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLG5vcm1hbGl6ZTohMSx2YWx1ZXM6Z30pLHN0YXJ0SGlBbmRGb3J3YXJkT2Zmc2V0WDpPcyhiKSxzdGFydExvQW5kRm9yd2FyZE9mZnNldFk6T3MoVCksc3RhcnROb3JtYWxBbmRGb3J3YXJkT2Zmc2V0WjpPcyhPKSxlbmROb3JtYWxBbmRUZXh0dXJlQ29vcmRpbmF0ZU5vcm1hbGl6YXRpb25YOk9zKEUpLHJpZ2h0Tm9ybWFsQW5kVGV4dHVyZUNvb3JkaW5hdGVOb3JtYWxpemF0aW9uWTpPcyh3KX07cmV0dXJuIHMmJihDdC5zdGFydEhpTG8yRD1PcyhDKSxDdC5vZmZzZXRBbmRSaWdodDJEPU9zKE0pLEN0LnN0YXJ0RW5kTm9ybWFsczJEPU9zKE4pLEN0LnRleGNvb3JkTm9ybWFsaXphdGlvbjJEPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLG5vcm1hbGl6ZTohMSx2YWx1ZXM6Rn0pKSxuZXcgQnQoe2F0dHJpYnV0ZXM6Q3QsaW5kaWNlczpfLGJvdW5kaW5nU3BoZXJlOnJ0fSl9ZnVuY3Rpb24gT3ModCl7cmV0dXJuIG5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTo0LG5vcm1hbGl6ZTohMSx2YWx1ZXM6dH0pfXZhciAkXyxzTCxpRSxHTyxzRSxjRSxjTCxWTyx6TyxhTCxmTCx1TCxsTCxIXyxwTCxkTCxtTCxhRSxoTCxfTCx4ZCx5TCxnTCxBTCxiTCxUTCxSZCxTZCxITyxxTyx3TCxPTCxFTCxXTyxSTCxYTyxTTCxZTyxDTCxmRSx1RSxaTyxLXyxRTyxKTyxQTCx0RSxNTCxOTCxJTCx2TCxGTCxMTCxETCxCTCxXXyxYXyxVTCxrTCxHTCxlRSxWTCx6TCxqTCxITCxuRSxxTCxvRSxLTCxsRSxyRSxaXyxwRT0kKCgpPT57el8oKTtmYygpO2pyKCk7dmUoKTtMdCgpO0llKCk7V3QoKTtEZSgpO3llKCk7ZnQoKTtqdCgpOyR0KCk7ajAoKTtNZigpO0JoKCk7U2koKTtYZSgpO1llKCk7dGMoKTtLdCgpO0JuKCk7ZnMoKTtLbygpO3duKCk7aWMoKTskXz1bSm4sbm9dLHNMPSRfLmxlbmd0aCxpRT1NYXRoLmNvcyhQLnRvUmFkaWFucygzMCkpLEdPPU1hdGguY29zKFAudG9SYWRpYW5zKDE1MCkpLHNFPTAsY0U9MWUzO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEVzLnByb3RvdHlwZSx7cGFja2VkTGVuZ3RoOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMSt0aGlzLl9wb3NpdGlvbnMubGVuZ3RoKjMrMSsxKzErWS5wYWNrZWRMZW5ndGgrMSsxfX19KTtFcy5zZXRQcm9qZWN0aW9uQW5kRWxsaXBzb2lkPWZ1bmN0aW9uKHQsZSl7bGV0IG49MDtmb3IobGV0IG89MDtvPHNMO28rKylpZihlIGluc3RhbmNlb2YgJF9bb10pe249bzticmVha310Ll9wcm9qZWN0aW9uSW5kZXg9bix0Ll9lbGxpcHNvaWQ9ZS5lbGxpcHNvaWR9O2NMPW5ldyBhLFZPPW5ldyBhLHpPPW5ldyBhO2FMPW5ldyBjdCxmTD1uZXcgYSx1TD1uZXcgYSxsTD1uZXcgYTtIXz1uZXcgY3Q7RXMucGFjaz1mdW5jdGlvbih0LGUsbil7eS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSk7bGV0IG89bj8/MCxyPXQuX3Bvc2l0aW9ucyxpPXIubGVuZ3RoO2VbbysrXT1pO2ZvcihsZXQgcz0wO3M8aTsrK3Mpe2xldCBmPXJbc107YS5wYWNrKGYsZSxvKSxvKz0zfXJldHVybiBlW28rK109dC5ncmFudWxhcml0eSxlW28rK109dC5sb29wPzE6MCxlW28rK109dC5hcmNUeXBlLFkucGFjayh0Ll9lbGxpcHNvaWQsZSxvKSxvKz1ZLnBhY2tlZExlbmd0aCxlW28rK109dC5fcHJvamVjdGlvbkluZGV4LGVbbysrXT10Ll9zY2VuZTNET25seT8xOjAsZX07RXMudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXt5LmRlZmluZWQoImFycmF5Iix0KTtsZXQgbz1lPz8wLHI9dFtvKytdLGk9bmV3IEFycmF5KHIpO2ZvcihsZXQgZD0wO2Q8cjtkKyspaVtkXT1hLnVucGFjayh0LG8pLG8rPTM7bGV0IHM9dFtvKytdLGY9dFtvKytdPT09MSx1PXRbbysrXSxjPVkudW5wYWNrKHQsbyk7bys9WS5wYWNrZWRMZW5ndGg7bGV0IGw9dFtvKytdLHA9dFtvKytdPT09MTtyZXR1cm4gaChuKXx8KG49bmV3IEVzKHtwb3NpdGlvbnM6aX0pKSxuLl9wb3NpdGlvbnM9aSxuLmdyYW51bGFyaXR5PXMsbi5sb29wPWYsbi5hcmNUeXBlPXUsbi5fZWxsaXBzb2lkPWMsbi5fcHJvamVjdGlvbkluZGV4PWwsbi5fc2NlbmUzRE9ubHk9cCxufTtwTD1uZXcgYSxkTD1uZXcgYSxtTD1uZXcgYSxhRT1uZXcgYSxoTD0wLF9MPS0xO3hkPW9uLmZyb21Qb2ludE5vcm1hbChhLlpFUk8sYS5VTklUX1kpLHlMPW5ldyBhLGdMPW5ldyBhLEFMPW5ldyBhLGJMPW5ldyBhLFRMPW5ldyBhLFJkPW5ldyBhLFNkPW5ldyBjdCxITz1uZXcgY3QscU89bmV3IGN0O0VzLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPSF0Ll9zY2VuZTNET25seSxuPXQubG9vcCxvPXQuX2VsbGlwc29pZCxyPXQuZ3JhbnVsYXJpdHksaT10LmFyY1R5cGUscz1uZXcgJF9bdC5fcHJvamVjdGlvbkluZGV4XShvKSxmPXNFLHU9Y0UsYyxsLHA9dC5fcG9zaXRpb25zLGQ9cC5sZW5ndGg7ZD09PTImJihuPSExKTtsZXQgbSxfLGcsYixUPW5ldyBabyh2b2lkIDAsdm9pZCAwLG8pLE8sRSx3LEM9W3BbMF1dO2ZvcihsPTA7bDxkLTE7bCsrKW09cFtsXSxfPXBbbCsxXSxPPWhvLmxpbmVTZWdtZW50UGxhbmUobSxfLHhkLFJkKSxoKE8pJiYhYS5lcXVhbHNFcHNpbG9uKE8sbSxQLkVQU0lMT043KSYmIWEuZXF1YWxzRXBzaWxvbihPLF8sUC5FUFNJTE9ONykmJih0LmFyY1R5cGU9PT1oZS5HRU9ERVNJQz9DLnB1c2goYS5jbG9uZShPKSk6dC5hcmNUeXBlPT09aGUuUkhVTUImJih3PW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoTyxTZCkubG9uZ2l0dWRlLGc9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhtLFNkKSxiPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoXyxITyksVC5zZXRFbmRQb2ludHMoZyxiKSxFPVQuZmluZEludGVyc2VjdGlvbldpdGhMb25naXR1ZGUodyxxTyksTz1vLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKEUsUmQpLGgoTykmJiFhLmVxdWFsc0Vwc2lsb24oTyxtLFAuRVBTSUxPTjcpJiYhYS5lcXVhbHNFcHNpbG9uKE8sXyxQLkVQU0lMT043KSYmQy5wdXNoKGEuY2xvbmUoTykpKSksQy5wdXNoKF8pO24mJihtPXBbZC0xXSxfPXBbMF0sTz1oby5saW5lU2VnbWVudFBsYW5lKG0sXyx4ZCxSZCksaChPKSYmIWEuZXF1YWxzRXBzaWxvbihPLG0sUC5FUFNJTE9ONykmJiFhLmVxdWFsc0Vwc2lsb24oTyxfLFAuRVBTSUxPTjcpJiYodC5hcmNUeXBlPT09aGUuR0VPREVTSUM/Qy5wdXNoKGEuY2xvbmUoTykpOnQuYXJjVHlwZT09PWhlLlJIVU1CJiYodz1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKE8sU2QpLmxvbmdpdHVkZSxnPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMobSxTZCksYj1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKF8sSE8pLFQuc2V0RW5kUG9pbnRzKGcsYiksRT1ULmZpbmRJbnRlcnNlY3Rpb25XaXRoTG9uZ2l0dWRlKHcscU8pLE89by5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihFLFJkKSxoKE8pJiYhYS5lcXVhbHNFcHNpbG9uKE8sbSxQLkVQU0lMT043KSYmIWEuZXF1YWxzRXBzaWxvbihPLF8sUC5FUFNJTE9ONykmJkMucHVzaChhLmNsb25lKE8pKSkpKTtsZXQgTT1DLmxlbmd0aCxOPW5ldyBBcnJheShNKTtmb3IobD0wO2w8TTtsKyspe2xldCBudD1jdC5mcm9tQ2FydGVzaWFuKENbbF0sbyk7bnQuaGVpZ2h0PTAsTltsXT1udH1pZihOPXhuKE4sY3QuZXF1YWxzRXBzaWxvbiksTT1OLmxlbmd0aCxNPDIpcmV0dXJuO2xldCBGPVtdLEk9W10sdj1bXSxCPVtdLEE9eUwsUz1nTCx4PUFMLEw9Ykwsej1UTCxqPU5bMF0saz1OWzFdLHE9TltNLTFdO2ZvcihBPVVvKG8scSxmLEEpLEw9VW8obyxrLGYsTCksUz1VbyhvLGosZixTKSx4PVVvKG8saix1LHgpLG4/ej1xXyhBLFMseCxMLHopOno9WV8oaixrLHUsbyx6KSxhLnBhY2soeixJLDApLGEucGFjayhTLHYsMCksYS5wYWNrKHgsQiwwKSxGLnB1c2goai5sYXRpdHVkZSksRi5wdXNoKGoubG9uZ2l0dWRlKSxqXyhqLGssZix1LHIsaSxvLEksdixCLEYpLGw9MTtsPE0tMTsrK2wpe0E9YS5jbG9uZShTLEEpLFM9YS5jbG9uZShMLFMpO2xldCBudD1OW2xdO1VvKG8sbnQsdSx4KSxVbyhvLE5bbCsxXSxmLEwpLHFfKEEsUyx4LEwseiksYz1JLmxlbmd0aCxhLnBhY2soeixJLGMpLGEucGFjayhTLHYsYyksYS5wYWNrKHgsQixjKSxGLnB1c2gobnQubGF0aXR1ZGUpLEYucHVzaChudC5sb25naXR1ZGUpLGpfKE5bbF0sTltsKzFdLGYsdSxyLGksbyxJLHYsQixGKX1sZXQgVz1OW00tMV0sUj1OW00tMl07aWYoUz1VbyhvLFcsZixTKSx4PVVvKG8sVyx1LHgpLG4pe2xldCBudD1OWzBdO0E9VW8obyxSLGYsQSksTD1VbyhvLG50LGYsTCksej1xXyhBLFMseCxMLHopfWVsc2Ugej1ZXyhSLFcsdSxvLHopO2lmKGM9SS5sZW5ndGgsYS5wYWNrKHosSSxjKSxhLnBhY2soUyx2LGMpLGEucGFjayh4LEIsYyksRi5wdXNoKFcubGF0aXR1ZGUpLEYucHVzaChXLmxvbmdpdHVkZSksbil7Zm9yKGpfKFcsaixmLHUscixpLG8sSSx2LEIsRiksYz1JLmxlbmd0aCxsPTA7bDwzOysrbClJW2MrbF09SVtsXSx2W2MrbF09dltsXSxCW2MrbF09QltsXTtGLnB1c2goai5sYXRpdHVkZSksRi5wdXNoKGoubG9uZ2l0dWRlKX1yZXR1cm4gV0wobixzLHYsQixJLEYsZSl9O3dMPW5ldyBhLE9MPW5ldyBaLEVMPW5ldyB0ZTtXTz1uZXcgY3QsUkw9bmV3IGEsWE89bmV3IGE7U0w9bmV3IGEsWU89bmV3IGE7Q0w9bmV3IGE7ZkU9bmV3IGN0LHVFPW5ldyBjdCxaTz1uZXcgYSxLXz1uZXcgYSxRTz1uZXcgYSxKTz1uZXcgYSxQTD1uZXcgYSx0RT1uZXcgYSxNTD1bZkUsdUVdLE5MPW5ldyBOdCxJTD1uZXcgYSx2TD1uZXcgYSxGTD1uZXcgYSxMTD1uZXcgYSxETD1uZXcgYSxCTD1uZXcgYSxXXz1uZXcgYSxYXz1uZXcgYSxVTD1uZXcgYSxrTD1uZXcgYSxHTD1uZXcgYSxlRT1uZXcgYSxWTD1uZXcgYSx6TD1uZXcgYSxqTD1uZXcgWnMsSEw9bmV3IFpzLG5FPW5ldyBhLHFMPW5ldyBhLG9FPW5ldyBhLEtMPVtuZXcgZ3QsbmV3IGd0XSxsRT1bMCwyLDEsMCwzLDIsMCw3LDMsMCw0LDcsMCw1LDQsMCwxLDUsNSw3LDQsNSw2LDcsNSwyLDYsNSwxLDIsMyw2LDIsMyw3LDZdLHJFPWxFLmxlbmd0aDtFcy5fcHJvamVjdE5vcm1hbD1aZjtaXz1Fc30pO3ZhciBRXz17fTtkZShRXyx7ZGVmYXVsdDooKT0+WUx9KTtmdW5jdGlvbiBYTCh0LGUpe3JldHVybiBFZC5pbml0aWFsaXplKCkudGhlbihmdW5jdGlvbigpe3JldHVybiBoKGUpJiYodD1aXy51bnBhY2sodCxlKSksWl8uY3JlYXRlR2VvbWV0cnkodCl9KX12YXIgWUwsSl89JCgoKT0+e3pfKCk7ZnQoKTtwRSgpO1lMPVhMfSk7ZnVuY3Rpb24gUmEodCl7dD10Pz9JdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC52ZXJ0ZXhGb3JtYXQ/P3B0LkRFRkFVTFQ7dGhpcy5fdmVydGV4Rm9ybWF0PWUsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlUGxhbmVHZW9tZXRyeSJ9dmFyIGRFLCRMLFBkLE1kLHR5LG1FPSQoKCk9Pnt2ZSgpO0x0KCk7V3QoKTtEZSgpO3llKCk7ZnQoKTtYZSgpO1llKCk7YW4oKTt0bigpO1JvKCk7UmEucGFja2VkTGVuZ3RoPXB0LnBhY2tlZExlbmd0aDtSYS5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj1uPz8wLHB0LnBhY2sodC5fdmVydGV4Rm9ybWF0LGUsbiksZX07ZEU9bmV3IHB0LCRMPXt2ZXJ0ZXhGb3JtYXQ6ZEV9O1JhLnVucGFjaz1mdW5jdGlvbih0LGUsbil7eS5kZWZpbmVkKCJhcnJheSIsdCksZT1lPz8wO2xldCBvPXB0LnVucGFjayh0LGUsZEUpO3JldHVybiBoKG4pPyhuLl92ZXJ0ZXhGb3JtYXQ9cHQuY2xvbmUobyxuLl92ZXJ0ZXhGb3JtYXQpLG4pOm5ldyBSYSgkTCl9O1BkPW5ldyBhKC0uNSwtLjUsMCksTWQ9bmV3IGEoLjUsLjUsMCk7UmEuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7bGV0IGU9dC5fdmVydGV4Rm9ybWF0LG49bmV3IGllLG8scjtpZihlLnBvc2l0aW9uKXtpZihyPW5ldyBGbG9hdDY0QXJyYXkoNCozKSxyWzBdPVBkLngsclsxXT1QZC55LHJbMl09MCxyWzNdPU1kLngscls0XT1QZC55LHJbNV09MCxyWzZdPU1kLngscls3XT1NZC55LHJbOF09MCxyWzldPVBkLngsclsxMF09TWQueSxyWzExXT0wLG4ucG9zaXRpb249bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpyfSksZS5ub3JtYWwpe2xldCBpPW5ldyBGbG9hdDMyQXJyYXkoMTIpO2lbMF09MCxpWzFdPTAsaVsyXT0xLGlbM109MCxpWzRdPTAsaVs1XT0xLGlbNl09MCxpWzddPTAsaVs4XT0xLGlbOV09MCxpWzEwXT0wLGlbMTFdPTEsbi5ub3JtYWw9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOml9KX1pZihlLnN0KXtsZXQgaT1uZXcgRmxvYXQzMkFycmF5KDgpO2lbMF09MCxpWzFdPTAsaVsyXT0xLGlbM109MCxpWzRdPTEsaVs1XT0xLGlbNl09MCxpWzddPTEsbi5zdD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6aX0pfWlmKGUudGFuZ2VudCl7bGV0IGk9bmV3IEZsb2F0MzJBcnJheSgxMik7aVswXT0xLGlbMV09MCxpWzJdPTAsaVszXT0xLGlbNF09MCxpWzVdPTAsaVs2XT0xLGlbN109MCxpWzhdPTAsaVs5XT0xLGlbMTBdPTAsaVsxMV09MCxuLnRhbmdlbnQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOml9KX1pZihlLmJpdGFuZ2VudCl7bGV0IGk9bmV3IEZsb2F0MzJBcnJheSgxMik7aVswXT0wLGlbMV09MSxpWzJdPTAsaVszXT0wLGlbNF09MSxpWzVdPTAsaVs2XT0wLGlbN109MSxpWzhdPTAsaVs5XT0wLGlbMTBdPTEsaVsxMV09MCxuLmJpdGFuZ2VudD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6aX0pfW89bmV3IFVpbnQxNkFycmF5KDIqMyksb1swXT0wLG9bMV09MSxvWzJdPTIsb1szXT0wLG9bNF09MixvWzVdPTN9cmV0dXJuIG5ldyBCdCh7YXR0cmlidXRlczpuLGluZGljZXM6byxwcmltaXRpdmVUeXBlOkR0LlRSSUFOR0xFUyxib3VuZGluZ1NwaGVyZTpuZXcgZ3QoYS5aRVJPLE1hdGguc3FydCgyKSl9KX07dHk9UmF9KTt2YXIgZXk9e307ZGUoZXkse2RlZmF1bHQ6KCk9PlFMfSk7ZnVuY3Rpb24gWkwodCxlKXtyZXR1cm4gaChlKSYmKHQ9dHkudW5wYWNrKHQsZSkpLHR5LmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBRTCxueT0kKCgpPT57ZnQoKTttRSgpO1FMPVpMfSk7ZnVuY3Rpb24gU2EoKXt0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVQbGFuZU91dGxpbmVHZW9tZXRyeSJ9dmFyIFJzLE5kLG95LGhFPSQoKCk9Pnt2ZSgpO0x0KCk7V3QoKTtEZSgpO2Z0KCk7WGUoKTtZZSgpO2FuKCk7dG4oKTtTYS5wYWNrZWRMZW5ndGg9MDtTYS5wYWNrPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkuZGVmaW5lZCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLGV9O1NhLnVucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkuZGVmaW5lZCgiYXJyYXkiLHQpLGgobik/bjpuZXcgU2F9O1JzPW5ldyBhKC0uNSwtLjUsMCksTmQ9bmV3IGEoLjUsLjUsMCk7U2EuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24oKXtsZXQgdD1uZXcgaWUsZT1uZXcgVWludDE2QXJyYXkoNCoyKSxuPW5ldyBGbG9hdDY0QXJyYXkoNCozKTtyZXR1cm4gblswXT1Scy54LG5bMV09UnMueSxuWzJdPVJzLnosblszXT1OZC54LG5bNF09UnMueSxuWzVdPVJzLnosbls2XT1OZC54LG5bN109TmQueSxuWzhdPVJzLnosbls5XT1Scy54LG5bMTBdPU5kLnksblsxMV09UnMueix0LnBvc2l0aW9uPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6bn0pLGVbMF09MCxlWzFdPTEsZVsyXT0xLGVbM109MixlWzRdPTIsZVs1XT0zLGVbNl09MyxlWzddPTAsbmV3IEJ0KHthdHRyaWJ1dGVzOnQsaW5kaWNlczplLHByaW1pdGl2ZVR5cGU6RHQuTElORVMsYm91bmRpbmdTcGhlcmU6bmV3IGd0KGEuWkVSTyxNYXRoLnNxcnQoMikpfSl9O295PVNhfSk7dmFyIHJ5PXt9O2RlKHJ5LHtkZWZhdWx0OigpPT50RH0pO2Z1bmN0aW9uIEpMKHQsZSl7cmV0dXJuIGgoZSkmJih0PW95LnVucGFjayh0LGUpKSxveS5jcmVhdGVHZW9tZXRyeSh0KX12YXIgdEQsaXk9JCgoKT0+e2Z0KCk7aEUoKTt0RD1KTH0pO2Z1bmN0aW9uIEZuKHQsZSl7dGhpcy5wb3NpdGlvbj10LGgodGhpcy5wb3NpdGlvbil8fCh0aGlzLnBvc2l0aW9uPW5ldyBKKSx0aGlzLnRhbmdlbnRQbGFuZT1lLGgodGhpcy50YW5nZW50UGxhbmUpfHwodGhpcy50YW5nZW50UGxhbmU9Rm4uTk9SVEhfUE9MRV9UQU5HRU5UX1BMQU5FKX12YXIgQ2EsZUQsbkQsb0QsckQsY3IsX0U9JCgoKT0+e1VlKCk7THQoKTtJZSgpO1d0KCk7ZnQoKTskdCgpO2xhKCk7dGMoKTtLdCgpO1VwKCk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRm4ucHJvdG90eXBlLHtlbGxpcHNvaWQ6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnRhbmdlbnRQbGFuZS5lbGxpcHNvaWR9fSx4OntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wb3NpdGlvbi54fX0seTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zaXRpb24ueX19LGNvbmZvcm1hbExhdGl0dWRlOntnZXQ6ZnVuY3Rpb24oKXtsZXQgdD1KLm1hZ25pdHVkZSh0aGlzLnBvc2l0aW9uKSxlPTIqdGhpcy5lbGxpcHNvaWQubWF4aW11bVJhZGl1cztyZXR1cm4gdGhpcy50YW5nZW50UGxhbmUucGxhbmUubm9ybWFsLnoqKFAuUElfT1ZFUl9UV08tMipNYXRoLmF0YW4yKHQsZSkpfX0sbG9uZ2l0dWRlOntnZXQ6ZnVuY3Rpb24oKXtsZXQgdD1QLlBJX09WRVJfVFdPK01hdGguYXRhbjIodGhpcy55LHRoaXMueCk7cmV0dXJuIHQ+TWF0aC5QSSYmKHQtPVAuVFdPX1BJKSx0fX19KTtDYT1uZXcgY3QsZUQ9bmV3IGE7Rm4ucHJvdG90eXBlLmdldExhdGl0dWRlPWZ1bmN0aW9uKHQpe2godCl8fCh0PVkuZGVmYXVsdCksQ2EubGF0aXR1ZGU9dGhpcy5jb25mb3JtYWxMYXRpdHVkZSxDYS5sb25naXR1ZGU9dGhpcy5sb25naXR1ZGUsQ2EuaGVpZ2h0PTA7bGV0IGU9dGhpcy5lbGxpcHNvaWQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oQ2EsZUQpO3JldHVybiB0LmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKGUsQ2EpLENhLmxhdGl0dWRlfTtuRD1uZXcgUXMsb0Q9bmV3IGEsckQ9bmV3IGE7Rm4uZnJvbUNhcnRlc2lhbj1mdW5jdGlvbih0LGUpe3kuZGVmaW5lZCgiY2FydGVzaWFuIix0KTtsZXQgbj1QLnNpZ25Ob3RaZXJvKHQueiksbz1Gbi5OT1JUSF9QT0xFX1RBTkdFTlRfUExBTkUscj1Gbi5TT1VUSF9QT0xFO248MCYmKG89Rm4uU09VVEhfUE9MRV9UQU5HRU5UX1BMQU5FLHI9Rm4uTk9SVEhfUE9MRSk7bGV0IGk9bkQ7aS5vcmlnaW49by5lbGxpcHNvaWQuc2NhbGVUb0dlb2NlbnRyaWNTdXJmYWNlKHQsaS5vcmlnaW4pLGkuZGlyZWN0aW9uPWEuc3VidHJhY3QoaS5vcmlnaW4scixvRCksYS5ub3JtYWxpemUoaS5kaXJlY3Rpb24saS5kaXJlY3Rpb24pO2xldCBzPWhvLnJheVBsYW5lKGksby5wbGFuZSxyRCksZj1hLnN1YnRyYWN0KHMscixzKSx1PWEuZG90KG8ueEF4aXMsZiksYz1uKmEuZG90KG8ueUF4aXMsZik7cmV0dXJuIGgoZSk/KGUucG9zaXRpb249bmV3IEoodSxjKSxlLnRhbmdlbnRQbGFuZT1vLGUpOm5ldyBGbihuZXcgSih1LGMpLG8pfTtGbi5mcm9tQ2FydGVzaWFuQXJyYXk9ZnVuY3Rpb24odCxlKXt5LmRlZmluZWQoImNhcnRlc2lhbnMiLHQpO2xldCBuPXQubGVuZ3RoO2goZSk/ZS5sZW5ndGg9bjplPW5ldyBBcnJheShuKTtmb3IobGV0IG89MDtvPG47bysrKWVbb109Rm4uZnJvbUNhcnRlc2lhbih0W29dLGVbb10pO3JldHVybiBlfTtGbi5jbG9uZT1mdW5jdGlvbih0LGUpe2lmKGgodCkpcmV0dXJuIGgoZSk/KGUucG9zaXRpb249dC5wb3NpdGlvbixlLnRhbmdlbnRQbGFuZT10LnRhbmdlbnRQbGFuZSxlKTpuZXcgRm4odC5wb3NpdGlvbix0LnRhbmdlbnRQbGFuZSl9O0ZuLkhBTEZfVU5JVF9TUEhFUkU9T2JqZWN0LmZyZWV6ZShuZXcgWSguNSwuNSwuNSkpO0ZuLk5PUlRIX1BPTEU9T2JqZWN0LmZyZWV6ZShuZXcgYSgwLDAsLjUpKTtGbi5TT1VUSF9QT0xFPU9iamVjdC5mcmVlemUobmV3IGEoMCwwLC0uNSkpO0ZuLk5PUlRIX1BPTEVfVEFOR0VOVF9QTEFORT1PYmplY3QuZnJlZXplKG5ldyB5byhGbi5OT1JUSF9QT0xFLEZuLkhBTEZfVU5JVF9TUEhFUkUpKTtGbi5TT1VUSF9QT0xFX1RBTkdFTlRfUExBTkU9T2JqZWN0LmZyZWV6ZShuZXcgeW8oRm4uU09VVEhfUE9MRSxGbi5IQUxGX1VOSVRfU1BIRVJFKSk7Y3I9Rm59KTtmdW5jdGlvbiBzRCh0LGUsbixvKXtsZXQgaT1vLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHQsaUQpLmhlaWdodCxzPW8uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMoZSx5RSk7cy5oZWlnaHQ9aSxvLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKHMsZSk7bGV0IGY9by5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhuLHlFKTtmLmhlaWdodD1pLTEwMCxvLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGYsbil9ZnVuY3Rpb24gc3kodCl7bGV0IGU9dC52ZXJ0ZXhGb3JtYXQsbj10Lmdlb21ldHJ5LG89dC5zaGFkb3dWb2x1bWUscj1uLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLGk9aChuLmF0dHJpYnV0ZXMuc3QpP24uYXR0cmlidXRlcy5zdC52YWx1ZXM6dm9pZCAwLHM9ci5sZW5ndGgsZj10LndhbGwsdT10LnRvcHx8ZixjPXQuYm90dG9tfHxmO2lmKGUuc3R8fGUubm9ybWFsfHxlLnRhbmdlbnR8fGUuYml0YW5nZW50fHxvKXtsZXQgbD10LmJvdW5kaW5nUmVjdGFuZ2xlLHA9dC5yb3RhdGlvbkF4aXMsZD10LnByb2plY3RUbzJkLG09dC5lbGxpcHNvaWQsXz10LnN0Um90YXRpb24sZz10LnBlclBvc2l0aW9uSGVpZ2h0LGI9ZEQ7Yi54PWwueCxiLnk9bC55O2xldCBUPWUuc3Q/bmV3IEZsb2F0MzJBcnJheSgyKihzLzMpKTp2b2lkIDAsTztlLm5vcm1hbCYmKGcmJnUmJiFmP089bi5hdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZXM6Tz1uZXcgRmxvYXQzMkFycmF5KHMpKTtsZXQgRT1lLnRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShzKTp2b2lkIDAsdz1lLmJpdGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KHMpOnZvaWQgMCxDPW8/bmV3IEZsb2F0MzJBcnJheShzKTp2b2lkIDAsTT0wLE49MCxGPWFELEk9ZkQsdj11RCxCPSEwLEE9X0QsUz15RDtpZihfIT09MCl7bGV0IHo9dGUuZnJvbUF4aXNBbmdsZShwLF8sQUUpO0E9Wi5mcm9tUXVhdGVybmlvbih6LEEpLHo9dGUuZnJvbUF4aXNBbmdsZShwLC1fLEFFKSxTPVouZnJvbVF1YXRlcm5pb24oeixTKX1lbHNlIEE9Wi5jbG9uZShaLklERU5USVRZLEEpLFM9Wi5jbG9uZShaLklERU5USVRZLFMpO2xldCB4PTAsTD0wO3UmJmMmJih4PXMvMixMPXMvMyxzLz0yKTtmb3IobGV0IHo9MDt6PHM7eis9Myl7bGV0IGo9YS5mcm9tQXJyYXkocix6LGhEKTtpZihlLnN0JiYhaChpKSl7bGV0IGs9Wi5tdWx0aXBseUJ5VmVjdG9yKEEsaixjRCk7az1tLnNjYWxlVG9HZW9kZXRpY1N1cmZhY2UoayxrKTtsZXQgcT1kKFtrXSxtRClbMF07Si5zdWJ0cmFjdChxLGIscSk7bGV0IFc9UC5jbGFtcChxLngvbC53aWR0aCwwLDEpLFI9UC5jbGFtcChxLnkvbC5oZWlnaHQsMCwxKTtjJiYoVFtNK0xdPVcsVFtNKzErTF09UiksdSYmKFRbTV09VyxUW00rMV09UiksTSs9Mn1pZihlLm5vcm1hbHx8ZS50YW5nZW50fHxlLmJpdGFuZ2VudHx8byl7bGV0IGs9TisxLHE9TisyO2lmKGYpe2lmKHorMzxzKXtsZXQgVz1hLmZyb21BcnJheShyLHorMyxsRCk7aWYoQil7bGV0IFI9YS5mcm9tQXJyYXkocix6K3MscEQpO2cmJnNEKGosVyxSLG0pLGEuc3VidHJhY3QoVyxqLFcpLGEuc3VidHJhY3QoUixqLFIpLEY9YS5ub3JtYWxpemUoYS5jcm9zcyhSLFcsRiksRiksQj0hMX1hLmVxdWFsc0Vwc2lsb24oVyxqLFAuRVBTSUxPTjEwKSYmKEI9ITApfShlLnRhbmdlbnR8fGUuYml0YW5nZW50KSYmKHY9bS5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoaix2KSxlLnRhbmdlbnQmJihJPWEubm9ybWFsaXplKGEuY3Jvc3ModixGLEkpLEkpKSl9ZWxzZSBGPW0uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGosRiksKGUudGFuZ2VudHx8ZS5iaXRhbmdlbnQpJiYoZyYmKElkPWEuZnJvbUFycmF5KE8sTixJZCksZGk9YS5jcm9zcyhhLlVOSVRfWixJZCxkaSksZGk9YS5ub3JtYWxpemUoWi5tdWx0aXBseUJ5VmVjdG9yKFMsZGksZGkpLGRpKSxlLmJpdGFuZ2VudCYmKHhhPWEubm9ybWFsaXplKGEuY3Jvc3MoSWQsZGkseGEpLHhhKSkpLEk9YS5jcm9zcyhhLlVOSVRfWixGLEkpLEk9YS5ub3JtYWxpemUoWi5tdWx0aXBseUJ5VmVjdG9yKFMsSSxJKSxJKSxlLmJpdGFuZ2VudCYmKHY9YS5ub3JtYWxpemUoYS5jcm9zcyhGLEksdiksdikpKTtlLm5vcm1hbCYmKHQud2FsbD8oT1tOK3hdPUYueCxPW2sreF09Ri55LE9bcSt4XT1GLnopOmMmJihPW04reF09LUYueCxPW2sreF09LUYueSxPW3EreF09LUYueiksKHUmJiFnfHxmKSYmKE9bTl09Ri54LE9ba109Ri55LE9bcV09Ri56KSksbyYmKGYmJihGPW0uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKGosRikpLENbTit4XT0tRi54LENbayt4XT0tRi55LENbcSt4XT0tRi56KSxlLnRhbmdlbnQmJih0LndhbGw/KEVbTit4XT1JLngsRVtrK3hdPUkueSxFW3EreF09SS56KTpjJiYoRVtOK3hdPS1JLngsRVtrK3hdPS1JLnksRVtxK3hdPS1JLnopLHUmJihnPyhFW05dPWRpLngsRVtrXT1kaS55LEVbcV09ZGkueik6KEVbTl09SS54LEVba109SS55LEVbcV09SS56KSkpLGUuYml0YW5nZW50JiYoYyYmKHdbTit4XT12Lngsd1trK3hdPXYueSx3W3EreF09di56KSx1JiYoZz8od1tOXT14YS54LHdba109eGEueSx3W3FdPXhhLnopOih3W05dPXYueCx3W2tdPXYueSx3W3FdPXYueikpKSxOKz0zfX1lLnN0JiYhaChpKSYmKG4uYXR0cmlidXRlcy5zdD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6VH0pKSxlLm5vcm1hbCYmKG4uYXR0cmlidXRlcy5ub3JtYWw9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOk99KSksZS50YW5nZW50JiYobi5hdHRyaWJ1dGVzLnRhbmdlbnQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOkV9KSksZS5iaXRhbmdlbnQmJihuLmF0dHJpYnV0ZXMuYml0YW5nZW50PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczp3fSkpLG8mJihuLmF0dHJpYnV0ZXMuZXh0cnVkZURpcmVjdGlvbj1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6Q30pKX1pZih0LmV4dHJ1ZGUmJmgodC5vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgbD1yLmxlbmd0aC8zLHA9bmV3IFVpbnQ4QXJyYXkobCk7aWYodC5vZmZzZXRBdHRyaWJ1dGU9PT1hZS5UT1ApdSYmY3x8Zj9wPXAuZmlsbCgxLDAsbC8yKTp1JiYocD1wLmZpbGwoMSkpO2Vsc2V7bGV0IGQ9dC5vZmZzZXRBdHRyaWJ1dGU9PT1hZS5OT05FPzA6MTtwPXAuZmlsbChkKX1uLmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6cH0pfXJldHVybiBufWZ1bmN0aW9uIGdEKHQsZSxuLG8scixpLHMsZix1LGMpe2xldCBsPXt3YWxsczpbXX0scDtpZihzfHxmKXtsZXQgTz1fZS5jcmVhdGVHZW9tZXRyeUZyb21Qb3NpdGlvbnModCxlLG4sbyxpLHUsYyksRT1PLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLHc9Ty5pbmRpY2VzLEMsTTtpZihzJiZmKXtsZXQgTj1FLmNvbmNhdChFKTtDPU4ubGVuZ3RoLzMsTT1GdC5jcmVhdGVUeXBlZEFycmF5KEMsdy5sZW5ndGgqMiksTS5zZXQodyk7bGV0IEY9dy5sZW5ndGgsST1DLzI7Zm9yKHA9MDtwPEY7cCs9Myl7bGV0IHY9TVtwXStJLEI9TVtwKzFdK0ksQT1NW3ArMl0rSTtNW3ArRl09QSxNW3ArMStGXT1CLE1bcCsyK0ZdPXZ9aWYoTy5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcz1OLGkmJnUubm9ybWFsKXtsZXQgdj1PLmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlcztPLmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlcz1uZXcgRmxvYXQzMkFycmF5KE4ubGVuZ3RoKSxPLmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlcy5zZXQodil9aWYodS5zdCYmaChuKSl7bGV0IHY9Ty5hdHRyaWJ1dGVzLnN0LnZhbHVlcztPLmF0dHJpYnV0ZXMuc3QudmFsdWVzPW5ldyBGbG9hdDMyQXJyYXkoQyoyKSxPLmF0dHJpYnV0ZXMuc3QudmFsdWVzPXYuY29uY2F0KHYpfU8uaW5kaWNlcz1NfWVsc2UgaWYoZil7Zm9yKEM9RS5sZW5ndGgvMyxNPUZ0LmNyZWF0ZVR5cGVkQXJyYXkoQyx3Lmxlbmd0aCkscD0wO3A8dy5sZW5ndGg7cCs9MylNW3BdPXdbcCsyXSxNW3ArMV09d1twKzFdLE1bcCsyXT13W3BdO08uaW5kaWNlcz1NfWwudG9wQW5kQm90dG9tPW5ldyBjbyh7Z2VvbWV0cnk6T30pfWxldCBkPXIub3V0ZXJSaW5nLG09eW8uZnJvbVBvaW50cyhkLHQpLF89bS5wcm9qZWN0UG9pbnRzT250b1BsYW5lKGQsYkUpLGc9UGUuY29tcHV0ZVdpbmRpbmdPcmRlcjJEKF8pO2c9PT1Dby5DTE9DS1dJU0UmJihkPWQuc2xpY2UoKS5yZXZlcnNlKCkpO2xldCBiPV9lLmNvbXB1dGVXYWxsR2VvbWV0cnkoZCxuLHQsbyxpLGMpO2wud2FsbHMucHVzaChuZXcgY28oe2dlb21ldHJ5OmJ9KSk7bGV0IFQ9ci5ob2xlcztmb3IocD0wO3A8VC5sZW5ndGg7cCsrKXtsZXQgTz1UW3BdO189bS5wcm9qZWN0UG9pbnRzT250b1BsYW5lKE8sYkUpLGc9UGUuY29tcHV0ZVdpbmRpbmdPcmRlcjJEKF8pLGc9PT1Dby5DT1VOVEVSX0NMT0NLV0lTRSYmKE89Ty5zbGljZSgpLnJldmVyc2UoKSksYj1fZS5jb21wdXRlV2FsbEdlb21ldHJ5KE8sbix0LG8saSxjKSxsLndhbGxzLnB1c2gobmV3IGNvKHtnZW9tZXRyeTpifSkpfXJldHVybiBsfWZ1bmN0aW9uIFJyKHQpe2lmKHkudHlwZU9mLm9iamVjdCgib3B0aW9ucyIsdCkseS50eXBlT2Yub2JqZWN0KCJvcHRpb25zLnBvbHlnb25IaWVyYXJjaHkiLHQucG9seWdvbkhpZXJhcmNoeSksaCh0LnBlclBvc2l0aW9uSGVpZ2h0KSYmdC5wZXJQb3NpdGlvbkhlaWdodCYmaCh0LmhlaWdodCkpdGhyb3cgbmV3IEQoIkNhbm5vdCB1c2UgYm90aCBvcHRpb25zLnBlclBvc2l0aW9uSGVpZ2h0IGFuZCBvcHRpb25zLmhlaWdodCIpO2lmKGgodC5hcmNUeXBlKSYmdC5hcmNUeXBlIT09aGUuR0VPREVTSUMmJnQuYXJjVHlwZSE9PWhlLlJIVU1CKXRocm93IG5ldyBEKCJJbnZhbGlkIGFyY1R5cGUuIFZhbGlkIG9wdGlvbnMgYXJlIEFyY1R5cGUuR0VPREVTSUMgYW5kIEFyY1R5cGUuUkhVTUIuIik7bGV0IGU9dC5wb2x5Z29uSGllcmFyY2h5LG49dC52ZXJ0ZXhGb3JtYXQ/P3B0LkRFRkFVTFQsbz10LmVsbGlwc29pZD8/WS5kZWZhdWx0LHI9dC5ncmFudWxhcml0eT8/UC5SQURJQU5TX1BFUl9ERUdSRUUsaT10LnN0Um90YXRpb24/PzAscz10LnRleHR1cmVDb29yZGluYXRlcyxmPXQucGVyUG9zaXRpb25IZWlnaHQ/PyExLHU9ZiYmaCh0LmV4dHJ1ZGVkSGVpZ2h0KSxjPXQuaGVpZ2h0Pz8wLGw9dC5leHRydWRlZEhlaWdodD8/YztpZighdSl7bGV0IHA9TWF0aC5tYXgoYyxsKTtsPU1hdGgubWluKGMsbCksYz1wfXRoaXMuX3ZlcnRleEZvcm1hdD1wdC5jbG9uZShuKSx0aGlzLl9lbGxpcHNvaWQ9WS5jbG9uZShvKSx0aGlzLl9ncmFudWxhcml0eT1yLHRoaXMuX3N0Um90YXRpb249aSx0aGlzLl9oZWlnaHQ9Yyx0aGlzLl9leHRydWRlZEhlaWdodD1sLHRoaXMuX2Nsb3NlVG9wPXQuY2xvc2VUb3A/PyEwLHRoaXMuX2Nsb3NlQm90dG9tPXQuY2xvc2VCb3R0b20/PyEwLHRoaXMuX3BvbHlnb25IaWVyYXJjaHk9ZSx0aGlzLl9wZXJQb3NpdGlvbkhlaWdodD1mLHRoaXMuX3BlclBvc2l0aW9uSGVpZ2h0RXh0cnVkZT11LHRoaXMuX3NoYWRvd1ZvbHVtZT10LnNoYWRvd1ZvbHVtZT8/ITEsdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlUG9seWdvbkdlb21ldHJ5Iix0aGlzLl9vZmZzZXRBdHRyaWJ1dGU9dC5vZmZzZXRBdHRyaWJ1dGUsdGhpcy5fYXJjVHlwZT10LmFyY1R5cGU/P2hlLkdFT0RFU0lDLHRoaXMuX3JlY3RhbmdsZT12b2lkIDAsdGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50cz12b2lkIDAsdGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVzPXMsdGhpcy5wYWNrZWRMZW5ndGg9X2UuY29tcHV0ZUhpZXJhcmNoeVBhY2tlZExlbmd0aChlLGEpK1kucGFja2VkTGVuZ3RoK3B0LnBhY2tlZExlbmd0aCsocz9fZS5jb21wdXRlSGllcmFyY2h5UGFja2VkTGVuZ3RoKHMsSik6MSkrMTJ9ZnVuY3Rpb24gVEUodCxlLG4sbyxyLGkpe2xldCBzPXQubG9uZ2l0dWRlLGY9cz49MD9zOnMrUC5UV09fUEk7ci53ZXN0T3ZlcklkbD1NYXRoLm1pbihyLndlc3RPdmVySWRsLGYpLHIuZWFzdE92ZXJJZGw9TWF0aC5tYXgoci5lYXN0T3ZlcklkbCxmKSxpLndlc3Q9TWF0aC5taW4oaS53ZXN0LHMpLGkuZWFzdD1NYXRoLm1heChpLmVhc3Qscyk7bGV0IHU9dC5nZXRMYXRpdHVkZShuKSxjPXU7aWYoaS5zb3V0aD1NYXRoLm1pbihpLnNvdXRoLHUpLGkubm9ydGg9TWF0aC5tYXgoaS5ub3J0aCx1KSxvIT09aGUuUkhVTUIpe2xldCBkPUouc3VidHJhY3QoZS5wb3NpdGlvbix0LnBvc2l0aW9uLHdEKSxtPUouZG90KGUucG9zaXRpb24sZCkvSi5kb3QoZCxkKTtpZihtPjAmJm08MSl7bGV0IF89Si5hZGQoZS5wb3NpdGlvbixKLm11bHRpcGx5QnlTY2FsYXIoZCwtbSxkKSxPRCksZz1jci5jbG9uZShlLEVEKTtnLnBvc2l0aW9uPV87bGV0IGI9Zy5nZXRMYXRpdHVkZShuKTtpLnNvdXRoPU1hdGgubWluKGkuc291dGgsYiksaS5ub3J0aD1NYXRoLm1heChpLm5vcnRoLGIpLE1hdGguYWJzKHUpPk1hdGguYWJzKGIpJiYoYz1iKX19bGV0IGw9ZS54KnQueS10LngqZS55LHA9TWF0aC5zaWduKGwpO3AhPT0wJiYocCo9Si5hbmdsZUJldHdlZW4oZS5wb3NpdGlvbix0LnBvc2l0aW9uKSksYz49MCYmKHIubm9ydGhBbmdsZSs9cCksYzw9MCYmKHIuc291dGhBbmdsZSs9cCl9ZnVuY3Rpb24gQ0QodCxlLG4pe3JldHVybiB0LmhlaWdodD49UC5QSXx8dC53aWR0aD49UC5QST9jci5mcm9tQ2FydGVzaWFuKGVbMF0sU0QpLnRhbmdlbnRQbGFuZTp5by5mcm9tUG9pbnRzKGUsbil9ZnVuY3Rpb24geEQodCxlLG4pe3JldHVybihvLHIpPT57aWYodC5oZWlnaHQ+PVAuUEl8fHQud2lkdGg+PVAuUEkpe2lmKHQuc291dGg8MCYmdC5ub3J0aD4wKXtoKHIpfHwocj1bXSk7Zm9yKGxldCBzPTA7czxvLmxlbmd0aDsrK3Mpe2xldCBmPW4uY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMob1tzXSxPRSk7cltzXT1uZXcgSihmLmxvbmdpdHVkZS9QLlBJLGYubGF0aXR1ZGUvUC5QSV9PVkVSX1RXTyl9cmV0dXJuIHIubGVuZ3RoPW8ubGVuZ3RoLHJ9cmV0dXJuIGNyLmZyb21DYXJ0ZXNpYW5BcnJheShvLHIpfXJldHVybiB5by5mcm9tUG9pbnRzKGUsbikucHJvamVjdFBvaW50c09udG9QbGFuZShvLHIpfX1mdW5jdGlvbiBQRCh0LGUsbil7aWYodC5oZWlnaHQ+PVAuUEl8fHQud2lkdGg+PVAuUEkpcmV0dXJuKHIsaSk9PntpZih0LnNvdXRoPDAmJnQubm9ydGg+MCl7bGV0IHM9bi5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhyLE9FKTtyZXR1cm4gaChpKXx8KGk9bmV3IEopLGkueD1zLmxvbmdpdHVkZS9QLlBJLGkueT1zLmxhdGl0dWRlL1AuUElfT1ZFUl9UV08saX1yZXR1cm4gY3IuZnJvbUNhcnRlc2lhbihyLGkpfTtsZXQgbz15by5mcm9tUG9pbnRzKGUsbik7cmV0dXJuKHIsaSk9Pm8ucHJvamVjdFBvaW50c09udG9QbGFuZShyLGkpfWZ1bmN0aW9uIE1EKHQsZSxuLG8pe3JldHVybihyLGkpPT4hbyYmKHQuaGVpZ2h0Pj1QLlBJX09WRVJfVFdPfHx0LndpZHRoPj0yKlAuUElfT1ZFUl9USFJFRSk/X2Uuc3BsaXRQb2x5Z29uc09uRXF1YXRvcihyLGUsbixpKTpyfWZ1bmN0aW9uIE5EKHQsZSxuLG8pe2lmKGUuaGVpZ2h0Pj1QLlBJfHxlLndpZHRoPj1QLlBJKXJldHVybiBIci5mcm9tUmVjdGFuZ2xlKGUsdm9pZCAwLGdFKTtsZXQgcj10LGk9eW8uZnJvbVBvaW50cyhyLG4pO3JldHVybiBfZS5jb21wdXRlQm91bmRpbmdSZWN0YW5nbGUoaS5wbGFuZS5ub3JtYWwsaS5wcm9qZWN0UG9pbnRPbnRvUGxhbmUuYmluZChpKSxyLG8sZ0UpfWZ1bmN0aW9uIElEKHQpe2xldCBlPS10Ll9zdFJvdGF0aW9uO2lmKGU9PT0wKXJldHVyblswLDAsMCwxLDEsMF07bGV0IG49dC5fZWxsaXBzb2lkLG89dC5fcG9seWdvbkhpZXJhcmNoeS5wb3NpdGlvbnMscj10LnJlY3RhbmdsZTtyZXR1cm4gQnQuX3RleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHMobyxlLG4scil9dmFyIGlELHlFLGdFLGNELGFELGZELHVELGxELHBELElkLGRpLHhhLGRELG1ELGhELEFFLF9ELHlELGJFLEFELGJELFRELHdELE9ELEVELHdFLFJELEVyLFNELE9FLGN5LEVFPSQoKCk9PntmYygpO0NmKCk7dmUoKTtVZSgpO0x0KCk7SWUoKTtXdCgpO0RlKCk7eWUoKTtmdCgpO2p0KCk7JHQoKTtsYSgpO1hlKCk7WWUoKTtzYygpO0ZvKCk7c2koKTskZSgpO0t0KCk7Qm4oKTtMZigpO3FyKCk7S28oKTt3bigpO19FKCk7Um8oKTtsYygpO2lEPW5ldyBjdCx5RT1uZXcgY3Q7Z0U9bmV3IEhyLGNEPW5ldyBhLGFEPW5ldyBhLGZEPW5ldyBhLHVEPW5ldyBhLGxEPW5ldyBhLHBEPW5ldyBhLElkPW5ldyBhLGRpPW5ldyBhLHhhPW5ldyBhLGREPW5ldyBKLG1EPW5ldyBKLGhEPW5ldyBhLEFFPW5ldyB0ZSxfRD1uZXcgWix5RD1uZXcgWjtiRT1bXTtSci5mcm9tUG9zaXRpb25zPWZ1bmN0aW9uKHQpe3Q9dD8/SXQuRU1QVFlfT0JKRUNULHkuZGVmaW5lZCgib3B0aW9ucy5wb3NpdGlvbnMiLHQucG9zaXRpb25zKTtsZXQgZT17cG9seWdvbkhpZXJhcmNoeTp7cG9zaXRpb25zOnQucG9zaXRpb25zfSxoZWlnaHQ6dC5oZWlnaHQsZXh0cnVkZWRIZWlnaHQ6dC5leHRydWRlZEhlaWdodCx2ZXJ0ZXhGb3JtYXQ6dC52ZXJ0ZXhGb3JtYXQsc3RSb3RhdGlvbjp0LnN0Um90YXRpb24sZWxsaXBzb2lkOnQuZWxsaXBzb2lkLGdyYW51bGFyaXR5OnQuZ3JhbnVsYXJpdHkscGVyUG9zaXRpb25IZWlnaHQ6dC5wZXJQb3NpdGlvbkhlaWdodCxjbG9zZVRvcDp0LmNsb3NlVG9wLGNsb3NlQm90dG9tOnQuY2xvc2VCb3R0b20sb2Zmc2V0QXR0cmlidXRlOnQub2Zmc2V0QXR0cmlidXRlLGFyY1R5cGU6dC5hcmNUeXBlLHRleHR1cmVDb29yZGluYXRlczp0LnRleHR1cmVDb29yZGluYXRlc307cmV0dXJuIG5ldyBScihlKX07UnIucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLG49bj8/MCxuPV9lLnBhY2tQb2x5Z29uSGllcmFyY2h5KHQuX3BvbHlnb25IaWVyYXJjaHksZSxuLGEpLFkucGFjayh0Ll9lbGxpcHNvaWQsZSxuKSxuKz1ZLnBhY2tlZExlbmd0aCxwdC5wYWNrKHQuX3ZlcnRleEZvcm1hdCxlLG4pLG4rPXB0LnBhY2tlZExlbmd0aCxlW24rK109dC5faGVpZ2h0LGVbbisrXT10Ll9leHRydWRlZEhlaWdodCxlW24rK109dC5fZ3JhbnVsYXJpdHksZVtuKytdPXQuX3N0Um90YXRpb24sZVtuKytdPXQuX3BlclBvc2l0aW9uSGVpZ2h0RXh0cnVkZT8xOjAsZVtuKytdPXQuX3BlclBvc2l0aW9uSGVpZ2h0PzE6MCxlW24rK109dC5fY2xvc2VUb3A/MTowLGVbbisrXT10Ll9jbG9zZUJvdHRvbT8xOjAsZVtuKytdPXQuX3NoYWRvd1ZvbHVtZT8xOjAsZVtuKytdPXQuX29mZnNldEF0dHJpYnV0ZT8/LTEsZVtuKytdPXQuX2FyY1R5cGUsaCh0Ll90ZXh0dXJlQ29vcmRpbmF0ZXMpP249X2UucGFja1BvbHlnb25IaWVyYXJjaHkodC5fdGV4dHVyZUNvb3JkaW5hdGVzLGUsbixKKTplW24rK109LTEsZVtuKytdPXQucGFja2VkTGVuZ3RoLGV9O0FEPVkuY2xvbmUoWS5VTklUX1NQSEVSRSksYkQ9bmV3IHB0LFREPXtwb2x5Z29uSGllcmFyY2h5Ont9fTtSci51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3kuZGVmaW5lZCgiYXJyYXkiLHQpLGU9ZT8/MDtsZXQgbz1fZS51bnBhY2tQb2x5Z29uSGllcmFyY2h5KHQsZSxhKTtlPW8uc3RhcnRpbmdJbmRleCxkZWxldGUgby5zdGFydGluZ0luZGV4O2xldCByPVkudW5wYWNrKHQsZSxBRCk7ZSs9WS5wYWNrZWRMZW5ndGg7bGV0IGk9cHQudW5wYWNrKHQsZSxiRCk7ZSs9cHQucGFja2VkTGVuZ3RoO2xldCBzPXRbZSsrXSxmPXRbZSsrXSx1PXRbZSsrXSxjPXRbZSsrXSxsPXRbZSsrXT09PTEscD10W2UrK109PT0xLGQ9dFtlKytdPT09MSxtPXRbZSsrXT09PTEsXz10W2UrK109PT0xLGc9dFtlKytdLGI9dFtlKytdLFQ9dFtlXT09PS0xP3ZvaWQgMDpfZS51bnBhY2tQb2x5Z29uSGllcmFyY2h5KHQsZSxKKTtoKFQpPyhlPVQuc3RhcnRpbmdJbmRleCxkZWxldGUgVC5zdGFydGluZ0luZGV4KTplKys7bGV0IE89dFtlKytdO3JldHVybiBoKG4pfHwobj1uZXcgUnIoVEQpKSxuLl9wb2x5Z29uSGllcmFyY2h5PW8sbi5fZWxsaXBzb2lkPVkuY2xvbmUocixuLl9lbGxpcHNvaWQpLG4uX3ZlcnRleEZvcm1hdD1wdC5jbG9uZShpLG4uX3ZlcnRleEZvcm1hdCksbi5faGVpZ2h0PXMsbi5fZXh0cnVkZWRIZWlnaHQ9ZixuLl9ncmFudWxhcml0eT11LG4uX3N0Um90YXRpb249YyxuLl9wZXJQb3NpdGlvbkhlaWdodEV4dHJ1ZGU9bCxuLl9wZXJQb3NpdGlvbkhlaWdodD1wLG4uX2Nsb3NlVG9wPWQsbi5fY2xvc2VCb3R0b209bSxuLl9zaGFkb3dWb2x1bWU9XyxuLl9vZmZzZXRBdHRyaWJ1dGU9Zz09PS0xP3ZvaWQgMDpnLG4uX2FyY1R5cGU9YixuLl90ZXh0dXJlQ29vcmRpbmF0ZXM9VCxuLnBhY2tlZExlbmd0aD1PLG59O3dEPW5ldyBKLE9EPW5ldyBKLEVEPW5ldyBjcjt3RT1uZXcgY3IsUkQ9bmV3IGNyLEVyPXtub3J0aEFuZ2xlOjAsc291dGhBbmdsZTowLHdlc3RPdmVySWRsOjAsZWFzdE92ZXJJZGw6MH07UnIuY29tcHV0ZVJlY3RhbmdsZUZyb21Qb3NpdGlvbnM9ZnVuY3Rpb24odCxlLG4sbyl7aWYoeS5kZWZpbmVkKCJwb3NpdGlvbnMiLHQpLGgobyl8fChvPW5ldyBOdCksdC5sZW5ndGg8MylyZXR1cm4gbztvLndlc3Q9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLG8uZWFzdD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksby5zb3V0aD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksby5ub3J0aD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksRXIubm9ydGhBbmdsZT0wLEVyLnNvdXRoQW5nbGU9MCxFci53ZXN0T3ZlcklkbD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksRXIuZWFzdE92ZXJJZGw9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO2xldCByPXQubGVuZ3RoLGk9Y3IuZnJvbUNhcnRlc2lhbih0WzBdLFJEKTtmb3IobGV0IHM9MTtzPHI7cysrKXtsZXQgZj1jci5mcm9tQ2FydGVzaWFuKHRbc10sd0UpO1RFKGYsaSxlLG4sRXIsbyksaT1jci5jbG9uZShmLGkpfXJldHVybiBURShjci5mcm9tQ2FydGVzaWFuKHRbMF0sd0UpLGksZSxuLEVyLG8pLG8uZWFzdC1vLndlc3Q+RXIuZWFzdE92ZXJJZGwtRXIud2VzdE92ZXJJZGwmJihvLndlc3Q9RXIud2VzdE92ZXJJZGwsby5lYXN0PUVyLmVhc3RPdmVySWRsLG8uZWFzdD5QLlBJJiYoby5lYXN0PW8uZWFzdC1QLlRXT19QSSksby53ZXN0PlAuUEkmJihvLndlc3Q9by53ZXN0LVAuVFdPX1BJKSksUC5lcXVhbHNFcHNpbG9uKE1hdGguYWJzKEVyLm5vcnRoQW5nbGUpLFAuVFdPX1BJLFAuRVBTSUxPTjEwKSYmKG8ubm9ydGg9UC5QSV9PVkVSX1RXTyxvLmVhc3Q9UC5QSSxvLndlc3Q9LVAuUEkpLFAuZXF1YWxzRXBzaWxvbihNYXRoLmFicyhFci5zb3V0aEFuZ2xlKSxQLlRXT19QSSxQLkVQU0lMT04xMCkmJihvLnNvdXRoPS1QLlBJX09WRVJfVFdPLG8uZWFzdD1QLlBJLG8ud2VzdD0tUC5QSSksb307U0Q9bmV3IGNyO09FPW5ldyBjdDtSci5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbih0KXtsZXQgZT10Ll92ZXJ0ZXhGb3JtYXQsbj10Ll9lbGxpcHNvaWQsbz10Ll9ncmFudWxhcml0eSxyPXQuX3N0Um90YXRpb24saT10Ll9wb2x5Z29uSGllcmFyY2h5LHM9dC5fcGVyUG9zaXRpb25IZWlnaHQsZj10Ll9jbG9zZVRvcCx1PXQuX2Nsb3NlQm90dG9tLGM9dC5fYXJjVHlwZSxsPXQuX3RleHR1cmVDb29yZGluYXRlcyxwPWgobCksZD1pLnBvc2l0aW9ucztpZihkLmxlbmd0aDwzKXJldHVybjtsZXQgbT10LnJlY3RhbmdsZSxfPV9lLnBvbHlnb25zRnJvbUhpZXJhcmNoeShpLHAseEQobSxkLG4pLCFzLG4sTUQobSxuLGMscykpLGc9Xy5oaWVyYXJjaHksYj1fLnBvbHlnb25zLFQ9ZnVuY3Rpb24oeCl7cmV0dXJuIHh9LE89cD9fZS5wb2x5Z29uc0Zyb21IaWVyYXJjaHkobCwhMCxULCExLG4pLnBvbHlnb25zOnZvaWQgMDtpZihnLmxlbmd0aD09PTApcmV0dXJuO2xldCBFPWdbMF0ub3V0ZXJSaW5nLHc9TkQoRSxtLG4sciksQz1bXSxNPXQuX2hlaWdodCxOPXQuX2V4dHJ1ZGVkSGVpZ2h0LEY9dC5fcGVyUG9zaXRpb25IZWlnaHRFeHRydWRlfHwhUC5lcXVhbHNFcHNpbG9uKE0sTiwwLFAuRVBTSUxPTjIpLEk9e3BlclBvc2l0aW9uSGVpZ2h0OnMsdmVydGV4Rm9ybWF0OmUsZ2VvbWV0cnk6dm9pZCAwLHJvdGF0aW9uQXhpczpDRChtLEUsbikucGxhbmUubm9ybWFsLHByb2plY3RUbzJkOlBEKG0sRSxuKSxib3VuZGluZ1JlY3RhbmdsZTp3LGVsbGlwc29pZDpuLHN0Um90YXRpb246cix0ZXh0dXJlQ29vcmRpbmF0ZXM6dm9pZCAwLGJvdHRvbTohMSx0b3A6ITAsd2FsbDohMSxleHRydWRlOiExLGFyY1R5cGU6Y30sdjtpZihGKWZvcihJLmV4dHJ1ZGU9ITAsSS50b3A9ZixJLmJvdHRvbT11LEkuc2hhZG93Vm9sdW1lPXQuX3NoYWRvd1ZvbHVtZSxJLm9mZnNldEF0dHJpYnV0ZT10Ll9vZmZzZXRBdHRyaWJ1dGUsdj0wO3Y8Yi5sZW5ndGg7disrKXtsZXQgeD1nRChuLGJbdl0scD9PW3ZdOnZvaWQgMCxvLGdbdl0scyxmLHUsZSxjKSxMO2YmJnU/KEw9eC50b3BBbmRCb3R0b20sSS5nZW9tZXRyeT1fZS5zY2FsZVRvR2VvZGV0aWNIZWlnaHRFeHRydWRlZChMLmdlb21ldHJ5LE0sTixuLHMpKTpmPyhMPXgudG9wQW5kQm90dG9tLEwuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9UGUuc2NhbGVUb0dlb2RldGljSGVpZ2h0KEwuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsTSxuLCFzKSxJLmdlb21ldHJ5PUwuZ2VvbWV0cnkpOnUmJihMPXgudG9wQW5kQm90dG9tLEwuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9UGUuc2NhbGVUb0dlb2RldGljSGVpZ2h0KEwuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsTixuLCEwKSxJLmdlb21ldHJ5PUwuZ2VvbWV0cnkpLChmfHx1KSYmKEkud2FsbD0hMSxMLmdlb21ldHJ5PXN5KEkpLEMucHVzaChMKSk7bGV0IHo9eC53YWxscztJLndhbGw9ITA7Zm9yKGxldCBqPTA7ajx6Lmxlbmd0aDtqKyspe2xldCBrPXpbal07SS5nZW9tZXRyeT1fZS5zY2FsZVRvR2VvZGV0aWNIZWlnaHRFeHRydWRlZChrLmdlb21ldHJ5LE0sTixuLHMpLGsuZ2VvbWV0cnk9c3koSSksQy5wdXNoKGspfX1lbHNlIGZvcih2PTA7djxiLmxlbmd0aDt2Kyspe2xldCB4PW5ldyBjbyh7Z2VvbWV0cnk6X2UuY3JlYXRlR2VvbWV0cnlGcm9tUG9zaXRpb25zKG4sYlt2XSxwP09bdl06dm9pZCAwLG8scyxlLGMpfSk7aWYoeC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcz1QZS5zY2FsZVRvR2VvZGV0aWNIZWlnaHQoeC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxNLG4sIXMpLEkuZ2VvbWV0cnk9eC5nZW9tZXRyeSx4Lmdlb21ldHJ5PXN5KEkpLGgodC5fb2Zmc2V0QXR0cmlidXRlKSl7bGV0IEw9eC5nZW9tZXRyeS5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgsej10Ll9vZmZzZXRBdHRyaWJ1dGU9PT1hZS5OT05FPzA6MSxqPW5ldyBVaW50OEFycmF5KEwvMykuZmlsbCh6KTt4Lmdlb21ldHJ5LmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6an0pfUMucHVzaCh4KX1sZXQgQj1rZS5jb21iaW5lSW5zdGFuY2VzKEMpWzBdO0IuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9bmV3IEZsb2F0NjRBcnJheShCLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzKSxCLmluZGljZXM9RnQuY3JlYXRlVHlwZWRBcnJheShCLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aC8zLEIuaW5kaWNlcyk7bGV0IEE9Qi5hdHRyaWJ1dGVzLFM9Z3QuZnJvbVZlcnRpY2VzKEEucG9zaXRpb24udmFsdWVzKTtyZXR1cm4gZS5wb3NpdGlvbnx8ZGVsZXRlIEEucG9zaXRpb24sbmV3IEJ0KHthdHRyaWJ1dGVzOkEsaW5kaWNlczpCLmluZGljZXMscHJpbWl0aXZlVHlwZTpCLnByaW1pdGl2ZVR5cGUsYm91bmRpbmdTcGhlcmU6UyxvZmZzZXRBdHRyaWJ1dGU6dC5fb2Zmc2V0QXR0cmlidXRlfSl9O1JyLmNyZWF0ZVNoYWRvd1ZvbHVtZT1mdW5jdGlvbih0LGUsbil7bGV0IG89dC5fZ3JhbnVsYXJpdHkscj10Ll9lbGxpcHNvaWQsaT1lKG8scikscz1uKG8scik7cmV0dXJuIG5ldyBScih7cG9seWdvbkhpZXJhcmNoeTp0Ll9wb2x5Z29uSGllcmFyY2h5LGVsbGlwc29pZDpyLHN0Um90YXRpb246dC5fc3RSb3RhdGlvbixncmFudWxhcml0eTpvLHBlclBvc2l0aW9uSGVpZ2h0OiExLGV4dHJ1ZGVkSGVpZ2h0OmksaGVpZ2h0OnMsdmVydGV4Rm9ybWF0OnB0LlBPU0lUSU9OX09OTFksc2hhZG93Vm9sdW1lOiEwLGFyY1R5cGU6dC5fYXJjVHlwZX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhSci5wcm90b3R5cGUse3JlY3RhbmdsZTp7Z2V0OmZ1bmN0aW9uKCl7aWYoIWgodGhpcy5fcmVjdGFuZ2xlKSl7bGV0IHQ9dGhpcy5fcG9seWdvbkhpZXJhcmNoeS5wb3NpdGlvbnM7dGhpcy5fcmVjdGFuZ2xlPVJyLmNvbXB1dGVSZWN0YW5nbGVGcm9tUG9zaXRpb25zKHQsdGhpcy5fZWxsaXBzb2lkLHRoaXMuX2FyY1R5cGUpfXJldHVybiB0aGlzLl9yZWN0YW5nbGV9fSx0ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaCh0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzKXx8KHRoaXMuX3RleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHM9SUQodGhpcykpLHRoaXMuX3RleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHN9fX0pO2N5PVJyfSk7dmFyIGF5PXt9O2RlKGF5LHtkZWZhdWx0OigpPT5GRH0pO2Z1bmN0aW9uIHZEKHQsZSl7cmV0dXJuIGgoZSkmJih0PWN5LnVucGFjayh0LGUpKSx0Ll9lbGxpcHNvaWQ9WS5jbG9uZSh0Ll9lbGxpcHNvaWQpLGN5LmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBGRCxmeT0kKCgpPT57ZnQoKTskdCgpO0VFKCk7RkQ9dkR9KTtmdW5jdGlvbiBMRCh0LGUsbixvLHIpe2xldCBzPXlvLmZyb21Qb2ludHMoZSx0KS5wcm9qZWN0UG9pbnRzT250b1BsYW5lKGUsUkUpO1BlLmNvbXB1dGVXaW5kaW5nT3JkZXIyRChzKT09PUNvLkNMT0NLV0lTRSYmKHMucmV2ZXJzZSgpLGU9ZS5zbGljZSgpLnJldmVyc2UoKSk7bGV0IHUsYyxsPWUubGVuZ3RoLHA9MDtpZihvKWZvcih1PW5ldyBGbG9hdDY0QXJyYXkobCoyKjMpLGM9MDtjPGw7YysrKXtsZXQgXz1lW2NdLGc9ZVsoYysxKSVsXTt1W3ArK109Xy54LHVbcCsrXT1fLnksdVtwKytdPV8ueix1W3ArK109Zy54LHVbcCsrXT1nLnksdVtwKytdPWcuen1lbHNle2xldCBfPTA7aWYocj09PWhlLkdFT0RFU0lDKWZvcihjPTA7YzxsO2MrKylfKz1fZS5zdWJkaXZpZGVMaW5lQ291bnQoZVtjXSxlWyhjKzEpJWxdLG4pO2Vsc2UgaWYocj09PWhlLlJIVU1CKWZvcihjPTA7YzxsO2MrKylfKz1fZS5zdWJkaXZpZGVSaHVtYkxpbmVDb3VudCh0LGVbY10sZVsoYysxKSVsXSxuKTtmb3IodT1uZXcgRmxvYXQ2NEFycmF5KF8qMyksYz0wO2M8bDtjKyspe2xldCBnO3I9PT1oZS5HRU9ERVNJQz9nPV9lLnN1YmRpdmlkZUxpbmUoZVtjXSxlWyhjKzEpJWxdLG4sdmQpOnI9PT1oZS5SSFVNQiYmKGc9X2Uuc3ViZGl2aWRlUmh1bWJMaW5lKHQsZVtjXSxlWyhjKzEpJWxdLG4sdmQpKTtsZXQgYj1nLmxlbmd0aDtmb3IobGV0IFQ9MDtUPGI7KytUKXVbcCsrXT1nW1RdfX1sPXUubGVuZ3RoLzM7bGV0IGQ9bCoyLG09RnQuY3JlYXRlVHlwZWRBcnJheShsLGQpO2ZvcihwPTAsYz0wO2M8bC0xO2MrKyltW3ArK109YyxtW3ArK109YysxO3JldHVybiBtW3ArK109bC0xLG1bcCsrXT0wLG5ldyBjbyh7Z2VvbWV0cnk6bmV3IEJ0KHthdHRyaWJ1dGVzOm5ldyBpZSh7cG9zaXRpb246bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczp1fSl9KSxpbmRpY2VzOm0scHJpbWl0aXZlVHlwZTpEdC5MSU5FU30pfSl9ZnVuY3Rpb24gREQodCxlLG4sbyxyKXtsZXQgcz15by5mcm9tUG9pbnRzKGUsdCkucHJvamVjdFBvaW50c09udG9QbGFuZShlLFJFKTtQZS5jb21wdXRlV2luZGluZ09yZGVyMkQocyk9PT1Dby5DTE9DS1dJU0UmJihzLnJldmVyc2UoKSxlPWUuc2xpY2UoKS5yZXZlcnNlKCkpO2xldCB1LGMsbD1lLmxlbmd0aCxwPW5ldyBBcnJheShsKSxkPTA7aWYobylmb3IodT1uZXcgRmxvYXQ2NEFycmF5KGwqMiozKjIpLGM9MDtjPGw7KytjKXtwW2NdPWQvMztsZXQgYj1lW2NdLFQ9ZVsoYysxKSVsXTt1W2QrK109Yi54LHVbZCsrXT1iLnksdVtkKytdPWIueix1W2QrK109VC54LHVbZCsrXT1ULnksdVtkKytdPVQuen1lbHNle2xldCBiPTA7aWYocj09PWhlLkdFT0RFU0lDKWZvcihjPTA7YzxsO2MrKyliKz1fZS5zdWJkaXZpZGVMaW5lQ291bnQoZVtjXSxlWyhjKzEpJWxdLG4pO2Vsc2UgaWYocj09PWhlLlJIVU1CKWZvcihjPTA7YzxsO2MrKyliKz1fZS5zdWJkaXZpZGVSaHVtYkxpbmVDb3VudCh0LGVbY10sZVsoYysxKSVsXSxuKTtmb3IodT1uZXcgRmxvYXQ2NEFycmF5KGIqMyoyKSxjPTA7YzxsOysrYyl7cFtjXT1kLzM7bGV0IFQ7cj09PWhlLkdFT0RFU0lDP1Q9X2Uuc3ViZGl2aWRlTGluZShlW2NdLGVbKGMrMSklbF0sbix2ZCk6cj09PWhlLlJIVU1CJiYoVD1fZS5zdWJkaXZpZGVSaHVtYkxpbmUodCxlW2NdLGVbKGMrMSklbF0sbix2ZCkpO2xldCBPPVQubGVuZ3RoO2ZvcihsZXQgRT0wO0U8TzsrK0UpdVtkKytdPVRbRV19fWw9dS5sZW5ndGgvKDMqMik7bGV0IG09cC5sZW5ndGgsXz0obCoyK20pKjIsZz1GdC5jcmVhdGVUeXBlZEFycmF5KGwrbSxfKTtmb3IoZD0wLGM9MDtjPGw7KytjKWdbZCsrXT1jLGdbZCsrXT0oYysxKSVsLGdbZCsrXT1jK2wsZ1tkKytdPShjKzEpJWwrbDtmb3IoYz0wO2M8bTtjKyspe2xldCBiPXBbY107Z1tkKytdPWIsZ1tkKytdPWIrbH1yZXR1cm4gbmV3IGNvKHtnZW9tZXRyeTpuZXcgQnQoe2F0dHJpYnV0ZXM6bmV3IGllKHtwb3NpdGlvbjpuZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnV9KX0pLGluZGljZXM6ZyxwcmltaXRpdmVUeXBlOkR0LkxJTkVTfSl9KX1mdW5jdGlvbiBBYyh0KXtpZih5LnR5cGVPZi5vYmplY3QoIm9wdGlvbnMiLHQpLHkudHlwZU9mLm9iamVjdCgib3B0aW9ucy5wb2x5Z29uSGllcmFyY2h5Iix0LnBvbHlnb25IaWVyYXJjaHkpLHQucGVyUG9zaXRpb25IZWlnaHQmJmgodC5oZWlnaHQpKXRocm93IG5ldyBEKCJDYW5ub3QgdXNlIGJvdGggb3B0aW9ucy5wZXJQb3NpdGlvbkhlaWdodCBhbmQgb3B0aW9ucy5oZWlnaHQiKTtpZihoKHQuYXJjVHlwZSkmJnQuYXJjVHlwZSE9PWhlLkdFT0RFU0lDJiZ0LmFyY1R5cGUhPT1oZS5SSFVNQil0aHJvdyBuZXcgRCgiSW52YWxpZCBhcmNUeXBlLiBWYWxpZCBvcHRpb25zIGFyZSBBcmNUeXBlLkdFT0RFU0lDIGFuZCBBcmNUeXBlLlJIVU1CLiIpO2xldCBlPXQucG9seWdvbkhpZXJhcmNoeSxuPXQuZWxsaXBzb2lkPz9ZLmRlZmF1bHQsbz10LmdyYW51bGFyaXR5Pz9QLlJBRElBTlNfUEVSX0RFR1JFRSxyPXQucGVyUG9zaXRpb25IZWlnaHQ/PyExLGk9ciYmaCh0LmV4dHJ1ZGVkSGVpZ2h0KSxzPXQuYXJjVHlwZT8/aGUuR0VPREVTSUMsZj10LmhlaWdodD8/MCx1PXQuZXh0cnVkZWRIZWlnaHQ/P2Y7aWYoIWkpe2xldCBjPU1hdGgubWF4KGYsdSk7dT1NYXRoLm1pbihmLHUpLGY9Y310aGlzLl9lbGxpcHNvaWQ9WS5jbG9uZShuKSx0aGlzLl9ncmFudWxhcml0eT1vLHRoaXMuX2hlaWdodD1mLHRoaXMuX2V4dHJ1ZGVkSGVpZ2h0PXUsdGhpcy5fYXJjVHlwZT1zLHRoaXMuX3BvbHlnb25IaWVyYXJjaHk9ZSx0aGlzLl9wZXJQb3NpdGlvbkhlaWdodD1yLHRoaXMuX3BlclBvc2l0aW9uSGVpZ2h0RXh0cnVkZT1pLHRoaXMuX29mZnNldEF0dHJpYnV0ZT10Lm9mZnNldEF0dHJpYnV0ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVQb2x5Z29uT3V0bGluZUdlb21ldHJ5Iix0aGlzLnBhY2tlZExlbmd0aD1fZS5jb21wdXRlSGllcmFyY2h5UGFja2VkTGVuZ3RoKGUsYSkrWS5wYWNrZWRMZW5ndGgrOH12YXIgUkUsdmQsQkQsVUQsdXksU0U9JCgoKT0+e2ZjKCk7dmUoKTtMdCgpO1d0KCk7RGUoKTt5ZSgpO2Z0KCk7anQoKTskdCgpO2xhKCk7WGUoKTtZZSgpO2FuKCk7c2MoKTtGbygpO3NpKCk7JGUoKTtLdCgpO0xmKCk7cXIoKTt0bigpO2xjKCk7UkU9W10sdmQ9W107QWMucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLG49bj8/MCxuPV9lLnBhY2tQb2x5Z29uSGllcmFyY2h5KHQuX3BvbHlnb25IaWVyYXJjaHksZSxuLGEpLFkucGFjayh0Ll9lbGxpcHNvaWQsZSxuKSxuKz1ZLnBhY2tlZExlbmd0aCxlW24rK109dC5faGVpZ2h0LGVbbisrXT10Ll9leHRydWRlZEhlaWdodCxlW24rK109dC5fZ3JhbnVsYXJpdHksZVtuKytdPXQuX3BlclBvc2l0aW9uSGVpZ2h0RXh0cnVkZT8xOjAsZVtuKytdPXQuX3BlclBvc2l0aW9uSGVpZ2h0PzE6MCxlW24rK109dC5fYXJjVHlwZSxlW24rK109dC5fb2Zmc2V0QXR0cmlidXRlPz8tMSxlW25dPXQucGFja2VkTGVuZ3RoLGV9O0JEPVkuY2xvbmUoWS5VTklUX1NQSEVSRSksVUQ9e3BvbHlnb25IaWVyYXJjaHk6e319O0FjLnVucGFjaz1mdW5jdGlvbih0LGUsbil7eS5kZWZpbmVkKCJhcnJheSIsdCksZT1lPz8wO2xldCBvPV9lLnVucGFja1BvbHlnb25IaWVyYXJjaHkodCxlLGEpO2U9by5zdGFydGluZ0luZGV4LGRlbGV0ZSBvLnN0YXJ0aW5nSW5kZXg7bGV0IHI9WS51bnBhY2sodCxlLEJEKTtlKz1ZLnBhY2tlZExlbmd0aDtsZXQgaT10W2UrK10scz10W2UrK10sZj10W2UrK10sdT10W2UrK109PT0xLGM9dFtlKytdPT09MSxsPXRbZSsrXSxwPXRbZSsrXSxkPXRbZV07cmV0dXJuIGgobil8fChuPW5ldyBBYyhVRCkpLG4uX3BvbHlnb25IaWVyYXJjaHk9byxuLl9lbGxpcHNvaWQ9WS5jbG9uZShyLG4uX2VsbGlwc29pZCksbi5faGVpZ2h0PWksbi5fZXh0cnVkZWRIZWlnaHQ9cyxuLl9ncmFudWxhcml0eT1mLG4uX3BlclBvc2l0aW9uSGVpZ2h0PWMsbi5fcGVyUG9zaXRpb25IZWlnaHRFeHRydWRlPXUsbi5fYXJjVHlwZT1sLG4uX29mZnNldEF0dHJpYnV0ZT1wPT09LTE/dm9pZCAwOnAsbi5wYWNrZWRMZW5ndGg9ZCxufTtBYy5mcm9tUG9zaXRpb25zPWZ1bmN0aW9uKHQpe3Q9dD8/SXQuRU1QVFlfT0JKRUNULHkuZGVmaW5lZCgib3B0aW9ucy5wb3NpdGlvbnMiLHQucG9zaXRpb25zKTtsZXQgZT17cG9seWdvbkhpZXJhcmNoeTp7cG9zaXRpb25zOnQucG9zaXRpb25zfSxoZWlnaHQ6dC5oZWlnaHQsZXh0cnVkZWRIZWlnaHQ6dC5leHRydWRlZEhlaWdodCxlbGxpcHNvaWQ6dC5lbGxpcHNvaWQsZ3JhbnVsYXJpdHk6dC5ncmFudWxhcml0eSxwZXJQb3NpdGlvbkhlaWdodDp0LnBlclBvc2l0aW9uSGVpZ2h0LGFyY1R5cGU6dC5hcmNUeXBlLG9mZnNldEF0dHJpYnV0ZTp0Lm9mZnNldEF0dHJpYnV0ZX07cmV0dXJuIG5ldyBBYyhlKX07QWMuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7bGV0IGU9dC5fZWxsaXBzb2lkLG49dC5fZ3JhbnVsYXJpdHksbz10Ll9wb2x5Z29uSGllcmFyY2h5LHI9dC5fcGVyUG9zaXRpb25IZWlnaHQsaT10Ll9hcmNUeXBlLHM9X2UucG9seWdvbk91dGxpbmVzRnJvbUhpZXJhcmNoeShvLCFyLGUpO2lmKHMubGVuZ3RoPT09MClyZXR1cm47bGV0IGYsdT1bXSxjPVAuY2hvcmRMZW5ndGgobixlLm1heGltdW1SYWRpdXMpLGw9dC5faGVpZ2h0LHA9dC5fZXh0cnVkZWRIZWlnaHQsZD10Ll9wZXJQb3NpdGlvbkhlaWdodEV4dHJ1ZGV8fCFQLmVxdWFsc0Vwc2lsb24obCxwLDAsUC5FUFNJTE9OMiksbSxfO2lmKGQpZm9yKF89MDtfPHMubGVuZ3RoO18rKyl7aWYoZj1ERChlLHNbX10sYyxyLGkpLGYuZ2VvbWV0cnk9X2Uuc2NhbGVUb0dlb2RldGljSGVpZ2h0RXh0cnVkZWQoZi5nZW9tZXRyeSxsLHAsZSxyKSxoKHQuX29mZnNldEF0dHJpYnV0ZSkpe2xldCBUPWYuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoLzMsTz1uZXcgVWludDhBcnJheShUKTt0Ll9vZmZzZXRBdHRyaWJ1dGU9PT1hZS5UT1A/Tz1PLmZpbGwoMSwwLFQvMik6KG09dC5fb2Zmc2V0QXR0cmlidXRlPT09YWUuTk9ORT8wOjEsTz1PLmZpbGwobSkpLGYuZ2VvbWV0cnkuYXR0cmlidXRlcy5hcHBseU9mZnNldD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpPfSl9dS5wdXNoKGYpfWVsc2UgZm9yKF89MDtfPHMubGVuZ3RoO18rKyl7aWYoZj1MRChlLHNbX10sYyxyLGkpLGYuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9UGUuc2NhbGVUb0dlb2RldGljSGVpZ2h0KGYuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsbCxlLCFyKSxoKHQuX29mZnNldEF0dHJpYnV0ZSkpe2xldCBUPWYuZ2VvbWV0cnkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMubGVuZ3RoO209dC5fb2Zmc2V0QXR0cmlidXRlPT09YWUuTk9ORT8wOjE7bGV0IE89bmV3IFVpbnQ4QXJyYXkoVC8zKS5maWxsKG0pO2YuZ2VvbWV0cnkuYXR0cmlidXRlcy5hcHBseU9mZnNldD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpPfSl9dS5wdXNoKGYpfWxldCBnPWtlLmNvbWJpbmVJbnN0YW5jZXModSlbMF0sYj1ndC5mcm9tVmVydGljZXMoZy5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyk7cmV0dXJuIG5ldyBCdCh7YXR0cmlidXRlczpnLmF0dHJpYnV0ZXMsaW5kaWNlczpnLmluZGljZXMscHJpbWl0aXZlVHlwZTpnLnByaW1pdGl2ZVR5cGUsYm91bmRpbmdTcGhlcmU6YixvZmZzZXRBdHRyaWJ1dGU6dC5fb2Zmc2V0QXR0cmlidXRlfSl9O3V5PUFjfSk7dmFyIGx5PXt9O2RlKGx5LHtkZWZhdWx0OigpPT5HRH0pO2Z1bmN0aW9uIGtEKHQsZSl7cmV0dXJuIGgoZSkmJih0PXV5LnVucGFjayh0LGUpKSx0Ll9lbGxpcHNvaWQ9WS5jbG9uZSh0Ll9lbGxpcHNvaWQpLHV5LmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBHRCxweT0kKCgpPT57ZnQoKTskdCgpO1NFKCk7R0Q9a0R9KTtmdW5jdGlvbiBkeSh0LGUsbil7cmV0dXJuIG48MCYmKG4rPTEpLG4+MSYmKG4tPTEpLG4qNjwxP3QrKGUtdCkqNipuOm4qMjwxP2U6biozPDI/dCsoZS10KSooMi8zLW4pKjY6dH1mdW5jdGlvbiBIKHQsZSxuLG8pe3RoaXMucmVkPXQ/PzEsdGhpcy5ncmVlbj1lPz8xLHRoaXMuYmx1ZT1uPz8xLHRoaXMuYWxwaGE9bz8/MX12YXIgbXksaHkscWksVkQsekQsakQsSEQsbmUsUGE9JCgoKT0+e1d0KCk7eWUoKTtmdCgpO3NoKCk7S3QoKTtILmZyb21DYXJ0ZXNpYW40PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgiY2FydGVzaWFuIix0KSxoKGUpPyhlLnJlZD10LngsZS5ncmVlbj10LnksZS5ibHVlPXQueixlLmFscGhhPXQudyxlKTpuZXcgSCh0LngsdC55LHQueix0LncpfTtILmZyb21CeXRlcz1mdW5jdGlvbih0LGUsbixvLHIpe3JldHVybiB0PUguYnl0ZVRvRmxvYXQodD8/MjU1KSxlPUguYnl0ZVRvRmxvYXQoZT8/MjU1KSxuPUguYnl0ZVRvRmxvYXQobj8/MjU1KSxvPUguYnl0ZVRvRmxvYXQobz8/MjU1KSxoKHIpPyhyLnJlZD10LHIuZ3JlZW49ZSxyLmJsdWU9bixyLmFscGhhPW8scik6bmV3IEgodCxlLG4sbyl9O0guZnJvbUFscGhhPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjb2xvciIsdCkseS50eXBlT2YubnVtYmVyKCJhbHBoYSIsZSksaChuKT8obi5yZWQ9dC5yZWQsbi5ncmVlbj10LmdyZWVuLG4uYmx1ZT10LmJsdWUsbi5hbHBoYT1lLG4pOm5ldyBIKHQucmVkLHQuZ3JlZW4sdC5ibHVlLGUpfTtZcy5zdXBwb3J0c1R5cGVkQXJyYXlzKCkmJihteT1uZXcgQXJyYXlCdWZmZXIoNCksaHk9bmV3IFVpbnQzMkFycmF5KG15KSxxaT1uZXcgVWludDhBcnJheShteSkpO0guZnJvbVJnYmE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gaHlbMF09dCxILmZyb21CeXRlcyhxaVswXSxxaVsxXSxxaVsyXSxxaVszXSxlKX07SC5mcm9tSHNsPWZ1bmN0aW9uKHQsZSxuLG8scil7dD0odD8/MCklMSxlPWU/PzAsbj1uPz8wLG89bz8/MTtsZXQgaT1uLHM9bixmPW47aWYoZSE9PTApe2xldCB1O248LjU/dT1uKigxK2UpOnU9bitlLW4qZTtsZXQgYz0yKm4tdTtpPWR5KGMsdSx0KzEvMykscz1keShjLHUsdCksZj1keShjLHUsdC0xLzMpfXJldHVybiBoKHIpPyhyLnJlZD1pLHIuZ3JlZW49cyxyLmJsdWU9ZixyLmFscGhhPW8scik6bmV3IEgoaSxzLGYsbyl9O0guZnJvbVJhbmRvbT1mdW5jdGlvbih0LGUpe3Q9dD8/SXQuRU1QVFlfT0JKRUNUO2xldCBuPXQucmVkO2lmKCFoKG4pKXtsZXQgcz10Lm1pbmltdW1SZWQ/PzAsZj10Lm1heGltdW1SZWQ/PzE7eS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoIm1pbmltdW1SZWQiLHMsZiksbj1zK1AubmV4dFJhbmRvbU51bWJlcigpKihmLXMpfWxldCBvPXQuZ3JlZW47aWYoIWgobykpe2xldCBzPXQubWluaW11bUdyZWVuPz8wLGY9dC5tYXhpbXVtR3JlZW4/PzE7eS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoIm1pbmltdW1HcmVlbiIscyxmKSxvPXMrUC5uZXh0UmFuZG9tTnVtYmVyKCkqKGYtcyl9bGV0IHI9dC5ibHVlO2lmKCFoKHIpKXtsZXQgcz10Lm1pbmltdW1CbHVlPz8wLGY9dC5tYXhpbXVtQmx1ZT8/MTt5LnR5cGVPZi5udW1iZXIubGVzc1RoYW5PckVxdWFscygibWluaW11bUJsdWUiLHMsZikscj1zK1AubmV4dFJhbmRvbU51bWJlcigpKihmLXMpfWxldCBpPXQuYWxwaGE7aWYoIWgoaSkpe2xldCBzPXQubWluaW11bUFscGhhPz8wLGY9dC5tYXhpbXVtQWxwaGE/PzE7eS50eXBlT2YubnVtYmVyLmxlc3NUaGFuT3JFcXVhbHMoIm1pbmltdW1BbHBoYSIscyxmKSxpPXMrUC5uZXh0UmFuZG9tTnVtYmVyKCkqKGYtcyl9cmV0dXJuIGgoZSk/KGUucmVkPW4sZS5ncmVlbj1vLGUuYmx1ZT1yLGUuYWxwaGE9aSxlKTpuZXcgSChuLG8scixpKX07VkQ9L14jKFswLTlhLWZdKShbMC05YS1mXSkoWzAtOWEtZl0pKFswLTlhLWZdKT8kL2ksekQ9L14jKFswLTlhLWZdezJ9KShbMC05YS1mXXsyfSkoWzAtOWEtZl17Mn0pKFswLTlhLWZdezJ9KT8kL2ksakQ9L15yZ2JhP1xzKlwoXHMqKFswLTkuXSslPylccypbLFxzXStccyooWzAtOS5dKyU/KVxzKlssXHNdK1xzKihbMC05Ll0rJT8pKD86XHMqWyxccy9dK1xzKihbMC05Ll0rKSk/XHMqXCkkL2ksSEQ9L15oc2xhP1xzKlwoXHMqKFswLTkuXSspXHMqWyxcc10rXHMqKFswLTkuXSslKVxzKlssXHNdK1xzKihbMC05Ll0rJSkoPzpccypbLFxzL10rXHMqKFswLTkuXSspKT9ccypcKSQvaTtILmZyb21Dc3NDb2xvclN0cmluZz1mdW5jdGlvbih0LGUpe3kudHlwZU9mLnN0cmluZygiY29sb3IiLHQpLGgoZSl8fChlPW5ldyBIKSx0PXQudHJpbSgpO2xldCBuPUhbdC50b1VwcGVyQ2FzZSgpXTtpZihoKG4pKXJldHVybiBILmNsb25lKG4sZSksZTtsZXQgbz1WRC5leGVjKHQpO3JldHVybiBvIT09bnVsbD8oZS5yZWQ9cGFyc2VJbnQob1sxXSwxNikvMTUsZS5ncmVlbj1wYXJzZUludChvWzJdLDE2KS8xNSxlLmJsdWU9cGFyc2VJbnQob1szXSwxNikvMTUsZS5hbHBoYT1wYXJzZUludChvWzRdPz8iZiIsMTYpLzE1LGUpOihvPXpELmV4ZWModCksbyE9PW51bGw/KGUucmVkPXBhcnNlSW50KG9bMV0sMTYpLzI1NSxlLmdyZWVuPXBhcnNlSW50KG9bMl0sMTYpLzI1NSxlLmJsdWU9cGFyc2VJbnQob1szXSwxNikvMjU1LGUuYWxwaGE9cGFyc2VJbnQob1s0XT8/ImZmIiwxNikvMjU1LGUpOihvPWpELmV4ZWModCksbyE9PW51bGw/KGUucmVkPXBhcnNlRmxvYXQob1sxXSkvKG9bMV0uc3Vic3RyKC0xKT09PSIlIj8xMDA6MjU1KSxlLmdyZWVuPXBhcnNlRmxvYXQob1syXSkvKG9bMl0uc3Vic3RyKC0xKT09PSIlIj8xMDA6MjU1KSxlLmJsdWU9cGFyc2VGbG9hdChvWzNdKS8ob1szXS5zdWJzdHIoLTEpPT09IiUiPzEwMDoyNTUpLGUuYWxwaGE9cGFyc2VGbG9hdChvWzRdPz8iMS4wIiksZSk6KG89SEQuZXhlYyh0KSxvIT09bnVsbD9ILmZyb21Ic2wocGFyc2VGbG9hdChvWzFdKS8zNjAscGFyc2VGbG9hdChvWzJdKS8xMDAscGFyc2VGbG9hdChvWzNdKS8xMDAscGFyc2VGbG9hdChvWzRdPz8iMS4wIiksZSk6KGU9dm9pZCAwLGUpKSkpfTtILnBhY2tlZExlbmd0aD00O0gucGFjaz1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgidmFsdWUiLHQpLHkuZGVmaW5lZCgiYXJyYXkiLGUpLG49bj8/MCxlW24rK109dC5yZWQsZVtuKytdPXQuZ3JlZW4sZVtuKytdPXQuYmx1ZSxlW25dPXQuYWxwaGEsZX07SC51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LmRlZmluZWQoImFycmF5Iix0KSxlPWU/PzAsaChuKXx8KG49bmV3IEgpLG4ucmVkPXRbZSsrXSxuLmdyZWVuPXRbZSsrXSxuLmJsdWU9dFtlKytdLG4uYWxwaGE9dFtlXSxufTtILmJ5dGVUb0Zsb2F0PWZ1bmN0aW9uKHQpe3JldHVybiB0LzI1NX07SC5mbG9hdFRvQnl0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdD09PTE/MjU1OnQqMjU2fDB9O0guY2xvbmU9ZnVuY3Rpb24odCxlKXtpZihoKHQpKXJldHVybiBoKGUpPyhlLnJlZD10LnJlZCxlLmdyZWVuPXQuZ3JlZW4sZS5ibHVlPXQuYmx1ZSxlLmFscGhhPXQuYWxwaGEsZSk6bmV3IEgodC5yZWQsdC5ncmVlbix0LmJsdWUsdC5hbHBoYSl9O0guZXF1YWxzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lfHxoKHQpJiZoKGUpJiZ0LnJlZD09PWUucmVkJiZ0LmdyZWVuPT09ZS5ncmVlbiYmdC5ibHVlPT09ZS5ibHVlJiZ0LmFscGhhPT09ZS5hbHBoYX07SC5lcXVhbHNBcnJheT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQucmVkPT09ZVtuXSYmdC5ncmVlbj09PWVbbisxXSYmdC5ibHVlPT09ZVtuKzJdJiZ0LmFscGhhPT09ZVtuKzNdfTtILnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gSC5jbG9uZSh0aGlzLHQpfTtILnByb3RvdHlwZS5lcXVhbHM9ZnVuY3Rpb24odCl7cmV0dXJuIEguZXF1YWxzKHRoaXMsdCl9O0gucHJvdG90eXBlLmVxdWFsc0Vwc2lsb249ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcz09PXR8fGgodCkmJk1hdGguYWJzKHRoaXMucmVkLXQucmVkKTw9ZSYmTWF0aC5hYnModGhpcy5ncmVlbi10LmdyZWVuKTw9ZSYmTWF0aC5hYnModGhpcy5ibHVlLXQuYmx1ZSk8PWUmJk1hdGguYWJzKHRoaXMuYWxwaGEtdC5hbHBoYSk8PWV9O0gucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuYCgke3RoaXMucmVkfSwgJHt0aGlzLmdyZWVufSwgJHt0aGlzLmJsdWV9LCAke3RoaXMuYWxwaGF9KWB9O0gucHJvdG90eXBlLnRvQ3NzQ29sb3JTdHJpbmc9ZnVuY3Rpb24oKXtsZXQgdD1ILmZsb2F0VG9CeXRlKHRoaXMucmVkKSxlPUguZmxvYXRUb0J5dGUodGhpcy5ncmVlbiksbj1ILmZsb2F0VG9CeXRlKHRoaXMuYmx1ZSk7cmV0dXJuIHRoaXMuYWxwaGE9PT0xP2ByZ2IoJHt0fSwke2V9LCR7bn0pYDpgcmdiYSgke3R9LCR7ZX0sJHtufSwke3RoaXMuYWxwaGF9KWB9O0gucHJvdG90eXBlLnRvQ3NzSGV4U3RyaW5nPWZ1bmN0aW9uKCl7bGV0IHQ9SC5mbG9hdFRvQnl0ZSh0aGlzLnJlZCkudG9TdHJpbmcoMTYpO3QubGVuZ3RoPDImJih0PWAwJHt0fWApO2xldCBlPUguZmxvYXRUb0J5dGUodGhpcy5ncmVlbikudG9TdHJpbmcoMTYpO2UubGVuZ3RoPDImJihlPWAwJHtlfWApO2xldCBuPUguZmxvYXRUb0J5dGUodGhpcy5ibHVlKS50b1N0cmluZygxNik7aWYobi5sZW5ndGg8MiYmKG49YDAke259YCksdGhpcy5hbHBoYTwxKXtsZXQgbz1ILmZsb2F0VG9CeXRlKHRoaXMuYWxwaGEpLnRvU3RyaW5nKDE2KTtyZXR1cm4gby5sZW5ndGg8MiYmKG89YDAke299YCksYCMke3R9JHtlfSR7bn0ke299YH1yZXR1cm5gIyR7dH0ke2V9JHtufWB9O0gucHJvdG90eXBlLnRvQnl0ZXM9ZnVuY3Rpb24odCl7bGV0IGU9SC5mbG9hdFRvQnl0ZSh0aGlzLnJlZCksbj1ILmZsb2F0VG9CeXRlKHRoaXMuZ3JlZW4pLG89SC5mbG9hdFRvQnl0ZSh0aGlzLmJsdWUpLHI9SC5mbG9hdFRvQnl0ZSh0aGlzLmFscGhhKTtyZXR1cm4gaCh0KT8odFswXT1lLHRbMV09bix0WzJdPW8sdFszXT1yLHQpOltlLG4sbyxyXX07SC5wcm90b3R5cGUudG9SZ2JhPWZ1bmN0aW9uKCl7cmV0dXJuIHFpWzBdPUguZmxvYXRUb0J5dGUodGhpcy5yZWQpLHFpWzFdPUguZmxvYXRUb0J5dGUodGhpcy5ncmVlbikscWlbMl09SC5mbG9hdFRvQnl0ZSh0aGlzLmJsdWUpLHFpWzNdPUguZmxvYXRUb0J5dGUodGhpcy5hbHBoYSksaHlbMF19O0gucHJvdG90eXBlLmJyaWdodGVuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm51bWJlcigibWFnbml0dWRlIix0KSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygibWFnbml0dWRlIix0LDApLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKSx0PTEtdCxlLnJlZD0xLSgxLXRoaXMucmVkKSp0LGUuZ3JlZW49MS0oMS10aGlzLmdyZWVuKSp0LGUuYmx1ZT0xLSgxLXRoaXMuYmx1ZSkqdCxlLmFscGhhPXRoaXMuYWxwaGEsZX07SC5wcm90b3R5cGUuZGFya2VuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHkudHlwZU9mLm51bWJlcigibWFnbml0dWRlIix0KSx5LnR5cGVPZi5udW1iZXIuZ3JlYXRlclRoYW5PckVxdWFscygibWFnbml0dWRlIix0LDApLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixlKSx0PTEtdCxlLnJlZD10aGlzLnJlZCp0LGUuZ3JlZW49dGhpcy5ncmVlbip0LGUuYmx1ZT10aGlzLmJsdWUqdCxlLmFscGhhPXRoaXMuYWxwaGEsZX07SC5wcm90b3R5cGUud2l0aEFscGhhPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIEguZnJvbUFscGhhKHRoaXMsdCxlKX07SC5hZGQ9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLnJlZD10LnJlZCtlLnJlZCxuLmdyZWVuPXQuZ3JlZW4rZS5ncmVlbixuLmJsdWU9dC5ibHVlK2UuYmx1ZSxuLmFscGhhPXQuYWxwaGErZS5hbHBoYSxufTtILnN1YnRyYWN0PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi5yZWQ9dC5yZWQtZS5yZWQsbi5ncmVlbj10LmdyZWVuLWUuZ3JlZW4sbi5ibHVlPXQuYmx1ZS1lLmJsdWUsbi5hbHBoYT10LmFscGhhLWUuYWxwaGEsbn07SC5tdWx0aXBseT1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgibGVmdCIsdCkseS50eXBlT2Yub2JqZWN0KCJyaWdodCIsZSkseS50eXBlT2Yub2JqZWN0KCJyZXN1bHQiLG4pLG4ucmVkPXQucmVkKmUucmVkLG4uZ3JlZW49dC5ncmVlbiplLmdyZWVuLG4uYmx1ZT10LmJsdWUqZS5ibHVlLG4uYWxwaGE9dC5hbHBoYSplLmFscGhhLG59O0guZGl2aWRlPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJsZWZ0Iix0KSx5LnR5cGVPZi5vYmplY3QoInJpZ2h0IixlKSx5LnR5cGVPZi5vYmplY3QoInJlc3VsdCIsbiksbi5yZWQ9dC5yZWQvZS5yZWQsbi5ncmVlbj10LmdyZWVuL2UuZ3JlZW4sbi5ibHVlPXQuYmx1ZS9lLmJsdWUsbi5hbHBoYT10LmFscGhhL2UuYWxwaGEsbn07SC5tb2Q9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoImxlZnQiLHQpLHkudHlwZU9mLm9iamVjdCgicmlnaHQiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLnJlZD10LnJlZCVlLnJlZCxuLmdyZWVuPXQuZ3JlZW4lZS5ncmVlbixuLmJsdWU9dC5ibHVlJWUuYmx1ZSxuLmFscGhhPXQuYWxwaGElZS5hbHBoYSxufTtILmxlcnA9ZnVuY3Rpb24odCxlLG4sbyl7cmV0dXJuIHkudHlwZU9mLm9iamVjdCgic3RhcnQiLHQpLHkudHlwZU9mLm9iamVjdCgiZW5kIixlKSx5LnR5cGVPZi5udW1iZXIoInQiLG4pLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixvKSxvLnJlZD1QLmxlcnAodC5yZWQsZS5yZWQsbiksby5ncmVlbj1QLmxlcnAodC5ncmVlbixlLmdyZWVuLG4pLG8uYmx1ZT1QLmxlcnAodC5ibHVlLGUuYmx1ZSxuKSxvLmFscGhhPVAubGVycCh0LmFscGhhLGUuYWxwaGEsbiksb307SC5tdWx0aXBseUJ5U2NhbGFyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjb2xvciIsdCkseS50eXBlT2YubnVtYmVyKCJzY2FsYXIiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLnJlZD10LnJlZCplLG4uZ3JlZW49dC5ncmVlbiplLG4uYmx1ZT10LmJsdWUqZSxuLmFscGhhPXQuYWxwaGEqZSxufTtILmRpdmlkZUJ5U2NhbGFyPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJjb2xvciIsdCkseS50eXBlT2YubnVtYmVyKCJzY2FsYXIiLGUpLHkudHlwZU9mLm9iamVjdCgicmVzdWx0IixuKSxuLnJlZD10LnJlZC9lLG4uZ3JlZW49dC5ncmVlbi9lLG4uYmx1ZT10LmJsdWUvZSxuLmFscGhhPXQuYWxwaGEvZSxufTtILkFMSUNFQkxVRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRjBGOEZGIikpO0guQU5USVFVRVdISVRFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGQUVCRDciKSk7SC5BUVVBPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMEZGRkYiKSk7SC5BUVVBTUFSSU5FPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM3RkZGRDQiKSk7SC5BWlVSRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRjBGRkZGIikpO0guQkVJR0U9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0Y1RjVEQyIpKTtILkJJU1FVRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZFNEM0IikpO0guQkxBQ0s9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzAwMDAwMCIpKTtILkJMQU5DSEVEQUxNT05EPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkVCQ0QiKSk7SC5CTFVFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMDAwRkYiKSk7SC5CTFVFVklPTEVUPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM4QTJCRTIiKSk7SC5CUk9XTj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjQTUyQTJBIikpO0guQlVSTFlXT09EPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNERUI4ODciKSk7SC5DQURFVEJMVUU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzVGOUVBMCIpKTtILkNIQVJUUkVVU0U9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzdGRkYwMCIpKTtILkNIT0NPTEFURT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRDI2OTFFIikpO0guQ09SQUw9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGN0Y1MCIpKTtILkNPUk5GTE9XRVJCTFVFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM2NDk1RUQiKSk7SC5DT1JOU0lMSz1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZGOERDIikpO0guQ1JJTVNPTj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjREMxNDNDIikpO0guQ1lBTj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDBGRkZGIikpO0guREFSS0JMVUU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzAwMDA4QiIpKTtILkRBUktDWUFOPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMDhCOEIiKSk7SC5EQVJLR09MREVOUk9EPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNCODg2MEIiKSk7SC5EQVJLR1JBWT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjQTlBOUE5IikpO0guREFSS0dSRUVOPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMDY0MDAiKSk7SC5EQVJLR1JFWT1ILkRBUktHUkFZO0guREFSS0tIQUtJPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNCREI3NkIiKSk7SC5EQVJLTUFHRU5UQT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjOEIwMDhCIikpO0guREFSS09MSVZFR1JFRU49T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzU1NkIyRiIpKTtILkRBUktPUkFOR0U9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGOEMwMCIpKTtILkRBUktPUkNISUQ9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzk5MzJDQyIpKTtILkRBUktSRUQ9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzhCMDAwMCIpKTtILkRBUktTQUxNT049T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0U5OTY3QSIpKTtILkRBUktTRUFHUkVFTj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjOEZCQzhGIikpO0guREFSS1NMQVRFQkxVRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjNDgzRDhCIikpO0guREFSS1NMQVRFR1JBWT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjMkY0RjRGIikpO0guREFSS1NMQVRFR1JFWT1ILkRBUktTTEFURUdSQVk7SC5EQVJLVFVSUVVPSVNFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMENFRDEiKSk7SC5EQVJLVklPTEVUPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM5NDAwRDMiKSk7SC5ERUVQUElOSz1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkYxNDkzIikpO0guREVFUFNLWUJMVUU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzAwQkZGRiIpKTtILkRJTUdSQVk9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzY5Njk2OSIpKTtILkRJTUdSRVk9SC5ESU1HUkFZO0guRE9ER0VSQkxVRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjMUU5MEZGIikpO0guRklSRUJSSUNLPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNCMjIyMjIiKSk7SC5GTE9SQUxXSElURT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZGQUYwIikpO0guRk9SRVNUR1JFRU49T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzIyOEIyMiIpKTtILkZVQ0hTSUE9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGMDBGRiIpKTtILkdBSU5TQk9STz1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRENEQ0RDIikpO0guR0hPU1RXSElURT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRjhGOEZGIikpO0guR09MRD1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZENzAwIikpO0guR09MREVOUk9EPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNEQUE1MjAiKSk7SC5HUkFZPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM4MDgwODAiKSk7SC5HUkVFTj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDA4MDAwIikpO0guR1JFRU5ZRUxMT1c9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0FERkYyRiIpKTtILkdSRVk9SC5HUkFZO0guSE9ORVlERVc9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0YwRkZGMCIpKTtILkhPVFBJTks9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGNjlCNCIpKTtILklORElBTlJFRD1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjQ0Q1QzVDIikpO0guSU5ESUdPPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM0QjAwODIiKSk7SC5JVk9SWT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZGRkYwIikpO0guS0hBS0k9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0YwRTY4QyIpKTtILkxBVkVOREVSPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNFNkU2RkEiKSk7SC5MQVZFTkRBUl9CTFVTSD1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZGMEY1IikpO0guTEFXTkdSRUVOPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM3Q0ZDMDAiKSk7SC5MRU1PTkNISUZGT049T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRkFDRCIpKTtILkxJR0hUQkxVRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjQUREOEU2IikpO0guTElHSFRDT1JBTD1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRjA4MDgwIikpO0guTElHSFRDWUFOPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNFMEZGRkYiKSk7SC5MSUdIVEdPTERFTlJPRFlFTExPVz1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkFGQUQyIikpO0guTElHSFRHUkFZPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNEM0QzRDMiKSk7SC5MSUdIVEdSRUVOPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM5MEVFOTAiKSk7SC5MSUdIVEdSRVk9SC5MSUdIVEdSQVk7SC5MSUdIVFBJTks9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGQjZDMSIpKTtILkxJR0hUU0VBR1JFRU49T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzIwQjJBQSIpKTtILkxJR0hUU0tZQkxVRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjODdDRUZBIikpO0guTElHSFRTTEFURUdSQVk9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzc3ODg5OSIpKTtILkxJR0hUU0xBVEVHUkVZPUguTElHSFRTTEFURUdSQVk7SC5MSUdIVFNURUVMQkxVRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjQjBDNERFIikpO0guTElHSFRZRUxMT1c9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRkZFMCIpKTtILkxJTUU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzAwRkYwMCIpKTtILkxJTUVHUkVFTj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjMzJDRDMyIikpO0guTElORU49T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZBRjBFNiIpKTtILk1BR0VOVEE9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGMDBGRiIpKTtILk1BUk9PTj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjODAwMDAwIikpO0guTUVESVVNQVFVQU1BUklORT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjNjZDREFBIikpO0guTUVESVVNQkxVRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjMDAwMENEIikpO0guTUVESVVNT1JDSElEPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNCQTU1RDMiKSk7SC5NRURJVU1QVVJQTEU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzkzNzBEQiIpKTtILk1FRElVTVNFQUdSRUVOPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMzQ0IzNzEiKSk7SC5NRURJVU1TTEFURUJMVUU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzdCNjhFRSIpKTtILk1FRElVTVNQUklOR0dSRUVOPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMEZBOUEiKSk7SC5NRURJVU1UVVJRVU9JU0U9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzQ4RDFDQyIpKTtILk1FRElVTVZJT0xFVFJFRD1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjQzcxNTg1IikpO0guTUlETklHSFRCTFVFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMxOTE5NzAiKSk7SC5NSU5UQ1JFQU09T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0Y1RkZGQSIpKTtILk1JU1RZUk9TRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZFNEUxIikpO0guTU9DQ0FTSU49T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRTRCNSIpKTtILk5BVkFKT1dISVRFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGRkRFQUQiKSk7SC5OQVZZPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMDAwODAiKSk7SC5PTERMQUNFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGREY1RTYiKSk7SC5PTElWRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjODA4MDAwIikpO0guT0xJVkVEUkFCPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM2QjhFMjMiKSk7SC5PUkFOR0U9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGQTUwMCIpKTtILk9SQU5HRVJFRD1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkY0NTAwIikpO0guT1JDSElEPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNEQTcwRDYiKSk7SC5QQUxFR09MREVOUk9EPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNFRUU4QUEiKSk7SC5QQUxFR1JFRU49T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzk4RkI5OCIpKTtILlBBTEVUVVJRVU9JU0U9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0FGRUVFRSIpKTtILlBBTEVWSU9MRVRSRUQ9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0RCNzA5MyIpKTtILlBBUEFZQVdISVA9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRUZENSIpKTtILlBFQUNIUFVGRj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZEQUI5IikpO0guUEVSVT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjQ0Q4NTNGIikpO0guUElOSz1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZDMENCIikpO0guUExVTT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRERBMEREIikpO0guUE9XREVSQkxVRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjQjBFMEU2IikpO0guUFVSUExFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM4MDAwODAiKSk7SC5SRUQ9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGMDAwMCIpKTtILlJPU1lCUk9XTj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjQkM4RjhGIikpO0guUk9ZQUxCTFVFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM0MTY5RTEiKSk7SC5TQURETEVCUk9XTj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjOEI0NTEzIikpO0guU0FMTU9OPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGQTgwNzIiKSk7SC5TQU5EWUJST1dOPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNGNEE0NjAiKSk7SC5TRUFHUkVFTj1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjMkU4QjU3IikpO0guU0VBU0hFTEw9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRjVFRSIpKTtILlNJRU5OQT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjQTA1MjJEIikpO0guU0lMVkVSPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNDMEMwQzAiKSk7SC5TS1lCTFVFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiM4N0NFRUIiKSk7SC5TTEFURUJMVUU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzZBNUFDRCIpKTtILlNMQVRFR1JBWT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjNzA4MDkwIikpO0guU0xBVEVHUkVZPUguU0xBVEVHUkFZO0guU05PVz1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZGQUZBIikpO0guU1BSSU5HR1JFRU49T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzAwRkY3RiIpKTtILlNURUVMQkxVRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjNDY4MkI0IikpO0guVEFOPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNEMkI0OEMiKSk7SC5URUFMPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiMwMDgwODAiKSk7SC5USElTVExFPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNEOEJGRDgiKSk7SC5UT01BVE89T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGNjM0NyIpKTtILlRVUlFVT0lTRT1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjNDBFMEQwIikpO0guVklPTEVUPU9iamVjdC5mcmVlemUoSC5mcm9tQ3NzQ29sb3JTdHJpbmcoIiNFRTgyRUUiKSk7SC5XSEVBVD1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRjVERUIzIikpO0guV0hJVEU9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0ZGRkZGRiIpKTtILldISVRFU01PS0U9T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiI0Y1RjVGNSIpKTtILllFTExPVz1PYmplY3QuZnJlZXplKEguZnJvbUNzc0NvbG9yU3RyaW5nKCIjRkZGRjAwIikpO0guWUVMTE9XR1JFRU49T2JqZWN0LmZyZWV6ZShILmZyb21Dc3NDb2xvclN0cmluZygiIzlBQ0QzMiIpKTtILlRSQU5TUEFSRU5UPU9iamVjdC5mcmVlemUobmV3IEgoMCwwLDAsMCkpO25lPUh9KTtmdW5jdGlvbiBxRCh0LGUsbixvLHIpe2xldCBpPU5FO2kubGVuZ3RoPXI7bGV0IHMsZj1uLnJlZCx1PW4uZ3JlZW4sYz1uLmJsdWUsbD1uLmFscGhhLHA9by5yZWQsZD1vLmdyZWVuLG09by5ibHVlLF89by5hbHBoYTtpZihuZS5lcXVhbHMobixvKSl7Zm9yKHM9MDtzPHI7cysrKWlbc109bmUuY2xvbmUobik7cmV0dXJuIGl9bGV0IGc9KHAtZikvcixiPShkLXUpL3IsVD0obS1jKS9yLE89KF8tbCkvcjtmb3Iocz0wO3M8cjtzKyspaVtzXT1uZXcgbmUoZitzKmcsdStzKmIsYytzKlQsbCtzKk8pO3JldHVybiBpfWZ1bmN0aW9uIFFmKHQpe3Q9dD8/SXQuRU1QVFlfT0JKRUNUO2xldCBlPXQucG9zaXRpb25zLG49dC5jb2xvcnMsbz10LndpZHRoPz8xLHI9dC5jb2xvcnNQZXJWZXJ0ZXg/PyExO2lmKCFoKGUpfHxlLmxlbmd0aDwyKXRocm93IG5ldyBEKCJBdCBsZWFzdCB0d28gcG9zaXRpb25zIGFyZSByZXF1aXJlZC4iKTtpZih0eXBlb2YgbyE9Im51bWJlciIpdGhyb3cgbmV3IEQoIndpZHRoIG11c3QgYmUgYSBudW1iZXIiKTtpZihoKG4pJiYociYmbi5sZW5ndGg8ZS5sZW5ndGh8fCFyJiZuLmxlbmd0aDxlLmxlbmd0aC0xKSl0aHJvdyBuZXcgRCgiY29sb3JzIGhhcyBhbiBpbnZhbGlkIGxlbmd0aC4iKTt0aGlzLl9wb3NpdGlvbnM9ZSx0aGlzLl9jb2xvcnM9bix0aGlzLl93aWR0aD1vLHRoaXMuX2NvbG9yc1BlclZlcnRleD1yLHRoaXMuX3ZlcnRleEZvcm1hdD1wdC5jbG9uZSh0LnZlcnRleEZvcm1hdD8/cHQuREVGQVVMVCksdGhpcy5fYXJjVHlwZT10LmFyY1R5cGU/P2hlLkdFT0RFU0lDLHRoaXMuX2dyYW51bGFyaXR5PXQuZ3JhbnVsYXJpdHk/P1AuUkFESUFOU19QRVJfREVHUkVFLHRoaXMuX2VsbGlwc29pZD1ZLmNsb25lKHQuZWxsaXBzb2lkPz9ZLmRlZmF1bHQpLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZVBvbHlsaW5lR2VvbWV0cnkiO2xldCBpPTErZS5sZW5ndGgqYS5wYWNrZWRMZW5ndGg7aSs9aChuKT8xK24ubGVuZ3RoKm5lLnBhY2tlZExlbmd0aDoxLHRoaXMucGFja2VkTGVuZ3RoPWkrWS5wYWNrZWRMZW5ndGgrcHQucGFja2VkTGVuZ3RoKzR9dmFyIE5FLElFLHZFLGJjLENFLHhFLFBFLE1FLF95LEZFPSQoKCk9PntmYygpO2pyKCk7dmUoKTtMdCgpO1BhKCk7RGUoKTt5ZSgpO2Z0KCk7anQoKTskdCgpO1hlKCk7WWUoKTthbigpO3ZwKCk7JGUoKTtLdCgpO3lhKCk7dG4oKTtSbygpO05FPVtdO1FmLnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBEKCJ2YWx1ZSBpcyByZXF1aXJlZCIpO2lmKCFoKGUpKXRocm93IG5ldyBEKCJhcnJheSBpcyByZXF1aXJlZCIpO249bj8/MDtsZXQgbyxyPXQuX3Bvc2l0aW9ucyxpPXIubGVuZ3RoO2ZvcihlW24rK109aSxvPTA7bzxpOysrbyxuKz1hLnBhY2tlZExlbmd0aClhLnBhY2socltvXSxlLG4pO2xldCBzPXQuX2NvbG9ycztmb3IoaT1oKHMpP3MubGVuZ3RoOjAsZVtuKytdPWksbz0wO288aTsrK28sbis9bmUucGFja2VkTGVuZ3RoKW5lLnBhY2soc1tvXSxlLG4pO3JldHVybiBZLnBhY2sodC5fZWxsaXBzb2lkLGUsbiksbis9WS5wYWNrZWRMZW5ndGgscHQucGFjayh0Ll92ZXJ0ZXhGb3JtYXQsZSxuKSxuKz1wdC5wYWNrZWRMZW5ndGgsZVtuKytdPXQuX3dpZHRoLGVbbisrXT10Ll9jb2xvcnNQZXJWZXJ0ZXg/MTowLGVbbisrXT10Ll9hcmNUeXBlLGVbbl09dC5fZ3JhbnVsYXJpdHksZX07SUU9WS5jbG9uZShZLlVOSVRfU1BIRVJFKSx2RT1uZXcgcHQsYmM9e3Bvc2l0aW9uczp2b2lkIDAsY29sb3JzOnZvaWQgMCxlbGxpcHNvaWQ6SUUsdmVydGV4Rm9ybWF0OnZFLHdpZHRoOnZvaWQgMCxjb2xvcnNQZXJWZXJ0ZXg6dm9pZCAwLGFyY1R5cGU6dm9pZCAwLGdyYW51bGFyaXR5OnZvaWQgMH07UWYudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgRCgiYXJyYXkgaXMgcmVxdWlyZWQiKTtlPWU/PzA7bGV0IG8scj10W2UrK10saT1uZXcgQXJyYXkocik7Zm9yKG89MDtvPHI7KytvLGUrPWEucGFja2VkTGVuZ3RoKWlbb109YS51bnBhY2sodCxlKTtyPXRbZSsrXTtsZXQgcz1yPjA/bmV3IEFycmF5KHIpOnZvaWQgMDtmb3Iobz0wO288cjsrK28sZSs9bmUucGFja2VkTGVuZ3RoKXNbb109bmUudW5wYWNrKHQsZSk7bGV0IGY9WS51bnBhY2sodCxlLElFKTtlKz1ZLnBhY2tlZExlbmd0aDtsZXQgdT1wdC51bnBhY2sodCxlLHZFKTtlKz1wdC5wYWNrZWRMZW5ndGg7bGV0IGM9dFtlKytdLGw9dFtlKytdPT09MSxwPXRbZSsrXSxkPXRbZV07cmV0dXJuIGgobik/KG4uX3Bvc2l0aW9ucz1pLG4uX2NvbG9ycz1zLG4uX2VsbGlwc29pZD1ZLmNsb25lKGYsbi5fZWxsaXBzb2lkKSxuLl92ZXJ0ZXhGb3JtYXQ9cHQuY2xvbmUodSxuLl92ZXJ0ZXhGb3JtYXQpLG4uX3dpZHRoPWMsbi5fY29sb3JzUGVyVmVydGV4PWwsbi5fYXJjVHlwZT1wLG4uX2dyYW51bGFyaXR5PWQsbik6KGJjLnBvc2l0aW9ucz1pLGJjLmNvbG9ycz1zLGJjLndpZHRoPWMsYmMuY29sb3JzUGVyVmVydGV4PWwsYmMuYXJjVHlwZT1wLGJjLmdyYW51bGFyaXR5PWQsbmV3IFFmKGJjKSl9O0NFPW5ldyBhLHhFPW5ldyBhLFBFPW5ldyBhLE1FPW5ldyBhO1FmLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX3dpZHRoLG49dC5fdmVydGV4Rm9ybWF0LG89dC5fY29sb3JzLHI9dC5fY29sb3JzUGVyVmVydGV4LGk9dC5fYXJjVHlwZSxzPXQuX2dyYW51bGFyaXR5LGY9dC5fZWxsaXBzb2lkLHUsYyxsLHA9W10sZD14bih0Ll9wb3NpdGlvbnMsYS5lcXVhbHNFcHNpbG9uLCExLHApO2lmKGgobykmJnAubGVuZ3RoPjApe2xldCBMPTAsej1wWzBdO289by5maWx0ZXIoZnVuY3Rpb24oaixrKXtsZXQgcT0hMTtyZXR1cm4gcj9xPWs9PT16fHxrPT09MCYmej09PTE6cT1rKzE9PT16LHE/KEwrKyx6PXBbTF0sITEpOiEwfSl9bGV0IG09ZC5sZW5ndGg7aWYobTwyfHxlPD0wKXJldHVybjtpZihpPT09aGUuR0VPREVTSUN8fGk9PT1oZS5SSFVNQil7bGV0IEwsejtpPT09aGUuR0VPREVTSUM/KEw9UC5jaG9yZExlbmd0aChzLGYubWF4aW11bVJhZGl1cyksej1Bbi5udW1iZXJPZlBvaW50cyk6KEw9cyx6PUFuLm51bWJlck9mUG9pbnRzUmh1bWJMaW5lKTtsZXQgaj1Bbi5leHRyYWN0SGVpZ2h0cyhkLGYpO2lmKGgobykpe2xldCBrPTE7Zm9yKHU9MDt1PG0tMTsrK3Upays9eihkW3VdLGRbdSsxXSxMKTtsZXQgcT1uZXcgQXJyYXkoayksVz0wO2Zvcih1PTA7dTxtLTE7Kyt1KXtsZXQgUj1kW3VdLG50PWRbdSsxXSxhdD1vW3VdLGx0PXooUixudCxMKTtpZihyJiZ1PGspe2xldCBodD1vW3UrMV0sb3Q9cUQoUixudCxhdCxodCxsdCksUHQ9b3QubGVuZ3RoO2ZvcihjPTA7YzxQdDsrK2MpcVtXKytdPW90W2NdfWVsc2UgZm9yKGM9MDtjPGx0OysrYylxW1crK109bmUuY2xvbmUoYXQpfXFbV109bmUuY2xvbmUob1tvLmxlbmd0aC0xXSksbz1xLE5FLmxlbmd0aD0wfWk9PT1oZS5HRU9ERVNJQz9kPUFuLmdlbmVyYXRlQ2FydGVzaWFuQXJjKHtwb3NpdGlvbnM6ZCxtaW5EaXN0YW5jZTpMLGVsbGlwc29pZDpmLGhlaWdodDpqfSk6ZD1Bbi5nZW5lcmF0ZUNhcnRlc2lhblJodW1iQXJjKHtwb3NpdGlvbnM6ZCxncmFudWxhcml0eTpMLGVsbGlwc29pZDpmLGhlaWdodDpqfSl9bT1kLmxlbmd0aDtsZXQgXz1tKjQtNCxnPW5ldyBGbG9hdDY0QXJyYXkoXyozKSxiPW5ldyBGbG9hdDY0QXJyYXkoXyozKSxUPW5ldyBGbG9hdDY0QXJyYXkoXyozKSxPPW5ldyBGbG9hdDMyQXJyYXkoXyoyKSxFPW4uc3Q/bmV3IEZsb2F0MzJBcnJheShfKjIpOnZvaWQgMCx3PWgobyk/bmV3IFVpbnQ4QXJyYXkoXyo0KTp2b2lkIDAsQz0wLE09MCxOPTAsRj0wLEk7Zm9yKGM9MDtjPG07KytjKXtjPT09MD8oST1DRSxhLnN1YnRyYWN0KGRbMF0sZFsxXSxJKSxhLmFkZChkWzBdLEksSSkpOkk9ZFtjLTFdLGEuY2xvbmUoSSxQRSksYS5jbG9uZShkW2NdLHhFKSxjPT09bS0xPyhJPUNFLGEuc3VidHJhY3QoZFttLTFdLGRbbS0yXSxJKSxhLmFkZChkW20tMV0sSSxJKSk6ST1kW2MrMV0sYS5jbG9uZShJLE1FKTtsZXQgTCx6O2godykmJihjIT09MCYmIXI/TD1vW2MtMV06TD1vW2NdLGMhPT1tLTEmJih6PW9bY10pKTtsZXQgaj1jPT09MD8yOjAsaz1jPT09bS0xPzI6NDtmb3IobD1qO2w8azsrK2wpe2EucGFjayh4RSxnLEMpLGEucGFjayhQRSxiLEMpLGEucGFjayhNRSxULEMpLEMrPTM7bGV0IHE9bC0yPDA/LTE6MTtpZihPW00rK109MioobCUyKS0xLE9bTSsrXT1xKmUsbi5zdCYmKEVbTisrXT1jLyhtLTEpLEVbTisrXT1NYXRoLm1heChPW00tMl0sMCkpLGgodykpe2xldCBXPWw8Mj9MOno7d1tGKytdPW5lLmZsb2F0VG9CeXRlKFcucmVkKSx3W0YrK109bmUuZmxvYXRUb0J5dGUoVy5ncmVlbiksd1tGKytdPW5lLmZsb2F0VG9CeXRlKFcuYmx1ZSksd1tGKytdPW5lLmZsb2F0VG9CeXRlKFcuYWxwaGEpfX19bGV0IHY9bmV3IGllO3YucG9zaXRpb249bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpnfSksdi5wcmV2UG9zaXRpb249bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpifSksdi5uZXh0UG9zaXRpb249bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpUfSksdi5leHBhbmRBbmRXaWR0aD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6T30pLG4uc3QmJih2LnN0PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpFfSkpLGgodykmJih2LmNvbG9yPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjQsdmFsdWVzOncsbm9ybWFsaXplOiEwfSkpO2xldCBCPUZ0LmNyZWF0ZVR5cGVkQXJyYXkoXyxtKjYtNiksQT0wLFM9MCx4PW0tMTtmb3IoYz0wO2M8eDsrK2MpQltTKytdPUEsQltTKytdPUErMixCW1MrK109QSsxLEJbUysrXT1BKzEsQltTKytdPUErMixCW1MrK109QSszLEErPTQ7cmV0dXJuIG5ldyBCdCh7YXR0cmlidXRlczp2LGluZGljZXM6QixwcmltaXRpdmVUeXBlOkR0LlRSSUFOR0xFUyxib3VuZGluZ1NwaGVyZTpndC5mcm9tUG9pbnRzKGQpLGdlb21ldHJ5VHlwZTpNaS5QT0xZTElORVN9KX07X3k9UWZ9KTt2YXIgeXk9e307ZGUoeXkse2RlZmF1bHQ6KCk9PldEfSk7ZnVuY3Rpb24gS0QodCxlKXtyZXR1cm4gaChlKSYmKHQ9X3kudW5wYWNrKHQsZSkpLHQuX2VsbGlwc29pZD1ZLmNsb25lKHQuX2VsbGlwc29pZCksX3kuY3JlYXRlR2VvbWV0cnkodCl9dmFyIFdELGd5PSQoKCk9PntmdCgpOyR0KCk7RkUoKTtXRD1LRH0pO2Z1bmN0aW9uIFhEKHQsZSxuLG8pe2xldCByPW5ldyBpZTtvLnBvc2l0aW9uJiYoci5wb3NpdGlvbj1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnR9KSk7bGV0IGk9ZS5sZW5ndGgscz10Lmxlbmd0aC8zLGY9KHMtaSoyKS8oaSoyKSx1PVBlLnRyaWFuZ3VsYXRlKGUpLGM9KGYtMSkqaSo2K3UubGVuZ3RoKjIsbD1GdC5jcmVhdGVUeXBlZEFycmF5KHMsYykscCxkLG0sXyxnLGIsVD1pKjIsTz0wO2ZvcihwPTA7cDxmLTE7cCsrKXtmb3IoZD0wO2Q8aS0xO2QrKyltPWQqMitwKmkqMixiPW0rVCxfPW0rMSxnPV8rVCxsW08rK109XyxsW08rK109bSxsW08rK109ZyxsW08rK109ZyxsW08rK109bSxsW08rK109YjttPWkqMi0yK3AqaSoyLF89bSsxLGc9XytULGI9bStULGxbTysrXT1fLGxbTysrXT1tLGxbTysrXT1nLGxbTysrXT1nLGxbTysrXT1tLGxbTysrXT1ifWlmKG8uc3R8fG8udGFuZ2VudHx8by5iaXRhbmdlbnQpe2xldCBDPW5ldyBGbG9hdDMyQXJyYXkocyoyKSxNPTEvKGYtMSksTj0xL24uaGVpZ2h0LEY9bi5oZWlnaHQvMixJLHYsQj0wO2ZvcihwPTA7cDxmO3ArKyl7Zm9yKEk9cCpNLHY9TiooZVswXS55K0YpLENbQisrXT1JLENbQisrXT12LGQ9MTtkPGk7ZCsrKXY9TiooZVtkXS55K0YpLENbQisrXT1JLENbQisrXT12LENbQisrXT1JLENbQisrXT12O3Y9TiooZVswXS55K0YpLENbQisrXT1JLENbQisrXT12fWZvcihkPTA7ZDxpO2QrKylJPTAsdj1OKihlW2RdLnkrRiksQ1tCKytdPUksQ1tCKytdPXY7Zm9yKGQ9MDtkPGk7ZCsrKUk9KGYtMSkqTSx2PU4qKGVbZF0ueStGKSxDW0IrK109SSxDW0IrK109djtyLnN0PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZToyLHZhbHVlczpuZXcgRmxvYXQzMkFycmF5KEMpfSl9bGV0IEU9cy1pKjI7Zm9yKHA9MDtwPHUubGVuZ3RoO3ArPTMpe2xldCBDPXVbcF0rRSxNPXVbcCsxXStFLE49dVtwKzJdK0U7bFtPKytdPUMsbFtPKytdPU0sbFtPKytdPU4sbFtPKytdPU4raSxsW08rK109TStpLGxbTysrXT1DK2l9bGV0IHc9bmV3IEJ0KHthdHRyaWJ1dGVzOnIsaW5kaWNlczpsLGJvdW5kaW5nU3BoZXJlOmd0LmZyb21WZXJ0aWNlcyh0KSxwcmltaXRpdmVUeXBlOkR0LlRSSUFOR0xFU30pO2lmKG8ubm9ybWFsJiYodz1rZS5jb21wdXRlTm9ybWFsKHcpKSxvLnRhbmdlbnR8fG8uYml0YW5nZW50KXt0cnl7dz1rZS5jb21wdXRlVGFuZ2VudEFuZEJpdGFuZ2VudCh3KX1jYXRjaHt1ZCgicG9seWxpbmUtdm9sdW1lLXRhbmdlbnQtYml0YW5nZW50IiwiVW5hYmxlIHRvIGNvbXB1dGUgdGFuZ2VudHMgYW5kIGJpdGFuZ2VudHMgZm9yIHBvbHlsaW5lIHZvbHVtZSBnZW9tZXRyeSIpfW8udGFuZ2VudHx8KHcuYXR0cmlidXRlcy50YW5nZW50PXZvaWQgMCksby5iaXRhbmdlbnR8fCh3LmF0dHJpYnV0ZXMuYml0YW5nZW50PXZvaWQgMCksby5zdHx8KHcuYXR0cmlidXRlcy5zdD12b2lkIDApfXJldHVybiB3fWZ1bmN0aW9uIHR1KHQpe3Q9dD8/SXQuRU1QVFlfT0JKRUNUO2xldCBlPXQucG9seWxpbmVQb3NpdGlvbnMsbj10LnNoYXBlUG9zaXRpb25zO2lmKCFoKGUpKXRocm93IG5ldyBEKCJvcHRpb25zLnBvbHlsaW5lUG9zaXRpb25zIGlzIHJlcXVpcmVkLiIpO2lmKCFoKG4pKXRocm93IG5ldyBEKCJvcHRpb25zLnNoYXBlUG9zaXRpb25zIGlzIHJlcXVpcmVkLiIpO3RoaXMuX3Bvc2l0aW9ucz1lLHRoaXMuX3NoYXBlPW4sdGhpcy5fZWxsaXBzb2lkPVkuY2xvbmUodC5lbGxpcHNvaWQ/P1kuZGVmYXVsdCksdGhpcy5fY29ybmVyVHlwZT10LmNvcm5lclR5cGU/P2ZuLlJPVU5ERUQsdGhpcy5fdmVydGV4Rm9ybWF0PXB0LmNsb25lKHQudmVydGV4Rm9ybWF0Pz9wdC5ERUZBVUxUKSx0aGlzLl9ncmFudWxhcml0eT10LmdyYW51bGFyaXR5Pz9QLlJBRElBTlNfUEVSX0RFR1JFRSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVQb2x5bGluZVZvbHVtZUdlb21ldHJ5IjtsZXQgbz0xK2UubGVuZ3RoKmEucGFja2VkTGVuZ3RoO28rPTErbi5sZW5ndGgqSi5wYWNrZWRMZW5ndGgsdGhpcy5wYWNrZWRMZW5ndGg9bytZLnBhY2tlZExlbmd0aCtwdC5wYWNrZWRMZW5ndGgrMn12YXIgTEUsREUsSmYsWUQsQXksQkU9JCgoKT0+e2pyKCk7Q2YoKTt2ZSgpO1VlKCk7THQoKTtEZSgpO2hjKCk7eWUoKTtmdCgpO2p0KCk7JHQoKTtYZSgpO1llKCk7YW4oKTtzaSgpOyRlKCk7S3QoKTtXMCgpO3FyKCk7bWQoKTt0bigpO1JvKCk7bGMoKTt0dS5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgRCgidmFsdWUgaXMgcmVxdWlyZWQiKTtpZighaChlKSl0aHJvdyBuZXcgRCgiYXJyYXkgaXMgcmVxdWlyZWQiKTtuPW4/PzA7bGV0IG8scj10Ll9wb3NpdGlvbnMsaT1yLmxlbmd0aDtmb3IoZVtuKytdPWksbz0wO288aTsrK28sbis9YS5wYWNrZWRMZW5ndGgpYS5wYWNrKHJbb10sZSxuKTtsZXQgcz10Ll9zaGFwZTtmb3IoaT1zLmxlbmd0aCxlW24rK109aSxvPTA7bzxpOysrbyxuKz1KLnBhY2tlZExlbmd0aClKLnBhY2soc1tvXSxlLG4pO3JldHVybiBZLnBhY2sodC5fZWxsaXBzb2lkLGUsbiksbis9WS5wYWNrZWRMZW5ndGgscHQucGFjayh0Ll92ZXJ0ZXhGb3JtYXQsZSxuKSxuKz1wdC5wYWNrZWRMZW5ndGgsZVtuKytdPXQuX2Nvcm5lclR5cGUsZVtuXT10Ll9ncmFudWxhcml0eSxlfTtMRT1ZLmNsb25lKFkuVU5JVF9TUEhFUkUpLERFPW5ldyBwdCxKZj17cG9seWxpbmVQb3NpdGlvbnM6dm9pZCAwLHNoYXBlUG9zaXRpb25zOnZvaWQgMCxlbGxpcHNvaWQ6TEUsdmVydGV4Rm9ybWF0OkRFLGNvcm5lclR5cGU6dm9pZCAwLGdyYW51bGFyaXR5OnZvaWQgMH07dHUudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgRCgiYXJyYXkgaXMgcmVxdWlyZWQiKTtlPWU/PzA7bGV0IG8scj10W2UrK10saT1uZXcgQXJyYXkocik7Zm9yKG89MDtvPHI7KytvLGUrPWEucGFja2VkTGVuZ3RoKWlbb109YS51bnBhY2sodCxlKTtyPXRbZSsrXTtsZXQgcz1uZXcgQXJyYXkocik7Zm9yKG89MDtvPHI7KytvLGUrPUoucGFja2VkTGVuZ3RoKXNbb109Si51bnBhY2sodCxlKTtsZXQgZj1ZLnVucGFjayh0LGUsTEUpO2UrPVkucGFja2VkTGVuZ3RoO2xldCB1PXB0LnVucGFjayh0LGUsREUpO2UrPXB0LnBhY2tlZExlbmd0aDtsZXQgYz10W2UrK10sbD10W2VdO3JldHVybiBoKG4pPyhuLl9wb3NpdGlvbnM9aSxuLl9zaGFwZT1zLG4uX2VsbGlwc29pZD1ZLmNsb25lKGYsbi5fZWxsaXBzb2lkKSxuLl92ZXJ0ZXhGb3JtYXQ9cHQuY2xvbmUodSxuLl92ZXJ0ZXhGb3JtYXQpLG4uX2Nvcm5lclR5cGU9YyxuLl9ncmFudWxhcml0eT1sLG4pOihKZi5wb2x5bGluZVBvc2l0aW9ucz1pLEpmLnNoYXBlUG9zaXRpb25zPXMsSmYuY29ybmVyVHlwZT1jLEpmLmdyYW51bGFyaXR5PWwsbmV3IHR1KEpmKSl9O1lEPW5ldyBIcjt0dS5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbih0KXtsZXQgZT10Ll9wb3NpdGlvbnMsbj14bihlLGEuZXF1YWxzRXBzaWxvbiksbz10Ll9zaGFwZTtpZihvPWhzLnJlbW92ZUR1cGxpY2F0ZXNGcm9tU2hhcGUobyksbi5sZW5ndGg8Mnx8by5sZW5ndGg8MylyZXR1cm47UGUuY29tcHV0ZVdpbmRpbmdPcmRlcjJEKG8pPT09Q28uQ0xPQ0tXSVNFJiZvLnJldmVyc2UoKTtsZXQgcj1Ici5mcm9tUG9pbnRzKG8sWUQpLGk9aHMuY29tcHV0ZVBvc2l0aW9ucyhuLG8scix0LCEwKTtyZXR1cm4gWEQoaSxvLHIsdC5fdmVydGV4Rm9ybWF0KX07QXk9dHV9KTt2YXIgYnk9e307ZGUoYnkse2RlZmF1bHQ6KCk9PlpEfSk7ZnVuY3Rpb24gJEQodCxlKXtyZXR1cm4gaChlKSYmKHQ9QXkudW5wYWNrKHQsZSkpLHQuX2VsbGlwc29pZD1ZLmNsb25lKHQuX2VsbGlwc29pZCksQXkuY3JlYXRlR2VvbWV0cnkodCl9dmFyIFpELFR5PSQoKCk9PntmdCgpOyR0KCk7QkUoKTtaRD0kRH0pO2Z1bmN0aW9uIFFEKHQsZSl7bGV0IG49bmV3IGllO24ucG9zaXRpb249bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczp0fSk7bGV0IG89ZS5sZW5ndGgscj1uLnBvc2l0aW9uLnZhbHVlcy5sZW5ndGgvMyxzPXQubGVuZ3RoLzMvbyxmPUZ0LmNyZWF0ZVR5cGVkQXJyYXkociwyKm8qKHMrMSkpLHUsYyxsPTA7dT0wO2xldCBwPXUqbztmb3IoYz0wO2M8by0xO2MrKylmW2wrK109YytwLGZbbCsrXT1jK3ArMTtmb3IoZltsKytdPW8tMStwLGZbbCsrXT1wLHU9cy0xLHA9dSpvLGM9MDtjPG8tMTtjKyspZltsKytdPWMrcCxmW2wrK109YytwKzE7Zm9yKGZbbCsrXT1vLTErcCxmW2wrK109cCx1PTA7dTxzLTE7dSsrKXtsZXQgbT1vKnUsXz1tK287Zm9yKGM9MDtjPG87YysrKWZbbCsrXT1jK20sZltsKytdPWMrX31yZXR1cm4gbmV3IEJ0KHthdHRyaWJ1dGVzOm4saW5kaWNlczpGdC5jcmVhdGVUeXBlZEFycmF5KHIsZiksYm91bmRpbmdTcGhlcmU6Z3QuZnJvbVZlcnRpY2VzKHQpLHByaW1pdGl2ZVR5cGU6RHQuTElORVN9KX1mdW5jdGlvbiBudSh0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVDtsZXQgZT10LnBvbHlsaW5lUG9zaXRpb25zLG49dC5zaGFwZVBvc2l0aW9ucztpZighaChlKSl0aHJvdyBuZXcgRCgib3B0aW9ucy5wb2x5bGluZVBvc2l0aW9ucyBpcyByZXF1aXJlZC4iKTtpZighaChuKSl0aHJvdyBuZXcgRCgib3B0aW9ucy5zaGFwZVBvc2l0aW9ucyBpcyByZXF1aXJlZC4iKTt0aGlzLl9wb3NpdGlvbnM9ZSx0aGlzLl9zaGFwZT1uLHRoaXMuX2VsbGlwc29pZD1ZLmNsb25lKHQuZWxsaXBzb2lkPz9ZLmRlZmF1bHQpLHRoaXMuX2Nvcm5lclR5cGU9dC5jb3JuZXJUeXBlPz9mbi5ST1VOREVELHRoaXMuX2dyYW51bGFyaXR5PXQuZ3JhbnVsYXJpdHk/P1AuUkFESUFOU19QRVJfREVHUkVFLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZVBvbHlsaW5lVm9sdW1lT3V0bGluZUdlb21ldHJ5IjtsZXQgbz0xK2UubGVuZ3RoKmEucGFja2VkTGVuZ3RoO28rPTErbi5sZW5ndGgqSi5wYWNrZWRMZW5ndGgsdGhpcy5wYWNrZWRMZW5ndGg9bytZLnBhY2tlZExlbmd0aCsyfXZhciBVRSxldSxKRCx3eSxrRT0kKCgpPT57anIoKTtDZigpO3ZlKCk7VWUoKTtMdCgpO0RlKCk7aGMoKTt5ZSgpO2Z0KCk7anQoKTskdCgpO1hlKCk7WWUoKTthbigpOyRlKCk7S3QoKTtxcigpO21kKCk7dG4oKTtsYygpO251LnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBEKCJ2YWx1ZSBpcyByZXF1aXJlZCIpO2lmKCFoKGUpKXRocm93IG5ldyBEKCJhcnJheSBpcyByZXF1aXJlZCIpO249bj8/MDtsZXQgbyxyPXQuX3Bvc2l0aW9ucyxpPXIubGVuZ3RoO2ZvcihlW24rK109aSxvPTA7bzxpOysrbyxuKz1hLnBhY2tlZExlbmd0aClhLnBhY2socltvXSxlLG4pO2xldCBzPXQuX3NoYXBlO2ZvcihpPXMubGVuZ3RoLGVbbisrXT1pLG89MDtvPGk7KytvLG4rPUoucGFja2VkTGVuZ3RoKUoucGFjayhzW29dLGUsbik7cmV0dXJuIFkucGFjayh0Ll9lbGxpcHNvaWQsZSxuKSxuKz1ZLnBhY2tlZExlbmd0aCxlW24rK109dC5fY29ybmVyVHlwZSxlW25dPXQuX2dyYW51bGFyaXR5LGV9O1VFPVkuY2xvbmUoWS5VTklUX1NQSEVSRSksZXU9e3BvbHlsaW5lUG9zaXRpb25zOnZvaWQgMCxzaGFwZVBvc2l0aW9uczp2b2lkIDAsZWxsaXBzb2lkOlVFLGhlaWdodDp2b2lkIDAsY29ybmVyVHlwZTp2b2lkIDAsZ3JhbnVsYXJpdHk6dm9pZCAwfTtudS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBEKCJhcnJheSBpcyByZXF1aXJlZCIpO2U9ZT8/MDtsZXQgbyxyPXRbZSsrXSxpPW5ldyBBcnJheShyKTtmb3Iobz0wO288cjsrK28sZSs9YS5wYWNrZWRMZW5ndGgpaVtvXT1hLnVucGFjayh0LGUpO3I9dFtlKytdO2xldCBzPW5ldyBBcnJheShyKTtmb3Iobz0wO288cjsrK28sZSs9Si5wYWNrZWRMZW5ndGgpc1tvXT1KLnVucGFjayh0LGUpO2xldCBmPVkudW5wYWNrKHQsZSxVRSk7ZSs9WS5wYWNrZWRMZW5ndGg7bGV0IHU9dFtlKytdLGM9dFtlXTtyZXR1cm4gaChuKT8obi5fcG9zaXRpb25zPWksbi5fc2hhcGU9cyxuLl9lbGxpcHNvaWQ9WS5jbG9uZShmLG4uX2VsbGlwc29pZCksbi5fY29ybmVyVHlwZT11LG4uX2dyYW51bGFyaXR5PWMsbik6KGV1LnBvbHlsaW5lUG9zaXRpb25zPWksZXUuc2hhcGVQb3NpdGlvbnM9cyxldS5jb3JuZXJUeXBlPXUsZXUuZ3JhbnVsYXJpdHk9YyxuZXcgbnUoZXUpKX07SkQ9bmV3IEhyO251LmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX3Bvc2l0aW9ucyxuPXhuKGUsYS5lcXVhbHNFcHNpbG9uKSxvPXQuX3NoYXBlO2lmKG89aHMucmVtb3ZlRHVwbGljYXRlc0Zyb21TaGFwZShvKSxuLmxlbmd0aDwyfHxvLmxlbmd0aDwzKXJldHVybjtQZS5jb21wdXRlV2luZGluZ09yZGVyMkQobyk9PT1Dby5DTE9DS1dJU0UmJm8ucmV2ZXJzZSgpO2xldCByPUhyLmZyb21Qb2ludHMobyxKRCksaT1ocy5jb21wdXRlUG9zaXRpb25zKG4sbyxyLHQsITEpO3JldHVybiBRRChpLG8pfTt3eT1udX0pO3ZhciBPeT17fTtkZShPeSx7ZGVmYXVsdDooKT0+ZUJ9KTtmdW5jdGlvbiB0Qih0LGUpe3JldHVybiBoKGUpJiYodD13eS51bnBhY2sodCxlKSksdC5fZWxsaXBzb2lkPVkuY2xvbmUodC5fZWxsaXBzb2lkKSx3eS5jcmVhdGVHZW9tZXRyeSh0KX12YXIgZUIsRXk9JCgoKT0+e2Z0KCk7JHQoKTtrRSgpO2VCPXRCfSk7ZnVuY3Rpb24gekUodCxlLG4sbyxyLGkscyl7bGV0IGY9TWF0aC5jb3MoZSksdT1vKmYsYz1uKmYsbD1NYXRoLnNpbihlKSxwPW8qbCxkPW4qbDtvdS5fZWxsaXBzb2lkPVkuZGVmYXVsdCxTcj1vdS5wcm9qZWN0KHQsU3IpLFNyPWEuc3VidHJhY3QoU3IsRmQsU3IpO2xldCBtPVlvLmZyb21Sb3RhdGlvbihlLG9CKTtTcj1Zby5tdWx0aXBseUJ5VmVjdG9yKG0sU3IsU3IpLFNyPWEuYWRkKFNyLEZkLFNyKSx0PW91LnVucHJvamVjdChTcix0KSxpLT0xLHMtPTE7bGV0IF89dC5sYXRpdHVkZSxnPV8raSpkLGI9Xy11KnMsVD1fLXUqcytpKmQsTz1NYXRoLm1heChfLGcsYixUKSxFPU1hdGgubWluKF8sZyxiLFQpLHc9dC5sb25naXR1ZGUsQz13K2kqYyxNPXcrcypwLE49dytzKnAraSpjLEY9TWF0aC5tYXgodyxDLE0sTiksST1NYXRoLm1pbih3LEMsTSxOKTtyZXR1cm57bm9ydGg6Tyxzb3V0aDpFLGVhc3Q6Rix3ZXN0OkksZ3JhbllDb3M6dSxncmFuWVNpbjpwLGdyYW5YQ29zOmMsZ3JhblhTaW46ZCxud0Nvcm5lcjp0fX12YXIgR0UsVkUsbkIsUnksb0IsU3IsckIsRmQsb3UsZ28sU3k9JCgoKT0+e0x0KCk7SWUoKTtmdCgpO2p0KCk7JHQoKTtTaSgpO0t0KCk7QWYoKTt3bigpO0dFPU1hdGguY29zLFZFPU1hdGguc2luLG5CPU1hdGguc3FydCxSeT17fTtSeS5jb21wdXRlUG9zaXRpb249ZnVuY3Rpb24odCxlLG4sbyxyLGkscyl7bGV0IGY9ZS5yYWRpaVNxdWFyZWQsdT10Lm53Q29ybmVyLGM9dC5ib3VuZGluZ1JlY3RhbmdsZSxsPXUubGF0aXR1ZGUtdC5ncmFuWUNvcypvK3IqdC5ncmFuWFNpbixwPUdFKGwpLGQ9VkUobCksbT1mLnoqZCxfPXUubG9uZ2l0dWRlK28qdC5ncmFuWVNpbityKnQuZ3JhblhDb3MsZz1wKkdFKF8pLGI9cCpWRShfKSxUPWYueCpnLE89Zi55KmIsRT1uQihUKmcrTypiK20qZCk7aWYoaS54PVQvRSxpLnk9Ty9FLGkuej1tL0Usbil7bGV0IHc9dC5zdE53Q29ybmVyO2godyk/KGw9dy5sYXRpdHVkZS10LnN0R3JhbllDb3MqbytyKnQuc3RHcmFuWFNpbixfPXcubG9uZ2l0dWRlK28qdC5zdEdyYW5ZU2luK3IqdC5zdEdyYW5YQ29zLHMueD0oXy10LnN0V2VzdCkqdC5sb25TY2FsYXIscy55PShsLXQuc3RTb3V0aCkqdC5sYXRTY2FsYXIpOihzLng9KF8tYy53ZXN0KSp0LmxvblNjYWxhcixzLnk9KGwtYy5zb3V0aCkqdC5sYXRTY2FsYXIpfX07b0I9bmV3IFlvLFNyPW5ldyBhLHJCPW5ldyBjdCxGZD1uZXcgYSxvdT1uZXcgSm47UnkuY29tcHV0ZU9wdGlvbnM9ZnVuY3Rpb24odCxlLG4sbyxyLGkscyl7bGV0IGY9dC5lYXN0LHU9dC53ZXN0LGM9dC5ub3J0aCxsPXQuc291dGgscD0hMSxkPSExO2M9PT1QLlBJX09WRVJfVFdPJiYocD0hMCksbD09PS1QLlBJX09WRVJfVFdPJiYoZD0hMCk7bGV0IG0sXz1jLWw7dT5mP209UC5UV09fUEktdStmOm09Zi11O2xldCBnPU1hdGguY2VpbChtL2UpKzEsYj1NYXRoLmNlaWwoXy9lKSsxLFQ9bS8oZy0xKSxPPV8vKGItMSksRT1OdC5ub3J0aHdlc3QodCxpKSx3PU50LmNlbnRlcih0LHJCKTsobiE9PTB8fG8hPT0wKSYmKHcubG9uZ2l0dWRlPEUubG9uZ2l0dWRlJiYody5sb25naXR1ZGUrPVAuVFdPX1BJKSxvdS5fZWxsaXBzb2lkPVkuZGVmYXVsdCxGZD1vdS5wcm9qZWN0KHcsRmQpKTtsZXQgQz1PLE09VCxOPTAsRj0wLEk9TnQuY2xvbmUodCxyKSx2PXtncmFuWUNvczpDLGdyYW5ZU2luOk4sZ3JhblhDb3M6TSxncmFuWFNpbjpGLG53Q29ybmVyOkUsYm91bmRpbmdSZWN0YW5nbGU6SSx3aWR0aDpnLGhlaWdodDpiLG5vcnRoQ2FwOnAsc291dGhDYXA6ZH07aWYobiE9PTApe2xldCBCPXpFKEUsbixULE8sdyxnLGIpO2lmKGM9Qi5ub3J0aCxsPUIuc291dGgsZj1CLmVhc3QsdT1CLndlc3QsYzwtUC5QSV9PVkVSX1RXT3x8Yz5QLlBJX09WRVJfVFdPfHxsPC1QLlBJX09WRVJfVFdPfHxsPlAuUElfT1ZFUl9UV08pdGhyb3cgbmV3IEQoIlJvdGF0ZWQgcmVjdGFuZ2xlIGlzIGludmFsaWQuICBJdCBjcm9zc2VzIG92ZXIgZWl0aGVyIHRoZSBub3J0aCBvciBzb3V0aCBwb2xlLiIpO3YuZ3JhbllDb3M9Qi5ncmFuWUNvcyx2LmdyYW5ZU2luPUIuZ3JhbllTaW4sdi5ncmFuWENvcz1CLmdyYW5YQ29zLHYuZ3JhblhTaW49Qi5ncmFuWFNpbixJLm5vcnRoPWMsSS5zb3V0aD1sLEkuZWFzdD1mLEkud2VzdD11fWlmKG8hPT0wKXtuPW4tbztsZXQgQj1OdC5ub3J0aHdlc3QoSSxzKSxBPXpFKEIsbixULE8sdyxnLGIpO3Yuc3RHcmFuWUNvcz1BLmdyYW5ZQ29zLHYuc3RHcmFuWENvcz1BLmdyYW5YQ29zLHYuc3RHcmFuWVNpbj1BLmdyYW5ZU2luLHYuc3RHcmFuWFNpbj1BLmdyYW5YU2luLHYuc3ROd0Nvcm5lcj1CLHYuc3RXZXN0PUEud2VzdCx2LnN0U291dGg9QS5zb3V0aH1yZXR1cm4gdn07Z289Unl9KTtmdW5jdGlvbiBZRSh0LGUpe2xldCBuPW5ldyBCdCh7YXR0cmlidXRlczpuZXcgaWUscHJpbWl0aXZlVHlwZTpEdC5UUklBTkdMRVN9KTtyZXR1cm4gbi5hdHRyaWJ1dGVzLnBvc2l0aW9uPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6ZS5wb3NpdGlvbnN9KSx0Lm5vcm1hbCYmKG4uYXR0cmlidXRlcy5ub3JtYWw9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmUubm9ybWFsc30pKSx0LnRhbmdlbnQmJihuLmF0dHJpYnV0ZXMudGFuZ2VudD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6ZS50YW5nZW50c30pKSx0LmJpdGFuZ2VudCYmKG4uYXR0cmlidXRlcy5iaXRhbmdlbnQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmUuYml0YW5nZW50c30pKSxufWZ1bmN0aW9uIGFCKHQsZSxuLG8pe2xldCByPXQubGVuZ3RoLGk9ZS5ub3JtYWw/bmV3IEZsb2F0MzJBcnJheShyKTp2b2lkIDAscz1lLnRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShyKTp2b2lkIDAsZj1lLmJpdGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KHIpOnZvaWQgMCx1PTAsYz1XRSxsPUtFLHA9cUU7aWYoZS5ub3JtYWx8fGUudGFuZ2VudHx8ZS5iaXRhbmdlbnQpZm9yKGxldCBkPTA7ZDxyO2QrPTMpe2xldCBtPWEuZnJvbUFycmF5KHQsZCxDeSksXz11KzEsZz11KzI7cD1uLmdlb2RldGljU3VyZmFjZU5vcm1hbChtLHApLChlLnRhbmdlbnR8fGUuYml0YW5nZW50KSYmKGEuY3Jvc3MoYS5VTklUX1oscCxsKSxaLm11bHRpcGx5QnlWZWN0b3IobyxsLGwpLGEubm9ybWFsaXplKGwsbCksZS5iaXRhbmdlbnQmJmEubm9ybWFsaXplKGEuY3Jvc3MocCxsLGMpLGMpKSxlLm5vcm1hbCYmKGlbdV09cC54LGlbX109cC55LGlbZ109cC56KSxlLnRhbmdlbnQmJihzW3VdPWwueCxzW19dPWwueSxzW2ddPWwueiksZS5iaXRhbmdlbnQmJihmW3VdPWMueCxmW19dPWMueSxmW2ddPWMueiksdSs9M31yZXR1cm4gWUUoZSx7cG9zaXRpb25zOnQsbm9ybWFsczppLHRhbmdlbnRzOnMsYml0YW5nZW50czpmfSl9ZnVuY3Rpb24gZkIodCxlLG4pe2xldCBvPXQubGVuZ3RoLHI9ZS5ub3JtYWw/bmV3IEZsb2F0MzJBcnJheShvKTp2b2lkIDAsaT1lLnRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShvKTp2b2lkIDAscz1lLmJpdGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KG8pOnZvaWQgMCxmPTAsdT0wLGM9MCxsPSEwLHA9V0UsZD1LRSxtPXFFO2lmKGUubm9ybWFsfHxlLnRhbmdlbnR8fGUuYml0YW5nZW50KWZvcihsZXQgXz0wO188bztfKz02KXtsZXQgZz1hLmZyb21BcnJheSh0LF8sQ3kpLGI9YS5mcm9tQXJyYXkodCwoXys2KSVvLHh5KTtpZihsKXtsZXQgVD1hLmZyb21BcnJheSh0LChfKzMpJW8sJEUpO2Euc3VidHJhY3QoYixnLGIpLGEuc3VidHJhY3QoVCxnLFQpLG09YS5ub3JtYWxpemUoYS5jcm9zcyhULGIsbSksbSksbD0hMX1hLmVxdWFsc0Vwc2lsb24oYixnLFAuRVBTSUxPTjEwKSYmKGw9ITApLChlLnRhbmdlbnR8fGUuYml0YW5nZW50KSYmKHA9bi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoZyxwKSxlLnRhbmdlbnQmJihkPWEubm9ybWFsaXplKGEuY3Jvc3MocCxtLGQpLGQpKSksZS5ub3JtYWwmJihyW2YrK109bS54LHJbZisrXT1tLnkscltmKytdPW0ueixyW2YrK109bS54LHJbZisrXT1tLnkscltmKytdPW0ueiksZS50YW5nZW50JiYoaVt1KytdPWQueCxpW3UrK109ZC55LGlbdSsrXT1kLnosaVt1KytdPWQueCxpW3UrK109ZC55LGlbdSsrXT1kLnopLGUuYml0YW5nZW50JiYoc1tjKytdPXAueCxzW2MrK109cC55LHNbYysrXT1wLnosc1tjKytdPXAueCxzW2MrK109cC55LHNbYysrXT1wLnopfXJldHVybiBZRShlLHtwb3NpdGlvbnM6dCxub3JtYWxzOnIsdGFuZ2VudHM6aSxiaXRhbmdlbnRzOnN9KX1mdW5jdGlvbiBaRSh0LGUpe2xldCBuPXQuX3ZlcnRleEZvcm1hdCxvPXQuX2VsbGlwc29pZCxyPWUuaGVpZ2h0LGk9ZS53aWR0aCxzPWUubm9ydGhDYXAsZj1lLnNvdXRoQ2FwLHU9MCxjPXIsbD1yLHA9MDtzJiYodT0xLGwtPTEscCs9MSksZiYmKGMtPTEsbC09MSxwKz0xKSxwKz1pKmw7bGV0IGQ9bi5wb3NpdGlvbj9uZXcgRmxvYXQ2NEFycmF5KHAqMyk6dm9pZCAwLG09bi5zdD9uZXcgRmxvYXQzMkFycmF5KHAqMik6dm9pZCAwLF89MCxnPTAsYj1DeSxUPWlCLE89TnVtYmVyLk1BWF9WQUxVRSxFPU51bWJlci5NQVhfVkFMVUUsdz0tTnVtYmVyLk1BWF9WQUxVRSxDPS1OdW1iZXIuTUFYX1ZBTFVFO2ZvcihsZXQgQT11O0E8YzsrK0EpZm9yKGxldCBTPTA7UzxpOysrUylnby5jb21wdXRlUG9zaXRpb24oZSxvLG4uc3QsQSxTLGIsVCksZFtfKytdPWIueCxkW18rK109Yi55LGRbXysrXT1iLnosbi5zdCYmKG1bZysrXT1ULngsbVtnKytdPVQueSxPPU1hdGgubWluKE8sVC54KSxFPU1hdGgubWluKEUsVC55KSx3PU1hdGgubWF4KHcsVC54KSxDPU1hdGgubWF4KEMsVC55KSk7aWYocyYmKGdvLmNvbXB1dGVQb3NpdGlvbihlLG8sbi5zdCwwLDAsYixUKSxkW18rK109Yi54LGRbXysrXT1iLnksZFtfKytdPWIueixuLnN0JiYobVtnKytdPVQueCxtW2crK109VC55LE89VC54LEU9VC55LHc9VC54LEM9VC55KSksZiYmKGdvLmNvbXB1dGVQb3NpdGlvbihlLG8sbi5zdCxyLTEsMCxiLFQpLGRbXysrXT1iLngsZFtfKytdPWIueSxkW19dPWIueixuLnN0JiYobVtnKytdPVQueCxtW2ddPVQueSxPPU1hdGgubWluKE8sVC54KSxFPU1hdGgubWluKEUsVC55KSx3PU1hdGgubWF4KHcsVC54KSxDPU1hdGgubWF4KEMsVC55KSkpLG4uc3QmJihPPDB8fEU8MHx8dz4xfHxDPjEpKWZvcihsZXQgQT0wO0E8bS5sZW5ndGg7QSs9MiltW0FdPShtW0FdLU8pLyh3LU8pLG1bQSsxXT0obVtBKzFdLUUpLyhDLUUpO2xldCBNPWFCKGQsbixvLGUudGFuZ2VudFJvdGF0aW9uTWF0cml4KSxOPTYqKGktMSkqKGwtMSk7cyYmKE4rPTMqKGktMSkpLGYmJihOKz0zKihpLTEpKTtsZXQgRj1GdC5jcmVhdGVUeXBlZEFycmF5KHAsTiksST0wLHY9MCxCO2ZvcihCPTA7QjxsLTE7KytCKXtmb3IobGV0IEE9MDtBPGktMTsrK0Epe2xldCBTPUkseD1TK2ksTD14KzEsej1TKzE7Rlt2KytdPVMsRlt2KytdPXgsRlt2KytdPXosRlt2KytdPXosRlt2KytdPXgsRlt2KytdPUwsKytJfSsrSX1pZihzfHxmKXtsZXQgQT1wLTEsUz1wLTE7cyYmZiYmKEE9cC0yKTtsZXQgeCxMO2lmKEk9MCxzKWZvcihCPTA7QjxpLTE7QisrKXg9SSxMPXgrMSxGW3YrK109QSxGW3YrK109eCxGW3YrK109TCwrK0k7aWYoZilmb3IoST0obC0xKSppLEI9MDtCPGktMTtCKyspeD1JLEw9eCsxLEZbdisrXT14LEZbdisrXT1TLEZbdisrXT1MLCsrSX1yZXR1cm4gTS5pbmRpY2VzPUYsbi5zdCYmKE0uYXR0cmlidXRlcy5zdD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkZMT0FULGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Mix2YWx1ZXM6bX0pKSxNfWZ1bmN0aW9uIE1hKHQsZSxuLG8scil7cmV0dXJuIHRbZSsrXT1vW25dLHRbZSsrXT1vW24rMV0sdFtlKytdPW9bbisyXSx0W2UrK109cltuXSx0W2UrK109cltuKzFdLHRbZV09cltuKzJdLHR9ZnVuY3Rpb24gTmEodCxlLG4sbyl7cmV0dXJuIHRbZSsrXT1vW25dLHRbZSsrXT1vW24rMV0sdFtlKytdPW9bbl0sdFtlXT1vW24rMV0sdH1mdW5jdGlvbiB1Qih0LGUpe2xldCBuPXQuX3NoYWRvd1ZvbHVtZSxvPXQuX29mZnNldEF0dHJpYnV0ZSxyPXQuX3ZlcnRleEZvcm1hdCxpPXQuX2V4dHJ1ZGVkSGVpZ2h0LHM9dC5fc3VyZmFjZUhlaWdodCxmPXQuX2VsbGlwc29pZCx1PWUuaGVpZ2h0LGM9ZS53aWR0aCxsO2lmKG4pe2xldCBRdD1wdC5jbG9uZShyLFB5KTtRdC5ub3JtYWw9ITAsdC5fdmVydGV4Rm9ybWF0PVF0fWxldCBwPVpFKHQsZSk7biYmKHQuX3ZlcnRleEZvcm1hdD1yKTtsZXQgZD1QZS5zY2FsZVRvR2VvZGV0aWNIZWlnaHQocC5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxzLGYsITEpO2Q9bmV3IEZsb2F0NjRBcnJheShkKTtsZXQgbT1kLmxlbmd0aCxfPW0qMixnPW5ldyBGbG9hdDY0QXJyYXkoXyk7Zy5zZXQoZCk7bGV0IGI9UGUuc2NhbGVUb0dlb2RldGljSGVpZ2h0KHAuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsaSxmKTtnLnNldChiLG0pLHAuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXM9ZztsZXQgVD1yLm5vcm1hbD9uZXcgRmxvYXQzMkFycmF5KF8pOnZvaWQgMCxPPXIudGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KF8pOnZvaWQgMCxFPXIuYml0YW5nZW50P25ldyBGbG9hdDMyQXJyYXkoXyk6dm9pZCAwLHc9ci5zdD9uZXcgRmxvYXQzMkFycmF5KF8vMyoyKTp2b2lkIDAsQyxNO2lmKHIubm9ybWFsKXtmb3IoTT1wLmF0dHJpYnV0ZXMubm9ybWFsLnZhbHVlcyxULnNldChNKSxsPTA7bDxtO2wrKylNW2xdPS1NW2xdO1Quc2V0KE0sbSkscC5hdHRyaWJ1dGVzLm5vcm1hbC52YWx1ZXM9VH1pZihuKXtNPXAuYXR0cmlidXRlcy5ub3JtYWwudmFsdWVzLHIubm9ybWFsfHwocC5hdHRyaWJ1dGVzLm5vcm1hbD12b2lkIDApO2xldCBRdD1uZXcgRmxvYXQzMkFycmF5KF8pO2ZvcihsPTA7bDxtO2wrKylNW2xdPS1NW2xdO1F0LnNldChNLG0pLHAuYXR0cmlidXRlcy5leHRydWRlRGlyZWN0aW9uPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpRdH0pfWxldCBOLEY9aChvKTtpZihGKXtsZXQgUXQ9bS8zKjIsTmU9bmV3IFVpbnQ4QXJyYXkoUXQpO289PT1hZS5UT1A/TmU9TmUuZmlsbCgxLDAsUXQvMik6KE49bz09PWFlLk5PTkU/MDoxLE5lPU5lLmZpbGwoTikpLHAuYXR0cmlidXRlcy5hcHBseU9mZnNldD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpOZX0pfWlmKHIudGFuZ2VudCl7bGV0IFF0PXAuYXR0cmlidXRlcy50YW5nZW50LnZhbHVlcztmb3IoTy5zZXQoUXQpLGw9MDtsPG07bCsrKVF0W2xdPS1RdFtsXTtPLnNldChRdCxtKSxwLmF0dHJpYnV0ZXMudGFuZ2VudC52YWx1ZXM9T31pZihyLmJpdGFuZ2VudCl7bGV0IFF0PXAuYXR0cmlidXRlcy5iaXRhbmdlbnQudmFsdWVzO0Uuc2V0KFF0KSxFLnNldChRdCxtKSxwLmF0dHJpYnV0ZXMuYml0YW5nZW50LnZhbHVlcz1FfXIuc3QmJihDPXAuYXR0cmlidXRlcy5zdC52YWx1ZXMsdy5zZXQoQyksdy5zZXQoQyxtLzMqMikscC5hdHRyaWJ1dGVzLnN0LnZhbHVlcz13KTtsZXQgST1wLmluZGljZXMsdj1JLmxlbmd0aCxCPW0vMyxBPUZ0LmNyZWF0ZVR5cGVkQXJyYXkoXy8zLHYqMik7Zm9yKEEuc2V0KEkpLGw9MDtsPHY7bCs9MylBW2wrdl09SVtsKzJdK0IsQVtsKzErdl09SVtsKzFdK0IsQVtsKzIrdl09SVtsXStCO3AuaW5kaWNlcz1BO2xldCBTPWUubm9ydGhDYXAseD1lLnNvdXRoQ2FwLEw9dSx6PTIsaj0wLGs9NCxxPTQ7UyYmKHotPTEsTC09MSxqKz0xLGstPTIscS09MSkseCYmKHotPTEsTC09MSxqKz0xLGstPTIscS09MSksais9eipjKzIqTC1rO2xldCBXPShqK3EpKjIsUj1uZXcgRmxvYXQ2NEFycmF5KFcqMyksbnQ9bj9uZXcgRmxvYXQzMkFycmF5KFcqMyk6dm9pZCAwLGF0PUY/bmV3IFVpbnQ4QXJyYXkoVyk6dm9pZCAwLGx0PXIuc3Q/bmV3IEZsb2F0MzJBcnJheShXKjIpOnZvaWQgMCxodD1vPT09YWUuVE9QO0YmJiFodCYmKE49bz09PWFlLkFMTD8xOjAsYXQ9YXQuZmlsbChOKSk7bGV0IG90PTAsUHQ9MCx5dD0wLEV0PTAsZHQ9YypMLHJ0O2ZvcihsPTA7bDxkdDtsKz1jKXJ0PWwqMyxSPU1hKFIsb3QscnQsZCxiKSxvdCs9NixyLnN0JiYobHQ9TmEobHQsUHQsbCoyLEMpLFB0Kz00KSxuJiYoeXQrPTMsbnRbeXQrK109TVtydF0sbnRbeXQrK109TVtydCsxXSxudFt5dCsrXT1NW3J0KzJdKSxodCYmKGF0W0V0KytdPTEsRXQrPTEpO2lmKHgpe2xldCBRdD1TP2R0KzE6ZHQ7Zm9yKHJ0PVF0KjMsbD0wO2w8MjtsKyspUj1NYShSLG90LHJ0LGQsYiksb3QrPTYsci5zdCYmKGx0PU5hKGx0LFB0LFF0KjIsQyksUHQrPTQpLG4mJih5dCs9MyxudFt5dCsrXT1NW3J0XSxudFt5dCsrXT1NW3J0KzFdLG50W3l0KytdPU1bcnQrMl0pLGh0JiYoYXRbRXQrK109MSxFdCs9MSl9ZWxzZSBmb3IobD1kdC1jO2w8ZHQ7bCsrKXJ0PWwqMyxSPU1hKFIsb3QscnQsZCxiKSxvdCs9NixyLnN0JiYobHQ9TmEobHQsUHQsbCoyLEMpLFB0Kz00KSxuJiYoeXQrPTMsbnRbeXQrK109TVtydF0sbnRbeXQrK109TVtydCsxXSxudFt5dCsrXT1NW3J0KzJdKSxodCYmKGF0W0V0KytdPTEsRXQrPTEpO2ZvcihsPWR0LTE7bD4wO2wtPWMpcnQ9bCozLFI9TWEoUixvdCxydCxkLGIpLG90Kz02LHIuc3QmJihsdD1OYShsdCxQdCxsKjIsQyksUHQrPTQpLG4mJih5dCs9MyxudFt5dCsrXT1NW3J0XSxudFt5dCsrXT1NW3J0KzFdLG50W3l0KytdPU1bcnQrMl0pLGh0JiYoYXRbRXQrK109MSxFdCs9MSk7aWYoUyl7bGV0IFF0PWR0O2ZvcihydD1RdCozLGw9MDtsPDI7bCsrKVI9TWEoUixvdCxydCxkLGIpLG90Kz02LHIuc3QmJihsdD1OYShsdCxQdCxRdCoyLEMpLFB0Kz00KSxuJiYoeXQrPTMsbnRbeXQrK109TVtydF0sbnRbeXQrK109TVtydCsxXSxudFt5dCsrXT1NW3J0KzJdKSxodCYmKGF0W0V0KytdPTEsRXQrPTEpfWVsc2UgZm9yKGw9Yy0xO2w+PTA7bC0tKXJ0PWwqMyxSPU1hKFIsb3QscnQsZCxiKSxvdCs9NixyLnN0JiYobHQ9TmEobHQsUHQsbCoyLEMpLFB0Kz00KSxuJiYoeXQrPTMsbnRbeXQrK109TVtydF0sbnRbeXQrK109TVtydCsxXSxudFt5dCsrXT1NW3J0KzJdKSxodCYmKGF0W0V0KytdPTEsRXQrPTEpO2xldCBDdD1mQihSLHIsZik7ci5zdCYmKEN0LmF0dHJpYnV0ZXMuc3Q9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOmx0fSkpLG4mJihDdC5hdHRyaWJ1dGVzLmV4dHJ1ZGVEaXJlY3Rpb249bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOm50fSkpLEYmJihDdC5hdHRyaWJ1dGVzLmFwcGx5T2Zmc2V0PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuVU5TSUdORURfQllURSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjEsdmFsdWVzOmF0fSkpO2xldCBrdD1GdC5jcmVhdGVUeXBlZEFycmF5KFcsaio2KSxsZSxyZSxwZSxmZTttPVIubGVuZ3RoLzM7bGV0IFp0PTA7Zm9yKGw9MDtsPG0tMTtsKz0yKXtsZT1sLGZlPShsZSsyKSVtO2xldCBRdD1hLmZyb21BcnJheShSLGxlKjMseHkpLE5lPWEuZnJvbUFycmF5KFIsZmUqMywkRSk7YS5lcXVhbHNFcHNpbG9uKFF0LE5lLFAuRVBTSUxPTjEwKXx8KHJlPShsZSsxKSVtLHBlPShyZSsyKSVtLGt0W1p0KytdPWxlLGt0W1p0KytdPXJlLGt0W1p0KytdPWZlLGt0W1p0KytdPWZlLGt0W1p0KytdPXJlLGt0W1p0KytdPXBlKX1yZXR1cm4gQ3QuaW5kaWNlcz1rdCxDdD1rZS5jb21iaW5lSW5zdGFuY2VzKFtuZXcgY28oe2dlb21ldHJ5OnB9KSxuZXcgY28oe2dlb21ldHJ5OkN0fSldKSxDdFswXX1mdW5jdGlvbiBNeSh0LGUsbixvLHIpe2lmKG49PT0wKXJldHVybiBOdC5jbG9uZSh0LHIpO2xldCBpPWdvLmNvbXB1dGVPcHRpb25zKHQsZSxuLDAsWEUsUUUpLHM9aS5oZWlnaHQsZj1pLndpZHRoLHU9bEI7cmV0dXJuIGdvLmNvbXB1dGVQb3NpdGlvbihpLG8sITEsMCwwLHVbMF0pLGdvLmNvbXB1dGVQb3NpdGlvbihpLG8sITEsMCxmLTEsdVsxXSksZ28uY29tcHV0ZVBvc2l0aW9uKGksbywhMSxzLTEsMCx1WzJdKSxnby5jb21wdXRlUG9zaXRpb24oaSxvLCExLHMtMSxmLTEsdVszXSksTnQuZnJvbUNhcnRlc2lhbkFycmF5KHUsbyxyKX1mdW5jdGlvbiBtaSh0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVDtsZXQgZT10LnJlY3RhbmdsZTtpZih5LnR5cGVPZi5vYmplY3QoInJlY3RhbmdsZSIsZSksTnQuX3ZhbGlkYXRlKGUpLGUubm9ydGg8ZS5zb3V0aCl0aHJvdyBuZXcgRCgib3B0aW9ucy5yZWN0YW5nbGUubm9ydGggbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gb3B0aW9ucy5yZWN0YW5nbGUuc291dGgiKTtsZXQgbj10LmhlaWdodD8/MCxvPXQuZXh0cnVkZWRIZWlnaHQ/P247dGhpcy5fcmVjdGFuZ2xlPU50LmNsb25lKGUpLHRoaXMuX2dyYW51bGFyaXR5PXQuZ3JhbnVsYXJpdHk/P1AuUkFESUFOU19QRVJfREVHUkVFLHRoaXMuX2VsbGlwc29pZD1ZLmNsb25lKHQuZWxsaXBzb2lkPz9ZLmRlZmF1bHQpLHRoaXMuX3N1cmZhY2VIZWlnaHQ9TWF0aC5tYXgobixvKSx0aGlzLl9yb3RhdGlvbj10LnJvdGF0aW9uPz8wLHRoaXMuX3N0Um90YXRpb249dC5zdFJvdGF0aW9uPz8wLHRoaXMuX3ZlcnRleEZvcm1hdD1wdC5jbG9uZSh0LnZlcnRleEZvcm1hdD8/cHQuREVGQVVMVCksdGhpcy5fZXh0cnVkZWRIZWlnaHQ9TWF0aC5taW4obixvKSx0aGlzLl9zaGFkb3dWb2x1bWU9dC5zaGFkb3dWb2x1bWU/PyExLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZVJlY3RhbmdsZUdlb21ldHJ5Iix0aGlzLl9vZmZzZXRBdHRyaWJ1dGU9dC5vZmZzZXRBdHRyaWJ1dGUsdGhpcy5fcm90YXRlZFJlY3RhbmdsZT12b2lkIDAsdGhpcy5fdGV4dHVyZUNvb3JkaW5hdGVSb3RhdGlvblBvaW50cz12b2lkIDB9ZnVuY3Rpb24gZ0IodCl7aWYodC5fc3RSb3RhdGlvbj09PTApcmV0dXJuWzAsMCwwLDEsMSwwXTtsZXQgZT1OdC5jbG9uZSh0Ll9yZWN0YW5nbGUsSEUpLG49dC5fZ3JhbnVsYXJpdHksbz10Ll9lbGxpcHNvaWQscj10Ll9yb3RhdGlvbi10Ll9zdFJvdGF0aW9uLGk9TXkoZSxuLHIsbyxIRSkscz1oQjtzWzBdLng9aS53ZXN0LHNbMF0ueT1pLnNvdXRoLHNbMV0ueD1pLndlc3Qsc1sxXS55PWkubm9ydGgsc1syXS54PWkuZWFzdCxzWzJdLnk9aS5zb3V0aDtsZXQgZj10LnJlY3RhbmdsZSx1PVlvLmZyb21Sb3RhdGlvbih0Ll9zdFJvdGF0aW9uLF9CKSxjPU50LmNlbnRlcihmLHlCKTtmb3IobGV0IF89MDtfPDM7KytfKXtsZXQgZz1zW19dO2cueC09Yy5sb25naXR1ZGUsZy55LT1jLmxhdGl0dWRlLFlvLm11bHRpcGx5QnlWZWN0b3IodSxnLGcpLGcueCs9Yy5sb25naXR1ZGUsZy55Kz1jLmxhdGl0dWRlLGcueD0oZy54LWYud2VzdCkvZi53aWR0aCxnLnk9KGcueS1mLnNvdXRoKS9mLmhlaWdodH1sZXQgbD1zWzBdLHA9c1sxXSxkPXNbMl0sbT1uZXcgQXJyYXkoNik7cmV0dXJuIEoucGFjayhsLG0pLEoucGFjayhwLG0sMiksSi5wYWNrKGQsbSw0KSxtfXZhciBDeSxxRSxLRSxXRSxYRSxpQixzQixjQix4eSwkRSxQeSxsQixRRSxwQixKRSx0UixTcyxkQixqRSxtQixIRSxoQixfQix5QixOeSxlUj0kKCgpPT57dmUoKTtVZSgpO0x0KCk7SWUoKTtXdCgpO0RlKCk7eWUoKTtmdCgpO2p0KCk7JHQoKTtYZSgpO1llKCk7YW4oKTtzYygpO0ZvKCk7c2koKTskZSgpO0t0KCk7QWYoKTtCbigpO3FyKCk7dG4oKTtLbygpO3duKCk7U3koKTtSbygpO0N5PW5ldyBhLHFFPW5ldyBhLEtFPW5ldyBhLFdFPW5ldyBhLFhFPW5ldyBOdCxpQj1uZXcgSixzQj1uZXcgZ3QsY0I9bmV3IGd0O3h5PW5ldyBhLCRFPW5ldyBhO1B5PW5ldyBwdDtsQj1bbmV3IGEsbmV3IGEsbmV3IGEsbmV3IGFdLFFFPW5ldyBjdCxwQj1uZXcgY3Q7bWkucGFja2VkTGVuZ3RoPU50LnBhY2tlZExlbmd0aCtZLnBhY2tlZExlbmd0aCtwdC5wYWNrZWRMZW5ndGgrNzttaS5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCkseS5kZWZpbmVkKCJhcnJheSIsZSksbj1uPz8wLE50LnBhY2sodC5fcmVjdGFuZ2xlLGUsbiksbis9TnQucGFja2VkTGVuZ3RoLFkucGFjayh0Ll9lbGxpcHNvaWQsZSxuKSxuKz1ZLnBhY2tlZExlbmd0aCxwdC5wYWNrKHQuX3ZlcnRleEZvcm1hdCxlLG4pLG4rPXB0LnBhY2tlZExlbmd0aCxlW24rK109dC5fZ3JhbnVsYXJpdHksZVtuKytdPXQuX3N1cmZhY2VIZWlnaHQsZVtuKytdPXQuX3JvdGF0aW9uLGVbbisrXT10Ll9zdFJvdGF0aW9uLGVbbisrXT10Ll9leHRydWRlZEhlaWdodCxlW24rK109dC5fc2hhZG93Vm9sdW1lPzE6MCxlW25dPXQuX29mZnNldEF0dHJpYnV0ZT8/LTEsZX07SkU9bmV3IE50LHRSPVkuY2xvbmUoWS5VTklUX1NQSEVSRSksU3M9e3JlY3RhbmdsZTpKRSxlbGxpcHNvaWQ6dFIsdmVydGV4Rm9ybWF0OlB5LGdyYW51bGFyaXR5OnZvaWQgMCxoZWlnaHQ6dm9pZCAwLHJvdGF0aW9uOnZvaWQgMCxzdFJvdGF0aW9uOnZvaWQgMCxleHRydWRlZEhlaWdodDp2b2lkIDAsc2hhZG93Vm9sdW1lOnZvaWQgMCxvZmZzZXRBdHRyaWJ1dGU6dm9pZCAwfTttaS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe3kuZGVmaW5lZCgiYXJyYXkiLHQpLGU9ZT8/MDtsZXQgbz1OdC51bnBhY2sodCxlLEpFKTtlKz1OdC5wYWNrZWRMZW5ndGg7bGV0IHI9WS51bnBhY2sodCxlLHRSKTtlKz1ZLnBhY2tlZExlbmd0aDtsZXQgaT1wdC51bnBhY2sodCxlLFB5KTtlKz1wdC5wYWNrZWRMZW5ndGg7bGV0IHM9dFtlKytdLGY9dFtlKytdLHU9dFtlKytdLGM9dFtlKytdLGw9dFtlKytdLHA9dFtlKytdPT09MSxkPXRbZV07cmV0dXJuIGgobik/KG4uX3JlY3RhbmdsZT1OdC5jbG9uZShvLG4uX3JlY3RhbmdsZSksbi5fZWxsaXBzb2lkPVkuY2xvbmUocixuLl9lbGxpcHNvaWQpLG4uX3ZlcnRleEZvcm1hdD1wdC5jbG9uZShpLG4uX3ZlcnRleEZvcm1hdCksbi5fZ3JhbnVsYXJpdHk9cyxuLl9zdXJmYWNlSGVpZ2h0PWYsbi5fcm90YXRpb249dSxuLl9zdFJvdGF0aW9uPWMsbi5fZXh0cnVkZWRIZWlnaHQ9bCxuLl9zaGFkb3dWb2x1bWU9cCxuLl9vZmZzZXRBdHRyaWJ1dGU9ZD09PS0xP3ZvaWQgMDpkLG4pOihTcy5ncmFudWxhcml0eT1zLFNzLmhlaWdodD1mLFNzLnJvdGF0aW9uPXUsU3Muc3RSb3RhdGlvbj1jLFNzLmV4dHJ1ZGVkSGVpZ2h0PWwsU3Muc2hhZG93Vm9sdW1lPXAsU3Mub2Zmc2V0QXR0cmlidXRlPWQ9PT0tMT92b2lkIDA6ZCxuZXcgbWkoU3MpKX07bWkuY29tcHV0ZVJlY3RhbmdsZT1mdW5jdGlvbih0LGUpe3Q9dD8/SXQuRU1QVFlfT0JKRUNUO2xldCBuPXQucmVjdGFuZ2xlO2lmKHkudHlwZU9mLm9iamVjdCgicmVjdGFuZ2xlIixuKSxOdC5fdmFsaWRhdGUobiksbi5ub3J0aDxuLnNvdXRoKXRocm93IG5ldyBEKCJvcHRpb25zLnJlY3RhbmdsZS5ub3J0aCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBvcHRpb25zLnJlY3RhbmdsZS5zb3V0aCIpO2xldCBvPXQuZ3JhbnVsYXJpdHk/P1AuUkFESUFOU19QRVJfREVHUkVFLHI9dC5lbGxpcHNvaWQ/P1kuZGVmYXVsdCxpPXQucm90YXRpb24/PzA7cmV0dXJuIE15KG4sbyxpLHIsZSl9O2RCPW5ldyBaLGpFPW5ldyB0ZSxtQj1uZXcgY3Q7bWkuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7aWYoUC5lcXVhbHNFcHNpbG9uKHQuX3JlY3RhbmdsZS5ub3J0aCx0Ll9yZWN0YW5nbGUuc291dGgsUC5FUFNJTE9OMTApfHxQLmVxdWFsc0Vwc2lsb24odC5fcmVjdGFuZ2xlLmVhc3QsdC5fcmVjdGFuZ2xlLndlc3QsUC5FUFNJTE9OMTApKXJldHVybjtsZXQgZT10Ll9yZWN0YW5nbGUsbj10Ll9lbGxpcHNvaWQsbz10Ll9yb3RhdGlvbixyPXQuX3N0Um90YXRpb24saT10Ll92ZXJ0ZXhGb3JtYXQscz1nby5jb21wdXRlT3B0aW9ucyhlLHQuX2dyYW51bGFyaXR5LG8scixYRSxRRSxwQiksZj1kQjtpZihyIT09MHx8byE9PTApe2xldCBtPU50LmNlbnRlcihlLG1CKSxfPW4uZ2VvZGV0aWNTdXJmYWNlTm9ybWFsQ2FydG9ncmFwaGljKG0seHkpO3RlLmZyb21BeGlzQW5nbGUoXywtcixqRSksWi5mcm9tUXVhdGVybmlvbihqRSxmKX1lbHNlIFouY2xvbmUoWi5JREVOVElUWSxmKTtsZXQgdT10Ll9zdXJmYWNlSGVpZ2h0LGM9dC5fZXh0cnVkZWRIZWlnaHQsbD0hUC5lcXVhbHNFcHNpbG9uKHUsYywwLFAuRVBTSUxPTjIpO3MubG9uU2NhbGFyPTEvdC5fcmVjdGFuZ2xlLndpZHRoLHMubGF0U2NhbGFyPTEvdC5fcmVjdGFuZ2xlLmhlaWdodCxzLnRhbmdlbnRSb3RhdGlvbk1hdHJpeD1mO2xldCBwLGQ7aWYoZT10Ll9yZWN0YW5nbGUsbCl7cD11Qih0LHMpO2xldCBtPWd0LmZyb21SZWN0YW5nbGUzRChlLG4sdSxjQiksXz1ndC5mcm9tUmVjdGFuZ2xlM0QoZSxuLGMsc0IpO2Q9Z3QudW5pb24obSxfKX1lbHNle2lmKHA9WkUodCxzKSxwLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPVBlLnNjYWxlVG9HZW9kZXRpY0hlaWdodChwLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLHUsbiwhMSksaCh0Ll9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgbT1wLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aCxfPXQuX29mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxLGc9bmV3IFVpbnQ4QXJyYXkobS8zKS5maWxsKF8pO3AuYXR0cmlidXRlcy5hcHBseU9mZnNldD1uZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LlVOU0lHTkVEX0JZVEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZToxLHZhbHVlczpnfSl9ZD1ndC5mcm9tUmVjdGFuZ2xlM0QoZSxuLHUpfXJldHVybiBpLnBvc2l0aW9ufHxkZWxldGUgcC5hdHRyaWJ1dGVzLnBvc2l0aW9uLG5ldyBCdCh7YXR0cmlidXRlczpwLmF0dHJpYnV0ZXMsaW5kaWNlczpwLmluZGljZXMscHJpbWl0aXZlVHlwZTpwLnByaW1pdGl2ZVR5cGUsYm91bmRpbmdTcGhlcmU6ZCxvZmZzZXRBdHRyaWJ1dGU6dC5fb2Zmc2V0QXR0cmlidXRlfSl9O21pLmNyZWF0ZVNoYWRvd1ZvbHVtZT1mdW5jdGlvbih0LGUsbil7bGV0IG89dC5fZ3JhbnVsYXJpdHkscj10Ll9lbGxpcHNvaWQsaT1lKG8scikscz1uKG8scik7cmV0dXJuIG5ldyBtaSh7cmVjdGFuZ2xlOnQuX3JlY3RhbmdsZSxyb3RhdGlvbjp0Ll9yb3RhdGlvbixlbGxpcHNvaWQ6cixzdFJvdGF0aW9uOnQuX3N0Um90YXRpb24sZ3JhbnVsYXJpdHk6byxleHRydWRlZEhlaWdodDpzLGhlaWdodDppLHZlcnRleEZvcm1hdDpwdC5QT1NJVElPTl9PTkxZLHNoYWRvd1ZvbHVtZTohMH0pfTtIRT1uZXcgTnQsaEI9W25ldyBKLG5ldyBKLG5ldyBKXSxfQj1uZXcgWW8seUI9bmV3IGN0O09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG1pLnByb3RvdHlwZSx7cmVjdGFuZ2xlOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaCh0aGlzLl9yb3RhdGVkUmVjdGFuZ2xlKXx8KHRoaXMuX3JvdGF0ZWRSZWN0YW5nbGU9TXkodGhpcy5fcmVjdGFuZ2xlLHRoaXMuX2dyYW51bGFyaXR5LHRoaXMuX3JvdGF0aW9uLHRoaXMuX2VsbGlwc29pZCkpLHRoaXMuX3JvdGF0ZWRSZWN0YW5nbGV9fSx0ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaCh0aGlzLl90ZXh0dXJlQ29vcmRpbmF0ZVJvdGF0aW9uUG9pbnRzKXx8KHRoaXMuX3RleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHM9Z0IodGhpcykpLHRoaXMuX3RleHR1cmVDb29yZGluYXRlUm90YXRpb25Qb2ludHN9fX0pO055PW1pfSk7dmFyIEl5PXt9O2RlKEl5LHtkZWZhdWx0OigpPT5iQn0pO2Z1bmN0aW9uIEFCKHQsZSl7cmV0dXJuIGgoZSkmJih0PU55LnVucGFjayh0LGUpKSx0Ll9lbGxpcHNvaWQ9WS5jbG9uZSh0Ll9lbGxpcHNvaWQpLHQuX3JlY3RhbmdsZT1OdC5jbG9uZSh0Ll9yZWN0YW5nbGUpLE55LmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBiQix2eT0kKCgpPT57ZnQoKTskdCgpO3duKCk7ZVIoKTtiQj1BQn0pO2Z1bmN0aW9uIG5SKHQsZSl7bGV0IG49dC5fZWxsaXBzb2lkLG89ZS5oZWlnaHQscj1lLndpZHRoLGk9ZS5ub3J0aENhcCxzPWUuc291dGhDYXAsZj1vLHU9MixjPTAsbD00O2kmJih1LT0xLGYtPTEsYys9MSxsLT0yKSxzJiYodS09MSxmLT0xLGMrPTEsbC09MiksYys9dSpyKzIqZi1sO2xldCBwPW5ldyBGbG9hdDY0QXJyYXkoYyozKSxkPTAsbT0wLF8sZz1PQjtpZihpKWdvLmNvbXB1dGVQb3NpdGlvbihlLG4sITEsbSwwLGcpLHBbZCsrXT1nLngscFtkKytdPWcueSxwW2QrK109Zy56O2Vsc2UgZm9yKF89MDtfPHI7XysrKWdvLmNvbXB1dGVQb3NpdGlvbihlLG4sITEsbSxfLGcpLHBbZCsrXT1nLngscFtkKytdPWcueSxwW2QrK109Zy56O2ZvcihfPXItMSxtPTE7bTxvO20rKylnby5jb21wdXRlUG9zaXRpb24oZSxuLCExLG0sXyxnKSxwW2QrK109Zy54LHBbZCsrXT1nLnkscFtkKytdPWcuejtpZihtPW8tMSwhcylmb3IoXz1yLTI7Xz49MDtfLS0pZ28uY29tcHV0ZVBvc2l0aW9uKGUsbiwhMSxtLF8sZykscFtkKytdPWcueCxwW2QrK109Zy55LHBbZCsrXT1nLno7Zm9yKF89MCxtPW8tMjttPjA7bS0tKWdvLmNvbXB1dGVQb3NpdGlvbihlLG4sITEsbSxfLGcpLHBbZCsrXT1nLngscFtkKytdPWcueSxwW2QrK109Zy56O2xldCBiPXAubGVuZ3RoLzMqMixUPUZ0LmNyZWF0ZVR5cGVkQXJyYXkocC5sZW5ndGgvMyxiKSxPPTA7Zm9yKGxldCB3PTA7dzxwLmxlbmd0aC8zLTE7dysrKVRbTysrXT13LFRbTysrXT13KzE7VFtPKytdPXAubGVuZ3RoLzMtMSxUW08rK109MDtsZXQgRT1uZXcgQnQoe2F0dHJpYnV0ZXM6bmV3IGllLHByaW1pdGl2ZVR5cGU6RHQuTElORVN9KTtyZXR1cm4gRS5hdHRyaWJ1dGVzLnBvc2l0aW9uPW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRE9VQkxFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6Myx2YWx1ZXM6cH0pLEUuaW5kaWNlcz1ULEV9ZnVuY3Rpb24gUkIodCxlKXtsZXQgbj10Ll9zdXJmYWNlSGVpZ2h0LG89dC5fZXh0cnVkZWRIZWlnaHQscj10Ll9lbGxpcHNvaWQsaT1uUih0LGUpLHM9ZS5oZWlnaHQsZj1lLndpZHRoLHU9UGUuc2NhbGVUb0dlb2RldGljSGVpZ2h0KGkuYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsbixyLCExKSxjPXUubGVuZ3RoLGw9bmV3IEZsb2F0NjRBcnJheShjKjIpO2wuc2V0KHUpO2xldCBwPVBlLnNjYWxlVG9HZW9kZXRpY0hlaWdodChpLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLG8scik7bC5zZXQocCxjKSxpLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPWw7bGV0IGQ9ZS5ub3J0aENhcCxtPWUuc291dGhDYXAsXz00O2QmJihfLT0xKSxtJiYoXy09MSk7bGV0IGc9KGwubGVuZ3RoLzMrXykqMixiPUZ0LmNyZWF0ZVR5cGVkQXJyYXkobC5sZW5ndGgvMyxnKTtjPWwubGVuZ3RoLzY7bGV0IFQ9MDtmb3IobGV0IEU9MDtFPGMtMTtFKyspYltUKytdPUUsYltUKytdPUUrMSxiW1QrK109RStjLGJbVCsrXT1FK2MrMTtiW1QrK109Yy0xLGJbVCsrXT0wLGJbVCsrXT1jK2MtMSxiW1QrK109YyxiW1QrK109MCxiW1QrK109YztsZXQgTztpZihkKU89cy0xO2Vsc2V7bGV0IEU9Zi0xO2JbVCsrXT1FLGJbVCsrXT1FK2MsTz1mK3MtMn1pZihiW1QrK109TyxiW1QrK109TytjLCFtKXtsZXQgRT1mK08tMTtiW1QrK109RSxiW1RdPUUrY31yZXR1cm4gaS5pbmRpY2VzPWIsaX1mdW5jdGlvbiB2YSh0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVDtsZXQgZT10LnJlY3RhbmdsZSxuPXQuZ3JhbnVsYXJpdHk/P1AuUkFESUFOU19QRVJfREVHUkVFLG89dC5lbGxpcHNvaWQ/P1kuZGVmYXVsdCxyPXQucm90YXRpb24/PzA7aWYoIWgoZSkpdGhyb3cgbmV3IEQoInJlY3RhbmdsZSBpcyByZXF1aXJlZC4iKTtpZihOdC5fdmFsaWRhdGUoZSksZS5ub3J0aDxlLnNvdXRoKXRocm93IG5ldyBEKCJvcHRpb25zLnJlY3RhbmdsZS5ub3J0aCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvcHRpb25zLnJlY3RhbmdsZS5zb3V0aCIpO2xldCBpPXQuaGVpZ2h0Pz8wLHM9dC5leHRydWRlZEhlaWdodD8/aTt0aGlzLl9yZWN0YW5nbGU9TnQuY2xvbmUoZSksdGhpcy5fZ3JhbnVsYXJpdHk9bix0aGlzLl9lbGxpcHNvaWQ9byx0aGlzLl9zdXJmYWNlSGVpZ2h0PU1hdGgubWF4KGkscyksdGhpcy5fcm90YXRpb249cix0aGlzLl9leHRydWRlZEhlaWdodD1NYXRoLm1pbihpLHMpLHRoaXMuX29mZnNldEF0dHJpYnV0ZT10Lm9mZnNldEF0dHJpYnV0ZSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVSZWN0YW5nbGVPdXRsaW5lR2VvbWV0cnkifXZhciBUQix3QixPQixFQixvUixyUixJYSxTQixGeSxpUj0kKCgpPT57dmUoKTtMdCgpO0llKCk7RGUoKTt5ZSgpO2Z0KCk7anQoKTskdCgpO1hlKCk7WWUoKTthbigpO0ZvKCk7JGUoKTtLdCgpO3FyKCk7dG4oKTt3bigpO1N5KCk7VEI9bmV3IGd0LHdCPW5ldyBndCxPQj1uZXcgYSxFQj1uZXcgTnQ7dmEucGFja2VkTGVuZ3RoPU50LnBhY2tlZExlbmd0aCtZLnBhY2tlZExlbmd0aCs1O3ZhLnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBEKCJ2YWx1ZSBpcyByZXF1aXJlZCIpO2lmKCFoKGUpKXRocm93IG5ldyBEKCJhcnJheSBpcyByZXF1aXJlZCIpO3JldHVybiBuPW4/PzAsTnQucGFjayh0Ll9yZWN0YW5nbGUsZSxuKSxuKz1OdC5wYWNrZWRMZW5ndGgsWS5wYWNrKHQuX2VsbGlwc29pZCxlLG4pLG4rPVkucGFja2VkTGVuZ3RoLGVbbisrXT10Ll9ncmFudWxhcml0eSxlW24rK109dC5fc3VyZmFjZUhlaWdodCxlW24rK109dC5fcm90YXRpb24sZVtuKytdPXQuX2V4dHJ1ZGVkSGVpZ2h0LGVbbl09dC5fb2Zmc2V0QXR0cmlidXRlPz8tMSxlfTtvUj1uZXcgTnQsclI9WS5jbG9uZShZLlVOSVRfU1BIRVJFKSxJYT17cmVjdGFuZ2xlOm9SLGVsbGlwc29pZDpyUixncmFudWxhcml0eTp2b2lkIDAsaGVpZ2h0OnZvaWQgMCxyb3RhdGlvbjp2b2lkIDAsZXh0cnVkZWRIZWlnaHQ6dm9pZCAwLG9mZnNldEF0dHJpYnV0ZTp2b2lkIDB9O3ZhLnVucGFjaz1mdW5jdGlvbih0LGUsbil7aWYoIWgodCkpdGhyb3cgbmV3IEQoImFycmF5IGlzIHJlcXVpcmVkIik7ZT1lPz8wO2xldCBvPU50LnVucGFjayh0LGUsb1IpO2UrPU50LnBhY2tlZExlbmd0aDtsZXQgcj1ZLnVucGFjayh0LGUsclIpO2UrPVkucGFja2VkTGVuZ3RoO2xldCBpPXRbZSsrXSxzPXRbZSsrXSxmPXRbZSsrXSx1PXRbZSsrXSxjPXRbZV07cmV0dXJuIGgobik/KG4uX3JlY3RhbmdsZT1OdC5jbG9uZShvLG4uX3JlY3RhbmdsZSksbi5fZWxsaXBzb2lkPVkuY2xvbmUocixuLl9lbGxpcHNvaWQpLG4uX3N1cmZhY2VIZWlnaHQ9cyxuLl9yb3RhdGlvbj1mLG4uX2V4dHJ1ZGVkSGVpZ2h0PXUsbi5fb2Zmc2V0QXR0cmlidXRlPWM9PT0tMT92b2lkIDA6YyxuKTooSWEuZ3JhbnVsYXJpdHk9aSxJYS5oZWlnaHQ9cyxJYS5yb3RhdGlvbj1mLElhLmV4dHJ1ZGVkSGVpZ2h0PXUsSWEub2Zmc2V0QXR0cmlidXRlPWM9PT0tMT92b2lkIDA6YyxuZXcgdmEoSWEpKX07U0I9bmV3IGN0O3ZhLmNyZWF0ZUdlb21ldHJ5PWZ1bmN0aW9uKHQpe2xldCBlPXQuX3JlY3RhbmdsZSxuPXQuX2VsbGlwc29pZCxvPWdvLmNvbXB1dGVPcHRpb25zKGUsdC5fZ3JhbnVsYXJpdHksdC5fcm90YXRpb24sMCxFQixTQikscixpO2lmKFAuZXF1YWxzRXBzaWxvbihlLm5vcnRoLGUuc291dGgsUC5FUFNJTE9OMTApfHxQLmVxdWFsc0Vwc2lsb24oZS5lYXN0LGUud2VzdCxQLkVQU0lMT04xMCkpcmV0dXJuO2xldCBzPXQuX3N1cmZhY2VIZWlnaHQsZj10Ll9leHRydWRlZEhlaWdodCx1PSFQLmVxdWFsc0Vwc2lsb24ocyxmLDAsUC5FUFNJTE9OMiksYztpZih1KXtpZihyPVJCKHQsbyksaCh0Ll9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgZD1yLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aC8zLG09bmV3IFVpbnQ4QXJyYXkoZCk7dC5fb2Zmc2V0QXR0cmlidXRlPT09YWUuVE9QP209bS5maWxsKDEsMCxkLzIpOihjPXQuX29mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxLG09bS5maWxsKGMpKSxyLmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6bX0pfWxldCBsPWd0LmZyb21SZWN0YW5nbGUzRChlLG4scyx3QikscD1ndC5mcm9tUmVjdGFuZ2xlM0QoZSxuLGYsVEIpO2k9Z3QudW5pb24obCxwKX1lbHNle2lmKHI9blIodCxvKSxyLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzPVBlLnNjYWxlVG9HZW9kZXRpY0hlaWdodChyLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLHMsbiwhMSksaCh0Ll9vZmZzZXRBdHRyaWJ1dGUpKXtsZXQgbD1yLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLmxlbmd0aDtjPXQuX29mZnNldEF0dHJpYnV0ZT09PWFlLk5PTkU/MDoxO2xldCBwPW5ldyBVaW50OEFycmF5KGwvMykuZmlsbChjKTtyLmF0dHJpYnV0ZXMuYXBwbHlPZmZzZXQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6MSx2YWx1ZXM6cH0pfWk9Z3QuZnJvbVJlY3RhbmdsZTNEKGUsbixzKX1yZXR1cm4gbmV3IEJ0KHthdHRyaWJ1dGVzOnIuYXR0cmlidXRlcyxpbmRpY2VzOnIuaW5kaWNlcyxwcmltaXRpdmVUeXBlOkR0LkxJTkVTLGJvdW5kaW5nU3BoZXJlOmksb2Zmc2V0QXR0cmlidXRlOnQuX29mZnNldEF0dHJpYnV0ZX0pfTtGeT12YX0pO3ZhciBMeT17fTtkZShMeSx7ZGVmYXVsdDooKT0+eEJ9KTtmdW5jdGlvbiBDQih0LGUpe3JldHVybiBoKGUpJiYodD1GeS51bnBhY2sodCxlKSksdC5fZWxsaXBzb2lkPVkuY2xvbmUodC5fZWxsaXBzb2lkKSx0Ll9yZWN0YW5nbGU9TnQuY2xvbmUodC5fcmVjdGFuZ2xlKSxGeS5jcmVhdGVHZW9tZXRyeSh0KX12YXIgeEIsRHk9JCgoKT0+e2Z0KCk7JHQoKTt3bigpO2lSKCk7eEI9Q0J9KTtmdW5jdGlvbiBQQih0LGUsbixvLHIsaSxzKXtsZXQgZj1Bbi5udW1iZXJPZlBvaW50cyh0LGUsciksdSxjPW4ucmVkLGw9bi5ncmVlbixwPW4uYmx1ZSxkPW4uYWxwaGEsbT1vLnJlZCxfPW8uZ3JlZW4sZz1vLmJsdWUsYj1vLmFscGhhO2lmKG5lLmVxdWFscyhuLG8pKXtmb3IodT0wO3U8Zjt1KyspaVtzKytdPW5lLmZsb2F0VG9CeXRlKGMpLGlbcysrXT1uZS5mbG9hdFRvQnl0ZShsKSxpW3MrK109bmUuZmxvYXRUb0J5dGUocCksaVtzKytdPW5lLmZsb2F0VG9CeXRlKGQpO3JldHVybiBzfWxldCBUPShtLWMpL2YsTz0oXy1sKS9mLEU9KGctcCkvZix3PShiLWQpL2YsQz1zO2Zvcih1PTA7dTxmO3UrKylpW0MrK109bmUuZmxvYXRUb0J5dGUoYyt1KlQpLGlbQysrXT1uZS5mbG9hdFRvQnl0ZShsK3UqTyksaVtDKytdPW5lLmZsb2F0VG9CeXRlKHArdSpFKSxpW0MrK109bmUuZmxvYXRUb0J5dGUoZCt1KncpO3JldHVybiBDfWZ1bmN0aW9uIHJ1KHQpe3Q9dD8/SXQuRU1QVFlfT0JKRUNUO2xldCBlPXQucG9zaXRpb25zLG49dC5jb2xvcnMsbz10LmNvbG9yc1BlclZlcnRleD8/ITE7aWYoIWgoZSl8fGUubGVuZ3RoPDIpdGhyb3cgbmV3IEQoIkF0IGxlYXN0IHR3byBwb3NpdGlvbnMgYXJlIHJlcXVpcmVkLiIpO2lmKGgobikmJihvJiZuLmxlbmd0aDxlLmxlbmd0aHx8IW8mJm4ubGVuZ3RoPGUubGVuZ3RoLTEpKXRocm93IG5ldyBEKCJjb2xvcnMgaGFzIGFuIGludmFsaWQgbGVuZ3RoLiIpO3RoaXMuX3Bvc2l0aW9ucz1lLHRoaXMuX2NvbG9ycz1uLHRoaXMuX2NvbG9yc1BlclZlcnRleD1vLHRoaXMuX2FyY1R5cGU9dC5hcmNUeXBlPz9oZS5HRU9ERVNJQyx0aGlzLl9ncmFudWxhcml0eT10LmdyYW51bGFyaXR5Pz9QLlJBRElBTlNfUEVSX0RFR1JFRSx0aGlzLl9lbGxpcHNvaWQ9dC5lbGxpcHNvaWQ/P1kuZGVmYXVsdCx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVTaW1wbGVQb2x5bGluZUdlb21ldHJ5IjtsZXQgcj0xK2UubGVuZ3RoKmEucGFja2VkTGVuZ3RoO3IrPWgobik/MStuLmxlbmd0aCpuZS5wYWNrZWRMZW5ndGg6MSx0aGlzLnBhY2tlZExlbmd0aD1yK1kucGFja2VkTGVuZ3RoKzN9dmFyIExkLERkLE1CLEJ5LHNSPSQoKCk9PntmYygpO3ZlKCk7THQoKTtQYSgpO0RlKCk7eWUoKTtmdCgpO2p0KCk7JHQoKTtYZSgpO1llKCk7YW4oKTskZSgpO0t0KCk7eWEoKTt0bigpO3J1LnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBEKCJ2YWx1ZSBpcyByZXF1aXJlZCIpO2lmKCFoKGUpKXRocm93IG5ldyBEKCJhcnJheSBpcyByZXF1aXJlZCIpO249bj8/MDtsZXQgbyxyPXQuX3Bvc2l0aW9ucyxpPXIubGVuZ3RoO2ZvcihlW24rK109aSxvPTA7bzxpOysrbyxuKz1hLnBhY2tlZExlbmd0aClhLnBhY2socltvXSxlLG4pO2xldCBzPXQuX2NvbG9ycztmb3IoaT1oKHMpP3MubGVuZ3RoOjAsZVtuKytdPWksbz0wO288aTsrK28sbis9bmUucGFja2VkTGVuZ3RoKW5lLnBhY2soc1tvXSxlLG4pO3JldHVybiBZLnBhY2sodC5fZWxsaXBzb2lkLGUsbiksbis9WS5wYWNrZWRMZW5ndGgsZVtuKytdPXQuX2NvbG9yc1BlclZlcnRleD8xOjAsZVtuKytdPXQuX2FyY1R5cGUsZVtuXT10Ll9ncmFudWxhcml0eSxlfTtydS51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBEKCJhcnJheSBpcyByZXF1aXJlZCIpO2U9ZT8/MDtsZXQgbyxyPXRbZSsrXSxpPW5ldyBBcnJheShyKTtmb3Iobz0wO288cjsrK28sZSs9YS5wYWNrZWRMZW5ndGgpaVtvXT1hLnVucGFjayh0LGUpO3I9dFtlKytdO2xldCBzPXI+MD9uZXcgQXJyYXkocik6dm9pZCAwO2ZvcihvPTA7bzxyOysrbyxlKz1uZS5wYWNrZWRMZW5ndGgpc1tvXT1uZS51bnBhY2sodCxlKTtsZXQgZj1ZLnVucGFjayh0LGUpO2UrPVkucGFja2VkTGVuZ3RoO2xldCB1PXRbZSsrXT09PTEsYz10W2UrK10sbD10W2VdO3JldHVybiBoKG4pPyhuLl9wb3NpdGlvbnM9aSxuLl9jb2xvcnM9cyxuLl9lbGxpcHNvaWQ9ZixuLl9jb2xvcnNQZXJWZXJ0ZXg9dSxuLl9hcmNUeXBlPWMsbi5fZ3JhbnVsYXJpdHk9bCxuKTpuZXcgcnUoe3Bvc2l0aW9uczppLGNvbG9yczpzLGVsbGlwc29pZDpmLGNvbG9yc1BlclZlcnRleDp1LGFyY1R5cGU6YyxncmFudWxhcml0eTpsfSl9O0xkPW5ldyBBcnJheSgyKSxEZD1uZXcgQXJyYXkoMiksTUI9e3Bvc2l0aW9uczpMZCxoZWlnaHQ6RGQsZWxsaXBzb2lkOnZvaWQgMCxtaW5EaXN0YW5jZTp2b2lkIDAsZ3JhbnVsYXJpdHk6dm9pZCAwfTtydS5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbih0KXtsZXQgZT10Ll9wb3NpdGlvbnMsbj10Ll9jb2xvcnMsbz10Ll9jb2xvcnNQZXJWZXJ0ZXgscj10Ll9hcmNUeXBlLGk9dC5fZ3JhbnVsYXJpdHkscz10Ll9lbGxpcHNvaWQsZj1QLmNob3JkTGVuZ3RoKGkscy5tYXhpbXVtUmFkaXVzKSx1PWgobikmJiFvLGMsbD1lLmxlbmd0aCxwLGQsbSxfLGc9MDtpZihyPT09aGUuR0VPREVTSUN8fHI9PT1oZS5SSFVNQil7bGV0IHcsQyxNO3I9PT1oZS5HRU9ERVNJQz8odz1QLmNob3JkTGVuZ3RoKGkscy5tYXhpbXVtUmFkaXVzKSxDPUFuLm51bWJlck9mUG9pbnRzLE09QW4uZ2VuZXJhdGVBcmMpOih3PWksQz1Bbi5udW1iZXJPZlBvaW50c1JodW1iTGluZSxNPUFuLmdlbmVyYXRlUmh1bWJBcmMpO2xldCBOPUFuLmV4dHJhY3RIZWlnaHRzKGUscyksRj1NQjtpZihyPT09aGUuR0VPREVTSUM/Ri5taW5EaXN0YW5jZT1mOkYuZ3JhbnVsYXJpdHk9aSxGLmVsbGlwc29pZD1zLHUpe2xldCBJPTA7Zm9yKGM9MDtjPGwtMTtjKyspSSs9QyhlW2NdLGVbYysxXSx3KSsxO3A9bmV3IEZsb2F0NjRBcnJheShJKjMpLG09bmV3IFVpbnQ4QXJyYXkoSSo0KSxGLnBvc2l0aW9ucz1MZCxGLmhlaWdodD1EZDtsZXQgdj0wO2ZvcihjPTA7YzxsLTE7KytjKXtMZFswXT1lW2NdLExkWzFdPWVbYysxXSxEZFswXT1OW2NdLERkWzFdPU5bYysxXTtsZXQgQj1NKEYpO2lmKGgobikpe2xldCBBPUIubGVuZ3RoLzM7Xz1uW2NdO2ZvcihsZXQgUz0wO1M8QTsrK1MpbVt2KytdPW5lLmZsb2F0VG9CeXRlKF8ucmVkKSxtW3YrK109bmUuZmxvYXRUb0J5dGUoXy5ncmVlbiksbVt2KytdPW5lLmZsb2F0VG9CeXRlKF8uYmx1ZSksbVt2KytdPW5lLmZsb2F0VG9CeXRlKF8uYWxwaGEpfXAuc2V0KEIsZyksZys9Qi5sZW5ndGh9fWVsc2UgaWYoRi5wb3NpdGlvbnM9ZSxGLmhlaWdodD1OLHA9bmV3IEZsb2F0NjRBcnJheShNKEYpKSxoKG4pKXtmb3IobT1uZXcgVWludDhBcnJheShwLmxlbmd0aC8zKjQpLGM9MDtjPGwtMTsrK2Mpe2xldCB2PWVbY10sQj1lW2MrMV0sQT1uW2NdLFM9bltjKzFdO2c9UEIodixCLEEsUyxmLG0sZyl9bGV0IEk9bltsLTFdO21bZysrXT1uZS5mbG9hdFRvQnl0ZShJLnJlZCksbVtnKytdPW5lLmZsb2F0VG9CeXRlKEkuZ3JlZW4pLG1bZysrXT1uZS5mbG9hdFRvQnl0ZShJLmJsdWUpLG1bZysrXT1uZS5mbG9hdFRvQnl0ZShJLmFscGhhKX19ZWxzZXtkPXU/bCoyLTI6bCxwPW5ldyBGbG9hdDY0QXJyYXkoZCozKSxtPWgobik/bmV3IFVpbnQ4QXJyYXkoZCo0KTp2b2lkIDA7bGV0IHc9MCxDPTA7Zm9yKGM9MDtjPGw7KytjKXtsZXQgTT1lW2NdO2lmKHUmJmM+MCYmKGEucGFjayhNLHAsdyksdys9MyxfPW5bYy0xXSxtW0MrK109bmUuZmxvYXRUb0J5dGUoXy5yZWQpLG1bQysrXT1uZS5mbG9hdFRvQnl0ZShfLmdyZWVuKSxtW0MrK109bmUuZmxvYXRUb0J5dGUoXy5ibHVlKSxtW0MrK109bmUuZmxvYXRUb0J5dGUoXy5hbHBoYSkpLHUmJmM9PT1sLTEpYnJlYWs7YS5wYWNrKE0scCx3KSx3Kz0zLGgobikmJihfPW5bY10sbVtDKytdPW5lLmZsb2F0VG9CeXRlKF8ucmVkKSxtW0MrK109bmUuZmxvYXRUb0J5dGUoXy5ncmVlbiksbVtDKytdPW5lLmZsb2F0VG9CeXRlKF8uYmx1ZSksbVtDKytdPW5lLmZsb2F0VG9CeXRlKF8uYWxwaGEpKX19bGV0IGI9bmV3IGllO2IucG9zaXRpb249bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpwfSksaChuKSYmKGIuY29sb3I9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5VTlNJR05FRF9CWVRFLGNvbXBvbmVudHNQZXJBdHRyaWJ1dGU6NCx2YWx1ZXM6bSxub3JtYWxpemU6ITB9KSksZD1wLmxlbmd0aC8zO2xldCBUPShkLTEpKjIsTz1GdC5jcmVhdGVUeXBlZEFycmF5KGQsVCksRT0wO2ZvcihjPTA7YzxkLTE7KytjKU9bRSsrXT1jLE9bRSsrXT1jKzE7cmV0dXJuIG5ldyBCdCh7YXR0cmlidXRlczpiLGluZGljZXM6TyxwcmltaXRpdmVUeXBlOkR0LkxJTkVTLGJvdW5kaW5nU3BoZXJlOmd0LmZyb21Qb2ludHMoZSl9KX07Qnk9cnV9KTt2YXIgVXk9e307ZGUoVXkse2RlZmF1bHQ6KCk9PklCfSk7ZnVuY3Rpb24gTkIodCxlKXtyZXR1cm4gaChlKSYmKHQ9QnkudW5wYWNrKHQsZSkpLHQuX2VsbGlwc29pZD1ZLmNsb25lKHQuX2VsbGlwc29pZCksQnkuY3JlYXRlR2VvbWV0cnkodCl9dmFyIElCLGt5PSQoKCk9PntmdCgpOyR0KCk7c1IoKTtJQj1OQn0pO2Z1bmN0aW9uIEZhKHQpe2xldCBlPXQucmFkaXVzPz8xLG89e3JhZGlpOm5ldyBhKGUsZSxlKSxzdGFja1BhcnRpdGlvbnM6dC5zdGFja1BhcnRpdGlvbnMsc2xpY2VQYXJ0aXRpb25zOnQuc2xpY2VQYXJ0aXRpb25zLHZlcnRleEZvcm1hdDp0LnZlcnRleEZvcm1hdH07dGhpcy5fZWxsaXBzb2lkR2VvbWV0cnk9bmV3IHNyKG8pLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZVNwaGVyZUdlb21ldHJ5In12YXIgdkIsQ3MsR3ksY1I9JCgoKT0+e0x0KCk7V3QoKTtmdCgpO0FkKCk7Um8oKTtGYS5wYWNrZWRMZW5ndGg9c3IucGFja2VkTGVuZ3RoO0ZhLnBhY2s9ZnVuY3Rpb24odCxlLG4pe3JldHVybiB5LnR5cGVPZi5vYmplY3QoInZhbHVlIix0KSxzci5wYWNrKHQuX2VsbGlwc29pZEdlb21ldHJ5LGUsbil9O3ZCPW5ldyBzcixDcz17cmFkaXVzOnZvaWQgMCxyYWRpaTpuZXcgYSx2ZXJ0ZXhGb3JtYXQ6bmV3IHB0LHN0YWNrUGFydGl0aW9uczp2b2lkIDAsc2xpY2VQYXJ0aXRpb25zOnZvaWQgMH07RmEudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtsZXQgbz1zci51bnBhY2sodCxlLHZCKTtyZXR1cm4gQ3MudmVydGV4Rm9ybWF0PXB0LmNsb25lKG8uX3ZlcnRleEZvcm1hdCxDcy52ZXJ0ZXhGb3JtYXQpLENzLnN0YWNrUGFydGl0aW9ucz1vLl9zdGFja1BhcnRpdGlvbnMsQ3Muc2xpY2VQYXJ0aXRpb25zPW8uX3NsaWNlUGFydGl0aW9ucyxoKG4pPyhhLmNsb25lKG8uX3JhZGlpLENzLnJhZGlpKSxuLl9lbGxpcHNvaWRHZW9tZXRyeT1uZXcgc3IoQ3MpLG4pOihDcy5yYWRpdXM9by5fcmFkaWkueCxuZXcgRmEoQ3MpKX07RmEuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7cmV0dXJuIHNyLmNyZWF0ZUdlb21ldHJ5KHQuX2VsbGlwc29pZEdlb21ldHJ5KX07R3k9RmF9KTt2YXIgVnk9e307ZGUoVnkse2RlZmF1bHQ6KCk9PkxCfSk7ZnVuY3Rpb24gRkIodCxlKXtyZXR1cm4gaChlKSYmKHQ9R3kudW5wYWNrKHQsZSkpLEd5LmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBMQix6eT0kKCgpPT57ZnQoKTtjUigpO0xCPUZCfSk7ZnVuY3Rpb24gTGEodCl7bGV0IGU9dC5yYWRpdXM/PzEsbz17cmFkaWk6bmV3IGEoZSxlLGUpLHN0YWNrUGFydGl0aW9uczp0LnN0YWNrUGFydGl0aW9ucyxzbGljZVBhcnRpdGlvbnM6dC5zbGljZVBhcnRpdGlvbnMsc3ViZGl2aXNpb25zOnQuc3ViZGl2aXNpb25zfTt0aGlzLl9lbGxpcHNvaWRHZW9tZXRyeT1uZXcgV3IobyksdGhpcy5fd29ya2VyTmFtZT0iY3JlYXRlU3BoZXJlT3V0bGluZUdlb21ldHJ5In12YXIgREIsVGMsanksYVI9JCgoKT0+e0x0KCk7V3QoKTtmdCgpO1JfKCk7TGEucGFja2VkTGVuZ3RoPVdyLnBhY2tlZExlbmd0aDtMYS5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4geS50eXBlT2Yub2JqZWN0KCJ2YWx1ZSIsdCksV3IucGFjayh0Ll9lbGxpcHNvaWRHZW9tZXRyeSxlLG4pfTtEQj1uZXcgV3IsVGM9e3JhZGl1czp2b2lkIDAscmFkaWk6bmV3IGEsc3RhY2tQYXJ0aXRpb25zOnZvaWQgMCxzbGljZVBhcnRpdGlvbnM6dm9pZCAwLHN1YmRpdmlzaW9uczp2b2lkIDB9O0xhLnVucGFjaz1mdW5jdGlvbih0LGUsbil7bGV0IG89V3IudW5wYWNrKHQsZSxEQik7cmV0dXJuIFRjLnN0YWNrUGFydGl0aW9ucz1vLl9zdGFja1BhcnRpdGlvbnMsVGMuc2xpY2VQYXJ0aXRpb25zPW8uX3NsaWNlUGFydGl0aW9ucyxUYy5zdWJkaXZpc2lvbnM9by5fc3ViZGl2aXNpb25zLGgobik/KGEuY2xvbmUoby5fcmFkaWksVGMucmFkaWkpLG4uX2VsbGlwc29pZEdlb21ldHJ5PW5ldyBXcihUYyksbik6KFRjLnJhZGl1cz1vLl9yYWRpaS54LG5ldyBMYShUYykpfTtMYS5jcmVhdGVHZW9tZXRyeT1mdW5jdGlvbih0KXtyZXR1cm4gV3IuY3JlYXRlR2VvbWV0cnkodC5fZWxsaXBzb2lkR2VvbWV0cnkpfTtqeT1MYX0pO3ZhciBIeT17fTtkZShIeSx7ZGVmYXVsdDooKT0+VUJ9KTtmdW5jdGlvbiBCQih0LGUpe3JldHVybiBoKGUpJiYodD1qeS51bnBhY2sodCxlKSksankuY3JlYXRlR2VvbWV0cnkodCl9dmFyIFVCLHF5PSQoKCk9PntmdCgpO2FSKCk7VUI9QkJ9KTt2YXIgS3k9e307ZGUoS3kse2RlZmF1bHQ6KCk9PnI0fSk7ZnVuY3Rpb24gekIodCxlLG4sbyxyLGkscyl7bGV0IGY9dC5sZW5ndGgsdT1uZXcgRmxvYXQ2NEFycmF5KGYqMyk7Zm9yKGxldCBjPTA7YzxmOysrYyl7bGV0IGw9dFtjXSxwPWVbY10sZD1uW2NdLG09UC5sZXJwKG8ud2VzdCxvLmVhc3QsbC9pdSksXz1QLmxlcnAoby5zb3V0aCxvLm5vcnRoLHAvaXUpLGc9UC5sZXJwKHIsaSxkL2l1KSxiPWN0LmZyb21SYWRpYW5zKG0sXyxnLEdCKSxUPXMuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oYixWQik7YS5wYWNrKFQsdSxjKjMpfXJldHVybiB1fWZ1bmN0aW9uIGpCKHQpe2xldCBlPXQubGVuZ3RoLG49bmV3IFVpbnQzMkFycmF5KGUrMSksbz0wO2ZvcihsZXQgcj0wO3I8ZTsrK3IpbltyXT1vLG8rPXRbcl07cmV0dXJuIG5bZV09byxufWZ1bmN0aW9uIEtCKHQsZSxuLG8pe2xldCByPW8ubGVuZ3RoLGk9dC5sZW5ndGgscz1uZXcgVWludDhBcnJheShpKSxmPUhCLHU9cUIsYz0wO2ZvcihsZXQgcD0wO3A8cjtwKyspe2xldCBkPW9bcF0sbT1kO2ZvcihsZXQgXz0xO188ZDtfKyspe2xldCBnPWMrXyxiPWctMTt1LmxvbmdpdHVkZT10W2ddLHUubGF0aXR1ZGU9ZVtnXSxmLmxvbmdpdHVkZT10W2JdLGYubGF0aXR1ZGU9ZVtiXSxjdC5lcXVhbHModSxmKSYmKG0tLSxzW2JdPTEpfW9bcF09bSxjKz1kfWxldCBsPTA7Zm9yKGxldCBwPTA7cDxpO3ArKylzW3BdIT09MSYmKHRbbF09dFtwXSxlW2xdPWVbcF0sbltsXT1uW3BdLGwrKyl9ZnVuY3Rpb24gZFIodCl7bGV0IGU9dCo4LG49ZSozLG89ZSo0O3RoaXMuc3RhcnRFbGxpcHNvaWROb3JtYWxzPW5ldyBGbG9hdDMyQXJyYXkobiksdGhpcy5lbmRFbGxpcHNvaWROb3JtYWxzPW5ldyBGbG9hdDMyQXJyYXkobiksdGhpcy5zdGFydFBvc2l0aW9uQW5kSGVpZ2h0cz1uZXcgRmxvYXQzMkFycmF5KG8pLHRoaXMuc3RhcnRGYWNlTm9ybWFsQW5kVmVydGV4Q29ybmVySWRzPW5ldyBGbG9hdDMyQXJyYXkobyksdGhpcy5lbmRQb3NpdGlvbkFuZEhlaWdodHM9bmV3IEZsb2F0MzJBcnJheShvKSx0aGlzLmVuZEZhY2VOb3JtYWxBbmRIYWxmV2lkdGhzPW5ldyBGbG9hdDMyQXJyYXkobyksdGhpcy52ZXJ0ZXhCYXRjaElkcz1uZXcgVWludDE2QXJyYXkoZSksdGhpcy5pbmRpY2VzPUZ0LmNyZWF0ZVR5cGVkQXJyYXkoZSwzNip0KSx0aGlzLnZlYzNPZmZzZXQ9MCx0aGlzLnZlYzRPZmZzZXQ9MCx0aGlzLmJhdGNoSWRPZmZzZXQ9MCx0aGlzLmluZGV4T2Zmc2V0PTAsdGhpcy52b2x1bWVTdGFydEluZGV4PTB9ZnVuY3Rpb24gdVIodCxlLG4sbyxyKXtsZXQgaT1hLnN1YnRyYWN0KG4sZSxXQikscz1hLnN1YnRyYWN0KGUsdCxmUik7cmV0dXJuIGEubm9ybWFsaXplKGksaSksYS5ub3JtYWxpemUocyxzKSxhLmRvdChpLHMpPGtCJiYocz1hLm11bHRpcGx5QnlTY2FsYXIocywtMSxmUikpLGEuYWRkKGkscyxyKSxhLmVxdWFscyhyLGEuWkVSTykmJihyPWEuc3VidHJhY3QodCxlKSksYS5jcm9zcyhyLG8sciksYS5jcm9zcyhvLHIsciksYS5ub3JtYWxpemUocixyKSxyfWZ1bmN0aW9uIG80KHQsZSl7bGV0IG49bmV3IFVpbnQxNkFycmF5KHQucG9zaXRpb25zKSxvPW5ldyBVaW50MTZBcnJheSh0LndpZHRocykscj1uZXcgVWludDMyQXJyYXkodC5jb3VudHMpLGk9bmV3IFVpbnQxNkFycmF5KHQuYmF0Y2hJZHMpLHM9UUIsZj1KQix1PXQ0LGM9bmV3IEZsb2F0NjRBcnJheSh0LnBhY2tlZEJ1ZmZlciksbD0wLHA9Y1tsKytdLGQ9Y1tsKytdO050LnVucGFjayhjLGwscyksbCs9TnQucGFja2VkTGVuZ3RoLFkudW5wYWNrKGMsbCxmKSxsKz1ZLnBhY2tlZExlbmd0aCxhLnVucGFjayhjLGwsdSk7bGV0IG0sXz1uLmxlbmd0aC8zLGc9bi5zdWJhcnJheSgwLF8pLGI9bi5zdWJhcnJheShfLDIqXyksVD1uLnN1YmFycmF5KDIqXywzKl8pO25uLnppZ1phZ0RlbHRhRGVjb2RlKGcsYixUKSxLQihnLGIsVCxyKTtsZXQgTz1yLmxlbmd0aCxFPTA7Zm9yKG09MDttPE87bSsrKXtsZXQgQj1yW21dO0UrPUItMX1sZXQgdz1uZXcgZFIoRSksQz16QihnLGIsVCxzLHAsZCxmLHUpO189Zy5sZW5ndGg7bGV0IE09bmV3IEZsb2F0MzJBcnJheShfKjMpO2ZvcihtPTA7bTxfOysrbSlNW20qM109Q1ttKjNdLXUueCxNW20qMysxXT1DW20qMysxXS11LnksTVttKjMrMl09Q1ttKjMrMl0tdS56O2xldCBOPTAsRj0wO2ZvcihtPTA7bTxPO20rKyl7bGV0IEI9clttXS0xLEE9b1ttXSouNSxTPWlbbV0seD1OO2ZvcihsZXQgTD0wO0w8QjtMKyspe2xldCB6PWEudW5wYWNrKE0sTixlNCksaj1hLnVucGFjayhNLE4rMyxuNCksaz1UW0ZdLHE9VFtGKzFdO2s9UC5sZXJwKHAsZCxrL2l1KSxxPVAubGVycChwLGQscS9pdSksRisrO2xldCBXPUJkLFI9VWQ7aWYoTD09PTApe2xldCBudD14K0IqMyxhdD1hLnVucGFjayhNLG50LEJkKTtpZihhLmVxdWFscyhhdCx6KSlhLnVucGFjayhNLG50LTMsVyk7ZWxzZXtsZXQgbHQ9YS5zdWJ0cmFjdCh6LGosQmQpO1c9YS5hZGQobHQseixCZCl9fWVsc2UgYS51bnBhY2soTSxOLTMsVyk7aWYoTD09PUItMSl7bGV0IG50PWEudW5wYWNrKE0seCxVZCk7aWYoYS5lcXVhbHMobnQsaikpYS51bnBhY2soTSx4KzMsUik7ZWxzZXtsZXQgYXQ9YS5zdWJ0cmFjdChqLHosVWQpO1I9YS5hZGQoYXQsaixVZCl9fWVsc2UgYS51bnBhY2soTSxOKzYsUik7dy5hZGRWb2x1bWUoVyx6LGosUixrLHEsQSxTLHUsZiksTis9M31OKz0zLEYrK31sZXQgST13LmluZGljZXM7ZS5wdXNoKHcuc3RhcnRFbGxpcHNvaWROb3JtYWxzLmJ1ZmZlciksZS5wdXNoKHcuZW5kRWxsaXBzb2lkTm9ybWFscy5idWZmZXIpLGUucHVzaCh3LnN0YXJ0UG9zaXRpb25BbmRIZWlnaHRzLmJ1ZmZlciksZS5wdXNoKHcuc3RhcnRGYWNlTm9ybWFsQW5kVmVydGV4Q29ybmVySWRzLmJ1ZmZlciksZS5wdXNoKHcuZW5kUG9zaXRpb25BbmRIZWlnaHRzLmJ1ZmZlciksZS5wdXNoKHcuZW5kRmFjZU5vcm1hbEFuZEhhbGZXaWR0aHMuYnVmZmVyKSxlLnB1c2gody52ZXJ0ZXhCYXRjaElkcy5idWZmZXIpLGUucHVzaChJLmJ1ZmZlcik7bGV0IHY9e2luZGV4RGF0YXR5cGU6SS5CWVRFU19QRVJfRUxFTUVOVD09PTI/RnQuVU5TSUdORURfU0hPUlQ6RnQuVU5TSUdORURfSU5ULHN0YXJ0RWxsaXBzb2lkTm9ybWFsczp3LnN0YXJ0RWxsaXBzb2lkTm9ybWFscy5idWZmZXIsZW5kRWxsaXBzb2lkTm9ybWFsczp3LmVuZEVsbGlwc29pZE5vcm1hbHMuYnVmZmVyLHN0YXJ0UG9zaXRpb25BbmRIZWlnaHRzOncuc3RhcnRQb3NpdGlvbkFuZEhlaWdodHMuYnVmZmVyLHN0YXJ0RmFjZU5vcm1hbEFuZFZlcnRleENvcm5lcklkczp3LnN0YXJ0RmFjZU5vcm1hbEFuZFZlcnRleENvcm5lcklkcy5idWZmZXIsZW5kUG9zaXRpb25BbmRIZWlnaHRzOncuZW5kUG9zaXRpb25BbmRIZWlnaHRzLmJ1ZmZlcixlbmRGYWNlTm9ybWFsQW5kSGFsZldpZHRoczp3LmVuZEZhY2VOb3JtYWxBbmRIYWxmV2lkdGhzLmJ1ZmZlcix2ZXJ0ZXhCYXRjaElkczp3LnZlcnRleEJhdGNoSWRzLmJ1ZmZlcixpbmRpY2VzOkkuYnVmZmVyfTtpZih0LmtlZXBEZWNvZGVkUG9zaXRpb25zKXtsZXQgQj1qQihyKTtlLnB1c2goQy5idWZmZXIsQi5idWZmZXIpLHY9X3Iodix7ZGVjb2RlZFBvc2l0aW9uczpDLmJ1ZmZlcixkZWNvZGVkUG9zaXRpb25PZmZzZXRzOkIuYnVmZmVyfSl9cmV0dXJuIHZ9dmFyIGl1LGtCLEdCLFZCLEhCLHFCLGZSLFdCLG1SLGxSLHBSLFhCLFlCLCRCLFpCLFFCLEpCLHQ0LEJkLGU0LG40LFVkLHI0LFd5PSQoKCk9PnthcygpO0x0KCk7SWUoKTtycCgpOyR0KCk7JGUoKTtLdCgpO3duKCk7c28oKTtpdT0zMjc2NyxrQj1NYXRoLmNvcyhQLnRvUmFkaWFucygxNTApKSxHQj1uZXcgY3QsVkI9bmV3IGE7SEI9bmV3IGN0LHFCPW5ldyBjdDtmUj1uZXcgYSxXQj1uZXcgYTttUj1bMCwyLDYsMCw2LDQsMCwxLDMsMCwzLDIsMCw0LDUsMCw1LDEsNSwzLDEsNSw3LDMsNyw1LDQsNyw0LDYsNyw2LDIsNywyLDNdLGxSPW1SLmxlbmd0aCxwUj1uZXcgYSxYQj1uZXcgYSxZQj1uZXcgYSwkQj1uZXcgYSxaQj1uZXcgYTtkUi5wcm90b3R5cGUuYWRkVm9sdW1lPWZ1bmN0aW9uKHQsZSxuLG8scixpLHMsZix1LGMpe2xldCBsPWEuYWRkKGUsdSxwUikscD1jLmdlb2RldGljU3VyZmFjZU5vcm1hbChsLFhCKTtsPWEuYWRkKG4sdSxwUik7bGV0IGQ9Yy5nZW9kZXRpY1N1cmZhY2VOb3JtYWwobCwkQiksbT11Uih0LGUsbixwLFlCKSxfPXVSKG8sbixlLGQsWkIpLGc9dGhpcy5zdGFydEVsbGlwc29pZE5vcm1hbHMsYj10aGlzLmVuZEVsbGlwc29pZE5vcm1hbHMsVD10aGlzLnN0YXJ0UG9zaXRpb25BbmRIZWlnaHRzLE89dGhpcy5zdGFydEZhY2VOb3JtYWxBbmRWZXJ0ZXhDb3JuZXJJZHMsRT10aGlzLmVuZFBvc2l0aW9uQW5kSGVpZ2h0cyx3PXRoaXMuZW5kRmFjZU5vcm1hbEFuZEhhbGZXaWR0aHMsQz10aGlzLnZlcnRleEJhdGNoSWRzLE09dGhpcy5iYXRjaElkT2Zmc2V0LE49dGhpcy52ZWMzT2Zmc2V0LEY9dGhpcy52ZWM0T2Zmc2V0LEk7Zm9yKEk9MDtJPDg7SSsrKWEucGFjayhwLGcsTiksYS5wYWNrKGQsYixOKSxhLnBhY2soZSxULEYpLFRbRiszXT1yLGEucGFjayhuLEUsRiksRVtGKzNdPWksYS5wYWNrKG0sTyxGKSxPW0YrM109SSxhLnBhY2soXyx3LEYpLHdbRiszXT1zLENbTSsrXT1mLE4rPTMsRis9NDt0aGlzLmJhdGNoSWRPZmZzZXQ9TSx0aGlzLnZlYzNPZmZzZXQ9Tix0aGlzLnZlYzRPZmZzZXQ9RjtsZXQgdj10aGlzLmluZGljZXMsQj10aGlzLnZvbHVtZVN0YXJ0SW5kZXgsQT10aGlzLmluZGV4T2Zmc2V0O2ZvcihJPTA7STxsUjtJKyspdltBK0ldPW1SW0ldK0I7dGhpcy52b2x1bWVTdGFydEluZGV4Kz04LHRoaXMuaW5kZXhPZmZzZXQrPWxSfTtRQj1uZXcgTnQsSkI9bmV3IFksdDQ9bmV3IGEsQmQ9bmV3IGEsZTQ9bmV3IGEsbjQ9bmV3IGEsVWQ9bmV3IGE7cjQ9UWUobzQpfSk7ZnVuY3Rpb24gaTQodCl7dGhpcy5vZmZzZXQ9dC5vZmZzZXQsdGhpcy5jb3VudD10LmNvdW50LHRoaXMuY29sb3I9dC5jb2xvcix0aGlzLmJhdGNoSWRzPXQuYmF0Y2hJZHN9dmFyIGhSLF9SPSQoKCk9PntoUj1pNH0pO3ZhciBYeT17fTtkZShYeSx7ZGVmYXVsdDooKT0+QTR9KTtmdW5jdGlvbiB1NCh0LGUpe2xldCBuPWUqczQsbz1hLnVucGFjayh0LG4sR2QpO24rPWEucGFja2VkTGVuZ3RoO2xldCByPXN0LnVucGFjayh0LG4sQ3IubW9kZWxNYXRyaXgpO3N0Lm11bHRpcGx5QnlTY2FsZShyLG8scik7bGV0IGk9Q3IuYm91bmRpbmdWb2x1bWU7cmV0dXJuIGEuY2xvbmUoYS5aRVJPLGkuY2VudGVyKSxpLnJhZGl1cz1NYXRoLnNxcnQoMyksQ3J9ZnVuY3Rpb24gbDQodCxlKXtsZXQgbj1lKmM0LG89dFtuKytdLHI9dFtuKytdLGk9YS5mcm9tRWxlbWVudHMobyxvLHIsR2QpLHM9c3QudW5wYWNrKHQsbixDci5tb2RlbE1hdHJpeCk7c3QubXVsdGlwbHlCeVNjYWxlKHMsaSxzKTtsZXQgZj1Dci5ib3VuZGluZ1ZvbHVtZTtyZXR1cm4gYS5jbG9uZShhLlpFUk8sZi5jZW50ZXIpLGYucmFkaXVzPU1hdGguc3FydCgyKSxDcn1mdW5jdGlvbiBwNCh0LGUpe2xldCBuPWUqYTQsbz1hLnVucGFjayh0LG4sR2QpO24rPWEucGFja2VkTGVuZ3RoO2xldCByPXN0LnVucGFjayh0LG4sQ3IubW9kZWxNYXRyaXgpO3N0Lm11bHRpcGx5QnlTY2FsZShyLG8scik7bGV0IGk9Q3IuYm91bmRpbmdWb2x1bWU7cmV0dXJuIGEuY2xvbmUoYS5aRVJPLGkuY2VudGVyKSxpLnJhZGl1cz0xLENyfWZ1bmN0aW9uIGQ0KHQsZSl7bGV0IG49ZSpmNCxvPXRbbisrXSxyPWEudW5wYWNrKHQsbixHZCksaT1zdC5mcm9tVHJhbnNsYXRpb24ocixDci5tb2RlbE1hdHJpeCk7c3QubXVsdGlwbHlCeVVuaWZvcm1TY2FsZShpLG8saSk7bGV0IHM9Q3IuYm91bmRpbmdWb2x1bWU7cmV0dXJuIGEuY2xvbmUoYS5aRVJPLHMuY2VudGVyKSxzLnJhZGl1cz0xLENyfWZ1bmN0aW9uIGtkKHQsZSxuLG8scil7aWYoIWgoZSkpcmV0dXJuO2xldCBpPW4ubGVuZ3RoLHM9by5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyxmPW8uaW5kaWNlcyx1PXQucG9zaXRpb25zLGM9dC52ZXJ0ZXhCYXRjaElkcyxsPXQuaW5kaWNlcyxwPXQuYmF0Y2hJZHMsZD10LmJhdGNoVGFibGVDb2xvcnMsbT10LmJhdGNoZWRJbmRpY2VzLF89dC5pbmRleE9mZnNldHMsZz10LmluZGV4Q291bnRzLGI9dC5ib3VuZGluZ1ZvbHVtZXMsVD10Lm1vZGVsTWF0cml4LE89dC5jZW50ZXIsRT10LnBvc2l0aW9uT2Zmc2V0LHc9dC5iYXRjaElkSW5kZXgsQz10LmluZGV4T2Zmc2V0LE09dC5iYXRjaGVkSW5kaWNlc09mZnNldDtmb3IobGV0IE49MDtOPGk7KytOKXtsZXQgRj1yKGUsTiksST1GLm1vZGVsTWF0cml4O3N0Lm11bHRpcGx5KFQsSSxJKTtsZXQgdj1uW05dLEI9cy5sZW5ndGg7Zm9yKGxldCB4PTA7eDxCO3grPTMpe2xldCBMPWEudW5wYWNrKHMseCxtNCk7c3QubXVsdGlwbHlCeVBvaW50KEksTCxMKSxhLnN1YnRyYWN0KEwsTyxMKSxhLnBhY2soTCx1LEUqMyt4KSxjW3crK109dn1sZXQgQT1mLmxlbmd0aDtmb3IobGV0IHg9MDt4PEE7Kyt4KWxbQyt4XT1mW3hdK0U7bGV0IFM9TitNO21bU109bmV3IGhSKHtvZmZzZXQ6Qyxjb3VudDpBLGNvbG9yOm5lLmZyb21SZ2JhKGRbdl0pLGJhdGNoSWRzOlt2XX0pLHBbU109dixfW1NdPUMsZ1tTXT1BLGJbU109Z3QudHJhbnNmb3JtKEYuYm91bmRpbmdWb2x1bWUsSSksRSs9Qi8zLEMrPUF9dC5wb3NpdGlvbk9mZnNldD1FLHQuYmF0Y2hJZEluZGV4PXcsdC5pbmRleE9mZnNldD1DLHQuYmF0Y2hlZEluZGljZXNPZmZzZXQrPWl9ZnVuY3Rpb24gaDQodCl7bGV0IGU9bmV3IEZsb2F0NjRBcnJheSh0KSxuPTA7YS51bnBhY2soZSxuLHlSKSxuKz1hLnBhY2tlZExlbmd0aCxzdC51bnBhY2soZSxuLGdSKX1mdW5jdGlvbiBfNCh0KXtsZXQgZT10Lmxlbmd0aCxuPTA7Zm9yKGxldCBvPTA7bzxlOysrbyluKz1uZS5wYWNrZWRMZW5ndGgrMyt0W29dLmJhdGNoSWRzLmxlbmd0aDtyZXR1cm4gbn1mdW5jdGlvbiB5NCh0LGUsbil7bGV0IG89bi5sZW5ndGgscj0yK28qZ3QucGFja2VkTGVuZ3RoKzErXzQoZSksaT1uZXcgRmxvYXQ2NEFycmF5KHIpLHM9MDtpW3MrK109dCxpW3MrK109bztmb3IobGV0IHU9MDt1PG87Kyt1KWd0LnBhY2soblt1XSxpLHMpLHMrPWd0LnBhY2tlZExlbmd0aDtsZXQgZj1lLmxlbmd0aDtpW3MrK109Zjtmb3IobGV0IHU9MDt1PGY7Kyt1KXtsZXQgYz1lW3VdO25lLnBhY2soYy5jb2xvcixpLHMpLHMrPW5lLnBhY2tlZExlbmd0aCxpW3MrK109Yy5vZmZzZXQsaVtzKytdPWMuY291bnQ7bGV0IGw9Yy5iYXRjaElkcyxwPWwubGVuZ3RoO2lbcysrXT1wO2ZvcihsZXQgZD0wO2Q8cDsrK2QpaVtzKytdPWxbZF19cmV0dXJuIGl9ZnVuY3Rpb24gZzQodCxlKXtsZXQgbj1oKHQuYm94ZXMpP25ldyBGbG9hdDMyQXJyYXkodC5ib3hlcyk6dm9pZCAwLG89aCh0LmJveEJhdGNoSWRzKT9uZXcgVWludDE2QXJyYXkodC5ib3hCYXRjaElkcyk6dm9pZCAwLHI9aCh0LmN5bGluZGVycyk/bmV3IEZsb2F0MzJBcnJheSh0LmN5bGluZGVycyk6dm9pZCAwLGk9aCh0LmN5bGluZGVyQmF0Y2hJZHMpP25ldyBVaW50MTZBcnJheSh0LmN5bGluZGVyQmF0Y2hJZHMpOnZvaWQgMCxzPWgodC5lbGxpcHNvaWRzKT9uZXcgRmxvYXQzMkFycmF5KHQuZWxsaXBzb2lkcyk6dm9pZCAwLGY9aCh0LmVsbGlwc29pZEJhdGNoSWRzKT9uZXcgVWludDE2QXJyYXkodC5lbGxpcHNvaWRCYXRjaElkcyk6dm9pZCAwLHU9aCh0LnNwaGVyZXMpP25ldyBGbG9hdDMyQXJyYXkodC5zcGhlcmVzKTp2b2lkIDAsYz1oKHQuc3BoZXJlQmF0Y2hJZHMpP25ldyBVaW50MTZBcnJheSh0LnNwaGVyZUJhdGNoSWRzKTp2b2lkIDAsbD1oKG4pP28ubGVuZ3RoOjAscD1oKHIpP2kubGVuZ3RoOjAsZD1oKHMpP2YubGVuZ3RoOjAsbT1oKHUpP2MubGVuZ3RoOjAsXz1TZi5nZXRVbml0Qm94KCksZz1IZi5nZXRVbml0Q3lsaW5kZXIoKSxiPXNyLmdldFVuaXRFbGxpcHNvaWQoKSxUPV8uYXR0cmlidXRlcy5wb3NpdGlvbi52YWx1ZXMsTz1nLmF0dHJpYnV0ZXMucG9zaXRpb24udmFsdWVzLEU9Yi5hdHRyaWJ1dGVzLnBvc2l0aW9uLnZhbHVlcyx3PVQubGVuZ3RoKmw7dys9Ty5sZW5ndGgqcCx3Kz1FLmxlbmd0aCooZCttKTtsZXQgQz1fLmluZGljZXMsTT1nLmluZGljZXMsTj1iLmluZGljZXMsRj1DLmxlbmd0aCpsO0YrPU0ubGVuZ3RoKnAsRis9Ti5sZW5ndGgqKGQrbSk7bGV0IEk9bmV3IEZsb2F0MzJBcnJheSh3KSx2PW5ldyBVaW50MTZBcnJheSh3LzMpLEI9RnQuY3JlYXRlVHlwZWRBcnJheSh3LzMsRiksQT1sK3ArZCttLFM9bmV3IFVpbnQxNkFycmF5KEEpLHg9bmV3IEFycmF5KEEpLEw9bmV3IFVpbnQzMkFycmF5KEEpLHo9bmV3IFVpbnQzMkFycmF5KEEpLGo9bmV3IEFycmF5KEEpO2g0KHQucGFja2VkQnVmZmVyKTtsZXQgaz17YmF0Y2hUYWJsZUNvbG9yczpuZXcgVWludDMyQXJyYXkodC5iYXRjaFRhYmxlQ29sb3JzKSxwb3NpdGlvbnM6SSx2ZXJ0ZXhCYXRjaElkczp2LGluZGljZXM6QixiYXRjaElkczpTLGJhdGNoZWRJbmRpY2VzOngsaW5kZXhPZmZzZXRzOkwsaW5kZXhDb3VudHM6eixib3VuZGluZ1ZvbHVtZXM6aixwb3NpdGlvbk9mZnNldDowLGJhdGNoSWRJbmRleDowLGluZGV4T2Zmc2V0OjAsYmF0Y2hlZEluZGljZXNPZmZzZXQ6MCxtb2RlbE1hdHJpeDpnUixjZW50ZXI6eVJ9O2tkKGssbixvLF8sdTQpLGtkKGsscixpLGcsbDQpLGtkKGsscyxmLGIscDQpLGtkKGssdSxjLGIsZDQpO2xldCBxPXk0KEIuQllURVNfUEVSX0VMRU1FTlQseCxqKTtyZXR1cm4gZS5wdXNoKEkuYnVmZmVyLHYuYnVmZmVyLEIuYnVmZmVyKSxlLnB1c2goUy5idWZmZXIsTC5idWZmZXIsei5idWZmZXIpLGUucHVzaChxLmJ1ZmZlcikse3Bvc2l0aW9uczpJLmJ1ZmZlcix2ZXJ0ZXhCYXRjaElkczp2LmJ1ZmZlcixpbmRpY2VzOkIuYnVmZmVyLGluZGV4T2Zmc2V0czpMLmJ1ZmZlcixpbmRleENvdW50czp6LmJ1ZmZlcixiYXRjaElkczpTLmJ1ZmZlcixwYWNrZWRCdWZmZXI6cS5idWZmZXJ9fXZhciBHZCxzNCxjNCxhNCxmNCxDcixtNCx5UixnUixBNCxZeT0kKCgpPT57dmUoKTtjMCgpO0x0KCk7UGEoKTtsXygpO2Z0KCk7QWQoKTskZSgpO1VuKCk7X1IoKTtzbygpO0dkPW5ldyBhLHM0PXN0LnBhY2tlZExlbmd0aCthLnBhY2tlZExlbmd0aCxjND1zdC5wYWNrZWRMZW5ndGgrMixhND1zdC5wYWNrZWRMZW5ndGgrYS5wYWNrZWRMZW5ndGgsZjQ9YS5wYWNrZWRMZW5ndGgrMSxDcj17bW9kZWxNYXRyaXg6bmV3IHN0LGJvdW5kaW5nVm9sdW1lOm5ldyBndH07bTQ9bmV3IGE7eVI9bmV3IGEsZ1I9bmV3IHN0O0E0PVFlKGc0KX0pO3ZhciBaeT17fTtkZShaeSx7ZGVmYXVsdDooKT0+RTR9KTtmdW5jdGlvbiB3NCh0KXt0PW5ldyBGbG9hdDY0QXJyYXkodCk7bGV0IGU9MDtWZC5taW49dFtlKytdLFZkLm1heD10W2UrK10sTnQudW5wYWNrKHQsZSxBUiksZSs9TnQucGFja2VkTGVuZ3RoLFkudW5wYWNrKHQsZSxiUil9ZnVuY3Rpb24gTzQodCxlKXtsZXQgbj1uZXcgVWludDE2QXJyYXkodC5wb3NpdGlvbnMpO3c0KHQucGFja2VkQnVmZmVyKTtsZXQgbz1BUixyPWJSLGk9VmQubWluLHM9VmQubWF4LGY9bi5sZW5ndGgvMyx1PW4uc3ViYXJyYXkoMCxmKSxjPW4uc3ViYXJyYXkoZiwyKmYpLGw9bi5zdWJhcnJheSgyKmYsMypmKTtubi56aWdaYWdEZWx0YURlY29kZSh1LGMsbCk7bGV0IHA9bmV3IEZsb2F0NjRBcnJheShuLmxlbmd0aCk7Zm9yKGxldCBkPTA7ZDxmOysrZCl7bGV0IG09dVtkXSxfPWNbZF0sZz1sW2RdLGI9UC5sZXJwKG8ud2VzdCxvLmVhc3QsbS8keSksVD1QLmxlcnAoby5zb3V0aCxvLm5vcnRoLF8vJHkpLE89UC5sZXJwKGkscyxnLyR5KSxFPWN0LmZyb21SYWRpYW5zKGIsVCxPLGI0KSx3PXIuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oRSxUNCk7YS5wYWNrKHcscCxkKjMpfXJldHVybiBlLnB1c2gocC5idWZmZXIpLHtwb3NpdGlvbnM6cC5idWZmZXJ9fXZhciAkeSxiNCxUNCxBUixiUixWZCxFNCxReT0kKCgpPT57YXMoKTtMdCgpO0llKCk7JHQoKTtLdCgpO3duKCk7c28oKTskeT0zMjc2NyxiND1uZXcgY3QsVDQ9bmV3IGEsQVI9bmV3IE50LGJSPW5ldyBZLFZkPXttaW46dm9pZCAwLG1heDp2b2lkIDB9O0U0PVFlKE80KX0pO3ZhciBKeT17fTtkZShKeSx7ZGVmYXVsdDooKT0+RjR9KTtmdW5jdGlvbiBSNCh0KXtsZXQgZT1uZXcgRmxvYXQ2NEFycmF5KHQpLG49MDtEYS5pbmRleEJ5dGVzUGVyRWxlbWVudD1lW24rK10sRGEubWluPWVbbisrXSxEYS5tYXg9ZVtuKytdLGEudW5wYWNrKGUsbixFUiksbis9YS5wYWNrZWRMZW5ndGgsWS51bnBhY2soZSxuLFJSKSxuKz1ZLnBhY2tlZExlbmd0aCxOdC51bnBhY2soZSxuLFNSKX1mdW5jdGlvbiBTNCh0KXtsZXQgZT10Lmxlbmd0aCxuPTA7Zm9yKGxldCBvPTA7bzxlOysrbyluKz1uZS5wYWNrZWRMZW5ndGgrMyt0W29dLmJhdGNoSWRzLmxlbmd0aDtyZXR1cm4gbn1mdW5jdGlvbiBDNCh0LGUsbil7bGV0IG89ZS5sZW5ndGgscj0yK28qU28ucGFja2VkTGVuZ3RoKzErUzQobiksaT1uZXcgRmxvYXQ2NEFycmF5KHIpLHM9MDtpW3MrK109dCxpW3MrK109bztmb3IobGV0IHU9MDt1PG87Kyt1KVNvLnBhY2soZVt1XSxpLHMpLHMrPVNvLnBhY2tlZExlbmd0aDtsZXQgZj1uLmxlbmd0aDtpW3MrK109Zjtmb3IobGV0IHU9MDt1PGY7Kyt1KXtsZXQgYz1uW3VdO25lLnBhY2soYy5jb2xvcixpLHMpLHMrPW5lLnBhY2tlZExlbmd0aCxpW3MrK109Yy5vZmZzZXQsaVtzKytdPWMuY291bnQ7bGV0IGw9Yy5iYXRjaElkcyxwPWwubGVuZ3RoO2lbcysrXT1wO2ZvcihsZXQgZD0wO2Q8cDsrK2QpaVtzKytdPWxbZF19cmV0dXJuIGl9ZnVuY3Rpb24gdjQodCxlKXtSNCh0LnBhY2tlZEJ1ZmZlcik7bGV0IG47RGEuaW5kZXhCeXRlc1BlckVsZW1lbnQ9PT0yP249bmV3IFVpbnQxNkFycmF5KHQuaW5kaWNlcyk6bj1uZXcgVWludDMyQXJyYXkodC5pbmRpY2VzKTtsZXQgcj1uZXcgVWludDE2QXJyYXkodC5wb3NpdGlvbnMpLGk9bmV3IFVpbnQzMkFycmF5KHQuY291bnRzKSxzPW5ldyBVaW50MzJBcnJheSh0LmluZGV4Q291bnRzKSxmPW5ldyBVaW50MzJBcnJheSh0LmJhdGNoSWRzKSx1PW5ldyBVaW50MzJBcnJheSh0LmJhdGNoVGFibGVDb2xvcnMpLGM9bmV3IEFycmF5KGkubGVuZ3RoKSxsPUVSLHA9UlIsZD1TUixtPURhLm1pbixfPURhLm1heCxnPXQubWluaW11bUhlaWdodHMsYj10Lm1heGltdW1IZWlnaHRzO2goZykmJmgoYikmJihnPW5ldyBGbG9hdDMyQXJyYXkoZyksYj1uZXcgRmxvYXQzMkFycmF5KGIpKTtsZXQgVCxPLEUsdz1yLmxlbmd0aC8yLEM9ci5zdWJhcnJheSgwLHcpLE09ci5zdWJhcnJheSh3LDIqdyk7bm4uemlnWmFnRGVsdGFEZWNvZGUoQyxNKTtsZXQgTj1uZXcgRmxvYXQ2NEFycmF5KHcqMyk7Zm9yKFQ9MDtUPHc7KytUKXtsZXQgb3Q9Q1tUXSxQdD1NW1RdLHl0PVAubGVycChkLndlc3QsZC5lYXN0LG90L1RSKSxFdD1QLmxlcnAoZC5zb3V0aCxkLm5vcnRoLFB0L1RSKSxkdD1jdC5mcm9tUmFkaWFucyh5dCxFdCwwLE9SKSxydD1wLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKGR0LHdSKTthLnBhY2socnQsTixUKjMpfWxldCBGPWkubGVuZ3RoLEk9bmV3IEFycmF5KEYpLHY9bmV3IEFycmF5KEYpLEI9MCxBPTA7Zm9yKFQ9MDtUPEY7KytUKUlbVF09Qix2W1RdPUEsQis9aVtUXSxBKz1zW1RdO2xldCBTPW5ldyBGbG9hdDMyQXJyYXkodyozKjIpLHg9bmV3IFVpbnQxNkFycmF5KHcqMiksTD1uZXcgVWludDMyQXJyYXkodi5sZW5ndGgpLHo9bmV3IFVpbnQzMkFycmF5KHMubGVuZ3RoKSxqPVtdLGs9e307Zm9yKFQ9MDtUPEY7KytUKUU9dVtUXSxoKGtbRV0pPyhrW0VdLnBvc2l0aW9uTGVuZ3RoKz1pW1RdLGtbRV0uaW5kZXhMZW5ndGgrPXNbVF0sa1tFXS5iYXRjaElkcy5wdXNoKFQpKTprW0VdPXtwb3NpdGlvbkxlbmd0aDppW1RdLGluZGV4TGVuZ3RoOnNbVF0sb2Zmc2V0OjAsaW5kZXhPZmZzZXQ6MCxiYXRjaElkczpbVF19O2xldCBxLFc9MCxSPTA7Zm9yKEUgaW4gaylpZihrLmhhc093blByb3BlcnR5KEUpKXtxPWtbRV0scS5vZmZzZXQ9VyxxLmluZGV4T2Zmc2V0PVI7bGV0IG90PXEucG9zaXRpb25MZW5ndGgqMixQdD1xLmluZGV4TGVuZ3RoKjIrcS5wb3NpdGlvbkxlbmd0aCo2O1crPW90LFIrPVB0LHEuaW5kZXhMZW5ndGg9UHR9bGV0IG50PVtdO2ZvcihFIGluIGspay5oYXNPd25Qcm9wZXJ0eShFKSYmKHE9a1tFXSxudC5wdXNoKHtjb2xvcjpuZS5mcm9tUmdiYShwYXJzZUludChFKSksb2Zmc2V0OnEuaW5kZXhPZmZzZXQsY291bnQ6cS5pbmRleExlbmd0aCxiYXRjaElkczpxLmJhdGNoSWRzfSkpO2ZvcihUPTA7VDxGOysrVCl7RT11W1RdLHE9a1tFXTtsZXQgb3Q9cS5vZmZzZXQsUHQ9b3QqMyx5dD1vdCxFdD1JW1RdLGR0PWlbVF0scnQ9ZltUXSxDdD1tLGt0PV87aChnKSYmaChiKSYmKEN0PWdbVF0sa3Q9YltUXSk7bGV0IGxlPU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxyZT1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkscGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGZlPU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtmb3IoTz0wO088ZHQ7KytPKXtsZXQgZ2U9YS51bnBhY2soTixFdCozK08qMyx3Uik7cC5zY2FsZVRvR2VvZGV0aWNTdXJmYWNlKGdlLGdlKTtsZXQgRWU9cC5jYXJ0ZXNpYW5Ub0NhcnRvZ3JhcGhpYyhnZSxPUiksdW49RWUubGF0aXR1ZGUsR2U9RWUubG9uZ2l0dWRlO2xlPU1hdGgubWluKHVuLGxlKSxyZT1NYXRoLm1heCh1bixyZSkscGU9TWF0aC5taW4oR2UscGUpLGZlPU1hdGgubWF4KEdlLGZlKTtsZXQgYmU9cC5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoZ2UseDQpLGxuPWEubXVsdGlwbHlCeVNjYWxhcihiZSxDdCxQNCkscG49YS5hZGQoZ2UsbG4sTTQpO2xuPWEubXVsdGlwbHlCeVNjYWxhcihiZSxrdCxsbik7bGV0IEVuPWEuYWRkKGdlLGxuLE40KTthLnN1YnRyYWN0KEVuLGwsRW4pLGEuc3VidHJhY3QocG4sbCxwbiksYS5wYWNrKEVuLFMsUHQpLGEucGFjayhwbixTLFB0KzMpLHhbeXRdPXJ0LHhbeXQrMV09cnQsUHQrPTYseXQrPTJ9ZD1JNCxkLndlc3Q9cGUsZC5lYXN0PWZlLGQuc291dGg9bGUsZC5ub3J0aD1yZSxjW1RdPVNvLmZyb21SZWN0YW5nbGUoZCxtLF8scCk7bGV0IFp0PXEuaW5kZXhPZmZzZXQsUXQ9dltUXSxOZT1zW1RdO2ZvcihMW1RdPVp0LE89MDtPPE5lO08rPTMpe2xldCBnZT1uW1F0K09dLUV0LEVlPW5bUXQrTysxXS1FdCx1bj1uW1F0K08rMl0tRXQ7altadCsrXT1nZSoyK290LGpbWnQrK109RWUqMitvdCxqW1p0KytdPXVuKjIrb3QsaltadCsrXT11bioyKzErb3QsaltadCsrXT1FZSoyKzErb3QsaltadCsrXT1nZSoyKzErb3R9Zm9yKE89MDtPPGR0OysrTyl7bGV0IGdlPU8sRWU9KE8rMSklZHQ7altadCsrXT1nZSoyKzErb3QsaltadCsrXT1FZSoyK290LGpbWnQrK109Z2UqMitvdCxqW1p0KytdPWdlKjIrMStvdCxqW1p0KytdPUVlKjIrMStvdCxqW1p0KytdPUVlKjIrb3R9cS5vZmZzZXQrPWR0KjIscS5pbmRleE9mZnNldD1adCx6W1RdPVp0LUxbVF19aj1GdC5jcmVhdGVUeXBlZEFycmF5KFMubGVuZ3RoLzMsaik7bGV0IGF0PW50Lmxlbmd0aDtmb3IobGV0IG90PTA7b3Q8YXQ7KytvdCl7bGV0IFB0PW50W290XS5iYXRjaElkcyx5dD0wLEV0PVB0Lmxlbmd0aDtmb3IobGV0IGR0PTA7ZHQ8RXQ7KytkdCl5dCs9eltQdFtkdF1dO250W290XS5jb3VudD15dH1sZXQgbHQ9ai5CWVRFU19QRVJfRUxFTUVOVD09PTI/RnQuVU5TSUdORURfU0hPUlQ6RnQuVU5TSUdORURfSU5ULGh0PUM0KGx0LGMsbnQpO3JldHVybiBlLnB1c2goUy5idWZmZXIsai5idWZmZXIsTC5idWZmZXIsei5idWZmZXIseC5idWZmZXIsaHQuYnVmZmVyKSx7cG9zaXRpb25zOlMuYnVmZmVyLGluZGljZXM6ai5idWZmZXIsaW5kZXhPZmZzZXRzOkwuYnVmZmVyLGluZGV4Q291bnRzOnouYnVmZmVyLGJhdGNoSWRzOnguYnVmZmVyLHBhY2tlZEJ1ZmZlcjpodC5idWZmZXJ9fXZhciBFUixSUixTUixEYSxUUix3Uix4NCxQNCxNNCxONCxPUixJNCxGNCx0Zz0kKCgpPT57YXMoKTtMdCgpO0llKCk7UGEoKTtmdCgpOyR0KCk7JGUoKTtLdCgpO3BhKCk7d24oKTtzbygpO0VSPW5ldyBhLFJSPW5ldyBZLFNSPW5ldyBOdCxEYT17bWluOnZvaWQgMCxtYXg6dm9pZCAwLGluZGV4Qnl0ZXNQZXJFbGVtZW50OnZvaWQgMH07VFI9MzI3Njcsd1I9bmV3IGEseDQ9bmV3IGEsUDQ9bmV3IGEsTTQ9bmV3IGEsTjQ9bmV3IGEsT1I9bmV3IGN0LEk0PW5ldyBOdDtGND1RZSh2NCl9KTtmdW5jdGlvbiBCNCh0LGUsbixvLHIpe2xldCBpPXQubGVuZ3RoLzMscz10LnN1YmFycmF5KDAsaSksZj10LnN1YmFycmF5KGksMippKSx1PXQuc3ViYXJyYXkoMippLDMqaSk7bm4uemlnWmFnRGVsdGFEZWNvZGUocyxmLHUpO2xldCBjPW5ldyBGbG9hdDY0QXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgbD0wO2w8aTsrK2wpe2xldCBwPXNbbF0sZD1mW2xdLG09dVtsXSxfPVAubGVycChlLndlc3QsZS5lYXN0LHAvZWcpLGc9UC5sZXJwKGUuc291dGgsZS5ub3J0aCxkL2VnKSxiPVAubGVycChuLG8sbS9lZyksVD1jdC5mcm9tUmFkaWFucyhfLGcsYixMNCksTz1yLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKFQsRDQpO2EucGFjayhPLGMsbCozKX1yZXR1cm4gY312YXIgZWcsTDQsRDQsQ1IseFI9JCgoKT0+e2FzKCk7THQoKTtJZSgpO0t0KCk7ZWc9MzI3NjcsTDQ9bmV3IGN0LEQ0PW5ldyBhO0NSPUI0fSk7dmFyIG5nPXt9O2RlKG5nLHtkZWZhdWx0OigpPT56NH0pO2Z1bmN0aW9uIFU0KHQpe3Q9bmV3IEZsb2F0NjRBcnJheSh0KTtsZXQgZT0wO3pkLm1pbj10W2UrK10semQubWF4PXRbZSsrXSxOdC51bnBhY2sodCxlLHZSKSxlKz1OdC5wYWNrZWRMZW5ndGgsWS51bnBhY2sodCxlLEZSKSxlKz1ZLnBhY2tlZExlbmd0aCxhLnVucGFjayh0LGUsTFIpfWZ1bmN0aW9uIGs0KHQpe2xldCBlPXQubGVuZ3RoLG49bmV3IFVpbnQzMkFycmF5KGUrMSksbz0wO2ZvcihsZXQgcj0wO3I8ZTsrK3IpbltyXT1vLG8rPXRbcl07cmV0dXJuIG5bZV09byxufWZ1bmN0aW9uIFY0KHQsZSl7bGV0IG49bmV3IFVpbnQxNkFycmF5KHQucG9zaXRpb25zKSxvPW5ldyBVaW50MTZBcnJheSh0LndpZHRocykscj1uZXcgVWludDMyQXJyYXkodC5jb3VudHMpLGk9bmV3IFVpbnQxNkFycmF5KHQuYmF0Y2hJZHMpO1U0KHQucGFja2VkQnVmZmVyKTtsZXQgcz12UixmPUZSLHU9TFIsYz16ZC5taW4sbD16ZC5tYXgscD1DUihuLHMsYyxsLGYpLGQ9cC5sZW5ndGgvMyxtPWQqNC00LF89bmV3IEZsb2F0MzJBcnJheShtKjMpLGc9bmV3IEZsb2F0MzJBcnJheShtKjMpLGI9bmV3IEZsb2F0MzJBcnJheShtKjMpLFQ9bmV3IEZsb2F0MzJBcnJheShtKjIpLE89bmV3IFVpbnQxNkFycmF5KG0pLEU9MCx3PTAsQz0wLE0sTj0wLEY9ci5sZW5ndGg7Zm9yKE09MDtNPEY7KytNKXtsZXQgUz1yW01dLHg9b1tNXSxMPWlbTV07Zm9yKGxldCB6PTA7ejxTOysreil7bGV0IGo7aWYoej09PTApe2xldCBudD1hLnVucGFjayhwLE4qMyxQUiksYXQ9YS51bnBhY2socCwoTisxKSozLE1SKTtqPWEuc3VidHJhY3QobnQsYXQsTlIpLGEuYWRkKG50LGosail9ZWxzZSBqPWEudW5wYWNrKHAsKE4rei0xKSozLE5SKTtsZXQgaz1hLnVucGFjayhwLChOK3opKjMsRzQpLHE7aWYoej09PVMtMSl7bGV0IG50PWEudW5wYWNrKHAsKE4rUy0xKSozLFBSKSxhdD1hLnVucGFjayhwLChOK1MtMikqMyxNUik7cT1hLnN1YnRyYWN0KG50LGF0LElSKSxhLmFkZChudCxxLHEpfWVsc2UgcT1hLnVucGFjayhwLChOK3orMSkqMyxJUik7YS5zdWJ0cmFjdChqLHUsaiksYS5zdWJ0cmFjdChrLHUsayksYS5zdWJ0cmFjdChxLHUscSk7bGV0IFc9ej09PTA/MjowLFI9ej09PVMtMT8yOjQ7Zm9yKGxldCBudD1XO250PFI7KytudCl7YS5wYWNrKGssXyxFKSxhLnBhY2soaixnLEUpLGEucGFjayhxLGIsRSksRSs9MztsZXQgYXQ9bnQtMjwwPy0xOjE7VFt3KytdPTIqKG50JTIpLTEsVFt3KytdPWF0KngsT1tDKytdPUx9fU4rPVN9bGV0IEk9RnQuY3JlYXRlVHlwZWRBcnJheShtLGQqNi02KSx2PTAsQj0wO2ZvcihGPWQtMSxNPTA7TTxGOysrTSlJW0IrK109dixJW0IrK109disyLElbQisrXT12KzEsSVtCKytdPXYrMSxJW0IrK109disyLElbQisrXT12KzMsdis9NDtlLnB1c2goXy5idWZmZXIsZy5idWZmZXIsYi5idWZmZXIpLGUucHVzaChULmJ1ZmZlcixPLmJ1ZmZlcixJLmJ1ZmZlcik7bGV0IEE9e2luZGV4RGF0YXR5cGU6SS5CWVRFU19QRVJfRUxFTUVOVD09PTI/RnQuVU5TSUdORURfU0hPUlQ6RnQuVU5TSUdORURfSU5ULGN1cnJlbnRQb3NpdGlvbnM6Xy5idWZmZXIscHJldmlvdXNQb3NpdGlvbnM6Zy5idWZmZXIsbmV4dFBvc2l0aW9uczpiLmJ1ZmZlcixleHBhbmRBbmRXaWR0aDpULmJ1ZmZlcixiYXRjaElkczpPLmJ1ZmZlcixpbmRpY2VzOkkuYnVmZmVyfTtpZih0LmtlZXBEZWNvZGVkUG9zaXRpb25zKXtsZXQgUz1rNChyKTtlLnB1c2gocC5idWZmZXIsUy5idWZmZXIpLEE9X3IoQSx7ZGVjb2RlZFBvc2l0aW9uczpwLmJ1ZmZlcixkZWNvZGVkUG9zaXRpb25PZmZzZXRzOlMuYnVmZmVyfSl9cmV0dXJuIEF9dmFyIHZSLEZSLExSLHpkLFBSLE1SLE5SLEc0LElSLHo0LG9nPSQoKCk9PntMdCgpO3JwKCk7eFIoKTskdCgpOyRlKCk7d24oKTtzbygpO3ZSPW5ldyBOdCxGUj1uZXcgWSxMUj1uZXcgYSx6ZD17bWluOnZvaWQgMCxtYXg6dm9pZCAwfTtQUj1uZXcgYSxNUj1uZXcgYSxOUj1uZXcgYSxHND1uZXcgYSxJUj1uZXcgYTt6ND1RZShWNCl9KTtmdW5jdGlvbiBoaSh0LGUpe3kudHlwZU9mLm9iamVjdCgiZWxsaXBzb2lkIix0KSx0aGlzLl9lbGxpcHNvaWQ9dCx0aGlzLl9jYW1lcmFQb3NpdGlvbj1uZXcgYSx0aGlzLl9jYW1lcmFQb3NpdGlvbkluU2NhbGVkU3BhY2U9bmV3IGEsdGhpcy5fZGlzdGFuY2VUb0xpbWJJblNjYWxlZFNwYWNlU3F1YXJlZD0wLGgoZSkmJih0aGlzLmNhbWVyYVBvc2l0aW9uPWUpfWZ1bmN0aW9uIFVSKHQsZSxuKXtpZihoKGUpJiZlPDAmJnQubWluaW11bVJhZGl1cz4tZSl7bGV0IG89YS5mcm9tRWxlbWVudHModC5yYWRpaS54K2UsdC5yYWRpaS55K2UsdC5yYWRpaS56K2UscTQpO3Q9WS5mcm9tQ2FydGVzaWFuMyhvLG4pfXJldHVybiB0fWZ1bmN0aW9uIGtSKHQsZSxuLG8pe3kudHlwZU9mLm9iamVjdCgiZGlyZWN0aW9uVG9Qb2ludCIsZSkseS5kZWZpbmVkKCJwb3NpdGlvbnMiLG4pLGgobyl8fChvPW5ldyBhKTtsZXQgcj1qUih0LGUpLGk9MDtmb3IobGV0IHM9MCxmPW4ubGVuZ3RoO3M8ZjsrK3Mpe2xldCB1PW5bc10sYz1WUih0LHUscik7aWYoYzwwKXJldHVybjtpPU1hdGgubWF4KGksYyl9cmV0dXJuIHpSKHIsaSxvKX1mdW5jdGlvbiBHUih0LGUsbixvLHIsaSl7eS50eXBlT2Yub2JqZWN0KCJkaXJlY3Rpb25Ub1BvaW50IixlKSx5LmRlZmluZWQoInZlcnRpY2VzIixuKSx5LnR5cGVPZi5udW1iZXIoInN0cmlkZSIsbyksaChpKXx8KGk9bmV3IGEpLG89bz8/MyxyPXI/P2EuWkVSTztsZXQgcz1qUih0LGUpLGY9MDtmb3IobGV0IHU9MCxjPW4ubGVuZ3RoO3U8Yzt1Kz1vKXtqZC54PW5bdV0rci54LGpkLnk9blt1KzFdK3IueSxqZC56PW5bdSsyXStyLno7bGV0IGw9VlIodCxqZCxzKTtpZihsPDApcmV0dXJuO2Y9TWF0aC5tYXgoZixsKX1yZXR1cm4gelIocyxmLGkpfWZ1bmN0aW9uIGlnKHQsZSxuKXtsZXQgbz1lLHI9bixpPWEuc3VidHJhY3QodCxvLERSKSxzPS1hLmRvdChpLG8pO3JldHVybiEocjwwP3M+MDpzPnImJnMqcy9hLm1hZ25pdHVkZVNxdWFyZWQoaSk+cil9ZnVuY3Rpb24gVlIodCxlLG4pe2xldCBvPXQudHJhbnNmb3JtUG9zaXRpb25Ub1NjYWxlZFNwYWNlKGUsSzQpLHI9YS5tYWduaXR1ZGVTcXVhcmVkKG8pLGk9TWF0aC5zcXJ0KHIpLHM9YS5kaXZpZGVCeVNjYWxhcihvLGksVzQpO3I9TWF0aC5tYXgoMSxyKSxpPU1hdGgubWF4KDEsaSk7bGV0IGY9YS5kb3QocyxuKSx1PWEubWFnbml0dWRlKGEuY3Jvc3MocyxuLHMpKSxjPTEvaSxsPU1hdGguc3FydChyLTEpKmM7cmV0dXJuIDEvKGYqYy11KmwpfWZ1bmN0aW9uIHpSKHQsZSxuKXtpZighKGU8PTB8fGU9PT0xLzB8fGUhPT1lKSlyZXR1cm4gYS5tdWx0aXBseUJ5U2NhbGFyKHQsZSxuKX1mdW5jdGlvbiBqUih0LGUpe3JldHVybiBhLmVxdWFscyhlLGEuWkVSTyk/ZToodC50cmFuc2Zvcm1Qb3NpdGlvblRvU2NhbGVkU3BhY2UoZSxyZyksYS5ub3JtYWxpemUocmcscmcpKX12YXIgRFIsajQsQlIsSDQscTQsamQsSzQsVzQscmcseHMsc3U9JCgoKT0+e3ZlKCk7THQoKTtXdCgpO2Z0KCk7JHQoKTt3bigpO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGhpLnByb3RvdHlwZSx7ZWxsaXBzb2lkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZWxsaXBzb2lkfX0sY2FtZXJhUG9zaXRpb246e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9jYW1lcmFQb3NpdGlvbn0sc2V0OmZ1bmN0aW9uKHQpe2xldCBuPXRoaXMuX2VsbGlwc29pZC50cmFuc2Zvcm1Qb3NpdGlvblRvU2NhbGVkU3BhY2UodCx0aGlzLl9jYW1lcmFQb3NpdGlvbkluU2NhbGVkU3BhY2UpLG89YS5tYWduaXR1ZGVTcXVhcmVkKG4pLTE7YS5jbG9uZSh0LHRoaXMuX2NhbWVyYVBvc2l0aW9uKSx0aGlzLl9jYW1lcmFQb3NpdGlvbkluU2NhbGVkU3BhY2U9bix0aGlzLl9kaXN0YW5jZVRvTGltYkluU2NhbGVkU3BhY2VTcXVhcmVkPW99fX0pO0RSPW5ldyBhO2hpLnByb3RvdHlwZS5pc1BvaW50VmlzaWJsZT1mdW5jdGlvbih0KXtsZXQgbj10aGlzLl9lbGxpcHNvaWQudHJhbnNmb3JtUG9zaXRpb25Ub1NjYWxlZFNwYWNlKHQsRFIpO3JldHVybiBpZyhuLHRoaXMuX2NhbWVyYVBvc2l0aW9uSW5TY2FsZWRTcGFjZSx0aGlzLl9kaXN0YW5jZVRvTGltYkluU2NhbGVkU3BhY2VTcXVhcmVkKX07aGkucHJvdG90eXBlLmlzU2NhbGVkU3BhY2VQb2ludFZpc2libGU9ZnVuY3Rpb24odCl7cmV0dXJuIGlnKHQsdGhpcy5fY2FtZXJhUG9zaXRpb25JblNjYWxlZFNwYWNlLHRoaXMuX2Rpc3RhbmNlVG9MaW1iSW5TY2FsZWRTcGFjZVNxdWFyZWQpfTtqND1uZXcgYTtoaS5wcm90b3R5cGUuaXNTY2FsZWRTcGFjZVBvaW50VmlzaWJsZVBvc3NpYmx5VW5kZXJFbGxpcHNvaWQ9ZnVuY3Rpb24odCxlKXtsZXQgbj10aGlzLl9lbGxpcHNvaWQsbyxyO3JldHVybiBoKGUpJiZlPDAmJm4ubWluaW11bVJhZGl1cz4tZT8ocj1qNCxyLng9dGhpcy5fY2FtZXJhUG9zaXRpb24ueC8obi5yYWRpaS54K2UpLHIueT10aGlzLl9jYW1lcmFQb3NpdGlvbi55LyhuLnJhZGlpLnkrZSksci56PXRoaXMuX2NhbWVyYVBvc2l0aW9uLnovKG4ucmFkaWkueitlKSxvPXIueCpyLngrci55KnIueStyLnoqci56LTEpOihyPXRoaXMuX2NhbWVyYVBvc2l0aW9uSW5TY2FsZWRTcGFjZSxvPXRoaXMuX2Rpc3RhbmNlVG9MaW1iSW5TY2FsZWRTcGFjZVNxdWFyZWQpLGlnKHQscixvKX07aGkucHJvdG90eXBlLmNvbXB1dGVIb3Jpem9uQ3VsbGluZ1BvaW50PWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4ga1IodGhpcy5fZWxsaXBzb2lkLHQsZSxuKX07QlI9WS5jbG9uZShZLlVOSVRfU1BIRVJFKTtoaS5wcm90b3R5cGUuY29tcHV0ZUhvcml6b25DdWxsaW5nUG9pbnRQb3NzaWJseVVuZGVyRWxsaXBzb2lkPWZ1bmN0aW9uKHQsZSxuLG8pe2xldCByPVVSKHRoaXMuX2VsbGlwc29pZCxuLEJSKTtyZXR1cm4ga1Iocix0LGUsbyl9O2hpLnByb3RvdHlwZS5jb21wdXRlSG9yaXpvbkN1bGxpbmdQb2ludEZyb21WZXJ0aWNlcz1mdW5jdGlvbih0LGUsbixvLHIpe3JldHVybiBHUih0aGlzLl9lbGxpcHNvaWQsdCxlLG4sbyxyKX07aGkucHJvdG90eXBlLmNvbXB1dGVIb3Jpem9uQ3VsbGluZ1BvaW50RnJvbVZlcnRpY2VzUG9zc2libHlVbmRlckVsbGlwc29pZD1mdW5jdGlvbih0LGUsbixvLHIsaSl7bGV0IHM9VVIodGhpcy5fZWxsaXBzb2lkLHIsQlIpO3JldHVybiBHUihzLHQsZSxuLG8saSl9O0g0PVtdO2hpLnByb3RvdHlwZS5jb21wdXRlSG9yaXpvbkN1bGxpbmdQb2ludEZyb21SZWN0YW5nbGU9ZnVuY3Rpb24odCxlLG4pe3kudHlwZU9mLm9iamVjdCgicmVjdGFuZ2xlIix0KTtsZXQgbz1OdC5zdWJzYW1wbGUodCxlLDAsSDQpLHI9Z3QuZnJvbVBvaW50cyhvKTtpZighKGEubWFnbml0dWRlKHIuY2VudGVyKTwuMSplLm1pbmltdW1SYWRpdXMpKXJldHVybiB0aGlzLmNvbXB1dGVIb3Jpem9uQ3VsbGluZ1BvaW50KHIuY2VudGVyLG8sbil9O3E0PW5ldyBhO2pkPW5ldyBhO0s0PW5ldyBhLFc0PW5ldyBhO3JnPW5ldyBhO3hzPWhpfSk7dmFyIEhkLFg0LEhSLHFSPSQoKCk9PntMdCgpO0llKCk7anQoKTtmdCgpO0hkPXt9O0hkLmdldEhlaWdodD1mdW5jdGlvbih0LGUsbil7aWYoIU51bWJlci5pc0Zpbml0ZShlKSl0aHJvdyBuZXcgRCgic2NhbGUgbXVzdCBiZSBhIGZpbml0ZSBudW1iZXIuIik7aWYoIU51bWJlci5pc0Zpbml0ZShuKSl0aHJvdyBuZXcgRCgicmVsYXRpdmVIZWlnaHQgbXVzdCBiZSBhIGZpbml0ZSBudW1iZXIuIik7cmV0dXJuKHQtbikqZStufTtYND1uZXcgY3Q7SGQuZ2V0UG9zaXRpb249ZnVuY3Rpb24odCxlLG4sbyxyKXtsZXQgaT1lLmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKHQsWDQpO2lmKCFoKGkpKXJldHVybiBhLmNsb25lKHQscik7bGV0IHM9SGQuZ2V0SGVpZ2h0KGkuaGVpZ2h0LG4sbyk7cmV0dXJuIGEuZnJvbVJhZGlhbnMoaS5sb25naXR1ZGUsaS5sYXRpdHVkZSxzLGUscil9O0hSPUhkfSk7dmFyIFk0LHhyLEtSPSQoKCk9PntZND17Tk9ORTowLEJJVFMxMjoxfSx4cj1PYmplY3QuZnJlZXplKFk0KX0pO2Z1bmN0aW9uIE1vKHQsZSxuLG8scixpLHMsZix1LGMpe2xldCBsPXhyLk5PTkUscCxkO2lmKGgoZSkmJmgobikmJmgobykmJmgocikpe2xldCBtPWUubWluaW11bSxfPWUubWF4aW11bSxnPWEuc3VidHJhY3QoXyxtLCQ0KSxiPW8tbjtNYXRoLm1heChhLm1heGltdW1Db21wb25lbnQoZyksYik8UTQtMT9sPXhyLkJJVFMxMjpsPXhyLk5PTkUscD1zdC5pbnZlcnNlVHJhbnNmb3JtYXRpb24ocixuZXcgc3QpO2xldCBPPWEubmVnYXRlKG0sd2MpO3N0Lm11bHRpcGx5KHN0LmZyb21UcmFuc2xhdGlvbihPLHFkKSxwLHApO2xldCBFPXdjO0UueD0xL2cueCxFLnk9MS9nLnksRS56PTEvZy56LHN0Lm11bHRpcGx5KHN0LmZyb21TY2FsZShFLHFkKSxwLHApLGQ9c3QuY2xvbmUociksc3Quc2V0VHJhbnNsYXRpb24oZCxhLlpFUk8sZCkscj1zdC5jbG9uZShyLG5ldyBzdCk7bGV0IHc9c3QuZnJvbVRyYW5zbGF0aW9uKG0scWQpLEM9c3QuZnJvbVNjYWxlKGcsWjQpLE09c3QubXVsdGlwbHkodyxDLHFkKTtzdC5tdWx0aXBseShyLE0sciksc3QubXVsdGlwbHkoZCxNLGQpfXRoaXMucXVhbnRpemF0aW9uPWwsdGhpcy5taW5pbXVtSGVpZ2h0PW4sdGhpcy5tYXhpbXVtSGVpZ2h0PW8sdGhpcy5jZW50ZXI9YS5jbG9uZSh0KSx0aGlzLnRvU2NhbGVkRU5VPXAsdGhpcy5mcm9tU2NhbGVkRU5VPXIsdGhpcy5tYXRyaXg9ZCx0aGlzLmhhc1ZlcnRleE5vcm1hbHM9aSx0aGlzLmhhc1dlYk1lcmNhdG9yVD1zPz8hMSx0aGlzLmhhc0dlb2RldGljU3VyZmFjZU5vcm1hbHM9Zj8/ITEsdGhpcy5leGFnZ2VyYXRpb249dT8/MSx0aGlzLmV4YWdnZXJhdGlvblJlbGF0aXZlSGVpZ2h0PWM/PzAsdGhpcy5zdHJpZGU9MCx0aGlzLl9vZmZzZXRHZW9kZXRpY1N1cmZhY2VOb3JtYWw9MCx0aGlzLl9vZmZzZXRWZXJ0ZXhOb3JtYWw9MCx0aGlzLl9jYWxjdWxhdGVTdHJpZGVBbmRPZmZzZXRzKCl9dmFyIHdjLCQ0LFByLHFkLFo0LFE0LEo0LFdSLEtkLFdkLFBzLGN1PSQoKCk9PnthcygpO1VlKCk7THQoKTtEZSgpO2Z0KCk7S3QoKTtVbigpO3FSKCk7S1IoKTt3Yz1uZXcgYSwkND1uZXcgYSxQcj1uZXcgSixxZD1uZXcgc3QsWjQ9bmV3IHN0LFE0PU1hdGgucG93KDIsMTIpO01vLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odCxlLG4sbyxyLGkscyxmKXtsZXQgdT1vLngsYz1vLnk7aWYodGhpcy5xdWFudGl6YXRpb249PT14ci5CSVRTMTIpe249c3QubXVsdGlwbHlCeVBvaW50KHRoaXMudG9TY2FsZWRFTlUsbix3Yyksbi54PVAuY2xhbXAobi54LDAsMSksbi55PVAuY2xhbXAobi55LDAsMSksbi56PVAuY2xhbXAobi56LDAsMSk7bGV0IGw9dGhpcy5tYXhpbXVtSGVpZ2h0LXRoaXMubWluaW11bUhlaWdodCxwPVAuY2xhbXAoKHItdGhpcy5taW5pbXVtSGVpZ2h0KS9sLDAsMSk7Si5mcm9tRWxlbWVudHMobi54LG4ueSxQcik7bGV0IGQ9bm4uY29tcHJlc3NUZXh0dXJlQ29vcmRpbmF0ZXMoUHIpO0ouZnJvbUVsZW1lbnRzKG4ueixwLFByKTtsZXQgbT1ubi5jb21wcmVzc1RleHR1cmVDb29yZGluYXRlcyhQcik7Si5mcm9tRWxlbWVudHModSxjLFByKTtsZXQgXz1ubi5jb21wcmVzc1RleHR1cmVDb29yZGluYXRlcyhQcik7aWYodFtlKytdPWQsdFtlKytdPW0sdFtlKytdPV8sdGhpcy5oYXNXZWJNZXJjYXRvclQpe0ouZnJvbUVsZW1lbnRzKHMsMCxQcik7bGV0IGc9bm4uY29tcHJlc3NUZXh0dXJlQ29vcmRpbmF0ZXMoUHIpO3RbZSsrXT1nfX1lbHNlIGEuc3VidHJhY3Qobix0aGlzLmNlbnRlcix3YyksdFtlKytdPXdjLngsdFtlKytdPXdjLnksdFtlKytdPXdjLnosdFtlKytdPXIsdFtlKytdPXUsdFtlKytdPWMsdGhpcy5oYXNXZWJNZXJjYXRvclQmJih0W2UrK109cyk7cmV0dXJuIHRoaXMuaGFzVmVydGV4Tm9ybWFscyYmKHRbZSsrXT1ubi5vY3RQYWNrRmxvYXQoaSkpLHRoaXMuaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscyYmKHRbZSsrXT1mLngsdFtlKytdPWYueSx0W2UrK109Zi56KSxlfTtKND1uZXcgYSxXUj1uZXcgYTtNby5wcm90b3R5cGUuYWRkR2VvZGV0aWNTdXJmYWNlTm9ybWFscz1mdW5jdGlvbih0LGUsbil7aWYodGhpcy5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzKXJldHVybjtsZXQgbz10aGlzLnN0cmlkZSxyPXQubGVuZ3RoL287dGhpcy5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzPSEwLHRoaXMuX2NhbGN1bGF0ZVN0cmlkZUFuZE9mZnNldHMoKTtsZXQgaT10aGlzLnN0cmlkZTtmb3IobGV0IHM9MDtzPHI7cysrKXtmb3IobGV0IGw9MDtsPG87bCsrKXtsZXQgcD1zKm8rbCxkPXMqaStsO2VbZF09dFtwXX1sZXQgZj10aGlzLmRlY29kZVBvc2l0aW9uKGUscyxKNCksdT1uLmdlb2RldGljU3VyZmFjZU5vcm1hbChmLFdSKSxjPXMqaSt0aGlzLl9vZmZzZXRHZW9kZXRpY1N1cmZhY2VOb3JtYWw7ZVtjXT11LngsZVtjKzFdPXUueSxlW2MrMl09dS56fX07TW8ucHJvdG90eXBlLnJlbW92ZUdlb2RldGljU3VyZmFjZU5vcm1hbHM9ZnVuY3Rpb24odCxlKXtpZighdGhpcy5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzKXJldHVybjtsZXQgbj10aGlzLnN0cmlkZSxvPXQubGVuZ3RoL247dGhpcy5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzPSExLHRoaXMuX2NhbGN1bGF0ZVN0cmlkZUFuZE9mZnNldHMoKTtsZXQgcj10aGlzLnN0cmlkZTtmb3IobGV0IGk9MDtpPG87aSsrKWZvcihsZXQgcz0wO3M8cjtzKyspe2xldCBmPWkqbitzLHU9aSpyK3M7ZVt1XT10W2ZdfX07TW8ucHJvdG90eXBlLmRlY29kZVBvc2l0aW9uPWZ1bmN0aW9uKHQsZSxuKXtpZihoKG4pfHwobj1uZXcgYSksZSo9dGhpcy5zdHJpZGUsdGhpcy5xdWFudGl6YXRpb249PT14ci5CSVRTMTIpe2xldCBvPW5uLmRlY29tcHJlc3NUZXh0dXJlQ29vcmRpbmF0ZXModFtlXSxQcik7bi54PW8ueCxuLnk9by55O2xldCByPW5uLmRlY29tcHJlc3NUZXh0dXJlQ29vcmRpbmF0ZXModFtlKzFdLFByKTtyZXR1cm4gbi56PXIueCxzdC5tdWx0aXBseUJ5UG9pbnQodGhpcy5mcm9tU2NhbGVkRU5VLG4sbil9cmV0dXJuIG4ueD10W2VdLG4ueT10W2UrMV0sbi56PXRbZSsyXSxhLmFkZChuLHRoaXMuY2VudGVyLG4pfTtNby5wcm90b3R5cGUuZ2V0RXhhZ2dlcmF0ZWRQb3NpdGlvbj1mdW5jdGlvbih0LGUsbil7bj10aGlzLmRlY29kZVBvc2l0aW9uKHQsZSxuKTtsZXQgbz10aGlzLmV4YWdnZXJhdGlvbixyPXRoaXMuZXhhZ2dlcmF0aW9uUmVsYXRpdmVIZWlnaHQ7aWYobyE9PTEmJnRoaXMuaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscyl7bGV0IHM9dGhpcy5kZWNvZGVHZW9kZXRpY1N1cmZhY2VOb3JtYWwodCxlLFdSKSxmPXRoaXMuZGVjb2RlSGVpZ2h0KHQsZSksdT1IUi5nZXRIZWlnaHQoZixvLHIpLWY7bi54Kz1zLngqdSxuLnkrPXMueSp1LG4ueis9cy56KnV9cmV0dXJuIG59O01vLnByb3RvdHlwZS5kZWNvZGVUZXh0dXJlQ29vcmRpbmF0ZXM9ZnVuY3Rpb24odCxlLG4pe3JldHVybiBoKG4pfHwobj1uZXcgSiksZSo9dGhpcy5zdHJpZGUsdGhpcy5xdWFudGl6YXRpb249PT14ci5CSVRTMTI/bm4uZGVjb21wcmVzc1RleHR1cmVDb29yZGluYXRlcyh0W2UrMl0sbik6Si5mcm9tRWxlbWVudHModFtlKzRdLHRbZSs1XSxuKX07TW8ucHJvdG90eXBlLmRlY29kZUhlaWdodD1mdW5jdGlvbih0LGUpe3JldHVybiBlKj10aGlzLnN0cmlkZSx0aGlzLnF1YW50aXphdGlvbj09PXhyLkJJVFMxMj9ubi5kZWNvbXByZXNzVGV4dHVyZUNvb3JkaW5hdGVzKHRbZSsxXSxQcikueSoodGhpcy5tYXhpbXVtSGVpZ2h0LXRoaXMubWluaW11bUhlaWdodCkrdGhpcy5taW5pbXVtSGVpZ2h0OnRbZSszXX07TW8ucHJvdG90eXBlLmRlY29kZVdlYk1lcmNhdG9yVD1mdW5jdGlvbih0LGUpe3JldHVybiBlKj10aGlzLnN0cmlkZSx0aGlzLnF1YW50aXphdGlvbj09PXhyLkJJVFMxMj9ubi5kZWNvbXByZXNzVGV4dHVyZUNvb3JkaW5hdGVzKHRbZSszXSxQcikueDp0W2UrNl19O01vLnByb3RvdHlwZS5nZXRPY3RFbmNvZGVkTm9ybWFsPWZ1bmN0aW9uKHQsZSxuKXtlPWUqdGhpcy5zdHJpZGUrdGhpcy5fb2Zmc2V0VmVydGV4Tm9ybWFsO2xldCBvPXRbZV0vMjU2LHI9TWF0aC5mbG9vcihvKSxpPShvLXIpKjI1NjtyZXR1cm4gSi5mcm9tRWxlbWVudHMocixpLG4pfTtNby5wcm90b3R5cGUuZGVjb2RlR2VvZGV0aWNTdXJmYWNlTm9ybWFsPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gZT1lKnRoaXMuc3RyaWRlK3RoaXMuX29mZnNldEdlb2RldGljU3VyZmFjZU5vcm1hbCxuLng9dFtlXSxuLnk9dFtlKzFdLG4uej10W2UrMl0sbn07TW8ucHJvdG90eXBlLl9jYWxjdWxhdGVTdHJpZGVBbmRPZmZzZXRzPWZ1bmN0aW9uKCl7bGV0IHQ9MDtzd2l0Y2godGhpcy5xdWFudGl6YXRpb24pe2Nhc2UgeHIuQklUUzEyOnQrPTM7YnJlYWs7ZGVmYXVsdDp0Kz02fXRoaXMuaGFzV2ViTWVyY2F0b3JUJiYodCs9MSksdGhpcy5oYXNWZXJ0ZXhOb3JtYWxzJiYodGhpcy5fb2Zmc2V0VmVydGV4Tm9ybWFsPXQsdCs9MSksdGhpcy5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzJiYodGhpcy5fb2Zmc2V0R2VvZGV0aWNTdXJmYWNlTm9ybWFsPXQsdCs9MyksdGhpcy5zdHJpZGU9dH07S2Q9e3Bvc2l0aW9uM0RBbmRIZWlnaHQ6MCx0ZXh0dXJlQ29vcmRBbmRFbmNvZGVkTm9ybWFsczoxLGdlb2RldGljU3VyZmFjZU5vcm1hbDoyfSxXZD17Y29tcHJlc3NlZDA6MCxjb21wcmVzc2VkMToxLGdlb2RldGljU3VyZmFjZU5vcm1hbDoyfTtNby5wcm90b3R5cGUuZ2V0QXR0cmlidXRlcz1mdW5jdGlvbih0KXtsZXQgZT1ldC5GTE9BVCxuPWV0LmdldFNpemVJbkJ5dGVzKGUpLG89dGhpcy5zdHJpZGUqbixyPTAsaT1bXTtmdW5jdGlvbiBzKGYsdSl7aS5wdXNoKHtpbmRleDpmLHZlcnRleEJ1ZmZlcjp0LGNvbXBvbmVudERhdGF0eXBlOmUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTp1LG9mZnNldEluQnl0ZXM6cixzdHJpZGVJbkJ5dGVzOm99KSxyKz11Km59aWYodGhpcy5xdWFudGl6YXRpb249PT14ci5OT05FKXtzKEtkLnBvc2l0aW9uM0RBbmRIZWlnaHQsNCk7bGV0IGY9MjtmKz10aGlzLmhhc1dlYk1lcmNhdG9yVD8xOjAsZis9dGhpcy5oYXNWZXJ0ZXhOb3JtYWxzPzE6MCxzKEtkLnRleHR1cmVDb29yZEFuZEVuY29kZWROb3JtYWxzLGYpLHRoaXMuaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscyYmcyhLZC5nZW9kZXRpY1N1cmZhY2VOb3JtYWwsMyl9ZWxzZXtsZXQgZj10aGlzLmhhc1dlYk1lcmNhdG9yVHx8dGhpcy5oYXNWZXJ0ZXhOb3JtYWxzLHU9dGhpcy5oYXNXZWJNZXJjYXRvclQmJnRoaXMuaGFzVmVydGV4Tm9ybWFscztzKFdkLmNvbXByZXNzZWQwLGY/NDozKSx1JiZzKFdkLmNvbXByZXNzZWQxLDEpLHRoaXMuaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscyYmcyhXZC5nZW9kZXRpY1N1cmZhY2VOb3JtYWwsMyl9cmV0dXJuIGl9O01vLnByb3RvdHlwZS5nZXRBdHRyaWJ1dGVMb2NhdGlvbnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWFudGl6YXRpb249PT14ci5OT05FP0tkOldkfTtNby5jbG9uZT1mdW5jdGlvbih0LGUpe2lmKGgodCkpcmV0dXJuIGgoZSl8fChlPW5ldyBNbyksZS5xdWFudGl6YXRpb249dC5xdWFudGl6YXRpb24sZS5taW5pbXVtSGVpZ2h0PXQubWluaW11bUhlaWdodCxlLm1heGltdW1IZWlnaHQ9dC5tYXhpbXVtSGVpZ2h0LGUuY2VudGVyPWEuY2xvbmUodC5jZW50ZXIpLGUudG9TY2FsZWRFTlU9c3QuY2xvbmUodC50b1NjYWxlZEVOVSksZS5mcm9tU2NhbGVkRU5VPXN0LmNsb25lKHQuZnJvbVNjYWxlZEVOVSksZS5tYXRyaXg9c3QuY2xvbmUodC5tYXRyaXgpLGUuaGFzVmVydGV4Tm9ybWFscz10Lmhhc1ZlcnRleE5vcm1hbHMsZS5oYXNXZWJNZXJjYXRvclQ9dC5oYXNXZWJNZXJjYXRvclQsZS5oYXNHZW9kZXRpY1N1cmZhY2VOb3JtYWxzPXQuaGFzR2VvZGV0aWNTdXJmYWNlTm9ybWFscyxlLmV4YWdnZXJhdGlvbj10LmV4YWdnZXJhdGlvbixlLmV4YWdnZXJhdGlvblJlbGF0aXZlSGVpZ2h0PXQuZXhhZ2dlcmF0aW9uUmVsYXRpdmVIZWlnaHQsZS5fY2FsY3VsYXRlU3RyaWRlQW5kT2Zmc2V0cygpLGV9O1BzPU1vfSk7dmFyIGNnPXt9O2RlKGNnLHtkZWZhdWx0OigpPT5jVX0pO2Z1bmN0aW9uIGF1KHQsZSxuKXtuPW4/P1A7bGV0IG89dC5sZW5ndGg7Zm9yKGxldCByPTA7cjxvOysrcilpZihuLmVxdWFsc0Vwc2lsb24odFtyXSxlLFAuRVBTSUxPTjEyKSlyZXR1cm4gcjtyZXR1cm4tMX1mdW5jdGlvbiBuVSh0LGUpe3QuZWxsaXBzb2lkPVkuY2xvbmUodC5lbGxpcHNvaWQpLHQucmVjdGFuZ2xlPU50LmNsb25lKHQucmVjdGFuZ2xlKTtsZXQgbj1zVSh0LmJ1ZmZlcix0LnJlbGF0aXZlVG9DZW50ZXIsdC5lbGxpcHNvaWQsdC5yZWN0YW5nbGUsdC5uYXRpdmVSZWN0YW5nbGUsdC5leGFnZ2VyYXRpb24sdC5leGFnZ2VyYXRpb25SZWxhdGl2ZUhlaWdodCx0LnNraXJ0SGVpZ2h0LHQuaW5jbHVkZVdlYk1lcmNhdG9yVCx0Lm5lZ2F0aXZlQWx0aXR1ZGVFeHBvbmVudEJpYXMsdC5uZWdhdGl2ZUVsZXZhdGlvblRocmVzaG9sZCksbz1uLnZlcnRpY2VzO2UucHVzaChvLmJ1ZmZlcik7bGV0IHI9bi5pbmRpY2VzO3JldHVybiBlLnB1c2goci5idWZmZXIpLHt2ZXJ0aWNlczpvLmJ1ZmZlcixpbmRpY2VzOnIuYnVmZmVyLG51bWJlck9mQXR0cmlidXRlczpuLmVuY29kaW5nLnN0cmlkZSxtaW5pbXVtSGVpZ2h0Om4ubWluaW11bUhlaWdodCxtYXhpbXVtSGVpZ2h0Om4ubWF4aW11bUhlaWdodCxib3VuZGluZ1NwaGVyZTNEOm4uYm91bmRpbmdTcGhlcmUzRCxvcmllbnRlZEJvdW5kaW5nQm94Om4ub3JpZW50ZWRCb3VuZGluZ0JveCxvY2NsdWRlZVBvaW50SW5TY2FsZWRTcGFjZTpuLm9jY2x1ZGVlUG9pbnRJblNjYWxlZFNwYWNlLGVuY29kaW5nOm4uZW5jb2RpbmcsdmVydGV4Q291bnRXaXRob3V0U2tpcnRzOm4udmVydGV4Q291bnRXaXRob3V0U2tpcnRzLGluZGV4Q291bnRXaXRob3V0U2tpcnRzOm4uaW5kZXhDb3VudFdpdGhvdXRTa2lydHMsd2VzdEluZGljZXNTb3V0aFRvTm9ydGg6bi53ZXN0SW5kaWNlc1NvdXRoVG9Ob3J0aCxzb3V0aEluZGljZXNFYXN0VG9XZXN0Om4uc291dGhJbmRpY2VzRWFzdFRvV2VzdCxlYXN0SW5kaWNlc05vcnRoVG9Tb3V0aDpuLmVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoLG5vcnRoSW5kaWNlc1dlc3RUb0Vhc3Q6bi5ub3J0aEluZGljZXNXZXN0VG9FYXN0fX1mdW5jdGlvbiBzVSh0LGUsbixvLHIsaSxzLGYsdSxjLGwpe2xldCBwLGQsbSxfLGcsYjtoKG8pPyhwPW8ud2VzdCxkPW8uc291dGgsbT1vLmVhc3QsXz1vLm5vcnRoLGc9by53aWR0aCxiPW8uaGVpZ2h0KToocD1QLnRvUmFkaWFucyhyLndlc3QpLGQ9UC50b1JhZGlhbnMoci5zb3V0aCksbT1QLnRvUmFkaWFucyhyLmVhc3QpLF89UC50b1JhZGlhbnMoci5ub3J0aCksZz1QLnRvUmFkaWFucyhvLndpZHRoKSxiPVAudG9SYWRpYW5zKG8uaGVpZ2h0KSk7bGV0IFQ9W2QsX10sTz1bcCxtXSxFPVhvLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKGUsbiksdz1zdC5pbnZlcnNlVHJhbnNmb3JtYXRpb24oRSxpVSksQyxNO3UmJihDPW5vLmdlb2RldGljTGF0aXR1ZGVUb01lcmNhdG9yQW5nbGUoZCksTT0xLyhuby5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKF8pLUMpKTtsZXQgRj1pIT09MSxJPW5ldyBEYXRhVmlldyh0KSx2PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxCPU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxBPW9VO0EueD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksQS55PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxBLno9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2xldCBTPXJVO1MueD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksUy55PU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxTLno9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO2xldCB4PTAsTD0wLHo9MCxqLGs7Zm9yKGs9MDtrPDQ7KytrKXtsZXQgb2U9eDtqPUkuZ2V0VWludDMyKG9lLCEwKSxvZSs9c2c7bGV0IFl0PVAudG9SYWRpYW5zKEkuZ2V0RmxvYXQ2NChvZSwhMCkqMTgwKTtvZSs9T2MsYXUoTyxZdCk9PT0tMSYmTy5wdXNoKFl0KTtsZXQgVmU9UC50b1JhZGlhbnMoSS5nZXRGbG9hdDY0KG9lLCEwKSoxODApO29lKz1PYyxhdShULFZlKT09PS0xJiZULnB1c2goVmUpLG9lKz0yKk9jO2xldCBkbj1JLmdldEludDMyKG9lLCEwKTtvZSs9WGQsTCs9ZG4sZG49SS5nZXRJbnQzMihvZSwhMCkseis9ZG4qMyx4Kz1qK3NnfWxldCBxPVtdLFc9W10sUj1uZXcgQXJyYXkoTCksbnQ9bmV3IEFycmF5KEwpLGF0PW5ldyBBcnJheShMKSxsdD11P25ldyBBcnJheShMKTpbXSxodD1GP25ldyBBcnJheShMKTpbXSxvdD1uZXcgQXJyYXkoeiksUHQ9W10seXQ9W10sRXQ9W10sZHQ9W10scnQ9MCxDdD0wO2Zvcih4PTAsaz0wO2s8NDsrK2spe2o9SS5nZXRVaW50MzIoeCwhMCkseCs9c2c7bGV0IG9lPXgsWXQ9UC50b1JhZGlhbnMoSS5nZXRGbG9hdDY0KHgsITApKjE4MCk7eCs9T2M7bGV0IFZlPVAudG9SYWRpYW5zKEkuZ2V0RmxvYXQ2NCh4LCEwKSoxODApO3grPU9jO2xldCBkbj1QLnRvUmFkaWFucyhJLmdldEZsb2F0NjQoeCwhMCkqMTgwKSxzbj1kbiouNTt4Kz1PYztsZXQgbW49UC50b1JhZGlhbnMoSS5nZXRGbG9hdDY0KHgsITApKjE4MCksZm89bW4qLjU7eCs9T2M7bGV0IEhuPUkuZ2V0SW50MzIoeCwhMCk7eCs9WGQ7bGV0IFplPUkuZ2V0SW50MzIoeCwhMCk7eCs9WGQseCs9WGQ7bGV0IGNuPW5ldyBBcnJheShIbik7Zm9yKGxldCBobj0wO2huPEhuOysraG4pe2xldCB1bz1ZdCtJLmdldFVpbnQ4KHgrKykqZG47Tm8ubG9uZ2l0dWRlPXVvO2xldCBxbj1WZStJLmdldFVpbnQ4KHgrKykqbW47Tm8ubGF0aXR1ZGU9cW47bGV0IEtuPUkuZ2V0RmxvYXQzMih4LCEwKTtpZih4Kz1lVSxLbiE9PTAmJktuPGwmJihLbio9LU1hdGgucG93KDIsYykpLEtuKj02MzcxMDEwLE5vLmhlaWdodD1LbixhdShPLHVvKSE9PS0xfHxhdShULHFuKSE9PS0xKXtsZXQgTG49YXUocSxObyxjdCk7aWYoTG49PT0tMSlxLnB1c2goY3QuY2xvbmUoTm8pKSxXLnB1c2gocnQpO2Vsc2V7Y25baG5dPVdbTG5dO2NvbnRpbnVlfX1jbltobl09cnQsTWF0aC5hYnModW8tcCk8c24/UHQucHVzaCh7aW5kZXg6cnQsY2FydG9ncmFwaGljOmN0LmNsb25lKE5vKX0pOk1hdGguYWJzKHVvLW0pPHNuP0V0LnB1c2goe2luZGV4OnJ0LGNhcnRvZ3JhcGhpYzpjdC5jbG9uZShObyl9KTpNYXRoLmFicyhxbi1kKTxmbz95dC5wdXNoKHtpbmRleDpydCxjYXJ0b2dyYXBoaWM6Y3QuY2xvbmUoTm8pfSk6TWF0aC5hYnMocW4tXyk8Zm8mJmR0LnB1c2goe2luZGV4OnJ0LGNhcnRvZ3JhcGhpYzpjdC5jbG9uZShObyl9KSx2PU1hdGgubWluKEtuLHYpLEI9TWF0aC5tYXgoS24sQiksYXRbcnRdPUtuO2xldCBsbz1uLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKE5vKTtpZihSW3J0XT1sbyx1JiYobHRbcnRdPShuby5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKHFuKS1DKSpNKSxGKXtsZXQgTG49bi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwobG8pO2h0W3J0XT1Mbn1zdC5tdWx0aXBseUJ5UG9pbnQodyxsbyxCYSksYS5taW5pbXVtQnlDb21wb25lbnQoQmEsQSxBKSxhLm1heGltdW1CeUNvbXBvbmVudChCYSxTLFMpO2xldCB6ZT0odW8tcCkvKG0tcCk7emU9UC5jbGFtcCh6ZSwwLDEpO2xldCBGZT0ocW4tZCkvKF8tZCk7RmU9UC5jbGFtcChGZSwwLDEpLG50W3J0XT1uZXcgSih6ZSxGZSksKytydH1sZXQgS2U9WmUqMztmb3IobGV0IGhuPTA7aG48S2U7KytobiwrK0N0KW90W0N0XT1jbltJLmdldFVpbnQxNih4LCEwKV0seCs9dFU7aWYoaiE9PXgtb2UpdGhyb3cgbmV3IEFlKCJJbnZhbGlkIHRlcnJhaW4gdGlsZS4iKX1SLmxlbmd0aD1ydCxudC5sZW5ndGg9cnQsYXQubGVuZ3RoPXJ0LHUmJihsdC5sZW5ndGg9cnQpLEYmJihodC5sZW5ndGg9cnQpO2xldCBrdD1ydCxsZT1DdCxyZT17aE1pbjp2LGxhc3RCb3JkZXJQb2ludDp2b2lkIDAsc2tpcnRIZWlnaHQ6Zix0b0VOVTp3LGVsbGlwc29pZDpuLG1pbmltdW06QSxtYXhpbXVtOlN9O1B0LnNvcnQoZnVuY3Rpb24ob2UsWXQpe3JldHVybiBZdC5jYXJ0b2dyYXBoaWMubGF0aXR1ZGUtb2UuY2FydG9ncmFwaGljLmxhdGl0dWRlfSkseXQuc29ydChmdW5jdGlvbihvZSxZdCl7cmV0dXJuIG9lLmNhcnRvZ3JhcGhpYy5sb25naXR1ZGUtWXQuY2FydG9ncmFwaGljLmxvbmdpdHVkZX0pLEV0LnNvcnQoZnVuY3Rpb24ob2UsWXQpe3JldHVybiBvZS5jYXJ0b2dyYXBoaWMubGF0aXR1ZGUtWXQuY2FydG9ncmFwaGljLmxhdGl0dWRlfSksZHQuc29ydChmdW5jdGlvbihvZSxZdCl7cmV0dXJuIFl0LmNhcnRvZ3JhcGhpYy5sb25naXR1ZGUtb2UuY2FydG9ncmFwaGljLmxvbmdpdHVkZX0pO2xldCBwZT0xZS01O2lmKFlkKFIsYXQsbnQsbHQsaHQsb3QscmUsUHQsLXBlKmcsITAsLXBlKmIpLFlkKFIsYXQsbnQsbHQsaHQsb3QscmUseXQsLXBlKmIsITEpLFlkKFIsYXQsbnQsbHQsaHQsb3QscmUsRXQscGUqZywhMCxwZSpiKSxZZChSLGF0LG50LGx0LGh0LG90LHJlLGR0LHBlKmIsITEpLFB0Lmxlbmd0aD4wJiZkdC5sZW5ndGg+MCl7bGV0IG9lPVB0WzBdLmluZGV4LFl0PWt0LFZlPWR0W2R0Lmxlbmd0aC0xXS5pbmRleCxkbj1SLmxlbmd0aC0xO290LnB1c2goVmUsZG4sWXQsWXQsb2UsVmUpfUw9Ui5sZW5ndGg7bGV0IGZlPWd0LmZyb21Qb2ludHMoUiksWnQ7aChvKSYmKFp0PVNvLmZyb21SZWN0YW5nbGUobyx2LEIsbikpO2xldCBOZT1uZXcgeHMobikuY29tcHV0ZUhvcml6b25DdWxsaW5nUG9pbnRQb3NzaWJseVVuZGVyRWxsaXBzb2lkKGUsUix2KSxnZT1uZXcgTGkoQSxTLGUpLEVlPW5ldyBQcyhlLGdlLHJlLmhNaW4sQixFLCExLHUsRixpLHMpLHVuPW5ldyBGbG9hdDMyQXJyYXkoTCpFZS5zdHJpZGUpLEdlPTA7Zm9yKGxldCBvZT0wO29lPEw7KytvZSlHZT1FZS5lbmNvZGUodW4sR2UsUltvZV0sbnRbb2VdLGF0W29lXSx2b2lkIDAsbHRbb2VdLGh0W29lXSk7bGV0IGJlPVB0Lm1hcChmdW5jdGlvbihvZSl7cmV0dXJuIG9lLmluZGV4fSkucmV2ZXJzZSgpLGxuPXl0Lm1hcChmdW5jdGlvbihvZSl7cmV0dXJuIG9lLmluZGV4fSkucmV2ZXJzZSgpLHBuPUV0Lm1hcChmdW5jdGlvbihvZSl7cmV0dXJuIG9lLmluZGV4fSkucmV2ZXJzZSgpLEVuPWR0Lm1hcChmdW5jdGlvbihvZSl7cmV0dXJuIG9lLmluZGV4fSkucmV2ZXJzZSgpO3JldHVybiBsbi51bnNoaWZ0KHBuW3BuLmxlbmd0aC0xXSksbG4ucHVzaChiZVswXSksRW4udW5zaGlmdChiZVtiZS5sZW5ndGgtMV0pLEVuLnB1c2gocG5bMF0pLHt2ZXJ0aWNlczp1bixpbmRpY2VzOm5ldyBVaW50MTZBcnJheShvdCksbWF4aW11bUhlaWdodDpCLG1pbmltdW1IZWlnaHQ6dixlbmNvZGluZzpFZSxib3VuZGluZ1NwaGVyZTNEOmZlLG9yaWVudGVkQm91bmRpbmdCb3g6WnQsb2NjbHVkZWVQb2ludEluU2NhbGVkU3BhY2U6TmUsdmVydGV4Q291bnRXaXRob3V0U2tpcnRzOmt0LGluZGV4Q291bnRXaXRob3V0U2tpcnRzOmxlLHdlc3RJbmRpY2VzU291dGhUb05vcnRoOmJlLHNvdXRoSW5kaWNlc0Vhc3RUb1dlc3Q6bG4sZWFzdEluZGljZXNOb3J0aFRvU291dGg6cG4sbm9ydGhJbmRpY2VzV2VzdFRvRWFzdDpFbn19ZnVuY3Rpb24gWWQodCxlLG4sbyxyLGkscyxmLHUsYyxsKXtsZXQgcD1mLmxlbmd0aDtmb3IobGV0IGQ9MDtkPHA7KytkKXtsZXQgbT1mW2RdLF89bS5jYXJ0b2dyYXBoaWMsZz1tLmluZGV4LGI9dC5sZW5ndGgsVD1fLmxvbmdpdHVkZSxPPV8ubGF0aXR1ZGU7Tz1QLmNsYW1wKE8sLVAuUElfT1ZFUl9UV08sUC5QSV9PVkVSX1RXTyk7bGV0IEU9Xy5oZWlnaHQtcy5za2lydEhlaWdodDtzLmhNaW49TWF0aC5taW4ocy5oTWluLEUpLGN0LmZyb21SYWRpYW5zKFQsTyxFLE5vKSxjJiYoTm8ubG9uZ2l0dWRlKz11KSxjP2Q9PT1wLTE/Tm8ubGF0aXR1ZGUrPWw6ZD09PTAmJihOby5sYXRpdHVkZS09bCk6Tm8ubGF0aXR1ZGUrPXU7bGV0IHc9cy5lbGxpcHNvaWQuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oTm8pO3QucHVzaCh3KSxlLnB1c2goRSksbi5wdXNoKEouY2xvbmUobltnXSkpLG8ubGVuZ3RoPjAmJm8ucHVzaChvW2ddKSxyLmxlbmd0aD4wJiZyLnB1c2gocltnXSksc3QubXVsdGlwbHlCeVBvaW50KHMudG9FTlUsdyxCYSk7bGV0IEM9cy5taW5pbXVtLE09cy5tYXhpbXVtO2EubWluaW11bUJ5Q29tcG9uZW50KEJhLEMsQyksYS5tYXhpbXVtQnlDb21wb25lbnQoQmEsTSxNKTtsZXQgTj1zLmxhc3RCb3JkZXJQb2ludDtpZihoKE4pKXtsZXQgRj1OLmluZGV4O2kucHVzaChGLGItMSxiLGIsZyxGKX1zLmxhc3RCb3JkZXJQb2ludD1tfX12YXIgdFUsWGQsc2csZVUsT2MsTm8sQmEsb1UsclUsaVUsY1UsYWc9JCgoKT0+e3hmKCk7dmUoKTtVZSgpO0x0KCk7SWUoKTtmdCgpOyR0KCk7c3UoKTtLdCgpO1VuKCk7cGEoKTt3bigpO0pyKCk7Y3UoKTtjcygpO2ljKCk7c28oKTt0VT1VaW50MTZBcnJheS5CWVRFU19QRVJfRUxFTUVOVCxYZD1JbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULHNnPVVpbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULGVVPUZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCxPYz1GbG9hdDY0QXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7Tm89bmV3IGN0LEJhPW5ldyBhLG9VPW5ldyBhLHJVPW5ldyBhLGlVPW5ldyBzdDtjVT1RZShuVSl9KTt2YXIgYVUsWFIsWVI9JCgoKT0+e2FVPXtOT05FOjAsTEVSQzoxfSxYUj1PYmplY3QuZnJlZXplKGFVKX0pO3ZhciBfaSxmZyxmVSx1VSxsVSwkUixaUj0kKCgpPT57eGYoKTt2ZSgpO1VlKCk7THQoKTtmdCgpO2p0KCk7JHQoKTtzdSgpO0t0KCk7VW4oKTtwYSgpO3duKCk7Y3UoKTtjcygpO2ljKCk7X2k9e307X2kuREVGQVVMVF9TVFJVQ1RVUkU9T2JqZWN0LmZyZWV6ZSh7aGVpZ2h0U2NhbGU6MSxoZWlnaHRPZmZzZXQ6MCxlbGVtZW50c1BlckhlaWdodDoxLHN0cmlkZToxLGVsZW1lbnRNdWx0aXBsaWVyOjI1Nixpc0JpZ0VuZGlhbjohMX0pO2ZnPW5ldyBhLGZVPW5ldyBzdCx1VT1uZXcgYSxsVT1uZXcgYTtfaS5jb21wdXRlVmVydGljZXM9ZnVuY3Rpb24odCl7aWYoIWgodCl8fCFoKHQuaGVpZ2h0bWFwKSl0aHJvdyBuZXcgRCgib3B0aW9ucy5oZWlnaHRtYXAgaXMgcmVxdWlyZWQuIik7aWYoIWgodC53aWR0aCl8fCFoKHQuaGVpZ2h0KSl0aHJvdyBuZXcgRCgib3B0aW9ucy53aWR0aCBhbmQgb3B0aW9ucy5oZWlnaHQgYXJlIHJlcXVpcmVkLiIpO2lmKCFoKHQubmF0aXZlUmVjdGFuZ2xlKSl0aHJvdyBuZXcgRCgib3B0aW9ucy5uYXRpdmVSZWN0YW5nbGUgaXMgcmVxdWlyZWQuIik7aWYoIWgodC5za2lydEhlaWdodCkpdGhyb3cgbmV3IEQoIm9wdGlvbnMuc2tpcnRIZWlnaHQgaXMgcmVxdWlyZWQuIik7bGV0IGU9TWF0aC5jb3Msbj1NYXRoLnNpbixvPU1hdGguc3FydCxyPU1hdGguYXRhbixpPU1hdGguZXhwLHM9UC5QSV9PVkVSX1RXTyxmPVAudG9SYWRpYW5zLHU9dC5oZWlnaHRtYXAsYz10LndpZHRoLGw9dC5oZWlnaHQscD10LnNraXJ0SGVpZ2h0LGQ9cD4wLG09dC5pc0dlb2dyYXBoaWM/PyEwLF89dC5lbGxpcHNvaWQ/P1kuZGVmYXVsdCxnPTEvXy5tYXhpbXVtUmFkaXVzLGI9TnQuY2xvbmUodC5uYXRpdmVSZWN0YW5nbGUpLFQ9TnQuY2xvbmUodC5yZWN0YW5nbGUpLE8sRSx3LEM7aChUKT8oTz1ULndlc3QsRT1ULnNvdXRoLHc9VC5lYXN0LEM9VC5ub3J0aCk6bT8oTz1mKGIud2VzdCksRT1mKGIuc291dGgpLHc9ZihiLmVhc3QpLEM9ZihiLm5vcnRoKSk6KE89Yi53ZXN0KmcsRT1zLTIqcihpKC1iLnNvdXRoKmcpKSx3PWIuZWFzdCpnLEM9cy0yKnIoaSgtYi5ub3J0aCpnKSkpO2xldCBNPXQucmVsYXRpdmVUb0NlbnRlcixOPWgoTSk7TT1OP006YS5aRVJPO2xldCBGPXQuaW5jbHVkZVdlYk1lcmNhdG9yVD8/ITEsST10LmV4YWdnZXJhdGlvbj8/MSx2PXQuZXhhZ2dlcmF0aW9uUmVsYXRpdmVIZWlnaHQ/PzAsQT1JIT09MSxTPXQuc3RydWN0dXJlPz9faS5ERUZBVUxUX1NUUlVDVFVSRSx4PVMuaGVpZ2h0U2NhbGU/P19pLkRFRkFVTFRfU1RSVUNUVVJFLmhlaWdodFNjYWxlLEw9Uy5oZWlnaHRPZmZzZXQ/P19pLkRFRkFVTFRfU1RSVUNUVVJFLmhlaWdodE9mZnNldCx6PVMuZWxlbWVudHNQZXJIZWlnaHQ/P19pLkRFRkFVTFRfU1RSVUNUVVJFLmVsZW1lbnRzUGVySGVpZ2h0LGo9Uy5zdHJpZGU/P19pLkRFRkFVTFRfU1RSVUNUVVJFLnN0cmlkZSxrPVMuZWxlbWVudE11bHRpcGxpZXI/P19pLkRFRkFVTFRfU1RSVUNUVVJFLmVsZW1lbnRNdWx0aXBsaWVyLHE9Uy5pc0JpZ0VuZGlhbj8/X2kuREVGQVVMVF9TVFJVQ1RVUkUuaXNCaWdFbmRpYW4sVz1OdC5jb21wdXRlV2lkdGgoYiksUj1OdC5jb21wdXRlSGVpZ2h0KGIpLG50PVcvKGMtMSksYXQ9Ui8obC0xKTttfHwoVyo9ZyxSKj1nKTtsZXQgbHQ9Xy5yYWRpaVNxdWFyZWQsaHQ9bHQueCxvdD1sdC55LFB0PWx0LnoseXQ9NjU1MzYsRXQ9LTY1NTM2LGR0PVhvLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKE0sXykscnQ9c3QuaW52ZXJzZVRyYW5zZm9ybWF0aW9uKGR0LGZVKSxDdCxrdDtGJiYoQ3Q9bm8uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZShFKSxrdD0xLyhuby5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKEMpLUN0KSk7bGV0IGxlPXVVO2xlLng9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGxlLnk9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGxlLno9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2xldCByZT1sVTtyZS54PU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxyZS55PU51bWJlci5ORUdBVElWRV9JTkZJTklUWSxyZS56PU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtsZXQgcGU9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGZlPWMqbCxadD1wPjA/YyoyK2wqMjowLFF0PWZlK1p0LE5lPW5ldyBBcnJheShRdCksZ2U9bmV3IEFycmF5KFF0KSxFZT1uZXcgQXJyYXkoUXQpLHVuPUY/bmV3IEFycmF5KFF0KTpbXSxHZT1BP25ldyBBcnJheShRdCk6W10sYmU9MCxsbj1sLHBuPTAsRW49YztkJiYoLS1iZSwrK2xuLC0tcG4sKytFbik7bGV0IG9lPTFlLTU7Zm9yKGxldCBaZT1iZTtaZTxsbjsrK1plKXtsZXQgY249WmU7Y248MCYmKGNuPTApLGNuPj1sJiYoY249bC0xKTtsZXQgS2U9Yi5ub3J0aC1hdCpjbjttP0tlPWYoS2UpOktlPXMtMipyKGkoLUtlKmcpKTtsZXQgaG49KEtlLUUpLyhDLUUpO2huPVAuY2xhbXAoaG4sMCwxKTtsZXQgdW89WmU9PT1iZSxxbj1aZT09PWxuLTE7cD4wJiYodW8/S2UrPW9lKlI6cW4mJihLZS09b2UqUikpO2xldCBLbj1lKEtlKSxsbz1uKEtlKSx6ZT1QdCpsbyxGZTtGJiYoRmU9KG5vLmdlb2RldGljTGF0aXR1ZGVUb01lcmNhdG9yQW5nbGUoS2UpLUN0KSprdCk7Zm9yKGxldCBMbj1wbjtMbjxFbjsrK0xuKXtsZXQgV249TG47V248MCYmKFduPTApLFduPj1jJiYoV249Yy0xKTtsZXQgem89Y24qKGMqaikrV24qaixybjtpZih6PT09MSlybj11W3pvXTtlbHNle3JuPTA7bGV0IHBvO2lmKHEpZm9yKHBvPTA7cG88ejsrK3BvKXJuPXJuKmsrdVt6bytwb107ZWxzZSBmb3IocG89ei0xO3BvPj0wOy0tcG8pcm49cm4qayt1W3pvK3BvXX1ybj1ybip4K0wsRXQ9TWF0aC5tYXgoRXQscm4pLHl0PU1hdGgubWluKHl0LHJuKTtsZXQgUm49Yi53ZXN0K250KlduO20/Um49ZihSbik6Um49Um4qZztsZXQgYXI9KFJuLU8pLyh3LU8pO2FyPVAuY2xhbXAoYXIsMCwxKTtsZXQgUW49Y24qYytXbjtpZihwPjApe2xldCBwbz1Mbj09PXBuLHZyPUxuPT09RW4tMSxNYz11b3x8cW58fHBvfHx2cjtpZigodW98fHFuKSYmKHBvfHx2cikpY29udGludWU7TWMmJihybi09cCxwbz8oUW49ZmUrKGwtY24tMSksUm4tPW9lKlcpOnFuP1FuPWZlK2wrKGMtV24tMSk6dnI/KFFuPWZlK2wrYytjbixSbis9b2UqVyk6dW8mJihRbj1mZStsK2MrbCtXbikpfWxldCBqbz1LbiplKFJuKSxOcj1LbipuKFJuKSxOcz1odCpqbyxJcz1vdCpOcixJcj0xL28oTnMqam8rSXMqTnIremUqbG8pLCRpPU5zKklyLHZzPUlzKklyLGJpPXplKklyLG9vPW5ldyBhO29vLng9JGkram8qcm4sb28ueT12cytOcipybixvby56PWJpK2xvKnJuLHN0Lm11bHRpcGx5QnlQb2ludChydCxvbyxmZyksYS5taW5pbXVtQnlDb21wb25lbnQoZmcsbGUsbGUpLGEubWF4aW11bUJ5Q29tcG9uZW50KGZnLHJlLHJlKSxwZT1NYXRoLm1pbihwZSxybiksTmVbUW5dPW9vLEVlW1FuXT1uZXcgSihhcixobiksZ2VbUW5dPXJuLEYmJih1bltRbl09RmUpLEEmJihHZVtRbl09Xy5nZW9kZXRpY1N1cmZhY2VOb3JtYWwob28pKX19bGV0IFl0PWd0LmZyb21Qb2ludHMoTmUpLFZlO2goVCkmJihWZT1Tby5mcm9tUmVjdGFuZ2xlKFQseXQsRXQsXykpO2xldCBkbjtOJiYoZG49bmV3IHhzKF8pLmNvbXB1dGVIb3Jpem9uQ3VsbGluZ1BvaW50UG9zc2libHlVbmRlckVsbGlwc29pZChNLE5lLHl0KSk7bGV0IHNuPW5ldyBMaShsZSxyZSxNKSxtbj1uZXcgUHMoTSxzbixwZSxFdCxkdCwhMSxGLEEsSSx2KSxmbz1uZXcgRmxvYXQzMkFycmF5KFF0Km1uLnN0cmlkZSksSG49MDtmb3IobGV0IFplPTA7WmU8UXQ7KytaZSlIbj1tbi5lbmNvZGUoZm8sSG4sTmVbWmVdLEVlW1plXSxnZVtaZV0sdm9pZCAwLHVuW1plXSxHZVtaZV0pO3JldHVybnt2ZXJ0aWNlczpmbyxtYXhpbXVtSGVpZ2h0OkV0LG1pbmltdW1IZWlnaHQ6eXQsZW5jb2Rpbmc6bW4sYm91bmRpbmdTcGhlcmUzRDpZdCxvcmllbnRlZEJvdW5kaW5nQm94OlZlLG9jY2x1ZGVlUG9pbnRJblNjYWxlZFNwYWNlOmRufX07JFI9X2l9KTt2YXIgUVI9WG4oKGRhdCwkZCk9PnsvKiBDb3B5cmlnaHQgMjAxNS0yMDE4IEVzcmkuIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAgQHByZXNlcnZlICovKGZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24oKXt2YXIgcj17fTtyLmRlZmF1bHROb0RhdGFWYWx1ZT0tMzQwMjc5OTkzODc5MDE0ODRlMjIsci5kZWNvZGU9ZnVuY3Rpb24obCxwKXtwPXB8fHt9O3ZhciBkPXAuZW5jb2RlZE1hc2tEYXRhfHxwLmVuY29kZWRNYXNrRGF0YT09PW51bGwsbT11KGwscC5pbnB1dE9mZnNldHx8MCxkKSxfPXAubm9EYXRhVmFsdWUhPT1udWxsP3Aubm9EYXRhVmFsdWU6ci5kZWZhdWx0Tm9EYXRhVmFsdWUsZz1pKG0scC5waXhlbFR5cGV8fEZsb2F0MzJBcnJheSxwLmVuY29kZWRNYXNrRGF0YSxfLHAucmV0dXJuTWFzayksYj17d2lkdGg6bS53aWR0aCxoZWlnaHQ6bS5oZWlnaHQscGl4ZWxEYXRhOmcucmVzdWx0UGl4ZWxzLG1pblZhbHVlOmcubWluVmFsdWUsbWF4VmFsdWU6bS5waXhlbHMubWF4VmFsdWUsbm9EYXRhVmFsdWU6X307cmV0dXJuIGcucmVzdWx0TWFzayYmKGIubWFza0RhdGE9Zy5yZXN1bHRNYXNrKSxwLnJldHVybkVuY29kZWRNYXNrJiZtLm1hc2smJihiLmVuY29kZWRNYXNrRGF0YT1tLm1hc2suYml0c2V0P20ubWFzay5iaXRzZXQ6bnVsbCkscC5yZXR1cm5GaWxlSW5mbyYmKGIuZmlsZUluZm89cyhtKSxwLmNvbXB1dGVVc2VkQml0RGVwdGhzJiYoYi5maWxlSW5mby5iaXREZXB0aHM9ZihtKSkpLGJ9O3ZhciBpPWZ1bmN0aW9uKGwscCxkLG0sXyl7dmFyIGc9MCxiPWwucGl4ZWxzLm51bUJsb2Nrc1gsVD1sLnBpeGVscy5udW1CbG9ja3NZLE89TWF0aC5mbG9vcihsLndpZHRoL2IpLEU9TWF0aC5mbG9vcihsLmhlaWdodC9UKSx3PTIqbC5tYXhaRXJyb3IsQz1OdW1iZXIuTUFYX1ZBTFVFLE07ZD1kfHwobC5tYXNrP2wubWFzay5iaXRzZXQ6bnVsbCk7dmFyIE4sRjtOPW5ldyBwKGwud2lkdGgqbC5oZWlnaHQpLF8mJmQmJihGPW5ldyBVaW50OEFycmF5KGwud2lkdGgqbC5oZWlnaHQpKTtmb3IodmFyIEk9bmV3IEZsb2F0MzJBcnJheShPKkUpLHYsQixBPTA7QTw9VDtBKyspe3ZhciBTPUEhPT1UP0U6bC5oZWlnaHQlVDtpZihTIT09MClmb3IodmFyIHg9MDt4PD1iO3grKyl7dmFyIEw9eCE9PWI/TzpsLndpZHRoJWI7aWYoTCE9PTApe3ZhciB6PUEqbC53aWR0aCpFK3gqTyxqPWwud2lkdGgtTCxrPWwucGl4ZWxzLmJsb2Nrc1tnXSxxLFcsUjtrLmVuY29kaW5nPDI/KGsuZW5jb2Rpbmc9PT0wP3E9ay5yYXdEYXRhOihjKGsuc3R1ZmZlZERhdGEsay5iaXRzUGVyUGl4ZWwsay5udW1WYWxpZFBpeGVscyxrLm9mZnNldCx3LEksbC5waXhlbHMubWF4VmFsdWUpLHE9SSksVz0wKTprLmVuY29kaW5nPT09Mj9SPTA6Uj1rLm9mZnNldDt2YXIgbnQ7aWYoZClmb3IoQj0wO0I8UztCKyspe2Zvcih6JjcmJihudD1kW3o+PjNdLG50PDw9eiY3KSx2PTA7djxMO3YrKyl6Jjd8fChudD1kW3o+PjNdKSxudCYxMjg/KEYmJihGW3pdPTEpLE09ay5lbmNvZGluZzwyP3FbVysrXTpSLEM9Qz5NP006QyxOW3orK109TSk6KEYmJihGW3pdPTApLE5beisrXT1tKSxudDw8PTE7eis9an1lbHNlIGlmKGsuZW5jb2Rpbmc8Milmb3IoQj0wO0I8UztCKyspe2Zvcih2PTA7djxMO3YrKylNPXFbVysrXSxDPUM+TT9NOkMsTlt6KytdPU07eis9an1lbHNlIGZvcihDPUM+Uj9SOkMsQj0wO0I8UztCKyspe2Zvcih2PTA7djxMO3YrKylOW3orK109Ujt6Kz1qfWlmKGsuZW5jb2Rpbmc9PT0xJiZXIT09ay5udW1WYWxpZFBpeGVscyl0aHJvdyJCbG9jayBhbmQgTWFzayBkbyBub3QgbWF0Y2giO2crK319fXJldHVybntyZXN1bHRQaXhlbHM6TixyZXN1bHRNYXNrOkYsbWluVmFsdWU6Q319LHM9ZnVuY3Rpb24obCl7cmV0dXJue2ZpbGVJZGVudGlmaWVyU3RyaW5nOmwuZmlsZUlkZW50aWZpZXJTdHJpbmcsZmlsZVZlcnNpb246bC5maWxlVmVyc2lvbixpbWFnZVR5cGU6bC5pbWFnZVR5cGUsaGVpZ2h0OmwuaGVpZ2h0LHdpZHRoOmwud2lkdGgsbWF4WkVycm9yOmwubWF4WkVycm9yLGVvZk9mZnNldDpsLmVvZk9mZnNldCxtYXNrOmwubWFzaz97bnVtQmxvY2tzWDpsLm1hc2subnVtQmxvY2tzWCxudW1CbG9ja3NZOmwubWFzay5udW1CbG9ja3NZLG51bUJ5dGVzOmwubWFzay5udW1CeXRlcyxtYXhWYWx1ZTpsLm1hc2subWF4VmFsdWV9Om51bGwscGl4ZWxzOntudW1CbG9ja3NYOmwucGl4ZWxzLm51bUJsb2Nrc1gsbnVtQmxvY2tzWTpsLnBpeGVscy5udW1CbG9ja3NZLG51bUJ5dGVzOmwucGl4ZWxzLm51bUJ5dGVzLG1heFZhbHVlOmwucGl4ZWxzLm1heFZhbHVlLG5vRGF0YVZhbHVlOmwubm9EYXRhVmFsdWV9fX0sZj1mdW5jdGlvbihsKXtmb3IodmFyIHA9bC5waXhlbHMubnVtQmxvY2tzWCpsLnBpeGVscy5udW1CbG9ja3NZLGQ9e30sbT0wO208cDttKyspe3ZhciBfPWwucGl4ZWxzLmJsb2Nrc1ttXTtfLmVuY29kaW5nPT09MD9kLmZsb2F0MzI9ITA6Xy5lbmNvZGluZz09PTE/ZFtfLmJpdHNQZXJQaXhlbF09ITA6ZFswXT0hMH1yZXR1cm4gT2JqZWN0LmtleXMoZCl9LHU9ZnVuY3Rpb24obCxwLGQpe3ZhciBtPXt9LF89bmV3IFVpbnQ4QXJyYXkobCxwLDEwKTtpZihtLmZpbGVJZGVudGlmaWVyU3RyaW5nPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxfKSxtLmZpbGVJZGVudGlmaWVyU3RyaW5nLnRyaW0oKSE9PSJDbnRaSW1hZ2UiKXRocm93IlVuZXhwZWN0ZWQgZmlsZSBpZGVudGlmaWVyIHN0cmluZzogIittLmZpbGVJZGVudGlmaWVyU3RyaW5nO3ArPTEwO3ZhciBnPW5ldyBEYXRhVmlldyhsLHAsMjQpO2lmKG0uZmlsZVZlcnNpb249Zy5nZXRJbnQzMigwLCEwKSxtLmltYWdlVHlwZT1nLmdldEludDMyKDQsITApLG0uaGVpZ2h0PWcuZ2V0VWludDMyKDgsITApLG0ud2lkdGg9Zy5nZXRVaW50MzIoMTIsITApLG0ubWF4WkVycm9yPWcuZ2V0RmxvYXQ2NCgxNiwhMCkscCs9MjQsIWQpaWYoZz1uZXcgRGF0YVZpZXcobCxwLDE2KSxtLm1hc2s9e30sbS5tYXNrLm51bUJsb2Nrc1k9Zy5nZXRVaW50MzIoMCwhMCksbS5tYXNrLm51bUJsb2Nrc1g9Zy5nZXRVaW50MzIoNCwhMCksbS5tYXNrLm51bUJ5dGVzPWcuZ2V0VWludDMyKDgsITApLG0ubWFzay5tYXhWYWx1ZT1nLmdldEZsb2F0MzIoMTIsITApLHArPTE2LG0ubWFzay5udW1CeXRlcz4wKXt2YXIgYj1uZXcgVWludDhBcnJheShNYXRoLmNlaWwobS53aWR0aCptLmhlaWdodC84KSk7Zz1uZXcgRGF0YVZpZXcobCxwLG0ubWFzay5udW1CeXRlcyk7dmFyIFQ9Zy5nZXRJbnQxNigwLCEwKSxPPTIsRT0wO2Rve2lmKFQ+MClmb3IoO1QtLTspYltFKytdPWcuZ2V0VWludDgoTysrKTtlbHNle3ZhciB3PWcuZ2V0VWludDgoTysrKTtmb3IoVD0tVDtULS07KWJbRSsrXT13fVQ9Zy5nZXRJbnQxNihPLCEwKSxPKz0yfXdoaWxlKE88bS5tYXNrLm51bUJ5dGVzKTtpZihUIT09LTMyNzY4fHxFPGIubGVuZ3RoKXRocm93IlVuZXhwZWN0ZWQgZW5kIG9mIG1hc2sgUkxFIGVuY29kaW5nIjttLm1hc2suYml0c2V0PWIscCs9bS5tYXNrLm51bUJ5dGVzfWVsc2UobS5tYXNrLm51bUJ5dGVzfG0ubWFzay5udW1CbG9ja3NZfG0ubWFzay5tYXhWYWx1ZSk9PT0wJiYobS5tYXNrLmJpdHNldD1uZXcgVWludDhBcnJheShNYXRoLmNlaWwobS53aWR0aCptLmhlaWdodC84KSkpO2c9bmV3IERhdGFWaWV3KGwscCwxNiksbS5waXhlbHM9e30sbS5waXhlbHMubnVtQmxvY2tzWT1nLmdldFVpbnQzMigwLCEwKSxtLnBpeGVscy5udW1CbG9ja3NYPWcuZ2V0VWludDMyKDQsITApLG0ucGl4ZWxzLm51bUJ5dGVzPWcuZ2V0VWludDMyKDgsITApLG0ucGl4ZWxzLm1heFZhbHVlPWcuZ2V0RmxvYXQzMigxMiwhMCkscCs9MTY7dmFyIEM9bS5waXhlbHMubnVtQmxvY2tzWCxNPW0ucGl4ZWxzLm51bUJsb2Nrc1ksTj1DKyhtLndpZHRoJUM+MD8xOjApLEY9TSsobS5oZWlnaHQlTT4wPzE6MCk7bS5waXhlbHMuYmxvY2tzPW5ldyBBcnJheShOKkYpO2Zvcih2YXIgST0wLHY9MDt2PEY7disrKWZvcih2YXIgQj0wO0I8TjtCKyspe3ZhciBBPTAsUz1sLmJ5dGVMZW5ndGgtcDtnPW5ldyBEYXRhVmlldyhsLHAsTWF0aC5taW4oMTAsUykpO3ZhciB4PXt9O20ucGl4ZWxzLmJsb2Nrc1tJKytdPXg7dmFyIEw9Zy5nZXRVaW50OCgwKTtpZihBKysseC5lbmNvZGluZz1MJjYzLHguZW5jb2Rpbmc+Myl0aHJvdyJJbnZhbGlkIGJsb2NrIGVuY29kaW5nICgiK3guZW5jb2RpbmcrIikiO2lmKHguZW5jb2Rpbmc9PT0yKXtwKys7Y29udGludWV9aWYoTCE9PTAmJkwhPT0yKXtpZihMPj49Nix4Lm9mZnNldFR5cGU9TCxMPT09Mil4Lm9mZnNldD1nLmdldEludDgoMSksQSsrO2Vsc2UgaWYoTD09PTEpeC5vZmZzZXQ9Zy5nZXRJbnQxNigxLCEwKSxBKz0yO2Vsc2UgaWYoTD09PTApeC5vZmZzZXQ9Zy5nZXRGbG9hdDMyKDEsITApLEErPTQ7ZWxzZSB0aHJvdyJJbnZhbGlkIGJsb2NrIG9mZnNldCB0eXBlIjtpZih4LmVuY29kaW5nPT09MSlpZihMPWcuZ2V0VWludDgoQSksQSsrLHguYml0c1BlclBpeGVsPUwmNjMsTD4+PTYseC5udW1WYWxpZFBpeGVsc1R5cGU9TCxMPT09Mil4Lm51bVZhbGlkUGl4ZWxzPWcuZ2V0VWludDgoQSksQSsrO2Vsc2UgaWYoTD09PTEpeC5udW1WYWxpZFBpeGVscz1nLmdldFVpbnQxNihBLCEwKSxBKz0yO2Vsc2UgaWYoTD09PTApeC5udW1WYWxpZFBpeGVscz1nLmdldFVpbnQzMihBLCEwKSxBKz00O2Vsc2UgdGhyb3ciSW52YWxpZCB2YWxpZCBwaXhlbCBjb3VudCB0eXBlIn1pZihwKz1BLHguZW5jb2RpbmchPT0zKXt2YXIgeixqO2lmKHguZW5jb2Rpbmc9PT0wKXt2YXIgaz0obS5waXhlbHMubnVtQnl0ZXMtMSkvNDtpZihrIT09TWF0aC5mbG9vcihrKSl0aHJvdyJ1bmNvbXByZXNzZWQgYmxvY2sgaGFzIGludmFsaWQgbGVuZ3RoIjt6PW5ldyBBcnJheUJ1ZmZlcihrKjQpLGo9bmV3IFVpbnQ4QXJyYXkoeiksai5zZXQobmV3IFVpbnQ4QXJyYXkobCxwLGsqNCkpO3ZhciBxPW5ldyBGbG9hdDMyQXJyYXkoeik7eC5yYXdEYXRhPXEscCs9ayo0fWVsc2UgaWYoeC5lbmNvZGluZz09PTEpe3ZhciBXPU1hdGguY2VpbCh4Lm51bVZhbGlkUGl4ZWxzKnguYml0c1BlclBpeGVsLzgpLFI9TWF0aC5jZWlsKFcvNCk7ej1uZXcgQXJyYXlCdWZmZXIoUio0KSxqPW5ldyBVaW50OEFycmF5KHopLGouc2V0KG5ldyBVaW50OEFycmF5KGwscCxXKSkseC5zdHVmZmVkRGF0YT1uZXcgVWludDMyQXJyYXkoeikscCs9V319fXJldHVybiBtLmVvZk9mZnNldD1wLG19LGM9ZnVuY3Rpb24obCxwLGQsbSxfLGcsYil7dmFyIFQ9KDE8PHApLTEsTz0wLEUsdz0wLEMsTSxOPU1hdGguY2VpbCgoYi1tKS9fKSxGPWwubGVuZ3RoKjQtTWF0aC5jZWlsKHAqZC84KTtmb3IobFtsLmxlbmd0aC0xXTw8PTgqRixFPTA7RTxkO0UrKyl7aWYodz09PTAmJihNPWxbTysrXSx3PTMyKSx3Pj1wKUM9TT4+PnctcCZULHctPXA7ZWxzZXt2YXIgST1wLXc7Qz0oTSZUKTw8SSZULE09bFtPKytdLHc9MzItSSxDKz1NPj4+d31nW0VdPUM8Tj9tK0MqXzpifXJldHVybiBnfTtyZXR1cm4gcn0oKSxlPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciByPXt1bnN0dWZmOmZ1bmN0aW9uKHUsYyxsLHAsZCxtLF8sZyl7dmFyIGI9KDE8PGwpLTEsVD0wLE8sRT0wLHcsQyxNLE4sRj11Lmxlbmd0aCo0LU1hdGguY2VpbChsKnAvOCk7aWYodVt1Lmxlbmd0aC0xXTw8PTgqRixkKWZvcihPPTA7TzxwO08rKylFPT09MCYmKEM9dVtUKytdLEU9MzIpLEU+PWw/KHc9Qz4+PkUtbCZiLEUtPWwpOihNPWwtRSx3PShDJmIpPDxNJmIsQz11W1QrK10sRT0zMi1NLHcrPUM+Pj5FKSxjW09dPWRbd107ZWxzZSBmb3IoTj1NYXRoLmNlaWwoKGctbSkvXyksTz0wO088cDtPKyspRT09PTAmJihDPXVbVCsrXSxFPTMyKSxFPj1sPyh3PUM+Pj5FLWwmYixFLT1sKTooTT1sLUUsdz0oQyZiKTw8TSZiLEM9dVtUKytdLEU9MzItTSx3Kz1DPj4+RSksY1tPXT13PE4/bSt3Kl86Z30sdW5zdHVmZkxVVDpmdW5jdGlvbih1LGMsbCxwLGQsbSl7dmFyIF89KDE8PGMpLTEsZz0wLGI9MCxUPTAsTz0wLEU9MCx3LEM9W10sTT11Lmxlbmd0aCo0LU1hdGguY2VpbChjKmwvOCk7dVt1Lmxlbmd0aC0xXTw8PTgqTTt2YXIgTj1NYXRoLmNlaWwoKG0tcCkvZCk7Zm9yKGI9MDtiPGw7YisrKU89PT0wJiYodz11W2crK10sTz0zMiksTz49Yz8oRT13Pj4+Ty1jJl8sTy09Yyk6KFQ9Yy1PLEU9KHcmXyk8PFQmXyx3PXVbZysrXSxPPTMyLVQsRSs9dz4+Pk8pLENbYl09RTxOP3ArRSpkOm07cmV0dXJuIEMudW5zaGlmdChwKSxDfSx1bnN0dWZmMjpmdW5jdGlvbih1LGMsbCxwLGQsbSxfLGcpe3ZhciBiPSgxPDxsKS0xLFQ9MCxPLEU9MCx3PTAsQyxNLE47aWYoZClmb3IoTz0wO088cDtPKyspRT09PTAmJihNPXVbVCsrXSxFPTMyLHc9MCksRT49bD8oQz1NPj4+dyZiLEUtPWwsdys9bCk6KE49bC1FLEM9TT4+PncmYixNPXVbVCsrXSxFPTMyLU4sQ3w9KE0mKDE8PE4pLTEpPDxsLU4sdz1OKSxjW09dPWRbQ107ZWxzZXt2YXIgRj1NYXRoLmNlaWwoKGctbSkvXyk7Zm9yKE89MDtPPHA7TysrKUU9PT0wJiYoTT11W1QrK10sRT0zMix3PTApLEU+PWw/KEM9TT4+PncmYixFLT1sLHcrPWwpOihOPWwtRSxDPU0+Pj53JmIsTT11W1QrK10sRT0zMi1OLEN8PShNJigxPDxOKS0xKTw8bC1OLHc9TiksY1tPXT1DPEY/bStDKl86Z31yZXR1cm4gY30sdW5zdHVmZkxVVDI6ZnVuY3Rpb24odSxjLGwscCxkLG0pe3ZhciBfPSgxPDxjKS0xLGc9MCxiPTAsVD0wLE89MCxFPTAsdz0wLEMsTT1bXSxOPU1hdGguY2VpbCgobS1wKS9kKTtmb3IoYj0wO2I8bDtiKyspTz09PTAmJihDPXVbZysrXSxPPTMyLHc9MCksTz49Yz8oRT1DPj4+dyZfLE8tPWMsdys9Yyk6KFQ9Yy1PLEU9Qz4+PncmXyxDPXVbZysrXSxPPTMyLVQsRXw9KEMmKDE8PFQpLTEpPDxjLVQsdz1UKSxNW2JdPUU8Tj9wK0UqZDptO3JldHVybiBNLnVuc2hpZnQocCksTX0sb3JpZ2luYWxVbnN0dWZmOmZ1bmN0aW9uKHUsYyxsLHApe3ZhciBkPSgxPDxsKS0xLG09MCxfLGc9MCxiLFQsTyxFPXUubGVuZ3RoKjQtTWF0aC5jZWlsKGwqcC84KTtmb3IodVt1Lmxlbmd0aC0xXTw8PTgqRSxfPTA7XzxwO18rKylnPT09MCYmKFQ9dVttKytdLGc9MzIpLGc+PWw/KGI9VD4+PmctbCZkLGctPWwpOihPPWwtZyxiPShUJmQpPDxPJmQsVD11W20rK10sZz0zMi1PLGIrPVQ+Pj5nKSxjW19dPWI7cmV0dXJuIGN9LG9yaWdpbmFsVW5zdHVmZjI6ZnVuY3Rpb24odSxjLGwscCl7dmFyIGQ9KDE8PGwpLTEsbT0wLF8sZz0wLGI9MCxULE8sRTtmb3IoXz0wO188cDtfKyspZz09PTAmJihPPXVbbSsrXSxnPTMyLGI9MCksZz49bD8oVD1PPj4+YiZkLGctPWwsYis9bCk6KEU9bC1nLFQ9Tz4+PmImZCxPPXVbbSsrXSxnPTMyLUUsVHw9KE8mKDE8PEUpLTEpPDxsLUUsYj1FKSxjW19dPVQ7cmV0dXJuIGN9fSxpPXtIVUZGTUFOX0xVVF9CSVRTX01BWDoxMixjb21wdXRlQ2hlY2tzdW1GbGV0Y2hlcjMyOmZ1bmN0aW9uKHUpe2Zvcih2YXIgYz02NTUzNSxsPTY1NTM1LHA9dS5sZW5ndGgsZD1NYXRoLmZsb29yKHAvMiksbT0wO2Q7KXt2YXIgXz1kPj0zNTk/MzU5OmQ7ZC09XztkbyBjKz11W20rK108PDgsbCs9Yys9dVttKytdO3doaWxlKC0tXyk7Yz0oYyY2NTUzNSkrKGM+Pj4xNiksbD0obCY2NTUzNSkrKGw+Pj4xNil9cmV0dXJuIHAmMSYmKGwrPWMrPXVbbV08PDgpLGM9KGMmNjU1MzUpKyhjPj4+MTYpLGw9KGwmNjU1MzUpKyhsPj4+MTYpLChsPDwxNnxjKT4+PjB9LHJlYWRIZWFkZXJJbmZvOmZ1bmN0aW9uKHUsYyl7dmFyIGw9Yy5wdHIscD1uZXcgVWludDhBcnJheSh1LGwsNiksZD17fTtpZihkLmZpbGVJZGVudGlmaWVyU3RyaW5nPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxwKSxkLmZpbGVJZGVudGlmaWVyU3RyaW5nLmxhc3RJbmRleE9mKCJMZXJjMiIsMCkhPT0wKXRocm93IlVuZXhwZWN0ZWQgZmlsZSBpZGVudGlmaWVyIHN0cmluZyAoZXhwZWN0IExlcmMyICk6ICIrZC5maWxlSWRlbnRpZmllclN0cmluZztsKz02O3ZhciBtPW5ldyBEYXRhVmlldyh1LGwsOCksXz1tLmdldEludDMyKDAsITApO2QuZmlsZVZlcnNpb249XyxsKz00LF8+PTMmJihkLmNoZWNrc3VtPW0uZ2V0VWludDMyKDQsITApLGwrPTQpLG09bmV3IERhdGFWaWV3KHUsbCwxMiksZC5oZWlnaHQ9bS5nZXRVaW50MzIoMCwhMCksZC53aWR0aD1tLmdldFVpbnQzMig0LCEwKSxsKz04LF8+PTQ/KGQubnVtRGltcz1tLmdldFVpbnQzMig4LCEwKSxsKz00KTpkLm51bURpbXM9MSxtPW5ldyBEYXRhVmlldyh1LGwsNDApLGQubnVtVmFsaWRQaXhlbD1tLmdldFVpbnQzMigwLCEwKSxkLm1pY3JvQmxvY2tTaXplPW0uZ2V0SW50MzIoNCwhMCksZC5ibG9iU2l6ZT1tLmdldEludDMyKDgsITApLGQuaW1hZ2VUeXBlPW0uZ2V0SW50MzIoMTIsITApLGQubWF4WkVycm9yPW0uZ2V0RmxvYXQ2NCgxNiwhMCksZC56TWluPW0uZ2V0RmxvYXQ2NCgyNCwhMCksZC56TWF4PW0uZ2V0RmxvYXQ2NCgzMiwhMCksbCs9NDAsYy5oZWFkZXJJbmZvPWQsYy5wdHI9bDt2YXIgZyxiO2lmKF8+PTMmJihiPV8+PTQ/NTI6NDgsZz10aGlzLmNvbXB1dGVDaGVja3N1bUZsZXRjaGVyMzIobmV3IFVpbnQ4QXJyYXkodSxsLWIsZC5ibG9iU2l6ZS0xNCkpLGchPT1kLmNoZWNrc3VtKSl0aHJvdyJDaGVja3N1bSBmYWlsZWQuIjtyZXR1cm4hMH0sY2hlY2tNaW5NYXhSYW5nZXM6ZnVuY3Rpb24odSxjKXt2YXIgbD1jLmhlYWRlckluZm8scD10aGlzLmdldERhdGFUeXBlQXJyYXkobC5pbWFnZVR5cGUpLGQ9bC5udW1EaW1zKnRoaXMuZ2V0RGF0YVR5cGVTaXplKGwuaW1hZ2VUeXBlKSxtPXRoaXMucmVhZFN1YkFycmF5KHUsYy5wdHIscCxkKSxfPXRoaXMucmVhZFN1YkFycmF5KHUsYy5wdHIrZCxwLGQpO2MucHRyKz0yKmQ7dmFyIGcsYj0hMDtmb3IoZz0wO2c8bC5udW1EaW1zO2crKylpZihtW2ddIT09X1tnXSl7Yj0hMTticmVha31yZXR1cm4gbC5taW5WYWx1ZXM9bSxsLm1heFZhbHVlcz1fLGJ9LHJlYWRTdWJBcnJheTpmdW5jdGlvbih1LGMsbCxwKXt2YXIgZDtpZihsPT09VWludDhBcnJheSlkPW5ldyBVaW50OEFycmF5KHUsYyxwKTtlbHNle3ZhciBtPW5ldyBBcnJheUJ1ZmZlcihwKSxfPW5ldyBVaW50OEFycmF5KG0pO18uc2V0KG5ldyBVaW50OEFycmF5KHUsYyxwKSksZD1uZXcgbChtKX1yZXR1cm4gZH0scmVhZE1hc2s6ZnVuY3Rpb24odSxjKXt2YXIgbD1jLnB0cixwPWMuaGVhZGVySW5mbyxkPXAud2lkdGgqcC5oZWlnaHQsbT1wLm51bVZhbGlkUGl4ZWwsXz1uZXcgRGF0YVZpZXcodSxsLDQpLGc9e307aWYoZy5udW1CeXRlcz1fLmdldFVpbnQzMigwLCEwKSxsKz00LChtPT09MHx8ZD09PW0pJiZnLm51bUJ5dGVzIT09MCl0aHJvdyJpbnZhbGlkIG1hc2siO3ZhciBiLFQ7aWYobT09PTApYj1uZXcgVWludDhBcnJheShNYXRoLmNlaWwoZC84KSksZy5iaXRzZXQ9YixUPW5ldyBVaW50OEFycmF5KGQpLGMucGl4ZWxzLnJlc3VsdE1hc2s9VCxsKz1nLm51bUJ5dGVzO2Vsc2UgaWYoZy5udW1CeXRlcz4wKXtiPW5ldyBVaW50OEFycmF5KE1hdGguY2VpbChkLzgpKSxfPW5ldyBEYXRhVmlldyh1LGwsZy5udW1CeXRlcyk7dmFyIE89Xy5nZXRJbnQxNigwLCEwKSxFPTIsdz0wLEM9MDtkb3tpZihPPjApZm9yKDtPLS07KWJbdysrXT1fLmdldFVpbnQ4KEUrKyk7ZWxzZSBmb3IoQz1fLmdldFVpbnQ4KEUrKyksTz0tTztPLS07KWJbdysrXT1DO089Xy5nZXRJbnQxNihFLCEwKSxFKz0yfXdoaWxlKEU8Zy5udW1CeXRlcyk7aWYoTyE9PS0zMjc2OHx8dzxiLmxlbmd0aCl0aHJvdyJVbmV4cGVjdGVkIGVuZCBvZiBtYXNrIFJMRSBlbmNvZGluZyI7VD1uZXcgVWludDhBcnJheShkKTt2YXIgTT0wLE49MDtmb3IoTj0wO048ZDtOKyspTiY3PyhNPWJbTj4+M10sTTw8PU4mNyk6TT1iW04+PjNdLE0mMTI4JiYoVFtOXT0xKTtjLnBpeGVscy5yZXN1bHRNYXNrPVQsZy5iaXRzZXQ9YixsKz1nLm51bUJ5dGVzfXJldHVybiBjLnB0cj1sLGMubWFzaz1nLCEwfSxyZWFkRGF0YU9uZVN3ZWVwOmZ1bmN0aW9uKHUsYyxsKXt2YXIgcD1jLnB0cixkPWMuaGVhZGVySW5mbyxtPWQubnVtRGltcyxfPWQud2lkdGgqZC5oZWlnaHQsZz1kLmltYWdlVHlwZSxiPWQubnVtVmFsaWRQaXhlbCppLmdldERhdGFUeXBlU2l6ZShnKSptLFQsTz1jLnBpeGVscy5yZXN1bHRNYXNrO2lmKGw9PT1VaW50OEFycmF5KVQ9bmV3IFVpbnQ4QXJyYXkodSxwLGIpO2Vsc2V7dmFyIEU9bmV3IEFycmF5QnVmZmVyKGIpLHc9bmV3IFVpbnQ4QXJyYXkoRSk7dy5zZXQobmV3IFVpbnQ4QXJyYXkodSxwLGIpKSxUPW5ldyBsKEUpfWlmKFQubGVuZ3RoPT09XyptKWMucGl4ZWxzLnJlc3VsdFBpeGVscz1UO2Vsc2V7Yy5waXhlbHMucmVzdWx0UGl4ZWxzPW5ldyBsKF8qbSk7dmFyIEM9MCxNPTAsTj0wLEY9MDtpZihtPjEpZm9yKE49MDtOPG07TisrKWZvcihGPU4qXyxNPTA7TTxfO00rKylPW01dJiYoYy5waXhlbHMucmVzdWx0UGl4ZWxzW0YrTV09VFtDKytdKTtlbHNlIGZvcihNPTA7TTxfO00rKylPW01dJiYoYy5waXhlbHMucmVzdWx0UGl4ZWxzW01dPVRbQysrXSl9cmV0dXJuIHArPWIsYy5wdHI9cCwhMH0scmVhZEh1ZmZtYW5UcmVlOmZ1bmN0aW9uKHUsYyl7dmFyIGw9dGhpcy5IVUZGTUFOX0xVVF9CSVRTX01BWCxwPW5ldyBEYXRhVmlldyh1LGMucHRyLDE2KTtjLnB0cis9MTY7dmFyIGQ9cC5nZXRJbnQzMigwLCEwKTtpZihkPDIpdGhyb3cidW5zdXBwb3J0ZWQgSHVmZm1hbiB2ZXJzaW9uIjt2YXIgbT1wLmdldEludDMyKDQsITApLF89cC5nZXRJbnQzMig4LCEwKSxnPXAuZ2V0SW50MzIoMTIsITApO2lmKF8+PWcpcmV0dXJuITE7dmFyIGI9bmV3IFVpbnQzMkFycmF5KGctXyk7aS5kZWNvZGVCaXRzKHUsYyxiKTt2YXIgVD1bXSxPLEUsdyxDO2ZvcihPPV87TzxnO08rKylFPU8tKE88bT8wOm0pLFRbRV09e2ZpcnN0OmJbTy1fXSxzZWNvbmQ6bnVsbH07dmFyIE09dS5ieXRlTGVuZ3RoLWMucHRyLE49TWF0aC5jZWlsKE0vNCksRj1uZXcgQXJyYXlCdWZmZXIoTio0KSxJPW5ldyBVaW50OEFycmF5KEYpO0kuc2V0KG5ldyBVaW50OEFycmF5KHUsYy5wdHIsTSkpO3ZhciB2PW5ldyBVaW50MzJBcnJheShGKSxCPTAsQSxTPTA7Zm9yKEE9dlswXSxPPV87TzxnO08rKylFPU8tKE88bT8wOm0pLEM9VFtFXS5maXJzdCxDPjAmJihUW0VdLnNlY29uZD1BPDxCPj4+MzItQywzMi1CPj1DPyhCKz1DLEI9PT0zMiYmKEI9MCxTKyssQT12W1NdKSk6KEIrPUMtMzIsUysrLEE9dltTXSxUW0VdLnNlY29uZHw9QT4+PjMyLUIpKTt2YXIgeD0wLEw9MCx6PW5ldyBzO2ZvcihPPTA7TzxULmxlbmd0aDtPKyspVFtPXSE9PXZvaWQgMCYmKHg9TWF0aC5tYXgoeCxUW09dLmZpcnN0KSk7eD49bD9MPWw6TD14LHg+PTMwJiZjb25zb2xlLmxvZygiV0FSbmluZywgbGFyZ2UgTlVNIExVVCBCSVRTIElTICIreCk7dmFyIGo9W10sayxxLFcsUixudCxhdDtmb3IoTz1fO088ZztPKyspaWYoRT1PLShPPG0/MDptKSxDPVRbRV0uZmlyc3QsQz4wKWlmKGs9W0MsRV0sQzw9TClmb3IocT1UW0VdLnNlY29uZDw8TC1DLFc9MTw8TC1DLHc9MDt3PFc7dysrKWpbcXx3XT1rO2Vsc2UgZm9yKHE9VFtFXS5zZWNvbmQsYXQ9eixSPUMtMTtSPj0wO1ItLSludD1xPj4+UiYxLG50PyhhdC5yaWdodHx8KGF0LnJpZ2h0PW5ldyBzKSxhdD1hdC5yaWdodCk6KGF0LmxlZnR8fChhdC5sZWZ0PW5ldyBzKSxhdD1hdC5sZWZ0KSxSPT09MCYmIWF0LnZhbCYmKGF0LnZhbD1rWzFdKTtyZXR1cm57ZGVjb2RlTHV0OmosbnVtQml0c0xVVFFpY2s6TCxudW1CaXRzTFVUOngsdHJlZTp6LHN0dWZmZWREYXRhOnYsc3JjUHRyOlMsYml0UG9zOkJ9fSxyZWFkSHVmZm1hbjpmdW5jdGlvbih1LGMsbCl7dmFyIHA9Yy5oZWFkZXJJbmZvLGQ9cC5udW1EaW1zLG09Yy5oZWFkZXJJbmZvLmhlaWdodCxfPWMuaGVhZGVySW5mby53aWR0aCxnPV8qbSxiPXRoaXMucmVhZEh1ZmZtYW5UcmVlKHUsYyksVD1iLmRlY29kZUx1dCxPPWIudHJlZSxFPWIuc3R1ZmZlZERhdGEsdz1iLnNyY1B0cixDPWIuYml0UG9zLE09Yi5udW1CaXRzTFVUUWljayxOPWIubnVtQml0c0xVVCxGPWMuaGVhZGVySW5mby5pbWFnZVR5cGU9PT0wPzEyODowLEksdixCLEE9Yy5waXhlbHMucmVzdWx0TWFzayxTLHgsTCx6LGosayxxLFc9MDtDPjAmJih3KyssQz0wKTt2YXIgUj1FW3ddLG50PWMuZW5jb2RlTW9kZT09PTEsYXQ9bmV3IGwoZypkKSxsdD1hdCxodDtmb3IoaHQ9MDtodDxwLm51bURpbXM7aHQrKyl7aWYoZD4xJiYobHQ9bmV3IGwoYXQuYnVmZmVyLGcqaHQsZyksVz0wKSxjLmhlYWRlckluZm8ubnVtVmFsaWRQaXhlbD09PV8qbSlmb3Ioaz0wLHo9MDt6PG07eisrKWZvcihqPTA7ajxfO2orKyxrKyspe2lmKHY9MCxTPVI8PEM+Pj4zMi1NLHg9UywzMi1DPE0mJihTfD1FW3crMV0+Pj42NC1DLU0seD1TKSxUW3hdKXY9VFt4XVsxXSxDKz1UW3hdWzBdO2Vsc2UgZm9yKFM9Ujw8Qz4+PjMyLU4seD1TLDMyLUM8TiYmKFN8PUVbdysxXT4+PjY0LUMtTix4PVMpLEk9TyxxPTA7cTxOO3ErKylpZihMPVM+Pj5OLXEtMSYxLEk9TD9JLnJpZ2h0OkkubGVmdCwhKEkubGVmdHx8SS5yaWdodCkpe3Y9SS52YWwsQz1DK3ErMTticmVha31DPj0zMiYmKEMtPTMyLHcrKyxSPUVbd10pLEI9di1GLG50PyhqPjA/Qis9Vzp6PjA/Qis9bHRbay1fXTpCKz1XLEImPTI1NSxsdFtrXT1CLFc9Qik6bHRba109Qn1lbHNlIGZvcihrPTAsej0wO3o8bTt6KyspZm9yKGo9MDtqPF87aisrLGsrKylpZihBW2tdKXtpZih2PTAsUz1SPDxDPj4+MzItTSx4PVMsMzItQzxNJiYoU3w9RVt3KzFdPj4+NjQtQy1NLHg9UyksVFt4XSl2PVRbeF1bMV0sQys9VFt4XVswXTtlbHNlIGZvcihTPVI8PEM+Pj4zMi1OLHg9UywzMi1DPE4mJihTfD1FW3crMV0+Pj42NC1DLU4seD1TKSxJPU8scT0wO3E8TjtxKyspaWYoTD1TPj4+Ti1xLTEmMSxJPUw/SS5yaWdodDpJLmxlZnQsIShJLmxlZnR8fEkucmlnaHQpKXt2PUkudmFsLEM9QytxKzE7YnJlYWt9Qz49MzImJihDLT0zMix3KyssUj1FW3ddKSxCPXYtRixudD8oaj4wJiZBW2stMV0/Qis9Vzp6PjAmJkFbay1fXT9CKz1sdFtrLV9dOkIrPVcsQiY9MjU1LGx0W2tdPUIsVz1CKTpsdFtrXT1CfWMucHRyPWMucHRyKyh3KzEpKjQrKEM+MD80OjApfWMucGl4ZWxzLnJlc3VsdFBpeGVscz1hdH0sZGVjb2RlQml0czpmdW5jdGlvbih1LGMsbCxwLGQpe3t2YXIgbT1jLmhlYWRlckluZm8sXz1tLmZpbGVWZXJzaW9uLGc9MCxiPW5ldyBEYXRhVmlldyh1LGMucHRyLDUpLFQ9Yi5nZXRVaW50OCgwKTtnKys7dmFyIE89VD4+NixFPU89PT0wPzQ6My1PLHc9KFQmMzIpPjAsQz1UJjMxLE09MDtpZihFPT09MSlNPWIuZ2V0VWludDgoZyksZysrO2Vsc2UgaWYoRT09PTIpTT1iLmdldFVpbnQxNihnLCEwKSxnKz0yO2Vsc2UgaWYoRT09PTQpTT1iLmdldFVpbnQzMihnLCEwKSxnKz00O2Vsc2UgdGhyb3ciSW52YWxpZCB2YWxpZCBwaXhlbCBjb3VudCB0eXBlIjt2YXIgTj0yKm0ubWF4WkVycm9yLEYsSSx2LEIsQSxTLHgsTCx6LGosaz1tLm51bURpbXM+MT9tLm1heFZhbHVlc1tkXTptLnpNYXg7aWYodyl7Zm9yKGMuY291bnRlci5sdXQrKyxMPWIuZ2V0VWludDgoZyksej1DLGcrKyxCPU1hdGguY2VpbCgoTC0xKSpDLzgpLEE9TWF0aC5jZWlsKEIvNCksST1uZXcgQXJyYXlCdWZmZXIoQSo0KSx2PW5ldyBVaW50OEFycmF5KEkpLGMucHRyKz1nLHYuc2V0KG5ldyBVaW50OEFycmF5KHUsYy5wdHIsQikpLHg9bmV3IFVpbnQzMkFycmF5KEkpLGMucHRyKz1CLGo9MDtMLTE+Pj5qOylqKys7Qj1NYXRoLmNlaWwoTSpqLzgpLEE9TWF0aC5jZWlsKEIvNCksST1uZXcgQXJyYXlCdWZmZXIoQSo0KSx2PW5ldyBVaW50OEFycmF5KEkpLHYuc2V0KG5ldyBVaW50OEFycmF5KHUsYy5wdHIsQikpLEY9bmV3IFVpbnQzMkFycmF5KEkpLGMucHRyKz1CLF8+PTM/Uz1yLnVuc3R1ZmZMVVQyKHgsQyxMLTEscCxOLGspOlM9ci51bnN0dWZmTFVUKHgsQyxMLTEscCxOLGspLF8+PTM/ci51bnN0dWZmMihGLGwsaixNLFMpOnIudW5zdHVmZihGLGwsaixNLFMpfWVsc2UgYy5jb3VudGVyLmJpdHN0dWZmZXIrKyxqPUMsYy5wdHIrPWcsaj4wJiYoQj1NYXRoLmNlaWwoTSpqLzgpLEE9TWF0aC5jZWlsKEIvNCksST1uZXcgQXJyYXlCdWZmZXIoQSo0KSx2PW5ldyBVaW50OEFycmF5KEkpLHYuc2V0KG5ldyBVaW50OEFycmF5KHUsYy5wdHIsQikpLEY9bmV3IFVpbnQzMkFycmF5KEkpLGMucHRyKz1CLF8+PTM/cD09bnVsbD9yLm9yaWdpbmFsVW5zdHVmZjIoRixsLGosTSk6ci51bnN0dWZmMihGLGwsaixNLCExLHAsTixrKTpwPT1udWxsP3Iub3JpZ2luYWxVbnN0dWZmKEYsbCxqLE0pOnIudW5zdHVmZihGLGwsaixNLCExLHAsTixrKSl9fSxyZWFkVGlsZXM6ZnVuY3Rpb24odSxjLGwpe3ZhciBwPWMuaGVhZGVySW5mbyxkPXAud2lkdGgsbT1wLmhlaWdodCxfPXAubWljcm9CbG9ja1NpemUsZz1wLmltYWdlVHlwZSxiPWkuZ2V0RGF0YVR5cGVTaXplKGcpLFQ9TWF0aC5jZWlsKGQvXyksTz1NYXRoLmNlaWwobS9fKTtjLnBpeGVscy5udW1CbG9ja3NZPU8sYy5waXhlbHMubnVtQmxvY2tzWD1ULGMucGl4ZWxzLnB0cj0wO3ZhciBFPTAsdz0wLEM9MCxNPTAsTj0wLEY9MCxJPTAsdj0wLEI9MCxBPTAsUz0wLHg9MCxMPTAsej0wLGo9MCxrPTAscSxXLFIsbnQsYXQsbHQsaHQ9bmV3IGwoXypfKSxvdD1tJV98fF8sUHQ9ZCVffHxfLHl0LEV0LGR0PXAubnVtRGltcyxydCxDdD1jLnBpeGVscy5yZXN1bHRNYXNrLGt0PWMucGl4ZWxzLnJlc3VsdFBpeGVscztmb3IoQz0wO0M8TztDKyspZm9yKE49QyE9PU8tMT9fOm90LE09MDtNPFQ7TSsrKWZvcihGPU0hPT1ULTE/XzpQdCxTPUMqZCpfK00qXyx4PWQtRixydD0wO3J0PGR0O3J0Kyspe2lmKGR0PjEmJihrdD1uZXcgbChjLnBpeGVscy5yZXN1bHRQaXhlbHMuYnVmZmVyLGQqbSpydCpiLGQqbSkpLEk9dS5ieXRlTGVuZ3RoLWMucHRyLHE9bmV3IERhdGFWaWV3KHUsYy5wdHIsTWF0aC5taW4oMTAsSSkpLFc9e30saz0wLHY9cS5nZXRVaW50OCgwKSxrKyssQj12Pj42JjI1NSxBPXY+PjImMTUsQSE9PShNKl8+PjMmMTUpKXRocm93ImludGVncml0eSBpc3N1ZSI7aWYobHQ9diYzLGx0PjMpdGhyb3cgYy5wdHIrPWssIkludmFsaWQgYmxvY2sgZW5jb2RpbmcgKCIrbHQrIikiO2lmKGx0PT09Mil7Yy5jb3VudGVyLmNvbnN0YW50KyssYy5wdHIrPWs7Y29udGludWV9ZWxzZSBpZihsdD09PTApe2lmKGMuY291bnRlci51bmNvbXByZXNzZWQrKyxjLnB0cis9ayxMPU4qRipiLHo9dS5ieXRlTGVuZ3RoLWMucHRyLEw9TDx6P0w6eixSPW5ldyBBcnJheUJ1ZmZlcihMJWI9PT0wP0w6TCtiLUwlYiksbnQ9bmV3IFVpbnQ4QXJyYXkoUiksbnQuc2V0KG5ldyBVaW50OEFycmF5KHUsYy5wdHIsTCkpLGF0PW5ldyBsKFIpLGo9MCxDdClmb3IoRT0wO0U8TjtFKyspe2Zvcih3PTA7dzxGO3crKylDdFtTXSYmKGt0W1NdPWF0W2orK10pLFMrKztTKz14fWVsc2UgZm9yKEU9MDtFPE47RSsrKXtmb3Iodz0wO3c8Rjt3Kyspa3RbUysrXT1hdFtqKytdO1MrPXh9Yy5wdHIrPWoqYn1lbHNlIGlmKHl0PWkuZ2V0RGF0YVR5cGVVc2VkKGcsQiksRXQ9aS5nZXRPbmVQaXhlbChXLGsseXQscSksays9aS5nZXREYXRhVHlwZVNpemUoeXQpLGx0PT09MylpZihjLnB0cis9ayxjLmNvdW50ZXIuY29uc3RhbnRvZmZzZXQrKyxDdClmb3IoRT0wO0U8TjtFKyspe2Zvcih3PTA7dzxGO3crKylDdFtTXSYmKGt0W1NdPUV0KSxTKys7Uys9eH1lbHNlIGZvcihFPTA7RTxOO0UrKyl7Zm9yKHc9MDt3PEY7dysrKWt0W1MrK109RXQ7Uys9eH1lbHNlIGlmKGMucHRyKz1rLGkuZGVjb2RlQml0cyh1LGMsaHQsRXQscnQpLGs9MCxDdClmb3IoRT0wO0U8TjtFKyspe2Zvcih3PTA7dzxGO3crKylDdFtTXSYmKGt0W1NdPWh0W2srK10pLFMrKztTKz14fWVsc2UgZm9yKEU9MDtFPE47RSsrKXtmb3Iodz0wO3c8Rjt3Kyspa3RbUysrXT1odFtrKytdO1MrPXh9fX0sZm9ybWF0RmlsZUluZm86ZnVuY3Rpb24odSl7cmV0dXJue2ZpbGVJZGVudGlmaWVyU3RyaW5nOnUuaGVhZGVySW5mby5maWxlSWRlbnRpZmllclN0cmluZyxmaWxlVmVyc2lvbjp1LmhlYWRlckluZm8uZmlsZVZlcnNpb24saW1hZ2VUeXBlOnUuaGVhZGVySW5mby5pbWFnZVR5cGUsaGVpZ2h0OnUuaGVhZGVySW5mby5oZWlnaHQsd2lkdGg6dS5oZWFkZXJJbmZvLndpZHRoLG51bVZhbGlkUGl4ZWw6dS5oZWFkZXJJbmZvLm51bVZhbGlkUGl4ZWwsbWljcm9CbG9ja1NpemU6dS5oZWFkZXJJbmZvLm1pY3JvQmxvY2tTaXplLGJsb2JTaXplOnUuaGVhZGVySW5mby5ibG9iU2l6ZSxtYXhaRXJyb3I6dS5oZWFkZXJJbmZvLm1heFpFcnJvcixwaXhlbFR5cGU6aS5nZXRQaXhlbFR5cGUodS5oZWFkZXJJbmZvLmltYWdlVHlwZSksZW9mT2Zmc2V0OnUuZW9mT2Zmc2V0LG1hc2s6dS5tYXNrP3tudW1CeXRlczp1Lm1hc2subnVtQnl0ZXN9Om51bGwscGl4ZWxzOntudW1CbG9ja3NYOnUucGl4ZWxzLm51bUJsb2Nrc1gsbnVtQmxvY2tzWTp1LnBpeGVscy5udW1CbG9ja3NZLG1heFZhbHVlOnUuaGVhZGVySW5mby56TWF4LG1pblZhbHVlOnUuaGVhZGVySW5mby56TWluLG5vRGF0YVZhbHVlOnUubm9EYXRhVmFsdWV9fX0sY29uc3RydWN0Q29uc3RhbnRTdXJmYWNlOmZ1bmN0aW9uKHUpe3ZhciBjPXUuaGVhZGVySW5mby56TWF4LGw9dS5oZWFkZXJJbmZvLm51bURpbXMscD11LmhlYWRlckluZm8uaGVpZ2h0KnUuaGVhZGVySW5mby53aWR0aCxkPXAqbCxtPTAsXz0wLGc9MCxiPXUucGl4ZWxzLnJlc3VsdE1hc2s7aWYoYilpZihsPjEpZm9yKG09MDttPGw7bSsrKWZvcihnPW0qcCxfPTA7XzxwO18rKyliW19dJiYodS5waXhlbHMucmVzdWx0UGl4ZWxzW2crX109Yyk7ZWxzZSBmb3IoXz0wO188cDtfKyspYltfXSYmKHUucGl4ZWxzLnJlc3VsdFBpeGVsc1tfXT1jKTtlbHNlIGlmKHUucGl4ZWxzLnJlc3VsdFBpeGVscy5maWxsKXUucGl4ZWxzLnJlc3VsdFBpeGVscy5maWxsKGMpO2Vsc2UgZm9yKF89MDtfPGQ7XysrKXUucGl4ZWxzLnJlc3VsdFBpeGVsc1tfXT1jfSxnZXREYXRhVHlwZUFycmF5OmZ1bmN0aW9uKHUpe3ZhciBjO3N3aXRjaCh1KXtjYXNlIDA6Yz1JbnQ4QXJyYXk7YnJlYWs7Y2FzZSAxOmM9VWludDhBcnJheTticmVhaztjYXNlIDI6Yz1JbnQxNkFycmF5O2JyZWFrO2Nhc2UgMzpjPVVpbnQxNkFycmF5O2JyZWFrO2Nhc2UgNDpjPUludDMyQXJyYXk7YnJlYWs7Y2FzZSA1OmM9VWludDMyQXJyYXk7YnJlYWs7Y2FzZSA2OmM9RmxvYXQzMkFycmF5O2JyZWFrO2Nhc2UgNzpjPUZsb2F0NjRBcnJheTticmVhaztkZWZhdWx0OmM9RmxvYXQzMkFycmF5fXJldHVybiBjfSxnZXRQaXhlbFR5cGU6ZnVuY3Rpb24odSl7dmFyIGM7c3dpdGNoKHUpe2Nhc2UgMDpjPSJTOCI7YnJlYWs7Y2FzZSAxOmM9IlU4IjticmVhaztjYXNlIDI6Yz0iUzE2IjticmVhaztjYXNlIDM6Yz0iVTE2IjticmVhaztjYXNlIDQ6Yz0iUzMyIjticmVhaztjYXNlIDU6Yz0iVTMyIjticmVhaztjYXNlIDY6Yz0iRjMyIjticmVhaztjYXNlIDc6Yz0iRjY0IjticmVhaztkZWZhdWx0OmM9IkYzMiJ9cmV0dXJuIGN9LGlzVmFsaWRQaXhlbFZhbHVlOmZ1bmN0aW9uKHUsYyl7aWYoYz09bnVsbClyZXR1cm4hMTt2YXIgbDtzd2l0Y2godSl7Y2FzZSAwOmw9Yz49LTEyOCYmYzw9MTI3O2JyZWFrO2Nhc2UgMTpsPWM+PTAmJmM8PTI1NTticmVhaztjYXNlIDI6bD1jPj0tMzI3NjgmJmM8PTMyNzY3O2JyZWFrO2Nhc2UgMzpsPWM+PTAmJmM8PTY1NTM2O2JyZWFrO2Nhc2UgNDpsPWM+PS0yMTQ3NDgzNjQ4JiZjPD0yMTQ3NDgzNjQ3O2JyZWFrO2Nhc2UgNTpsPWM+PTAmJmM8PTQyOTQ5NjcyOTY7YnJlYWs7Y2FzZSA2Omw9Yz49LTM0MDI3OTk5Mzg3OTAxNDg0ZTIyJiZjPD0zNDAyNzk5OTM4NzkwMTQ4NGUyMjticmVhaztjYXNlIDc6bD1jPj01ZS0zMjQmJmM8PTE3OTc2OTMxMzQ4NjIzMTU3ZTI5MjticmVhaztkZWZhdWx0Omw9ITF9cmV0dXJuIGx9LGdldERhdGFUeXBlU2l6ZTpmdW5jdGlvbih1KXt2YXIgYz0wO3N3aXRjaCh1KXtjYXNlIDA6Y2FzZSAxOmM9MTticmVhaztjYXNlIDI6Y2FzZSAzOmM9MjticmVhaztjYXNlIDQ6Y2FzZSA1OmNhc2UgNjpjPTQ7YnJlYWs7Y2FzZSA3OmM9ODticmVhaztkZWZhdWx0OmM9dX1yZXR1cm4gY30sZ2V0RGF0YVR5cGVVc2VkOmZ1bmN0aW9uKHUsYyl7dmFyIGw9dTtzd2l0Y2godSl7Y2FzZSAyOmNhc2UgNDpsPXUtYzticmVhaztjYXNlIDM6Y2FzZSA1Omw9dS0yKmM7YnJlYWs7Y2FzZSA2OmM9PT0wP2w9dTpjPT09MT9sPTI6bD0xO2JyZWFrO2Nhc2UgNzpjPT09MD9sPXU6bD11LTIqYysxO2JyZWFrO2RlZmF1bHQ6bD11O2JyZWFrfXJldHVybiBsfSxnZXRPbmVQaXhlbDpmdW5jdGlvbih1LGMsbCxwKXt2YXIgZD0wO3N3aXRjaChsKXtjYXNlIDA6ZD1wLmdldEludDgoYyk7YnJlYWs7Y2FzZSAxOmQ9cC5nZXRVaW50OChjKTticmVhaztjYXNlIDI6ZD1wLmdldEludDE2KGMsITApO2JyZWFrO2Nhc2UgMzpkPXAuZ2V0VWludDE2KGMsITApO2JyZWFrO2Nhc2UgNDpkPXAuZ2V0SW50MzIoYywhMCk7YnJlYWs7Y2FzZSA1OmQ9cC5nZXRVSW50MzIoYywhMCk7YnJlYWs7Y2FzZSA2OmQ9cC5nZXRGbG9hdDMyKGMsITApO2JyZWFrO2Nhc2UgNzpkPXAuZ2V0RmxvYXQ2NChjLCEwKTticmVhaztkZWZhdWx0OnRocm93InRoZSBkZWNvZGVyIGRvZXMgbm90IHVuZGVyc3RhbmQgdGhpcyBwaXhlbCB0eXBlIn1yZXR1cm4gZH19LHM9ZnVuY3Rpb24odSxjLGwpe3RoaXMudmFsPXUsdGhpcy5sZWZ0PWMsdGhpcy5yaWdodD1sfSxmPXtkZWNvZGU6ZnVuY3Rpb24odSxjKXtjPWN8fHt9O3ZhciBsPWMubm9EYXRhVmFsdWUscD0wLGQ9e307aWYoZC5wdHI9Yy5pbnB1dE9mZnNldHx8MCxkLnBpeGVscz17fSwhIWkucmVhZEhlYWRlckluZm8odSxkKSl7dmFyIG09ZC5oZWFkZXJJbmZvLF89bS5maWxlVmVyc2lvbixnPWkuZ2V0RGF0YVR5cGVBcnJheShtLmltYWdlVHlwZSk7aS5yZWFkTWFzayh1LGQpLG0ubnVtVmFsaWRQaXhlbCE9PW0ud2lkdGgqbS5oZWlnaHQmJiFkLnBpeGVscy5yZXN1bHRNYXNrJiYoZC5waXhlbHMucmVzdWx0TWFzaz1jLm1hc2tEYXRhKTt2YXIgYj1tLndpZHRoKm0uaGVpZ2h0O2lmKGQucGl4ZWxzLnJlc3VsdFBpeGVscz1uZXcgZyhiKm0ubnVtRGltcyksZC5jb3VudGVyPXtvbmVzd2VlcDowLHVuY29tcHJlc3NlZDowLGx1dDowLGJpdHN0dWZmZXI6MCxjb25zdGFudDowLGNvbnN0YW50b2Zmc2V0OjB9LG0ubnVtVmFsaWRQaXhlbCE9PTApaWYobS56TWF4PT09bS56TWluKWkuY29uc3RydWN0Q29uc3RhbnRTdXJmYWNlKGQpO2Vsc2UgaWYoXz49NCYmaS5jaGVja01pbk1heFJhbmdlcyh1LGQpKWkuY29uc3RydWN0Q29uc3RhbnRTdXJmYWNlKGQpO2Vsc2V7dmFyIFQ9bmV3IERhdGFWaWV3KHUsZC5wdHIsMiksTz1ULmdldFVpbnQ4KDApO2lmKGQucHRyKyssTylpLnJlYWREYXRhT25lU3dlZXAodSxkLGcpO2Vsc2UgaWYoXz4xJiZtLmltYWdlVHlwZTw9MSYmTWF0aC5hYnMobS5tYXhaRXJyb3ItLjUpPDFlLTUpe3ZhciBFPVQuZ2V0VWludDgoMSk7aWYoZC5wdHIrKyxkLmVuY29kZU1vZGU9RSxFPjJ8fF88NCYmRT4xKXRocm93IkludmFsaWQgSHVmZm1hbiBmbGFnICIrRTtFP2kucmVhZEh1ZmZtYW4odSxkLGcpOmkucmVhZFRpbGVzKHUsZCxnKX1lbHNlIGkucmVhZFRpbGVzKHUsZCxnKX1kLmVvZk9mZnNldD1kLnB0cjt2YXIgdztjLmlucHV0T2Zmc2V0Pyh3PWQuaGVhZGVySW5mby5ibG9iU2l6ZStjLmlucHV0T2Zmc2V0LWQucHRyLE1hdGguYWJzKHcpPj0xJiYoZC5lb2ZPZmZzZXQ9Yy5pbnB1dE9mZnNldCtkLmhlYWRlckluZm8uYmxvYlNpemUpKToodz1kLmhlYWRlckluZm8uYmxvYlNpemUtZC5wdHIsTWF0aC5hYnModyk+PTEmJihkLmVvZk9mZnNldD1kLmhlYWRlckluZm8uYmxvYlNpemUpKTt2YXIgQz17d2lkdGg6bS53aWR0aCxoZWlnaHQ6bS5oZWlnaHQscGl4ZWxEYXRhOmQucGl4ZWxzLnJlc3VsdFBpeGVscyxtaW5WYWx1ZTptLnpNaW4sbWF4VmFsdWU6bS56TWF4LHZhbGlkUGl4ZWxDb3VudDptLm51bVZhbGlkUGl4ZWwsZGltQ291bnQ6bS5udW1EaW1zLGRpbVN0YXRzOnttaW5WYWx1ZXM6bS5taW5WYWx1ZXMsbWF4VmFsdWVzOm0ubWF4VmFsdWVzfSxtYXNrRGF0YTpkLnBpeGVscy5yZXN1bHRNYXNrfTtpZihkLnBpeGVscy5yZXN1bHRNYXNrJiZpLmlzVmFsaWRQaXhlbFZhbHVlKG0uaW1hZ2VUeXBlLGwpKXt2YXIgTT1kLnBpeGVscy5yZXN1bHRNYXNrO2ZvcihwPTA7cDxiO3ArKylNW3BdfHwoQy5waXhlbERhdGFbcF09bCk7Qy5ub0RhdGFWYWx1ZT1sfXJldHVybiBkLm5vRGF0YVZhbHVlPWwsYy5yZXR1cm5GaWxlSW5mbyYmKEMuZmlsZUluZm89aS5mb3JtYXRGaWxlSW5mbyhkKSksQ319LGdldEJhbmRDb3VudDpmdW5jdGlvbih1KXt2YXIgYz0wLGw9MCxwPXt9O2ZvcihwLnB0cj0wLHAucGl4ZWxzPXt9O2w8dS5ieXRlTGVuZ3RoLTU4OylpLnJlYWRIZWFkZXJJbmZvKHUscCksbCs9cC5oZWFkZXJJbmZvLmJsb2JTaXplLGMrKyxwLnB0cj1sO3JldHVybiBjfX07cmV0dXJuIGZ9KCksbj1mdW5jdGlvbigpe3ZhciByPW5ldyBBcnJheUJ1ZmZlcig0KSxpPW5ldyBVaW50OEFycmF5KHIpLHM9bmV3IFVpbnQzMkFycmF5KHIpO3JldHVybiBzWzBdPTEsaVswXT09PTF9KCksbz17ZGVjb2RlOmZ1bmN0aW9uKHIsaSl7aWYoIW4pdGhyb3ciQmlnIGVuZGlhbiBzeXN0ZW0gaXMgbm90IHN1cHBvcnRlZC4iO2k9aXx8e307dmFyIHM9aS5pbnB1dE9mZnNldHx8MCxmPW5ldyBVaW50OEFycmF5KHIscywxMCksdT1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZiksYyxsO2lmKHUudHJpbSgpPT09IkNudFpJbWFnZSIpYz10LGw9MTtlbHNlIGlmKHUuc3Vic3RyaW5nKDAsNSk9PT0iTGVyYzIiKWM9ZSxsPTI7ZWxzZSB0aHJvdyJVbmV4cGVjdGVkIGZpbGUgaWRlbnRpZmllciBzdHJpbmc6ICIrdTtmb3IodmFyIHA9MCxkPXIuYnl0ZUxlbmd0aC0xMCxtLF89W10sZyxiLFQ9e3dpZHRoOjAsaGVpZ2h0OjAscGl4ZWxzOltdLHBpeGVsVHlwZTppLnBpeGVsVHlwZSxtYXNrOm51bGwsc3RhdGlzdGljczpbXX07czxkOyl7dmFyIE89Yy5kZWNvZGUocix7aW5wdXRPZmZzZXQ6cyxlbmNvZGVkTWFza0RhdGE6bSxtYXNrRGF0YTpiLHJldHVybk1hc2s6cD09PTAscmV0dXJuRW5jb2RlZE1hc2s6cD09PTAscmV0dXJuRmlsZUluZm86ITAscGl4ZWxUeXBlOmkucGl4ZWxUeXBlfHxudWxsLG5vRGF0YVZhbHVlOmkubm9EYXRhVmFsdWV8fG51bGx9KTtzPU8uZmlsZUluZm8uZW9mT2Zmc2V0LHA9PT0wJiYobT1PLmVuY29kZWRNYXNrRGF0YSxiPU8ubWFza0RhdGEsVC53aWR0aD1PLndpZHRoLFQuaGVpZ2h0PU8uaGVpZ2h0LFQuZGltQ291bnQ9Ty5kaW1Db3VudHx8MSxULnBpeGVsVHlwZT1PLnBpeGVsVHlwZXx8Ty5maWxlSW5mby5waXhlbFR5cGUsVC5tYXNrPU8ubWFza0RhdGEpLGw+MSYmTy5maWxlSW5mby5tYXNrJiZPLmZpbGVJbmZvLm1hc2subnVtQnl0ZXM+MCYmXy5wdXNoKE8ubWFza0RhdGEpLHArKyxULnBpeGVscy5wdXNoKE8ucGl4ZWxEYXRhKSxULnN0YXRpc3RpY3MucHVzaCh7bWluVmFsdWU6Ty5taW5WYWx1ZSxtYXhWYWx1ZTpPLm1heFZhbHVlLG5vRGF0YVZhbHVlOk8ubm9EYXRhVmFsdWUsZGltU3RhdHM6Ty5kaW1TdGF0c30pfXZhciBFLHcsQztpZihsPjEmJl8ubGVuZ3RoPjEpe2ZvcihDPVQud2lkdGgqVC5oZWlnaHQsVC5iYW5kTWFza3M9XyxiPW5ldyBVaW50OEFycmF5KEMpLGIuc2V0KF9bMF0pLEU9MTtFPF8ubGVuZ3RoO0UrKylmb3IoZz1fW0VdLHc9MDt3PEM7dysrKWJbd109Ylt3XSZnW3ddO1QubWFza0RhdGE9Yn1yZXR1cm4gVH19O3R5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQ/ZGVmaW5lKFtdLGZ1bmN0aW9uKCl7cmV0dXJuIG99KTp0eXBlb2YgJGQ8InUiJiYkZC5leHBvcnRzPyRkLmV4cG9ydHM9bzp0aGlzLkxlcmM9b30pKCl9KTt2YXIgdWc9e307ZGUodWcse2RlZmF1bHQ6KCk9PmRVfSk7ZnVuY3Rpb24gcFUodCxlKXtpZih0LmVuY29kaW5nPT09WFIuTEVSQyl7bGV0IHI7dHJ5e3I9SlIuZGVmYXVsdC5kZWNvZGUodC5oZWlnaHRtYXApfWNhdGNoKHMpe3Rocm93IG5ldyBBZShzKX1pZihyLnN0YXRpc3RpY3NbMF0ubWluVmFsdWU9PT1OdW1iZXIuTUFYX1ZBTFVFKXRocm93IG5ldyBBZSgiSW52YWxpZCB0aWxlIGRhdGEiKTt0LmhlaWdodG1hcD1yLnBpeGVsc1swXSx0LndpZHRoPXIud2lkdGgsdC5oZWlnaHQ9ci5oZWlnaHR9dC5lbGxpcHNvaWQ9WS5jbG9uZSh0LmVsbGlwc29pZCksdC5yZWN0YW5nbGU9TnQuY2xvbmUodC5yZWN0YW5nbGUpO2xldCBuPSRSLmNvbXB1dGVWZXJ0aWNlcyh0KSxvPW4udmVydGljZXM7cmV0dXJuIGUucHVzaChvLmJ1ZmZlcikse3ZlcnRpY2VzOm8uYnVmZmVyLG51bWJlck9mQXR0cmlidXRlczpuLmVuY29kaW5nLnN0cmlkZSxtaW5pbXVtSGVpZ2h0Om4ubWluaW11bUhlaWdodCxtYXhpbXVtSGVpZ2h0Om4ubWF4aW11bUhlaWdodCxncmlkV2lkdGg6dC53aWR0aCxncmlkSGVpZ2h0OnQuaGVpZ2h0LGJvdW5kaW5nU3BoZXJlM0Q6bi5ib3VuZGluZ1NwaGVyZTNELG9yaWVudGVkQm91bmRpbmdCb3g6bi5vcmllbnRlZEJvdW5kaW5nQm94LG9jY2x1ZGVlUG9pbnRJblNjYWxlZFNwYWNlOm4ub2NjbHVkZWVQb2ludEluU2NhbGVkU3BhY2UsZW5jb2Rpbmc6bi5lbmNvZGluZyx3ZXN0SW5kaWNlc1NvdXRoVG9Ob3J0aDpuLndlc3RJbmRpY2VzU291dGhUb05vcnRoLHNvdXRoSW5kaWNlc0Vhc3RUb1dlc3Q6bi5zb3V0aEluZGljZXNFYXN0VG9XZXN0LGVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoOm4uZWFzdEluZGljZXNOb3J0aFRvU291dGgsbm9ydGhJbmRpY2VzV2VzdFRvRWFzdDpuLm5vcnRoSW5kaWNlc1dlc3RUb0Vhc3R9fXZhciBKUixkVSxsZz0kKCgpPT57JHQoKTtZUigpO1pSKCk7d24oKTtKcigpO0pSPWRyKFFSKCksMSk7c28oKTtkVT1RZShwVSl9KTtmdW5jdGlvbiBrbygpe0QudGhyb3dJbnN0YW50aWF0aW9uRXJyb3IoKX1mdW5jdGlvbiBvMih0LGUpe2xldCBuPW5ldyBBcnJheShlKSxvPW5ldyBBcnJheSh0KSxyPW5ldyBBcnJheShlKSxpPW5ldyBBcnJheSh0KSxzO2ZvcihzPTA7czx0OysrcylpW3NdPXMsb1tzXT10KmUtMS1zO2ZvcihzPTA7czxlOysrcylyW3NdPShzKzEpKnQtMSxuW3NdPShlLXMtMSkqdDtyZXR1cm57d2VzdEluZGljZXNTb3V0aFRvTm9ydGg6bixzb3V0aEluZGljZXNFYXN0VG9XZXN0Om8sZWFzdEluZGljZXNOb3J0aFRvU291dGg6cixub3J0aEluZGljZXNXZXN0VG9FYXN0Oml9fWZ1bmN0aW9uIHIyKHQsZSxuLG8pe2xldCByPTA7Zm9yKGxldCBpPTA7aTxlLTE7KytpKXtmb3IobGV0IHM9MDtzPHQtMTsrK3Mpe2xldCBmPXIsdT1mK3QsYz11KzEsbD1mKzE7bltvKytdPWYsbltvKytdPXUsbltvKytdPWwsbltvKytdPWwsbltvKytdPXUsbltvKytdPWMsKytyfSsrcn19ZnVuY3Rpb24gWmQodCxlLG4sbyl7bGV0IHI9dFswXSxpPXQubGVuZ3RoO2ZvcihsZXQgcz0xO3M8aTsrK3Mpe2xldCBmPXRbc107bltvKytdPXIsbltvKytdPWYsbltvKytdPWUsbltvKytdPWUsbltvKytdPWYsbltvKytdPWUrMSxyPWYsKytlfXJldHVybiBvfXZhciB0MixlMixuMixpMixzMj0kKCgpPT57ZnQoKTtqdCgpOyRlKCk7S3QoKTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhrby5wcm90b3R5cGUse2Vycm9yRXZlbnQ6e2dldDpELnRocm93SW5zdGFudGlhdGlvbkVycm9yfSxjcmVkaXQ6e2dldDpELnRocm93SW5zdGFudGlhdGlvbkVycm9yfSx0aWxpbmdTY2hlbWU6e2dldDpELnRocm93SW5zdGFudGlhdGlvbkVycm9yfSxoYXNXYXRlck1hc2s6e2dldDpELnRocm93SW5zdGFudGlhdGlvbkVycm9yfSxoYXNWZXJ0ZXhOb3JtYWxzOntnZXQ6RC50aHJvd0luc3RhbnRpYXRpb25FcnJvcn0sYXZhaWxhYmlsaXR5OntnZXQ6RC50aHJvd0luc3RhbnRpYXRpb25FcnJvcn19KTt0Mj1bXTtrby5nZXRSZWd1bGFyR3JpZEluZGljZXM9ZnVuY3Rpb24odCxlKXtpZih0KmU+PVAuRk9VUl9HSUdBQllURVMpdGhyb3cgbmV3IEQoIlRoZSB0b3RhbCBudW1iZXIgb2YgdmVydGljZXMgKHdpZHRoICogaGVpZ2h0KSBtdXN0IGJlIGxlc3MgdGhhbiA0LDI5NCw5NjcsMjk2LiIpO2xldCBuPXQyW3RdO2gobil8fCh0Mlt0XT1uPVtdKTtsZXQgbz1uW2VdO3JldHVybiBoKG8pfHwodCplPFAuU0lYVFlfRk9VUl9LSUxPQllURVM/bz1uW2VdPW5ldyBVaW50MTZBcnJheSgodC0xKSooZS0xKSo2KTpvPW5bZV09bmV3IFVpbnQzMkFycmF5KCh0LTEpKihlLTEpKjYpLHIyKHQsZSxvLDApKSxvfTtlMj1bXTtrby5nZXRSZWd1bGFyR3JpZEluZGljZXNBbmRFZGdlSW5kaWNlcz1mdW5jdGlvbih0LGUpe2lmKHQqZT49UC5GT1VSX0dJR0FCWVRFUyl0aHJvdyBuZXcgRCgiVGhlIHRvdGFsIG51bWJlciBvZiB2ZXJ0aWNlcyAod2lkdGggKiBoZWlnaHQpIG11c3QgYmUgbGVzcyB0aGFuIDQsMjk0LDk2NywyOTYuIik7bGV0IG49ZTJbdF07aChuKXx8KGUyW3RdPW49W10pO2xldCBvPW5bZV07aWYoIWgobykpe2xldCByPWtvLmdldFJlZ3VsYXJHcmlkSW5kaWNlcyh0LGUpLGk9bzIodCxlKSxzPWkud2VzdEluZGljZXNTb3V0aFRvTm9ydGgsZj1pLnNvdXRoSW5kaWNlc0Vhc3RUb1dlc3QsdT1pLmVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoLGM9aS5ub3J0aEluZGljZXNXZXN0VG9FYXN0O289bltlXT17aW5kaWNlczpyLHdlc3RJbmRpY2VzU291dGhUb05vcnRoOnMsc291dGhJbmRpY2VzRWFzdFRvV2VzdDpmLGVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoOnUsbm9ydGhJbmRpY2VzV2VzdFRvRWFzdDpjfX1yZXR1cm4gb307bjI9W107a28uZ2V0UmVndWxhckdyaWRBbmRTa2lydEluZGljZXNBbmRFZGdlSW5kaWNlcz1mdW5jdGlvbih0LGUpe2lmKHQqZT49UC5GT1VSX0dJR0FCWVRFUyl0aHJvdyBuZXcgRCgiVGhlIHRvdGFsIG51bWJlciBvZiB2ZXJ0aWNlcyAod2lkdGggKiBoZWlnaHQpIG11c3QgYmUgbGVzcyB0aGFuIDQsMjk0LDk2NywyOTYuIik7bGV0IG49bjJbdF07aChuKXx8KG4yW3RdPW49W10pO2xldCBvPW5bZV07aWYoIWgobykpe2xldCByPXQqZSxpPSh0LTEpKihlLTEpKjYscz10KjIrZSoyLGY9TWF0aC5tYXgoMCxzLTQpKjYsdT1yK3MsYz1pK2YsbD1vMih0LGUpLHA9bC53ZXN0SW5kaWNlc1NvdXRoVG9Ob3J0aCxkPWwuc291dGhJbmRpY2VzRWFzdFRvV2VzdCxtPWwuZWFzdEluZGljZXNOb3J0aFRvU291dGgsXz1sLm5vcnRoSW5kaWNlc1dlc3RUb0Vhc3QsZz1GdC5jcmVhdGVUeXBlZEFycmF5KHUsYyk7cjIodCxlLGcsMCksa28uYWRkU2tpcnRJbmRpY2VzKHAsZCxtLF8scixnLGkpLG89bltlXT17aW5kaWNlczpnLHdlc3RJbmRpY2VzU291dGhUb05vcnRoOnAsc291dGhJbmRpY2VzRWFzdFRvV2VzdDpkLGVhc3RJbmRpY2VzTm9ydGhUb1NvdXRoOm0sbm9ydGhJbmRpY2VzV2VzdFRvRWFzdDpfLGluZGV4Q291bnRXaXRob3V0U2tpcnRzOml9fXJldHVybiBvfTtrby5hZGRTa2lydEluZGljZXM9ZnVuY3Rpb24odCxlLG4sbyxyLGkscyl7bGV0IGY9cjtzPVpkKHQsZixpLHMpLGYrPXQubGVuZ3RoLHM9WmQoZSxmLGkscyksZis9ZS5sZW5ndGgscz1aZChuLGYsaSxzKSxmKz1uLmxlbmd0aCxaZChvLGYsaSxzKX07a28uaGVpZ2h0bWFwVGVycmFpblF1YWxpdHk9LjI1O2tvLmdldEVzdGltYXRlZExldmVsWmVyb0dlb21ldHJpY0Vycm9yRm9yQUhlaWdodG1hcD1mdW5jdGlvbih0LGUsbil7cmV0dXJuIHQubWF4aW11bVJhZGl1cyoyKk1hdGguUEkqa28uaGVpZ2h0bWFwVGVycmFpblF1YWxpdHkvKGUqbil9O2tvLnByb3RvdHlwZS5yZXF1ZXN0VGlsZUdlb21ldHJ5PUQudGhyb3dJbnN0YW50aWF0aW9uRXJyb3I7a28ucHJvdG90eXBlLmdldExldmVsTWF4aW11bUdlb21ldHJpY0Vycm9yPUQudGhyb3dJbnN0YW50aWF0aW9uRXJyb3I7a28ucHJvdG90eXBlLmdldFRpbGVEYXRhQXZhaWxhYmxlPUQudGhyb3dJbnN0YW50aWF0aW9uRXJyb3I7a28ucHJvdG90eXBlLmxvYWRUaWxlRGF0YUF2YWlsYWJpbGl0eT1ELnRocm93SW5zdGFudGlhdGlvbkVycm9yO2kyPWtvfSk7dmFyIGRnPXt9O2RlKGRnLHtkZWZhdWx0OigpPT55VX0pO2Z1bmN0aW9uIF9VKHQsZSl7bGV0IG49dC5xdWFudGl6ZWRWZXJ0aWNlcyxvPW4ubGVuZ3RoLzMscj10Lm9jdEVuY29kZWROb3JtYWxzLGk9dC53ZXN0SW5kaWNlcy5sZW5ndGgrdC5lYXN0SW5kaWNlcy5sZW5ndGgrdC5zb3V0aEluZGljZXMubGVuZ3RoK3Qubm9ydGhJbmRpY2VzLmxlbmd0aCxzPXQuaW5jbHVkZVdlYk1lcmNhdG9yVCxmPXQuZXhhZ2dlcmF0aW9uLHU9dC5leGFnZ2VyYXRpb25SZWxhdGl2ZUhlaWdodCxsPWYhPT0xLHA9TnQuY2xvbmUodC5yZWN0YW5nbGUpLGQ9cC53ZXN0LG09cC5zb3V0aCxfPXAuZWFzdCxnPXAubm9ydGgsYj1ZLmNsb25lKHQuZWxsaXBzb2lkKSxUPXQubWluaW11bUhlaWdodCxPPXQubWF4aW11bUhlaWdodCxFPXQucmVsYXRpdmVUb0NlbnRlcix3PVhvLmVhc3ROb3J0aFVwVG9GaXhlZEZyYW1lKEUsYiksQz1zdC5pbnZlcnNlVHJhbnNmb3JtYXRpb24odyxuZXcgc3QpLE0sTjtzJiYoTT1uby5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKG0pLE49MS8obm8uZ2VvZGV0aWNMYXRpdHVkZVRvTWVyY2F0b3JBbmdsZShnKS1NKSk7bGV0IEY9bi5zdWJhcnJheSgwLG8pLEk9bi5zdWJhcnJheShvLDIqbyksdj1uLnN1YmFycmF5KG8qMiwzKm8pLEI9aChyKSxBPW5ldyBBcnJheShvKSxTPW5ldyBBcnJheShvKSx4PW5ldyBBcnJheShvKSxMPXM/bmV3IEFycmF5KG8pOltdLHo9bD9uZXcgQXJyYXkobyk6W10saj1tVTtqLng9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGoueT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksai56PU51bWJlci5QT1NJVElWRV9JTkZJTklUWTtsZXQgaz1oVTtrLng9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLGsueT1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksay56PU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtsZXQgcT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksVz1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksUj1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksbnQ9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO2ZvcihsZXQgWXQ9MDtZdDxvOysrWXQpe2xldCBWZT1GW1l0XSxkbj1JW1l0XSxzbj1WZS9wZyxtbj1kbi9wZyxmbz1QLmxlcnAoVCxPLHZbWXRdL3BnKTtabi5sb25naXR1ZGU9UC5sZXJwKGQsXyxzbiksWm4ubGF0aXR1ZGU9UC5sZXJwKG0sZyxtbiksWm4uaGVpZ2h0PWZvLHE9TWF0aC5taW4oWm4ubG9uZ2l0dWRlLHEpLFc9TWF0aC5tYXgoWm4ubG9uZ2l0dWRlLFcpLFI9TWF0aC5taW4oWm4ubGF0aXR1ZGUsUiksbnQ9TWF0aC5tYXgoWm4ubGF0aXR1ZGUsbnQpO2xldCBIbj1iLmNhcnRvZ3JhcGhpY1RvQ2FydGVzaWFuKFpuKTtBW1l0XT1uZXcgSihzbixtbiksU1tZdF09Zm8seFtZdF09SG4scyYmKExbWXRdPShuby5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKFpuLmxhdGl0dWRlKS1NKSpOKSxsJiYoeltZdF09Yi5nZW9kZXRpY1N1cmZhY2VOb3JtYWwoSG4pKSxzdC5tdWx0aXBseUJ5UG9pbnQoQyxIbixmdSksYS5taW5pbXVtQnlDb21wb25lbnQoZnUsaixqKSxhLm1heGltdW1CeUNvbXBvbmVudChmdSxrLGspfWxldCBhdD10bSh0Lndlc3RJbmRpY2VzLGZ1bmN0aW9uKFl0LFZlKXtyZXR1cm4gQVtZdF0ueS1BW1ZlXS55fSksbHQ9dG0odC5lYXN0SW5kaWNlcyxmdW5jdGlvbihZdCxWZSl7cmV0dXJuIEFbVmVdLnktQVtZdF0ueX0pLGh0PXRtKHQuc291dGhJbmRpY2VzLGZ1bmN0aW9uKFl0LFZlKXtyZXR1cm4gQVtWZV0ueC1BW1l0XS54fSksb3Q9dG0odC5ub3J0aEluZGljZXMsZnVuY3Rpb24oWXQsVmUpe3JldHVybiBBW1l0XS54LUFbVmVdLnh9KSxQdDtUPDAmJihQdD1uZXcgeHMoYikuY29tcHV0ZUhvcml6b25DdWxsaW5nUG9pbnRQb3NzaWJseVVuZGVyRWxsaXBzb2lkKEUseCxUKSk7bGV0IHl0PVQ7eXQ9TWF0aC5taW4oeXQsUWQodC53ZXN0SW5kaWNlcyx0Lndlc3RTa2lydEhlaWdodCxTLEEscCxiLEMsaixrKSkseXQ9TWF0aC5taW4oeXQsUWQodC5zb3V0aEluZGljZXMsdC5zb3V0aFNraXJ0SGVpZ2h0LFMsQSxwLGIsQyxqLGspKSx5dD1NYXRoLm1pbih5dCxRZCh0LmVhc3RJbmRpY2VzLHQuZWFzdFNraXJ0SGVpZ2h0LFMsQSxwLGIsQyxqLGspKSx5dD1NYXRoLm1pbih5dCxRZCh0Lm5vcnRoSW5kaWNlcyx0Lm5vcnRoU2tpcnRIZWlnaHQsUyxBLHAsYixDLGosaykpO2xldCBFdD1uZXcgTGkoaixrLEUpLGR0PW5ldyBQcyhFLEV0LHl0LE8sdyxCLHMsbCxmLHUpLHJ0PWR0LnN0cmlkZSxDdD1vKnJ0K2kqcnQsa3Q9bmV3IEZsb2F0MzJBcnJheShDdCksbGU9MDtmb3IobGV0IFl0PTA7WXQ8bzsrK1l0KXtpZihCKXtsZXQgVmU9WXQqMjtVYS54PXJbVmVdLFVhLnk9cltWZSsxXX1sZT1kdC5lbmNvZGUoa3QsbGUseFtZdF0sQVtZdF0sU1tZdF0sVWEsTFtZdF0seltZdF0pfWxldCByZT1NYXRoLm1heCgwLChpLTQpKjIpLHBlPXQuaW5kaWNlcy5sZW5ndGgrcmUqMyxmZT1GdC5jcmVhdGVUeXBlZEFycmF5KG8raSxwZSk7ZmUuc2V0KHQuaW5kaWNlcywwKTtsZXQgWnQ9MWUtNCxRdD0oVy1xKSpadCxOZT0obnQtUikqWnQsZ2U9LVF0LEVlPTAsdW49UXQsR2U9MCxiZT0wLGxuPU5lLHBuPTAsRW49LU5lLG9lPW8qcnQ7cmV0dXJuIEpkKGt0LG9lLGF0LGR0LFMsQSxyLGIscCx0Lndlc3RTa2lydEhlaWdodCxNLE4sZ2UsRWUpLG9lKz10Lndlc3RJbmRpY2VzLmxlbmd0aCpydCxKZChrdCxvZSxodCxkdCxTLEEscixiLHAsdC5zb3V0aFNraXJ0SGVpZ2h0LE0sTixwbixFbiksb2UrPXQuc291dGhJbmRpY2VzLmxlbmd0aCpydCxKZChrdCxvZSxsdCxkdCxTLEEscixiLHAsdC5lYXN0U2tpcnRIZWlnaHQsTSxOLHVuLEdlKSxvZSs9dC5lYXN0SW5kaWNlcy5sZW5ndGgqcnQsSmQoa3Qsb2Usb3QsZHQsUyxBLHIsYixwLHQubm9ydGhTa2lydEhlaWdodCxNLE4sYmUsbG4pLGkyLmFkZFNraXJ0SW5kaWNlcyhhdCxodCxsdCxvdCxvLGZlLHQuaW5kaWNlcy5sZW5ndGgpLGUucHVzaChrdC5idWZmZXIsZmUuYnVmZmVyKSx7dmVydGljZXM6a3QuYnVmZmVyLGluZGljZXM6ZmUuYnVmZmVyLHdlc3RJbmRpY2VzU291dGhUb05vcnRoOmF0LHNvdXRoSW5kaWNlc0Vhc3RUb1dlc3Q6aHQsZWFzdEluZGljZXNOb3J0aFRvU291dGg6bHQsbm9ydGhJbmRpY2VzV2VzdFRvRWFzdDpvdCx2ZXJ0ZXhTdHJpZGU6cnQsY2VudGVyOkUsbWluaW11bUhlaWdodDpULG1heGltdW1IZWlnaHQ6TyxvY2NsdWRlZVBvaW50SW5TY2FsZWRTcGFjZTpQdCxlbmNvZGluZzpkdCxpbmRleENvdW50V2l0aG91dFNraXJ0czp0LmluZGljZXMubGVuZ3RofX1mdW5jdGlvbiBRZCh0LGUsbixvLHIsaSxzLGYsdSl7bGV0IGM9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLGw9ci5ub3J0aCxwPXIuc291dGgsZD1yLmVhc3QsbT1yLndlc3Q7ZDxtJiYoZCs9UC5UV09fUEkpO2xldCBfPXQubGVuZ3RoO2ZvcihsZXQgZz0wO2c8XzsrK2cpe2xldCBiPXRbZ10sVD1uW2JdLE89b1tiXTtabi5sb25naXR1ZGU9UC5sZXJwKG0sZCxPLngpLFpuLmxhdGl0dWRlPVAubGVycChwLGwsTy55KSxabi5oZWlnaHQ9VC1lO2xldCBFPWkuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oWm4sZnUpO3N0Lm11bHRpcGx5QnlQb2ludChzLEUsRSksYS5taW5pbXVtQnlDb21wb25lbnQoRSxmLGYpLGEubWF4aW11bUJ5Q29tcG9uZW50KEUsdSx1KSxjPU1hdGgubWluKGMsWm4uaGVpZ2h0KX1yZXR1cm4gY31mdW5jdGlvbiBKZCh0LGUsbixvLHIsaSxzLGYsdSxjLGwscCxkLG0pe2xldCBfPWgocyksZz11Lm5vcnRoLGI9dS5zb3V0aCxUPXUuZWFzdCxPPXUud2VzdDtUPE8mJihUKz1QLlRXT19QSSk7bGV0IEU9bi5sZW5ndGg7Zm9yKGxldCB3PTA7dzxFOysrdyl7bGV0IEM9blt3XSxNPXJbQ10sTj1pW0NdO1puLmxvbmdpdHVkZT1QLmxlcnAoTyxULE4ueCkrZCxabi5sYXRpdHVkZT1QLmxlcnAoYixnLE4ueSkrbSxabi5oZWlnaHQ9TS1jO2xldCBGPWYuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oWm4sZnUpO2lmKF8pe2xldCBCPUMqMjtVYS54PXNbQl0sVWEueT1zW0IrMV19bGV0IEk7by5oYXNXZWJNZXJjYXRvclQmJihJPShuby5nZW9kZXRpY0xhdGl0dWRlVG9NZXJjYXRvckFuZ2xlKFpuLmxhdGl0dWRlKS1sKSpwKTtsZXQgdjtvLmhhc0dlb2RldGljU3VyZmFjZU5vcm1hbHMmJih2PWYuZ2VvZGV0aWNTdXJmYWNlTm9ybWFsKEYpKSxlPW8uZW5jb2RlKHQsZSxGLE4sWm4uaGVpZ2h0LFVhLEksdil9fWZ1bmN0aW9uIHRtKHQsZSl7bGV0IG47cmV0dXJuIHR5cGVvZiB0LnNsaWNlPT0iZnVuY3Rpb24iJiYobj10LnNsaWNlKCksdHlwZW9mIG4uc29ydCE9ImZ1bmN0aW9uIiYmKG49dm9pZCAwKSksaChuKXx8KG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkpLG4uc29ydChlKSxufXZhciBwZyxmdSxtVSxoVSxabixVYSx5VSxtZz0kKCgpPT57eGYoKTtVZSgpO0x0KCk7SWUoKTtmdCgpOyR0KCk7c3UoKTskZSgpO0t0KCk7VW4oKTt3bigpO2N1KCk7czIoKTtjcygpO2ljKCk7c28oKTtwZz0zMjc2NyxmdT1uZXcgYSxtVT1uZXcgYSxoVT1uZXcgYSxabj1uZXcgY3QsVWE9bmV3IEo7eVU9UWUoX1UpfSk7ZnVuY3Rpb24gZ1UodCxlKXtyZXR1cm4gUC5lcXVhbHNFcHNpbG9uKHQubGF0aXR1ZGUsZS5sYXRpdHVkZSxQLkVQU0lMT04xMCkmJlAuZXF1YWxzRXBzaWxvbih0LmxvbmdpdHVkZSxlLmxvbmdpdHVkZSxQLkVQU0lMT04xMCl9ZnVuY3Rpb24gVFUodCxlLG4sbyl7ZT14bihlLGEuZXF1YWxzRXBzaWxvbik7bGV0IHI9ZS5sZW5ndGg7aWYocjwyKXJldHVybjtsZXQgaT1oKG8pLHM9aChuKSxmPW5ldyBBcnJheShyKSx1PW5ldyBBcnJheShyKSxjPW5ldyBBcnJheShyKSxsPWVbMF07ZlswXT1sO2xldCBwPXQuY2FydGVzaWFuVG9DYXJ0b2dyYXBoaWMobCxBVSk7cyYmKHAuaGVpZ2h0PW5bMF0pLHVbMF09cC5oZWlnaHQsaT9jWzBdPW9bMF06Y1swXT0wO2xldCBkPXVbMF0sbT1jWzBdLF89ZD09PW0sZz0xO2ZvcihsZXQgYj0xO2I8cjsrK2Ipe2xldCBUPWVbYl0sTz10LmNhcnRlc2lhblRvQ2FydG9ncmFwaGljKFQsYlUpO3MmJihPLmhlaWdodD1uW2JdKSxfPV8mJk8uaGVpZ2h0PT09MCxnVShwLE8pP3AuaGVpZ2h0PE8uaGVpZ2h0JiYodVtnLTFdPU8uaGVpZ2h0KTooZltnXT1ULHVbZ109Ty5oZWlnaHQsaT9jW2ddPW9bYl06Y1tnXT0wLF89XyYmdVtnXT09PWNbZ10sY3QuY2xvbmUoTyxwKSwrK2cpfWlmKCEoX3x8ZzwyKSlyZXR1cm4gZi5sZW5ndGg9Zyx1Lmxlbmd0aD1nLGMubGVuZ3RoPWcse3Bvc2l0aW9uczpmLHRvcEhlaWdodHM6dSxib3R0b21IZWlnaHRzOmN9fXZhciBjMixBVSxiVSx3VSxPVSxFVSxlbSxoZz0kKCgpPT57anIoKTtMdCgpO0llKCk7ZnQoKTtLdCgpO3lhKCk7YzI9e307QVU9bmV3IGN0LGJVPW5ldyBjdDt3VT1uZXcgQXJyYXkoMiksT1U9bmV3IEFycmF5KDIpLEVVPXtwb3NpdGlvbnM6dm9pZCAwLGhlaWdodDp2b2lkIDAsZ3JhbnVsYXJpdHk6dm9pZCAwLGVsbGlwc29pZDp2b2lkIDB9O2MyLmNvbXB1dGVQb3NpdGlvbnM9ZnVuY3Rpb24odCxlLG4sbyxyLGkpe2xldCBzPVRVKHQsZSxuLG8pO2lmKCFoKHMpKXJldHVybjtlPXMucG9zaXRpb25zLG49cy50b3BIZWlnaHRzLG89cy5ib3R0b21IZWlnaHRzO2xldCBmPWUubGVuZ3RoLHU9Zi0yLGMsbCxwPVAuY2hvcmRMZW5ndGgocix0Lm1heGltdW1SYWRpdXMpLGQ9RVU7aWYoZC5taW5EaXN0YW5jZT1wLGQuZWxsaXBzb2lkPXQsaSl7bGV0IG09MCxfO2ZvcihfPTA7XzxmLTE7XysrKW0rPUFuLm51bWJlck9mUG9pbnRzKGVbX10sZVtfKzFdLHApKzE7Yz1uZXcgRmxvYXQ2NEFycmF5KG0qMyksbD1uZXcgRmxvYXQ2NEFycmF5KG0qMyk7bGV0IGc9d1UsYj1PVTtkLnBvc2l0aW9ucz1nLGQuaGVpZ2h0PWI7bGV0IFQ9MDtmb3IoXz0wO188Zi0xO18rKyl7Z1swXT1lW19dLGdbMV09ZVtfKzFdLGJbMF09bltfXSxiWzFdPW5bXysxXTtsZXQgTz1Bbi5nZW5lcmF0ZUFyYyhkKTtjLnNldChPLFQpLGJbMF09b1tfXSxiWzFdPW9bXysxXSxsLnNldChBbi5nZW5lcmF0ZUFyYyhkKSxUKSxUKz1PLmxlbmd0aH19ZWxzZSBkLnBvc2l0aW9ucz1lLGQuaGVpZ2h0PW4sYz1uZXcgRmxvYXQ2NEFycmF5KEFuLmdlbmVyYXRlQXJjKGQpKSxkLmhlaWdodD1vLGw9bmV3IEZsb2F0NjRBcnJheShBbi5nZW5lcmF0ZUFyYyhkKSk7cmV0dXJue2JvdHRvbVBvc2l0aW9uczpsLHRvcFBvc2l0aW9uczpjLG51bUNvcm5lcnM6dX19O2VtPWMyfSk7ZnVuY3Rpb24gRWModCl7dD10Pz9JdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC5wb3NpdGlvbnMsbj10Lm1heGltdW1IZWlnaHRzLG89dC5taW5pbXVtSGVpZ2h0cztpZighaChlKSl0aHJvdyBuZXcgRCgib3B0aW9ucy5wb3NpdGlvbnMgaXMgcmVxdWlyZWQuIik7aWYoaChuKSYmbi5sZW5ndGghPT1lLmxlbmd0aCl0aHJvdyBuZXcgRCgib3B0aW9ucy5wb3NpdGlvbnMgYW5kIG9wdGlvbnMubWF4aW11bUhlaWdodHMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aC4iKTtpZihoKG8pJiZvLmxlbmd0aCE9PWUubGVuZ3RoKXRocm93IG5ldyBEKCJvcHRpb25zLnBvc2l0aW9ucyBhbmQgb3B0aW9ucy5taW5pbXVtSGVpZ2h0cyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoLiIpO2xldCByPXQudmVydGV4Rm9ybWF0Pz9wdC5ERUZBVUxULGk9dC5ncmFudWxhcml0eT8/UC5SQURJQU5TX1BFUl9ERUdSRUUscz10LmVsbGlwc29pZD8/WS5kZWZhdWx0O3RoaXMuX3Bvc2l0aW9ucz1lLHRoaXMuX21pbmltdW1IZWlnaHRzPW8sdGhpcy5fbWF4aW11bUhlaWdodHM9bix0aGlzLl92ZXJ0ZXhGb3JtYXQ9cHQuY2xvbmUociksdGhpcy5fZ3JhbnVsYXJpdHk9aSx0aGlzLl9lbGxpcHNvaWQ9WS5jbG9uZShzKSx0aGlzLl93b3JrZXJOYW1lPSJjcmVhdGVXYWxsR2VvbWV0cnkiO2xldCBmPTErZS5sZW5ndGgqYS5wYWNrZWRMZW5ndGgrMjtoKG8pJiYoZis9by5sZW5ndGgpLGgobikmJihmKz1uLmxlbmd0aCksdGhpcy5wYWNrZWRMZW5ndGg9ZitZLnBhY2tlZExlbmd0aCtwdC5wYWNrZWRMZW5ndGgrMX12YXIgX2csbm0sUlUsYTIsU1UsQ1UseFUsZjIsdTIsdXUseWcsbDI9JCgoKT0+e3ZlKCk7THQoKTtEZSgpO3llKCk7ZnQoKTtqdCgpOyR0KCk7WGUoKTtZZSgpO2FuKCk7JGUoKTtLdCgpO3RuKCk7Um8oKTtoZygpO19nPW5ldyBhLG5tPW5ldyBhLFJVPW5ldyBhLGEyPW5ldyBhLFNVPW5ldyBhLENVPW5ldyBhLHhVPW5ldyBhO0VjLnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBEKCJ2YWx1ZSBpcyByZXF1aXJlZCIpO2lmKCFoKGUpKXRocm93IG5ldyBEKCJhcnJheSBpcyByZXF1aXJlZCIpO249bj8/MDtsZXQgbyxyPXQuX3Bvc2l0aW9ucyxpPXIubGVuZ3RoO2ZvcihlW24rK109aSxvPTA7bzxpOysrbyxuKz1hLnBhY2tlZExlbmd0aClhLnBhY2socltvXSxlLG4pO2xldCBzPXQuX21pbmltdW1IZWlnaHRzO2lmKGk9aChzKT9zLmxlbmd0aDowLGVbbisrXT1pLGgocykpZm9yKG89MDtvPGk7KytvKWVbbisrXT1zW29dO2xldCBmPXQuX21heGltdW1IZWlnaHRzO2lmKGk9aChmKT9mLmxlbmd0aDowLGVbbisrXT1pLGgoZikpZm9yKG89MDtvPGk7KytvKWVbbisrXT1mW29dO3JldHVybiBZLnBhY2sodC5fZWxsaXBzb2lkLGUsbiksbis9WS5wYWNrZWRMZW5ndGgscHQucGFjayh0Ll92ZXJ0ZXhGb3JtYXQsZSxuKSxuKz1wdC5wYWNrZWRMZW5ndGgsZVtuXT10Ll9ncmFudWxhcml0eSxlfTtmMj1ZLmNsb25lKFkuVU5JVF9TUEhFUkUpLHUyPW5ldyBwdCx1dT17cG9zaXRpb25zOnZvaWQgMCxtaW5pbXVtSGVpZ2h0czp2b2lkIDAsbWF4aW11bUhlaWdodHM6dm9pZCAwLGVsbGlwc29pZDpmMix2ZXJ0ZXhGb3JtYXQ6dTIsZ3JhbnVsYXJpdHk6dm9pZCAwfTtFYy51bnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBEKCJhcnJheSBpcyByZXF1aXJlZCIpO2U9ZT8/MDtsZXQgbyxyPXRbZSsrXSxpPW5ldyBBcnJheShyKTtmb3Iobz0wO288cjsrK28sZSs9YS5wYWNrZWRMZW5ndGgpaVtvXT1hLnVucGFjayh0LGUpO3I9dFtlKytdO2xldCBzO2lmKHI+MClmb3Iocz1uZXcgQXJyYXkociksbz0wO288cjsrK28pc1tvXT10W2UrK107cj10W2UrK107bGV0IGY7aWYocj4wKWZvcihmPW5ldyBBcnJheShyKSxvPTA7bzxyOysrbylmW29dPXRbZSsrXTtsZXQgdT1ZLnVucGFjayh0LGUsZjIpO2UrPVkucGFja2VkTGVuZ3RoO2xldCBjPXB0LnVucGFjayh0LGUsdTIpO2UrPXB0LnBhY2tlZExlbmd0aDtsZXQgbD10W2VdO3JldHVybiBoKG4pPyhuLl9wb3NpdGlvbnM9aSxuLl9taW5pbXVtSGVpZ2h0cz1zLG4uX21heGltdW1IZWlnaHRzPWYsbi5fZWxsaXBzb2lkPVkuY2xvbmUodSxuLl9lbGxpcHNvaWQpLG4uX3ZlcnRleEZvcm1hdD1wdC5jbG9uZShjLG4uX3ZlcnRleEZvcm1hdCksbi5fZ3JhbnVsYXJpdHk9bCxuKToodXUucG9zaXRpb25zPWksdXUubWluaW11bUhlaWdodHM9cyx1dS5tYXhpbXVtSGVpZ2h0cz1mLHV1LmdyYW51bGFyaXR5PWwsbmV3IEVjKHV1KSl9O0VjLmZyb21Db25zdGFudEhlaWdodHM9ZnVuY3Rpb24odCl7dD10Pz9JdC5FTVBUWV9PQkpFQ1Q7bGV0IGU9dC5wb3NpdGlvbnM7aWYoIWgoZSkpdGhyb3cgbmV3IEQoIm9wdGlvbnMucG9zaXRpb25zIGlzIHJlcXVpcmVkLiIpO2xldCBuLG8scj10Lm1pbmltdW1IZWlnaHQsaT10Lm1heGltdW1IZWlnaHQscz1oKHIpLGY9aChpKTtpZihzfHxmKXtsZXQgYz1lLmxlbmd0aDtuPXM/bmV3IEFycmF5KGMpOnZvaWQgMCxvPWY/bmV3IEFycmF5KGMpOnZvaWQgMDtmb3IobGV0IGw9MDtsPGM7KytsKXMmJihuW2xdPXIpLGYmJihvW2xdPWkpfWxldCB1PXtwb3NpdGlvbnM6ZSxtYXhpbXVtSGVpZ2h0czpvLG1pbmltdW1IZWlnaHRzOm4sZWxsaXBzb2lkOnQuZWxsaXBzb2lkLHZlcnRleEZvcm1hdDp0LnZlcnRleEZvcm1hdH07cmV0dXJuIG5ldyBFYyh1KX07RWMuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7bGV0IGU9dC5fcG9zaXRpb25zLG49dC5fbWluaW11bUhlaWdodHMsbz10Ll9tYXhpbXVtSGVpZ2h0cyxyPXQuX3ZlcnRleEZvcm1hdCxpPXQuX2dyYW51bGFyaXR5LHM9dC5fZWxsaXBzb2lkLGY9ZW0uY29tcHV0ZVBvc2l0aW9ucyhzLGUsbyxuLGksITApO2lmKCFoKGYpKXJldHVybjtsZXQgdT1mLmJvdHRvbVBvc2l0aW9ucyxjPWYudG9wUG9zaXRpb25zLGw9Zi5udW1Db3JuZXJzLHA9Yy5sZW5ndGgsZD1wKjIsbT1yLnBvc2l0aW9uP25ldyBGbG9hdDY0QXJyYXkoZCk6dm9pZCAwLF89ci5ub3JtYWw/bmV3IEZsb2F0MzJBcnJheShkKTp2b2lkIDAsZz1yLnRhbmdlbnQ/bmV3IEZsb2F0MzJBcnJheShkKTp2b2lkIDAsYj1yLmJpdGFuZ2VudD9uZXcgRmxvYXQzMkFycmF5KGQpOnZvaWQgMCxUPXIuc3Q/bmV3IEZsb2F0MzJBcnJheShkLzMqMik6dm9pZCAwLE89MCxFPTAsdz0wLEM9MCxNPTAsTj14VSxGPUNVLEk9U1Usdj0hMDtwLz0zO2xldCBCLEE9MCxTPTEvKHAtbC0xKTtmb3IoQj0wO0I8cDsrK0Ipe2xldCBrPUIqMyxxPWEuZnJvbUFycmF5KGMsayxfZyksVz1hLmZyb21BcnJheSh1LGssbm0pO2lmKHIucG9zaXRpb24mJihtW08rK109Vy54LG1bTysrXT1XLnksbVtPKytdPVcueixtW08rK109cS54LG1bTysrXT1xLnksbVtPKytdPXEueiksci5zdCYmKFRbTSsrXT1BLFRbTSsrXT0wLFRbTSsrXT1BLFRbTSsrXT0xKSxyLm5vcm1hbHx8ci50YW5nZW50fHxyLmJpdGFuZ2VudCl7bGV0IFI9YS5jbG9uZShhLlpFUk8sYTIpLG50PWEuc3VidHJhY3QocSxzLmdlb2RldGljU3VyZmFjZU5vcm1hbChxLG5tKSxubSk7aWYoQisxPHAmJihSPWEuZnJvbUFycmF5KGMsayszLGEyKSksdil7bGV0IGF0PWEuc3VidHJhY3QoUixxLFJVKSxsdD1hLnN1YnRyYWN0KG50LHEsX2cpO049YS5ub3JtYWxpemUoYS5jcm9zcyhsdCxhdCxOKSxOKSx2PSExfWEuZXF1YWxzRXBzaWxvbihxLFIsUC5FUFNJTE9OMTApP3Y9ITA6KEErPVMsci50YW5nZW50JiYoRj1hLm5vcm1hbGl6ZShhLnN1YnRyYWN0KFIscSxGKSxGKSksci5iaXRhbmdlbnQmJihJPWEubm9ybWFsaXplKGEuY3Jvc3MoTixGLEkpLEkpKSksci5ub3JtYWwmJihfW0UrK109Ti54LF9bRSsrXT1OLnksX1tFKytdPU4ueixfW0UrK109Ti54LF9bRSsrXT1OLnksX1tFKytdPU4ueiksci50YW5nZW50JiYoZ1tDKytdPUYueCxnW0MrK109Ri55LGdbQysrXT1GLnosZ1tDKytdPUYueCxnW0MrK109Ri55LGdbQysrXT1GLnopLHIuYml0YW5nZW50JiYoYlt3KytdPUkueCxiW3crK109SS55LGJbdysrXT1JLnosYlt3KytdPUkueCxiW3crK109SS55LGJbdysrXT1JLnopfX1sZXQgeD1uZXcgaWU7ci5wb3NpdGlvbiYmKHgucG9zaXRpb249bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5ET1VCTEUsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczptfSkpLHIubm9ybWFsJiYoeC5ub3JtYWw9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOl99KSksci50YW5nZW50JiYoeC50YW5nZW50PW5ldyBpdCh7Y29tcG9uZW50RGF0YXR5cGU6ZXQuRkxPQVQsY29tcG9uZW50c1BlckF0dHJpYnV0ZTozLHZhbHVlczpnfSkpLHIuYml0YW5nZW50JiYoeC5iaXRhbmdlbnQ9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOmJ9KSksci5zdCYmKHguc3Q9bmV3IGl0KHtjb21wb25lbnREYXRhdHlwZTpldC5GTE9BVCxjb21wb25lbnRzUGVyQXR0cmlidXRlOjIsdmFsdWVzOlR9KSk7bGV0IEw9ZC8zO2QtPTYqKGwrMSk7bGV0IHo9RnQuY3JlYXRlVHlwZWRBcnJheShMLGQpLGo9MDtmb3IoQj0wO0I8TC0yO0IrPTIpe2xldCBrPUIscT1CKzIsVz1hLmZyb21BcnJheShtLGsqMyxfZyksUj1hLmZyb21BcnJheShtLHEqMyxubSk7aWYoYS5lcXVhbHNFcHNpbG9uKFcsUixQLkVQU0lMT04xMCkpY29udGludWU7bGV0IG50PUIrMSxhdD1CKzM7eltqKytdPW50LHpbaisrXT1rLHpbaisrXT1hdCx6W2orK109YXQseltqKytdPWsseltqKytdPXF9cmV0dXJuIG5ldyBCdCh7YXR0cmlidXRlczp4LGluZGljZXM6eixwcmltaXRpdmVUeXBlOkR0LlRSSUFOR0xFUyxib3VuZGluZ1NwaGVyZTpuZXcgZ3QuZnJvbVZlcnRpY2VzKG0pfSl9O3lnPUVjfSk7dmFyIGdnPXt9O2RlKGdnLHtkZWZhdWx0OigpPT5NVX0pO2Z1bmN0aW9uIFBVKHQsZSl7cmV0dXJuIGgoZSkmJih0PXlnLnVucGFjayh0LGUpKSx0Ll9lbGxpcHNvaWQ9WS5jbG9uZSh0Ll9lbGxpcHNvaWQpLHlnLmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBNVSxBZz0kKCgpPT57ZnQoKTskdCgpO2wyKCk7TVU9UFV9KTtmdW5jdGlvbiBSYyh0KXt0PXQ/P0l0LkVNUFRZX09CSkVDVDtsZXQgZT10LnBvc2l0aW9ucyxuPXQubWF4aW11bUhlaWdodHMsbz10Lm1pbmltdW1IZWlnaHRzO2lmKCFoKGUpKXRocm93IG5ldyBEKCJvcHRpb25zLnBvc2l0aW9ucyBpcyByZXF1aXJlZC4iKTtpZihoKG4pJiZuLmxlbmd0aCE9PWUubGVuZ3RoKXRocm93IG5ldyBEKCJvcHRpb25zLnBvc2l0aW9ucyBhbmQgb3B0aW9ucy5tYXhpbXVtSGVpZ2h0cyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoLiIpO2lmKGgobykmJm8ubGVuZ3RoIT09ZS5sZW5ndGgpdGhyb3cgbmV3IEQoIm9wdGlvbnMucG9zaXRpb25zIGFuZCBvcHRpb25zLm1pbmltdW1IZWlnaHRzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGguIik7bGV0IHI9dC5ncmFudWxhcml0eT8/UC5SQURJQU5TX1BFUl9ERUdSRUUsaT10LmVsbGlwc29pZD8/WS5kZWZhdWx0O3RoaXMuX3Bvc2l0aW9ucz1lLHRoaXMuX21pbmltdW1IZWlnaHRzPW8sdGhpcy5fbWF4aW11bUhlaWdodHM9bix0aGlzLl9ncmFudWxhcml0eT1yLHRoaXMuX2VsbGlwc29pZD1ZLmNsb25lKGkpLHRoaXMuX3dvcmtlck5hbWU9ImNyZWF0ZVdhbGxPdXRsaW5lR2VvbWV0cnkiO2xldCBzPTErZS5sZW5ndGgqYS5wYWNrZWRMZW5ndGgrMjtoKG8pJiYocys9by5sZW5ndGgpLGgobikmJihzKz1uLmxlbmd0aCksdGhpcy5wYWNrZWRMZW5ndGg9cytZLnBhY2tlZExlbmd0aCsxfXZhciBwMixkMixtMixsdSxiZyxoMj0kKCgpPT57dmUoKTtMdCgpO0RlKCk7eWUoKTtmdCgpO2p0KCk7JHQoKTtYZSgpO1llKCk7YW4oKTskZSgpO0t0KCk7dG4oKTtoZygpO3AyPW5ldyBhLGQyPW5ldyBhO1JjLnBhY2s9ZnVuY3Rpb24odCxlLG4pe2lmKCFoKHQpKXRocm93IG5ldyBEKCJ2YWx1ZSBpcyByZXF1aXJlZCIpO2lmKCFoKGUpKXRocm93IG5ldyBEKCJhcnJheSBpcyByZXF1aXJlZCIpO249bj8/MDtsZXQgbyxyPXQuX3Bvc2l0aW9ucyxpPXIubGVuZ3RoO2ZvcihlW24rK109aSxvPTA7bzxpOysrbyxuKz1hLnBhY2tlZExlbmd0aClhLnBhY2socltvXSxlLG4pO2xldCBzPXQuX21pbmltdW1IZWlnaHRzO2lmKGk9aChzKT9zLmxlbmd0aDowLGVbbisrXT1pLGgocykpZm9yKG89MDtvPGk7KytvKWVbbisrXT1zW29dO2xldCBmPXQuX21heGltdW1IZWlnaHRzO2lmKGk9aChmKT9mLmxlbmd0aDowLGVbbisrXT1pLGgoZikpZm9yKG89MDtvPGk7KytvKWVbbisrXT1mW29dO3JldHVybiBZLnBhY2sodC5fZWxsaXBzb2lkLGUsbiksbis9WS5wYWNrZWRMZW5ndGgsZVtuXT10Ll9ncmFudWxhcml0eSxlfTttMj1ZLmNsb25lKFkuVU5JVF9TUEhFUkUpLGx1PXtwb3NpdGlvbnM6dm9pZCAwLG1pbmltdW1IZWlnaHRzOnZvaWQgMCxtYXhpbXVtSGVpZ2h0czp2b2lkIDAsZWxsaXBzb2lkOm0yLGdyYW51bGFyaXR5OnZvaWQgMH07UmMudW5wYWNrPWZ1bmN0aW9uKHQsZSxuKXtpZighaCh0KSl0aHJvdyBuZXcgRCgiYXJyYXkgaXMgcmVxdWlyZWQiKTtlPWU/PzA7bGV0IG8scj10W2UrK10saT1uZXcgQXJyYXkocik7Zm9yKG89MDtvPHI7KytvLGUrPWEucGFja2VkTGVuZ3RoKWlbb109YS51bnBhY2sodCxlKTtyPXRbZSsrXTtsZXQgcztpZihyPjApZm9yKHM9bmV3IEFycmF5KHIpLG89MDtvPHI7KytvKXNbb109dFtlKytdO3I9dFtlKytdO2xldCBmO2lmKHI+MClmb3IoZj1uZXcgQXJyYXkociksbz0wO288cjsrK28pZltvXT10W2UrK107bGV0IHU9WS51bnBhY2sodCxlLG0yKTtlKz1ZLnBhY2tlZExlbmd0aDtsZXQgYz10W2VdO3JldHVybiBoKG4pPyhuLl9wb3NpdGlvbnM9aSxuLl9taW5pbXVtSGVpZ2h0cz1zLG4uX21heGltdW1IZWlnaHRzPWYsbi5fZWxsaXBzb2lkPVkuY2xvbmUodSxuLl9lbGxpcHNvaWQpLG4uX2dyYW51bGFyaXR5PWMsbik6KGx1LnBvc2l0aW9ucz1pLGx1Lm1pbmltdW1IZWlnaHRzPXMsbHUubWF4aW11bUhlaWdodHM9ZixsdS5ncmFudWxhcml0eT1jLG5ldyBSYyhsdSkpfTtSYy5mcm9tQ29uc3RhbnRIZWlnaHRzPWZ1bmN0aW9uKHQpe3Q9dD8/SXQuRU1QVFlfT0JKRUNUO2xldCBlPXQucG9zaXRpb25zO2lmKCFoKGUpKXRocm93IG5ldyBEKCJvcHRpb25zLnBvc2l0aW9ucyBpcyByZXF1aXJlZC4iKTtsZXQgbixvLHI9dC5taW5pbXVtSGVpZ2h0LGk9dC5tYXhpbXVtSGVpZ2h0LHM9aChyKSxmPWgoaSk7aWYoc3x8Zil7bGV0IGM9ZS5sZW5ndGg7bj1zP25ldyBBcnJheShjKTp2b2lkIDAsbz1mP25ldyBBcnJheShjKTp2b2lkIDA7Zm9yKGxldCBsPTA7bDxjOysrbClzJiYobltsXT1yKSxmJiYob1tsXT1pKX1sZXQgdT17cG9zaXRpb25zOmUsbWF4aW11bUhlaWdodHM6byxtaW5pbXVtSGVpZ2h0czpuLGVsbGlwc29pZDp0LmVsbGlwc29pZH07cmV0dXJuIG5ldyBSYyh1KX07UmMuY3JlYXRlR2VvbWV0cnk9ZnVuY3Rpb24odCl7bGV0IGU9dC5fcG9zaXRpb25zLG49dC5fbWluaW11bUhlaWdodHMsbz10Ll9tYXhpbXVtSGVpZ2h0cyxyPXQuX2dyYW51bGFyaXR5LGk9dC5fZWxsaXBzb2lkLHM9ZW0uY29tcHV0ZVBvc2l0aW9ucyhpLGUsbyxuLHIsITEpO2lmKCFoKHMpKXJldHVybjtsZXQgZj1zLmJvdHRvbVBvc2l0aW9ucyx1PXMudG9wUG9zaXRpb25zLGM9dS5sZW5ndGgsbD1jKjIscD1uZXcgRmxvYXQ2NEFycmF5KGwpLGQ9MDtjLz0zO2xldCBtO2ZvcihtPTA7bTxjOysrbSl7bGV0IE89bSozLEU9YS5mcm9tQXJyYXkodSxPLHAyKSx3PWEuZnJvbUFycmF5KGYsTyxkMik7cFtkKytdPXcueCxwW2QrK109dy55LHBbZCsrXT13LnoscFtkKytdPUUueCxwW2QrK109RS55LHBbZCsrXT1FLnp9bGV0IF89bmV3IGllKHtwb3NpdGlvbjpuZXcgaXQoe2NvbXBvbmVudERhdGF0eXBlOmV0LkRPVUJMRSxjb21wb25lbnRzUGVyQXR0cmlidXRlOjMsdmFsdWVzOnB9KX0pLGc9bC8zO2w9MipnLTQrZztsZXQgYj1GdC5jcmVhdGVUeXBlZEFycmF5KGcsbCksVD0wO2ZvcihtPTA7bTxnLTI7bSs9Mil7bGV0IE89bSxFPW0rMix3PWEuZnJvbUFycmF5KHAsTyozLHAyKSxDPWEuZnJvbUFycmF5KHAsRSozLGQyKTtpZihhLmVxdWFsc0Vwc2lsb24odyxDLFAuRVBTSUxPTjEwKSljb250aW51ZTtsZXQgTT1tKzEsTj1tKzM7YltUKytdPU0sYltUKytdPU8sYltUKytdPU0sYltUKytdPU4sYltUKytdPU8sYltUKytdPUV9cmV0dXJuIGJbVCsrXT1nLTIsYltUKytdPWctMSxuZXcgQnQoe2F0dHJpYnV0ZXM6XyxpbmRpY2VzOmIscHJpbWl0aXZlVHlwZTpEdC5MSU5FUyxib3VuZGluZ1NwaGVyZTpuZXcgZ3QuZnJvbVZlcnRpY2VzKHApfSl9O2JnPVJjfSk7dmFyIFRnPXt9O2RlKFRnLHtkZWZhdWx0OigpPT5JVX0pO2Z1bmN0aW9uIE5VKHQsZSl7cmV0dXJuIGgoZSkmJih0PWJnLnVucGFjayh0LGUpKSx0Ll9lbGxpcHNvaWQ9WS5jbG9uZSh0Ll9lbGxpcHNvaWQpLGJnLmNyZWF0ZUdlb21ldHJ5KHQpfXZhciBJVSx3Zz0kKCgpPT57ZnQoKTskdCgpO2gyKCk7SVU9TlV9KTt2YXIgUmc9WG4oKHB1LEVnKT0+e3ZhciBVdD1VdHx8e307VXQuc2NvcGU9e307VXQuYXJyYXlJdGVyYXRvckltcGw9ZnVuY3Rpb24odCl7dmFyIGU9MDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZTx0Lmxlbmd0aD97ZG9uZTohMSx2YWx1ZTp0W2UrK119Ontkb25lOiEwfX19O1V0LmFycmF5SXRlcmF0b3I9ZnVuY3Rpb24odCl7cmV0dXJue25leHQ6VXQuYXJyYXlJdGVyYXRvckltcGwodCl9fTtVdC5tYWtlSXRlcmF0b3I9ZnVuY3Rpb24odCl7dmFyIGU9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC5pdGVyYXRvciYmdFtTeW1ib2wuaXRlcmF0b3JdO3JldHVybiBlP2UuY2FsbCh0KTpVdC5hcnJheUl0ZXJhdG9yKHQpfTtVdC5BU1NVTUVfRVM1PSExO1V0LkFTU1VNRV9OT19OQVRJVkVfTUFQPSExO1V0LkFTU1VNRV9OT19OQVRJVkVfU0VUPSExO1V0LlNJTVBMRV9GUk9VTkRfUE9MWUZJTEw9ITE7VXQuSVNPTEFURV9QT0xZRklMTFM9ITE7VXQuRk9SQ0VfUE9MWUZJTExfUFJPTUlTRT0hMTtVdC5GT1JDRV9QT0xZRklMTF9QUk9NSVNFX1dIRU5fTk9fVU5IQU5ETEVEX1JFSkVDVElPTj0hMTtVdC5nZXRHbG9iYWw9ZnVuY3Rpb24odCl7dD1bdHlwZW9mIGdsb2JhbFRoaXM9PSJvYmplY3QiJiZnbG9iYWxUaGlzLHQsdHlwZW9mIHdpbmRvdz09Im9iamVjdCImJndpbmRvdyx0eXBlb2Ygc2VsZj09Im9iamVjdCImJnNlbGYsdHlwZW9mIGdsb2JhbD09Im9iamVjdCImJmdsb2JhbF07Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDsrK2Upe3ZhciBuPXRbZV07aWYobiYmbi5NYXRoPT1NYXRoKXJldHVybiBufXRocm93IEVycm9yKCJDYW5ub3QgZmluZCBnbG9iYWwgb2JqZWN0Iil9O1V0Lmdsb2JhbD1VdC5nZXRHbG9iYWwocHUpO1V0LmRlZmluZVByb3BlcnR5PVV0LkFTU1VNRV9FUzV8fHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydGllcz09ImZ1bmN0aW9uIj9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24odCxlLG4pe3JldHVybiB0PT1BcnJheS5wcm90b3R5cGV8fHQ9PU9iamVjdC5wcm90b3R5cGV8fCh0W2VdPW4udmFsdWUpLHR9O1V0LklTX1NZTUJPTF9OQVRJVkU9dHlwZW9mIFN5bWJvbD09ImZ1bmN0aW9uIiYmdHlwZW9mIFN5bWJvbCgieCIpPT0ic3ltYm9sIjtVdC5UUlVTVF9FUzZfUE9MWUZJTExTPSFVdC5JU09MQVRFX1BPTFlGSUxMU3x8VXQuSVNfU1lNQk9MX05BVElWRTtVdC5wb2x5ZmlsbHM9e307VXQucHJvcGVydHlUb1BvbHlmaWxsU3ltYm9sPXt9O1V0LlBPTFlGSUxMX1BSRUZJWD0iJGpzY3AkIjtVdC5wb2x5ZmlsbD1mdW5jdGlvbih0LGUsbixvKXtlJiYoVXQuSVNPTEFURV9QT0xZRklMTFM/VXQucG9seWZpbGxJc29sYXRlZCh0LGUsbixvKTpVdC5wb2x5ZmlsbFVuaXNvbGF0ZWQodCxlLG4sbykpfTtVdC5wb2x5ZmlsbFVuaXNvbGF0ZWQ9ZnVuY3Rpb24odCxlLG4sbyl7Zm9yKG49VXQuZ2xvYmFsLHQ9dC5zcGxpdCgiLiIpLG89MDtvPHQubGVuZ3RoLTE7bysrKXt2YXIgcj10W29dO2lmKCEociBpbiBuKSlyZXR1cm47bj1uW3JdfXQ9dFt0Lmxlbmd0aC0xXSxvPW5bdF0sZT1lKG8pLGUhPW8mJmUhPW51bGwmJlV0LmRlZmluZVByb3BlcnR5KG4sdCx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmV9KX07VXQucG9seWZpbGxJc29sYXRlZD1mdW5jdGlvbih0LGUsbixvKXt2YXIgcj10LnNwbGl0KCIuIik7dD1yLmxlbmd0aD09PTEsbz1yWzBdLG89IXQmJm8gaW4gVXQucG9seWZpbGxzP1V0LnBvbHlmaWxsczpVdC5nbG9iYWw7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aC0xO2krKyl7dmFyIHM9cltpXTtpZighKHMgaW4gbykpcmV0dXJuO289b1tzXX1yPXJbci5sZW5ndGgtMV0sbj1VdC5JU19TWU1CT0xfTkFUSVZFJiZuPT09ImVzNiI/b1tyXTpudWxsLGU9ZShuKSxlIT1udWxsJiYodD9VdC5kZWZpbmVQcm9wZXJ0eShVdC5wb2x5ZmlsbHMscix7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmV9KTplIT09biYmKFV0LnByb3BlcnR5VG9Qb2x5ZmlsbFN5bWJvbFtyXT09PXZvaWQgMCYmKG49MWU5Kk1hdGgucmFuZG9tKCk+Pj4wLFV0LnByb3BlcnR5VG9Qb2x5ZmlsbFN5bWJvbFtyXT1VdC5JU19TWU1CT0xfTkFUSVZFP1V0Lmdsb2JhbC5TeW1ib2wocik6VXQuUE9MWUZJTExfUFJFRklYK24rIiQiK3IpLFV0LmRlZmluZVByb3BlcnR5KG8sVXQucHJvcGVydHlUb1BvbHlmaWxsU3ltYm9sW3JdLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZX0pKSl9O1V0LnBvbHlmaWxsKCJQcm9taXNlIixmdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7dGhpcy5iYXRjaF89bnVsbH1mdW5jdGlvbiBuKHMpe3JldHVybiBzIGluc3RhbmNlb2Ygcj9zOm5ldyByKGZ1bmN0aW9uKGYsdSl7ZihzKX0pfWlmKHQmJighKFV0LkZPUkNFX1BPTFlGSUxMX1BST01JU0V8fFV0LkZPUkNFX1BPTFlGSUxMX1BST01JU0VfV0hFTl9OT19VTkhBTkRMRURfUkVKRUNUSU9OJiZ0eXBlb2YgVXQuZ2xvYmFsLlByb21pc2VSZWplY3Rpb25FdmVudD4idSIpfHwhVXQuZ2xvYmFsLlByb21pc2V8fFV0Lmdsb2JhbC5Qcm9taXNlLnRvU3RyaW5nKCkuaW5kZXhPZigiW25hdGl2ZSBjb2RlXSIpPT09LTEpKXJldHVybiB0O2UucHJvdG90eXBlLmFzeW5jRXhlY3V0ZT1mdW5jdGlvbihzKXtpZih0aGlzLmJhdGNoXz09bnVsbCl7dGhpcy5iYXRjaF89W107dmFyIGY9dGhpczt0aGlzLmFzeW5jRXhlY3V0ZUZ1bmN0aW9uKGZ1bmN0aW9uKCl7Zi5leGVjdXRlQmF0Y2hfKCl9KX10aGlzLmJhdGNoXy5wdXNoKHMpfTt2YXIgbz1VdC5nbG9iYWwuc2V0VGltZW91dDtlLnByb3RvdHlwZS5hc3luY0V4ZWN1dGVGdW5jdGlvbj1mdW5jdGlvbihzKXtvKHMsMCl9LGUucHJvdG90eXBlLmV4ZWN1dGVCYXRjaF89ZnVuY3Rpb24oKXtmb3IoO3RoaXMuYmF0Y2hfJiZ0aGlzLmJhdGNoXy5sZW5ndGg7KXt2YXIgcz10aGlzLmJhdGNoXzt0aGlzLmJhdGNoXz1bXTtmb3IodmFyIGY9MDtmPHMubGVuZ3RoOysrZil7dmFyIHU9c1tmXTtzW2ZdPW51bGw7dHJ5e3UoKX1jYXRjaChjKXt0aGlzLmFzeW5jVGhyb3dfKGMpfX19dGhpcy5iYXRjaF89bnVsbH0sZS5wcm90b3R5cGUuYXN5bmNUaHJvd189ZnVuY3Rpb24ocyl7dGhpcy5hc3luY0V4ZWN1dGVGdW5jdGlvbihmdW5jdGlvbigpe3Rocm93IHN9KX07dmFyIHI9ZnVuY3Rpb24ocyl7dGhpcy5zdGF0ZV89MCx0aGlzLnJlc3VsdF89dm9pZCAwLHRoaXMub25TZXR0bGVkQ2FsbGJhY2tzXz1bXSx0aGlzLmlzUmVqZWN0aW9uSGFuZGxlZF89ITE7dmFyIGY9dGhpcy5jcmVhdGVSZXNvbHZlQW5kUmVqZWN0XygpO3RyeXtzKGYucmVzb2x2ZSxmLnJlamVjdCl9Y2F0Y2godSl7Zi5yZWplY3QodSl9fTtyLnByb3RvdHlwZS5jcmVhdGVSZXNvbHZlQW5kUmVqZWN0Xz1mdW5jdGlvbigpe2Z1bmN0aW9uIHMoYyl7cmV0dXJuIGZ1bmN0aW9uKGwpe3V8fCh1PSEwLGMuY2FsbChmLGwpKX19dmFyIGY9dGhpcyx1PSExO3JldHVybntyZXNvbHZlOnModGhpcy5yZXNvbHZlVG9fKSxyZWplY3Q6cyh0aGlzLnJlamVjdF8pfX0sci5wcm90b3R5cGUucmVzb2x2ZVRvXz1mdW5jdGlvbihzKXtpZihzPT09dGhpcyl0aGlzLnJlamVjdF8obmV3IFR5cGVFcnJvcigiQSBQcm9taXNlIGNhbm5vdCByZXNvbHZlIHRvIGl0c2VsZiIpKTtlbHNlIGlmKHMgaW5zdGFuY2VvZiByKXRoaXMuc2V0dGxlU2FtZUFzUHJvbWlzZV8ocyk7ZWxzZXt0OnN3aXRjaCh0eXBlb2Ygcyl7Y2FzZSJvYmplY3QiOnZhciBmPXMhPW51bGw7YnJlYWsgdDtjYXNlImZ1bmN0aW9uIjpmPSEwO2JyZWFrIHQ7ZGVmYXVsdDpmPSExfWY/dGhpcy5yZXNvbHZlVG9Ob25Qcm9taXNlT2JqXyhzKTp0aGlzLmZ1bGZpbGxfKHMpfX0sci5wcm90b3R5cGUucmVzb2x2ZVRvTm9uUHJvbWlzZU9ial89ZnVuY3Rpb24ocyl7dmFyIGY9dm9pZCAwO3RyeXtmPXMudGhlbn1jYXRjaCh1KXt0aGlzLnJlamVjdF8odSk7cmV0dXJufXR5cGVvZiBmPT0iZnVuY3Rpb24iP3RoaXMuc2V0dGxlU2FtZUFzVGhlbmFibGVfKGYscyk6dGhpcy5mdWxmaWxsXyhzKX0sci5wcm90b3R5cGUucmVqZWN0Xz1mdW5jdGlvbihzKXt0aGlzLnNldHRsZV8oMixzKX0sci5wcm90b3R5cGUuZnVsZmlsbF89ZnVuY3Rpb24ocyl7dGhpcy5zZXR0bGVfKDEscyl9LHIucHJvdG90eXBlLnNldHRsZV89ZnVuY3Rpb24ocyxmKXtpZih0aGlzLnN0YXRlXyE9MCl0aHJvdyBFcnJvcigiQ2Fubm90IHNldHRsZSgiK3MrIiwgIitmKyIpOiBQcm9taXNlIGFscmVhZHkgc2V0dGxlZCBpbiBzdGF0ZSIrdGhpcy5zdGF0ZV8pO3RoaXMuc3RhdGVfPXMsdGhpcy5yZXN1bHRfPWYsdGhpcy5zdGF0ZV89PT0yJiZ0aGlzLnNjaGVkdWxlVW5oYW5kbGVkUmVqZWN0aW9uQ2hlY2tfKCksdGhpcy5leGVjdXRlT25TZXR0bGVkQ2FsbGJhY2tzXygpfSxyLnByb3RvdHlwZS5zY2hlZHVsZVVuaGFuZGxlZFJlamVjdGlvbkNoZWNrXz1mdW5jdGlvbigpe3ZhciBzPXRoaXM7byhmdW5jdGlvbigpe2lmKHMubm90aWZ5VW5oYW5kbGVkUmVqZWN0aW9uXygpKXt2YXIgZj1VdC5nbG9iYWwuY29uc29sZTt0eXBlb2YgZjwidSImJmYuZXJyb3Iocy5yZXN1bHRfKX19LDEpfSxyLnByb3RvdHlwZS5ub3RpZnlVbmhhbmRsZWRSZWplY3Rpb25fPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1JlamVjdGlvbkhhbmRsZWRfKXJldHVybiExO3ZhciBzPVV0Lmdsb2JhbC5DdXN0b21FdmVudCxmPVV0Lmdsb2JhbC5FdmVudCx1PVV0Lmdsb2JhbC5kaXNwYXRjaEV2ZW50O3JldHVybiB0eXBlb2YgdT4idSI/ITA6KHR5cGVvZiBzPT0iZnVuY3Rpb24iP3M9bmV3IHMoInVuaGFuZGxlZHJlamVjdGlvbiIse2NhbmNlbGFibGU6ITB9KTp0eXBlb2YgZj09ImZ1bmN0aW9uIj9zPW5ldyBmKCJ1bmhhbmRsZWRyZWplY3Rpb24iLHtjYW5jZWxhYmxlOiEwfSk6KHM9VXQuZ2xvYmFsLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJDdXN0b21FdmVudCIpLHMuaW5pdEN1c3RvbUV2ZW50KCJ1bmhhbmRsZWRyZWplY3Rpb24iLCExLCEwLHMpKSxzLnByb21pc2U9dGhpcyxzLnJlYXNvbj10aGlzLnJlc3VsdF8sdShzKSl9LHIucHJvdG90eXBlLmV4ZWN1dGVPblNldHRsZWRDYWxsYmFja3NfPWZ1bmN0aW9uKCl7aWYodGhpcy5vblNldHRsZWRDYWxsYmFja3NfIT1udWxsKXtmb3IodmFyIHM9MDtzPHRoaXMub25TZXR0bGVkQ2FsbGJhY2tzXy5sZW5ndGg7KytzKWkuYXN5bmNFeGVjdXRlKHRoaXMub25TZXR0bGVkQ2FsbGJhY2tzX1tzXSk7dGhpcy5vblNldHRsZWRDYWxsYmFja3NfPW51bGx9fTt2YXIgaT1uZXcgZTtyZXR1cm4gci5wcm90b3R5cGUuc2V0dGxlU2FtZUFzUHJvbWlzZV89ZnVuY3Rpb24ocyl7dmFyIGY9dGhpcy5jcmVhdGVSZXNvbHZlQW5kUmVqZWN0XygpO3MuY2FsbFdoZW5TZXR0bGVkXyhmLnJlc29sdmUsZi5yZWplY3QpfSxyLnByb3RvdHlwZS5zZXR0bGVTYW1lQXNUaGVuYWJsZV89ZnVuY3Rpb24ocyxmKXt2YXIgdT10aGlzLmNyZWF0ZVJlc29sdmVBbmRSZWplY3RfKCk7dHJ5e3MuY2FsbChmLHUucmVzb2x2ZSx1LnJlamVjdCl9Y2F0Y2goYyl7dS5yZWplY3QoYyl9fSxyLnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKHMsZil7ZnVuY3Rpb24gdShkLG0pe3JldHVybiB0eXBlb2YgZD09ImZ1bmN0aW9uIj9mdW5jdGlvbihfKXt0cnl7YyhkKF8pKX1jYXRjaChnKXtsKGcpfX06bX12YXIgYyxsLHA9bmV3IHIoZnVuY3Rpb24oZCxtKXtjPWQsbD1tfSk7cmV0dXJuIHRoaXMuY2FsbFdoZW5TZXR0bGVkXyh1KHMsYyksdShmLGwpKSxwfSxyLnByb3RvdHlwZS5jYXRjaD1mdW5jdGlvbihzKXtyZXR1cm4gdGhpcy50aGVuKHZvaWQgMCxzKX0sci5wcm90b3R5cGUuY2FsbFdoZW5TZXR0bGVkXz1mdW5jdGlvbihzLGYpe2Z1bmN0aW9uIHUoKXtzd2l0Y2goYy5zdGF0ZV8pe2Nhc2UgMTpzKGMucmVzdWx0Xyk7YnJlYWs7Y2FzZSAyOmYoYy5yZXN1bHRfKTticmVhaztkZWZhdWx0OnRocm93IEVycm9yKCJVbmV4cGVjdGVkIHN0YXRlOiAiK2Muc3RhdGVfKX19dmFyIGM9dGhpczt0aGlzLm9uU2V0dGxlZENhbGxiYWNrc189PW51bGw/aS5hc3luY0V4ZWN1dGUodSk6dGhpcy5vblNldHRsZWRDYWxsYmFja3NfLnB1c2godSksdGhpcy5pc1JlamVjdGlvbkhhbmRsZWRfPSEwfSxyLnJlc29sdmU9bixyLnJlamVjdD1mdW5jdGlvbihzKXtyZXR1cm4gbmV3IHIoZnVuY3Rpb24oZix1KXt1KHMpfSl9LHIucmFjZT1mdW5jdGlvbihzKXtyZXR1cm4gbmV3IHIoZnVuY3Rpb24oZix1KXtmb3IodmFyIGM9VXQubWFrZUl0ZXJhdG9yKHMpLGw9Yy5uZXh0KCk7IWwuZG9uZTtsPWMubmV4dCgpKW4obC52YWx1ZSkuY2FsbFdoZW5TZXR0bGVkXyhmLHUpfSl9LHIuYWxsPWZ1bmN0aW9uKHMpe3ZhciBmPVV0Lm1ha2VJdGVyYXRvcihzKSx1PWYubmV4dCgpO3JldHVybiB1LmRvbmU/bihbXSk6bmV3IHIoZnVuY3Rpb24oYyxsKXtmdW5jdGlvbiBwKF8pe3JldHVybiBmdW5jdGlvbihnKXtkW19dPWcsbS0tLG09PTAmJmMoZCl9fXZhciBkPVtdLG09MDtkbyBkLnB1c2godm9pZCAwKSxtKyssbih1LnZhbHVlKS5jYWxsV2hlblNldHRsZWRfKHAoZC5sZW5ndGgtMSksbCksdT1mLm5leHQoKTt3aGlsZSghdS5kb25lKX0pfSxyfSwiZXM2IiwiZXMzIik7VXQub3ducz1mdW5jdGlvbih0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX07VXQuYXNzaWduPVV0LlRSVVNUX0VTNl9QT0xZRklMTFMmJnR5cGVvZiBPYmplY3QuYXNzaWduPT0iZnVuY3Rpb24iP09iamVjdC5hc3NpZ246ZnVuY3Rpb24odCxlKXtmb3IodmFyIG49MTtuPGFyZ3VtZW50cy5sZW5ndGg7bisrKXt2YXIgbz1hcmd1bWVudHNbbl07aWYobylmb3IodmFyIHIgaW4gbylVdC5vd25zKG8scikmJih0W3JdPW9bcl0pfXJldHVybiB0fTtVdC5wb2x5ZmlsbCgiT2JqZWN0LmFzc2lnbiIsZnVuY3Rpb24odCl7cmV0dXJuIHR8fFV0LmFzc2lnbn0sImVzNiIsImVzMyIpO1V0LmNoZWNrU3RyaW5nQXJncz1mdW5jdGlvbih0LGUsbil7aWYodD09bnVsbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgJ3RoaXMnIHZhbHVlIGZvciBTdHJpbmcucHJvdG90eXBlLiIrbisiIG11c3Qgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkIik7aWYoZSBpbnN0YW5jZW9mIFJlZ0V4cCl0aHJvdyBuZXcgVHlwZUVycm9yKCJGaXJzdCBhcmd1bWVudCB0byBTdHJpbmcucHJvdG90eXBlLiIrbisiIG11c3Qgbm90IGJlIGEgcmVndWxhciBleHByZXNzaW9uIik7cmV0dXJuIHQrIiJ9O1V0LnBvbHlmaWxsKCJTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgiLGZ1bmN0aW9uKHQpe3JldHVybiB0fHxmdW5jdGlvbihlLG4pe3ZhciBvPVV0LmNoZWNrU3RyaW5nQXJncyh0aGlzLGUsInN0YXJ0c1dpdGgiKTtlKz0iIjt2YXIgcj1vLmxlbmd0aCxpPWUubGVuZ3RoO249TWF0aC5tYXgoMCxNYXRoLm1pbihufDAsby5sZW5ndGgpKTtmb3IodmFyIHM9MDtzPGkmJm48cjspaWYob1tuKytdIT1lW3MrK10pcmV0dXJuITE7cmV0dXJuIHM+PWl9fSwiZXM2IiwiZXMzIik7VXQucG9seWZpbGwoIkFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluIixmdW5jdGlvbih0KXtmdW5jdGlvbiBlKG4pe3JldHVybiBuPU51bWJlcihuKSxuPT09MS8wfHxuPT09LTEvMD9uOm58MH1yZXR1cm4gdHx8ZnVuY3Rpb24obixvLHIpe3ZhciBpPXRoaXMubGVuZ3RoO2lmKG49ZShuKSxvPWUobykscj1yPT09dm9pZCAwP2k6ZShyKSxuPTA+bj9NYXRoLm1heChpK24sMCk6TWF0aC5taW4obixpKSxvPTA+bz9NYXRoLm1heChpK28sMCk6TWF0aC5taW4obyxpKSxyPTA+cj9NYXRoLm1heChpK3IsMCk6TWF0aC5taW4ocixpKSxuPG8pZm9yKDtvPHI7KW8gaW4gdGhpcz90aGlzW24rK109dGhpc1tvKytdOihkZWxldGUgdGhpc1tuKytdLG8rKyk7ZWxzZSBmb3Iocj1NYXRoLm1pbihyLGkrby1uKSxuKz1yLW87cj5vOyktLXIgaW4gdGhpcz90aGlzWy0tbl09dGhpc1tyXTpkZWxldGUgdGhpc1stLW5dO3JldHVybiB0aGlzfX0sImVzNiIsImVzMyIpO1V0LnR5cGVkQXJyYXlDb3B5V2l0aGluPWZ1bmN0aW9uKHQpe3JldHVybiB0fHxBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbn07VXQucG9seWZpbGwoIkludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiIsVXQudHlwZWRBcnJheUNvcHlXaXRoaW4sImVzNiIsImVzNSIpO1V0LnBvbHlmaWxsKCJVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluIixVdC50eXBlZEFycmF5Q29weVdpdGhpbiwiZXM2IiwiZXM1Iik7VXQucG9seWZpbGwoIlVpbnQ4Q2xhbXBlZEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluIixVdC50eXBlZEFycmF5Q29weVdpdGhpbiwiZXM2IiwiZXM1Iik7VXQucG9seWZpbGwoIkludDE2QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4iLFV0LnR5cGVkQXJyYXlDb3B5V2l0aGluLCJlczYiLCJlczUiKTtVdC5wb2x5ZmlsbCgiVWludDE2QXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4iLFV0LnR5cGVkQXJyYXlDb3B5V2l0aGluLCJlczYiLCJlczUiKTtVdC5wb2x5ZmlsbCgiSW50MzJBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiIsVXQudHlwZWRBcnJheUNvcHlXaXRoaW4sImVzNiIsImVzNSIpO1V0LnBvbHlmaWxsKCJVaW50MzJBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiIsVXQudHlwZWRBcnJheUNvcHlXaXRoaW4sImVzNiIsImVzNSIpO1V0LnBvbHlmaWxsKCJGbG9hdDMyQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4iLFV0LnR5cGVkQXJyYXlDb3B5V2l0aGluLCJlczYiLCJlczUiKTtVdC5wb2x5ZmlsbCgiRmxvYXQ2NEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluIixVdC50eXBlZEFycmF5Q29weVdpdGhpbiwiZXM2IiwiZXM1Iik7dmFyIE9nPWZ1bmN0aW9uKCl7dmFyIHQ9dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY3VycmVudFNjcmlwdD9kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYzp2b2lkIDA7cmV0dXJuIHR5cGVvZiBfX2ZpbGVuYW1lPCJ1IiYmKHQ9dHx8X19maWxlbmFtZSksZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbihWKXtyZXR1cm4gUi5sb2NhdGVGaWxlP1IubG9jYXRlRmlsZShWLGR0KTpkdCtWfWZ1bmN0aW9uIG8oVixLLHR0KXt2YXIgTXQ9Syt0dDtmb3IodHQ9SztWW3R0XSYmISh0dD49TXQpOykrK3R0O2lmKDE2PHR0LUsmJlYuYnVmZmVyJiZnZSlyZXR1cm4gZ2UuZGVjb2RlKFYuc3ViYXJyYXkoSyx0dCkpO2ZvcihNdD0iIjtLPHR0Oyl7dmFyIHVlPVZbSysrXTtpZih1ZSYxMjgpe3ZhciBUZT1WW0srK10mNjM7aWYoKHVlJjIyNCk9PTE5MilNdCs9U3RyaW5nLmZyb21DaGFyQ29kZSgodWUmMzEpPDw2fFRlKTtlbHNle3ZhciBPaT1WW0srK10mNjM7dWU9KHVlJjI0MCk9PTIyND8odWUmMTUpPDwxMnxUZTw8NnxPaToodWUmNyk8PDE4fFRlPDwxMnxPaTw8NnxWW0srK10mNjMsNjU1MzY+dWU/TXQrPVN0cmluZy5mcm9tQ2hhckNvZGUodWUpOih1ZS09NjU1MzYsTXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8dWU+PjEwLDU2MzIwfHVlJjEwMjMpKX19ZWxzZSBNdCs9U3RyaW5nLmZyb21DaGFyQ29kZSh1ZSl9cmV0dXJuIE10fWZ1bmN0aW9uIHIoVixLKXtyZXR1cm4gVj9vKHVuLFYsSyk6IiJ9ZnVuY3Rpb24gaSgpe3ZhciBWPVF0LmJ1ZmZlcjtSLkhFQVA4PUVlPW5ldyBJbnQ4QXJyYXkoViksUi5IRUFQMTY9bmV3IEludDE2QXJyYXkoViksUi5IRUFQMzI9R2U9bmV3IEludDMyQXJyYXkoViksUi5IRUFQVTg9dW49bmV3IFVpbnQ4QXJyYXkoViksUi5IRUFQVTE2PW5ldyBVaW50MTZBcnJheShWKSxSLkhFQVBVMzI9YmU9bmV3IFVpbnQzMkFycmF5KFYpLFIuSEVBUEYzMj1uZXcgRmxvYXQzMkFycmF5KFYpLFIuSEVBUEY2ND1uZXcgRmxvYXQ2NEFycmF5KFYpfWZ1bmN0aW9uIHMoVil7dGhyb3cgUi5vbkFib3J0JiZSLm9uQWJvcnQoViksVj0iQWJvcnRlZCgiK1YrIikiLGZlKFYpLE5lPSEwLFY9bmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcihWKyIuIEJ1aWxkIHdpdGggLXNBU1NFUlRJT05TIGZvciBtb3JlIGluZm8uIiksYXQoViksVn1mdW5jdGlvbiBmKFYpe3RyeXtpZihWPT1zbiYmWnQpcmV0dXJuIG5ldyBVaW50OEFycmF5KFp0KTtpZihsZSlyZXR1cm4gbGUoVik7dGhyb3ciYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWQifWNhdGNoKEspe3MoSyl9fWZ1bmN0aW9uIHUoKXtpZighWnQmJihQdHx8eXQpKXtpZih0eXBlb2YgZmV0Y2g9PSJmdW5jdGlvbiImJiFzbi5zdGFydHNXaXRoKCJmaWxlOi8vIikpcmV0dXJuIGZldGNoKHNuLHtjcmVkZW50aWFsczoic2FtZS1vcmlnaW4ifSkudGhlbihmdW5jdGlvbihWKXtpZighVi5vayl0aHJvdyJmYWlsZWQgdG8gbG9hZCB3YXNtIGJpbmFyeSBmaWxlIGF0ICciK3NuKyInIjtyZXR1cm4gVi5hcnJheUJ1ZmZlcigpfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4gZihzbil9KTtpZihyZSlyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oVixLKXtyZShzbixmdW5jdGlvbih0dCl7VihuZXcgVWludDhBcnJheSh0dCkpfSxLKX0pfXJldHVybiBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIGYoc24pfSl9ZnVuY3Rpb24gYyhWKXtmb3IoOzA8Vi5sZW5ndGg7KVYuc2hpZnQoKShSKX1mdW5jdGlvbiBsKFYpe3RoaXMuZXhjUHRyPVYsdGhpcy5wdHI9Vi0yNCx0aGlzLnNldF90eXBlPWZ1bmN0aW9uKEspe2JlW3RoaXMucHRyKzQ+PjJdPUt9LHRoaXMuZ2V0X3R5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gYmVbdGhpcy5wdHIrND4+Ml19LHRoaXMuc2V0X2Rlc3RydWN0b3I9ZnVuY3Rpb24oSyl7YmVbdGhpcy5wdHIrOD4+Ml09S30sdGhpcy5nZXRfZGVzdHJ1Y3Rvcj1mdW5jdGlvbigpe3JldHVybiBiZVt0aGlzLnB0cis4Pj4yXX0sdGhpcy5zZXRfcmVmY291bnQ9ZnVuY3Rpb24oSyl7R2VbdGhpcy5wdHI+PjJdPUt9LHRoaXMuc2V0X2NhdWdodD1mdW5jdGlvbihLKXtFZVt0aGlzLnB0cisxMj4+MF09Sz8xOjB9LHRoaXMuZ2V0X2NhdWdodD1mdW5jdGlvbigpe3JldHVybiBFZVt0aGlzLnB0cisxMj4+MF0hPTB9LHRoaXMuc2V0X3JldGhyb3duPWZ1bmN0aW9uKEspe0VlW3RoaXMucHRyKzEzPj4wXT1LPzE6MH0sdGhpcy5nZXRfcmV0aHJvd249ZnVuY3Rpb24oKXtyZXR1cm4gRWVbdGhpcy5wdHIrMTM+PjBdIT0wfSx0aGlzLmluaXQ9ZnVuY3Rpb24oSyx0dCl7dGhpcy5zZXRfYWRqdXN0ZWRfcHRyKDApLHRoaXMuc2V0X3R5cGUoSyksdGhpcy5zZXRfZGVzdHJ1Y3Rvcih0dCksdGhpcy5zZXRfcmVmY291bnQoMCksdGhpcy5zZXRfY2F1Z2h0KCExKSx0aGlzLnNldF9yZXRocm93bighMSl9LHRoaXMuYWRkX3JlZj1mdW5jdGlvbigpe0dlW3RoaXMucHRyPj4yXSs9MX0sdGhpcy5yZWxlYXNlX3JlZj1mdW5jdGlvbigpe3ZhciBLPUdlW3RoaXMucHRyPj4yXTtyZXR1cm4gR2VbdGhpcy5wdHI+PjJdPUstMSxLPT09MX0sdGhpcy5zZXRfYWRqdXN0ZWRfcHRyPWZ1bmN0aW9uKEspe2JlW3RoaXMucHRyKzE2Pj4yXT1LfSx0aGlzLmdldF9hZGp1c3RlZF9wdHI9ZnVuY3Rpb24oKXtyZXR1cm4gYmVbdGhpcy5wdHIrMTY+PjJdfSx0aGlzLmdldF9leGNlcHRpb25fcHRyPWZ1bmN0aW9uKCl7aWYoRGwodGhpcy5nZXRfdHlwZSgpKSlyZXR1cm4gYmVbdGhpcy5leGNQdHI+PjJdO3ZhciBLPXRoaXMuZ2V0X2FkanVzdGVkX3B0cigpO3JldHVybiBLIT09MD9LOnRoaXMuZXhjUHRyfX1mdW5jdGlvbiBwKCl7ZnVuY3Rpb24gVigpe2lmKCFuZiYmKG5mPSEwLFIuY2FsbGVkUnVuPSEwLCFOZSkpe2lmKG9lPSEwLGMocG4pLG50KFIpLFIub25SdW50aW1lSW5pdGlhbGl6ZWQmJlIub25SdW50aW1lSW5pdGlhbGl6ZWQoKSxSLnBvc3RSdW4pZm9yKHR5cGVvZiBSLnBvc3RSdW49PSJmdW5jdGlvbiImJihSLnBvc3RSdW49W1IucG9zdFJ1bl0pO1IucG9zdFJ1bi5sZW5ndGg7KUVuLnVuc2hpZnQoUi5wb3N0UnVuLnNoaWZ0KCkpO2MoRW4pfX1pZighKDA8WXQpKXtpZihSLnByZVJ1bilmb3IodHlwZW9mIFIucHJlUnVuPT0iZnVuY3Rpb24iJiYoUi5wcmVSdW49W1IucHJlUnVuXSk7Ui5wcmVSdW4ubGVuZ3RoOylsbi51bnNoaWZ0KFIucHJlUnVuLnNoaWZ0KCkpO2MobG4pLDA8WXR8fChSLnNldFN0YXR1cz8oUi5zZXRTdGF0dXMoIlJ1bm5pbmcuLi4iKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe1Iuc2V0U3RhdHVzKCIiKX0sMSksVigpfSwxKSk6VigpKX19ZnVuY3Rpb24gZCgpe31mdW5jdGlvbiBtKFYpe3JldHVybihWfHxkKS5fX2NhY2hlX199ZnVuY3Rpb24gXyhWLEspe3ZhciB0dD1tKEspLE10PXR0W1ZdO3JldHVybiBNdHx8KE10PU9iamVjdC5jcmVhdGUoKEt8fGQpLnByb3RvdHlwZSksTXQucHRyPVYsdHRbVl09TXQpfWZ1bmN0aW9uIGcoVil7aWYodHlwZW9mIFY9PSJzdHJpbmciKXtmb3IodmFyIEs9MCx0dD0wO3R0PFYubGVuZ3RoOysrdHQpe3ZhciBNdD1WLmNoYXJDb2RlQXQodHQpOzEyNz49TXQ/SysrOjIwNDc+PU10P0srPTI6NTUyOTY8PU10JiY1NzM0Mz49TXQ/KEsrPTQsKyt0dCk6Sys9M31pZihLPUFycmF5KEsrMSksdHQ9MCxNdD1LLmxlbmd0aCwwPE10KXtNdD10dCtNdC0xO2Zvcih2YXIgdWU9MDt1ZTxWLmxlbmd0aDsrK3VlKXt2YXIgVGU9Vi5jaGFyQ29kZUF0KHVlKTtpZig1NTI5Njw9VGUmJjU3MzQzPj1UZSl7dmFyIE9pPVYuY2hhckNvZGVBdCgrK3VlKTtUZT02NTUzNisoKFRlJjEwMjMpPDwxMCl8T2kmMTAyM31pZigxMjc+PVRlKXtpZih0dD49TXQpYnJlYWs7S1t0dCsrXT1UZX1lbHNle2lmKDIwNDc+PVRlKXtpZih0dCsxPj1NdClicmVhaztLW3R0KytdPTE5MnxUZT4+Nn1lbHNle2lmKDY1NTM1Pj1UZSl7aWYodHQrMj49TXQpYnJlYWs7S1t0dCsrXT0yMjR8VGU+PjEyfWVsc2V7aWYodHQrMz49TXQpYnJlYWs7S1t0dCsrXT0yNDB8VGU+PjE4LEtbdHQrK109MTI4fFRlPj4xMiY2M31LW3R0KytdPTEyOHxUZT4+NiY2M31LW3R0KytdPTEyOHxUZSY2M319S1t0dF09MH1yZXR1cm4gVj1DZS5hbGxvYyhLLEVlKSxDZS5jb3B5KEssRWUsViksVn1yZXR1cm4gVn1mdW5jdGlvbiBiKFYpe2lmKHR5cGVvZiBWPT0ib2JqZWN0Iil7dmFyIEs9Q2UuYWxsb2MoVixFZSk7cmV0dXJuIENlLmNvcHkoVixFZSxLKSxLfXJldHVybiBWfWZ1bmN0aW9uIFQoKXt0aHJvdyJjYW5ub3QgY29uc3RydWN0IGEgVm9pZFB0ciwgbm8gY29uc3RydWN0b3IgaW4gSURMIn1mdW5jdGlvbiBPKCl7dGhpcy5wdHI9Y24oKSxtKE8pW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIEUoKXt0aGlzLnB0cj11bygpLG0oRSlbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gdygpe3RoaXMucHRyPWxvKCksbSh3KVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiBDKCl7dGhpcy5wdHI9RmUoKSxtKEMpW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIE0oKXt0aGlzLnB0cj1JcygpLG0oTSlbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gTigpe3RoaXMucHRyPW9vKCksbShOKVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiBGKCl7dGhpcy5wdHI9TmMoKSxtKEYpW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIEkoKXt0aGlzLnB0cj1vcigpLG0oSSlbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gdigpe3RoaXMucHRyPXZjKCksbSh2KVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiBCKCl7dGhyb3ciY2Fubm90IGNvbnN0cnVjdCBhIFN0YXR1cywgbm8gY29uc3RydWN0b3IgaW4gSURMIn1mdW5jdGlvbiBBKCl7dGhpcy5wdHI9RXUoKSxtKEEpW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIFMoKXt0aGlzLnB0cj1GYygpLG0oUylbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24geCgpe3RoaXMucHRyPUthKCksbSh4KVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiBMKCl7dGhpcy5wdHI9RGMoKSxtKEwpW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIHooKXt0aGlzLnB0cj1JdSgpLG0oeilbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gaigpe3RoaXMucHRyPUx1KCksbShqKVt0aGlzLnB0cl09dGhpc31mdW5jdGlvbiBrKCl7dGhpcy5wdHI9dHMoKSxtKGspW3RoaXMucHRyXT10aGlzfWZ1bmN0aW9uIHEoKXt0aGlzLnB0cj1WdSgpLG0ocSlbdGhpcy5wdHJdPXRoaXN9ZnVuY3Rpb24gVygpe3RoaXMucHRyPVphKCksbShXKVt0aGlzLnB0cl09dGhpc31lPWU9PT12b2lkIDA/e306ZTt2YXIgUj10eXBlb2YgZTwidSI/ZTp7fSxudCxhdDtSLnJlYWR5PW5ldyBQcm9taXNlKGZ1bmN0aW9uKFYsSyl7bnQ9VixhdD1LfSk7dmFyIGx0PSExLGh0PSExO1Iub25SdW50aW1lSW5pdGlhbGl6ZWQ9ZnVuY3Rpb24oKXtsdD0hMCxodCYmdHlwZW9mIFIub25Nb2R1bGVMb2FkZWQ9PSJmdW5jdGlvbiImJlIub25Nb2R1bGVMb2FkZWQoUil9LFIub25Nb2R1bGVQYXJzZWQ9ZnVuY3Rpb24oKXtodD0hMCxsdCYmdHlwZW9mIFIub25Nb2R1bGVMb2FkZWQ9PSJmdW5jdGlvbiImJlIub25Nb2R1bGVMb2FkZWQoUil9LFIuaXNWZXJzaW9uU3VwcG9ydGVkPWZ1bmN0aW9uKFYpe3JldHVybiB0eXBlb2YgViE9InN0cmluZyI/ITE6KFY9Vi5zcGxpdCgiLiIpLDI+Vi5sZW5ndGh8fDM8Vi5sZW5ndGg/ITE6VlswXT09MSYmMDw9VlsxXSYmNT49VlsxXT8hMDohKFZbMF0hPTB8fDEwPFZbMV0pKX07dmFyIG90PU9iamVjdC5hc3NpZ24oe30sUiksUHQ9dHlwZW9mIHdpbmRvdz09Im9iamVjdCIseXQ9dHlwZW9mIGltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiIsRXQ9dHlwZW9mIHByb2Nlc3M9PSJvYmplY3QiJiZ0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucz09Im9iamVjdCImJnR5cGVvZiBwcm9jZXNzLnZlcnNpb25zLm5vZGU9PSJzdHJpbmciLGR0PSIiO2lmKEV0KXt2YXIgcnQ9cHIoImZzIiksQ3Q9cHIoInBhdGgiKTtkdD15dD9DdC5kaXJuYW1lKGR0KSsiLyI6X19kaXJuYW1lKyIvIjt2YXIga3Q9ZnVuY3Rpb24oVixLKXtyZXR1cm4gVj1WLnN0YXJ0c1dpdGgoImZpbGU6Ly8iKT9uZXcgVVJMKFYpOkN0Lm5vcm1hbGl6ZShWKSxydC5yZWFkRmlsZVN5bmMoVixLP3ZvaWQgMDoidXRmOCIpfSxsZT1mdW5jdGlvbihWKXtyZXR1cm4gVj1rdChWLCEwKSxWLmJ1ZmZlcnx8KFY9bmV3IFVpbnQ4QXJyYXkoVikpLFZ9LHJlPWZ1bmN0aW9uKFYsSyx0dCl7Vj1WLnN0YXJ0c1dpdGgoImZpbGU6Ly8iKT9uZXcgVVJMKFYpOkN0Lm5vcm1hbGl6ZShWKSxydC5yZWFkRmlsZShWLGZ1bmN0aW9uKE10LHVlKXtNdD90dChNdCk6Syh1ZS5idWZmZXIpfSl9OzE8cHJvY2Vzcy5hcmd2Lmxlbmd0aCYmcHJvY2Vzcy5hcmd2WzFdLnJlcGxhY2UoL1xcL2csIi8iKSxwcm9jZXNzLmFyZ3Yuc2xpY2UoMiksUi5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIltFbXNjcmlwdGVuIE1vZHVsZSBvYmplY3RdIn19ZWxzZShQdHx8eXQpJiYoeXQ/ZHQ9c2VsZi5sb2NhdGlvbi5ocmVmOnR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQmJihkdD1kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYyksdCYmKGR0PXQpLGR0PWR0LmluZGV4T2YoImJsb2I6IikhPT0wP2R0LnN1YnN0cigwLGR0LnJlcGxhY2UoL1s/I10uKi8sIiIpLmxhc3RJbmRleE9mKCIvIikrMSk6IiIsa3Q9ZnVuY3Rpb24oVil7dmFyIEs9bmV3IFhNTEh0dHBSZXF1ZXN0O3JldHVybiBLLm9wZW4oIkdFVCIsViwhMSksSy5zZW5kKG51bGwpLEsucmVzcG9uc2VUZXh0fSx5dCYmKGxlPWZ1bmN0aW9uKFYpe3ZhciBLPW5ldyBYTUxIdHRwUmVxdWVzdDtyZXR1cm4gSy5vcGVuKCJHRVQiLFYsITEpLEsucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsSy5zZW5kKG51bGwpLG5ldyBVaW50OEFycmF5KEsucmVzcG9uc2UpfSkscmU9ZnVuY3Rpb24oVixLLHR0KXt2YXIgTXQ9bmV3IFhNTEh0dHBSZXF1ZXN0O010Lm9wZW4oIkdFVCIsViwhMCksTXQucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsTXQub25sb2FkPWZ1bmN0aW9uKCl7TXQuc3RhdHVzPT0yMDB8fE10LnN0YXR1cz09MCYmTXQucmVzcG9uc2U/SyhNdC5yZXNwb25zZSk6dHQoKX0sTXQub25lcnJvcj10dCxNdC5zZW5kKG51bGwpfSk7dmFyIHBlPVIucHJpbnR8fGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksZmU9Ui5wcmludEVycnx8Y29uc29sZS53YXJuLmJpbmQoY29uc29sZSk7T2JqZWN0LmFzc2lnbihSLG90KSxvdD1udWxsO3ZhciBadDtSLndhc21CaW5hcnkmJihadD1SLndhc21CaW5hcnkpLHR5cGVvZiBXZWJBc3NlbWJseSE9Im9iamVjdCImJnMoIm5vIG5hdGl2ZSB3YXNtIHN1cHBvcnQgZGV0ZWN0ZWQiKTt2YXIgUXQsTmU9ITEsZ2U9dHlwZW9mIFRleHREZWNvZGVyPCJ1Ij9uZXcgVGV4dERlY29kZXIoInV0ZjgiKTp2b2lkIDAsRWUsdW4sR2UsYmUsbG49W10scG49W10sRW49W10sb2U9ITEsWXQ9MCxWZT1udWxsLGRuPW51bGwsc249ImRyYWNvX2RlY29kZXIud2FzbSI7c24uc3RhcnRzV2l0aCgiZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCIpfHwoc249bihzbikpO3ZhciBtbj0wLGZvPVtudWxsLFtdLFtdXSxIbj17YjpmdW5jdGlvbihWLEssdHQpe3Rocm93IG5ldyBsKFYpLmluaXQoSyx0dCksbW4rKyxWfSxhOmZ1bmN0aW9uKCl7cygiIil9LGc6ZnVuY3Rpb24oVixLLHR0KXt1bi5jb3B5V2l0aGluKFYsSyxLK3R0KX0sZTpmdW5jdGlvbihWKXt2YXIgSz11bi5sZW5ndGg7aWYoVj4+Pj0wLDIxNDc0ODM2NDg8VilyZXR1cm4hMTtmb3IodmFyIHR0PTE7ND49dHQ7dHQqPTIpe3ZhciBNdD1LKigxKy4yL3R0KTtNdD1NYXRoLm1pbihNdCxWKzEwMDY2MzI5Nik7dmFyIHVlPU1hdGg7TXQ9TWF0aC5tYXgoVixNdCksdWU9dWUubWluLmNhbGwodWUsMjE0NzQ4MzY0OCxNdCsoNjU1MzYtTXQlNjU1MzYpJTY1NTM2KTt0OntNdD1RdC5idWZmZXI7dHJ5e1F0Lmdyb3codWUtTXQuYnl0ZUxlbmd0aCs2NTUzNT4+PjE2KSxpKCk7dmFyIFRlPTE7YnJlYWsgdH1jYXRjaHt9VGU9dm9pZCAwfWlmKFRlKXJldHVybiEwfXJldHVybiExfSxmOmZ1bmN0aW9uKFYpe3JldHVybiA1Mn0sZDpmdW5jdGlvbihWLEssdHQsTXQsdWUpe3JldHVybiA3MH0sYzpmdW5jdGlvbihWLEssdHQsTXQpe2Zvcih2YXIgdWU9MCxUZT0wO1RlPHR0O1RlKyspe3ZhciBPaT1iZVtLPj4yXSxWYz1iZVtLKzQ+PjJdO0srPTg7Zm9yKHZhciBVPTA7VTxWYztVKyspe3ZhciBHPXVuW09pK1VdLFg9Zm9bVl07Rz09PTB8fEc9PT0xMD8oKFY9PT0xP3BlOmZlKShvKFgsMCkpLFgubGVuZ3RoPTApOlgucHVzaChHKX11ZSs9VmN9cmV0dXJuIGJlW010Pj4yXT11ZSwwfX07KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gVih1ZSxUZSl7Ui5hc209dWUuZXhwb3J0cyxRdD1SLmFzbS5oLGkoKSxwbi51bnNoaWZ0KFIuYXNtLmkpLFl0LS0sUi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzJiZSLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMoWXQpLFl0PT0wJiYoVmUhPT1udWxsJiYoY2xlYXJJbnRlcnZhbChWZSksVmU9bnVsbCksZG4mJih1ZT1kbixkbj1udWxsLHVlKCkpKX1mdW5jdGlvbiBLKHVlKXtWKHVlLmluc3RhbmNlKX1mdW5jdGlvbiB0dCh1ZSl7cmV0dXJuIHUoKS50aGVuKGZ1bmN0aW9uKFRlKXtyZXR1cm4gV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoVGUsTXQpfSkudGhlbihmdW5jdGlvbihUZSl7cmV0dXJuIFRlfSkudGhlbih1ZSxmdW5jdGlvbihUZSl7ZmUoImZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206ICIrVGUpLHMoVGUpfSl9dmFyIE10PXthOkhufTtpZihZdCsrLFIubW9uaXRvclJ1bkRlcGVuZGVuY2llcyYmUi5tb25pdG9yUnVuRGVwZW5kZW5jaWVzKFl0KSxSLmluc3RhbnRpYXRlV2FzbSl0cnl7cmV0dXJuIFIuaW5zdGFudGlhdGVXYXNtKE10LFYpfWNhdGNoKHVlKXtmZSgiTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogIit1ZSksYXQodWUpfXJldHVybiBmdW5jdGlvbigpe3JldHVybiBadHx8dHlwZW9mIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nIT0iZnVuY3Rpb24ifHxzbi5zdGFydHNXaXRoKCJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsIil8fHNuLnN0YXJ0c1dpdGgoImZpbGU6Ly8iKXx8RXR8fHR5cGVvZiBmZXRjaCE9ImZ1bmN0aW9uIj90dChLKTpmZXRjaChzbix7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oZnVuY3Rpb24odWUpe3JldHVybiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyh1ZSxNdCkudGhlbihLLGZ1bmN0aW9uKFRlKXtyZXR1cm4gZmUoIndhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiAiK1RlKSxmZSgiZmFsbGluZyBiYWNrIHRvIEFycmF5QnVmZmVyIGluc3RhbnRpYXRpb24iKSx0dChLKX0pfSl9KCkuY2F0Y2goYXQpLHt9fSkoKTt2YXIgWmU9Ui5fZW1zY3JpcHRlbl9iaW5kX1ZvaWRQdHJfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihaZT1SLl9lbXNjcmlwdGVuX2JpbmRfVm9pZFB0cl9fX2Rlc3Ryb3lfX18wPVIuYXNtLmspLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sY249Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJCdWZmZXJfRGVjb2RlckJ1ZmZlcl8wPWZ1bmN0aW9uKCl7cmV0dXJuKGNuPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyQnVmZmVyX0RlY29kZXJCdWZmZXJfMD1SLmFzbS5sKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEtlPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyQnVmZmVyX0luaXRfMj1mdW5jdGlvbigpe3JldHVybihLZT1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2RlckJ1ZmZlcl9Jbml0XzI9Ui5hc20ubSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxobj1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2RlckJ1ZmZlcl9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKGhuPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyQnVmZmVyX19fZGVzdHJveV9fXzA9Ui5hc20ubikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx1bz1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlVHJhbnNmb3JtRGF0YV9BdHRyaWJ1dGVUcmFuc2Zvcm1EYXRhXzA9ZnVuY3Rpb24oKXtyZXR1cm4odW89Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVRyYW5zZm9ybURhdGFfQXR0cmlidXRlVHJhbnNmb3JtRGF0YV8wPVIuYXNtLm8pLmFwcGx5KG51bGwsYXJndW1lbnRzKX0scW49Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVRyYW5zZm9ybURhdGFfdHJhbnNmb3JtX3R5cGVfMD1mdW5jdGlvbigpe3JldHVybihxbj1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlVHJhbnNmb3JtRGF0YV90cmFuc2Zvcm1fdHlwZV8wPVIuYXNtLnApLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sS249Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVRyYW5zZm9ybURhdGFfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihLbj1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlVHJhbnNmb3JtRGF0YV9fX2Rlc3Ryb3lfX18wPVIuYXNtLnEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sbG89Ui5fZW1zY3JpcHRlbl9iaW5kX0dlb21ldHJ5QXR0cmlidXRlX0dlb21ldHJ5QXR0cmlidXRlXzA9ZnVuY3Rpb24oKXtyZXR1cm4obG89Ui5fZW1zY3JpcHRlbl9iaW5kX0dlb21ldHJ5QXR0cmlidXRlX0dlb21ldHJ5QXR0cmlidXRlXzA9Ui5hc20ucikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx6ZT1SLl9lbXNjcmlwdGVuX2JpbmRfR2VvbWV0cnlBdHRyaWJ1dGVfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybih6ZT1SLl9lbXNjcmlwdGVuX2JpbmRfR2VvbWV0cnlBdHRyaWJ1dGVfX19kZXN0cm95X19fMD1SLmFzbS5zKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEZlPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9Qb2ludEF0dHJpYnV0ZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKEZlPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9Qb2ludEF0dHJpYnV0ZV8wPVIuYXNtLnQpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTG49Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX3NpemVfMD1mdW5jdGlvbigpe3JldHVybihMbj1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfc2l6ZV8wPVIuYXNtLnUpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sV249Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX0dldEF0dHJpYnV0ZVRyYW5zZm9ybURhdGFfMD1mdW5jdGlvbigpe3JldHVybihXbj1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfR2V0QXR0cmlidXRlVHJhbnNmb3JtRGF0YV8wPVIuYXNtLnYpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sem89Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX2F0dHJpYnV0ZV90eXBlXzA9ZnVuY3Rpb24oKXtyZXR1cm4oem89Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX2F0dHJpYnV0ZV90eXBlXzA9Ui5hc20udykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxybj1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfZGF0YV90eXBlXzA9ZnVuY3Rpb24oKXtyZXR1cm4ocm49Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX2RhdGFfdHlwZV8wPVIuYXNtLngpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sUm49Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX251bV9jb21wb25lbnRzXzA9ZnVuY3Rpb24oKXtyZXR1cm4oUm49Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX251bV9jb21wb25lbnRzXzA9Ui5hc20ueSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxhcj1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfbm9ybWFsaXplZF8wPWZ1bmN0aW9uKCl7cmV0dXJuKGFyPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9ub3JtYWxpemVkXzA9Ui5hc20ueikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxRbj1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfYnl0ZV9zdHJpZGVfMD1mdW5jdGlvbigpe3JldHVybihRbj1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRBdHRyaWJ1dGVfYnl0ZV9zdHJpZGVfMD1SLmFzbS5BKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGpvPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9ieXRlX29mZnNldF8wPWZ1bmN0aW9uKCl7cmV0dXJuKGpvPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9ieXRlX29mZnNldF8wPVIuYXNtLkIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTnI9Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50QXR0cmlidXRlX3VuaXF1ZV9pZF8wPWZ1bmN0aW9uKCl7cmV0dXJuKE5yPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV91bmlxdWVfaWRfMD1SLmFzbS5DKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LE5zPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKE5zPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludEF0dHJpYnV0ZV9fX2Rlc3Ryb3lfX18wPVIuYXNtLkQpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sSXM9Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybV9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fMD1mdW5jdGlvbigpe3JldHVybihJcz1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtX0F0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybV8wPVIuYXNtLkUpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sWWk9Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybV9Jbml0RnJvbUF0dHJpYnV0ZV8xPWZ1bmN0aW9uKCl7cmV0dXJuKFlpPVIuX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fSW5pdEZyb21BdHRyaWJ1dGVfMT1SLmFzbS5GKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LElyPVIuX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fcXVhbnRpemF0aW9uX2JpdHNfMD1mdW5jdGlvbigpe3JldHVybihJcj1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtX3F1YW50aXphdGlvbl9iaXRzXzA9Ui5hc20uRykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSwkaT1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtX21pbl92YWx1ZV8xPWZ1bmN0aW9uKCl7cmV0dXJuKCRpPVIuX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fbWluX3ZhbHVlXzE9Ui5hc20uSCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx2cz1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlUXVhbnRpemF0aW9uVHJhbnNmb3JtX3JhbmdlXzA9ZnVuY3Rpb24oKXtyZXR1cm4odnM9Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybV9yYW5nZV8wPVIuYXNtLkkpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sYmk9Ui5fZW1zY3JpcHRlbl9iaW5kX0F0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybV9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKGJpPVIuX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm1fX19kZXN0cm95X19fMD1SLmFzbS5KKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LG9vPVIuX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVPY3RhaGVkcm9uVHJhbnNmb3JtX0F0dHJpYnV0ZU9jdGFoZWRyb25UcmFuc2Zvcm1fMD1mdW5jdGlvbigpe3JldHVybihvbz1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlT2N0YWhlZHJvblRyYW5zZm9ybV9BdHRyaWJ1dGVPY3RhaGVkcm9uVHJhbnNmb3JtXzA9Ui5hc20uSykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxwbz1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlT2N0YWhlZHJvblRyYW5zZm9ybV9Jbml0RnJvbUF0dHJpYnV0ZV8xPWZ1bmN0aW9uKCl7cmV0dXJuKHBvPVIuX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVPY3RhaGVkcm9uVHJhbnNmb3JtX0luaXRGcm9tQXR0cmlidXRlXzE9Ui5hc20uTCkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx2cj1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlT2N0YWhlZHJvblRyYW5zZm9ybV9xdWFudGl6YXRpb25fYml0c18wPWZ1bmN0aW9uKCl7cmV0dXJuKHZyPVIuX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVPY3RhaGVkcm9uVHJhbnNmb3JtX3F1YW50aXphdGlvbl9iaXRzXzA9Ui5hc20uTSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxNYz1SLl9lbXNjcmlwdGVuX2JpbmRfQXR0cmlidXRlT2N0YWhlZHJvblRyYW5zZm9ybV9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKE1jPVIuX2Vtc2NyaXB0ZW5fYmluZF9BdHRyaWJ1dGVPY3RhaGVkcm9uVHJhbnNmb3JtX19fZGVzdHJveV9fXzA9Ui5hc20uTikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxOYz1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRDbG91ZF9Qb2ludENsb3VkXzA9ZnVuY3Rpb24oKXtyZXR1cm4oTmM9Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50Q2xvdWRfUG9pbnRDbG91ZF8wPVIuYXNtLk8pLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRG49Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50Q2xvdWRfbnVtX2F0dHJpYnV0ZXNfMD1mdW5jdGlvbigpe3JldHVybihEbj1SLl9lbXNjcmlwdGVuX2JpbmRfUG9pbnRDbG91ZF9udW1fYXR0cmlidXRlc18wPVIuYXNtLlApLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sVGk9Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50Q2xvdWRfbnVtX3BvaW50c18wPWZ1bmN0aW9uKCl7cmV0dXJuKFRpPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludENsb3VkX251bV9wb2ludHNfMD1SLmFzbS5RKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LExlPVIuX2Vtc2NyaXB0ZW5fYmluZF9Qb2ludENsb3VkX19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oTGU9Ui5fZW1zY3JpcHRlbl9iaW5kX1BvaW50Q2xvdWRfX19kZXN0cm95X19fMD1SLmFzbS5SKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LG9yPVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXNoX01lc2hfMD1mdW5jdGlvbigpe3JldHVybihvcj1SLl9lbXNjcmlwdGVuX2JpbmRfTWVzaF9NZXNoXzA9Ui5hc20uUykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxBdT1SLl9lbXNjcmlwdGVuX2JpbmRfTWVzaF9udW1fZmFjZXNfMD1mdW5jdGlvbigpe3JldHVybihBdT1SLl9lbXNjcmlwdGVuX2JpbmRfTWVzaF9udW1fZmFjZXNfMD1SLmFzbS5UKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGJ1PVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXNoX251bV9hdHRyaWJ1dGVzXzA9ZnVuY3Rpb24oKXtyZXR1cm4oYnU9Ui5fZW1zY3JpcHRlbl9iaW5kX01lc2hfbnVtX2F0dHJpYnV0ZXNfMD1SLmFzbS5VKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFR1PVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXNoX251bV9wb2ludHNfMD1mdW5jdGlvbigpe3JldHVybihUdT1SLl9lbXNjcmlwdGVuX2JpbmRfTWVzaF9udW1fcG9pbnRzXzA9Ui5hc20uVikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxJYz1SLl9lbXNjcmlwdGVuX2JpbmRfTWVzaF9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKEljPVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXNoX19fZGVzdHJveV9fXzA9Ui5hc20uVykuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx2Yz1SLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFfTWV0YWRhdGFfMD1mdW5jdGlvbigpe3JldHVybih2Yz1SLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFfTWV0YWRhdGFfMD1SLmFzbS5YKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEhhPVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YV9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKEhhPVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YV9fX2Rlc3Ryb3lfX18wPVIuYXNtLlkpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sd3U9Ui5fZW1zY3JpcHRlbl9iaW5kX1N0YXR1c19jb2RlXzA9ZnVuY3Rpb24oKXtyZXR1cm4od3U9Ui5fZW1zY3JpcHRlbl9iaW5kX1N0YXR1c19jb2RlXzA9Ui5hc20uWikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxxYT1SLl9lbXNjcmlwdGVuX2JpbmRfU3RhdHVzX29rXzA9ZnVuY3Rpb24oKXtyZXR1cm4ocWE9Ui5fZW1zY3JpcHRlbl9iaW5kX1N0YXR1c19va18wPVIuYXNtLl8pLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sWmk9Ui5fZW1zY3JpcHRlbl9iaW5kX1N0YXR1c19lcnJvcl9tc2dfMD1mdW5jdGlvbigpe3JldHVybihaaT1SLl9lbXNjcmlwdGVuX2JpbmRfU3RhdHVzX2Vycm9yX21zZ18wPVIuYXNtLiQpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sT3U9Ui5fZW1zY3JpcHRlbl9iaW5kX1N0YXR1c19fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKE91PVIuX2Vtc2NyaXB0ZW5fYmluZF9TdGF0dXNfX19kZXN0cm95X19fMD1SLmFzbS5hYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxFdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29GbG9hdDMyQXJyYXlfRHJhY29GbG9hdDMyQXJyYXlfMD1mdW5jdGlvbigpe3JldHVybihFdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29GbG9hdDMyQXJyYXlfRHJhY29GbG9hdDMyQXJyYXlfMD1SLmFzbS5iYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxSdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29GbG9hdDMyQXJyYXlfR2V0VmFsdWVfMT1mdW5jdGlvbigpe3JldHVybihSdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29GbG9hdDMyQXJyYXlfR2V0VmFsdWVfMT1SLmFzbS5jYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxRaT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29GbG9hdDMyQXJyYXlfc2l6ZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKFFpPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0Zsb2F0MzJBcnJheV9zaXplXzA9Ui5hc20uZGEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sSmk9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvRmxvYXQzMkFycmF5X19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oSmk9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvRmxvYXQzMkFycmF5X19fZGVzdHJveV9fXzA9Ui5hc20uZWEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRmM9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50OEFycmF5X0RyYWNvSW50OEFycmF5XzA9ZnVuY3Rpb24oKXtyZXR1cm4oRmM9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50OEFycmF5X0RyYWNvSW50OEFycmF5XzA9Ui5hc20uZmEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sU3U9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50OEFycmF5X0dldFZhbHVlXzE9ZnVuY3Rpb24oKXtyZXR1cm4oU3U9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50OEFycmF5X0dldFZhbHVlXzE9Ui5hc20uZ2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sQ3U9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50OEFycmF5X3NpemVfMD1mdW5jdGlvbigpe3JldHVybihDdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQ4QXJyYXlfc2l6ZV8wPVIuYXNtLmhhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEZyPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDhBcnJheV9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKEZyPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDhBcnJheV9fX2Rlc3Ryb3lfX18wPVIuYXNtLmlhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEthPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQ4QXJyYXlfRHJhY29VSW50OEFycmF5XzA9ZnVuY3Rpb24oKXtyZXR1cm4oS2E9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDhBcnJheV9EcmFjb1VJbnQ4QXJyYXlfMD1SLmFzbS5qYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxXYT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50OEFycmF5X0dldFZhbHVlXzE9ZnVuY3Rpb24oKXtyZXR1cm4oV2E9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDhBcnJheV9HZXRWYWx1ZV8xPVIuYXNtLmthKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LExjPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQ4QXJyYXlfc2l6ZV8wPWZ1bmN0aW9uKCl7cmV0dXJuKExjPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQ4QXJyYXlfc2l6ZV8wPVIuYXNtLmxhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHh1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQ4QXJyYXlfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybih4dT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50OEFycmF5X19fZGVzdHJveV9fXzA9Ui5hc20ubWEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRGM9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MTZBcnJheV9EcmFjb0ludDE2QXJyYXlfMD1mdW5jdGlvbigpe3JldHVybihEYz1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQxNkFycmF5X0RyYWNvSW50MTZBcnJheV8wPVIuYXNtLm5hKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFB1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDE2QXJyYXlfR2V0VmFsdWVfMT1mdW5jdGlvbigpe3JldHVybihQdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQxNkFycmF5X0dldFZhbHVlXzE9Ui5hc20ub2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTXU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MTZBcnJheV9zaXplXzA9ZnVuY3Rpb24oKXtyZXR1cm4oTXU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MTZBcnJheV9zaXplXzA9Ui5hc20ucGEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTnU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MTZBcnJheV9fX2Rlc3Ryb3lfX18wPWZ1bmN0aW9uKCl7cmV0dXJuKE51PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDE2QXJyYXlfX19kZXN0cm95X19fMD1SLmFzbS5xYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxJdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MTZBcnJheV9EcmFjb1VJbnQxNkFycmF5XzA9ZnVuY3Rpb24oKXtyZXR1cm4oSXU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDE2QXJyYXlfRHJhY29VSW50MTZBcnJheV8wPVIuYXNtLnJhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHZ1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQxNkFycmF5X0dldFZhbHVlXzE9ZnVuY3Rpb24oKXtyZXR1cm4odnU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDE2QXJyYXlfR2V0VmFsdWVfMT1SLmFzbS5zYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxGdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MTZBcnJheV9zaXplXzA9ZnVuY3Rpb24oKXtyZXR1cm4oRnU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDE2QXJyYXlfc2l6ZV8wPVIuYXNtLnRhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFhhPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQxNkFycmF5X19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oWGE9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDE2QXJyYXlfX19kZXN0cm95X19fMD1SLmFzbS51YSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxMdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQzMkFycmF5X0RyYWNvSW50MzJBcnJheV8wPWZ1bmN0aW9uKCl7cmV0dXJuKEx1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDMyQXJyYXlfRHJhY29JbnQzMkFycmF5XzA9Ui5hc20udmEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRHU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MzJBcnJheV9HZXRWYWx1ZV8xPWZ1bmN0aW9uKCl7cmV0dXJuKER1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb0ludDMyQXJyYXlfR2V0VmFsdWVfMT1SLmFzbS53YSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxCdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQzMkFycmF5X3NpemVfMD1mdW5jdGlvbigpe3JldHVybihCdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQzMkFycmF5X3NpemVfMD1SLmFzbS54YSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxVdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29JbnQzMkFycmF5X19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oVXU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvSW50MzJBcnJheV9fX2Rlc3Ryb3lfX18wPVIuYXNtLnlhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHRzPVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQzMkFycmF5X0RyYWNvVUludDMyQXJyYXlfMD1mdW5jdGlvbigpe3JldHVybih0cz1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MzJBcnJheV9EcmFjb1VJbnQzMkFycmF5XzA9Ui5hc20uemEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sa3U9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDMyQXJyYXlfR2V0VmFsdWVfMT1mdW5jdGlvbigpe3JldHVybihrdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MzJBcnJheV9HZXRWYWx1ZV8xPVIuYXNtLkFhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEd1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EcmFjb1VJbnQzMkFycmF5X3NpemVfMD1mdW5jdGlvbigpe3JldHVybihHdT1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MzJBcnJheV9zaXplXzA9Ui5hc20uQmEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRnM9Ui5fZW1zY3JpcHRlbl9iaW5kX0RyYWNvVUludDMyQXJyYXlfX19kZXN0cm95X19fMD1mdW5jdGlvbigpe3JldHVybihGcz1SLl9lbXNjcmlwdGVuX2JpbmRfRHJhY29VSW50MzJBcnJheV9fX2Rlc3Ryb3lfX18wPVIuYXNtLkNhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFZ1PVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfTWV0YWRhdGFRdWVyaWVyXzA9ZnVuY3Rpb24oKXtyZXR1cm4oVnU9Ui5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9NZXRhZGF0YVF1ZXJpZXJfMD1SLmFzbS5EYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx6dT1SLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX0hhc0VudHJ5XzI9ZnVuY3Rpb24oKXtyZXR1cm4oenU9Ui5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9IYXNFbnRyeV8yPVIuYXNtLkVhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGZyPVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfR2V0SW50RW50cnlfMj1mdW5jdGlvbigpe3JldHVybihmcj1SLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX0dldEludEVudHJ5XzI9Ui5hc20uRmEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sWWE9Ui5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9HZXRJbnRFbnRyeUFycmF5XzM9ZnVuY3Rpb24oKXtyZXR1cm4oWWE9Ui5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9HZXRJbnRFbnRyeUFycmF5XzM9Ui5hc20uR2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sanU9Ui5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9HZXREb3VibGVFbnRyeV8yPWZ1bmN0aW9uKCl7cmV0dXJuKGp1PVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfR2V0RG91YmxlRW50cnlfMj1SLmFzbS5IYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxIdT1SLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX0dldFN0cmluZ0VudHJ5XzI9ZnVuY3Rpb24oKXtyZXR1cm4oSHU9Ui5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9HZXRTdHJpbmdFbnRyeV8yPVIuYXNtLklhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHF1PVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfTnVtRW50cmllc18xPWZ1bmN0aW9uKCl7cmV0dXJuKHF1PVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfTnVtRW50cmllc18xPVIuYXNtLkphKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEhvPVIuX2Vtc2NyaXB0ZW5fYmluZF9NZXRhZGF0YVF1ZXJpZXJfR2V0RW50cnlOYW1lXzI9ZnVuY3Rpb24oKXtyZXR1cm4oSG89Ui5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9HZXRFbnRyeU5hbWVfMj1SLmFzbS5LYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSwkYT1SLl9lbXNjcmlwdGVuX2JpbmRfTWV0YWRhdGFRdWVyaWVyX19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oJGE9Ui5fZW1zY3JpcHRlbl9iaW5kX01ldGFkYXRhUXVlcmllcl9fX2Rlc3Ryb3lfX18wPVIuYXNtLkxhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFphPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0RlY29kZXJfMD1mdW5jdGlvbigpe3JldHVybihaYT1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9EZWNvZGVyXzA9Ui5hc20uTWEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTHM9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfRGVjb2RlQXJyYXlUb1BvaW50Q2xvdWRfMz1mdW5jdGlvbigpe3JldHVybihMcz1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9EZWNvZGVBcnJheVRvUG9pbnRDbG91ZF8zPVIuYXNtLk5hKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEt1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0RlY29kZUFycmF5VG9NZXNoXzM9ZnVuY3Rpb24oKXtyZXR1cm4oS3U9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfRGVjb2RlQXJyYXlUb01lc2hfMz1SLmFzbS5PYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxCYz1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVJZF8yPWZ1bmN0aW9uKCl7cmV0dXJuKEJjPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUlkXzI9Ui5hc20uUGEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sV3U9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlSWRCeU5hbWVfMj1mdW5jdGlvbigpe3JldHVybihXdT1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVJZEJ5TmFtZV8yPVIuYXNtLlFhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFFhPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUlkQnlNZXRhZGF0YUVudHJ5XzM9ZnVuY3Rpb24oKXtyZXR1cm4oUWE9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlSWRCeU1ldGFkYXRhRW50cnlfMz1SLmFzbS5SYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxKYT1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVfMj1mdW5jdGlvbigpe3JldHVybihKYT1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVfMj1SLmFzbS5TYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxYdT1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVCeVVuaXF1ZUlkXzI9ZnVuY3Rpb24oKXtyZXR1cm4oWHU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlQnlVbmlxdWVJZF8yPVIuYXNtLlRhKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFl1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldE1ldGFkYXRhXzE9ZnVuY3Rpb24oKXtyZXR1cm4oWXU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0TWV0YWRhdGFfMT1SLmFzbS5VYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxVYz1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVNZXRhZGF0YV8yPWZ1bmN0aW9uKCl7cmV0dXJuKFVjPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZU1ldGFkYXRhXzI9Ui5hc20uVmEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sQW89Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0RmFjZUZyb21NZXNoXzM9ZnVuY3Rpb24oKXtyZXR1cm4oQW89Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0RmFjZUZyb21NZXNoXzM9Ui5hc20uV2EpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sa2M9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0VHJpYW5nbGVTdHJpcHNGcm9tTWVzaF8yPWZ1bmN0aW9uKCl7cmV0dXJuKGtjPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldFRyaWFuZ2xlU3RyaXBzRnJvbU1lc2hfMj1SLmFzbS5YYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSwkdT1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRUcmlhbmdsZXNVSW50MTZBcnJheV8zPWZ1bmN0aW9uKCl7cmV0dXJuKCR1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldFRyaWFuZ2xlc1VJbnQxNkFycmF5XzM9Ui5hc20uWWEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sWnU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0VHJpYW5nbGVzVUludDMyQXJyYXlfMz1mdW5jdGlvbigpe3JldHVybihadT1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRUcmlhbmdsZXNVSW50MzJBcnJheV8zPVIuYXNtLlphKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFF1PVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUZsb2F0XzM9ZnVuY3Rpb24oKXtyZXR1cm4oUXU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlRmxvYXRfMz1SLmFzbS5fYSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx1cj1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVGbG9hdEZvckFsbFBvaW50c18zPWZ1bmN0aW9uKCl7cmV0dXJuKHVyPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUZsb2F0Rm9yQWxsUG9pbnRzXzM9Ui5hc20uJGEpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sSnU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlSW50Rm9yQWxsUG9pbnRzXzM9ZnVuY3Rpb24oKXtyZXR1cm4oSnU9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlSW50Rm9yQWxsUG9pbnRzXzM9Ui5hc20uYWIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdGw9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlSW50OEZvckFsbFBvaW50c18zPWZ1bmN0aW9uKCl7cmV0dXJuKHRsPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUludDhGb3JBbGxQb2ludHNfMz1SLmFzbS5iYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxlbD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVVSW50OEZvckFsbFBvaW50c18zPWZ1bmN0aW9uKCl7cmV0dXJuKGVsPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZVVJbnQ4Rm9yQWxsUG9pbnRzXzM9Ui5hc20uY2IpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRHM9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlSW50MTZGb3JBbGxQb2ludHNfMz1mdW5jdGlvbigpe3JldHVybihEcz1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVJbnQxNkZvckFsbFBvaW50c18zPVIuYXNtLmRiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LG5sPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZVVJbnQxNkZvckFsbFBvaW50c18zPWZ1bmN0aW9uKCl7cmV0dXJuKG5sPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZVVJbnQxNkZvckFsbFBvaW50c18zPVIuYXNtLmViKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHdpPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEF0dHJpYnV0ZUludDMyRm9yQWxsUG9pbnRzXzM9ZnVuY3Rpb24oKXtyZXR1cm4od2k9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfR2V0QXR0cmlidXRlSW50MzJGb3JBbGxQb2ludHNfMz1SLmFzbS5mYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxvbD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVVSW50MzJGb3JBbGxQb2ludHNfMz1mdW5jdGlvbigpe3JldHVybihvbD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVVSW50MzJGb3JBbGxQb2ludHNfMz1SLmFzbS5nYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxybD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVEYXRhQXJyYXlGb3JBbGxQb2ludHNfNT1mdW5jdGlvbigpe3JldHVybihybD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9HZXRBdHRyaWJ1dGVEYXRhQXJyYXlGb3JBbGxQb2ludHNfNT1SLmFzbS5oYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxpbD1SLl9lbXNjcmlwdGVuX2JpbmRfRGVjb2Rlcl9Ta2lwQXR0cmlidXRlVHJhbnNmb3JtXzE9ZnVuY3Rpb24oKXtyZXR1cm4oaWw9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfU2tpcEF0dHJpYnV0ZVRyYW5zZm9ybV8xPVIuYXNtLmliKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHNsPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEVuY29kZWRHZW9tZXRyeVR5cGVfRGVwcmVjYXRlZF8xPWZ1bmN0aW9uKCl7cmV0dXJuKHNsPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0dldEVuY29kZWRHZW9tZXRyeVR5cGVfRGVwcmVjYXRlZF8xPVIuYXNtLmpiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGNsPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0RlY29kZUJ1ZmZlclRvUG9pbnRDbG91ZF8yPWZ1bmN0aW9uKCl7cmV0dXJuKGNsPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0RlY29kZUJ1ZmZlclRvUG9pbnRDbG91ZF8yPVIuYXNtLmtiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGFsPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0RlY29kZUJ1ZmZlclRvTWVzaF8yPWZ1bmN0aW9uKCl7cmV0dXJuKGFsPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX0RlY29kZUJ1ZmZlclRvTWVzaF8yPVIuYXNtLmxiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGZsPVIuX2Vtc2NyaXB0ZW5fYmluZF9EZWNvZGVyX19fZGVzdHJveV9fXzA9ZnVuY3Rpb24oKXtyZXR1cm4oZmw9Ui5fZW1zY3JpcHRlbl9iaW5kX0RlY29kZXJfX19kZXN0cm95X19fMD1SLmFzbS5tYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSx1bD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fQXR0cmlidXRlVHJhbnNmb3JtVHlwZV9BVFRSSUJVVEVfSU5WQUxJRF9UUkFOU0ZPUk09ZnVuY3Rpb24oKXtyZXR1cm4odWw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0F0dHJpYnV0ZVRyYW5zZm9ybVR5cGVfQVRUUklCVVRFX0lOVkFMSURfVFJBTlNGT1JNPVIuYXNtLm5iKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGxsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19BdHRyaWJ1dGVUcmFuc2Zvcm1UeXBlX0FUVFJJQlVURV9OT19UUkFOU0ZPUk09ZnVuY3Rpb24oKXtyZXR1cm4obGw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0F0dHJpYnV0ZVRyYW5zZm9ybVR5cGVfQVRUUklCVVRFX05PX1RSQU5TRk9STT1SLmFzbS5vYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxwbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fQXR0cmlidXRlVHJhbnNmb3JtVHlwZV9BVFRSSUJVVEVfUVVBTlRJWkFUSU9OX1RSQU5TRk9STT1mdW5jdGlvbigpe3JldHVybihwbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fQXR0cmlidXRlVHJhbnNmb3JtVHlwZV9BVFRSSUJVVEVfUVVBTlRJWkFUSU9OX1RSQU5TRk9STT1SLmFzbS5wYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxkbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fQXR0cmlidXRlVHJhbnNmb3JtVHlwZV9BVFRSSUJVVEVfT0NUQUhFRFJPTl9UUkFOU0ZPUk09ZnVuY3Rpb24oKXtyZXR1cm4oZGw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0F0dHJpYnV0ZVRyYW5zZm9ybVR5cGVfQVRUUklCVVRFX09DVEFIRURST05fVFJBTlNGT1JNPVIuYXNtLnFiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LGVzPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19HZW9tZXRyeUF0dHJpYnV0ZV9UeXBlX0lOVkFMSUQ9ZnVuY3Rpb24oKXtyZXR1cm4oZXM9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0dlb21ldHJ5QXR0cmlidXRlX1R5cGVfSU5WQUxJRD1SLmFzbS5yYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxtbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fR2VvbWV0cnlBdHRyaWJ1dGVfVHlwZV9QT1NJVElPTj1mdW5jdGlvbigpe3JldHVybihtbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fR2VvbWV0cnlBdHRyaWJ1dGVfVHlwZV9QT1NJVElPTj1SLmFzbS5zYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxobD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fR2VvbWV0cnlBdHRyaWJ1dGVfVHlwZV9OT1JNQUw9ZnVuY3Rpb24oKXtyZXR1cm4oaGw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0dlb21ldHJ5QXR0cmlidXRlX1R5cGVfTk9STUFMPVIuYXNtLnRiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEJzPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19HZW9tZXRyeUF0dHJpYnV0ZV9UeXBlX0NPTE9SPWZ1bmN0aW9uKCl7cmV0dXJuKEJzPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19HZW9tZXRyeUF0dHJpYnV0ZV9UeXBlX0NPTE9SPVIuYXNtLnViKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEdjPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19HZW9tZXRyeUF0dHJpYnV0ZV9UeXBlX1RFWF9DT09SRD1mdW5jdGlvbigpe3JldHVybihHYz1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fR2VvbWV0cnlBdHRyaWJ1dGVfVHlwZV9URVhfQ09PUkQ9Ui5hc20udmIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sX2w9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0dlb21ldHJ5QXR0cmlidXRlX1R5cGVfR0VORVJJQz1mdW5jdGlvbigpe3JldHVybihfbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fR2VvbWV0cnlBdHRyaWJ1dGVfVHlwZV9HRU5FUklDPVIuYXNtLndiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHRmPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19FbmNvZGVkR2VvbWV0cnlUeXBlX0lOVkFMSURfR0VPTUVUUllfVFlQRT1mdW5jdGlvbigpe3JldHVybih0Zj1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRW5jb2RlZEdlb21ldHJ5VHlwZV9JTlZBTElEX0dFT01FVFJZX1RZUEU9Ui5hc20ueGIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0seWw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0VuY29kZWRHZW9tZXRyeVR5cGVfUE9JTlRfQ0xPVUQ9ZnVuY3Rpb24oKXtyZXR1cm4oeWw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0VuY29kZWRHZW9tZXRyeVR5cGVfUE9JTlRfQ0xPVUQ9Ui5hc20ueWIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZ2w9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0VuY29kZWRHZW9tZXRyeVR5cGVfVFJJQU5HVUxBUl9NRVNIPWZ1bmN0aW9uKCl7cmV0dXJuKGdsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19FbmNvZGVkR2VvbWV0cnlUeXBlX1RSSUFOR1VMQVJfTUVTSD1SLmFzbS56YikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxBbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfSU5WQUxJRD1mdW5jdGlvbigpe3JldHVybihBbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfSU5WQUxJRD1SLmFzbS5BYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxibD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfSU5UOD1mdW5jdGlvbigpe3JldHVybihibD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfSU5UOD1SLmFzbS5CYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxUbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfVUlOVDg9ZnVuY3Rpb24oKXtyZXR1cm4oVGw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX1VJTlQ4PVIuYXNtLkNiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHdsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9JTlQxNj1mdW5jdGlvbigpe3JldHVybih3bD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfSU5UMTY9Ui5hc20uRGIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sT2w9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX1VJTlQxNj1mdW5jdGlvbigpe3JldHVybihPbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfVUlOVDE2PVIuYXNtLkViKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LEVsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9JTlQzMj1mdW5jdGlvbigpe3JldHVybihFbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfSU5UMzI9Ui5hc20uRmIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sZWY9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX1VJTlQzMj1mdW5jdGlvbigpe3JldHVybihlZj1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfVUlOVDMyPVIuYXNtLkdiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFJsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9JTlQ2ND1mdW5jdGlvbigpe3JldHVybihSbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfSU5UNjQ9Ui5hc20uSGIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sU2w9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX0RhdGFUeXBlX0RUX1VJTlQ2ND1mdW5jdGlvbigpe3JldHVybihTbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfVUlOVDY0PVIuYXNtLkliKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LENsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9GTE9BVDMyPWZ1bmN0aW9uKCl7cmV0dXJuKENsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9GTE9BVDMyPVIuYXNtLkpiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHhsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9GTE9BVDY0PWZ1bmN0aW9uKCl7cmV0dXJuKHhsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9GTE9BVDY0PVIuYXNtLktiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LFBsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9CT09MPWZ1bmN0aW9uKCl7cmV0dXJuKFBsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9CT09MPVIuYXNtLkxiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LE1sPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19EYXRhVHlwZV9EVF9UWVBFU19DT1VOVD1mdW5jdGlvbigpe3JldHVybihNbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fRGF0YVR5cGVfRFRfVFlQRVNfQ09VTlQ9Ui5hc20uTWIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTmw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX1N0YXR1c0NvZGVfT0s9ZnVuY3Rpb24oKXtyZXR1cm4oTmw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX1N0YXR1c0NvZGVfT0s9Ui5hc20uTmIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sVXM9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX1N0YXR1c0NvZGVfRFJBQ09fRVJST1I9ZnVuY3Rpb24oKXtyZXR1cm4oVXM9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX1N0YXR1c0NvZGVfRFJBQ09fRVJST1I9Ui5hc20uT2IpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sSWw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX1N0YXR1c0NvZGVfSU9fRVJST1I9ZnVuY3Rpb24oKXtyZXR1cm4oSWw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX1N0YXR1c0NvZGVfSU9fRVJST1I9Ui5hc20uUGIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdmw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX1N0YXR1c0NvZGVfSU5WQUxJRF9QQVJBTUVURVI9ZnVuY3Rpb24oKXtyZXR1cm4odmw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX1N0YXR1c0NvZGVfSU5WQUxJRF9QQVJBTUVURVI9Ui5hc20uUWIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sRmw9Ui5fZW1zY3JpcHRlbl9lbnVtX2RyYWNvX1N0YXR1c0NvZGVfVU5TVVBQT1JURURfVkVSU0lPTj1mdW5jdGlvbigpe3JldHVybihGbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fU3RhdHVzQ29kZV9VTlNVUFBPUlRFRF9WRVJTSU9OPVIuYXNtLlJiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LExsPVIuX2Vtc2NyaXB0ZW5fZW51bV9kcmFjb19TdGF0dXNDb2RlX1VOS05PV05fVkVSU0lPTj1mdW5jdGlvbigpe3JldHVybihMbD1SLl9lbXNjcmlwdGVuX2VudW1fZHJhY29fU3RhdHVzQ29kZV9VTktOT1dOX1ZFUlNJT049Ui5hc20uU2IpLmFwcGx5KG51bGwsYXJndW1lbnRzKX07Ui5fbWFsbG9jPWZ1bmN0aW9uKCl7cmV0dXJuKFIuX21hbGxvYz1SLmFzbS5UYikuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxSLl9mcmVlPWZ1bmN0aW9uKCl7cmV0dXJuKFIuX2ZyZWU9Ui5hc20uVWIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX07dmFyIERsPWZ1bmN0aW9uKCl7cmV0dXJuKERsPVIuYXNtLlZiKS5hcHBseShudWxsLGFyZ3VtZW50cyl9O1IuX19fc3RhcnRfZW1fanM9MTU4NTYsUi5fX19zdG9wX2VtX2pzPTE1OTU0O3ZhciBuZjtpZihkbj1mdW5jdGlvbiBWKCl7bmZ8fHAoKSxuZnx8KGRuPVYpfSxSLnByZUluaXQpZm9yKHR5cGVvZiBSLnByZUluaXQ9PSJmdW5jdGlvbiImJihSLnByZUluaXQ9W1IucHJlSW5pdF0pOzA8Ui5wcmVJbml0Lmxlbmd0aDspUi5wcmVJbml0LnBvcCgpKCk7cCgpLGQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLGQucHJvdG90eXBlLmNvbnN0cnVjdG9yPWQsZC5wcm90b3R5cGUuX19jbGFzc19fPWQsZC5fX2NhY2hlX189e30sUi5XcmFwcGVyT2JqZWN0PWQsUi5nZXRDYWNoZT1tLFIud3JhcFBvaW50ZXI9XyxSLmNhc3RPYmplY3Q9ZnVuY3Rpb24oVixLKXtyZXR1cm4gXyhWLnB0cixLKX0sUi5OVUxMPV8oMCksUi5kZXN0cm95PWZ1bmN0aW9uKFYpe2lmKCFWLl9fZGVzdHJveV9fKXRocm93IkVycm9yOiBDYW5ub3QgZGVzdHJveSBvYmplY3QuIChEaWQgeW91IGNyZWF0ZSBpdCB5b3Vyc2VsZj8pIjtWLl9fZGVzdHJveV9fKCksZGVsZXRlIG0oVi5fX2NsYXNzX18pW1YucHRyXX0sUi5jb21wYXJlPWZ1bmN0aW9uKFYsSyl7cmV0dXJuIFYucHRyPT09Sy5wdHJ9LFIuZ2V0UG9pbnRlcj1mdW5jdGlvbihWKXtyZXR1cm4gVi5wdHJ9LFIuZ2V0Q2xhc3M9ZnVuY3Rpb24oVil7cmV0dXJuIFYuX19jbGFzc19ffTt2YXIgQ2U9e2J1ZmZlcjowLHNpemU6MCxwb3M6MCx0ZW1wczpbXSxuZWVkZWQ6MCxwcmVwYXJlOmZ1bmN0aW9uKCl7aWYoQ2UubmVlZGVkKXtmb3IodmFyIFY9MDtWPENlLnRlbXBzLmxlbmd0aDtWKyspUi5fZnJlZShDZS50ZW1wc1tWXSk7Q2UudGVtcHMubGVuZ3RoPTAsUi5fZnJlZShDZS5idWZmZXIpLENlLmJ1ZmZlcj0wLENlLnNpemUrPUNlLm5lZWRlZCxDZS5uZWVkZWQ9MH1DZS5idWZmZXJ8fChDZS5zaXplKz0xMjgsQ2UuYnVmZmVyPVIuX21hbGxvYyhDZS5zaXplKSxDZS5idWZmZXJ8fHModm9pZCAwKSksQ2UucG9zPTB9LGFsbG9jOmZ1bmN0aW9uKFYsSyl7cmV0dXJuIENlLmJ1ZmZlcnx8cyh2b2lkIDApLFY9Vi5sZW5ndGgqSy5CWVRFU19QRVJfRUxFTUVOVCxWPVYrNyYtOCxDZS5wb3MrVj49Q2Uuc2l6ZT8oMDxWfHxzKHZvaWQgMCksQ2UubmVlZGVkKz1WLEs9Ui5fbWFsbG9jKFYpLENlLnRlbXBzLnB1c2goSykpOihLPUNlLmJ1ZmZlcitDZS5wb3MsQ2UucG9zKz1WKSxLfSxjb3B5OmZ1bmN0aW9uKFYsSyx0dCl7c3dpdGNoKHR0Pj4+PTAsSy5CWVRFU19QRVJfRUxFTUVOVCl7Y2FzZSAyOnR0Pj4+PTE7YnJlYWs7Y2FzZSA0OnR0Pj4+PTI7YnJlYWs7Y2FzZSA4OnR0Pj4+PTN9Zm9yKHZhciBNdD0wO010PFYubGVuZ3RoO010KyspS1t0dCtNdF09VltNdF19fTtyZXR1cm4gVC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSksVC5wcm90b3R5cGUuY29uc3RydWN0b3I9VCxULnByb3RvdHlwZS5fX2NsYXNzX189VCxULl9fY2FjaGVfXz17fSxSLlZvaWRQdHI9VCxULnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1ULnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe1plKHRoaXMucHRyKX0sTy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSksTy5wcm90b3R5cGUuY29uc3RydWN0b3I9TyxPLnByb3RvdHlwZS5fX2NsYXNzX189TyxPLl9fY2FjaGVfXz17fSxSLkRlY29kZXJCdWZmZXI9TyxPLnByb3RvdHlwZS5Jbml0PU8ucHJvdG90eXBlLkluaXQ9ZnVuY3Rpb24oVixLKXt2YXIgdHQ9dGhpcy5wdHI7Q2UucHJlcGFyZSgpLHR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9YihWKSksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksS2UodHQsVixLKX0sTy5wcm90b3R5cGUuX19kZXN0cm95X189Ty5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtobih0aGlzLnB0cil9LEUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLEUucHJvdG90eXBlLmNvbnN0cnVjdG9yPUUsRS5wcm90b3R5cGUuX19jbGFzc19fPUUsRS5fX2NhY2hlX189e30sUi5BdHRyaWJ1dGVUcmFuc2Zvcm1EYXRhPUUsRS5wcm90b3R5cGUudHJhbnNmb3JtX3R5cGU9RS5wcm90b3R5cGUudHJhbnNmb3JtX3R5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gcW4odGhpcy5wdHIpfSxFLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1FLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe0tuKHRoaXMucHRyKX0sdy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSksdy5wcm90b3R5cGUuY29uc3RydWN0b3I9dyx3LnByb3RvdHlwZS5fX2NsYXNzX189dyx3Ll9fY2FjaGVfXz17fSxSLkdlb21ldHJ5QXR0cmlidXRlPXcsdy5wcm90b3R5cGUuX19kZXN0cm95X189dy5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXt6ZSh0aGlzLnB0cil9LEMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLEMucHJvdG90eXBlLmNvbnN0cnVjdG9yPUMsQy5wcm90b3R5cGUuX19jbGFzc19fPUMsQy5fX2NhY2hlX189e30sUi5Qb2ludEF0dHJpYnV0ZT1DLEMucHJvdG90eXBlLnNpemU9Qy5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiBMbih0aGlzLnB0cil9LEMucHJvdG90eXBlLkdldEF0dHJpYnV0ZVRyYW5zZm9ybURhdGE9Qy5wcm90b3R5cGUuR2V0QXR0cmlidXRlVHJhbnNmb3JtRGF0YT1mdW5jdGlvbigpe3JldHVybiBfKFduKHRoaXMucHRyKSxFKX0sQy5wcm90b3R5cGUuYXR0cmlidXRlX3R5cGU9Qy5wcm90b3R5cGUuYXR0cmlidXRlX3R5cGU9ZnVuY3Rpb24oKXtyZXR1cm4gem8odGhpcy5wdHIpfSxDLnByb3RvdHlwZS5kYXRhX3R5cGU9Qy5wcm90b3R5cGUuZGF0YV90eXBlPWZ1bmN0aW9uKCl7cmV0dXJuIHJuKHRoaXMucHRyKX0sQy5wcm90b3R5cGUubnVtX2NvbXBvbmVudHM9Qy5wcm90b3R5cGUubnVtX2NvbXBvbmVudHM9ZnVuY3Rpb24oKXtyZXR1cm4gUm4odGhpcy5wdHIpfSxDLnByb3RvdHlwZS5ub3JtYWxpemVkPUMucHJvdG90eXBlLm5vcm1hbGl6ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hIWFyKHRoaXMucHRyKX0sQy5wcm90b3R5cGUuYnl0ZV9zdHJpZGU9Qy5wcm90b3R5cGUuYnl0ZV9zdHJpZGU9ZnVuY3Rpb24oKXtyZXR1cm4gUW4odGhpcy5wdHIpfSxDLnByb3RvdHlwZS5ieXRlX29mZnNldD1DLnByb3RvdHlwZS5ieXRlX29mZnNldD1mdW5jdGlvbigpe3JldHVybiBqbyh0aGlzLnB0cil9LEMucHJvdG90eXBlLnVuaXF1ZV9pZD1DLnByb3RvdHlwZS51bmlxdWVfaWQ9ZnVuY3Rpb24oKXtyZXR1cm4gTnIodGhpcy5wdHIpfSxDLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1DLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe05zKHRoaXMucHRyKX0sTS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSksTS5wcm90b3R5cGUuY29uc3RydWN0b3I9TSxNLnByb3RvdHlwZS5fX2NsYXNzX189TSxNLl9fY2FjaGVfXz17fSxSLkF0dHJpYnV0ZVF1YW50aXphdGlvblRyYW5zZm9ybT1NLE0ucHJvdG90eXBlLkluaXRGcm9tQXR0cmlidXRlPU0ucHJvdG90eXBlLkluaXRGcm9tQXR0cmlidXRlPWZ1bmN0aW9uKFYpe3ZhciBLPXRoaXMucHRyO3JldHVybiBWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSwhIVlpKEssVil9LE0ucHJvdG90eXBlLnF1YW50aXphdGlvbl9iaXRzPU0ucHJvdG90eXBlLnF1YW50aXphdGlvbl9iaXRzPWZ1bmN0aW9uKCl7cmV0dXJuIElyKHRoaXMucHRyKX0sTS5wcm90b3R5cGUubWluX3ZhbHVlPU0ucHJvdG90eXBlLm1pbl92YWx1ZT1mdW5jdGlvbihWKXt2YXIgSz10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksJGkoSyxWKX0sTS5wcm90b3R5cGUucmFuZ2U9TS5wcm90b3R5cGUucmFuZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdnModGhpcy5wdHIpfSxNLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1NLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe2JpKHRoaXMucHRyKX0sTi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSksTi5wcm90b3R5cGUuY29uc3RydWN0b3I9TixOLnByb3RvdHlwZS5fX2NsYXNzX189TixOLl9fY2FjaGVfXz17fSxSLkF0dHJpYnV0ZU9jdGFoZWRyb25UcmFuc2Zvcm09TixOLnByb3RvdHlwZS5Jbml0RnJvbUF0dHJpYnV0ZT1OLnByb3RvdHlwZS5Jbml0RnJvbUF0dHJpYnV0ZT1mdW5jdGlvbihWKXt2YXIgSz10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksISFwbyhLLFYpfSxOLnByb3RvdHlwZS5xdWFudGl6YXRpb25fYml0cz1OLnByb3RvdHlwZS5xdWFudGl6YXRpb25fYml0cz1mdW5jdGlvbigpe3JldHVybiB2cih0aGlzLnB0cil9LE4ucHJvdG90eXBlLl9fZGVzdHJveV9fPU4ucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7TWModGhpcy5wdHIpfSxGLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSxGLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1GLEYucHJvdG90eXBlLl9fY2xhc3NfXz1GLEYuX19jYWNoZV9fPXt9LFIuUG9pbnRDbG91ZD1GLEYucHJvdG90eXBlLm51bV9hdHRyaWJ1dGVzPUYucHJvdG90eXBlLm51bV9hdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIERuKHRoaXMucHRyKX0sRi5wcm90b3R5cGUubnVtX3BvaW50cz1GLnByb3RvdHlwZS5udW1fcG9pbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIFRpKHRoaXMucHRyKX0sRi5wcm90b3R5cGUuX19kZXN0cm95X189Ri5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtMZSh0aGlzLnB0cil9LEkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLEkucHJvdG90eXBlLmNvbnN0cnVjdG9yPUksSS5wcm90b3R5cGUuX19jbGFzc19fPUksSS5fX2NhY2hlX189e30sUi5NZXNoPUksSS5wcm90b3R5cGUubnVtX2ZhY2VzPUkucHJvdG90eXBlLm51bV9mYWNlcz1mdW5jdGlvbigpe3JldHVybiBBdSh0aGlzLnB0cil9LEkucHJvdG90eXBlLm51bV9hdHRyaWJ1dGVzPUkucHJvdG90eXBlLm51bV9hdHRyaWJ1dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIGJ1KHRoaXMucHRyKX0sSS5wcm90b3R5cGUubnVtX3BvaW50cz1JLnByb3RvdHlwZS5udW1fcG9pbnRzPWZ1bmN0aW9uKCl7cmV0dXJuIFR1KHRoaXMucHRyKX0sSS5wcm90b3R5cGUuX19kZXN0cm95X189SS5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtJYyh0aGlzLnB0cil9LHYucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLHYucHJvdG90eXBlLmNvbnN0cnVjdG9yPXYsdi5wcm90b3R5cGUuX19jbGFzc19fPXYsdi5fX2NhY2hlX189e30sUi5NZXRhZGF0YT12LHYucHJvdG90eXBlLl9fZGVzdHJveV9fPXYucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7SGEodGhpcy5wdHIpfSxCLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSxCLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1CLEIucHJvdG90eXBlLl9fY2xhc3NfXz1CLEIuX19jYWNoZV9fPXt9LFIuU3RhdHVzPUIsQi5wcm90b3R5cGUuY29kZT1CLnByb3RvdHlwZS5jb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHd1KHRoaXMucHRyKX0sQi5wcm90b3R5cGUub2s9Qi5wcm90b3R5cGUub2s9ZnVuY3Rpb24oKXtyZXR1cm4hIXFhKHRoaXMucHRyKX0sQi5wcm90b3R5cGUuZXJyb3JfbXNnPUIucHJvdG90eXBlLmVycm9yX21zZz1mdW5jdGlvbigpe3JldHVybiByKFppKHRoaXMucHRyKSl9LEIucHJvdG90eXBlLl9fZGVzdHJveV9fPUIucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7T3UodGhpcy5wdHIpfSxBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSxBLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BLEEucHJvdG90eXBlLl9fY2xhc3NfXz1BLEEuX19jYWNoZV9fPXt9LFIuRHJhY29GbG9hdDMyQXJyYXk9QSxBLnByb3RvdHlwZS5HZXRWYWx1ZT1BLnByb3RvdHlwZS5HZXRWYWx1ZT1mdW5jdGlvbihWKXt2YXIgSz10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksUnUoSyxWKX0sQS5wcm90b3R5cGUuc2l6ZT1BLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIFFpKHRoaXMucHRyKX0sQS5wcm90b3R5cGUuX19kZXN0cm95X189QS5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtKaSh0aGlzLnB0cil9LFMucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLFMucHJvdG90eXBlLmNvbnN0cnVjdG9yPVMsUy5wcm90b3R5cGUuX19jbGFzc19fPVMsUy5fX2NhY2hlX189e30sUi5EcmFjb0ludDhBcnJheT1TLFMucHJvdG90eXBlLkdldFZhbHVlPVMucHJvdG90eXBlLkdldFZhbHVlPWZ1bmN0aW9uKFYpe3ZhciBLPXRoaXMucHRyO3JldHVybiBWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxTdShLLFYpfSxTLnByb3RvdHlwZS5zaXplPVMucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gQ3UodGhpcy5wdHIpfSxTLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1TLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe0ZyKHRoaXMucHRyKX0seC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSkseC5wcm90b3R5cGUuY29uc3RydWN0b3I9eCx4LnByb3RvdHlwZS5fX2NsYXNzX189eCx4Ll9fY2FjaGVfXz17fSxSLkRyYWNvVUludDhBcnJheT14LHgucHJvdG90eXBlLkdldFZhbHVlPXgucHJvdG90eXBlLkdldFZhbHVlPWZ1bmN0aW9uKFYpe3ZhciBLPXRoaXMucHRyO3JldHVybiBWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxXYShLLFYpfSx4LnByb3RvdHlwZS5zaXplPXgucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gTGModGhpcy5wdHIpfSx4LnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz14LnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe3h1KHRoaXMucHRyKX0sTC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSksTC5wcm90b3R5cGUuY29uc3RydWN0b3I9TCxMLnByb3RvdHlwZS5fX2NsYXNzX189TCxMLl9fY2FjaGVfXz17fSxSLkRyYWNvSW50MTZBcnJheT1MLEwucHJvdG90eXBlLkdldFZhbHVlPUwucHJvdG90eXBlLkdldFZhbHVlPWZ1bmN0aW9uKFYpe3ZhciBLPXRoaXMucHRyO3JldHVybiBWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxQdShLLFYpfSxMLnByb3RvdHlwZS5zaXplPUwucHJvdG90eXBlLnNpemU9ZnVuY3Rpb24oKXtyZXR1cm4gTXUodGhpcy5wdHIpfSxMLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1MLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe051KHRoaXMucHRyKX0sei5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkLnByb3RvdHlwZSksei5wcm90b3R5cGUuY29uc3RydWN0b3I9eix6LnByb3RvdHlwZS5fX2NsYXNzX189eix6Ll9fY2FjaGVfXz17fSxSLkRyYWNvVUludDE2QXJyYXk9eix6LnByb3RvdHlwZS5HZXRWYWx1ZT16LnByb3RvdHlwZS5HZXRWYWx1ZT1mdW5jdGlvbihWKXt2YXIgSz10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksdnUoSyxWKX0sei5wcm90b3R5cGUuc2l6ZT16LnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIEZ1KHRoaXMucHRyKX0sei5wcm90b3R5cGUuX19kZXN0cm95X189ei5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtYYSh0aGlzLnB0cil9LGoucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLGoucHJvdG90eXBlLmNvbnN0cnVjdG9yPWosai5wcm90b3R5cGUuX19jbGFzc19fPWosai5fX2NhY2hlX189e30sUi5EcmFjb0ludDMyQXJyYXk9aixqLnByb3RvdHlwZS5HZXRWYWx1ZT1qLnByb3RvdHlwZS5HZXRWYWx1ZT1mdW5jdGlvbihWKXt2YXIgSz10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksRHUoSyxWKX0sai5wcm90b3R5cGUuc2l6ZT1qLnByb3RvdHlwZS5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIEJ1KHRoaXMucHRyKX0sai5wcm90b3R5cGUuX19kZXN0cm95X189ai5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtVdSh0aGlzLnB0cil9LGsucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZC5wcm90b3R5cGUpLGsucHJvdG90eXBlLmNvbnN0cnVjdG9yPWssay5wcm90b3R5cGUuX19jbGFzc19fPWssay5fX2NhY2hlX189e30sUi5EcmFjb1VJbnQzMkFycmF5PWssay5wcm90b3R5cGUuR2V0VmFsdWU9ay5wcm90b3R5cGUuR2V0VmFsdWU9ZnVuY3Rpb24oVil7dmFyIEs9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLGt1KEssVil9LGsucHJvdG90eXBlLnNpemU9ay5wcm90b3R5cGUuc2l6ZT1mdW5jdGlvbigpe3JldHVybiBHdSh0aGlzLnB0cil9LGsucHJvdG90eXBlLl9fZGVzdHJveV9fPWsucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7RnModGhpcy5wdHIpfSxxLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSxxLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1xLHEucHJvdG90eXBlLl9fY2xhc3NfXz1xLHEuX19jYWNoZV9fPXt9LFIuTWV0YWRhdGFRdWVyaWVyPXEscS5wcm90b3R5cGUuSGFzRW50cnk9cS5wcm90b3R5cGUuSGFzRW50cnk9ZnVuY3Rpb24oVixLKXt2YXIgdHQ9dGhpcy5wdHI7cmV0dXJuIENlLnByZXBhcmUoKSxWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxLPUsmJnR5cGVvZiBLPT0ib2JqZWN0Ij9LLnB0cjpnKEspLCEhenUodHQsVixLKX0scS5wcm90b3R5cGUuR2V0SW50RW50cnk9cS5wcm90b3R5cGUuR2V0SW50RW50cnk9ZnVuY3Rpb24oVixLKXt2YXIgdHQ9dGhpcy5wdHI7cmV0dXJuIENlLnByZXBhcmUoKSxWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxLPUsmJnR5cGVvZiBLPT0ib2JqZWN0Ij9LLnB0cjpnKEspLGZyKHR0LFYsSyl9LHEucHJvdG90eXBlLkdldEludEVudHJ5QXJyYXk9cS5wcm90b3R5cGUuR2V0SW50RW50cnlBcnJheT1mdW5jdGlvbihWLEssdHQpe3ZhciBNdD10aGlzLnB0cjtDZS5wcmVwYXJlKCksViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksSz1LJiZ0eXBlb2YgSz09Im9iamVjdCI/Sy5wdHI6ZyhLKSx0dCYmdHlwZW9mIHR0PT0ib2JqZWN0IiYmKHR0PXR0LnB0ciksWWEoTXQsVixLLHR0KX0scS5wcm90b3R5cGUuR2V0RG91YmxlRW50cnk9cS5wcm90b3R5cGUuR2V0RG91YmxlRW50cnk9ZnVuY3Rpb24oVixLKXt2YXIgdHQ9dGhpcy5wdHI7cmV0dXJuIENlLnByZXBhcmUoKSxWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxLPUsmJnR5cGVvZiBLPT0ib2JqZWN0Ij9LLnB0cjpnKEspLGp1KHR0LFYsSyl9LHEucHJvdG90eXBlLkdldFN0cmluZ0VudHJ5PXEucHJvdG90eXBlLkdldFN0cmluZ0VudHJ5PWZ1bmN0aW9uKFYsSyl7dmFyIHR0PXRoaXMucHRyO3JldHVybiBDZS5wcmVwYXJlKCksViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksSz1LJiZ0eXBlb2YgSz09Im9iamVjdCI/Sy5wdHI6ZyhLKSxyKEh1KHR0LFYsSykpfSxxLnByb3RvdHlwZS5OdW1FbnRyaWVzPXEucHJvdG90eXBlLk51bUVudHJpZXM9ZnVuY3Rpb24oVil7dmFyIEs9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLHF1KEssVil9LHEucHJvdG90eXBlLkdldEVudHJ5TmFtZT1xLnByb3RvdHlwZS5HZXRFbnRyeU5hbWU9ZnVuY3Rpb24oVixLKXt2YXIgdHQ9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLHIoSG8odHQsVixLKSl9LHEucHJvdG90eXBlLl9fZGVzdHJveV9fPXEucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7JGEodGhpcy5wdHIpfSxXLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGQucHJvdG90eXBlKSxXLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1XLFcucHJvdG90eXBlLl9fY2xhc3NfXz1XLFcuX19jYWNoZV9fPXt9LFIuRGVjb2Rlcj1XLFcucHJvdG90eXBlLkRlY29kZUFycmF5VG9Qb2ludENsb3VkPVcucHJvdG90eXBlLkRlY29kZUFycmF5VG9Qb2ludENsb3VkPWZ1bmN0aW9uKFYsSyx0dCl7dmFyIE10PXRoaXMucHRyO3JldHVybiBDZS5wcmVwYXJlKCksdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1iKFYpKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSx0dCYmdHlwZW9mIHR0PT0ib2JqZWN0IiYmKHR0PXR0LnB0ciksXyhMcyhNdCxWLEssdHQpLEIpfSxXLnByb3RvdHlwZS5EZWNvZGVBcnJheVRvTWVzaD1XLnByb3RvdHlwZS5EZWNvZGVBcnJheVRvTWVzaD1mdW5jdGlvbihWLEssdHQpe3ZhciBNdD10aGlzLnB0cjtyZXR1cm4gQ2UucHJlcGFyZSgpLHR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9YihWKSksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksdHQmJnR5cGVvZiB0dD09Im9iamVjdCImJih0dD10dC5wdHIpLF8oS3UoTXQsVixLLHR0KSxCKX0sVy5wcm90b3R5cGUuR2V0QXR0cmlidXRlSWQ9Vy5wcm90b3R5cGUuR2V0QXR0cmlidXRlSWQ9ZnVuY3Rpb24oVixLKXt2YXIgdHQ9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLEJjKHR0LFYsSyl9LFcucHJvdG90eXBlLkdldEF0dHJpYnV0ZUlkQnlOYW1lPVcucHJvdG90eXBlLkdldEF0dHJpYnV0ZUlkQnlOYW1lPWZ1bmN0aW9uKFYsSyl7dmFyIHR0PXRoaXMucHRyO3JldHVybiBDZS5wcmVwYXJlKCksViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksSz1LJiZ0eXBlb2YgSz09Im9iamVjdCI/Sy5wdHI6ZyhLKSxXdSh0dCxWLEspfSxXLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJZEJ5TWV0YWRhdGFFbnRyeT1XLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJZEJ5TWV0YWRhdGFFbnRyeT1mdW5jdGlvbihWLEssdHQpe3ZhciBNdD10aGlzLnB0cjtyZXR1cm4gQ2UucHJlcGFyZSgpLFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLEs9SyYmdHlwZW9mIEs9PSJvYmplY3QiP0sucHRyOmcoSyksdHQ9dHQmJnR5cGVvZiB0dD09Im9iamVjdCI/dHQucHRyOmcodHQpLFFhKE10LFYsSyx0dCl9LFcucHJvdG90eXBlLkdldEF0dHJpYnV0ZT1XLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGU9ZnVuY3Rpb24oVixLKXt2YXIgdHQ9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLF8oSmEodHQsVixLKSxDKX0sVy5wcm90b3R5cGUuR2V0QXR0cmlidXRlQnlVbmlxdWVJZD1XLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVCeVVuaXF1ZUlkPWZ1bmN0aW9uKFYsSyl7dmFyIHR0PXRoaXMucHRyO3JldHVybiBWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSxfKFh1KHR0LFYsSyksQyl9LFcucHJvdG90eXBlLkdldE1ldGFkYXRhPVcucHJvdG90eXBlLkdldE1ldGFkYXRhPWZ1bmN0aW9uKFYpe3ZhciBLPXRoaXMucHRyO3JldHVybiBWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxfKFl1KEssViksdil9LFcucHJvdG90eXBlLkdldEF0dHJpYnV0ZU1ldGFkYXRhPVcucHJvdG90eXBlLkdldEF0dHJpYnV0ZU1ldGFkYXRhPWZ1bmN0aW9uKFYsSyl7dmFyIHR0PXRoaXMucHRyO3JldHVybiBWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSxfKFVjKHR0LFYsSyksdil9LFcucHJvdG90eXBlLkdldEZhY2VGcm9tTWVzaD1XLnByb3RvdHlwZS5HZXRGYWNlRnJvbU1lc2g9ZnVuY3Rpb24oVixLLHR0KXt2YXIgTXQ9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLHR0JiZ0eXBlb2YgdHQ9PSJvYmplY3QiJiYodHQ9dHQucHRyKSwhIUFvKE10LFYsSyx0dCl9LFcucHJvdG90eXBlLkdldFRyaWFuZ2xlU3RyaXBzRnJvbU1lc2g9Vy5wcm90b3R5cGUuR2V0VHJpYW5nbGVTdHJpcHNGcm9tTWVzaD1mdW5jdGlvbihWLEspe3ZhciB0dD10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksa2ModHQsVixLKX0sVy5wcm90b3R5cGUuR2V0VHJpYW5nbGVzVUludDE2QXJyYXk9Vy5wcm90b3R5cGUuR2V0VHJpYW5nbGVzVUludDE2QXJyYXk9ZnVuY3Rpb24oVixLLHR0KXt2YXIgTXQ9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLHR0JiZ0eXBlb2YgdHQ9PSJvYmplY3QiJiYodHQ9dHQucHRyKSwhISR1KE10LFYsSyx0dCl9LFcucHJvdG90eXBlLkdldFRyaWFuZ2xlc1VJbnQzMkFycmF5PVcucHJvdG90eXBlLkdldFRyaWFuZ2xlc1VJbnQzMkFycmF5PWZ1bmN0aW9uKFYsSyx0dCl7dmFyIE10PXRoaXMucHRyO3JldHVybiBWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSx0dCYmdHlwZW9mIHR0PT0ib2JqZWN0IiYmKHR0PXR0LnB0ciksISFadShNdCxWLEssdHQpfSxXLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVGbG9hdD1XLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVGbG9hdD1mdW5jdGlvbihWLEssdHQpe3ZhciBNdD10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksdHQmJnR5cGVvZiB0dD09Im9iamVjdCImJih0dD10dC5wdHIpLCEhUXUoTXQsVixLLHR0KX0sVy5wcm90b3R5cGUuR2V0QXR0cmlidXRlRmxvYXRGb3JBbGxQb2ludHM9Vy5wcm90b3R5cGUuR2V0QXR0cmlidXRlRmxvYXRGb3JBbGxQb2ludHM9ZnVuY3Rpb24oVixLLHR0KXt2YXIgTXQ9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLHR0JiZ0eXBlb2YgdHQ9PSJvYmplY3QiJiYodHQ9dHQucHRyKSwhIXVyKE10LFYsSyx0dCl9LFcucHJvdG90eXBlLkdldEF0dHJpYnV0ZUludEZvckFsbFBvaW50cz1XLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJbnRGb3JBbGxQb2ludHM9ZnVuY3Rpb24oVixLLHR0KXt2YXIgTXQ9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLHR0JiZ0eXBlb2YgdHQ9PSJvYmplY3QiJiYodHQ9dHQucHRyKSwhIUp1KE10LFYsSyx0dCl9LFcucHJvdG90eXBlLkdldEF0dHJpYnV0ZUludDhGb3JBbGxQb2ludHM9Vy5wcm90b3R5cGUuR2V0QXR0cmlidXRlSW50OEZvckFsbFBvaW50cz1mdW5jdGlvbihWLEssdHQpe3ZhciBNdD10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksdHQmJnR5cGVvZiB0dD09Im9iamVjdCImJih0dD10dC5wdHIpLCEhdGwoTXQsVixLLHR0KX0sVy5wcm90b3R5cGUuR2V0QXR0cmlidXRlVUludDhGb3JBbGxQb2ludHM9Vy5wcm90b3R5cGUuR2V0QXR0cmlidXRlVUludDhGb3JBbGxQb2ludHM9ZnVuY3Rpb24oVixLLHR0KXt2YXIgTXQ9dGhpcy5wdHI7cmV0dXJuIFYmJnR5cGVvZiBWPT0ib2JqZWN0IiYmKFY9Vi5wdHIpLEsmJnR5cGVvZiBLPT0ib2JqZWN0IiYmKEs9Sy5wdHIpLHR0JiZ0eXBlb2YgdHQ9PSJvYmplY3QiJiYodHQ9dHQucHRyKSwhIWVsKE10LFYsSyx0dCl9LFcucHJvdG90eXBlLkdldEF0dHJpYnV0ZUludDE2Rm9yQWxsUG9pbnRzPVcucHJvdG90eXBlLkdldEF0dHJpYnV0ZUludDE2Rm9yQWxsUG9pbnRzPWZ1bmN0aW9uKFYsSyx0dCl7dmFyIE10PXRoaXMucHRyO3JldHVybiBWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSx0dCYmdHlwZW9mIHR0PT0ib2JqZWN0IiYmKHR0PXR0LnB0ciksISFEcyhNdCxWLEssdHQpfSxXLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVVSW50MTZGb3JBbGxQb2ludHM9Vy5wcm90b3R5cGUuR2V0QXR0cmlidXRlVUludDE2Rm9yQWxsUG9pbnRzPWZ1bmN0aW9uKFYsSyx0dCl7dmFyIE10PXRoaXMucHRyO3JldHVybiBWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSx0dCYmdHlwZW9mIHR0PT0ib2JqZWN0IiYmKHR0PXR0LnB0ciksISFubChNdCxWLEssdHQpfSxXLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJbnQzMkZvckFsbFBvaW50cz1XLnByb3RvdHlwZS5HZXRBdHRyaWJ1dGVJbnQzMkZvckFsbFBvaW50cz1mdW5jdGlvbihWLEssdHQpe3ZhciBNdD10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksdHQmJnR5cGVvZiB0dD09Im9iamVjdCImJih0dD10dC5wdHIpLCEhd2koTXQsVixLLHR0KX0sVy5wcm90b3R5cGUuR2V0QXR0cmlidXRlVUludDMyRm9yQWxsUG9pbnRzPVcucHJvdG90eXBlLkdldEF0dHJpYnV0ZVVJbnQzMkZvckFsbFBvaW50cz1mdW5jdGlvbihWLEssdHQpe3ZhciBNdD10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksdHQmJnR5cGVvZiB0dD09Im9iamVjdCImJih0dD10dC5wdHIpLCEhb2woTXQsVixLLHR0KX0sVy5wcm90b3R5cGUuR2V0QXR0cmlidXRlRGF0YUFycmF5Rm9yQWxsUG9pbnRzPVcucHJvdG90eXBlLkdldEF0dHJpYnV0ZURhdGFBcnJheUZvckFsbFBvaW50cz1mdW5jdGlvbihWLEssdHQsTXQsdWUpe3ZhciBUZT10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksdHQmJnR5cGVvZiB0dD09Im9iamVjdCImJih0dD10dC5wdHIpLE10JiZ0eXBlb2YgTXQ9PSJvYmplY3QiJiYoTXQ9TXQucHRyKSx1ZSYmdHlwZW9mIHVlPT0ib2JqZWN0IiYmKHVlPXVlLnB0ciksISFybChUZSxWLEssdHQsTXQsdWUpfSxXLnByb3RvdHlwZS5Ta2lwQXR0cmlidXRlVHJhbnNmb3JtPVcucHJvdG90eXBlLlNraXBBdHRyaWJ1dGVUcmFuc2Zvcm09ZnVuY3Rpb24oVil7dmFyIEs9dGhpcy5wdHI7ViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksaWwoSyxWKX0sVy5wcm90b3R5cGUuR2V0RW5jb2RlZEdlb21ldHJ5VHlwZV9EZXByZWNhdGVkPVcucHJvdG90eXBlLkdldEVuY29kZWRHZW9tZXRyeVR5cGVfRGVwcmVjYXRlZD1mdW5jdGlvbihWKXt2YXIgSz10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksc2woSyxWKX0sVy5wcm90b3R5cGUuRGVjb2RlQnVmZmVyVG9Qb2ludENsb3VkPVcucHJvdG90eXBlLkRlY29kZUJ1ZmZlclRvUG9pbnRDbG91ZD1mdW5jdGlvbihWLEspe3ZhciB0dD10aGlzLnB0cjtyZXR1cm4gViYmdHlwZW9mIFY9PSJvYmplY3QiJiYoVj1WLnB0ciksSyYmdHlwZW9mIEs9PSJvYmplY3QiJiYoSz1LLnB0ciksXyhjbCh0dCxWLEspLEIpfSxXLnByb3RvdHlwZS5EZWNvZGVCdWZmZXJUb01lc2g9Vy5wcm90b3R5cGUuRGVjb2RlQnVmZmVyVG9NZXNoPWZ1bmN0aW9uKFYsSyl7dmFyIHR0PXRoaXMucHRyO3JldHVybiBWJiZ0eXBlb2YgVj09Im9iamVjdCImJihWPVYucHRyKSxLJiZ0eXBlb2YgSz09Im9iamVjdCImJihLPUsucHRyKSxfKGFsKHR0LFYsSyksQil9LFcucHJvdG90eXBlLl9fZGVzdHJveV9fPVcucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7ZmwodGhpcy5wdHIpfSxmdW5jdGlvbigpe2Z1bmN0aW9uIFYoKXtSLkFUVFJJQlVURV9JTlZBTElEX1RSQU5TRk9STT11bCgpLFIuQVRUUklCVVRFX05PX1RSQU5TRk9STT1sbCgpLFIuQVRUUklCVVRFX1FVQU5USVpBVElPTl9UUkFOU0ZPUk09cGwoKSxSLkFUVFJJQlVURV9PQ1RBSEVEUk9OX1RSQU5TRk9STT1kbCgpLFIuSU5WQUxJRD1lcygpLFIuUE9TSVRJT049bWwoKSxSLk5PUk1BTD1obCgpLFIuQ09MT1I9QnMoKSxSLlRFWF9DT09SRD1HYygpLFIuR0VORVJJQz1fbCgpLFIuSU5WQUxJRF9HRU9NRVRSWV9UWVBFPXRmKCksUi5QT0lOVF9DTE9VRD15bCgpLFIuVFJJQU5HVUxBUl9NRVNIPWdsKCksUi5EVF9JTlZBTElEPUFsKCksUi5EVF9JTlQ4PWJsKCksUi5EVF9VSU5UOD1UbCgpLFIuRFRfSU5UMTY9d2woKSxSLkRUX1VJTlQxNj1PbCgpLFIuRFRfSU5UMzI9RWwoKSxSLkRUX1VJTlQzMj1lZigpLFIuRFRfSU5UNjQ9UmwoKSxSLkRUX1VJTlQ2ND1TbCgpLFIuRFRfRkxPQVQzMj1DbCgpLFIuRFRfRkxPQVQ2ND14bCgpLFIuRFRfQk9PTD1QbCgpLFIuRFRfVFlQRVNfQ09VTlQ9TWwoKSxSLk9LPU5sKCksUi5EUkFDT19FUlJPUj1VcygpLFIuSU9fRVJST1I9SWwoKSxSLklOVkFMSURfUEFSQU1FVEVSPXZsKCksUi5VTlNVUFBPUlRFRF9WRVJTSU9OPUZsKCksUi5VTktOT1dOX1ZFUlNJT049TGwoKX1vZT9WKCk6cG4udW5zaGlmdChWKX0oKSx0eXBlb2YgUi5vbk1vZHVsZVBhcnNlZD09ImZ1bmN0aW9uIiYmUi5vbk1vZHVsZVBhcnNlZCgpLFIuRGVjb2Rlci5wcm90b3R5cGUuR2V0RW5jb2RlZEdlb21ldHJ5VHlwZT1mdW5jdGlvbihWKXtpZihWLl9fY2xhc3NfXyYmVi5fX2NsYXNzX189PT1SLkRlY29kZXJCdWZmZXIpcmV0dXJuIFIuRGVjb2Rlci5wcm90b3R5cGUuR2V0RW5jb2RlZEdlb21ldHJ5VHlwZV9EZXByZWNhdGVkKFYpO2lmKDg+Vi5ieXRlTGVuZ3RoKXJldHVybiBSLklOVkFMSURfR0VPTUVUUllfVFlQRTtzd2l0Y2goVls3XSl7Y2FzZSAwOnJldHVybiBSLlBPSU5UX0NMT1VEO2Nhc2UgMTpyZXR1cm4gUi5UUklBTkdVTEFSX01FU0g7ZGVmYXVsdDpyZXR1cm4gUi5JTlZBTElEX0dFT01FVFJZX1RZUEV9fSxlLnJlYWR5fX0oKTt0eXBlb2YgcHU9PSJvYmplY3QiJiZ0eXBlb2YgRWc9PSJvYmplY3QiP0VnLmV4cG9ydHM9T2c6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoW10sZnVuY3Rpb24oKXtyZXR1cm4gT2d9KTp0eXBlb2YgcHU9PSJvYmplY3QiJiYocHUuRHJhY29EZWNvZGVyTW9kdWxlPU9nKX0pO3ZhciBDZz17fTtkZShDZyx7ZGVmYXVsdDooKT0+VlV9KTtmdW5jdGlvbiB2VSh0LGUpe2xldCBuPXQubnVtX3BvaW50cygpLG89dC5udW1fZmFjZXMoKSxyPW5ldyBNZS5EcmFjb0ludDMyQXJyYXksaT1vKjMscz1GdC5jcmVhdGVUeXBlZEFycmF5KG4saSksZj0wO2ZvcihsZXQgdT0wO3U8bzsrK3UpZS5HZXRGYWNlRnJvbU1lc2godCx1LHIpLHNbZiswXT1yLkdldFZhbHVlKDApLHNbZisxXT1yLkdldFZhbHVlKDEpLHNbZisyXT1yLkdldFZhbHVlKDIpLGYrPTM7cmV0dXJuIE1lLmRlc3Ryb3kocikse3R5cGVkQXJyYXk6cyxudW1iZXJPZkluZGljZXM6aX19ZnVuY3Rpb24gRlUodCxlLG4sbyxyKXtsZXQgaSxzO28ucXVhbnRpemF0aW9uQml0czw9OD8ocz1uZXcgTWUuRHJhY29VSW50OEFycmF5LGk9bmV3IFVpbnQ4QXJyYXkociksZS5HZXRBdHRyaWJ1dGVVSW50OEZvckFsbFBvaW50cyh0LG4scykpOm8ucXVhbnRpemF0aW9uQml0czw9MTY/KHM9bmV3IE1lLkRyYWNvVUludDE2QXJyYXksaT1uZXcgVWludDE2QXJyYXkociksZS5HZXRBdHRyaWJ1dGVVSW50MTZGb3JBbGxQb2ludHModCxuLHMpKToocz1uZXcgTWUuRHJhY29GbG9hdDMyQXJyYXksaT1uZXcgRmxvYXQzMkFycmF5KHIpLGUuR2V0QXR0cmlidXRlRmxvYXRGb3JBbGxQb2ludHModCxuLHMpKTtmb3IobGV0IGY9MDtmPHI7KytmKWlbZl09cy5HZXRWYWx1ZShmKTtyZXR1cm4gTWUuZGVzdHJveShzKSxpfWZ1bmN0aW9uIExVKHQsZSxuLG8pe2xldCByLGk7c3dpdGNoKG4uZGF0YV90eXBlKCkpe2Nhc2UgMTpjYXNlIDExOmk9bmV3IE1lLkRyYWNvSW50OEFycmF5LHI9bmV3IEludDhBcnJheShvKSxlLkdldEF0dHJpYnV0ZUludDhGb3JBbGxQb2ludHModCxuLGkpO2JyZWFrO2Nhc2UgMjppPW5ldyBNZS5EcmFjb1VJbnQ4QXJyYXkscj1uZXcgVWludDhBcnJheShvKSxlLkdldEF0dHJpYnV0ZVVJbnQ4Rm9yQWxsUG9pbnRzKHQsbixpKTticmVhaztjYXNlIDM6aT1uZXcgTWUuRHJhY29JbnQxNkFycmF5LHI9bmV3IEludDE2QXJyYXkobyksZS5HZXRBdHRyaWJ1dGVJbnQxNkZvckFsbFBvaW50cyh0LG4saSk7YnJlYWs7Y2FzZSA0Omk9bmV3IE1lLkRyYWNvVUludDE2QXJyYXkscj1uZXcgVWludDE2QXJyYXkobyksZS5HZXRBdHRyaWJ1dGVVSW50MTZGb3JBbGxQb2ludHModCxuLGkpO2JyZWFrO2Nhc2UgNTpjYXNlIDc6aT1uZXcgTWUuRHJhY29JbnQzMkFycmF5LHI9bmV3IEludDMyQXJyYXkobyksZS5HZXRBdHRyaWJ1dGVJbnQzMkZvckFsbFBvaW50cyh0LG4saSk7YnJlYWs7Y2FzZSA2OmNhc2UgODppPW5ldyBNZS5EcmFjb1VJbnQzMkFycmF5LHI9bmV3IFVpbnQzMkFycmF5KG8pLGUuR2V0QXR0cmlidXRlVUludDMyRm9yQWxsUG9pbnRzKHQsbixpKTticmVhaztjYXNlIDk6Y2FzZSAxMDppPW5ldyBNZS5EcmFjb0Zsb2F0MzJBcnJheSxyPW5ldyBGbG9hdDMyQXJyYXkobyksZS5HZXRBdHRyaWJ1dGVGbG9hdEZvckFsbFBvaW50cyh0LG4saSk7YnJlYWt9Zm9yKGxldCBzPTA7czxvOysrcylyW3NdPWkuR2V0VmFsdWUocyk7cmV0dXJuIE1lLmRlc3Ryb3koaSkscn1mdW5jdGlvbiBfMih0LGUsbil7bGV0IG89dC5udW1fcG9pbnRzKCkscj1uLm51bV9jb21wb25lbnRzKCksaSxzPW5ldyBNZS5BdHRyaWJ1dGVRdWFudGl6YXRpb25UcmFuc2Zvcm07aWYocy5Jbml0RnJvbUF0dHJpYnV0ZShuKSl7bGV0IGw9bmV3IEFycmF5KHIpO2ZvcihsZXQgcD0wO3A8cjsrK3ApbFtwXT1zLm1pbl92YWx1ZShwKTtpPXtxdWFudGl6YXRpb25CaXRzOnMucXVhbnRpemF0aW9uX2JpdHMoKSxtaW5WYWx1ZXM6bCxyYW5nZTpzLnJhbmdlKCksb2N0RW5jb2RlZDohMX19TWUuZGVzdHJveShzKSxzPW5ldyBNZS5BdHRyaWJ1dGVPY3RhaGVkcm9uVHJhbnNmb3JtLHMuSW5pdEZyb21BdHRyaWJ1dGUobikmJihpPXtxdWFudGl6YXRpb25CaXRzOnMucXVhbnRpemF0aW9uX2JpdHMoKSxvY3RFbmNvZGVkOiEwfSksTWUuZGVzdHJveShzKTtsZXQgZj1vKnIsdTtoKGkpP3U9RlUodCxlLG4saSxmKTp1PUxVKHQsZSxuLGYpO2xldCBjPWV0LmZyb21UeXBlZEFycmF5KHUpO3JldHVybnthcnJheTp1LGRhdGE6e2NvbXBvbmVudHNQZXJBdHRyaWJ1dGU6cixjb21wb25lbnREYXRhdHlwZTpjLGJ5dGVPZmZzZXQ6bi5ieXRlX29mZnNldCgpLGJ5dGVTdHJpZGU6ZXQuZ2V0U2l6ZUluQnl0ZXMoYykqcixub3JtYWxpemVkOm4ubm9ybWFsaXplZCgpLHF1YW50aXphdGlvbjppfX19ZnVuY3Rpb24gRFUodCl7bGV0IGU9bmV3IE1lLkRlY29kZXI7dC5kZXF1YW50aXplSW5TaGFkZXImJihlLlNraXBBdHRyaWJ1dGVUcmFuc2Zvcm0oTWUuUE9TSVRJT04pLGUuU2tpcEF0dHJpYnV0ZVRyYW5zZm9ybShNZS5OT1JNQUwpKTtsZXQgbj1uZXcgTWUuRGVjb2RlckJ1ZmZlcjtpZihuLkluaXQodC5idWZmZXIsdC5idWZmZXIubGVuZ3RoKSxlLkdldEVuY29kZWRHZW9tZXRyeVR5cGUobikhPT1NZS5QT0lOVF9DTE9VRCl0aHJvdyBuZXcgQWUoIkRyYWNvIGdlb21ldHJ5IHR5cGUgbXVzdCBiZSBQT0lOVF9DTE9VRC4iKTtsZXQgcj1uZXcgTWUuUG9pbnRDbG91ZCxpPWUuRGVjb2RlQnVmZmVyVG9Qb2ludENsb3VkKG4scik7aWYoIWkub2soKXx8ci5wdHI9PT0wKXRocm93IG5ldyBBZShgRXJyb3IgZGVjb2RpbmcgZHJhY28gcG9pbnQgY2xvdWQ6ICR7aS5lcnJvcl9tc2coKX1gKTtNZS5kZXN0cm95KG4pO2xldCBzPXt9LGY9dC5wcm9wZXJ0aWVzO2ZvcihsZXQgdSBpbiBmKWlmKGYuaGFzT3duUHJvcGVydHkodSkpe2xldCBjO2lmKHU9PT0iUE9TSVRJT04ifHx1PT09Ik5PUk1BTCIpe2xldCBsPWUuR2V0QXR0cmlidXRlSWQocixNZVt1XSk7Yz1lLkdldEF0dHJpYnV0ZShyLGwpfWVsc2V7bGV0IGw9Zlt1XTtjPWUuR2V0QXR0cmlidXRlQnlVbmlxdWVJZChyLGwpfXNbdV09XzIocixlLGMpfXJldHVybiBNZS5kZXN0cm95KHIpLE1lLmRlc3Ryb3koZSksc31mdW5jdGlvbiBCVSh0KXtsZXQgZT1uZXcgTWUuRGVjb2RlcjtpZih0LmRlcXVhbnRpemVJblNoYWRlcilmb3IobGV0IGw9MDtsPHQuYXR0cmlidXRlc1RvU2tpcFRyYW5zZm9ybS5sZW5ndGg7KytsKWUuU2tpcEF0dHJpYnV0ZVRyYW5zZm9ybShNZVt0LmF0dHJpYnV0ZXNUb1NraXBUcmFuc2Zvcm1bbF1dKTtsZXQgbj10LmJ1ZmZlclZpZXcsbz1uZXcgTWUuRGVjb2RlckJ1ZmZlcjtpZihvLkluaXQodC5hcnJheSxuLmJ5dGVMZW5ndGgpLGUuR2V0RW5jb2RlZEdlb21ldHJ5VHlwZShvKSE9PU1lLlRSSUFOR1VMQVJfTUVTSCl0aHJvdyBuZXcgQWUoIlVuc3VwcG9ydGVkIGRyYWNvIG1lc2ggZ2VvbWV0cnkgdHlwZS4iKTtsZXQgaT1uZXcgTWUuTWVzaCxzPWUuRGVjb2RlQnVmZmVyVG9NZXNoKG8saSk7aWYoIXMub2soKXx8aS5wdHI9PT0wKXRocm93IG5ldyBBZShgRXJyb3IgZGVjb2RpbmcgZHJhY28gbWVzaCBnZW9tZXRyeTogJHtzLmVycm9yX21zZygpfWApO01lLmRlc3Ryb3kobyk7bGV0IGY9e30sdT10LmNvbXByZXNzZWRBdHRyaWJ1dGVzO2ZvcihsZXQgbCBpbiB1KWlmKHUuaGFzT3duUHJvcGVydHkobCkpe2xldCBwPXVbbF0sZD1lLkdldEF0dHJpYnV0ZUJ5VW5pcXVlSWQoaSxwKTtmW2xdPV8yKGksZSxkKX1sZXQgYz17aW5kZXhBcnJheTp2VShpLGUpLGF0dHJpYnV0ZURhdGE6Zn07cmV0dXJuIE1lLmRlc3Ryb3koaSksTWUuZGVzdHJveShlKSxjfWFzeW5jIGZ1bmN0aW9uIFVVKHQsZSl7cmV0dXJuIGgodC5idWZmZXJWaWV3KT9CVSh0KTpEVSh0KX1hc3luYyBmdW5jdGlvbiBrVSh0LGUpe2xldCBuPXQud2ViQXNzZW1ibHlDb25maWc7cmV0dXJuIGgobikmJmgobi53YXNtQmluYXJ5RmlsZSk/TWU9YXdhaXQoMCxTZy5kZWZhdWx0KShuKTpNZT1hd2FpdCgwLFNnLmRlZmF1bHQpKCksITB9YXN5bmMgZnVuY3Rpb24gR1UodCxlKXtsZXQgbj10LndlYkFzc2VtYmx5Q29uZmlnO3JldHVybiBoKG4pP2tVKHQsZSk6VVUodCxlKX12YXIgU2csTWUsVlUseGc9JCgoKT0+e0RlKCk7ZnQoKTskZSgpO0pyKCk7c28oKTtTZz1kcihSZygpLDEpO1ZVPVFlKEdVKX0pO2Z1bmN0aW9uIFBnKHQsZSl7aWYoUGcucGFzc1Rocm91Z2hEYXRhRm9yVGVzdGluZylyZXR1cm4gZTt5LnR5cGVPZi5vYmplY3QoImtleSIsdCkseS50eXBlT2Yub2JqZWN0KCJkYXRhIixlKTtsZXQgbj10LmJ5dGVMZW5ndGg7aWYobj09PTB8fG4lNCE9PTApdGhyb3cgbmV3IEFlKCJUaGUgbGVuZ3RoIG9mIGtleSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwIGFuZCBhIG11bHRpcGxlIG9mIDQuIik7bGV0IG89bmV3IERhdGFWaWV3KGUpLHI9by5nZXRVaW50MzIoMCwhMCk7aWYocj09PXpVfHxyPT09alUpcmV0dXJuIGU7bGV0IGk9bmV3IERhdGFWaWV3KHQpLHM9MCxmPWUuYnl0ZUxlbmd0aCx1PWYtZiU4LGM9bixsLHA9ODtmb3IoO3M8dTspZm9yKHA9KHArOCklMjQsbD1wO3M8dSYmbDxjOylvLnNldFVpbnQzMihzLG8uZ2V0VWludDMyKHMsITApXmkuZ2V0VWludDMyKGwsITApLCEwKSxvLnNldFVpbnQzMihzKzQsby5nZXRVaW50MzIocys0LCEwKV5pLmdldFVpbnQzMihsKzQsITApLCEwKSxzKz04LGwrPTI0O2lmKHM8Zilmb3IobD49YyYmKHA9KHArOCklMjQsbD1wKTtzPGY7KW8uc2V0VWludDgocyxvLmdldFVpbnQ4KHMpXmkuZ2V0VWludDgobCkpLHMrKyxsKyt9dmFyIHpVLGpVLHkyLGcyPSQoKCk9PntXdCgpO0pyKCk7elU9MTk1MzAyOTgwNSxqVT0yOTE3MDM0MTAwO1BnLnBhc3NUaHJvdWdoRGF0YUZvclRlc3Rpbmc9ITE7eTI9UGd9KTtmdW5jdGlvbiBIVSh0LGUpe3JldHVybih0JmUpIT09MH12YXIga2EsQTI9JCgoKT0+e2thPUhVfSk7ZnVuY3Rpb24geWkodCxlLG4sbyxyLGkpe3RoaXMuX2JpdHM9dCx0aGlzLmNub2RlVmVyc2lvbj1lLHRoaXMuaW1hZ2VyeVZlcnNpb249bix0aGlzLnRlcnJhaW5WZXJzaW9uPW8sdGhpcy5pbWFnZXJ5UHJvdmlkZXI9cix0aGlzLnRlcnJhaW5Qcm92aWRlcj1pLHRoaXMuYW5jZXN0b3JIYXNUZXJyYWluPSExLHRoaXMudGVycmFpblN0YXRlPXZvaWQgMH12YXIgcVUsYjIsS1UsV1UsWFUsVDIsdzI9JCgoKT0+e2Z0KCk7QTIoKTtxVT1bMSwyLDQsOF0sYjI9MTUsS1U9MTYsV1U9NjQsWFU9MTI4O3lpLmNsb25lPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGgoZSk/KGUuX2JpdHM9dC5fYml0cyxlLmNub2RlVmVyc2lvbj10LmNub2RlVmVyc2lvbixlLmltYWdlcnlWZXJzaW9uPXQuaW1hZ2VyeVZlcnNpb24sZS50ZXJyYWluVmVyc2lvbj10LnRlcnJhaW5WZXJzaW9uLGUuaW1hZ2VyeVByb3ZpZGVyPXQuaW1hZ2VyeVByb3ZpZGVyLGUudGVycmFpblByb3ZpZGVyPXQudGVycmFpblByb3ZpZGVyKTplPW5ldyB5aSh0Ll9iaXRzLHQuY25vZGVWZXJzaW9uLHQuaW1hZ2VyeVZlcnNpb24sdC50ZXJyYWluVmVyc2lvbix0LmltYWdlcnlQcm92aWRlcix0LnRlcnJhaW5Qcm92aWRlciksZS5hbmNlc3Rvckhhc1RlcnJhaW49dC5hbmNlc3Rvckhhc1RlcnJhaW4sZS50ZXJyYWluU3RhdGU9dC50ZXJyYWluU3RhdGUsZX07eWkucHJvdG90eXBlLnNldFBhcmVudD1mdW5jdGlvbih0KXt0aGlzLmFuY2VzdG9ySGFzVGVycmFpbj10LmFuY2VzdG9ySGFzVGVycmFpbnx8dGhpcy5oYXNUZXJyYWluKCl9O3lpLnByb3RvdHlwZS5oYXNTdWJ0cmVlPWZ1bmN0aW9uKCl7cmV0dXJuIGthKHRoaXMuX2JpdHMsS1UpfTt5aS5wcm90b3R5cGUuaGFzSW1hZ2VyeT1mdW5jdGlvbigpe3JldHVybiBrYSh0aGlzLl9iaXRzLFdVKX07eWkucHJvdG90eXBlLmhhc1RlcnJhaW49ZnVuY3Rpb24oKXtyZXR1cm4ga2EodGhpcy5fYml0cyxYVSl9O3lpLnByb3RvdHlwZS5oYXNDaGlsZHJlbj1mdW5jdGlvbigpe3JldHVybiBrYSh0aGlzLl9iaXRzLGIyKX07eWkucHJvdG90eXBlLmhhc0NoaWxkPWZ1bmN0aW9uKHQpe3JldHVybiBrYSh0aGlzLl9iaXRzLHFVW3RdKX07eWkucHJvdG90eXBlLmdldENoaWxkQml0bWFzaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iaXRzJmIyfTtUMj15aX0pO3ZhciBFMj1YbigoamZ0LE8yKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgWVU9KHQsZSxuLG8pPT57bGV0IHI9dCY2NTUzNXwwLGk9dD4+PjE2JjY1NTM1fDAscz0wO2Zvcig7biE9PTA7KXtzPW4+MmUzPzJlMzpuLG4tPXM7ZG8gcj1yK2VbbysrXXwwLGk9aStyfDA7d2hpbGUoLS1zKTtyJT02NTUyMSxpJT02NTUyMX1yZXR1cm4gcnxpPDwxNnwwfTtPMi5leHBvcnRzPVlVfSk7dmFyIFMyPVhuKChIZnQsUjIpPT57InVzZSBzdHJpY3QiO3ZhciAkVT0oKT0+e2xldCB0LGU9W107Zm9yKHZhciBuPTA7bjwyNTY7bisrKXt0PW47Zm9yKHZhciBvPTA7bzw4O28rKyl0PXQmMT8zOTg4MjkyMzg0XnQ+Pj4xOnQ+Pj4xO2Vbbl09dH1yZXR1cm4gZX0sWlU9bmV3IFVpbnQzMkFycmF5KCRVKCkpLFFVPSh0LGUsbixvKT0+e2xldCByPVpVLGk9bytuO3RePS0xO2ZvcihsZXQgcz1vO3M8aTtzKyspdD10Pj4+OF5yWyh0XmVbc10pJjI1NV07cmV0dXJuIHReLTF9O1IyLmV4cG9ydHM9UVV9KTt2YXIgeDI9WG4oKHFmdCxDMik9PnsidXNlIHN0cmljdCI7QzIuZXhwb3J0cz1mdW5jdGlvbihlLG4pe2xldCBvLHIsaSxzLGYsdSxjLGwscCxkLG0sXyxnLGIsVCxPLEUsdyxDLE0sTixGLEksdixCPWUuc3RhdGU7bz1lLm5leHRfaW4sST1lLmlucHV0LHI9bysoZS5hdmFpbF9pbi01KSxpPWUubmV4dF9vdXQsdj1lLm91dHB1dCxzPWktKG4tZS5hdmFpbF9vdXQpLGY9aSsoZS5hdmFpbF9vdXQtMjU3KSx1PUIuZG1heCxjPUIud3NpemUsbD1CLndoYXZlLHA9Qi53bmV4dCxkPUIud2luZG93LG09Qi5ob2xkLF89Qi5iaXRzLGc9Qi5sZW5jb2RlLGI9Qi5kaXN0Y29kZSxUPSgxPDxCLmxlbmJpdHMpLTEsTz0oMTw8Qi5kaXN0Yml0cyktMTt0OmRve188MTUmJihtKz1JW28rK108PF8sXys9OCxtKz1JW28rK108PF8sXys9OCksRT1nW20mVF07ZTpmb3IoOzspe2lmKHc9RT4+PjI0LG0+Pj49dyxfLT13LHc9RT4+PjE2JjI1NSx3PT09MCl2W2krK109RSY2NTUzNTtlbHNlIGlmKHcmMTYpe0M9RSY2NTUzNSx3Jj0xNSx3JiYoXzx3JiYobSs9SVtvKytdPDxfLF8rPTgpLEMrPW0mKDE8PHcpLTEsbT4+Pj13LF8tPXcpLF88MTUmJihtKz1JW28rK108PF8sXys9OCxtKz1JW28rK108PF8sXys9OCksRT1iW20mT107bjpmb3IoOzspe2lmKHc9RT4+PjI0LG0+Pj49dyxfLT13LHc9RT4+PjE2JjI1NSx3JjE2KXtpZihNPUUmNjU1MzUsdyY9MTUsXzx3JiYobSs9SVtvKytdPDxfLF8rPTgsXzx3JiYobSs9SVtvKytdPDxfLF8rPTgpKSxNKz1tJigxPDx3KS0xLE0+dSl7ZS5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixCLm1vZGU9MTYyMDk7YnJlYWsgdH1pZihtPj4+PXcsXy09dyx3PWktcyxNPncpe2lmKHc9TS13LHc+bCYmQi5zYW5lKXtlLm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLEIubW9kZT0xNjIwOTticmVhayB0fWlmKE49MCxGPWQscD09PTApe2lmKE4rPWMtdyx3PEMpe0MtPXc7ZG8gdltpKytdPWRbTisrXTt3aGlsZSgtLXcpO049aS1NLEY9dn19ZWxzZSBpZihwPHcpe2lmKE4rPWMrcC13LHctPXAsdzxDKXtDLT13O2RvIHZbaSsrXT1kW04rK107d2hpbGUoLS13KTtpZihOPTAscDxDKXt3PXAsQy09dztkbyB2W2krK109ZFtOKytdO3doaWxlKC0tdyk7Tj1pLU0sRj12fX19ZWxzZSBpZihOKz1wLXcsdzxDKXtDLT13O2RvIHZbaSsrXT1kW04rK107d2hpbGUoLS13KTtOPWktTSxGPXZ9Zm9yKDtDPjI7KXZbaSsrXT1GW04rK10sdltpKytdPUZbTisrXSx2W2krK109RltOKytdLEMtPTM7QyYmKHZbaSsrXT1GW04rK10sQz4xJiYodltpKytdPUZbTisrXSkpfWVsc2V7Tj1pLU07ZG8gdltpKytdPXZbTisrXSx2W2krK109dltOKytdLHZbaSsrXT12W04rK10sQy09Mzt3aGlsZShDPjIpO0MmJih2W2krK109dltOKytdLEM+MSYmKHZbaSsrXT12W04rK10pKX19ZWxzZSBpZigodyY2NCk9PT0wKXtFPWJbKEUmNjU1MzUpKyhtJigxPDx3KS0xKV07Y29udGludWUgbn1lbHNle2UubXNnPSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiLEIubW9kZT0xNjIwOTticmVhayB0fWJyZWFrfX1lbHNlIGlmKCh3JjY0KT09PTApe0U9Z1soRSY2NTUzNSkrKG0mKDE8PHcpLTEpXTtjb250aW51ZSBlfWVsc2UgaWYodyYzMil7Qi5tb2RlPTE2MTkxO2JyZWFrIHR9ZWxzZXtlLm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixCLm1vZGU9MTYyMDk7YnJlYWsgdH1icmVha319d2hpbGUobzxyJiZpPGYpO0M9Xz4+MyxvLT1DLF8tPUM8PDMsbSY9KDE8PF8pLTEsZS5uZXh0X2luPW8sZS5uZXh0X291dD1pLGUuYXZhaWxfaW49bzxyPzUrKHItbyk6NS0oby1yKSxlLmF2YWlsX291dD1pPGY/MjU3KyhmLWkpOjI1Ny0oaS1mKSxCLmhvbGQ9bSxCLmJpdHM9X319KTt2YXIgTTI9WG4oKEtmdCxQMik9PnsidXNlIHN0cmljdCI7dmFyIEpVPW5ldyBVaW50MTZBcnJheShbMyw0LDUsNiw3LDgsOSwxMCwxMSwxMywxNSwxNywxOSwyMywyNywzMSwzNSw0Myw1MSw1OSw2Nyw4Myw5OSwxMTUsMTMxLDE2MywxOTUsMjI3LDI1OCwwLDBdKSx0Nj1uZXcgVWludDhBcnJheShbMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTcsMTcsMTcsMTcsMTgsMTgsMTgsMTgsMTksMTksMTksMTksMjAsMjAsMjAsMjAsMjEsMjEsMjEsMjEsMTYsNzIsNzhdKSxlNj1uZXcgVWludDE2QXJyYXkoWzEsMiwzLDQsNSw3LDksMTMsMTcsMjUsMzMsNDksNjUsOTcsMTI5LDE5MywyNTcsMzg1LDUxMyw3NjksMTAyNSwxNTM3LDIwNDksMzA3Myw0MDk3LDYxNDUsODE5MywxMjI4OSwxNjM4NSwyNDU3NywwLDBdKSxuNj1uZXcgVWludDhBcnJheShbMTYsMTYsMTYsMTYsMTcsMTcsMTgsMTgsMTksMTksMjAsMjAsMjEsMjEsMjIsMjIsMjMsMjMsMjQsMjQsMjUsMjUsMjYsMjYsMjcsMjcsMjgsMjgsMjksMjksNjQsNjRdKSxvNj0odCxlLG4sbyxyLGkscyxmKT0+e2xldCB1PWYuYml0cyxjPTAsbD0wLHA9MCxkPTAsbT0wLF89MCxnPTAsYj0wLFQ9MCxPPTAsRSx3LEMsTSxOLEY9bnVsbCxJLHY9bmV3IFVpbnQxNkFycmF5KDE2KSxCPW5ldyBVaW50MTZBcnJheSgxNiksQT1udWxsLFMseCxMO2ZvcihjPTA7Yzw9MTU7YysrKXZbY109MDtmb3IobD0wO2w8bztsKyspdltlW24rbF1dKys7Zm9yKG09dSxkPTE1O2Q+PTEmJnZbZF09PT0wO2QtLSk7aWYobT5kJiYobT1kKSxkPT09MClyZXR1cm4gcltpKytdPTE8PDI0fDY0PDwxNnwwLHJbaSsrXT0xPDwyNHw2NDw8MTZ8MCxmLmJpdHM9MSwwO2ZvcihwPTE7cDxkJiZ2W3BdPT09MDtwKyspO2ZvcihtPHAmJihtPXApLGI9MSxjPTE7Yzw9MTU7YysrKWlmKGI8PD0xLGItPXZbY10sYjwwKXJldHVybi0xO2lmKGI+MCYmKHQ9PT0wfHxkIT09MSkpcmV0dXJuLTE7Zm9yKEJbMV09MCxjPTE7YzwxNTtjKyspQltjKzFdPUJbY10rdltjXTtmb3IobD0wO2w8bztsKyspZVtuK2xdIT09MCYmKHNbQltlW24rbF1dKytdPWwpO2lmKHQ9PT0wPyhGPUE9cyxJPTIwKTp0PT09MT8oRj1KVSxBPXQ2LEk9MjU3KTooRj1lNixBPW42LEk9MCksTz0wLGw9MCxjPXAsTj1pLF89bSxnPTAsQz0tMSxUPTE8PG0sTT1ULTEsdD09PTEmJlQ+ODUyfHx0PT09MiYmVD41OTIpcmV0dXJuIDE7Zm9yKDs7KXtTPWMtZyxzW2xdKzE8ST8oeD0wLEw9c1tsXSk6c1tsXT49ST8oeD1BW3NbbF0tSV0sTD1GW3NbbF0tSV0pOih4PTk2LEw9MCksRT0xPDxjLWcsdz0xPDxfLHA9dztkbyB3LT1FLHJbTisoTz4+Zykrd109Uzw8MjR8eDw8MTZ8THwwO3doaWxlKHchPT0wKTtmb3IoRT0xPDxjLTE7TyZFOylFPj49MTtpZihFIT09MD8oTyY9RS0xLE8rPUUpOk89MCxsKyssLS12W2NdPT09MCl7aWYoYz09PWQpYnJlYWs7Yz1lW24rc1tsXV19aWYoYz5tJiYoTyZNKSE9PUMpe2ZvcihnPT09MCYmKGc9bSksTis9cCxfPWMtZyxiPTE8PF87XytnPGQmJihiLT12W18rZ10sIShiPD0wKSk7KV8rKyxiPDw9MTtpZihUKz0xPDxfLHQ9PT0xJiZUPjg1Mnx8dD09PTImJlQ+NTkyKXJldHVybiAxO0M9TyZNLHJbQ109bTw8MjR8Xzw8MTZ8Ti1pfDB9fXJldHVybiBPIT09MCYmKHJbTitPXT1jLWc8PDI0fDY0PDwxNnwwKSxmLmJpdHM9bSwwfTtQMi5leHBvcnRzPW82fSk7dmFyIG9tPVhuKChXZnQsTjIpPT57InVzZSBzdHJpY3QiO04yLmV4cG9ydHM9e1pfTk9fRkxVU0g6MCxaX1BBUlRJQUxfRkxVU0g6MSxaX1NZTkNfRkxVU0g6MixaX0ZVTExfRkxVU0g6MyxaX0ZJTklTSDo0LFpfQkxPQ0s6NSxaX1RSRUVTOjYsWl9PSzowLFpfU1RSRUFNX0VORDoxLFpfTkVFRF9ESUNUOjIsWl9FUlJOTzotMSxaX1NUUkVBTV9FUlJPUjotMixaX0RBVEFfRVJST1I6LTMsWl9NRU1fRVJST1I6LTQsWl9CVUZfRVJST1I6LTUsWl9OT19DT01QUkVTU0lPTjowLFpfQkVTVF9TUEVFRDoxLFpfQkVTVF9DT01QUkVTU0lPTjo5LFpfREVGQVVMVF9DT01QUkVTU0lPTjotMSxaX0ZJTFRFUkVEOjEsWl9IVUZGTUFOX09OTFk6MixaX1JMRTozLFpfRklYRUQ6NCxaX0RFRkFVTFRfU1RSQVRFR1k6MCxaX0JJTkFSWTowLFpfVEVYVDoxLFpfVU5LTk9XTjoyLFpfREVGTEFURUQ6OH19KTt2YXIgcFM9WG4oKFhmdCxZcik9PnsidXNlIHN0cmljdCI7dmFyIExnPUUyKCksZ2k9UzIoKSxyNj14MigpLGR1PU0yKCksaTY9MCxvUz0xLHJTPTIse1pfRklOSVNIOkkyLFpfQkxPQ0s6czYsWl9UUkVFUzpybSxaX09LOlNjLFpfU1RSRUFNX0VORDpjNixaX05FRURfRElDVDphNixaX1NUUkVBTV9FUlJPUjpNcixaX0RBVEFfRVJST1I6aVMsWl9NRU1fRVJST1I6RGcsWl9CVUZfRVJST1I6ZjYsWl9ERUZMQVRFRDp2Mn09b20oKSxhbT0xNjE4MCxGMj0xNjE4MSxMMj0xNjE4MixEMj0xNjE4MyxCMj0xNjE4NCxVMj0xNjE4NSxrMj0xNjE4NixHMj0xNjE4NyxWMj0xNjE4OCx6Mj0xNjE4OSxjbT0xNjE5MCxLaT0xNjE5MSxNZz0xNjE5MixqMj0xNjE5MyxOZz0xNjE5NCxIMj0xNjE5NSxxMj0xNjE5NixLMj0xNjE5NyxXMj0xNjE5OCxpbT0xNjE5OSxzbT0xNjIwMCxYMj0xNjIwMSxZMj0xNjIwMiwkMj0xNjIwMyxaMj0xNjIwNCxRMj0xNjIwNSxJZz0xNjIwNixKMj0xNjIwNyx0Uz0xNjIwOCxNbj0xNjIwOSxCZz0xNjIxMCxzUz0xNjIxMSx1Nj04NTIsbDY9NTkyLHA2PTE1LGQ2PXA2LGVTPXQ9Pih0Pj4+MjQmMjU1KSsodD4+PjgmNjUyODApKygodCY2NTI4MCk8PDgpKygodCYyNTUpPDwyNCk7ZnVuY3Rpb24gbTYoKXt0aGlzLnN0cm09bnVsbCx0aGlzLm1vZGU9MCx0aGlzLmxhc3Q9ITEsdGhpcy53cmFwPTAsdGhpcy5oYXZlZGljdD0hMSx0aGlzLmZsYWdzPTAsdGhpcy5kbWF4PTAsdGhpcy5jaGVjaz0wLHRoaXMudG90YWw9MCx0aGlzLmhlYWQ9bnVsbCx0aGlzLndiaXRzPTAsdGhpcy53c2l6ZT0wLHRoaXMud2hhdmU9MCx0aGlzLnduZXh0PTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLmhvbGQ9MCx0aGlzLmJpdHM9MCx0aGlzLmxlbmd0aD0wLHRoaXMub2Zmc2V0PTAsdGhpcy5leHRyYT0wLHRoaXMubGVuY29kZT1udWxsLHRoaXMuZGlzdGNvZGU9bnVsbCx0aGlzLmxlbmJpdHM9MCx0aGlzLmRpc3RiaXRzPTAsdGhpcy5uY29kZT0wLHRoaXMubmxlbj0wLHRoaXMubmRpc3Q9MCx0aGlzLmhhdmU9MCx0aGlzLm5leHQ9bnVsbCx0aGlzLmxlbnM9bmV3IFVpbnQxNkFycmF5KDMyMCksdGhpcy53b3JrPW5ldyBVaW50MTZBcnJheSgyODgpLHRoaXMubGVuZHluPW51bGwsdGhpcy5kaXN0ZHluPW51bGwsdGhpcy5zYW5lPTAsdGhpcy5iYWNrPTAsdGhpcy53YXM9MH12YXIgQ2M9dD0+e2lmKCF0KXJldHVybiAxO2xldCBlPXQuc3RhdGU7cmV0dXJuIWV8fGUuc3RybSE9PXR8fGUubW9kZTxhbXx8ZS5tb2RlPnNTPzE6MH0sY1M9dD0+e2lmKENjKHQpKXJldHVybiBNcjtsZXQgZT10LnN0YXRlO3JldHVybiB0LnRvdGFsX2luPXQudG90YWxfb3V0PWUudG90YWw9MCx0Lm1zZz0iIixlLndyYXAmJih0LmFkbGVyPWUud3JhcCYxKSxlLm1vZGU9YW0sZS5sYXN0PTAsZS5oYXZlZGljdD0wLGUuZmxhZ3M9LTEsZS5kbWF4PTMyNzY4LGUuaGVhZD1udWxsLGUuaG9sZD0wLGUuYml0cz0wLGUubGVuY29kZT1lLmxlbmR5bj1uZXcgSW50MzJBcnJheSh1NiksZS5kaXN0Y29kZT1lLmRpc3RkeW49bmV3IEludDMyQXJyYXkobDYpLGUuc2FuZT0xLGUuYmFjaz0tMSxTY30sYVM9dD0+e2lmKENjKHQpKXJldHVybiBNcjtsZXQgZT10LnN0YXRlO3JldHVybiBlLndzaXplPTAsZS53aGF2ZT0wLGUud25leHQ9MCxjUyh0KX0sZlM9KHQsZSk9PntsZXQgbjtpZihDYyh0KSlyZXR1cm4gTXI7bGV0IG89dC5zdGF0ZTtyZXR1cm4gZTwwPyhuPTAsZT0tZSk6KG49KGU+PjQpKzUsZTw0OCYmKGUmPTE1KSksZSYmKGU8OHx8ZT4xNSk/TXI6KG8ud2luZG93IT09bnVsbCYmby53Yml0cyE9PWUmJihvLndpbmRvdz1udWxsKSxvLndyYXA9bixvLndiaXRzPWUsYVModCkpfSx1Uz0odCxlKT0+e2lmKCF0KXJldHVybiBNcjtsZXQgbj1uZXcgbTY7dC5zdGF0ZT1uLG4uc3RybT10LG4ud2luZG93PW51bGwsbi5tb2RlPWFtO2xldCBvPWZTKHQsZSk7cmV0dXJuIG8hPT1TYyYmKHQuc3RhdGU9bnVsbCksb30saDY9dD0+dVModCxkNiksblM9ITAsdmcsRmcsXzY9dD0+e2lmKG5TKXt2Zz1uZXcgSW50MzJBcnJheSg1MTIpLEZnPW5ldyBJbnQzMkFycmF5KDMyKTtsZXQgZT0wO2Zvcig7ZTwxNDQ7KXQubGVuc1tlKytdPTg7Zm9yKDtlPDI1NjspdC5sZW5zW2UrK109OTtmb3IoO2U8MjgwOyl0LmxlbnNbZSsrXT03O2Zvcig7ZTwyODg7KXQubGVuc1tlKytdPTg7Zm9yKGR1KG9TLHQubGVucywwLDI4OCx2ZywwLHQud29yayx7Yml0czo5fSksZT0wO2U8MzI7KXQubGVuc1tlKytdPTU7ZHUoclMsdC5sZW5zLDAsMzIsRmcsMCx0Lndvcmsse2JpdHM6NX0pLG5TPSExfXQubGVuY29kZT12Zyx0LmxlbmJpdHM9OSx0LmRpc3Rjb2RlPUZnLHQuZGlzdGJpdHM9NX0sbFM9KHQsZSxuLG8pPT57bGV0IHIsaT10LnN0YXRlO3JldHVybiBpLndpbmRvdz09PW51bGwmJihpLndzaXplPTE8PGkud2JpdHMsaS53bmV4dD0wLGkud2hhdmU9MCxpLndpbmRvdz1uZXcgVWludDhBcnJheShpLndzaXplKSksbz49aS53c2l6ZT8oaS53aW5kb3cuc2V0KGUuc3ViYXJyYXkobi1pLndzaXplLG4pLDApLGkud25leHQ9MCxpLndoYXZlPWkud3NpemUpOihyPWkud3NpemUtaS53bmV4dCxyPm8mJihyPW8pLGkud2luZG93LnNldChlLnN1YmFycmF5KG4tbyxuLW8rciksaS53bmV4dCksby09cixvPyhpLndpbmRvdy5zZXQoZS5zdWJhcnJheShuLW8sbiksMCksaS53bmV4dD1vLGkud2hhdmU9aS53c2l6ZSk6KGkud25leHQrPXIsaS53bmV4dD09PWkud3NpemUmJihpLnduZXh0PTApLGkud2hhdmU8aS53c2l6ZSYmKGkud2hhdmUrPXIpKSksMH0seTY9KHQsZSk9PntsZXQgbixvLHIsaSxzLGYsdSxjLGwscCxkLG0sXyxnLGI9MCxULE8sRSx3LEMsTSxOLEYsST1uZXcgVWludDhBcnJheSg0KSx2LEIsQT1uZXcgVWludDhBcnJheShbMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0pO2lmKENjKHQpfHwhdC5vdXRwdXR8fCF0LmlucHV0JiZ0LmF2YWlsX2luIT09MClyZXR1cm4gTXI7bj10LnN0YXRlLG4ubW9kZT09PUtpJiYobi5tb2RlPU1nKSxzPXQubmV4dF9vdXQscj10Lm91dHB1dCx1PXQuYXZhaWxfb3V0LGk9dC5uZXh0X2luLG89dC5pbnB1dCxmPXQuYXZhaWxfaW4sYz1uLmhvbGQsbD1uLmJpdHMscD1mLGQ9dSxGPVNjO3Q6Zm9yKDs7KXN3aXRjaChuLm1vZGUpe2Nhc2UgYW06aWYobi53cmFwPT09MCl7bi5tb2RlPU1nO2JyZWFrfWZvcig7bDwxNjspe2lmKGY9PT0wKWJyZWFrIHQ7Zi0tLGMrPW9baSsrXTw8bCxsKz04fWlmKG4ud3JhcCYyJiZjPT09MzU2MTUpe24ud2JpdHM9PT0wJiYobi53Yml0cz0xNSksbi5jaGVjaz0wLElbMF09YyYyNTUsSVsxXT1jPj4+OCYyNTUsbi5jaGVjaz1naShuLmNoZWNrLEksMiwwKSxjPTAsbD0wLG4ubW9kZT1GMjticmVha31pZihuLmhlYWQmJihuLmhlYWQuZG9uZT0hMSksIShuLndyYXAmMSl8fCgoKGMmMjU1KTw8OCkrKGM+PjgpKSUzMSl7dC5tc2c9ImluY29ycmVjdCBoZWFkZXIgY2hlY2siLG4ubW9kZT1NbjticmVha31pZigoYyYxNSkhPT12Mil7dC5tc2c9InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixuLm1vZGU9TW47YnJlYWt9aWYoYz4+Pj00LGwtPTQsTj0oYyYxNSkrOCxuLndiaXRzPT09MCYmKG4ud2JpdHM9TiksTj4xNXx8Tj5uLndiaXRzKXt0Lm1zZz0iaW52YWxpZCB3aW5kb3cgc2l6ZSIsbi5tb2RlPU1uO2JyZWFrfW4uZG1heD0xPDxuLndiaXRzLG4uZmxhZ3M9MCx0LmFkbGVyPW4uY2hlY2s9MSxuLm1vZGU9YyY1MTI/ejI6S2ksYz0wLGw9MDticmVhaztjYXNlIEYyOmZvcig7bDwxNjspe2lmKGY9PT0wKWJyZWFrIHQ7Zi0tLGMrPW9baSsrXTw8bCxsKz04fWlmKG4uZmxhZ3M9Yywobi5mbGFncyYyNTUpIT09djIpe3QubXNnPSJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsbi5tb2RlPU1uO2JyZWFrfWlmKG4uZmxhZ3MmNTczNDQpe3QubXNnPSJ1bmtub3duIGhlYWRlciBmbGFncyBzZXQiLG4ubW9kZT1NbjticmVha31uLmhlYWQmJihuLmhlYWQudGV4dD1jPj44JjEpLG4uZmxhZ3MmNTEyJiZuLndyYXAmNCYmKElbMF09YyYyNTUsSVsxXT1jPj4+OCYyNTUsbi5jaGVjaz1naShuLmNoZWNrLEksMiwwKSksYz0wLGw9MCxuLm1vZGU9TDI7Y2FzZSBMMjpmb3IoO2w8MzI7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH1uLmhlYWQmJihuLmhlYWQudGltZT1jKSxuLmZsYWdzJjUxMiYmbi53cmFwJjQmJihJWzBdPWMmMjU1LElbMV09Yz4+PjgmMjU1LElbMl09Yz4+PjE2JjI1NSxJWzNdPWM+Pj4yNCYyNTUsbi5jaGVjaz1naShuLmNoZWNrLEksNCwwKSksYz0wLGw9MCxuLm1vZGU9RDI7Y2FzZSBEMjpmb3IoO2w8MTY7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH1uLmhlYWQmJihuLmhlYWQueGZsYWdzPWMmMjU1LG4uaGVhZC5vcz1jPj44KSxuLmZsYWdzJjUxMiYmbi53cmFwJjQmJihJWzBdPWMmMjU1LElbMV09Yz4+PjgmMjU1LG4uY2hlY2s9Z2kobi5jaGVjayxJLDIsMCkpLGM9MCxsPTAsbi5tb2RlPUIyO2Nhc2UgQjI6aWYobi5mbGFncyYxMDI0KXtmb3IoO2w8MTY7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH1uLmxlbmd0aD1jLG4uaGVhZCYmKG4uaGVhZC5leHRyYV9sZW49Yyksbi5mbGFncyY1MTImJm4ud3JhcCY0JiYoSVswXT1jJjI1NSxJWzFdPWM+Pj44JjI1NSxuLmNoZWNrPWdpKG4uY2hlY2ssSSwyLDApKSxjPTAsbD0wfWVsc2Ugbi5oZWFkJiYobi5oZWFkLmV4dHJhPW51bGwpO24ubW9kZT1VMjtjYXNlIFUyOmlmKG4uZmxhZ3MmMTAyNCYmKG09bi5sZW5ndGgsbT5mJiYobT1mKSxtJiYobi5oZWFkJiYoTj1uLmhlYWQuZXh0cmFfbGVuLW4ubGVuZ3RoLG4uaGVhZC5leHRyYXx8KG4uaGVhZC5leHRyYT1uZXcgVWludDhBcnJheShuLmhlYWQuZXh0cmFfbGVuKSksbi5oZWFkLmV4dHJhLnNldChvLnN1YmFycmF5KGksaSttKSxOKSksbi5mbGFncyY1MTImJm4ud3JhcCY0JiYobi5jaGVjaz1naShuLmNoZWNrLG8sbSxpKSksZi09bSxpKz1tLG4ubGVuZ3RoLT1tKSxuLmxlbmd0aCkpYnJlYWsgdDtuLmxlbmd0aD0wLG4ubW9kZT1rMjtjYXNlIGsyOmlmKG4uZmxhZ3MmMjA0OCl7aWYoZj09PTApYnJlYWsgdDttPTA7ZG8gTj1vW2krbSsrXSxuLmhlYWQmJk4mJm4ubGVuZ3RoPDY1NTM2JiYobi5oZWFkLm5hbWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoTikpO3doaWxlKE4mJm08Zik7aWYobi5mbGFncyY1MTImJm4ud3JhcCY0JiYobi5jaGVjaz1naShuLmNoZWNrLG8sbSxpKSksZi09bSxpKz1tLE4pYnJlYWsgdH1lbHNlIG4uaGVhZCYmKG4uaGVhZC5uYW1lPW51bGwpO24ubGVuZ3RoPTAsbi5tb2RlPUcyO2Nhc2UgRzI6aWYobi5mbGFncyY0MDk2KXtpZihmPT09MClicmVhayB0O209MDtkbyBOPW9baSttKytdLG4uaGVhZCYmTiYmbi5sZW5ndGg8NjU1MzYmJihuLmhlYWQuY29tbWVudCs9U3RyaW5nLmZyb21DaGFyQ29kZShOKSk7d2hpbGUoTiYmbTxmKTtpZihuLmZsYWdzJjUxMiYmbi53cmFwJjQmJihuLmNoZWNrPWdpKG4uY2hlY2ssbyxtLGkpKSxmLT1tLGkrPW0sTilicmVhayB0fWVsc2Ugbi5oZWFkJiYobi5oZWFkLmNvbW1lbnQ9bnVsbCk7bi5tb2RlPVYyO2Nhc2UgVjI6aWYobi5mbGFncyY1MTIpe2Zvcig7bDwxNjspe2lmKGY9PT0wKWJyZWFrIHQ7Zi0tLGMrPW9baSsrXTw8bCxsKz04fWlmKG4ud3JhcCY0JiZjIT09KG4uY2hlY2smNjU1MzUpKXt0Lm1zZz0iaGVhZGVyIGNyYyBtaXNtYXRjaCIsbi5tb2RlPU1uO2JyZWFrfWM9MCxsPTB9bi5oZWFkJiYobi5oZWFkLmhjcmM9bi5mbGFncz4+OSYxLG4uaGVhZC5kb25lPSEwKSx0LmFkbGVyPW4uY2hlY2s9MCxuLm1vZGU9S2k7YnJlYWs7Y2FzZSB6Mjpmb3IoO2w8MzI7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH10LmFkbGVyPW4uY2hlY2s9ZVMoYyksYz0wLGw9MCxuLm1vZGU9Y207Y2FzZSBjbTppZihuLmhhdmVkaWN0PT09MClyZXR1cm4gdC5uZXh0X291dD1zLHQuYXZhaWxfb3V0PXUsdC5uZXh0X2luPWksdC5hdmFpbF9pbj1mLG4uaG9sZD1jLG4uYml0cz1sLGE2O3QuYWRsZXI9bi5jaGVjaz0xLG4ubW9kZT1LaTtjYXNlIEtpOmlmKGU9PT1zNnx8ZT09PXJtKWJyZWFrIHQ7Y2FzZSBNZzppZihuLmxhc3Qpe2M+Pj49bCY3LGwtPWwmNyxuLm1vZGU9SWc7YnJlYWt9Zm9yKDtsPDM7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH1zd2l0Y2gobi5sYXN0PWMmMSxjPj4+PTEsbC09MSxjJjMpe2Nhc2UgMDpuLm1vZGU9ajI7YnJlYWs7Y2FzZSAxOmlmKF82KG4pLG4ubW9kZT1pbSxlPT09cm0pe2M+Pj49MixsLT0yO2JyZWFrIHR9YnJlYWs7Y2FzZSAyOm4ubW9kZT1xMjticmVhaztjYXNlIDM6dC5tc2c9ImludmFsaWQgYmxvY2sgdHlwZSIsbi5tb2RlPU1ufWM+Pj49MixsLT0yO2JyZWFrO2Nhc2UgajI6Zm9yKGM+Pj49bCY3LGwtPWwmNztsPDMyOyl7aWYoZj09PTApYnJlYWsgdDtmLS0sYys9b1tpKytdPDxsLGwrPTh9aWYoKGMmNjU1MzUpIT09KGM+Pj4xNl42NTUzNSkpe3QubXNnPSJpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzIixuLm1vZGU9TW47YnJlYWt9aWYobi5sZW5ndGg9YyY2NTUzNSxjPTAsbD0wLG4ubW9kZT1OZyxlPT09cm0pYnJlYWsgdDtjYXNlIE5nOm4ubW9kZT1IMjtjYXNlIEgyOmlmKG09bi5sZW5ndGgsbSl7aWYobT5mJiYobT1mKSxtPnUmJihtPXUpLG09PT0wKWJyZWFrIHQ7ci5zZXQoby5zdWJhcnJheShpLGkrbSkscyksZi09bSxpKz1tLHUtPW0scys9bSxuLmxlbmd0aC09bTticmVha31uLm1vZGU9S2k7YnJlYWs7Y2FzZSBxMjpmb3IoO2w8MTQ7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH1pZihuLm5sZW49KGMmMzEpKzI1NyxjPj4+PTUsbC09NSxuLm5kaXN0PShjJjMxKSsxLGM+Pj49NSxsLT01LG4ubmNvZGU9KGMmMTUpKzQsYz4+Pj00LGwtPTQsbi5ubGVuPjI4Nnx8bi5uZGlzdD4zMCl7dC5tc2c9InRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzIixuLm1vZGU9TW47YnJlYWt9bi5oYXZlPTAsbi5tb2RlPUsyO2Nhc2UgSzI6Zm9yKDtuLmhhdmU8bi5uY29kZTspe2Zvcig7bDwzOyl7aWYoZj09PTApYnJlYWsgdDtmLS0sYys9b1tpKytdPDxsLGwrPTh9bi5sZW5zW0Fbbi5oYXZlKytdXT1jJjcsYz4+Pj0zLGwtPTN9Zm9yKDtuLmhhdmU8MTk7KW4ubGVuc1tBW24uaGF2ZSsrXV09MDtpZihuLmxlbmNvZGU9bi5sZW5keW4sbi5sZW5iaXRzPTcsdj17Yml0czpuLmxlbmJpdHN9LEY9ZHUoaTYsbi5sZW5zLDAsMTksbi5sZW5jb2RlLDAsbi53b3JrLHYpLG4ubGVuYml0cz12LmJpdHMsRil7dC5tc2c9ImludmFsaWQgY29kZSBsZW5ndGhzIHNldCIsbi5tb2RlPU1uO2JyZWFrfW4uaGF2ZT0wLG4ubW9kZT1XMjtjYXNlIFcyOmZvcig7bi5oYXZlPG4ubmxlbituLm5kaXN0Oyl7Zm9yKDtiPW4ubGVuY29kZVtjJigxPDxuLmxlbmJpdHMpLTFdLFQ9Yj4+PjI0LE89Yj4+PjE2JjI1NSxFPWImNjU1MzUsIShUPD1sKTspe2lmKGY9PT0wKWJyZWFrIHQ7Zi0tLGMrPW9baSsrXTw8bCxsKz04fWlmKEU8MTYpYz4+Pj1ULGwtPVQsbi5sZW5zW24uaGF2ZSsrXT1FO2Vsc2V7aWYoRT09PTE2KXtmb3IoQj1UKzI7bDxCOyl7aWYoZj09PTApYnJlYWsgdDtmLS0sYys9b1tpKytdPDxsLGwrPTh9aWYoYz4+Pj1ULGwtPVQsbi5oYXZlPT09MCl7dC5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLG4ubW9kZT1NbjticmVha31OPW4ubGVuc1tuLmhhdmUtMV0sbT0zKyhjJjMpLGM+Pj49MixsLT0yfWVsc2UgaWYoRT09PTE3KXtmb3IoQj1UKzM7bDxCOyl7aWYoZj09PTApYnJlYWsgdDtmLS0sYys9b1tpKytdPDxsLGwrPTh9Yz4+Pj1ULGwtPVQsTj0wLG09MysoYyY3KSxjPj4+PTMsbC09M31lbHNle2ZvcihCPVQrNztsPEI7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH1jPj4+PVQsbC09VCxOPTAsbT0xMSsoYyYxMjcpLGM+Pj49NyxsLT03fWlmKG4uaGF2ZSttPm4ubmxlbituLm5kaXN0KXt0Lm1zZz0iaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsbi5tb2RlPU1uO2JyZWFrfWZvcig7bS0tOyluLmxlbnNbbi5oYXZlKytdPU59fWlmKG4ubW9kZT09PU1uKWJyZWFrO2lmKG4ubGVuc1syNTZdPT09MCl7dC5tc2c9ImludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jayIsbi5tb2RlPU1uO2JyZWFrfWlmKG4ubGVuYml0cz05LHY9e2JpdHM6bi5sZW5iaXRzfSxGPWR1KG9TLG4ubGVucywwLG4ubmxlbixuLmxlbmNvZGUsMCxuLndvcmssdiksbi5sZW5iaXRzPXYuYml0cyxGKXt0Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aHMgc2V0IixuLm1vZGU9TW47YnJlYWt9aWYobi5kaXN0Yml0cz02LG4uZGlzdGNvZGU9bi5kaXN0ZHluLHY9e2JpdHM6bi5kaXN0Yml0c30sRj1kdShyUyxuLmxlbnMsbi5ubGVuLG4ubmRpc3Qsbi5kaXN0Y29kZSwwLG4ud29yayx2KSxuLmRpc3RiaXRzPXYuYml0cyxGKXt0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZXMgc2V0IixuLm1vZGU9TW47YnJlYWt9aWYobi5tb2RlPWltLGU9PT1ybSlicmVhayB0O2Nhc2UgaW06bi5tb2RlPXNtO2Nhc2Ugc206aWYoZj49NiYmdT49MjU4KXt0Lm5leHRfb3V0PXMsdC5hdmFpbF9vdXQ9dSx0Lm5leHRfaW49aSx0LmF2YWlsX2luPWYsbi5ob2xkPWMsbi5iaXRzPWwscjYodCxkKSxzPXQubmV4dF9vdXQscj10Lm91dHB1dCx1PXQuYXZhaWxfb3V0LGk9dC5uZXh0X2luLG89dC5pbnB1dCxmPXQuYXZhaWxfaW4sYz1uLmhvbGQsbD1uLmJpdHMsbi5tb2RlPT09S2kmJihuLmJhY2s9LTEpO2JyZWFrfWZvcihuLmJhY2s9MDtiPW4ubGVuY29kZVtjJigxPDxuLmxlbmJpdHMpLTFdLFQ9Yj4+PjI0LE89Yj4+PjE2JjI1NSxFPWImNjU1MzUsIShUPD1sKTspe2lmKGY9PT0wKWJyZWFrIHQ7Zi0tLGMrPW9baSsrXTw8bCxsKz04fWlmKE8mJihPJjI0MCk9PT0wKXtmb3Iodz1ULEM9TyxNPUU7Yj1uLmxlbmNvZGVbTSsoKGMmKDE8PHcrQyktMSk+PncpXSxUPWI+Pj4yNCxPPWI+Pj4xNiYyNTUsRT1iJjY1NTM1LCEodytUPD1sKTspe2lmKGY9PT0wKWJyZWFrIHQ7Zi0tLGMrPW9baSsrXTw8bCxsKz04fWM+Pj49dyxsLT13LG4uYmFjays9d31pZihjPj4+PVQsbC09VCxuLmJhY2srPVQsbi5sZW5ndGg9RSxPPT09MCl7bi5tb2RlPVEyO2JyZWFrfWlmKE8mMzIpe24uYmFjaz0tMSxuLm1vZGU9S2k7YnJlYWt9aWYoTyY2NCl7dC5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSIsbi5tb2RlPU1uO2JyZWFrfW4uZXh0cmE9TyYxNSxuLm1vZGU9WDI7Y2FzZSBYMjppZihuLmV4dHJhKXtmb3IoQj1uLmV4dHJhO2w8Qjspe2lmKGY9PT0wKWJyZWFrIHQ7Zi0tLGMrPW9baSsrXTw8bCxsKz04fW4ubGVuZ3RoKz1jJigxPDxuLmV4dHJhKS0xLGM+Pj49bi5leHRyYSxsLT1uLmV4dHJhLG4uYmFjays9bi5leHRyYX1uLndhcz1uLmxlbmd0aCxuLm1vZGU9WTI7Y2FzZSBZMjpmb3IoO2I9bi5kaXN0Y29kZVtjJigxPDxuLmRpc3RiaXRzKS0xXSxUPWI+Pj4yNCxPPWI+Pj4xNiYyNTUsRT1iJjY1NTM1LCEoVDw9bCk7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH1pZigoTyYyNDApPT09MCl7Zm9yKHc9VCxDPU8sTT1FO2I9bi5kaXN0Y29kZVtNKygoYyYoMTw8dytDKS0xKT4+dyldLFQ9Yj4+PjI0LE89Yj4+PjE2JjI1NSxFPWImNjU1MzUsISh3K1Q8PWwpOyl7aWYoZj09PTApYnJlYWsgdDtmLS0sYys9b1tpKytdPDxsLGwrPTh9Yz4+Pj13LGwtPXcsbi5iYWNrKz13fWlmKGM+Pj49VCxsLT1ULG4uYmFjays9VCxPJjY0KXt0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIixuLm1vZGU9TW47YnJlYWt9bi5vZmZzZXQ9RSxuLmV4dHJhPU8mMTUsbi5tb2RlPSQyO2Nhc2UgJDI6aWYobi5leHRyYSl7Zm9yKEI9bi5leHRyYTtsPEI7KXtpZihmPT09MClicmVhayB0O2YtLSxjKz1vW2krK108PGwsbCs9OH1uLm9mZnNldCs9YyYoMTw8bi5leHRyYSktMSxjPj4+PW4uZXh0cmEsbC09bi5leHRyYSxuLmJhY2srPW4uZXh0cmF9aWYobi5vZmZzZXQ+bi5kbWF4KXt0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLG4ubW9kZT1NbjticmVha31uLm1vZGU9WjI7Y2FzZSBaMjppZih1PT09MClicmVhayB0O2lmKG09ZC11LG4ub2Zmc2V0Pm0pe2lmKG09bi5vZmZzZXQtbSxtPm4ud2hhdmUmJm4uc2FuZSl7dC5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixuLm1vZGU9TW47YnJlYWt9bT5uLnduZXh0PyhtLT1uLnduZXh0LF89bi53c2l6ZS1tKTpfPW4ud25leHQtbSxtPm4ubGVuZ3RoJiYobT1uLmxlbmd0aCksZz1uLndpbmRvd31lbHNlIGc9cixfPXMtbi5vZmZzZXQsbT1uLmxlbmd0aDttPnUmJihtPXUpLHUtPW0sbi5sZW5ndGgtPW07ZG8gcltzKytdPWdbXysrXTt3aGlsZSgtLW0pO24ubGVuZ3RoPT09MCYmKG4ubW9kZT1zbSk7YnJlYWs7Y2FzZSBRMjppZih1PT09MClicmVhayB0O3JbcysrXT1uLmxlbmd0aCx1LS0sbi5tb2RlPXNtO2JyZWFrO2Nhc2UgSWc6aWYobi53cmFwKXtmb3IoO2w8MzI7KXtpZihmPT09MClicmVhayB0O2YtLSxjfD1vW2krK108PGwsbCs9OH1pZihkLT11LHQudG90YWxfb3V0Kz1kLG4udG90YWwrPWQsbi53cmFwJjQmJmQmJih0LmFkbGVyPW4uY2hlY2s9bi5mbGFncz9naShuLmNoZWNrLHIsZCxzLWQpOkxnKG4uY2hlY2sscixkLHMtZCkpLGQ9dSxuLndyYXAmNCYmKG4uZmxhZ3M/YzplUyhjKSkhPT1uLmNoZWNrKXt0Lm1zZz0iaW5jb3JyZWN0IGRhdGEgY2hlY2siLG4ubW9kZT1NbjticmVha31jPTAsbD0wfW4ubW9kZT1KMjtjYXNlIEoyOmlmKG4ud3JhcCYmbi5mbGFncyl7Zm9yKDtsPDMyOyl7aWYoZj09PTApYnJlYWsgdDtmLS0sYys9b1tpKytdPDxsLGwrPTh9aWYobi53cmFwJjQmJmMhPT0obi50b3RhbCY0Mjk0OTY3Mjk1KSl7dC5tc2c9ImluY29ycmVjdCBsZW5ndGggY2hlY2siLG4ubW9kZT1NbjticmVha31jPTAsbD0wfW4ubW9kZT10UztjYXNlIHRTOkY9YzY7YnJlYWsgdDtjYXNlIE1uOkY9aVM7YnJlYWsgdDtjYXNlIEJnOnJldHVybiBEZztjYXNlIHNTOmRlZmF1bHQ6cmV0dXJuIE1yfXJldHVybiB0Lm5leHRfb3V0PXMsdC5hdmFpbF9vdXQ9dSx0Lm5leHRfaW49aSx0LmF2YWlsX2luPWYsbi5ob2xkPWMsbi5iaXRzPWwsKG4ud3NpemV8fGQhPT10LmF2YWlsX291dCYmbi5tb2RlPE1uJiYobi5tb2RlPElnfHxlIT09STIpKSYmbFModCx0Lm91dHB1dCx0Lm5leHRfb3V0LGQtdC5hdmFpbF9vdXQpPyhuLm1vZGU9QmcsRGcpOihwLT10LmF2YWlsX2luLGQtPXQuYXZhaWxfb3V0LHQudG90YWxfaW4rPXAsdC50b3RhbF9vdXQrPWQsbi50b3RhbCs9ZCxuLndyYXAmNCYmZCYmKHQuYWRsZXI9bi5jaGVjaz1uLmZsYWdzP2dpKG4uY2hlY2sscixkLHQubmV4dF9vdXQtZCk6TGcobi5jaGVjayxyLGQsdC5uZXh0X291dC1kKSksdC5kYXRhX3R5cGU9bi5iaXRzKyhuLmxhc3Q/NjQ6MCkrKG4ubW9kZT09PUtpPzEyODowKSsobi5tb2RlPT09aW18fG4ubW9kZT09PU5nPzI1NjowKSwocD09PTAmJmQ9PT0wfHxlPT09STIpJiZGPT09U2MmJihGPWY2KSxGKX0sZzY9dD0+e2lmKENjKHQpKXJldHVybiBNcjtsZXQgZT10LnN0YXRlO3JldHVybiBlLndpbmRvdyYmKGUud2luZG93PW51bGwpLHQuc3RhdGU9bnVsbCxTY30sQTY9KHQsZSk9PntpZihDYyh0KSlyZXR1cm4gTXI7bGV0IG49dC5zdGF0ZTtyZXR1cm4obi53cmFwJjIpPT09MD9Ncjoobi5oZWFkPWUsZS5kb25lPSExLFNjKX0sYjY9KHQsZSk9PntsZXQgbj1lLmxlbmd0aCxvLHIsaTtyZXR1cm4gQ2ModCl8fChvPXQuc3RhdGUsby53cmFwIT09MCYmby5tb2RlIT09Y20pP01yOm8ubW9kZT09PWNtJiYocj0xLHI9TGcocixlLG4sMCksciE9PW8uY2hlY2spP2lTOihpPWxTKHQsZSxuLG4pLGk/KG8ubW9kZT1CZyxEZyk6KG8uaGF2ZWRpY3Q9MSxTYykpfTtZci5leHBvcnRzLmluZmxhdGVSZXNldD1hUztZci5leHBvcnRzLmluZmxhdGVSZXNldDI9ZlM7WXIuZXhwb3J0cy5pbmZsYXRlUmVzZXRLZWVwPWNTO1lyLmV4cG9ydHMuaW5mbGF0ZUluaXQ9aDY7WXIuZXhwb3J0cy5pbmZsYXRlSW5pdDI9dVM7WXIuZXhwb3J0cy5pbmZsYXRlPXk2O1lyLmV4cG9ydHMuaW5mbGF0ZUVuZD1nNjtZci5leHBvcnRzLmluZmxhdGVHZXRIZWFkZXI9QTY7WXIuZXhwb3J0cy5pbmZsYXRlU2V0RGljdGlvbmFyeT1iNjtZci5leHBvcnRzLmluZmxhdGVJbmZvPSJwYWtvIGluZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpIn0pO3ZhciBkUz1YbigoWWZ0LFVnKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgVDY9KHQsZSk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpO1VnLmV4cG9ydHMuYXNzaWduPWZ1bmN0aW9uKHQpe2xldCBlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtmb3IoO2UubGVuZ3RoOyl7bGV0IG49ZS5zaGlmdCgpO2lmKG4pe2lmKHR5cGVvZiBuIT0ib2JqZWN0Iil0aHJvdyBuZXcgVHlwZUVycm9yKG4rIm11c3QgYmUgbm9uLW9iamVjdCIpO2ZvcihsZXQgbyBpbiBuKVQ2KG4sbykmJih0W29dPW5bb10pfX1yZXR1cm4gdH07VWcuZXhwb3J0cy5mbGF0dGVuQ2h1bmtzPXQ9PntsZXQgZT0wO2ZvcihsZXQgbz0wLHI9dC5sZW5ndGg7bzxyO28rKyllKz10W29dLmxlbmd0aDtsZXQgbj1uZXcgVWludDhBcnJheShlKTtmb3IobGV0IG89MCxyPTAsaT10Lmxlbmd0aDtvPGk7bysrKXtsZXQgcz10W29dO24uc2V0KHMscikscis9cy5sZW5ndGh9cmV0dXJuIG59fSk7dmFyIGhTPVhuKCgkZnQsZm0pPT57InVzZSBzdHJpY3QiO3ZhciBtUz0hMDt0cnl7U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG5ldyBVaW50OEFycmF5KDEpKX1jYXRjaHttUz0hMX12YXIgbXU9bmV3IFVpbnQ4QXJyYXkoMjU2KTtmb3IobGV0IHQ9MDt0PDI1Njt0KyspbXVbdF09dD49MjUyPzY6dD49MjQ4PzU6dD49MjQwPzQ6dD49MjI0PzM6dD49MTkyPzI6MTttdVsyNTRdPW11WzI1NF09MTtmbS5leHBvcnRzLnN0cmluZzJidWY9dD0+e2lmKHR5cGVvZiBUZXh0RW5jb2Rlcj09ImZ1bmN0aW9uIiYmVGV4dEVuY29kZXIucHJvdG90eXBlLmVuY29kZSlyZXR1cm4gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHQpO2xldCBlLG4sbyxyLGkscz10Lmxlbmd0aCxmPTA7Zm9yKHI9MDtyPHM7cisrKW49dC5jaGFyQ29kZUF0KHIpLChuJjY0NTEyKT09PTU1Mjk2JiZyKzE8cyYmKG89dC5jaGFyQ29kZUF0KHIrMSksKG8mNjQ1MTIpPT09NTYzMjAmJihuPTY1NTM2KyhuLTU1Mjk2PDwxMCkrKG8tNTYzMjApLHIrKykpLGYrPW48MTI4PzE6bjwyMDQ4PzI6bjw2NTUzNj8zOjQ7Zm9yKGU9bmV3IFVpbnQ4QXJyYXkoZiksaT0wLHI9MDtpPGY7cisrKW49dC5jaGFyQ29kZUF0KHIpLChuJjY0NTEyKT09PTU1Mjk2JiZyKzE8cyYmKG89dC5jaGFyQ29kZUF0KHIrMSksKG8mNjQ1MTIpPT09NTYzMjAmJihuPTY1NTM2KyhuLTU1Mjk2PDwxMCkrKG8tNTYzMjApLHIrKykpLG48MTI4P2VbaSsrXT1uOm48MjA0OD8oZVtpKytdPTE5MnxuPj4+NixlW2krK109MTI4fG4mNjMpOm48NjU1MzY/KGVbaSsrXT0yMjR8bj4+PjEyLGVbaSsrXT0xMjh8bj4+PjYmNjMsZVtpKytdPTEyOHxuJjYzKTooZVtpKytdPTI0MHxuPj4+MTgsZVtpKytdPTEyOHxuPj4+MTImNjMsZVtpKytdPTEyOHxuPj4+NiY2MyxlW2krK109MTI4fG4mNjMpO3JldHVybiBlfTt2YXIgdzY9KHQsZSk9PntpZihlPDY1NTM0JiZ0LnN1YmFycmF5JiZtUylyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHQubGVuZ3RoPT09ZT90OnQuc3ViYXJyYXkoMCxlKSk7bGV0IG49IiI7Zm9yKGxldCBvPTA7bzxlO28rKyluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHRbb10pO3JldHVybiBufTtmbS5leHBvcnRzLmJ1ZjJzdHJpbmc9KHQsZSk9PntsZXQgbj1lfHx0Lmxlbmd0aDtpZih0eXBlb2YgVGV4dERlY29kZXI9PSJmdW5jdGlvbiImJlRleHREZWNvZGVyLnByb3RvdHlwZS5kZWNvZGUpcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZSh0LnN1YmFycmF5KDAsZSkpO2xldCBvLHIsaT1uZXcgQXJyYXkobioyKTtmb3Iocj0wLG89MDtvPG47KXtsZXQgcz10W28rK107aWYoczwxMjgpe2lbcisrXT1zO2NvbnRpbnVlfWxldCBmPW11W3NdO2lmKGY+NCl7aVtyKytdPTY1NTMzLG8rPWYtMTtjb250aW51ZX1mb3IocyY9Zj09PTI/MzE6Zj09PTM/MTU6NztmPjEmJm88bjspcz1zPDw2fHRbbysrXSY2MyxmLS07aWYoZj4xKXtpW3IrK109NjU1MzM7Y29udGludWV9czw2NTUzNj9pW3IrK109czoocy09NjU1MzYsaVtyKytdPTU1Mjk2fHM+PjEwJjEwMjMsaVtyKytdPTU2MzIwfHMmMTAyMyl9cmV0dXJuIHc2KGkscil9O2ZtLmV4cG9ydHMudXRmOGJvcmRlcj0odCxlKT0+e2U9ZXx8dC5sZW5ndGgsZT50Lmxlbmd0aCYmKGU9dC5sZW5ndGgpO2xldCBuPWUtMTtmb3IoO24+PTAmJih0W25dJjE5Mik9PT0xMjg7KW4tLTtyZXR1cm4gbjwwfHxuPT09MD9lOm4rbXVbdFtuXV0+ZT9uOmV9fSk7dmFyIHlTPVhuKChaZnQsX1MpPT57InVzZSBzdHJpY3QiO19TLmV4cG9ydHM9ezI6Im5lZWQgZGljdGlvbmFyeSIsMToic3RyZWFtIGVuZCIsMDoiIiwiLTEiOiJmaWxlIGVycm9yIiwiLTIiOiJzdHJlYW0gZXJyb3IiLCItMyI6ImRhdGEgZXJyb3IiLCItNCI6Imluc3VmZmljaWVudCBtZW1vcnkiLCItNSI6ImJ1ZmZlciBlcnJvciIsIi02IjoiaW5jb21wYXRpYmxlIHZlcnNpb24ifX0pO3ZhciBBUz1YbigoUWZ0LGdTKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBPNigpe3RoaXMuaW5wdXQ9bnVsbCx0aGlzLm5leHRfaW49MCx0aGlzLmF2YWlsX2luPTAsdGhpcy50b3RhbF9pbj0wLHRoaXMub3V0cHV0PW51bGwsdGhpcy5uZXh0X291dD0wLHRoaXMuYXZhaWxfb3V0PTAsdGhpcy50b3RhbF9vdXQ9MCx0aGlzLm1zZz0iIix0aGlzLnN0YXRlPW51bGwsdGhpcy5kYXRhX3R5cGU9Mix0aGlzLmFkbGVyPTB9Z1MuZXhwb3J0cz1PNn0pO3ZhciBUUz1YbigoSmZ0LGJTKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBFNigpe3RoaXMudGV4dD0wLHRoaXMudGltZT0wLHRoaXMueGZsYWdzPTAsdGhpcy5vcz0wLHRoaXMuZXh0cmE9bnVsbCx0aGlzLmV4dHJhX2xlbj0wLHRoaXMubmFtZT0iIix0aGlzLmNvbW1lbnQ9IiIsdGhpcy5oY3JjPTAsdGhpcy5kb25lPSExfWJTLmV4cG9ydHM9RTZ9KTt2YXIgUlM9WG4oKHR1dCxHYSk9PnsidXNlIHN0cmljdCI7dmFyIFdpPXBTKCksT1M9ZFMoKSxWZz1oUygpLHpnPXlTKCksUjY9QVMoKSxTNj1UUygpLEVTPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcse1pfTk9fRkxVU0g6QzYsWl9GSU5JU0g6eDYsWl9PSzpodSxaX1NUUkVBTV9FTkQ6a2csWl9ORUVEX0RJQ1Q6R2csWl9TVFJFQU1fRVJST1I6UDYsWl9EQVRBX0VSUk9SOndTLFpfTUVNX0VSUk9SOk02fT1vbSgpO2Z1bmN0aW9uIF91KHQpe3RoaXMub3B0aW9ucz1PUy5hc3NpZ24oe2NodW5rU2l6ZToxMDI0KjY0LHdpbmRvd0JpdHM6MTUsdG86IiJ9LHR8fHt9KTtsZXQgZT10aGlzLm9wdGlvbnM7ZS5yYXcmJmUud2luZG93Qml0cz49MCYmZS53aW5kb3dCaXRzPDE2JiYoZS53aW5kb3dCaXRzPS1lLndpbmRvd0JpdHMsZS53aW5kb3dCaXRzPT09MCYmKGUud2luZG93Qml0cz0tMTUpKSxlLndpbmRvd0JpdHM+PTAmJmUud2luZG93Qml0czwxNiYmISh0JiZ0LndpbmRvd0JpdHMpJiYoZS53aW5kb3dCaXRzKz0zMiksZS53aW5kb3dCaXRzPjE1JiZlLndpbmRvd0JpdHM8NDgmJihlLndpbmRvd0JpdHMmMTUpPT09MCYmKGUud2luZG93Qml0c3w9MTUpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IFI2LHRoaXMuc3RybS5hdmFpbF9vdXQ9MDtsZXQgbj1XaS5pbmZsYXRlSW5pdDIodGhpcy5zdHJtLGUud2luZG93Qml0cyk7aWYobiE9PWh1KXRocm93IG5ldyBFcnJvcih6Z1tuXSk7aWYodGhpcy5oZWFkZXI9bmV3IFM2LFdpLmluZmxhdGVHZXRIZWFkZXIodGhpcy5zdHJtLHRoaXMuaGVhZGVyKSxlLmRpY3Rpb25hcnkmJih0eXBlb2YgZS5kaWN0aW9uYXJ5PT0ic3RyaW5nIj9lLmRpY3Rpb25hcnk9Vmcuc3RyaW5nMmJ1ZihlLmRpY3Rpb25hcnkpOkVTLmNhbGwoZS5kaWN0aW9uYXJ5KT09PSJbb2JqZWN0IEFycmF5QnVmZmVyXSImJihlLmRpY3Rpb25hcnk9bmV3IFVpbnQ4QXJyYXkoZS5kaWN0aW9uYXJ5KSksZS5yYXcmJihuPVdpLmluZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSxlLmRpY3Rpb25hcnkpLG4hPT1odSkpKXRocm93IG5ldyBFcnJvcih6Z1tuXSl9X3UucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odCxlKXtsZXQgbj10aGlzLnN0cm0sbz10aGlzLm9wdGlvbnMuY2h1bmtTaXplLHI9dGhpcy5vcHRpb25zLmRpY3Rpb25hcnksaSxzLGY7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtmb3IoZT09PX5+ZT9zPWU6cz1lPT09ITA/eDY6QzYsRVMuY2FsbCh0KT09PSJbb2JqZWN0IEFycmF5QnVmZmVyXSI/bi5pbnB1dD1uZXcgVWludDhBcnJheSh0KTpuLmlucHV0PXQsbi5uZXh0X2luPTAsbi5hdmFpbF9pbj1uLmlucHV0Lmxlbmd0aDs7KXtmb3Iobi5hdmFpbF9vdXQ9PT0wJiYobi5vdXRwdXQ9bmV3IFVpbnQ4QXJyYXkobyksbi5uZXh0X291dD0wLG4uYXZhaWxfb3V0PW8pLGk9V2kuaW5mbGF0ZShuLHMpLGk9PT1HZyYmciYmKGk9V2kuaW5mbGF0ZVNldERpY3Rpb25hcnkobixyKSxpPT09aHU/aT1XaS5pbmZsYXRlKG4scyk6aT09PXdTJiYoaT1HZykpO24uYXZhaWxfaW4+MCYmaT09PWtnJiZuLnN0YXRlLndyYXA+MCYmdFtuLm5leHRfaW5dIT09MDspV2kuaW5mbGF0ZVJlc2V0KG4pLGk9V2kuaW5mbGF0ZShuLHMpO3N3aXRjaChpKXtjYXNlIFA2OmNhc2Ugd1M6Y2FzZSBHZzpjYXNlIE02OnJldHVybiB0aGlzLm9uRW5kKGkpLHRoaXMuZW5kZWQ9ITAsITF9aWYoZj1uLmF2YWlsX291dCxuLm5leHRfb3V0JiYobi5hdmFpbF9vdXQ9PT0wfHxpPT09a2cpKWlmKHRoaXMub3B0aW9ucy50bz09PSJzdHJpbmciKXtsZXQgdT1WZy51dGY4Ym9yZGVyKG4ub3V0cHV0LG4ubmV4dF9vdXQpLGM9bi5uZXh0X291dC11LGw9VmcuYnVmMnN0cmluZyhuLm91dHB1dCx1KTtuLm5leHRfb3V0PWMsbi5hdmFpbF9vdXQ9by1jLGMmJm4ub3V0cHV0LnNldChuLm91dHB1dC5zdWJhcnJheSh1LHUrYyksMCksdGhpcy5vbkRhdGEobCl9ZWxzZSB0aGlzLm9uRGF0YShuLm91dHB1dC5sZW5ndGg9PT1uLm5leHRfb3V0P24ub3V0cHV0Om4ub3V0cHV0LnN1YmFycmF5KDAsbi5uZXh0X291dCkpO2lmKCEoaT09PWh1JiZmPT09MCkpe2lmKGk9PT1rZylyZXR1cm4gaT1XaS5pbmZsYXRlRW5kKHRoaXMuc3RybSksdGhpcy5vbkVuZChpKSx0aGlzLmVuZGVkPSEwLCEwO2lmKG4uYXZhaWxfaW49PT0wKWJyZWFrfX1yZXR1cm4hMH07X3UucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbih0KXt0aGlzLmNodW5rcy5wdXNoKHQpfTtfdS5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24odCl7dD09PWh1JiYodGhpcy5vcHRpb25zLnRvPT09InN0cmluZyI/dGhpcy5yZXN1bHQ9dGhpcy5jaHVua3Muam9pbigiIik6dGhpcy5yZXN1bHQ9T1MuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPXQsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ307ZnVuY3Rpb24gamcodCxlKXtsZXQgbj1uZXcgX3UoZSk7aWYobi5wdXNoKHQpLG4uZXJyKXRocm93IG4ubXNnfHx6Z1tuLmVycl07cmV0dXJuIG4ucmVzdWx0fWZ1bmN0aW9uIE42KHQsZSl7cmV0dXJuIGU9ZXx8e30sZS5yYXc9ITAsamcodCxlKX1HYS5leHBvcnRzLkluZmxhdGU9X3U7R2EuZXhwb3J0cy5pbmZsYXRlPWpnO0dhLmV4cG9ydHMuaW5mbGF0ZVJhdz1ONjtHYS5leHBvcnRzLnVuZ3ppcD1qZztHYS5leHBvcnRzLmNvbnN0YW50cz1vbSgpfSk7dmFyIEhnPXt9O2RlKEhnLHtkZWZhdWx0OigpPT5HNn0pO2Z1bmN0aW9uIEk2KHQsZSl7bGV0IG49TXMuZnJvbVN0cmluZyh0LnR5cGUpLG89dC5idWZmZXI7eTIodC5rZXksbyk7bGV0IHI9azYobyk7bz1yLmJ1ZmZlcjtsZXQgaT1yLmxlbmd0aDtzd2l0Y2gobil7Y2FzZSBNcy5NRVRBREFUQTpyZXR1cm4gRjYobyxpLHQucXVhZEtleSk7Y2FzZSBNcy5URVJSQUlOOnJldHVybiBCNihvLGksZSk7Y2FzZSBNcy5EQlJPT1Q6cmV0dXJuIGUucHVzaChvKSx7YnVmZmVyOm99fX1mdW5jdGlvbiBGNih0LGUsbil7bGV0IG89bmV3IERhdGFWaWV3KHQpLHI9MCxpPW8uZ2V0VWludDMyKHIsITApO2lmKHIrPXphLGkhPT12Nil0aHJvdyBuZXcgQWUoIkludmFsaWQgbWFnaWMiKTtsZXQgcz1vLmdldFVpbnQzMihyLCEwKTtpZihyKz16YSxzIT09MSl0aHJvdyBuZXcgQWUoIkludmFsaWQgZGF0YSB0eXBlLiBNdXN0IGJlIDEgZm9yIFF1YWRUcmVlUGFja2V0Iik7bGV0IGY9by5nZXRVaW50MzIociwhMCk7aWYocis9emEsZiE9PTIpdGhyb3cgbmV3IEFlKCJJbnZhbGlkIFF1YWRUcmVlUGFja2V0IHZlcnNpb24uIE9ubHkgdmVyc2lvbiAyIGlzIHN1cHBvcnRlZC4iKTtsZXQgdT1vLmdldEludDMyKHIsITApO3IrPXhjO2xldCBjPW8uZ2V0SW50MzIociwhMCk7aWYocis9eGMsYyE9PTMyKXRocm93IG5ldyBBZSgiSW52YWxpZCBpbnN0YW5jZSBzaXplLiIpO2xldCBsPW8uZ2V0SW50MzIociwhMCk7cis9eGM7bGV0IHA9by5nZXRJbnQzMihyLCEwKTtyKz14YztsZXQgZD1vLmdldEludDMyKHIsITApO2lmKHIrPXhjLGwhPT11KmMrcil0aHJvdyBuZXcgQWUoIkludmFsaWQgZGF0YUJ1ZmZlck9mZnNldCIpO2lmKGwrcCtkIT09ZSl0aHJvdyBuZXcgQWUoIkludmFsaWQgcGFja2V0IG9mZnNldHMiKTtsZXQgbT1bXTtmb3IobGV0IEU9MDtFPHU7KytFKXtsZXQgdz1vLmdldFVpbnQ4KHIpOysrciwrK3I7bGV0IEM9by5nZXRVaW50MTYociwhMCk7cis9VmE7bGV0IE09by5nZXRVaW50MTYociwhMCk7cis9VmE7bGV0IE49by5nZXRVaW50MTYociwhMCk7cis9VmEscis9VmEscis9VmEscis9eGMscis9eGMscis9ODtsZXQgRj1vLmdldFVpbnQ4KHIrKyksST1vLmdldFVpbnQ4KHIrKyk7cis9VmEsbS5wdXNoKG5ldyBUMih3LEMsTSxOLEYsSSkpfWxldCBfPVtdLGc9MDtmdW5jdGlvbiBiKEUsdyxDKXtsZXQgTT0hMTtpZihDPT09NCl7aWYody5oYXNTdWJ0cmVlKCkpcmV0dXJuO009ITB9Zm9yKGxldCBOPTA7Tjw0OysrTil7bGV0IEY9RStOLnRvU3RyaW5nKCk7aWYoTSlfW0ZdPW51bGw7ZWxzZSBpZihDPDQpaWYoIXcuaGFzQ2hpbGQoTikpX1tGXT1udWxsO2Vsc2V7aWYoZz09PXUpe2NvbnNvbGUubG9nKCJJbmNvcnJlY3QgbnVtYmVyIG9mIGluc3RhbmNlcyIpO3JldHVybn1sZXQgST1tW2crK107X1tGXT1JLGIoRixJLEMrMSl9fX1sZXQgVD0wLE89bVtnKytdO3JldHVybiBuPT09IiI/KytUOl9bbl09TyxiKG4sTyxUKSxffWZ1bmN0aW9uIEI2KHQsZSxuKXtsZXQgbz1uZXcgRGF0YVZpZXcodCkscj1mdW5jdGlvbihmKXtmb3IobGV0IHU9MDt1PEQ2OysrdSl7bGV0IGM9by5nZXRVaW50MzIoZiwhMCk7aWYoZis9emEsZis9YyxmPmUpdGhyb3cgbmV3IEFlKCJNYWxmb3JtZWQgdGVycmFpbiBwYWNrZXQgZm91bmQuIil9cmV0dXJuIGZ9LGk9MCxzPVtdO2Zvcig7cy5sZW5ndGg8TDY7KXtsZXQgZj1pO2k9cihpKTtsZXQgdT10LnNsaWNlKGYsaSk7bi5wdXNoKHUpLHMucHVzaCh1KX1yZXR1cm4gc31mdW5jdGlvbiBrNih0KXtsZXQgZT1uZXcgRGF0YVZpZXcodCksbj0wLG89ZS5nZXRVaW50MzIobiwhMCk7aWYobis9emEsbyE9PVNTJiZvIT09VTYpdGhyb3cgbmV3IEFlKCJJbnZhbGlkIG1hZ2ljIik7bGV0IHI9ZS5nZXRVaW50MzIobixvPT09U1MpO24rPXphO2xldCBpPW5ldyBVaW50OEFycmF5KHQsbikscz1DUy5kZWZhdWx0LmluZmxhdGUoaSk7aWYocy5sZW5ndGghPT1yKXRocm93IG5ldyBBZSgiU2l6ZSBvZiBwYWNrZXQgZG9lc24ndCBtYXRjaCBoZWFkZXIiKTtyZXR1cm4gc312YXIgQ1MsVmEseGMsemEsTXMsdjYsTDYsRDYsU1MsVTYsRzYscWc9JCgoKT0+e2cyKCk7dzIoKTtKcigpO0NTPWRyKFJTKCksMSk7c28oKTtWYT1VaW50MTZBcnJheS5CWVRFU19QRVJfRUxFTUVOVCx4Yz1JbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULHphPVVpbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULE1zPXtNRVRBREFUQTowLFRFUlJBSU46MSxEQlJPT1Q6Mn07TXMuZnJvbVN0cmluZz1mdW5jdGlvbih0KXtpZih0PT09Ik1ldGFkYXRhIilyZXR1cm4gTXMuTUVUQURBVEE7aWYodD09PSJUZXJyYWluIilyZXR1cm4gTXMuVEVSUkFJTjtpZih0PT09IkRiUm9vdCIpcmV0dXJuIE1zLkRCUk9PVH07djY9MzIzMDE7TDY9NSxENj00O1NTPTE5NTMwMjk4MDUsVTY9MjkxNzAzNDEwMDtHNj1RZShJNil9KTtmdW5jdGlvbiBWNih0KXtyZXR1cm4geS5kZWZpbmVkKCJ2YWx1ZSIsdCksdDw9LjA0MDQ1P3QqLjA3NzM5OTM4MDgwNDk1MzU3Ok1hdGgucG93KCh0Ky4wNTUpKi45NDc4NjcyOTg1NzgxOTkxLDIuNCl9dmFyIHVtLHhTPSQoKCk9PntXdCgpO3VtPVY2fSk7dmFyIFlnPXt9O2RlKFlnLHtkZWZhdWx0OigpPT5kOH0pO2Z1bmN0aW9uIHo2KHQsZSxuLG8scixpKXtsZXQgcz1uKigxLXQpK28qdCxmPXIqKDEtdCkraSp0O3JldHVybiBzKigxLWUpK2YqZX1mdW5jdGlvbiBsbSh0LGUsbixvKXtsZXQgcj10K2UqbjtyZXR1cm4gb1tyXX1mdW5jdGlvbiBqNih0LGUsbil7bGV0IG89bi5uYXRpdmVFeHRlbnQscj0odC1vLndlc3QpLyhvLmVhc3Qtby53ZXN0KSoobi53aWR0aC0xKSxpPShlLW8uc291dGgpLyhvLm5vcnRoLW8uc291dGgpKihuLmhlaWdodC0xKSxzPU1hdGguZmxvb3IociksZj1NYXRoLmZsb29yKGkpO3ItPXMsaS09ZjtsZXQgdT1zPG4ud2lkdGg/cysxOnMsYz1mPG4uaGVpZ2h0P2YrMTpmO2Y9bi5oZWlnaHQtMS1mLGM9bi5oZWlnaHQtMS1jO2xldCBsPWxtKHMsZixuLndpZHRoLG4uYnVmZmVyKSxwPWxtKHUsZixuLndpZHRoLG4uYnVmZmVyKSxkPWxtKHMsYyxuLndpZHRoLG4uYnVmZmVyKSxtPWxtKHUsYyxuLndpZHRoLG4uYnVmZmVyKSxfPXo2KHIsaSxsLHAsZCxtKTtyZXR1cm4gXz1fKm4uc2NhbGUrbi5vZmZzZXQsX31mdW5jdGlvbiBQUyh0LGUsbil7Zm9yKGxldCBvPTA7bzxuLmxlbmd0aDtvKyspe2xldCByPW5bb10ubmF0aXZlRXh0ZW50LGk9bmV3IGE7aWYobltvXS5wcm9qZWN0aW9uVHlwZT09PSJXZWJNZXJjYXRvciIpe2xldCBzPW5bb10ucHJvamVjdGlvbi5fZWxsaXBzb2lkLl9yYWRpaTtpPW5ldyBubyhuZXcgWShzLngscy55LHMueikpLnByb2plY3QobmV3IGN0KHQsZSwwKSl9ZWxzZSBpLng9dCxpLnk9ZTtpZihpLng+ci53ZXN0JiZpLng8ci5lYXN0JiZpLnk+ci5zb3V0aCYmaS55PHIubm9ydGgpcmV0dXJuIGo2KGkueCxpLnksbltvXSl9cmV0dXJuIDB9ZnVuY3Rpb24gSDYodCxlLG4sbyxyLGkscyl7aWYocylyZXR1cm47bGV0IGY9UFMoci5sb25naXR1ZGUsci5sYXRpdHVkZSxpKTtmb3IobGV0IHU9MDt1PHQ7Kyt1KXtsZXQgYz1QUyhyLmxvbmdpdHVkZStQLnRvUmFkaWFucyhuKmVbdSozXSksci5sYXRpdHVkZStQLnRvUmFkaWFucyhvKmVbdSozKzFdKSxpKTtlW3UqMysyXSs9Yy1mfX1mdW5jdGlvbiBxNih0LGUsbixvLHIsaSxzLGYsdSl7aWYodD09PTB8fCFoKGUpfHxlLmxlbmd0aD09PTApcmV0dXJuO2xldCBjPW5ldyBZKE1hdGguc3FydChzLngpLE1hdGguc3FydChzLnkpLE1hdGguc3FydChzLnopKTtmb3IobGV0IGw9MDtsPHQ7KytsKXtsZXQgcD1sKjMsZD1wKzEsbT1wKzIsXz1uZXcgY3Q7Xy5sb25naXR1ZGU9by5sb25naXR1ZGUrUC50b1JhZGlhbnMoZiplW3BdKSxfLmxhdGl0dWRlPW8ubGF0aXR1ZGUrUC50b1JhZGlhbnModSplW2RdKSxfLmhlaWdodD1vLmhlaWdodCtlW21dO2xldCBnPXt9O2MuY2FydG9ncmFwaGljVG9DYXJ0ZXNpYW4oXyxnKSxnLngtPXIueCxnLnktPXIueSxnLnotPXIuejtsZXQgYj17fTtpZihaLm11bHRpcGx5QnlWZWN0b3IoaSxnLGIpLGVbcF09Yi54LGVbZF09Yi55LGVbbV09Yi56LGgobikpe2xldCBUPW5ldyBhKG5bcF0sbltkXSxuW21dKSxPPXt9O1oubXVsdGlwbHlCeVZlY3RvcihpLFQsTyksbltwXT1PLngsbltkXT1PLnksblttXT1PLnp9fX1mdW5jdGlvbiBLNih0LGUsbil7Zm9yKGxldCBvPTA7bzx0Oysrbyl7bGV0IHI9bltvKjRdLzY1NTM1LGk9bltvKjQrMV0vNjU1MzUscz0obltvKjQrMl0tbltvKjRdKS82NTUzNSxmPShuW28qNCszXS1uW28qNCsxXSkvNjU1MzU7ZVtvKjJdKj1zLGVbbyoyXSs9cixlW28qMisxXSo9ZixlW28qMisxXSs9aX19ZnVuY3Rpb24gVzYodCxlLG4sbyl7bGV0IHI9bmV3IFVpbnQzMkFycmF5KHQpLGk9aChlKT9mPT5lW2ZdOmY9PmYscz0wO2lmKG8mJmgobikpe2xldCBmPXU9Pm5baSh1KSo0KzNdPDI1NTtmb3IobGV0IHU9MDt1PHQ7dSs9MykhZih1KSYmIWYodSsxKSYmIWYodSsyKSYmKHJbcysrXT1pKHUpLHJbcysrXT1pKHUrMSkscltzKytdPWkodSsyKSk7aWYocz4wKXtsZXQgdT1zO2ZvcihsZXQgYz0wO2M8dDtjKz0zKShmKGMpfHxmKGMrMSl8fGYoYysyKSkmJihyW3UrK109aShjKSxyW3UrK109aShjKzEpLHJbdSsrXT1pKGMrMikpfWVsc2UgZm9yKGxldCB1PTA7dTx0OysrdSlyW3VdPWkodSl9ZWxzZXtzPXQ7Zm9yKGxldCBmPTA7Zjx0OysrZilyW2ZdPWkoZil9cmV0dXJue2luZGV4QXJyYXk6cix0cmFuc3BhcmVudFZlcnRleE9mZnNldDpzfX1mdW5jdGlvbiBYNih0LGUsbil7bGV0IG89ZVtuXTtpZihoKG8pKXJldHVybiBvO2xldCByPWVbbl09e3Bvc2l0aW9uczp7fSxpbmRpY2VzOnt9LGVkZ2VzOnt9fSxpPXRbbl0/P3QuZGVmYXVsdDtyZXR1cm4gci5oYXNPdXRsaW5lPWgoaT8uZWRnZXMpLHJ9ZnVuY3Rpb24gWTYodCxlLG4sbyl7aWYoIWgodFtuXSkpe2xldCByPW4qMyxpPWU7Zm9yKGxldCBzPTA7czwzO3MrKyl7bGV0IGY9b1tyK3NdO2goaVtmXSl8fChpW2ZdPXt9KSxpPWlbZl19aChpLmluZGV4KXx8KGkuaW5kZXg9biksdFtuXT1pLmluZGV4fX1mdW5jdGlvbiAkNih0LGUsbixvLHIsaSl7bGV0IHMsZjtvPHI/KHM9byxmPXIpOihzPXIsZj1vKTtsZXQgdT10W3NdO2godSl8fCh1PXRbc109e30pO2xldCBjPXVbZl07aChjKXx8KGM9dVtmXT17bm9ybWFsc0luZGV4OltdLG91dGxpbmVzOltdfSksYy5ub3JtYWxzSW5kZXgucHVzaChpKSwoYy5vdXRsaW5lcy5sZW5ndGg9PT0wfHxlIT09b3x8biE9PXIpJiZjLm91dGxpbmVzLnB1c2goZSxuKX1mdW5jdGlvbiBaNih0LGUsbixvKXtsZXQgcj1bXTtmb3IobGV0IGk9MDtpPG4ubGVuZ3RoO2krPTMpe2xldCBzPWgoZSk/ZVtuW2ldXToiZGVmYXVsdCIsZj1YNih0LHIscyk7aWYoIWYuaGFzT3V0bGluZSljb250aW51ZTtsZXQgdT1mLmluZGljZXMsYz1mLnBvc2l0aW9ucztmb3IobGV0IHA9MDtwPDM7cCsrKXtsZXQgZD1uW2krcF07WTYodSxjLGQsbyl9bGV0IGw9Zi5lZGdlcztmb3IobGV0IHA9MDtwPDM7cCsrKXtsZXQgZD1uW2krcF0sbT1uW2krKHArMSklM10sXz11W2RdLGc9dVttXTskNihsLGQsbSxfLGcsaSl9fXJldHVybiByfWZ1bmN0aW9uIE1TKHQsZSxuLG8pe2xldCByPW5bZV0qMyxpPW5bZSsxXSozLHM9bltlKzJdKjM7YS5mcm9tQXJyYXkobyxyLEFpKSxhLmZyb21BcnJheShvLGkscG0pLGEuZnJvbUFycmF5KG8scyxkbSksYS5zdWJ0cmFjdChwbSxBaSxwbSksYS5zdWJ0cmFjdChkbSxBaSxkbSksYS5jcm9zcyhwbSxkbSxBaSk7bGV0IGY9YS5tYWduaXR1ZGUoQWkpO2YhPT0wJiZhLmRpdmlkZUJ5U2NhbGFyKEFpLGYsQWkpO2xldCB1PWUqMyxjPShlKzEpKjMsbD0oZSsyKSozO2EucGFjayhBaSx0LHUpLGEucGFjayhBaSx0LGMpLGEucGFjayhBaSx0LGwpfWZ1bmN0aW9uIFE2KHQsZSxuKXthLmZyb21BcnJheSh0LGUsbW0pLGEuZnJvbUFycmF5KHQsbixLZyk7bGV0IG89YS5kb3QobW0sS2cpLHI9YS5tYWduaXR1ZGUoYS5jcm9zcyhtbSxLZyxtbSkpO3JldHVybiBNYXRoLmF0YW4yKHIsbyk8LjI1fWZ1bmN0aW9uIEo2KHQsZSxuLG8scil7aWYoZS5ub3JtYWxzSW5kZXgubGVuZ3RoPjEpe2xldCBpPW8ubGVuZ3RoPT09ci5sZW5ndGg7Zm9yKGxldCBzPTA7czxlLm5vcm1hbHNJbmRleC5sZW5ndGg7cysrKXtsZXQgZj1lLm5vcm1hbHNJbmRleFtzXTtpZihoKHJbZiozXSl8fE1TKHIsZixuLG8pLHMhPT0wKWZvcihsZXQgdT0wO3U8czt1Kyspe2xldCBjPWUubm9ybWFsc0luZGV4W3VdLGw9aT9uW2ZdKjM6ZiozLHA9aT9uW2NdKjM6YyozO2lmKFE2KHIsbCxwKSlyZXR1cm59fX10LnB1c2goLi4uZS5vdXRsaW5lcyl9ZnVuY3Rpb24gdDgodCxlLG4sbyxyKXtsZXQgaT1PYmplY3Qua2V5cyhlKTtmb3IobGV0IHM9MDtzPGkubGVuZ3RoO3MrKyl7bGV0IGY9ZVtpW3NdXSx1PU9iamVjdC5rZXlzKGYpO2ZvcihsZXQgYz0wO2M8dS5sZW5ndGg7YysrKXtsZXQgbD1mW3VbY11dO0o2KHQsbCxuLG8scil9fX1mdW5jdGlvbiBlOCh0LGUsbixvKXtsZXQgcj1bXSxpPU9iamVjdC5rZXlzKHQpO2ZvcihsZXQgcz0wO3M8aS5sZW5ndGg7cysrKXtsZXQgZj10W2lbc11dLmVkZ2VzO3Q4KHIsZixlLG4sbyl9cmV0dXJuIHJ9ZnVuY3Rpb24gbjgodCxlLG4sbyxyKXtpZighaCh0KXx8T2JqZWN0LmtleXModCkubGVuZ3RoPT09MClyZXR1cm47bGV0IGk9WjYodCxlLG4sbyk7KCFoKHIpfHxuLmxlbmd0aCozIT09ci5sZW5ndGgpJiYocj1bXSk7bGV0IHM9ZTgoaSxuLG8scik7cmV0dXJuIHMubGVuZ3RoPjA/bmV3IFVpbnQzMkFycmF5KHMpOnZvaWQgMH1mdW5jdGlvbiBvOCh0KXtsZXQgZT1uZXcgRmxvYXQzMkFycmF5KHQubGVuZ3RoKTtmb3IobGV0IG49MDtuPHQubGVuZ3RoO24rPTQpZVtuXT11bShuZS5ieXRlVG9GbG9hdCh0W25dKSksZVtuKzFdPXVtKG5lLmJ5dGVUb0Zsb2F0KHRbbisxXSkpLGVbbisyXT11bShuZS5ieXRlVG9GbG9hdCh0W24rMl0pKSxlW24rM109bmUuYnl0ZVRvRmxvYXQodFtuKzNdKTtyZXR1cm4gZX1mdW5jdGlvbiByOCh0LGUsbixvLHIsaSxzKXtsZXQgZj17bm9ybWFsczp2b2lkIDAscG9zaXRpb25zOnZvaWQgMCx1djBzOnZvaWQgMCxjb2xvcnM6dm9pZCAwLGZlYXR1cmVJbmRleDp2b2lkIDAsdmVydGV4Q291bnQ6dm9pZCAwfTtpZih0PT09MHx8IWgobil8fG4ubGVuZ3RoPT09MHx8aChvKSlyZXR1cm4gZjtpZihoKGUpKXtmLnZlcnRleENvdW50PWUubGVuZ3RoLGYucG9zaXRpb25zPW5ldyBGbG9hdDMyQXJyYXkoZS5sZW5ndGgqMyksZi51djBzPWgocik/bmV3IEZsb2F0MzJBcnJheShlLmxlbmd0aCoyKTp2b2lkIDAsZi5jb2xvcnM9aChpKT9uZXcgVWludDhBcnJheShlLmxlbmd0aCo0KTp2b2lkIDAsZi5mZWF0dXJlSW5kZXg9aChzKT9uZXcgQXJyYXkoZS5sZW5ndGgpOnZvaWQgMDtmb3IobGV0IHU9MDt1PGUubGVuZ3RoO3UrKyl7bGV0IGM9ZVt1XTtmLnBvc2l0aW9uc1t1KjNdPW5bYyozXSxmLnBvc2l0aW9uc1t1KjMrMV09bltjKjMrMV0sZi5wb3NpdGlvbnNbdSozKzJdPW5bYyozKzJdLGgoZi51djBzKSYmKGYudXYwc1t1KjJdPXJbYyoyXSxmLnV2MHNbdSoyKzFdPXJbYyoyKzFdKSxoKGYuY29sb3JzKSYmKGYuY29sb3JzW3UqNF09aVtjKjRdLGYuY29sb3JzW3UqNCsxXT1pW2MqNCsxXSxmLmNvbG9yc1t1KjQrMl09aVtjKjQrMl0sZi5jb2xvcnNbdSo0KzNdPWlbYyo0KzNdKSxoKGYuZmVhdHVyZUluZGV4KSYmKGYuZmVhdHVyZUluZGV4W3VdPXNbY10pfXQ9ZS5sZW5ndGgsbj1mLnBvc2l0aW9uc31lPW5ldyBBcnJheSh0KTtmb3IobGV0IHU9MDt1PHQ7dSsrKWVbdV09dTtmLm5vcm1hbHM9bmV3IEZsb2F0MzJBcnJheShlLmxlbmd0aCozKTtmb3IobGV0IHU9MDt1PGUubGVuZ3RoO3UrPTMpTVMoZi5ub3JtYWxzLHUsZSxuKTtyZXR1cm4gZn1mdW5jdGlvbiBpOCh0LGUsbixvLHIsaSxzLGYpe2lmKHQ9PT0wfHwhaChuKXx8bi5sZW5ndGg9PT0wKXJldHVybntidWZmZXJzOltdLGJ1ZmZlclZpZXdzOltdLGFjY2Vzc29yczpbXSxtZXNoZXM6W10sbm9kZXM6W10sbm9kZXNJblNjZW5lOltdfTtsZXQgdT1bXSxjPVtdLGw9W10scD1bXSxkPVtdLG09W10sXz17fSxnPVtdO2goZSkmJih0PWUubGVuZ3RoKTtsZXR7aW5kZXhBcnJheTpiLHRyYW5zcGFyZW50VmVydGV4T2Zmc2V0OlR9PVc2KHQsZSxpLGYuc3BsaXRHZW9tZXRyeUJ5Q29sb3JUcmFuc3BhcmVuY3kpLE89bmV3IEJsb2IoW2JdLHt0eXBlOiJhcHBsaWNhdGlvbi9iaW5hcnkifSksRT1VUkwuY3JlYXRlT2JqZWN0VVJMKE8pLHc9dCxDPWYuZW5hYmxlRmVhdHVyZXMmJmgocyk/bmV3IEZsb2F0MzJBcnJheShzLmxlbmd0aCk6dm9pZCAwLE09MDtpZihoKEMpKWZvcihsZXQgcnQ9MDtydDxzLmxlbmd0aDsrK3J0KXtDW3J0XT1zW3J0XTtsZXQgQ3Q9c1tydF0rMTtNPEN0JiYoTT1DdCl9bGV0IE4sRj1uOChmLnN5bWJvbG9neURhdGEscyxiLG4sbyk7aWYoaChGKSl7bGV0IHJ0PW5ldyBCbG9iKFtGXSx7dHlwZToiYXBwbGljYXRpb24vYmluYXJ5In0pO049VVJMLmNyZWF0ZU9iamVjdFVSTChydCl9bGV0IEk9bi5zdWJhcnJheSgwLHcqMyksdj1uZXcgQmxvYihbSV0se3R5cGU6ImFwcGxpY2F0aW9uL2JpbmFyeSJ9KSxCPVVSTC5jcmVhdGVPYmplY3RVUkwodiksQT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksUz1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkseD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksTD1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFksej1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksaj1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7Zm9yKGxldCBydD0wO3J0PEkubGVuZ3RoLzM7cnQrKylBPU1hdGgubWluKEEsSVtydCozKzBdKSxTPU1hdGgubWF4KFMsSVtydCozKzBdKSx4PU1hdGgubWluKHgsSVtydCozKzFdKSxMPU1hdGgubWF4KEwsSVtydCozKzFdKSx6PU1hdGgubWluKHosSVtydCozKzJdKSxqPU1hdGgubWF4KGosSVtydCozKzJdKTtsZXQgaz1vP28uc3ViYXJyYXkoMCx3KjMpOnZvaWQgMCxxO2lmKGgoaykpe2xldCBydD1uZXcgQmxvYihba10se3R5cGU6ImFwcGxpY2F0aW9uL2JpbmFyeSJ9KTtxPVVSTC5jcmVhdGVPYmplY3RVUkwocnQpfWxldCBXPXI/ci5zdWJhcnJheSgwLHcqMik6dm9pZCAwLFI7aWYoaChXKSl7bGV0IHJ0PW5ldyBCbG9iKFtXXSx7dHlwZToiYXBwbGljYXRpb24vYmluYXJ5In0pO1I9VVJMLmNyZWF0ZU9iamVjdFVSTChydCl9bGV0IG50PWgoaSk/bzgoaS5zdWJhcnJheSgwLHcqNCkpOnZvaWQgMCxhdDtpZihoKG50KSl7bGV0IHJ0PW5ldyBCbG9iKFtudF0se3R5cGU6ImFwcGxpY2F0aW9uL2JpbmFyeSJ9KTthdD1VUkwuY3JlYXRlT2JqZWN0VVJMKHJ0KX1sZXQgbHQ9aChDKT9DLnN1YmFycmF5KDAsdyk6dm9pZCAwLGh0O2lmKGgobHQpKXtsZXQgcnQ9bmV3IEJsb2IoW2x0XSx7dHlwZToiYXBwbGljYXRpb24vYmluYXJ5In0pO2h0PVVSTC5jcmVhdGVPYmplY3RVUkwocnQpfWxldCBvdD1oKEMpP25ldyBGbG9hdDMyQXJyYXkoTSk6dm9pZCAwLFB0O2lmKGgob3QpKXtmb3IobGV0IEN0PTA7Q3Q8b3QubGVuZ3RoOysrQ3Qpb3RbQ3RdPUN0O2xldCBydD1uZXcgQmxvYihbb3RdLHt0eXBlOiJhcHBsaWNhdGlvbi9iaW5hcnkifSk7UHQ9VVJMLmNyZWF0ZU9iamVjdFVSTChydCl9bGV0IHl0PXt9LEV0PXt9O3l0LlBPU0lUSU9OPWwubGVuZ3RoLHUucHVzaCh7dXJpOkIsYnl0ZUxlbmd0aDpJLmJ5dGVMZW5ndGh9KSxjLnB1c2goe2J1ZmZlcjp1Lmxlbmd0aC0xLGJ5dGVPZmZzZXQ6MCxieXRlTGVuZ3RoOkkuYnl0ZUxlbmd0aCx0YXJnZXQ6MzQ5NjJ9KSxsLnB1c2goe2J1ZmZlclZpZXc6Yy5sZW5ndGgtMSxieXRlT2Zmc2V0OjAsY29tcG9uZW50VHlwZTo1MTI2LGNvdW50OkkubGVuZ3RoLzMsdHlwZToiVkVDMyIsbWF4OltBLHgsel0sbWluOltTLEwsal19KSxoKHEpJiYoeXQuTk9STUFMPWwubGVuZ3RoLHUucHVzaCh7dXJpOnEsYnl0ZUxlbmd0aDprLmJ5dGVMZW5ndGh9KSxjLnB1c2goe2J1ZmZlcjp1Lmxlbmd0aC0xLGJ5dGVPZmZzZXQ6MCxieXRlTGVuZ3RoOmsuYnl0ZUxlbmd0aCx0YXJnZXQ6MzQ5NjJ9KSxsLnB1c2goe2J1ZmZlclZpZXc6Yy5sZW5ndGgtMSxieXRlT2Zmc2V0OjAsY29tcG9uZW50VHlwZTo1MTI2LGNvdW50OmsubGVuZ3RoLzMsdHlwZToiVkVDMyJ9KSksaChSKSYmKHl0LlRFWENPT1JEXzA9bC5sZW5ndGgsdS5wdXNoKHt1cmk6UixieXRlTGVuZ3RoOlcuYnl0ZUxlbmd0aH0pLGMucHVzaCh7YnVmZmVyOnUubGVuZ3RoLTEsYnl0ZU9mZnNldDowLGJ5dGVMZW5ndGg6Vy5ieXRlTGVuZ3RoLHRhcmdldDozNDk2Mn0pLGwucHVzaCh7YnVmZmVyVmlldzpjLmxlbmd0aC0xLGJ5dGVPZmZzZXQ6MCxjb21wb25lbnRUeXBlOjUxMjYsY291bnQ6Vy5sZW5ndGgvMix0eXBlOiJWRUMyIn0pKSxoKGF0KSYmKHl0LkNPTE9SXzA9bC5sZW5ndGgsdS5wdXNoKHt1cmk6YXQsYnl0ZUxlbmd0aDpudC5ieXRlTGVuZ3RofSksYy5wdXNoKHtidWZmZXI6dS5sZW5ndGgtMSxieXRlT2Zmc2V0OjAsYnl0ZUxlbmd0aDpudC5ieXRlTGVuZ3RoLHRhcmdldDozNDk2Mn0pLGwucHVzaCh7YnVmZmVyVmlldzpjLmxlbmd0aC0xLGJ5dGVPZmZzZXQ6MCxjb21wb25lbnRUeXBlOjUxMjYsY291bnQ6bnQubGVuZ3RoLzQsdHlwZToiVkVDNCJ9KSksaChodCkmJih5dC5fRkVBVFVSRV9JRF8wPWwubGVuZ3RoLHUucHVzaCh7dXJpOmh0LGJ5dGVMZW5ndGg6bHQuYnl0ZUxlbmd0aH0pLGMucHVzaCh7YnVmZmVyOnUubGVuZ3RoLTEsYnl0ZU9mZnNldDowLGJ5dGVMZW5ndGg6bHQuYnl0ZUxlbmd0aCx0YXJnZXQ6MzQ5NjN9KSxsLnB1c2goe2J1ZmZlclZpZXc6Yy5sZW5ndGgtMSxieXRlT2Zmc2V0OjAsY29tcG9uZW50VHlwZTo1MTI2LGNvdW50Omx0Lmxlbmd0aCx0eXBlOiJTQ0FMQVIifSksRXQuRVhUX21lc2hfZmVhdHVyZXM9e2ZlYXR1cmVJZHM6W3thdHRyaWJ1dGU6MCxwcm9wZXJ0eVRhYmxlOjAsZmVhdHVyZUNvdW50Ok19XX0sZy5wdXNoKCJFWFRfbWVzaF9mZWF0dXJlcyIpKSxoKFB0KSYmKHUucHVzaCh7dXJpOlB0LGJ5dGVMZW5ndGg6b3QuYnl0ZUxlbmd0aH0pLGMucHVzaCh7YnVmZmVyOnUubGVuZ3RoLTEsYnl0ZU9mZnNldDowLGJ5dGVMZW5ndGg6b3QuYnl0ZUxlbmd0aCx0YXJnZXQ6MzQ5NjN9KSxfLkVYVF9zdHJ1Y3R1cmFsX21ldGFkYXRhPXtzY2hlbWE6e2lkOiJpM3MtbWV0YWRhdGEtc2NoZW1hLTAwMSIsbmFtZToiSTNTIG1ldGFkYXRhIHNjaGVtYSAwMDEiLGRlc2NyaXB0aW9uOiJUaGUgc2NoZW1hIGZvciBJM1MgbWV0YWRhdGEiLHZlcnNpb246IjEuMCIsY2xhc3Nlczp7ZmVhdHVyZTp7bmFtZToiZmVhdHVyZSIsZGVzY3JpcHRpb246IkZlYXR1cmUgbWV0YWRhdGEiLHByb3BlcnRpZXM6e2luZGV4OntkZXNjcmlwdGlvbjoiVGhlIGZlYXR1cmUgaW5kZXgiLHR5cGU6IlNDQUxBUiIsY29tcG9uZW50VHlwZToiRkxPQVQzMiIscmVxdWlyZWQ6ITB9fX19fSxwcm9wZXJ0eVRhYmxlczpbe25hbWU6ImZlYXR1cmUtaW5kaWNlcy1tYXBwaW5nIixjbGFzczoiZmVhdHVyZSIsY291bnQ6TSxwcm9wZXJ0aWVzOntpbmRleDp7dmFsdWVzOmMubGVuZ3RoLTF9fX1dfSxnLnB1c2goIkVYVF9zdHJ1Y3R1cmFsX21ldGFkYXRhIikpLGgoTikmJih1LnB1c2goe3VyaTpOLGJ5dGVMZW5ndGg6Ri5ieXRlTGVuZ3RofSksYy5wdXNoKHtidWZmZXI6dS5sZW5ndGgtMSxieXRlT2Zmc2V0OjAsYnl0ZUxlbmd0aDpGLmJ5dGVMZW5ndGgsdGFyZ2V0OjM0OTYzfSksbC5wdXNoKHtidWZmZXJWaWV3OmMubGVuZ3RoLTEsYnl0ZU9mZnNldDowLGNvbXBvbmVudFR5cGU6NTEyNSxjb3VudDpGLmxlbmd0aCx0eXBlOiJTQ0FMQVIifSksRXQuQ0VTSVVNX3ByaW1pdGl2ZV9vdXRsaW5lPXtpbmRpY2VzOmwubGVuZ3RoLTF9LGcucHVzaCgiQ0VTSVVNX3ByaW1pdGl2ZV9vdXRsaW5lIikpLHUucHVzaCh7dXJpOkUsYnl0ZUxlbmd0aDpiLmJ5dGVMZW5ndGh9KSxjLnB1c2goe2J1ZmZlcjp1Lmxlbmd0aC0xLGJ5dGVPZmZzZXQ6MCxieXRlTGVuZ3RoOmIuYnl0ZUxlbmd0aCx0YXJnZXQ6MzQ5NjN9KTtsZXQgZHQ9W107cmV0dXJuIFQ+MCYmKGwucHVzaCh7YnVmZmVyVmlldzpjLmxlbmd0aC0xLGJ5dGVPZmZzZXQ6MCxjb21wb25lbnRUeXBlOjUxMjUsY291bnQ6VCx0eXBlOiJTQ0FMQVIifSksZHQucHVzaCh7YXR0cmlidXRlczp5dCxpbmRpY2VzOmwubGVuZ3RoLTEsbWF0ZXJpYWw6ZHQubGVuZ3RoLGV4dGVuc2lvbnM6RXR9KSksVDx0JiYobC5wdXNoKHtidWZmZXJWaWV3OmMubGVuZ3RoLTEsYnl0ZU9mZnNldDo0KlQsY29tcG9uZW50VHlwZTo1MTI1LGNvdW50OnQtVCx0eXBlOiJTQ0FMQVIifSksZHQucHVzaCh7YXR0cmlidXRlczp5dCxpbmRpY2VzOmwubGVuZ3RoLTEsbWF0ZXJpYWw6ZHQubGVuZ3RoLGV4dGVuc2lvbnM6RXQsZXh0cmE6e2lzVHJhbnNwYXJlbnQ6ITB9fSkpLHAucHVzaCh7cHJpbWl0aXZlczpkdH0pLG0ucHVzaCgwKSxkLnB1c2goe21lc2g6MH0pLHtidWZmZXJzOnUsYnVmZmVyVmlld3M6YyxhY2Nlc3NvcnM6bCxtZXNoZXM6cCxub2RlczpkLG5vZGVzSW5TY2VuZTptLHJvb3RFeHRlbnNpb25zOl8sZXh0ZW5zaW9uc1VzZWQ6Z319ZnVuY3Rpb24gczgodCxlLG4sbyl7bGV0IHI9bmV3IFVpbnQ4QXJyYXkodCwwLDUpO3JldHVybiByWzBdPT09NjgmJnJbMV09PT04MiYmclsyXT09PTY1JiZyWzNdPT09NjcmJnJbNF09PT03OT9jOCh0LG4pOmY4KHQsZSxuLG8pfWZ1bmN0aW9uIGM4KHQpe2xldCBlPVhnLG49bmV3IGUuRGVjb2RlckJ1ZmZlcixvPW5ldyBVaW50OEFycmF5KHQpO24uSW5pdChvLG8ubGVuZ3RoKTtsZXQgcj1uZXcgZS5EZWNvZGVyLGk9ci5HZXRFbmNvZGVkR2VvbWV0cnlUeXBlKG4pLHM9bmV3IGUuTWV0YWRhdGFRdWVyaWVyLGYsdTtpPT09ZS5UUklBTkdVTEFSX01FU0gmJihmPW5ldyBlLk1lc2gsdT1yLkRlY29kZUJ1ZmZlclRvTWVzaChuLGYpKTtsZXQgYz17dmVydGV4Q291bnQ6WzBdLGZlYXR1cmVDb3VudDowfTtpZihoKHUpJiZ1Lm9rKCkmJmYucHRyIT09MCl7bGV0IGw9Zi5udW1fZmFjZXMoKSxwPWYubnVtX2F0dHJpYnV0ZXMoKSxkPWYubnVtX3BvaW50cygpO2MuaW5kaWNlcz1uZXcgVWludDMyQXJyYXkobCozKTtsZXQgbT1jLmluZGljZXM7Yy52ZXJ0ZXhDb3VudFswXT1kLGMuc2NhbGVfeD0xLGMuc2NhbGVfeT0xO2xldCBfPW5ldyBlLkRyYWNvSW50MzJBcnJheSgzKTtmb3IobGV0IGc9MDtnPGw7KytnKXIuR2V0RmFjZUZyb21NZXNoKGYsZyxfKSxtW2cqM109Xy5HZXRWYWx1ZSgwKSxtW2cqMysxXT1fLkdldFZhbHVlKDEpLG1bZyozKzJdPV8uR2V0VmFsdWUoMik7ZS5kZXN0cm95KF8pO2ZvcihsZXQgZz0wO2c8cDsrK2cpe2xldCBiPXIuR2V0QXR0cmlidXRlKGYsZyksVD1hOChlLHIsZixiLGQpLE89Yi5hdHRyaWJ1dGVfdHlwZSgpLEU9InVua25vd24iO089PT1lLlBPU0lUSU9OP0U9InBvc2l0aW9ucyI6Tz09PWUuTk9STUFMP0U9Im5vcm1hbHMiOk89PT1lLkNPTE9SP0U9ImNvbG9ycyI6Tz09PWUuVEVYX0NPT1JEJiYoRT0idXYwcyIpO2xldCB3PXIuR2V0QXR0cmlidXRlTWV0YWRhdGEoZixnKTtpZih3LnB0ciE9PTApe2xldCBDPXMuTnVtRW50cmllcyh3KTtmb3IobGV0IE09MDtNPEM7KytNKXtsZXQgTj1zLkdldEVudHJ5TmFtZSh3LE0pO049PT0iaTNzLXNjYWxlX3giP2Muc2NhbGVfeD1zLkdldERvdWJsZUVudHJ5KHcsImkzcy1zY2FsZV94Iik6Tj09PSJpM3Mtc2NhbGVfeSI/Yy5zY2FsZV95PXMuR2V0RG91YmxlRW50cnkodywiaTNzLXNjYWxlX3kiKTpOPT09Imkzcy1hdHRyaWJ1dGUtdHlwZSImJihFPXMuR2V0U3RyaW5nRW50cnkodywiaTNzLWF0dHJpYnV0ZS10eXBlIikpfX1oKGNbRV0pJiZjb25zb2xlLmxvZygiQXR0cmlidXRlIGFscmVhZHkgZXhpc3RzIixFKSxjW0VdPVQsRT09PSJmZWF0dXJlLWluZGV4IiYmYy5mZWF0dXJlQ291bnQrK31lLmRlc3Ryb3koZil9cmV0dXJuIGUuZGVzdHJveShzKSxlLmRlc3Ryb3kociksY31mdW5jdGlvbiBhOCh0LGUsbixvLHIpe2xldCBpPW8ubnVtX2NvbXBvbmVudHMoKSpyLHMsdT1bZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKCl7cz1uZXcgdC5EcmFjb0ludDhBcnJheShpKSxlLkdldEF0dHJpYnV0ZUludDhGb3JBbGxQb2ludHMobixvLHMpfHxjb25zb2xlLmVycm9yKCJCYWQgc3RyZWFtIik7bGV0IGw9bmV3IEludDhBcnJheShpKTtmb3IobGV0IHA9MDtwPGk7KytwKWxbcF09cy5HZXRWYWx1ZShwKTtyZXR1cm4gbH0sZnVuY3Rpb24oKXtzPW5ldyB0LkRyYWNvSW50OEFycmF5KGkpLGUuR2V0QXR0cmlidXRlVUludDhGb3JBbGxQb2ludHMobixvLHMpfHxjb25zb2xlLmVycm9yKCJCYWQgc3RyZWFtIik7bGV0IGw9bmV3IFVpbnQ4QXJyYXkoaSk7Zm9yKGxldCBwPTA7cDxpOysrcClsW3BdPXMuR2V0VmFsdWUocCk7cmV0dXJuIGx9LGZ1bmN0aW9uKCl7cz1uZXcgdC5EcmFjb0ludDE2QXJyYXkoaSksZS5HZXRBdHRyaWJ1dGVJbnQxNkZvckFsbFBvaW50cyhuLG8scyl8fGNvbnNvbGUuZXJyb3IoIkJhZCBzdHJlYW0iKTtsZXQgbD1uZXcgSW50MTZBcnJheShpKTtmb3IobGV0IHA9MDtwPGk7KytwKWxbcF09cy5HZXRWYWx1ZShwKTtyZXR1cm4gbH0sZnVuY3Rpb24oKXtzPW5ldyB0LkRyYWNvSW50MTZBcnJheShpKSxlLkdldEF0dHJpYnV0ZVVJbnQxNkZvckFsbFBvaW50cyhuLG8scyl8fGNvbnNvbGUuZXJyb3IoIkJhZCBzdHJlYW0iKTtsZXQgbD1uZXcgVWludDE2QXJyYXkoaSk7Zm9yKGxldCBwPTA7cDxpOysrcClsW3BdPXMuR2V0VmFsdWUocCk7cmV0dXJuIGx9LGZ1bmN0aW9uKCl7cz1uZXcgdC5EcmFjb0ludDMyQXJyYXkoaSksZS5HZXRBdHRyaWJ1dGVJbnQzMkZvckFsbFBvaW50cyhuLG8scyl8fGNvbnNvbGUuZXJyb3IoIkJhZCBzdHJlYW0iKTtsZXQgbD1uZXcgSW50MzJBcnJheShpKTtmb3IobGV0IHA9MDtwPGk7KytwKWxbcF09cy5HZXRWYWx1ZShwKTtyZXR1cm4gbH0sZnVuY3Rpb24oKXtzPW5ldyB0LkRyYWNvSW50MzJBcnJheShpKSxlLkdldEF0dHJpYnV0ZVVJbnQzMkZvckFsbFBvaW50cyhuLG8scyl8fGNvbnNvbGUuZXJyb3IoIkJhZCBzdHJlYW0iKTtsZXQgbD1uZXcgVWludDMyQXJyYXkoaSk7Zm9yKGxldCBwPTA7cDxpOysrcClsW3BdPXMuR2V0VmFsdWUocCk7cmV0dXJuIGx9LGZ1bmN0aW9uKCl7fSxmdW5jdGlvbigpe30sZnVuY3Rpb24oKXtzPW5ldyB0LkRyYWNvRmxvYXQzMkFycmF5KGkpLGUuR2V0QXR0cmlidXRlRmxvYXRGb3JBbGxQb2ludHMobixvLHMpfHxjb25zb2xlLmVycm9yKCJCYWQgc3RyZWFtIik7bGV0IGw9bmV3IEZsb2F0MzJBcnJheShpKTtmb3IobGV0IHA9MDtwPGk7KytwKWxbcF09cy5HZXRWYWx1ZShwKTtyZXR1cm4gbH0sZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKCl7cz1uZXcgdC5EcmFjb1VJbnQ4QXJyYXkoaSksZS5HZXRBdHRyaWJ1dGVVSW50OEZvckFsbFBvaW50cyhuLG8scyl8fGNvbnNvbGUuZXJyb3IoIkJhZCBzdHJlYW0iKTtsZXQgbD1uZXcgVWludDhBcnJheShpKTtmb3IobGV0IHA9MDtwPGk7KytwKWxbcF09cy5HZXRWYWx1ZShwKTtyZXR1cm4gbH1dW28uZGF0YV90eXBlKCldKCk7cmV0dXJuIGgocykmJnQuZGVzdHJveShzKSx1fWZ1bmN0aW9uIGY4KHQsZSxuLG8pe2xldCByPXt2ZXJ0ZXhDb3VudDowfSxpPW5ldyBEYXRhVmlldyh0KTt0cnl7bGV0IHM9MDtpZihyLnZlcnRleENvdW50PWkuZ2V0VWludDMyKHMsMSkscys9NCxyLmZlYXR1cmVDb3VudD1pLmdldFVpbnQzMihzLDEpLHMrPTQsaChuKSlmb3IobGV0IGY9MDtmPG4uYXR0cmlidXRlcy5sZW5ndGg7ZisrKWgoaG1bbi5hdHRyaWJ1dGVzW2ZdXSk/cz1obVtuLmF0dHJpYnV0ZXNbZl1dKHIsdCxzKTpjb25zb2xlLmVycm9yKCJVbmtub3duIGRlY29kZXIgZm9yIixuLmF0dHJpYnV0ZXNbZl0pO2Vsc2V7bGV0IGY9ZS5vcmRlcmluZyx1PWUuZmVhdHVyZUF0dHJpYnV0ZU9yZGVyO2gobykmJmgoby5nZW9tZXRyeURhdGEpJiZoKG8uZ2VvbWV0cnlEYXRhWzBdKSYmaChvLmdlb21ldHJ5RGF0YVswXS5wYXJhbXMpJiYoZj1PYmplY3Qua2V5cyhvLmdlb21ldHJ5RGF0YVswXS5wYXJhbXMudmVydGV4QXR0cmlidXRlcyksdT1PYmplY3Qua2V5cyhvLmdlb21ldHJ5RGF0YVswXS5wYXJhbXMuZmVhdHVyZUF0dHJpYnV0ZXMpKTtmb3IobGV0IGM9MDtjPGYubGVuZ3RoO2MrKyl7bGV0IGw9aG1bZltjXV07cz1sKHIsdCxzKX1mb3IobGV0IGM9MDtjPHUubGVuZ3RoO2MrKyl7bGV0IGw9aG1bdVtjXV07cz1sKHIsdCxzKX19fWNhdGNoKHMpe2NvbnNvbGUuZXJyb3Iocyl9cmV0dXJuIHIuc2NhbGVfeD0xLHIuc2NhbGVfeT0xLHJ9ZnVuY3Rpb24gdTgodCl7bGV0IGU9czgodC5iaW5hcnlEYXRhLHQuc2NoZW1hLHQuYnVmZmVySW5mbyx0LmZlYXR1cmVEYXRhKTtoKHQuZ2VvaWREYXRhTGlzdCkmJnQuZ2VvaWREYXRhTGlzdC5sZW5ndGg+MCYmSDYoZS52ZXJ0ZXhDb3VudCxlLnBvc2l0aW9ucyxlLnNjYWxlX3gsZS5zY2FsZV95LHQuY2FydG9ncmFwaGljQ2VudGVyLHQuZ2VvaWREYXRhTGlzdCwhMSkscTYoZS52ZXJ0ZXhDb3VudCxlLnBvc2l0aW9ucyxlLm5vcm1hbHMsdC5jYXJ0b2dyYXBoaWNDZW50ZXIsdC5jYXJ0ZXNpYW5DZW50ZXIsdC5wYXJlbnRSb3RhdGlvbix0LmVsbGlwc29pZFJhZGlpU3F1YXJlLGUuc2NhbGVfeCxlLnNjYWxlX3kpLGgoZS51djBzKSYmaChlWyJ1di1yZWdpb24iXSkmJks2KGUudmVydGV4Q291bnQsZS51djBzLGVbInV2LXJlZ2lvbiJdKTtsZXQgbjtpZihoKGVbImZlYXR1cmUtaW5kZXgiXSkpbj1lWyJmZWF0dXJlLWluZGV4Il07ZWxzZSBpZihoKGUuZmFjZVJhbmdlKSl7bj1uZXcgQXJyYXkoZS52ZXJ0ZXhDb3VudCk7Zm9yKGxldCBzPTA7czxlLmZhY2VSYW5nZS5sZW5ndGgtMTtzKz0yKXtsZXQgZj1zLzIsdT1lLmZhY2VSYW5nZVtzXSxjPWUuZmFjZVJhbmdlW3MrMV07Zm9yKGxldCBsPXU7bDw9YztsKyspbltsKjNdPWYsbltsKjMrMV09ZixuW2wqMysyXT1mfX1pZih0LmNhbGN1bGF0ZU5vcm1hbHMpe2xldCBzPXI4KGUudmVydGV4Q291bnQsZS5pbmRpY2VzLGUucG9zaXRpb25zLGUubm9ybWFscyxlLnV2MHMsZS5jb2xvcnMsbik7aChzLm5vcm1hbHMpJiYoZS5ub3JtYWxzPXMubm9ybWFscyxoKHMudmVydGV4Q291bnQpJiYoZS52ZXJ0ZXhDb3VudD1zLnZlcnRleENvdW50LGUuaW5kaWNlcz1zLmluZGljZXMsZS5wb3NpdGlvbnM9cy5wb3NpdGlvbnMsZS51djBzPXMudXYwcyxlLmNvbG9ycz1zLmNvbG9ycyxuPXMuZmVhdHVyZUluZGV4KSl9bGV0IG89aTgoZS52ZXJ0ZXhDb3VudCxlLmluZGljZXMsZS5wb3NpdGlvbnMsZS5ub3JtYWxzLGUudXYwcyxlLmNvbG9ycyxuLHQpLHI9e3Bvc2l0aW9uczplLnBvc2l0aW9ucyxpbmRpY2VzOmUuaW5kaWNlcyxmZWF0dXJlSW5kZXg6bixzb3VyY2VVUkw6dC51cmwsY2FydGVzaWFuQ2VudGVyOnQuY2FydGVzaWFuQ2VudGVyLHBhcmVudFJvdGF0aW9uOnQucGFyZW50Um90YXRpb259O3JldHVybiBvLl9jdXN0b21BdHRyaWJ1dGVzPXIse21lc2hEYXRhOm99fWFzeW5jIGZ1bmN0aW9uIGw4KHQsZSl7bGV0IG49dC53ZWJBc3NlbWJseUNvbmZpZztyZXR1cm4gaChuKSYmaChuLndhc21CaW5hcnlGaWxlKT9YZz1hd2FpdCgwLFdnLmRlZmF1bHQpKG4pOlhnPWF3YWl0KDAsV2cuZGVmYXVsdCkoKSwhMH1mdW5jdGlvbiBwOCh0LGUpe2xldCBuPXQud2ViQXNzZW1ibHlDb25maWc7cmV0dXJuIGgobik/bDgodCxlKTp1OCh0LGUpfXZhciBXZyxYZyxBaSxwbSxkbSxtbSxLZyxobSxkOCwkZz0kKCgpPT57c28oKTtmdCgpO2ljKCk7JHQoKTtJZSgpO0x0KCk7UGEoKTtCbigpO0t0KCk7V2c9ZHIoUmcoKSwxKTt4UygpO0FpPW5ldyBhLHBtPW5ldyBhLGRtPW5ldyBhO21tPW5ldyBhLEtnPW5ldyBhO2htPXtwb3NpdGlvbjpmdW5jdGlvbih0LGUsbil7bGV0IG89dC52ZXJ0ZXhDb3VudCozO3JldHVybiB0LnBvc2l0aW9ucz1uZXcgRmxvYXQzMkFycmF5KGUsbixvKSxuKz1vKjQsbn0sbm9ybWFsOmZ1bmN0aW9uKHQsZSxuKXtsZXQgbz10LnZlcnRleENvdW50KjM7cmV0dXJuIHQubm9ybWFscz1uZXcgRmxvYXQzMkFycmF5KGUsbixvKSxuKz1vKjQsbn0sdXYwOmZ1bmN0aW9uKHQsZSxuKXtsZXQgbz10LnZlcnRleENvdW50KjI7cmV0dXJuIHQudXYwcz1uZXcgRmxvYXQzMkFycmF5KGUsbixvKSxuKz1vKjQsbn0sY29sb3I6ZnVuY3Rpb24odCxlLG4pe2xldCBvPXQudmVydGV4Q291bnQqNDtyZXR1cm4gdC5jb2xvcnM9bmV3IFVpbnQ4QXJyYXkoZSxuLG8pLG4rPW8sbn0sZmVhdHVyZUlkOmZ1bmN0aW9uKHQsZSxuKXtsZXQgbz10LmZlYXR1cmVDb3VudDtyZXR1cm4gbis9byo4LG59LGlkOmZ1bmN0aW9uKHQsZSxuKXtsZXQgbz10LmZlYXR1cmVDb3VudDtyZXR1cm4gbis9byo4LG59LGZhY2VSYW5nZTpmdW5jdGlvbih0LGUsbil7bGV0IG89dC5mZWF0dXJlQ291bnQqMjtyZXR1cm4gdC5mYWNlUmFuZ2U9bmV3IFVpbnQzMkFycmF5KGUsbixvKSxuKz1vKjQsbn0sdXZSZWdpb246ZnVuY3Rpb24odCxlLG4pe2xldCBvPXQudmVydGV4Q291bnQqNDtyZXR1cm4gdFsidXYtcmVnaW9uIl09bmV3IFVpbnQxNkFycmF5KGUsbixvKSxuKz1vKjIsbn0scmVnaW9uOmZ1bmN0aW9uKHQsZSxuKXtsZXQgbz10LnZlcnRleENvdW50KjQ7cmV0dXJuIHRbInV2LXJlZ2lvbiJdPW5ldyBVaW50MTZBcnJheShlLG4sbyksbis9byoyLG59fTtkOD1RZShwOCl9KTt2YXIgU2UsbnIsWmc9JCgoKT0+eyRzKCk7U2U9e1VOU0lHTkVEX0JZVEU6SHQuVU5TSUdORURfQllURSxVTlNJR05FRF9TSE9SVDpIdC5VTlNJR05FRF9TSE9SVCxVTlNJR05FRF9JTlQ6SHQuVU5TSUdORURfSU5ULEZMT0FUOkh0LkZMT0FULEhBTEZfRkxPQVQ6SHQuSEFMRl9GTE9BVF9PRVMsVU5TSUdORURfSU5UXzI0Xzg6SHQuVU5TSUdORURfSU5UXzI0XzgsVU5TSUdORURfU0hPUlRfNF80XzRfNDpIdC5VTlNJR05FRF9TSE9SVF80XzRfNF80LFVOU0lHTkVEX1NIT1JUXzVfNV81XzE6SHQuVU5TSUdORURfU0hPUlRfNV81XzVfMSxVTlNJR05FRF9TSE9SVF81XzZfNTpIdC5VTlNJR05FRF9TSE9SVF81XzZfNX07U2UudG9XZWJHTENvbnN0YW50PWZ1bmN0aW9uKHQsZSl7c3dpdGNoKHQpe2Nhc2UgU2UuVU5TSUdORURfQllURTpyZXR1cm4gSHQuVU5TSUdORURfQllURTtjYXNlIFNlLlVOU0lHTkVEX1NIT1JUOnJldHVybiBIdC5VTlNJR05FRF9TSE9SVDtjYXNlIFNlLlVOU0lHTkVEX0lOVDpyZXR1cm4gSHQuVU5TSUdORURfSU5UO2Nhc2UgU2UuRkxPQVQ6cmV0dXJuIEh0LkZMT0FUO2Nhc2UgU2UuSEFMRl9GTE9BVDpyZXR1cm4gZS53ZWJnbDI/SHQuSEFMRl9GTE9BVDpIdC5IQUxGX0ZMT0FUX09FUztjYXNlIFNlLlVOU0lHTkVEX0lOVF8yNF84OnJldHVybiBIdC5VTlNJR05FRF9JTlRfMjRfODtjYXNlIFNlLlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6cmV0dXJuIEh0LlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ7Y2FzZSBTZS5VTlNJR05FRF9TSE9SVF81XzVfNV8xOnJldHVybiBIdC5VTlNJR05FRF9TSE9SVF81XzVfNV8xO2Nhc2UgU2UuVU5TSUdORURfU0hPUlRfNV82XzU6cmV0dXJuIFNlLlVOU0lHTkVEX1NIT1JUXzVfNl81fX07U2UuaXNQYWNrZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1TZS5VTlNJR05FRF9JTlRfMjRfOHx8dD09PVNlLlVOU0lHTkVEX1NIT1JUXzRfNF80XzR8fHQ9PT1TZS5VTlNJR05FRF9TSE9SVF81XzVfNV8xfHx0PT09U2UuVU5TSUdORURfU0hPUlRfNV82XzV9O1NlLnNpemVJbkJ5dGVzPWZ1bmN0aW9uKHQpe3N3aXRjaCh0KXtjYXNlIFNlLlVOU0lHTkVEX0JZVEU6cmV0dXJuIDE7Y2FzZSBTZS5VTlNJR05FRF9TSE9SVDpjYXNlIFNlLlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Y2FzZSBTZS5VTlNJR05FRF9TSE9SVF81XzVfNV8xOmNhc2UgU2UuVU5TSUdORURfU0hPUlRfNV82XzU6Y2FzZSBTZS5IQUxGX0ZMT0FUOnJldHVybiAyO2Nhc2UgU2UuVU5TSUdORURfSU5UOmNhc2UgU2UuRkxPQVQ6Y2FzZSBTZS5VTlNJR05FRF9JTlRfMjRfODpyZXR1cm4gNH19O1NlLnZhbGlkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09U2UuVU5TSUdORURfQllURXx8dD09PVNlLlVOU0lHTkVEX1NIT1JUfHx0PT09U2UuVU5TSUdORURfSU5UfHx0PT09U2UuRkxPQVR8fHQ9PT1TZS5IQUxGX0ZMT0FUfHx0PT09U2UuVU5TSUdORURfSU5UXzI0Xzh8fHQ9PT1TZS5VTlNJR05FRF9TSE9SVF80XzRfNF80fHx0PT09U2UuVU5TSUdORURfU0hPUlRfNV81XzVfMXx8dD09PVNlLlVOU0lHTkVEX1NIT1JUXzVfNl81fTtTZS5nZXRUeXBlZEFycmF5Q29uc3RydWN0b3I9ZnVuY3Rpb24odCl7bGV0IGU9U2Uuc2l6ZUluQnl0ZXModCk7cmV0dXJuIGU9PT1VaW50OEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UP1VpbnQ4QXJyYXk6ZT09PVVpbnQxNkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UP1VpbnQxNkFycmF5OmU9PT1GbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQmJnQ9PT1TZS5GTE9BVD9GbG9hdDMyQXJyYXk6VWludDMyQXJyYXl9O25yPU9iamVjdC5mcmVlemUoU2UpfSk7dmFyIFN0LGtuLE5TPSQoKCk9PntaZygpOyRzKCk7U3Q9e0RFUFRIX0NPTVBPTkVOVDpIdC5ERVBUSF9DT01QT05FTlQsREVQVEhfU1RFTkNJTDpIdC5ERVBUSF9TVEVOQ0lMLEFMUEhBOkh0LkFMUEhBLFJFRDpIdC5SRUQsUkc6SHQuUkcsUkdCOkh0LlJHQixSR0JBOkh0LlJHQkEsTFVNSU5BTkNFOkh0LkxVTUlOQU5DRSxMVU1JTkFOQ0VfQUxQSEE6SHQuTFVNSU5BTkNFX0FMUEhBLFJHQl9EWFQxOkh0LkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQsUkdCQV9EWFQxOkh0LkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhULFJHQkFfRFhUMzpIdC5DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVCxSR0JBX0RYVDU6SHQuQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQsUkdCX1BWUlRDXzRCUFBWMTpIdC5DT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HLFJHQl9QVlJUQ18yQlBQVjE6SHQuQ09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRyxSR0JBX1BWUlRDXzRCUFBWMTpIdC5DT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRyxSR0JBX1BWUlRDXzJCUFBWMTpIdC5DT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRyxSR0JBX0FTVEM6SHQuQ09NUFJFU1NFRF9SR0JBX0FTVENfNHg0X1dFQkdMLFJHQl9FVEMxOkh0LkNPTVBSRVNTRURfUkdCX0VUQzFfV0VCR0wsUkdCOF9FVEMyOkh0LkNPTVBSRVNTRURfUkdCOF9FVEMyLFJHQkE4X0VUQzJfRUFDOkh0LkNPTVBSRVNTRURfUkdCQThfRVRDMl9FQUMsUkdCQV9CQzc6SHQuQ09NUFJFU1NFRF9SR0JBX0JQVENfVU5PUk19O1N0LmNvbXBvbmVudHNMZW5ndGg9ZnVuY3Rpb24odCl7c3dpdGNoKHQpe2Nhc2UgU3QuUkdCOnJldHVybiAzO2Nhc2UgU3QuUkdCQTpyZXR1cm4gNDtjYXNlIFN0LkxVTUlOQU5DRV9BTFBIQTpjYXNlIFN0LlJHOnJldHVybiAyO2Nhc2UgU3QuQUxQSEE6Y2FzZSBTdC5SRUQ6Y2FzZSBTdC5MVU1JTkFOQ0U6cmV0dXJuIDE7ZGVmYXVsdDpyZXR1cm4gMX19O1N0LnZhbGlkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0PT09U3QuREVQVEhfQ09NUE9ORU5UfHx0PT09U3QuREVQVEhfU1RFTkNJTHx8dD09PVN0LkFMUEhBfHx0PT09U3QuUkVEfHx0PT09U3QuUkd8fHQ9PT1TdC5SR0J8fHQ9PT1TdC5SR0JBfHx0PT09U3QuTFVNSU5BTkNFfHx0PT09U3QuTFVNSU5BTkNFX0FMUEhBfHx0PT09U3QuUkdCX0RYVDF8fHQ9PT1TdC5SR0JBX0RYVDF8fHQ9PT1TdC5SR0JBX0RYVDN8fHQ9PT1TdC5SR0JBX0RYVDV8fHQ9PT1TdC5SR0JfUFZSVENfNEJQUFYxfHx0PT09U3QuUkdCX1BWUlRDXzJCUFBWMXx8dD09PVN0LlJHQkFfUFZSVENfNEJQUFYxfHx0PT09U3QuUkdCQV9QVlJUQ18yQlBQVjF8fHQ9PT1TdC5SR0JBX0FTVEN8fHQ9PT1TdC5SR0JfRVRDMXx8dD09PVN0LlJHQjhfRVRDMnx8dD09PVN0LlJHQkE4X0VUQzJfRUFDfHx0PT09U3QuUkdCQV9CQzd9O1N0LmlzQ29sb3JGb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1TdC5SRUR8fHQ9PT1TdC5BTFBIQXx8dD09PVN0LlJHQnx8dD09PVN0LlJHQkF8fHQ9PT1TdC5MVU1JTkFOQ0V8fHQ9PT1TdC5MVU1JTkFOQ0VfQUxQSEF9O1N0LmlzRGVwdGhGb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1TdC5ERVBUSF9DT01QT05FTlR8fHQ9PT1TdC5ERVBUSF9TVEVOQ0lMfTtTdC5pc0NvbXByZXNzZWRGb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1TdC5SR0JfRFhUMXx8dD09PVN0LlJHQkFfRFhUMXx8dD09PVN0LlJHQkFfRFhUM3x8dD09PVN0LlJHQkFfRFhUNXx8dD09PVN0LlJHQl9QVlJUQ180QlBQVjF8fHQ9PT1TdC5SR0JfUFZSVENfMkJQUFYxfHx0PT09U3QuUkdCQV9QVlJUQ180QlBQVjF8fHQ9PT1TdC5SR0JBX1BWUlRDXzJCUFBWMXx8dD09PVN0LlJHQkFfQVNUQ3x8dD09PVN0LlJHQl9FVEMxfHx0PT09U3QuUkdCOF9FVEMyfHx0PT09U3QuUkdCQThfRVRDMl9FQUN8fHQ9PT1TdC5SR0JBX0JDN307U3QuaXNEWFRGb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1TdC5SR0JfRFhUMXx8dD09PVN0LlJHQkFfRFhUMXx8dD09PVN0LlJHQkFfRFhUM3x8dD09PVN0LlJHQkFfRFhUNX07U3QuaXNQVlJUQ0Zvcm1hdD1mdW5jdGlvbih0KXtyZXR1cm4gdD09PVN0LlJHQl9QVlJUQ180QlBQVjF8fHQ9PT1TdC5SR0JfUFZSVENfMkJQUFYxfHx0PT09U3QuUkdCQV9QVlJUQ180QlBQVjF8fHQ9PT1TdC5SR0JBX1BWUlRDXzJCUFBWMX07U3QuaXNBU1RDRm9ybWF0PWZ1bmN0aW9uKHQpe3JldHVybiB0PT09U3QuUkdCQV9BU1RDfTtTdC5pc0VUQzFGb3JtYXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1TdC5SR0JfRVRDMX07U3QuaXNFVEMyRm9ybWF0PWZ1bmN0aW9uKHQpe3JldHVybiB0PT09U3QuUkdCOF9FVEMyfHx0PT09U3QuUkdCQThfRVRDMl9FQUN9O1N0LmlzQkM3Rm9ybWF0PWZ1bmN0aW9uKHQpe3JldHVybiB0PT09U3QuUkdCQV9CQzd9O1N0LmNvbXByZXNzZWRUZXh0dXJlU2l6ZUluQnl0ZXM9ZnVuY3Rpb24odCxlLG4pe3N3aXRjaCh0KXtjYXNlIFN0LlJHQl9EWFQxOmNhc2UgU3QuUkdCQV9EWFQxOmNhc2UgU3QuUkdCX0VUQzE6Y2FzZSBTdC5SR0I4X0VUQzI6cmV0dXJuIE1hdGguZmxvb3IoKGUrMykvNCkqTWF0aC5mbG9vcigobiszKS80KSo4O2Nhc2UgU3QuUkdCQV9EWFQzOmNhc2UgU3QuUkdCQV9EWFQ1OmNhc2UgU3QuUkdCQV9BU1RDOmNhc2UgU3QuUkdCQThfRVRDMl9FQUM6cmV0dXJuIE1hdGguZmxvb3IoKGUrMykvNCkqTWF0aC5mbG9vcigobiszKS80KSoxNjtjYXNlIFN0LlJHQl9QVlJUQ180QlBQVjE6Y2FzZSBTdC5SR0JBX1BWUlRDXzRCUFBWMTpyZXR1cm4gTWF0aC5mbG9vcigoTWF0aC5tYXgoZSw4KSpNYXRoLm1heChuLDgpKjQrNykvOCk7Y2FzZSBTdC5SR0JfUFZSVENfMkJQUFYxOmNhc2UgU3QuUkdCQV9QVlJUQ18yQlBQVjE6cmV0dXJuIE1hdGguZmxvb3IoKE1hdGgubWF4KGUsMTYpKk1hdGgubWF4KG4sOCkqMis3KS84KTtjYXNlIFN0LlJHQkFfQkM3OnJldHVybiBNYXRoLmNlaWwoZS80KSpNYXRoLmNlaWwobi80KSoxNjtkZWZhdWx0OnJldHVybiAwfX07U3QudGV4dHVyZVNpemVJbkJ5dGVzPWZ1bmN0aW9uKHQsZSxuLG8pe2xldCByPVN0LmNvbXBvbmVudHNMZW5ndGgodCk7cmV0dXJuIG5yLmlzUGFja2VkKGUpJiYocj0xKSxyKm5yLnNpemVJbkJ5dGVzKGUpKm4qb307U3QuYWxpZ25tZW50SW5CeXRlcz1mdW5jdGlvbih0LGUsbil7bGV0IG89U3QudGV4dHVyZVNpemVJbkJ5dGVzKHQsZSxuLDEpJTQ7cmV0dXJuIG89PT0wPzQ6bz09PTI/MjoxfTtTdC5jcmVhdGVUeXBlZEFycmF5PWZ1bmN0aW9uKHQsZSxuLG8pe2xldCByPW5yLmdldFR5cGVkQXJyYXlDb25zdHJ1Y3RvcihlKSxpPVN0LmNvbXBvbmVudHNMZW5ndGgodCkqbipvO3JldHVybiBuZXcgcihpKX07U3QuZmxpcFk9ZnVuY3Rpb24odCxlLG4sbyxyKXtpZihyPT09MSlyZXR1cm4gdDtsZXQgaT1TdC5jcmVhdGVUeXBlZEFycmF5KGUsbixvLHIpLHM9U3QuY29tcG9uZW50c0xlbmd0aChlKSxmPW8qcztmb3IobGV0IHU9MDt1PHI7Kyt1KXtsZXQgYz11Km8qcyxsPShyLXUtMSkqbypzO2ZvcihsZXQgcD0wO3A8ZjsrK3ApaVtsK3BdPXRbYytwXX1yZXR1cm4gaX07U3QudG9JbnRlcm5hbEZvcm1hdD1mdW5jdGlvbih0LGUsbil7aWYoIW4ud2ViZ2wyKXJldHVybiB0O2lmKHQ9PT1TdC5ERVBUSF9TVEVOQ0lMKXJldHVybiBIdC5ERVBUSDI0X1NURU5DSUw4O2lmKHQ9PT1TdC5ERVBUSF9DT01QT05FTlQpe2lmKGU9PT1uci5VTlNJR05FRF9TSE9SVClyZXR1cm4gSHQuREVQVEhfQ09NUE9ORU5UMTY7aWYoZT09PW5yLlVOU0lHTkVEX0lOVClyZXR1cm4gSHQuREVQVEhfQ09NUE9ORU5UMjR9aWYoZT09PW5yLkZMT0FUKXN3aXRjaCh0KXtjYXNlIFN0LlJHQkE6cmV0dXJuIEh0LlJHQkEzMkY7Y2FzZSBTdC5SR0I6cmV0dXJuIEh0LlJHQjMyRjtjYXNlIFN0LlJHOnJldHVybiBIdC5SRzMyRjtjYXNlIFN0LlJFRDpyZXR1cm4gSHQuUjMyRn1pZihlPT09bnIuSEFMRl9GTE9BVClzd2l0Y2godCl7Y2FzZSBTdC5SR0JBOnJldHVybiBIdC5SR0JBMTZGO2Nhc2UgU3QuUkdCOnJldHVybiBIdC5SR0IxNkY7Y2FzZSBTdC5SRzpyZXR1cm4gSHQuUkcxNkY7Y2FzZSBTdC5SRUQ6cmV0dXJuIEh0LlIxNkZ9cmV0dXJuIHR9O2tuPU9iamVjdC5mcmVlemUoU3QpfSk7dmFyIG04LHl1LElTPSQoKCk9PnttOD17VktfRk9STUFUX1VOREVGSU5FRDowLFZLX0ZPUk1BVF9SNEc0X1VOT1JNX1BBQ0s4OjEsVktfRk9STUFUX1I0RzRCNEE0X1VOT1JNX1BBQ0sxNjoyLFZLX0ZPUk1BVF9CNEc0UjRBNF9VTk9STV9QQUNLMTY6MyxWS19GT1JNQVRfUjVHNkI1X1VOT1JNX1BBQ0sxNjo0LFZLX0ZPUk1BVF9CNUc2UjVfVU5PUk1fUEFDSzE2OjUsVktfRk9STUFUX1I1RzVCNUExX1VOT1JNX1BBQ0sxNjo2LFZLX0ZPUk1BVF9CNUc1UjVBMV9VTk9STV9QQUNLMTY6NyxWS19GT1JNQVRfQTFSNUc1QjVfVU5PUk1fUEFDSzE2OjgsVktfRk9STUFUX1I4X1VOT1JNOjksVktfRk9STUFUX1I4X1NOT1JNOjEwLFZLX0ZPUk1BVF9SOF9VU0NBTEVEOjExLFZLX0ZPUk1BVF9SOF9TU0NBTEVEOjEyLFZLX0ZPUk1BVF9SOF9VSU5UOjEzLFZLX0ZPUk1BVF9SOF9TSU5UOjE0LFZLX0ZPUk1BVF9SOF9TUkdCOjE1LFZLX0ZPUk1BVF9SOEc4X1VOT1JNOjE2LFZLX0ZPUk1BVF9SOEc4X1NOT1JNOjE3LFZLX0ZPUk1BVF9SOEc4X1VTQ0FMRUQ6MTgsVktfRk9STUFUX1I4RzhfU1NDQUxFRDoxOSxWS19GT1JNQVRfUjhHOF9VSU5UOjIwLFZLX0ZPUk1BVF9SOEc4X1NJTlQ6MjEsVktfRk9STUFUX1I4RzhfU1JHQjoyMixWS19GT1JNQVRfUjhHOEI4X1VOT1JNOjIzLFZLX0ZPUk1BVF9SOEc4QjhfU05PUk06MjQsVktfRk9STUFUX1I4RzhCOF9VU0NBTEVEOjI1LFZLX0ZPUk1BVF9SOEc4QjhfU1NDQUxFRDoyNixWS19GT1JNQVRfUjhHOEI4X1VJTlQ6MjcsVktfRk9STUFUX1I4RzhCOF9TSU5UOjI4LFZLX0ZPUk1BVF9SOEc4QjhfU1JHQjoyOSxWS19GT1JNQVRfQjhHOFI4X1VOT1JNOjMwLFZLX0ZPUk1BVF9COEc4UjhfU05PUk06MzEsVktfRk9STUFUX0I4RzhSOF9VU0NBTEVEOjMyLFZLX0ZPUk1BVF9COEc4UjhfU1NDQUxFRDozMyxWS19GT1JNQVRfQjhHOFI4X1VJTlQ6MzQsVktfRk9STUFUX0I4RzhSOF9TSU5UOjM1LFZLX0ZPUk1BVF9COEc4UjhfU1JHQjozNixWS19GT1JNQVRfUjhHOEI4QThfVU5PUk06MzcsVktfRk9STUFUX1I4RzhCOEE4X1NOT1JNOjM4LFZLX0ZPUk1BVF9SOEc4QjhBOF9VU0NBTEVEOjM5LFZLX0ZPUk1BVF9SOEc4QjhBOF9TU0NBTEVEOjQwLFZLX0ZPUk1BVF9SOEc4QjhBOF9VSU5UOjQxLFZLX0ZPUk1BVF9SOEc4QjhBOF9TSU5UOjQyLFZLX0ZPUk1BVF9SOEc4QjhBOF9TUkdCOjQzLFZLX0ZPUk1BVF9COEc4UjhBOF9VTk9STTo0NCxWS19GT1JNQVRfQjhHOFI4QThfU05PUk06NDUsVktfRk9STUFUX0I4RzhSOEE4X1VTQ0FMRUQ6NDYsVktfRk9STUFUX0I4RzhSOEE4X1NTQ0FMRUQ6NDcsVktfRk9STUFUX0I4RzhSOEE4X1VJTlQ6NDgsVktfRk9STUFUX0I4RzhSOEE4X1NJTlQ6NDksVktfRk9STUFUX0I4RzhSOEE4X1NSR0I6NTAsVktfRk9STUFUX0E4QjhHOFI4X1VOT1JNX1BBQ0szMjo1MSxWS19GT1JNQVRfQThCOEc4UjhfU05PUk1fUEFDSzMyOjUyLFZLX0ZPUk1BVF9BOEI4RzhSOF9VU0NBTEVEX1BBQ0szMjo1MyxWS19GT1JNQVRfQThCOEc4UjhfU1NDQUxFRF9QQUNLMzI6NTQsVktfRk9STUFUX0E4QjhHOFI4X1VJTlRfUEFDSzMyOjU1LFZLX0ZPUk1BVF9BOEI4RzhSOF9TSU5UX1BBQ0szMjo1NixWS19GT1JNQVRfQThCOEc4UjhfU1JHQl9QQUNLMzI6NTcsVktfRk9STUFUX0EyUjEwRzEwQjEwX1VOT1JNX1BBQ0szMjo1OCxWS19GT1JNQVRfQTJSMTBHMTBCMTBfU05PUk1fUEFDSzMyOjU5LFZLX0ZPUk1BVF9BMlIxMEcxMEIxMF9VU0NBTEVEX1BBQ0szMjo2MCxWS19GT1JNQVRfQTJSMTBHMTBCMTBfU1NDQUxFRF9QQUNLMzI6NjEsVktfRk9STUFUX0EyUjEwRzEwQjEwX1VJTlRfUEFDSzMyOjYyLFZLX0ZPUk1BVF9BMlIxMEcxMEIxMF9TSU5UX1BBQ0szMjo2MyxWS19GT1JNQVRfQTJCMTBHMTBSMTBfVU5PUk1fUEFDSzMyOjY0LFZLX0ZPUk1BVF9BMkIxMEcxMFIxMF9TTk9STV9QQUNLMzI6NjUsVktfRk9STUFUX0EyQjEwRzEwUjEwX1VTQ0FMRURfUEFDSzMyOjY2LFZLX0ZPUk1BVF9BMkIxMEcxMFIxMF9TU0NBTEVEX1BBQ0szMjo2NyxWS19GT1JNQVRfQTJCMTBHMTBSMTBfVUlOVF9QQUNLMzI6NjgsVktfRk9STUFUX0EyQjEwRzEwUjEwX1NJTlRfUEFDSzMyOjY5LFZLX0ZPUk1BVF9SMTZfVU5PUk06NzAsVktfRk9STUFUX1IxNl9TTk9STTo3MSxWS19GT1JNQVRfUjE2X1VTQ0FMRUQ6NzIsVktfRk9STUFUX1IxNl9TU0NBTEVEOjczLFZLX0ZPUk1BVF9SMTZfVUlOVDo3NCxWS19GT1JNQVRfUjE2X1NJTlQ6NzUsVktfRk9STUFUX1IxNl9TRkxPQVQ6NzYsVktfRk9STUFUX1IxNkcxNl9VTk9STTo3NyxWS19GT1JNQVRfUjE2RzE2X1NOT1JNOjc4LFZLX0ZPUk1BVF9SMTZHMTZfVVNDQUxFRDo3OSxWS19GT1JNQVRfUjE2RzE2X1NTQ0FMRUQ6ODAsVktfRk9STUFUX1IxNkcxNl9VSU5UOjgxLFZLX0ZPUk1BVF9SMTZHMTZfU0lOVDo4MixWS19GT1JNQVRfUjE2RzE2X1NGTE9BVDo4MyxWS19GT1JNQVRfUjE2RzE2QjE2X1VOT1JNOjg0LFZLX0ZPUk1BVF9SMTZHMTZCMTZfU05PUk06ODUsVktfRk9STUFUX1IxNkcxNkIxNl9VU0NBTEVEOjg2LFZLX0ZPUk1BVF9SMTZHMTZCMTZfU1NDQUxFRDo4NyxWS19GT1JNQVRfUjE2RzE2QjE2X1VJTlQ6ODgsVktfRk9STUFUX1IxNkcxNkIxNl9TSU5UOjg5LFZLX0ZPUk1BVF9SMTZHMTZCMTZfU0ZMT0FUOjkwLFZLX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVU5PUk06OTEsVktfRk9STUFUX1IxNkcxNkIxNkExNl9TTk9STTo5MixWS19GT1JNQVRfUjE2RzE2QjE2QTE2X1VTQ0FMRUQ6OTMsVktfRk9STUFUX1IxNkcxNkIxNkExNl9TU0NBTEVEOjk0LFZLX0ZPUk1BVF9SMTZHMTZCMTZBMTZfVUlOVDo5NSxWS19GT1JNQVRfUjE2RzE2QjE2QTE2X1NJTlQ6OTYsVktfRk9STUFUX1IxNkcxNkIxNkExNl9TRkxPQVQ6OTcsVktfRk9STUFUX1IzMl9VSU5UOjk4LFZLX0ZPUk1BVF9SMzJfU0lOVDo5OSxWS19GT1JNQVRfUjMyX1NGTE9BVDoxMDAsVktfRk9STUFUX1IzMkczMl9VSU5UOjEwMSxWS19GT1JNQVRfUjMyRzMyX1NJTlQ6MTAyLFZLX0ZPUk1BVF9SMzJHMzJfU0ZMT0FUOjEwMyxWS19GT1JNQVRfUjMyRzMyQjMyX1VJTlQ6MTA0LFZLX0ZPUk1BVF9SMzJHMzJCMzJfU0lOVDoxMDUsVktfRk9STUFUX1IzMkczMkIzMl9TRkxPQVQ6MTA2LFZLX0ZPUk1BVF9SMzJHMzJCMzJBMzJfVUlOVDoxMDcsVktfRk9STUFUX1IzMkczMkIzMkEzMl9TSU5UOjEwOCxWS19GT1JNQVRfUjMyRzMyQjMyQTMyX1NGTE9BVDoxMDksVktfRk9STUFUX1I2NF9VSU5UOjExMCxWS19GT1JNQVRfUjY0X1NJTlQ6MTExLFZLX0ZPUk1BVF9SNjRfU0ZMT0FUOjExMixWS19GT1JNQVRfUjY0RzY0X1VJTlQ6MTEzLFZLX0ZPUk1BVF9SNjRHNjRfU0lOVDoxMTQsVktfRk9STUFUX1I2NEc2NF9TRkxPQVQ6MTE1LFZLX0ZPUk1BVF9SNjRHNjRCNjRfVUlOVDoxMTYsVktfRk9STUFUX1I2NEc2NEI2NF9TSU5UOjExNyxWS19GT1JNQVRfUjY0RzY0QjY0X1NGTE9BVDoxMTgsVktfRk9STUFUX1I2NEc2NEI2NEE2NF9VSU5UOjExOSxWS19GT1JNQVRfUjY0RzY0QjY0QTY0X1NJTlQ6MTIwLFZLX0ZPUk1BVF9SNjRHNjRCNjRBNjRfU0ZMT0FUOjEyMSxWS19GT1JNQVRfQjEwRzExUjExX1VGTE9BVF9QQUNLMzI6MTIyLFZLX0ZPUk1BVF9FNUI5RzlSOV9VRkxPQVRfUEFDSzMyOjEyMyxWS19GT1JNQVRfRDE2X1VOT1JNOjEyNCxWS19GT1JNQVRfWDhfRDI0X1VOT1JNX1BBQ0szMjoxMjUsVktfRk9STUFUX0QzMl9TRkxPQVQ6MTI2LFZLX0ZPUk1BVF9TOF9VSU5UOjEyNyxWS19GT1JNQVRfRDE2X1VOT1JNX1M4X1VJTlQ6MTI4LFZLX0ZPUk1BVF9EMjRfVU5PUk1fUzhfVUlOVDoxMjksVktfRk9STUFUX0QzMl9TRkxPQVRfUzhfVUlOVDoxMzAsVktfRk9STUFUX0JDMV9SR0JfVU5PUk1fQkxPQ0s6MTMxLFZLX0ZPUk1BVF9CQzFfUkdCX1NSR0JfQkxPQ0s6MTMyLFZLX0ZPUk1BVF9CQzFfUkdCQV9VTk9STV9CTE9DSzoxMzMsVktfRk9STUFUX0JDMV9SR0JBX1NSR0JfQkxPQ0s6MTM0LFZLX0ZPUk1BVF9CQzJfVU5PUk1fQkxPQ0s6MTM1LFZLX0ZPUk1BVF9CQzJfU1JHQl9CTE9DSzoxMzYsVktfRk9STUFUX0JDM19VTk9STV9CTE9DSzoxMzcsVktfRk9STUFUX0JDM19TUkdCX0JMT0NLOjEzOCxWS19GT1JNQVRfQkM0X1VOT1JNX0JMT0NLOjEzOSxWS19GT1JNQVRfQkM0X1NOT1JNX0JMT0NLOjE0MCxWS19GT1JNQVRfQkM1X1VOT1JNX0JMT0NLOjE0MSxWS19GT1JNQVRfQkM1X1NOT1JNX0JMT0NLOjE0MixWS19GT1JNQVRfQkM2SF9VRkxPQVRfQkxPQ0s6MTQzLFZLX0ZPUk1BVF9CQzZIX1NGTE9BVF9CTE9DSzoxNDQsVktfRk9STUFUX0JDN19VTk9STV9CTE9DSzoxNDUsVktfRk9STUFUX0JDN19TUkdCX0JMT0NLOjE0NixWS19GT1JNQVRfRVRDMl9SOEc4QjhfVU5PUk1fQkxPQ0s6MTQ3LFZLX0ZPUk1BVF9FVEMyX1I4RzhCOF9TUkdCX0JMT0NLOjE0OCxWS19GT1JNQVRfRVRDMl9SOEc4QjhBMV9VTk9STV9CTE9DSzoxNDksVktfRk9STUFUX0VUQzJfUjhHOEI4QTFfU1JHQl9CTE9DSzoxNTAsVktfRk9STUFUX0VUQzJfUjhHOEI4QThfVU5PUk1fQkxPQ0s6MTUxLFZLX0ZPUk1BVF9FVEMyX1I4RzhCOEE4X1NSR0JfQkxPQ0s6MTUyLFZLX0ZPUk1BVF9FQUNfUjExX1VOT1JNX0JMT0NLOjE1MyxWS19GT1JNQVRfRUFDX1IxMV9TTk9STV9CTE9DSzoxNTQsVktfRk9STUFUX0VBQ19SMTFHMTFfVU5PUk1fQkxPQ0s6MTU1LFZLX0ZPUk1BVF9FQUNfUjExRzExX1NOT1JNX0JMT0NLOjE1NixWS19GT1JNQVRfQVNUQ180eDRfVU5PUk1fQkxPQ0s6MTU3LFZLX0ZPUk1BVF9BU1RDXzR4NF9TUkdCX0JMT0NLOjE1OCxWS19GT1JNQVRfQVNUQ181eDRfVU5PUk1fQkxPQ0s6MTU5LFZLX0ZPUk1BVF9BU1RDXzV4NF9TUkdCX0JMT0NLOjE2MCxWS19GT1JNQVRfQVNUQ181eDVfVU5PUk1fQkxPQ0s6MTYxLFZLX0ZPUk1BVF9BU1RDXzV4NV9TUkdCX0JMT0NLOjE2MixWS19GT1JNQVRfQVNUQ182eDVfVU5PUk1fQkxPQ0s6MTYzLFZLX0ZPUk1BVF9BU1RDXzZ4NV9TUkdCX0JMT0NLOjE2NCxWS19GT1JNQVRfQVNUQ182eDZfVU5PUk1fQkxPQ0s6MTY1LFZLX0ZPUk1BVF9BU1RDXzZ4Nl9TUkdCX0JMT0NLOjE2NixWS19GT1JNQVRfQVNUQ184eDVfVU5PUk1fQkxPQ0s6MTY3LFZLX0ZPUk1BVF9BU1RDXzh4NV9TUkdCX0JMT0NLOjE2OCxWS19GT1JNQVRfQVNUQ184eDZfVU5PUk1fQkxPQ0s6MTY5LFZLX0ZPUk1BVF9BU1RDXzh4Nl9TUkdCX0JMT0NLOjE3MCxWS19GT1JNQVRfQVNUQ184eDhfVU5PUk1fQkxPQ0s6MTcxLFZLX0ZPUk1BVF9BU1RDXzh4OF9TUkdCX0JMT0NLOjE3MixWS19GT1JNQVRfQVNUQ18xMHg1X1VOT1JNX0JMT0NLOjE3MyxWS19GT1JNQVRfQVNUQ18xMHg1X1NSR0JfQkxPQ0s6MTc0LFZLX0ZPUk1BVF9BU1RDXzEweDZfVU5PUk1fQkxPQ0s6MTc1LFZLX0ZPUk1BVF9BU1RDXzEweDZfU1JHQl9CTE9DSzoxNzYsVktfRk9STUFUX0FTVENfMTB4OF9VTk9STV9CTE9DSzoxNzcsVktfRk9STUFUX0FTVENfMTB4OF9TUkdCX0JMT0NLOjE3OCxWS19GT1JNQVRfQVNUQ18xMHgxMF9VTk9STV9CTE9DSzoxNzksVktfRk9STUFUX0FTVENfMTB4MTBfU1JHQl9CTE9DSzoxODAsVktfRk9STUFUX0FTVENfMTJ4MTBfVU5PUk1fQkxPQ0s6MTgxLFZLX0ZPUk1BVF9BU1RDXzEyeDEwX1NSR0JfQkxPQ0s6MTgyLFZLX0ZPUk1BVF9BU1RDXzEyeDEyX1VOT1JNX0JMT0NLOjE4MyxWS19GT1JNQVRfQVNUQ18xMngxMl9TUkdCX0JMT0NLOjE4NCxWS19GT1JNQVRfRzhCOEc4UjhfNDIyX1VOT1JNOjEwMDAxNTZlMyxWS19GT1JNQVRfQjhHOFI4RzhfNDIyX1VOT1JNOjEwMDAxNTYwMDEsVktfRk9STUFUX0c4X0I4X1I4XzNQTEFORV80MjBfVU5PUk06MTAwMDE1NjAwMixWS19GT1JNQVRfRzhfQjhSOF8yUExBTkVfNDIwX1VOT1JNOjEwMDAxNTYwMDMsVktfRk9STUFUX0c4X0I4X1I4XzNQTEFORV80MjJfVU5PUk06MTAwMDE1NjAwNCxWS19GT1JNQVRfRzhfQjhSOF8yUExBTkVfNDIyX1VOT1JNOjEwMDAxNTYwMDUsVktfRk9STUFUX0c4X0I4X1I4XzNQTEFORV80NDRfVU5PUk06MTAwMDE1NjAwNixWS19GT1JNQVRfUjEwWDZfVU5PUk1fUEFDSzE2OjEwMDAxNTYwMDcsVktfRk9STUFUX1IxMFg2RzEwWDZfVU5PUk1fMlBBQ0sxNjoxMDAwMTU2MDA4LFZLX0ZPUk1BVF9SMTBYNkcxMFg2QjEwWDZBMTBYNl9VTk9STV80UEFDSzE2OjEwMDAxNTYwMDksVktfRk9STUFUX0cxMFg2QjEwWDZHMTBYNlIxMFg2XzQyMl9VTk9STV80UEFDSzE2OjEwMDAxNTYwMTAsVktfRk9STUFUX0IxMFg2RzEwWDZSMTBYNkcxMFg2XzQyMl9VTk9STV80UEFDSzE2OjEwMDAxNTYwMTEsVktfRk9STUFUX0cxMFg2X0IxMFg2X1IxMFg2XzNQTEFORV80MjBfVU5PUk1fM1BBQ0sxNjoxMDAwMTU2MDEyLFZLX0ZPUk1BVF9HMTBYNl9CMTBYNlIxMFg2XzJQTEFORV80MjBfVU5PUk1fM1BBQ0sxNjoxMDAwMTU2MDEzLFZLX0ZPUk1BVF9HMTBYNl9CMTBYNl9SMTBYNl8zUExBTkVfNDIyX1VOT1JNXzNQQUNLMTY6MTAwMDE1NjAxNCxWS19GT1JNQVRfRzEwWDZfQjEwWDZSMTBYNl8yUExBTkVfNDIyX1VOT1JNXzNQQUNLMTY6MTAwMDE1NjAxNSxWS19GT1JNQVRfRzEwWDZfQjEwWDZfUjEwWDZfM1BMQU5FXzQ0NF9VTk9STV8zUEFDSzE2OjEwMDAxNTYwMTYsVktfRk9STUFUX1IxMlg0X1VOT1JNX1BBQ0sxNjoxMDAwMTU2MDE3LFZLX0ZPUk1BVF9SMTJYNEcxMlg0X1VOT1JNXzJQQUNLMTY6MTAwMDE1NjAxOCxWS19GT1JNQVRfUjEyWDRHMTJYNEIxMlg0QTEyWDRfVU5PUk1fNFBBQ0sxNjoxMDAwMTU2MDE5LFZLX0ZPUk1BVF9HMTJYNEIxMlg0RzEyWDRSMTJYNF80MjJfVU5PUk1fNFBBQ0sxNjoxMDAwMTU2MDIwLFZLX0ZPUk1BVF9CMTJYNEcxMlg0UjEyWDRHMTJYNF80MjJfVU5PUk1fNFBBQ0sxNjoxMDAwMTU2MDIxLFZLX0ZPUk1BVF9HMTJYNF9CMTJYNF9SMTJYNF8zUExBTkVfNDIwX1VOT1JNXzNQQUNLMTY6MTAwMDE1NjAyMixWS19GT1JNQVRfRzEyWDRfQjEyWDRSMTJYNF8yUExBTkVfNDIwX1VOT1JNXzNQQUNLMTY6MTAwMDE1NjAyMyxWS19GT1JNQVRfRzEyWDRfQjEyWDRfUjEyWDRfM1BMQU5FXzQyMl9VTk9STV8zUEFDSzE2OjEwMDAxNTYwMjQsVktfRk9STUFUX0cxMlg0X0IxMlg0UjEyWDRfMlBMQU5FXzQyMl9VTk9STV8zUEFDSzE2OjEwMDAxNTYwMjUsVktfRk9STUFUX0cxMlg0X0IxMlg0X1IxMlg0XzNQTEFORV80NDRfVU5PUk1fM1BBQ0sxNjoxMDAwMTU2MDI2LFZLX0ZPUk1BVF9HMTZCMTZHMTZSMTZfNDIyX1VOT1JNOjEwMDAxNTYwMjcsVktfRk9STUFUX0IxNkcxNlIxNkcxNl80MjJfVU5PUk06MTAwMDE1NjAyOCxWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQyMF9VTk9STToxMDAwMTU2MDI5LFZLX0ZPUk1BVF9HMTZfQjE2UjE2XzJQTEFORV80MjBfVU5PUk06MTAwMDE1NjAzMCxWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQyMl9VTk9STToxMDAwMTU2MDMxLFZLX0ZPUk1BVF9HMTZfQjE2UjE2XzJQTEFORV80MjJfVU5PUk06MTAwMDE1NjAzMixWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQ0NF9VTk9STToxMDAwMTU2MDMzLFZLX0ZPUk1BVF9QVlJUQzFfMkJQUF9VTk9STV9CTE9DS19JTUc6MTAwMDA1NGUzLFZLX0ZPUk1BVF9QVlJUQzFfNEJQUF9VTk9STV9CTE9DS19JTUc6MTAwMDA1NDAwMSxWS19GT1JNQVRfUFZSVEMyXzJCUFBfVU5PUk1fQkxPQ0tfSU1HOjEwMDAwNTQwMDIsVktfRk9STUFUX1BWUlRDMl80QlBQX1VOT1JNX0JMT0NLX0lNRzoxMDAwMDU0MDAzLFZLX0ZPUk1BVF9QVlJUQzFfMkJQUF9TUkdCX0JMT0NLX0lNRzoxMDAwMDU0MDA0LFZLX0ZPUk1BVF9QVlJUQzFfNEJQUF9TUkdCX0JMT0NLX0lNRzoxMDAwMDU0MDA1LFZLX0ZPUk1BVF9QVlJUQzJfMkJQUF9TUkdCX0JMT0NLX0lNRzoxMDAwMDU0MDA2LFZLX0ZPUk1BVF9QVlJUQzJfNEJQUF9TUkdCX0JMT0NLX0lNRzoxMDAwMDU0MDA3LFZLX0ZPUk1BVF9BU1RDXzR4NF9TRkxPQVRfQkxPQ0tfRVhUOjEwMDAwNjZlMyxWS19GT1JNQVRfQVNUQ181eDRfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDAxLFZLX0ZPUk1BVF9BU1RDXzV4NV9TRkxPQVRfQkxPQ0tfRVhUOjEwMDAwNjYwMDIsVktfRk9STUFUX0FTVENfNng1X1NGTE9BVF9CTE9DS19FWFQ6MTAwMDA2NjAwMyxWS19GT1JNQVRfQVNUQ182eDZfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDA0LFZLX0ZPUk1BVF9BU1RDXzh4NV9TRkxPQVRfQkxPQ0tfRVhUOjEwMDAwNjYwMDUsVktfRk9STUFUX0FTVENfOHg2X1NGTE9BVF9CTE9DS19FWFQ6MTAwMDA2NjAwNixWS19GT1JNQVRfQVNUQ184eDhfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDA3LFZLX0ZPUk1BVF9BU1RDXzEweDVfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDA4LFZLX0ZPUk1BVF9BU1RDXzEweDZfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDA5LFZLX0ZPUk1BVF9BU1RDXzEweDhfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDEwLFZLX0ZPUk1BVF9BU1RDXzEweDEwX1NGTE9BVF9CTE9DS19FWFQ6MTAwMDA2NjAxMSxWS19GT1JNQVRfQVNUQ18xMngxMF9TRkxPQVRfQkxPQ0tfRVhUOjEwMDAwNjYwMTIsVktfRk9STUFUX0FTVENfMTJ4MTJfU0ZMT0FUX0JMT0NLX0VYVDoxMDAwMDY2MDEzLFZLX0ZPUk1BVF9HOEI4RzhSOF80MjJfVU5PUk1fS0hSOjEwMDAxNTZlMyxWS19GT1JNQVRfQjhHOFI4RzhfNDIyX1VOT1JNX0tIUjoxMDAwMTU2MDAxLFZLX0ZPUk1BVF9HOF9COF9SOF8zUExBTkVfNDIwX1VOT1JNX0tIUjoxMDAwMTU2MDAyLFZLX0ZPUk1BVF9HOF9COFI4XzJQTEFORV80MjBfVU5PUk1fS0hSOjEwMDAxNTYwMDMsVktfRk9STUFUX0c4X0I4X1I4XzNQTEFORV80MjJfVU5PUk1fS0hSOjEwMDAxNTYwMDQsVktfRk9STUFUX0c4X0I4UjhfMlBMQU5FXzQyMl9VTk9STV9LSFI6MTAwMDE1NjAwNSxWS19GT1JNQVRfRzhfQjhfUjhfM1BMQU5FXzQ0NF9VTk9STV9LSFI6MTAwMDE1NjAwNixWS19GT1JNQVRfUjEwWDZfVU5PUk1fUEFDSzE2X0tIUjoxMDAwMTU2MDA3LFZLX0ZPUk1BVF9SMTBYNkcxMFg2X1VOT1JNXzJQQUNLMTZfS0hSOjEwMDAxNTYwMDgsVktfRk9STUFUX1IxMFg2RzEwWDZCMTBYNkExMFg2X1VOT1JNXzRQQUNLMTZfS0hSOjEwMDAxNTYwMDksVktfRk9STUFUX0cxMFg2QjEwWDZHMTBYNlIxMFg2XzQyMl9VTk9STV80UEFDSzE2X0tIUjoxMDAwMTU2MDEwLFZLX0ZPUk1BVF9CMTBYNkcxMFg2UjEwWDZHMTBYNl80MjJfVU5PUk1fNFBBQ0sxNl9LSFI6MTAwMDE1NjAxMSxWS19GT1JNQVRfRzEwWDZfQjEwWDZfUjEwWDZfM1BMQU5FXzQyMF9VTk9STV8zUEFDSzE2X0tIUjoxMDAwMTU2MDEyLFZLX0ZPUk1BVF9HMTBYNl9CMTBYNlIxMFg2XzJQTEFORV80MjBfVU5PUk1fM1BBQ0sxNl9LSFI6MTAwMDE1NjAxMyxWS19GT1JNQVRfRzEwWDZfQjEwWDZfUjEwWDZfM1BMQU5FXzQyMl9VTk9STV8zUEFDSzE2X0tIUjoxMDAwMTU2MDE0LFZLX0ZPUk1BVF9HMTBYNl9CMTBYNlIxMFg2XzJQTEFORV80MjJfVU5PUk1fM1BBQ0sxNl9LSFI6MTAwMDE1NjAxNSxWS19GT1JNQVRfRzEwWDZfQjEwWDZfUjEwWDZfM1BMQU5FXzQ0NF9VTk9STV8zUEFDSzE2X0tIUjoxMDAwMTU2MDE2LFZLX0ZPUk1BVF9SMTJYNF9VTk9STV9QQUNLMTZfS0hSOjEwMDAxNTYwMTcsVktfRk9STUFUX1IxMlg0RzEyWDRfVU5PUk1fMlBBQ0sxNl9LSFI6MTAwMDE1NjAxOCxWS19GT1JNQVRfUjEyWDRHMTJYNEIxMlg0QTEyWDRfVU5PUk1fNFBBQ0sxNl9LSFI6MTAwMDE1NjAxOSxWS19GT1JNQVRfRzEyWDRCMTJYNEcxMlg0UjEyWDRfNDIyX1VOT1JNXzRQQUNLMTZfS0hSOjEwMDAxNTYwMjAsVktfRk9STUFUX0IxMlg0RzEyWDRSMTJYNEcxMlg0XzQyMl9VTk9STV80UEFDSzE2X0tIUjoxMDAwMTU2MDIxLFZLX0ZPUk1BVF9HMTJYNF9CMTJYNF9SMTJYNF8zUExBTkVfNDIwX1VOT1JNXzNQQUNLMTZfS0hSOjEwMDAxNTYwMjIsVktfRk9STUFUX0cxMlg0X0IxMlg0UjEyWDRfMlBMQU5FXzQyMF9VTk9STV8zUEFDSzE2X0tIUjoxMDAwMTU2MDIzLFZLX0ZPUk1BVF9HMTJYNF9CMTJYNF9SMTJYNF8zUExBTkVfNDIyX1VOT1JNXzNQQUNLMTZfS0hSOjEwMDAxNTYwMjQsVktfRk9STUFUX0cxMlg0X0IxMlg0UjEyWDRfMlBMQU5FXzQyMl9VTk9STV8zUEFDSzE2X0tIUjoxMDAwMTU2MDI1LFZLX0ZPUk1BVF9HMTJYNF9CMTJYNF9SMTJYNF8zUExBTkVfNDQ0X1VOT1JNXzNQQUNLMTZfS0hSOjEwMDAxNTYwMjYsVktfRk9STUFUX0cxNkIxNkcxNlIxNl80MjJfVU5PUk1fS0hSOjEwMDAxNTYwMjcsVktfRk9STUFUX0IxNkcxNlIxNkcxNl80MjJfVU5PUk1fS0hSOjEwMDAxNTYwMjgsVktfRk9STUFUX0cxNl9CMTZfUjE2XzNQTEFORV80MjBfVU5PUk1fS0hSOjEwMDAxNTYwMjksVktfRk9STUFUX0cxNl9CMTZSMTZfMlBMQU5FXzQyMF9VTk9STV9LSFI6MTAwMDE1NjAzMCxWS19GT1JNQVRfRzE2X0IxNl9SMTZfM1BMQU5FXzQyMl9VTk9STV9LSFI6MTAwMDE1NjAzMSxWS19GT1JNQVRfRzE2X0IxNlIxNl8yUExBTkVfNDIyX1VOT1JNX0tIUjoxMDAwMTU2MDMyLFZLX0ZPUk1BVF9HMTZfQjE2X1IxNl8zUExBTkVfNDQ0X1VOT1JNX0tIUjoxMDAwMTU2MDMzfSx5dT1PYmplY3QuZnJlZXplKG04KX0pO2Z1bmN0aW9uIGg4KCl7cmV0dXJue3ZrRm9ybWF0OjAsdHlwZVNpemU6MSxwaXhlbFdpZHRoOjAscGl4ZWxIZWlnaHQ6MCxwaXhlbERlcHRoOjAsbGF5ZXJDb3VudDowLGZhY2VDb3VudDoxLHN1cGVyY29tcHJlc3Npb25TY2hlbWU6MCxsZXZlbHM6W10sZGF0YUZvcm1hdERlc2NyaXB0b3I6W3t2ZW5kb3JJZDowLGRlc2NyaXB0b3JUeXBlOjAsdmVyc2lvbk51bWJlcjoyLGNvbG9yTW9kZWw6MCxjb2xvclByaW1hcmllczoxLHRyYW5zZmVyRnVuY3Rpb246MixmbGFnczowLHRleGVsQmxvY2tEaW1lbnNpb246WzAsMCwwLDBdLGJ5dGVzUGxhbmU6WzAsMCwwLDAsMCwwLDAsMF0sc2FtcGxlczpbXX1dLGtleVZhbHVlOnt9LGdsb2JhbERhdGE6bnVsbH19ZnVuY3Rpb24gdlModCl7cmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZSh0KX1mdW5jdGlvbiBGUyh0KXtsZXQgZT1uZXcgVWludDhBcnJheSh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQsR28ubGVuZ3RoKTtpZihlWzBdIT09R29bMF18fGVbMV0hPT1Hb1sxXXx8ZVsyXSE9PUdvWzJdfHxlWzNdIT09R29bM118fGVbNF0hPT1Hb1s0XXx8ZVs1XSE9PUdvWzVdfHxlWzZdIT09R29bNl18fGVbN10hPT1Hb1s3XXx8ZVs4XSE9PUdvWzhdfHxlWzldIT09R29bOV18fGVbMTBdIT09R29bMTBdfHxlWzExXSE9PUdvWzExXSl0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgS1RYIDIuMCBpZGVudGlmaWVyLiIpO2xldCBuPWg4KCksbz0xNypVaW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCxyPW5ldyBQYyh0LEdvLmxlbmd0aCxvLCEwKTtuLnZrRm9ybWF0PXIuX25leHRVaW50MzIoKSxuLnR5cGVTaXplPXIuX25leHRVaW50MzIoKSxuLnBpeGVsV2lkdGg9ci5fbmV4dFVpbnQzMigpLG4ucGl4ZWxIZWlnaHQ9ci5fbmV4dFVpbnQzMigpLG4ucGl4ZWxEZXB0aD1yLl9uZXh0VWludDMyKCksbi5sYXllckNvdW50PXIuX25leHRVaW50MzIoKSxuLmZhY2VDb3VudD1yLl9uZXh0VWludDMyKCk7bGV0IGk9ci5fbmV4dFVpbnQzMigpO24uc3VwZXJjb21wcmVzc2lvblNjaGVtZT1yLl9uZXh0VWludDMyKCk7bGV0IHM9ci5fbmV4dFVpbnQzMigpLGY9ci5fbmV4dFVpbnQzMigpLHU9ci5fbmV4dFVpbnQzMigpLGM9ci5fbmV4dFVpbnQzMigpLGw9ci5fbmV4dFVpbnQ2NCgpLHA9ci5fbmV4dFVpbnQ2NCgpLGQ9aSozKjgsbT1uZXcgUGModCxHby5sZW5ndGgrbyxkLCEwKTtmb3IobGV0IHJ0PTA7cnQ8aTtydCsrKW4ubGV2ZWxzLnB1c2goe2xldmVsRGF0YTpuZXcgVWludDhBcnJheSh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQrbS5fbmV4dFVpbnQ2NCgpLG0uX25leHRVaW50NjQoKSksdW5jb21wcmVzc2VkQnl0ZUxlbmd0aDptLl9uZXh0VWludDY0KCl9KTtsZXQgXz1uZXcgUGModCxzLGYsITApO18uX3NraXAoNCk7bGV0IGc9Xy5fbmV4dFVpbnQxNigpLGI9Xy5fbmV4dFVpbnQxNigpLFQ9Xy5fbmV4dFVpbnQxNigpLE89Xy5fbmV4dFVpbnQxNigpLEU9Xy5fbmV4dFVpbnQ4KCksdz1fLl9uZXh0VWludDgoKSxDPV8uX25leHRVaW50OCgpLE09Xy5fbmV4dFVpbnQ4KCksTj1bXy5fbmV4dFVpbnQ4KCksXy5fbmV4dFVpbnQ4KCksXy5fbmV4dFVpbnQ4KCksXy5fbmV4dFVpbnQ4KCldLEY9W18uX25leHRVaW50OCgpLF8uX25leHRVaW50OCgpLF8uX25leHRVaW50OCgpLF8uX25leHRVaW50OCgpLF8uX25leHRVaW50OCgpLF8uX25leHRVaW50OCgpLF8uX25leHRVaW50OCgpLF8uX25leHRVaW50OCgpXSx2PXt2ZW5kb3JJZDpnLGRlc2NyaXB0b3JUeXBlOmIsdmVyc2lvbk51bWJlcjpULGNvbG9yTW9kZWw6RSxjb2xvclByaW1hcmllczp3LHRyYW5zZmVyRnVuY3Rpb246QyxmbGFnczpNLHRleGVsQmxvY2tEaW1lbnNpb246TixieXRlc1BsYW5lOkYsc2FtcGxlczpbXX0sUz0oTy80LTYpLzQ7Zm9yKGxldCBydD0wO3J0PFM7cnQrKyl7bGV0IEN0PXtiaXRPZmZzZXQ6Xy5fbmV4dFVpbnQxNigpLGJpdExlbmd0aDpfLl9uZXh0VWludDgoKSxjaGFubmVsVHlwZTpfLl9uZXh0VWludDgoKSxzYW1wbGVQb3NpdGlvbjpbXy5fbmV4dFVpbnQ4KCksXy5fbmV4dFVpbnQ4KCksXy5fbmV4dFVpbnQ4KCksXy5fbmV4dFVpbnQ4KCldLHNhbXBsZUxvd2VyOk51bWJlci5ORUdBVElWRV9JTkZJTklUWSxzYW1wbGVVcHBlcjpOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFl9O0N0LmNoYW5uZWxUeXBlJjY0PyhDdC5zYW1wbGVMb3dlcj1fLl9uZXh0SW50MzIoKSxDdC5zYW1wbGVVcHBlcj1fLl9uZXh0SW50MzIoKSk6KEN0LnNhbXBsZUxvd2VyPV8uX25leHRVaW50MzIoKSxDdC5zYW1wbGVVcHBlcj1fLl9uZXh0VWludDMyKCkpLHYuc2FtcGxlc1tydF09Q3R9bi5kYXRhRm9ybWF0RGVzY3JpcHRvci5sZW5ndGg9MCxuLmRhdGFGb3JtYXREZXNjcmlwdG9yLnB1c2godik7bGV0IHg9bmV3IFBjKHQsdSxjLCEwKTtmb3IoO3guX29mZnNldDxjOyl7bGV0IHJ0PXguX25leHRVaW50MzIoKSxDdD14Ll9zY2FuKHJ0KSxrdD12UyhDdCk7aWYobi5rZXlWYWx1ZVtrdF09eC5fbmV4dFVpbnQ4QXJyYXkocnQtQ3QuYnl0ZUxlbmd0aC0xKSxrdC5tYXRjaCgvXmt0eC9pKSl7bGV0IHJlPXZTKG4ua2V5VmFsdWVba3RdKTtuLmtleVZhbHVlW2t0XT1yZS5zdWJzdHJpbmcoMCxyZS5sYXN0SW5kZXhPZigiXDAiKSl9bGV0IGxlPXJ0JTQ/NC1ydCU0OjA7eC5fc2tpcChsZSl9aWYocDw9MClyZXR1cm4gbjtsZXQgTD1uZXcgUGModCxsLHAsITApLHo9TC5fbmV4dFVpbnQxNigpLGo9TC5fbmV4dFVpbnQxNigpLGs9TC5fbmV4dFVpbnQzMigpLHE9TC5fbmV4dFVpbnQzMigpLFc9TC5fbmV4dFVpbnQzMigpLFI9TC5fbmV4dFVpbnQzMigpLG50PVtdO2ZvcihsZXQgcnQ9MDtydDxpO3J0KyspbnQucHVzaCh7aW1hZ2VGbGFnczpMLl9uZXh0VWludDMyKCkscmdiU2xpY2VCeXRlT2Zmc2V0OkwuX25leHRVaW50MzIoKSxyZ2JTbGljZUJ5dGVMZW5ndGg6TC5fbmV4dFVpbnQzMigpLGFscGhhU2xpY2VCeXRlT2Zmc2V0OkwuX25leHRVaW50MzIoKSxhbHBoYVNsaWNlQnl0ZUxlbmd0aDpMLl9uZXh0VWludDMyKCl9KTtsZXQgYXQ9bCtMLl9vZmZzZXQsbHQ9YXQrayxodD1sdCtxLG90PWh0K1csUHQ9bmV3IFVpbnQ4QXJyYXkodC5idWZmZXIsdC5ieXRlT2Zmc2V0K2F0LGspLHl0PW5ldyBVaW50OEFycmF5KHQuYnVmZmVyLHQuYnl0ZU9mZnNldCtsdCxxKSxFdD1uZXcgVWludDhBcnJheSh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQraHQsVyksZHQ9bmV3IFVpbnQ4QXJyYXkodC5idWZmZXIsdC5ieXRlT2Zmc2V0K290LFIpO3JldHVybiBuLmdsb2JhbERhdGE9e2VuZHBvaW50Q291bnQ6eixzZWxlY3RvckNvdW50OmosaW1hZ2VEZXNjczpudCxlbmRwb2ludHNEYXRhOlB0LHNlbGVjdG9yc0RhdGE6eXQsdGFibGVzRGF0YTpFdCxleHRlbmRlZERhdGE6ZHR9LG59dmFyIFBjLE91dCxHbyxMUz0kKCgpPT57UGM9Y2xhc3N7Y29uc3RydWN0b3IoZSxuLG8scil7dGhpcy5fZGF0YVZpZXc9dm9pZCAwLHRoaXMuX2xpdHRsZUVuZGlhbj12b2lkIDAsdGhpcy5fb2Zmc2V0PXZvaWQgMCx0aGlzLl9kYXRhVmlldz1uZXcgRGF0YVZpZXcoZS5idWZmZXIsZS5ieXRlT2Zmc2V0K24sbyksdGhpcy5fbGl0dGxlRW5kaWFuPXIsdGhpcy5fb2Zmc2V0PTB9X25leHRVaW50OCgpe2xldCBlPXRoaXMuX2RhdGFWaWV3LmdldFVpbnQ4KHRoaXMuX29mZnNldCk7cmV0dXJuIHRoaXMuX29mZnNldCs9MSxlfV9uZXh0VWludDE2KCl7bGV0IGU9dGhpcy5fZGF0YVZpZXcuZ2V0VWludDE2KHRoaXMuX29mZnNldCx0aGlzLl9saXR0bGVFbmRpYW4pO3JldHVybiB0aGlzLl9vZmZzZXQrPTIsZX1fbmV4dFVpbnQzMigpe2xldCBlPXRoaXMuX2RhdGFWaWV3LmdldFVpbnQzMih0aGlzLl9vZmZzZXQsdGhpcy5fbGl0dGxlRW5kaWFuKTtyZXR1cm4gdGhpcy5fb2Zmc2V0Kz00LGV9X25leHRVaW50NjQoKXtsZXQgZT10aGlzLl9kYXRhVmlldy5nZXRVaW50MzIodGhpcy5fb2Zmc2V0LHRoaXMuX2xpdHRsZUVuZGlhbiksbj10aGlzLl9kYXRhVmlldy5nZXRVaW50MzIodGhpcy5fb2Zmc2V0KzQsdGhpcy5fbGl0dGxlRW5kaWFuKSxvPWUrMioqMzIqbjtyZXR1cm4gdGhpcy5fb2Zmc2V0Kz04LG99X25leHRJbnQzMigpe2xldCBlPXRoaXMuX2RhdGFWaWV3LmdldEludDMyKHRoaXMuX29mZnNldCx0aGlzLl9saXR0bGVFbmRpYW4pO3JldHVybiB0aGlzLl9vZmZzZXQrPTQsZX1fbmV4dFVpbnQ4QXJyYXkoZSl7bGV0IG49bmV3IFVpbnQ4QXJyYXkodGhpcy5fZGF0YVZpZXcuYnVmZmVyLHRoaXMuX2RhdGFWaWV3LmJ5dGVPZmZzZXQrdGhpcy5fb2Zmc2V0LGUpO3JldHVybiB0aGlzLl9vZmZzZXQrPWUsbn1fc2tpcChlKXtyZXR1cm4gdGhpcy5fb2Zmc2V0Kz1lLHRoaXN9X3NjYW4oZSxuPTApe2xldCBvPXRoaXMuX29mZnNldCxyPTA7Zm9yKDt0aGlzLl9kYXRhVmlldy5nZXRVaW50OCh0aGlzLl9vZmZzZXQpIT09biYmcjxlOylyKyssdGhpcy5fb2Zmc2V0Kys7cmV0dXJuIHI8ZSYmdGhpcy5fb2Zmc2V0KyssbmV3IFVpbnQ4QXJyYXkodGhpcy5fZGF0YVZpZXcuYnVmZmVyLHRoaXMuX2RhdGFWaWV3LmJ5dGVPZmZzZXQrbyxyKX19LE91dD1uZXcgVWludDhBcnJheShbMF0pLEdvPVsxNzEsNzUsODQsODgsMzIsNTAsNDgsMTg3LDEzLDEwLDI2LDEwXX0pO3ZhciBEUz1YbigoX20sSmcpPT57dmFyIFFnPWZ1bmN0aW9uKCl7dmFyIHQ9dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY3VycmVudFNjcmlwdD9kb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYzp2b2lkIDA7cmV0dXJuIHR5cGVvZiBfX2ZpbGVuYW1lPCJ1IiYmKHQ9dHx8X19maWxlbmFtZSksZnVuY3Rpb24oZSl7ZT1lfHx7fTt2YXIgbj10eXBlb2YgZTwidSI/ZTp7fSxvLHI7bi5yZWFkeT1uZXcgUHJvbWlzZShmdW5jdGlvbihVLEcpe289VSxyPUd9KTt2YXIgaT17fSxzO2ZvcihzIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShzKSYmKGlbc109bltzXSk7dmFyIGY9W10sdT0iLi90aGlzLnByb2dyYW0iLGM9ZnVuY3Rpb24oVSxHKXt0aHJvdyBHfSxsPSExLHA9ITEsZD0hMSxtPSExO2w9dHlwZW9mIHdpbmRvdz09Im9iamVjdCIscD10eXBlb2YgaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIixkPXR5cGVvZiBwcm9jZXNzPT0ib2JqZWN0IiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnM9PSJvYmplY3QiJiZ0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlPT0ic3RyaW5nIixtPSFsJiYhZCYmIXA7dmFyIF89IiI7ZnVuY3Rpb24gZyhVKXtyZXR1cm4gbi5sb2NhdGVGaWxlP24ubG9jYXRlRmlsZShVLF8pOl8rVX12YXIgYixULE8sRSx3LEM7ZD8ocD9fPXByKCJwYXRoIikuZGlybmFtZShfKSsiLyI6Xz1fX2Rpcm5hbWUrIi8iLGI9ZnVuY3Rpb24oRyxYKXtyZXR1cm4gd3x8KHc9cHIoImZzIikpLEN8fChDPXByKCJwYXRoIikpLEc9Qy5ub3JtYWxpemUoRyksdy5yZWFkRmlsZVN5bmMoRyxYP251bGw6InV0ZjgiKX0sTz1mdW5jdGlvbihHKXt2YXIgWD1iKEcsITApO3JldHVybiBYLmJ1ZmZlcnx8KFg9bmV3IFVpbnQ4QXJyYXkoWCkpLEwoWC5idWZmZXIpLFh9LHByb2Nlc3MuYXJndi5sZW5ndGg+MSYmKHU9cHJvY2Vzcy5hcmd2WzFdLnJlcGxhY2UoL1xcL2csIi8iKSksZj1wcm9jZXNzLmFyZ3Yuc2xpY2UoMikscHJvY2Vzcy5vbigidW5jYXVnaHRFeGNlcHRpb24iLGZ1bmN0aW9uKFUpe2lmKCEoVSBpbnN0YW5jZW9mIE9pKSl0aHJvdyBVfSkscHJvY2Vzcy5vbigidW5oYW5kbGVkUmVqZWN0aW9uIixLZSksYz1mdW5jdGlvbihVKXtwcm9jZXNzLmV4aXQoVSl9LG4uaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiJbRW1zY3JpcHRlbiBNb2R1bGUgb2JqZWN0XSJ9KTptPyh0eXBlb2YgcmVhZDwidSImJihiPWZ1bmN0aW9uKEcpe3JldHVybiByZWFkKEcpfSksTz1mdW5jdGlvbihHKXt2YXIgWDtyZXR1cm4gdHlwZW9mIHJlYWRidWZmZXI9PSJmdW5jdGlvbiI/bmV3IFVpbnQ4QXJyYXkocmVhZGJ1ZmZlcihHKSk6KFg9cmVhZChHLCJiaW5hcnkiKSxMKHR5cGVvZiBYPT0ib2JqZWN0IiksWCl9LHR5cGVvZiBzY3JpcHRBcmdzPCJ1Ij9mPXNjcmlwdEFyZ3M6dHlwZW9mIGFyZ3VtZW50czwidSImJihmPWFyZ3VtZW50cyksdHlwZW9mIHF1aXQ9PSJmdW5jdGlvbiImJihjPWZ1bmN0aW9uKFUpe3F1aXQoVSl9KSx0eXBlb2YgcHJpbnQ8InUiJiYodHlwZW9mIGNvbnNvbGU+InUiJiYoY29uc29sZT17fSksY29uc29sZS5sb2c9cHJpbnQsY29uc29sZS53YXJuPWNvbnNvbGUuZXJyb3I9dHlwZW9mIHByaW50RXJyPCJ1Ij9wcmludEVycjpwcmludCkpOihsfHxwKSYmKHA/Xz1zZWxmLmxvY2F0aW9uLmhyZWY6dHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQuY3VycmVudFNjcmlwdCYmKF89ZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMpLHQmJihfPXQpLF8uaW5kZXhPZigiYmxvYjoiKSE9PTA/Xz1fLnN1YnN0cigwLF8ubGFzdEluZGV4T2YoIi8iKSsxKTpfPSIiLGI9ZnVuY3Rpb24oVSl7dmFyIEc9bmV3IFhNTEh0dHBSZXF1ZXN0O3JldHVybiBHLm9wZW4oIkdFVCIsVSwhMSksRy5zZW5kKG51bGwpLEcucmVzcG9uc2VUZXh0fSxwJiYoTz1mdW5jdGlvbihVKXt2YXIgRz1uZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJuIEcub3BlbigiR0VUIixVLCExKSxHLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLEcuc2VuZChudWxsKSxuZXcgVWludDhBcnJheShHLnJlc3BvbnNlKX0pLFQ9ZnVuY3Rpb24oVSxHLFgpe3ZhciBRPW5ldyBYTUxIdHRwUmVxdWVzdDtRLm9wZW4oIkdFVCIsVSwhMCksUS5yZXNwb25zZVR5cGU9ImFycmF5YnVmZmVyIixRLm9ubG9hZD1mdW5jdGlvbigpe2lmKFEuc3RhdHVzPT0yMDB8fFEuc3RhdHVzPT0wJiZRLnJlc3BvbnNlKXtHKFEucmVzcG9uc2UpO3JldHVybn1YKCl9LFEub25lcnJvcj1YLFEuc2VuZChudWxsKX0sRT1mdW5jdGlvbihVKXtkb2N1bWVudC50aXRsZT1VfSk7dmFyIE09bi5wcmludHx8Y29uc29sZS5sb2cuYmluZChjb25zb2xlKSxOPW4ucHJpbnRFcnJ8fGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO2ZvcihzIGluIGkpaS5oYXNPd25Qcm9wZXJ0eShzKSYmKG5bc109aVtzXSk7aT1udWxsLG4uYXJndW1lbnRzJiYoZj1uLmFyZ3VtZW50cyksbi50aGlzUHJvZ3JhbSYmKHU9bi50aGlzUHJvZ3JhbSksbi5xdWl0JiYoYz1uLnF1aXQpO3ZhciBGPTAsST1mdW5jdGlvbihVKXtGPVV9LHY7bi53YXNtQmluYXJ5JiYodj1uLndhc21CaW5hcnkpO3ZhciBCPW4ubm9FeGl0UnVudGltZXx8ITA7dHlwZW9mIFdlYkFzc2VtYmx5IT0ib2JqZWN0IiYmS2UoIm5vIG5hdGl2ZSB3YXNtIHN1cHBvcnQgZGV0ZWN0ZWQiKTt2YXIgQSxTPSExLHg7ZnVuY3Rpb24gTChVLEcpe1V8fEtlKCJBc3NlcnRpb24gZmFpbGVkOiAiK0cpfXZhciB6PXR5cGVvZiBUZXh0RGVjb2RlcjwidSI/bmV3IFRleHREZWNvZGVyKCJ1dGY4Iik6dm9pZCAwO2Z1bmN0aW9uIGooVSxHLFgpe2Zvcih2YXIgUT1HK1gsdXQ9RztVW3V0XSYmISh1dD49USk7KSsrdXQ7aWYodXQtRz4xNiYmVS5zdWJhcnJheSYmeilyZXR1cm4gei5kZWNvZGUoVS5zdWJhcnJheShHLHV0KSk7Zm9yKHZhciB3dD0iIjtHPHV0Oyl7dmFyIFJ0PVVbRysrXTtpZighKFJ0JjEyOCkpe3d0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKFJ0KTtjb250aW51ZX12YXIgbXQ9VVtHKytdJjYzO2lmKChSdCYyMjQpPT0xOTIpe3d0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKChSdCYzMSk8PDZ8bXQpO2NvbnRpbnVlfXZhciBfdD1VW0crK10mNjM7aWYoKFJ0JjI0MCk9PTIyND9SdD0oUnQmMTUpPDwxMnxtdDw8NnxfdDpSdD0oUnQmNyk8PDE4fG10PDwxMnxfdDw8NnxVW0crK10mNjMsUnQ8NjU1MzYpd3QrPVN0cmluZy5mcm9tQ2hhckNvZGUoUnQpO2Vsc2V7dmFyIHF0PVJ0LTY1NTM2O3d0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fHF0Pj4xMCw1NjMyMHxxdCYxMDIzKX19cmV0dXJuIHd0fWZ1bmN0aW9uIGsoVSxHKXtyZXR1cm4gVT9qKEN0LFUsRyk6IiJ9ZnVuY3Rpb24gcShVLEcsWCxRKXtpZighKFE+MCkpcmV0dXJuIDA7Zm9yKHZhciB1dD1YLHd0PVgrUS0xLFJ0PTA7UnQ8VS5sZW5ndGg7KytSdCl7dmFyIG10PVUuY2hhckNvZGVBdChSdCk7aWYobXQ+PTU1Mjk2JiZtdDw9NTczNDMpe3ZhciBfdD1VLmNoYXJDb2RlQXQoKytSdCk7bXQ9NjU1MzYrKChtdCYxMDIzKTw8MTApfF90JjEwMjN9aWYobXQ8PTEyNyl7aWYoWD49d3QpYnJlYWs7R1tYKytdPW10fWVsc2UgaWYobXQ8PTIwNDcpe2lmKFgrMT49d3QpYnJlYWs7R1tYKytdPTE5MnxtdD4+NixHW1grK109MTI4fG10JjYzfWVsc2UgaWYobXQ8PTY1NTM1KXtpZihYKzI+PXd0KWJyZWFrO0dbWCsrXT0yMjR8bXQ+PjEyLEdbWCsrXT0xMjh8bXQ+PjYmNjMsR1tYKytdPTEyOHxtdCY2M31lbHNle2lmKFgrMz49d3QpYnJlYWs7R1tYKytdPTI0MHxtdD4+MTgsR1tYKytdPTEyOHxtdD4+MTImNjMsR1tYKytdPTEyOHxtdD4+NiY2MyxHW1grK109MTI4fG10JjYzfX1yZXR1cm4gR1tYXT0wLFgtdXR9ZnVuY3Rpb24gVyhVLEcsWCl7cmV0dXJuIHEoVSxDdCxHLFgpfWZ1bmN0aW9uIFIoVSl7Zm9yKHZhciBHPTAsWD0wO1g8VS5sZW5ndGg7KytYKXt2YXIgUT1VLmNoYXJDb2RlQXQoWCk7UT49NTUyOTYmJlE8PTU3MzQzJiYoUT02NTUzNisoKFEmMTAyMyk8PDEwKXxVLmNoYXJDb2RlQXQoKytYKSYxMDIzKSxRPD0xMjc/KytHOlE8PTIwNDc/Rys9MjpRPD02NTUzNT9HKz0zOkcrPTR9cmV0dXJuIEd9dmFyIG50PXR5cGVvZiBUZXh0RGVjb2RlcjwidSI/bmV3IFRleHREZWNvZGVyKCJ1dGYtMTZsZSIpOnZvaWQgMDtmdW5jdGlvbiBhdChVLEcpe2Zvcih2YXIgWD1VLFE9WD4+MSx1dD1RK0cvMjshKFE+PXV0KSYmbGVbUV07KSsrUTtpZihYPVE8PDEsWC1VPjMyJiZudClyZXR1cm4gbnQuZGVjb2RlKEN0LnN1YmFycmF5KFUsWCkpO2Zvcih2YXIgd3Q9IiIsUnQ9MDshKFJ0Pj1HLzIpOysrUnQpe3ZhciBtdD1rdFtVK1J0KjI+PjFdO2lmKG10PT0wKWJyZWFrO3d0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKG10KX1yZXR1cm4gd3R9ZnVuY3Rpb24gbHQoVSxHLFgpe2lmKFg9PT12b2lkIDAmJihYPTIxNDc0ODM2NDcpLFg8MilyZXR1cm4gMDtYLT0yO2Zvcih2YXIgUT1HLHV0PVg8VS5sZW5ndGgqMj9YLzI6VS5sZW5ndGgsd3Q9MDt3dDx1dDsrK3d0KXt2YXIgUnQ9VS5jaGFyQ29kZUF0KHd0KTtrdFtHPj4xXT1SdCxHKz0yfXJldHVybiBrdFtHPj4xXT0wLEctUX1mdW5jdGlvbiBodChVKXtyZXR1cm4gVS5sZW5ndGgqMn1mdW5jdGlvbiBvdChVLEcpe2Zvcih2YXIgWD0wLFE9IiI7IShYPj1HLzQpOyl7dmFyIHV0PXJlW1UrWCo0Pj4yXTtpZih1dD09MClicmVhaztpZigrK1gsdXQ+PTY1NTM2KXt2YXIgd3Q9dXQtNjU1MzY7USs9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5Nnx3dD4+MTAsNTYzMjB8d3QmMTAyMyl9ZWxzZSBRKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHV0KX1yZXR1cm4gUX1mdW5jdGlvbiBQdChVLEcsWCl7aWYoWD09PXZvaWQgMCYmKFg9MjE0NzQ4MzY0NyksWDw0KXJldHVybiAwO2Zvcih2YXIgUT1HLHV0PVErWC00LHd0PTA7d3Q8VS5sZW5ndGg7Kyt3dCl7dmFyIFJ0PVUuY2hhckNvZGVBdCh3dCk7aWYoUnQ+PTU1Mjk2JiZSdDw9NTczNDMpe3ZhciBtdD1VLmNoYXJDb2RlQXQoKyt3dCk7UnQ9NjU1MzYrKChSdCYxMDIzKTw8MTApfG10JjEwMjN9aWYocmVbRz4+Ml09UnQsRys9NCxHKzQ+dXQpYnJlYWt9cmV0dXJuIHJlW0c+PjJdPTAsRy1RfWZ1bmN0aW9uIHl0KFUpe2Zvcih2YXIgRz0wLFg9MDtYPFUubGVuZ3RoOysrWCl7dmFyIFE9VS5jaGFyQ29kZUF0KFgpO1E+PTU1Mjk2JiZRPD01NzM0MyYmKytYLEcrPTR9cmV0dXJuIEd9ZnVuY3Rpb24gRXQoVSxHKXtyZXR1cm4gVSVHPjAmJihVKz1HLVUlRyksVX12YXIgZHQscnQsQ3Qsa3QsbGUscmUscGUsZmUsWnQ7ZnVuY3Rpb24gUXQoVSl7ZHQ9VSxuLkhFQVA4PXJ0PW5ldyBJbnQ4QXJyYXkoVSksbi5IRUFQMTY9a3Q9bmV3IEludDE2QXJyYXkoVSksbi5IRUFQMzI9cmU9bmV3IEludDMyQXJyYXkoVSksbi5IRUFQVTg9Q3Q9bmV3IFVpbnQ4QXJyYXkoVSksbi5IRUFQVTE2PWxlPW5ldyBVaW50MTZBcnJheShVKSxuLkhFQVBVMzI9cGU9bmV3IFVpbnQzMkFycmF5KFUpLG4uSEVBUEYzMj1mZT1uZXcgRmxvYXQzMkFycmF5KFUpLG4uSEVBUEY2ND1adD1uZXcgRmxvYXQ2NEFycmF5KFUpfXZhciBOZT1uLklOSVRJQUxfTUVNT1JZfHwxNjc3NzIxNixnZSxFZT1bXSx1bj1bXSxHZT1bXSxiZT1bXSxsbj0hMTtmdW5jdGlvbiBwbigpe2lmKG4ucHJlUnVuKWZvcih0eXBlb2Ygbi5wcmVSdW49PSJmdW5jdGlvbiImJihuLnByZVJ1bj1bbi5wcmVSdW5dKTtuLnByZVJ1bi5sZW5ndGg7KVZlKG4ucHJlUnVuLnNoaWZ0KCkpO3pvKEVlKX1mdW5jdGlvbiBFbigpe2xuPSEwLHpvKHVuKX1mdW5jdGlvbiBvZSgpe3pvKEdlKX1mdW5jdGlvbiBZdCgpe2lmKG4ucG9zdFJ1bilmb3IodHlwZW9mIG4ucG9zdFJ1bj09ImZ1bmN0aW9uIiYmKG4ucG9zdFJ1bj1bbi5wb3N0UnVuXSk7bi5wb3N0UnVuLmxlbmd0aDspc24obi5wb3N0UnVuLnNoaWZ0KCkpO3pvKGJlKX1mdW5jdGlvbiBWZShVKXtFZS51bnNoaWZ0KFUpfWZ1bmN0aW9uIGRuKFUpe3VuLnVuc2hpZnQoVSl9ZnVuY3Rpb24gc24oVSl7YmUudW5zaGlmdChVKX12YXIgbW49MCxmbz1udWxsLEhuPW51bGw7ZnVuY3Rpb24gWmUoVSl7bW4rKyxuLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMmJm4ubW9uaXRvclJ1bkRlcGVuZGVuY2llcyhtbil9ZnVuY3Rpb24gY24oVSl7aWYobW4tLSxuLm1vbml0b3JSdW5EZXBlbmRlbmNpZXMmJm4ubW9uaXRvclJ1bkRlcGVuZGVuY2llcyhtbiksbW49PTAmJihmbyE9PW51bGwmJihjbGVhckludGVydmFsKGZvKSxmbz1udWxsKSxIbikpe3ZhciBHPUhuO0huPW51bGwsRygpfX1uLnByZWxvYWRlZEltYWdlcz17fSxuLnByZWxvYWRlZEF1ZGlvcz17fTtmdW5jdGlvbiBLZShVKXtuLm9uQWJvcnQmJm4ub25BYm9ydChVKSxVKz0iIixOKFUpLFM9ITAseD0xLFU9ImFib3J0KCIrVSsiKS4gQnVpbGQgd2l0aCAtcyBBU1NFUlRJT05TPTEgZm9yIG1vcmUgaW5mby4iO3ZhciBHPW5ldyBXZWJBc3NlbWJseS5SdW50aW1lRXJyb3IoVSk7dGhyb3cgcihHKSxHfWZ1bmN0aW9uIGhuKFUsRyl7cmV0dXJuIFN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aD9VLnN0YXJ0c1dpdGgoRyk6VS5pbmRleE9mKEcpPT09MH12YXIgdW89ImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCwiO2Z1bmN0aW9uIHFuKFUpe3JldHVybiBobihVLHVvKX12YXIgS249ImZpbGU6Ly8iO2Z1bmN0aW9uIGxvKFUpe3JldHVybiBobihVLEtuKX12YXIgemU9ImJhc2lzX3RyYW5zY29kZXIud2FzbSI7cW4oemUpfHwoemU9Zyh6ZSkpO2Z1bmN0aW9uIEZlKFUpe3RyeXtpZihVPT16ZSYmdilyZXR1cm4gbmV3IFVpbnQ4QXJyYXkodik7aWYoTylyZXR1cm4gTyhVKTt0aHJvdyJib3RoIGFzeW5jIGFuZCBzeW5jIGZldGNoaW5nIG9mIHRoZSB3YXNtIGZhaWxlZCJ9Y2F0Y2goRyl7S2UoRyl9fWZ1bmN0aW9uIExuKCl7aWYoIXYmJihsfHxwKSl7aWYodHlwZW9mIGZldGNoPT0iZnVuY3Rpb24iJiYhbG8oemUpKXJldHVybiBmZXRjaCh6ZSx7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oZnVuY3Rpb24oVSl7aWYoIVUub2spdGhyb3ciZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnIit6ZSsiJyI7cmV0dXJuIFUuYXJyYXlCdWZmZXIoKX0pLmNhdGNoKGZ1bmN0aW9uKCl7cmV0dXJuIEZlKHplKX0pO2lmKFQpcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKFUsRyl7VCh6ZSxmdW5jdGlvbihYKXtVKG5ldyBVaW50OEFycmF5KFgpKX0sRyl9KX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3JldHVybiBGZSh6ZSl9KX1mdW5jdGlvbiBXbigpe3ZhciBVPXthOkRsfTtmdW5jdGlvbiBHKFJ0LG10KXt2YXIgX3Q9UnQuZXhwb3J0cztuLmFzbT1fdCxBPW4uYXNtLkssUXQoQS5idWZmZXIpLGdlPW4uYXNtLk8sZG4obi5hc20uTCksY24oIndhc20taW5zdGFudGlhdGUiKX1aZSgid2FzbS1pbnN0YW50aWF0ZSIpO2Z1bmN0aW9uIFgoUnQpe0coUnQuaW5zdGFuY2UpfWZ1bmN0aW9uIFEoUnQpe3JldHVybiBMbigpLnRoZW4oZnVuY3Rpb24obXQpe3ZhciBfdD1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZShtdCxVKTtyZXR1cm4gX3R9KS50aGVuKFJ0LGZ1bmN0aW9uKG10KXtOKCJmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiAiK210KSxLZShtdCl9KX1mdW5jdGlvbiB1dCgpe3JldHVybiF2JiZ0eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmc9PSJmdW5jdGlvbiImJiFxbih6ZSkmJiFsbyh6ZSkmJnR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIj9mZXRjaCh6ZSx7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oZnVuY3Rpb24oUnQpe3ZhciBtdD1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhSdCxVKTtyZXR1cm4gbXQudGhlbihYLGZ1bmN0aW9uKF90KXtyZXR1cm4gTigid2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6ICIrX3QpLE4oImZhbGxpbmcgYmFjayB0byBBcnJheUJ1ZmZlciBpbnN0YW50aWF0aW9uIiksUShYKX0pfSk6UShYKX1pZihuLmluc3RhbnRpYXRlV2FzbSl0cnl7dmFyIHd0PW4uaW5zdGFudGlhdGVXYXNtKFUsRyk7cmV0dXJuIHd0fWNhdGNoKFJ0KXtyZXR1cm4gTigiTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogIitSdCksITF9cmV0dXJuIHV0KCkuY2F0Y2gocikse319ZnVuY3Rpb24gem8oVSl7Zm9yKDtVLmxlbmd0aD4wOyl7dmFyIEc9VS5zaGlmdCgpO2lmKHR5cGVvZiBHPT0iZnVuY3Rpb24iKXtHKG4pO2NvbnRpbnVlfXZhciBYPUcuZnVuYzt0eXBlb2YgWD09Im51bWJlciI/Ry5hcmc9PT12b2lkIDA/Z2UuZ2V0KFgpKCk6Z2UuZ2V0KFgpKEcuYXJnKTpYKEcuYXJnPT09dm9pZCAwP251bGw6Ry5hcmcpfX12YXIgcm49e307ZnVuY3Rpb24gUm4oVSl7Zm9yKDtVLmxlbmd0aDspe3ZhciBHPVUucG9wKCksWD1VLnBvcCgpO1goRyl9fWZ1bmN0aW9uIGFyKFUpe3JldHVybiB0aGlzLmZyb21XaXJlVHlwZShwZVtVPj4yXSl9dmFyIFFuPXt9LGpvPXt9LE5yPXt9LE5zPTQ4LElzPTU3O2Z1bmN0aW9uIFlpKFUpe2lmKFU9PT12b2lkIDApcmV0dXJuIl91bmtub3duIjtVPVUucmVwbGFjZSgvW15hLXpBLVowLTlfXS9nLCIkIik7dmFyIEc9VS5jaGFyQ29kZUF0KDApO3JldHVybiBHPj1OcyYmRzw9SXM/Il8iK1U6VX1mdW5jdGlvbiBJcihVLEcpe3JldHVybiBVPVlpKFUpLG5ldyBGdW5jdGlvbigiYm9keSIsInJldHVybiBmdW5jdGlvbiAiK1UrYCgpIHsKICAgICJ1c2Ugc3RyaWN0IjsgICAgcmV0dXJuIGJvZHkuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKfTsKYCkoRyl9ZnVuY3Rpb24gJGkoVSxHKXt2YXIgWD1JcihHLGZ1bmN0aW9uKFEpe3RoaXMubmFtZT1HLHRoaXMubWVzc2FnZT1RO3ZhciB1dD1uZXcgRXJyb3IoUSkuc3RhY2s7dXQhPT12b2lkIDAmJih0aGlzLnN0YWNrPXRoaXMudG9TdHJpbmcoKStgCmArdXQucmVwbGFjZSgvXkVycm9yKDpbXlxuXSopP1xuLywiIikpfSk7cmV0dXJuIFgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoVS5wcm90b3R5cGUpLFgucHJvdG90eXBlLmNvbnN0cnVjdG9yPVgsWC5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlPT09dm9pZCAwP3RoaXMubmFtZTp0aGlzLm5hbWUrIjogIit0aGlzLm1lc3NhZ2V9LFh9dmFyIHZzPXZvaWQgMDtmdW5jdGlvbiBiaShVKXt0aHJvdyBuZXcgdnMoVSl9ZnVuY3Rpb24gb28oVSxHLFgpe1UuZm9yRWFjaChmdW5jdGlvbihtdCl7TnJbbXRdPUd9KTtmdW5jdGlvbiBRKG10KXt2YXIgX3Q9WChtdCk7X3QubGVuZ3RoIT09VS5sZW5ndGgmJmJpKCJNaXNtYXRjaGVkIHR5cGUgY29udmVydGVyIGNvdW50Iik7Zm9yKHZhciBxdD0wO3F0PFUubGVuZ3RoOysrcXQpb3IoVVtxdF0sX3RbcXRdKX12YXIgdXQ9bmV3IEFycmF5KEcubGVuZ3RoKSx3dD1bXSxSdD0wO0cuZm9yRWFjaChmdW5jdGlvbihtdCxfdCl7am8uaGFzT3duUHJvcGVydHkobXQpP3V0W190XT1qb1ttdF06KHd0LnB1c2gobXQpLFFuLmhhc093blByb3BlcnR5KG10KXx8KFFuW210XT1bXSksUW5bbXRdLnB1c2goZnVuY3Rpb24oKXt1dFtfdF09am9bbXRdLCsrUnQsUnQ9PT13dC5sZW5ndGgmJlEodXQpfSkpfSksd3QubGVuZ3RoPT09MCYmUSh1dCl9ZnVuY3Rpb24gcG8oVSl7dmFyIEc9cm5bVV07ZGVsZXRlIHJuW1VdO3ZhciBYPUcucmF3Q29uc3RydWN0b3IsUT1HLnJhd0Rlc3RydWN0b3IsdXQ9Ry5maWVsZHMsd3Q9dXQubWFwKGZ1bmN0aW9uKFJ0KXtyZXR1cm4gUnQuZ2V0dGVyUmV0dXJuVHlwZX0pLmNvbmNhdCh1dC5tYXAoZnVuY3Rpb24oUnQpe3JldHVybiBSdC5zZXR0ZXJBcmd1bWVudFR5cGV9KSk7b28oW1VdLHd0LGZ1bmN0aW9uKFJ0KXt2YXIgbXQ9e307cmV0dXJuIHV0LmZvckVhY2goZnVuY3Rpb24oX3QscXQpe3ZhciBKdD1fdC5maWVsZE5hbWUsd2U9UnRbcXRdLEplPV90LmdldHRlcixibj1fdC5nZXR0ZXJDb250ZXh0LHJvPVJ0W3F0K3V0Lmxlbmd0aF0sSW89X3Quc2V0dGVyLGxyPV90LnNldHRlckNvbnRleHQ7bXRbSnRdPXtyZWFkOmZ1bmN0aW9uKFpyKXtyZXR1cm4gd2UuZnJvbVdpcmVUeXBlKEplKGJuLFpyKSl9LHdyaXRlOmZ1bmN0aW9uKFpyLG9mKXt2YXIgRWk9W107SW8obHIsWnIscm8udG9XaXJlVHlwZShFaSxvZikpLFJuKEVpKX19fSksW3tuYW1lOkcubmFtZSxmcm9tV2lyZVR5cGU6ZnVuY3Rpb24oX3Qpe3ZhciBxdD17fTtmb3IodmFyIEp0IGluIG10KXF0W0p0XT1tdFtKdF0ucmVhZChfdCk7cmV0dXJuIFEoX3QpLHF0fSx0b1dpcmVUeXBlOmZ1bmN0aW9uKF90LHF0KXtmb3IodmFyIEp0IGluIG10KWlmKCEoSnQgaW4gcXQpKXRocm93IG5ldyBUeXBlRXJyb3IoJ01pc3NpbmcgZmllbGQ6ICAiJytKdCsnIicpO3ZhciB3ZT1YKCk7Zm9yKEp0IGluIG10KW10W0p0XS53cml0ZSh3ZSxxdFtKdF0pO3JldHVybiBfdCE9PW51bGwmJl90LnB1c2goUSx3ZSksd2V9LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6YXIsZGVzdHJ1Y3RvckZ1bmN0aW9uOlF9XX0pfWZ1bmN0aW9uIHZyKFUpe3N3aXRjaChVKXtjYXNlIDE6cmV0dXJuIDA7Y2FzZSAyOnJldHVybiAxO2Nhc2UgNDpyZXR1cm4gMjtjYXNlIDg6cmV0dXJuIDM7ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIHR5cGUgc2l6ZTogIitVKX19ZnVuY3Rpb24gTWMoKXtmb3IodmFyIFU9bmV3IEFycmF5KDI1NiksRz0wO0c8MjU2OysrRylVW0ddPVN0cmluZy5mcm9tQ2hhckNvZGUoRyk7TmM9VX12YXIgTmM9dm9pZCAwO2Z1bmN0aW9uIERuKFUpe2Zvcih2YXIgRz0iIixYPVU7Q3RbWF07KUcrPU5jW0N0W1grK11dO3JldHVybiBHfXZhciBUaT12b2lkIDA7ZnVuY3Rpb24gTGUoVSl7dGhyb3cgbmV3IFRpKFUpfWZ1bmN0aW9uIG9yKFUsRyxYKXtpZihYPVh8fHt9LCEoImFyZ1BhY2tBZHZhbmNlImluIEcpKXRocm93IG5ldyBUeXBlRXJyb3IoInJlZ2lzdGVyVHlwZSByZWdpc3RlcmVkSW5zdGFuY2UgcmVxdWlyZXMgYXJnUGFja0FkdmFuY2UiKTt2YXIgUT1HLm5hbWU7aWYoVXx8TGUoJ3R5cGUgIicrUSsnIiBtdXN0IGhhdmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIHR5cGVpZCBwb2ludGVyJyksam8uaGFzT3duUHJvcGVydHkoVSkpe2lmKFguaWdub3JlRHVwbGljYXRlUmVnaXN0cmF0aW9ucylyZXR1cm47TGUoIkNhbm5vdCByZWdpc3RlciB0eXBlICciK1ErIicgdHdpY2UiKX1pZihqb1tVXT1HLGRlbGV0ZSBOcltVXSxRbi5oYXNPd25Qcm9wZXJ0eShVKSl7dmFyIHV0PVFuW1VdO2RlbGV0ZSBRbltVXSx1dC5mb3JFYWNoKGZ1bmN0aW9uKHd0KXt3dCgpfSl9fWZ1bmN0aW9uIEF1KFUsRyxYLFEsdXQpe3ZhciB3dD12cihYKTtHPURuKEcpLG9yKFUse25hbWU6Ryxmcm9tV2lyZVR5cGU6ZnVuY3Rpb24oUnQpe3JldHVybiEhUnR9LHRvV2lyZVR5cGU6ZnVuY3Rpb24oUnQsbXQpe3JldHVybiBtdD9ROnV0fSxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOmZ1bmN0aW9uKFJ0KXt2YXIgbXQ7aWYoWD09PTEpbXQ9cnQ7ZWxzZSBpZihYPT09MiltdD1rdDtlbHNlIGlmKFg9PT00KW10PXJlO2Vsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBib29sZWFuIHR5cGUgc2l6ZTogIitHKTtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUobXRbUnQ+Pnd0XSl9LGRlc3RydWN0b3JGdW5jdGlvbjpudWxsfSl9ZnVuY3Rpb24gYnUoVSl7aWYoISh0aGlzIGluc3RhbmNlb2YgRnIpfHwhKFUgaW5zdGFuY2VvZiBGcikpcmV0dXJuITE7Zm9yKHZhciBHPXRoaXMuJCQucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3MsWD10aGlzLiQkLnB0cixRPVUuJCQucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3MsdXQ9VS4kJC5wdHI7Ry5iYXNlQ2xhc3M7KVg9Ry51cGNhc3QoWCksRz1HLmJhc2VDbGFzcztmb3IoO1EuYmFzZUNsYXNzOyl1dD1RLnVwY2FzdCh1dCksUT1RLmJhc2VDbGFzcztyZXR1cm4gRz09PVEmJlg9PT11dH1mdW5jdGlvbiBUdShVKXtyZXR1cm57Y291bnQ6VS5jb3VudCxkZWxldGVTY2hlZHVsZWQ6VS5kZWxldGVTY2hlZHVsZWQscHJlc2VydmVQb2ludGVyT25EZWxldGU6VS5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZSxwdHI6VS5wdHIscHRyVHlwZTpVLnB0clR5cGUsc21hcnRQdHI6VS5zbWFydFB0cixzbWFydFB0clR5cGU6VS5zbWFydFB0clR5cGV9fWZ1bmN0aW9uIEljKFUpe2Z1bmN0aW9uIEcoWCl7cmV0dXJuIFguJCQucHRyVHlwZS5yZWdpc3RlcmVkQ2xhc3MubmFtZX1MZShHKFUpKyIgaW5zdGFuY2UgYWxyZWFkeSBkZWxldGVkIil9dmFyIHZjPSExO2Z1bmN0aW9uIEhhKFUpe31mdW5jdGlvbiB3dShVKXtVLnNtYXJ0UHRyP1Uuc21hcnRQdHJUeXBlLnJhd0Rlc3RydWN0b3IoVS5zbWFydFB0cik6VS5wdHJUeXBlLnJlZ2lzdGVyZWRDbGFzcy5yYXdEZXN0cnVjdG9yKFUucHRyKX1mdW5jdGlvbiBxYShVKXtVLmNvdW50LnZhbHVlLT0xO3ZhciBHPVUuY291bnQudmFsdWU9PT0wO0cmJnd1KFUpfWZ1bmN0aW9uIFppKFUpe3JldHVybiB0eXBlb2YgRmluYWxpemF0aW9uR3JvdXA+InUiPyhaaT1mdW5jdGlvbihHKXtyZXR1cm4gR30sVSk6KHZjPW5ldyBGaW5hbGl6YXRpb25Hcm91cChmdW5jdGlvbihHKXtmb3IodmFyIFg9Ry5uZXh0KCk7IVguZG9uZTtYPUcubmV4dCgpKXt2YXIgUT1YLnZhbHVlO1EucHRyP3FhKFEpOmNvbnNvbGUud2Fybigib2JqZWN0IGFscmVhZHkgZGVsZXRlZDogIitRLnB0cil9fSksWmk9ZnVuY3Rpb24oRyl7cmV0dXJuIHZjLnJlZ2lzdGVyKEcsRy4kJCxHLiQkKSxHfSxIYT1mdW5jdGlvbihHKXt2Yy51bnJlZ2lzdGVyKEcuJCQpfSxaaShVKSl9ZnVuY3Rpb24gT3UoKXtpZih0aGlzLiQkLnB0cnx8SWModGhpcyksdGhpcy4kJC5wcmVzZXJ2ZVBvaW50ZXJPbkRlbGV0ZSlyZXR1cm4gdGhpcy4kJC5jb3VudC52YWx1ZSs9MSx0aGlzO3ZhciBVPVppKE9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLHskJDp7dmFsdWU6VHUodGhpcy4kJCl9fSkpO3JldHVybiBVLiQkLmNvdW50LnZhbHVlKz0xLFUuJCQuZGVsZXRlU2NoZWR1bGVkPSExLFV9ZnVuY3Rpb24gRXUoKXt0aGlzLiQkLnB0cnx8SWModGhpcyksdGhpcy4kJC5kZWxldGVTY2hlZHVsZWQmJiF0aGlzLiQkLnByZXNlcnZlUG9pbnRlck9uRGVsZXRlJiZMZSgiT2JqZWN0IGFscmVhZHkgc2NoZWR1bGVkIGZvciBkZWxldGlvbiIpLEhhKHRoaXMpLHFhKHRoaXMuJCQpLHRoaXMuJCQucHJlc2VydmVQb2ludGVyT25EZWxldGV8fCh0aGlzLiQkLnNtYXJ0UHRyPXZvaWQgMCx0aGlzLiQkLnB0cj12b2lkIDApfWZ1bmN0aW9uIFJ1KCl7cmV0dXJuIXRoaXMuJCQucHRyfXZhciBRaT12b2lkIDAsSmk9W107ZnVuY3Rpb24gRmMoKXtmb3IoO0ppLmxlbmd0aDspe3ZhciBVPUppLnBvcCgpO1UuJCQuZGVsZXRlU2NoZWR1bGVkPSExLFUuZGVsZXRlKCl9fWZ1bmN0aW9uIFN1KCl7cmV0dXJuIHRoaXMuJCQucHRyfHxJYyh0aGlzKSx0aGlzLiQkLmRlbGV0ZVNjaGVkdWxlZCYmIXRoaXMuJCQucHJlc2VydmVQb2ludGVyT25EZWxldGUmJkxlKCJPYmplY3QgYWxyZWFkeSBzY2hlZHVsZWQgZm9yIGRlbGV0aW9uIiksSmkucHVzaCh0aGlzKSxKaS5sZW5ndGg9PT0xJiZRaSYmUWkoRmMpLHRoaXMuJCQuZGVsZXRlU2NoZWR1bGVkPSEwLHRoaXN9ZnVuY3Rpb24gQ3UoKXtGci5wcm90b3R5cGUuaXNBbGlhc09mPWJ1LEZyLnByb3RvdHlwZS5jbG9uZT1PdSxGci5wcm90b3R5cGUuZGVsZXRlPUV1LEZyLnByb3RvdHlwZS5pc0RlbGV0ZWQ9UnUsRnIucHJvdG90eXBlLmRlbGV0ZUxhdGVyPVN1fWZ1bmN0aW9uIEZyKCl7fXZhciBLYT17fTtmdW5jdGlvbiBXYShVLEcsWCl7aWYoVVtHXS5vdmVybG9hZFRhYmxlPT09dm9pZCAwKXt2YXIgUT1VW0ddO1VbR109ZnVuY3Rpb24oKXtyZXR1cm4gVVtHXS5vdmVybG9hZFRhYmxlLmhhc093blByb3BlcnR5KGFyZ3VtZW50cy5sZW5ndGgpfHxMZSgiRnVuY3Rpb24gJyIrWCsiJyBjYWxsZWQgd2l0aCBhbiBpbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMgKCIrYXJndW1lbnRzLmxlbmd0aCsiKSAtIGV4cGVjdHMgb25lIG9mICgiK1VbR10ub3ZlcmxvYWRUYWJsZSsiKSEiKSxVW0ddLm92ZXJsb2FkVGFibGVbYXJndW1lbnRzLmxlbmd0aF0uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxVW0ddLm92ZXJsb2FkVGFibGU9W10sVVtHXS5vdmVybG9hZFRhYmxlW1EuYXJnQ291bnRdPVF9fWZ1bmN0aW9uIExjKFUsRyxYKXtuLmhhc093blByb3BlcnR5KFUpPygoWD09PXZvaWQgMHx8bltVXS5vdmVybG9hZFRhYmxlIT09dm9pZCAwJiZuW1VdLm92ZXJsb2FkVGFibGVbWF0hPT12b2lkIDApJiZMZSgiQ2Fubm90IHJlZ2lzdGVyIHB1YmxpYyBuYW1lICciK1UrIicgdHdpY2UiKSxXYShuLFUsVSksbi5oYXNPd25Qcm9wZXJ0eShYKSYmTGUoIkNhbm5vdCByZWdpc3RlciBtdWx0aXBsZSBvdmVybG9hZHMgb2YgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIG51bWJlciBvZiBhcmd1bWVudHMgKCIrWCsiKSEiKSxuW1VdLm92ZXJsb2FkVGFibGVbWF09Ryk6KG5bVV09RyxYIT09dm9pZCAwJiYobltVXS5udW1Bcmd1bWVudHM9WCkpfWZ1bmN0aW9uIHh1KFUsRyxYLFEsdXQsd3QsUnQsbXQpe3RoaXMubmFtZT1VLHRoaXMuY29uc3RydWN0b3I9Ryx0aGlzLmluc3RhbmNlUHJvdG90eXBlPVgsdGhpcy5yYXdEZXN0cnVjdG9yPVEsdGhpcy5iYXNlQ2xhc3M9dXQsdGhpcy5nZXRBY3R1YWxUeXBlPXd0LHRoaXMudXBjYXN0PVJ0LHRoaXMuZG93bmNhc3Q9bXQsdGhpcy5wdXJlVmlydHVhbEZ1bmN0aW9ucz1bXX1mdW5jdGlvbiBEYyhVLEcsWCl7Zm9yKDtHIT09WDspRy51cGNhc3R8fExlKCJFeHBlY3RlZCBudWxsIG9yIGluc3RhbmNlIG9mICIrWC5uYW1lKyIsIGdvdCBhbiBpbnN0YW5jZSBvZiAiK0cubmFtZSksVT1HLnVwY2FzdChVKSxHPUcuYmFzZUNsYXNzO3JldHVybiBVfWZ1bmN0aW9uIFB1KFUsRyl7aWYoRz09PW51bGwpcmV0dXJuIHRoaXMuaXNSZWZlcmVuY2UmJkxlKCJudWxsIGlzIG5vdCBhIHZhbGlkICIrdGhpcy5uYW1lKSwwO0cuJCR8fExlKCdDYW5ub3QgcGFzcyAiJyt3aShHKSsnIiBhcyBhICcrdGhpcy5uYW1lKSxHLiQkLnB0cnx8TGUoIkNhbm5vdCBwYXNzIGRlbGV0ZWQgb2JqZWN0IGFzIGEgcG9pbnRlciBvZiB0eXBlICIrdGhpcy5uYW1lKTt2YXIgWD1HLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLFE9RGMoRy4kJC5wdHIsWCx0aGlzLnJlZ2lzdGVyZWRDbGFzcyk7cmV0dXJuIFF9ZnVuY3Rpb24gTXUoVSxHKXt2YXIgWDtpZihHPT09bnVsbClyZXR1cm4gdGhpcy5pc1JlZmVyZW5jZSYmTGUoIm51bGwgaXMgbm90IGEgdmFsaWQgIit0aGlzLm5hbWUpLHRoaXMuaXNTbWFydFBvaW50ZXI/KFg9dGhpcy5yYXdDb25zdHJ1Y3RvcigpLFUhPT1udWxsJiZVLnB1c2godGhpcy5yYXdEZXN0cnVjdG9yLFgpLFgpOjA7Ry4kJHx8TGUoJ0Nhbm5vdCBwYXNzICInK3dpKEcpKyciIGFzIGEgJyt0aGlzLm5hbWUpLEcuJCQucHRyfHxMZSgiQ2Fubm90IHBhc3MgZGVsZXRlZCBvYmplY3QgYXMgYSBwb2ludGVyIG9mIHR5cGUgIit0aGlzLm5hbWUpLCF0aGlzLmlzQ29uc3QmJkcuJCQucHRyVHlwZS5pc0NvbnN0JiZMZSgiQ2Fubm90IGNvbnZlcnQgYXJndW1lbnQgb2YgdHlwZSAiKyhHLiQkLnNtYXJ0UHRyVHlwZT9HLiQkLnNtYXJ0UHRyVHlwZS5uYW1lOkcuJCQucHRyVHlwZS5uYW1lKSsiIHRvIHBhcmFtZXRlciB0eXBlICIrdGhpcy5uYW1lKTt2YXIgUT1HLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzO2lmKFg9RGMoRy4kJC5wdHIsUSx0aGlzLnJlZ2lzdGVyZWRDbGFzcyksdGhpcy5pc1NtYXJ0UG9pbnRlcilzd2l0Y2goRy4kJC5zbWFydFB0cj09PXZvaWQgMCYmTGUoIlBhc3NpbmcgcmF3IHBvaW50ZXIgdG8gc21hcnQgcG9pbnRlciBpcyBpbGxlZ2FsIiksdGhpcy5zaGFyaW5nUG9saWN5KXtjYXNlIDA6Ry4kJC5zbWFydFB0clR5cGU9PT10aGlzP1g9Ry4kJC5zbWFydFB0cjpMZSgiQ2Fubm90IGNvbnZlcnQgYXJndW1lbnQgb2YgdHlwZSAiKyhHLiQkLnNtYXJ0UHRyVHlwZT9HLiQkLnNtYXJ0UHRyVHlwZS5uYW1lOkcuJCQucHRyVHlwZS5uYW1lKSsiIHRvIHBhcmFtZXRlciB0eXBlICIrdGhpcy5uYW1lKTticmVhaztjYXNlIDE6WD1HLiQkLnNtYXJ0UHRyO2JyZWFrO2Nhc2UgMjppZihHLiQkLnNtYXJ0UHRyVHlwZT09PXRoaXMpWD1HLiQkLnNtYXJ0UHRyO2Vsc2V7dmFyIHV0PUcuY2xvbmUoKTtYPXRoaXMucmF3U2hhcmUoWCx1cihmdW5jdGlvbigpe3V0LmRlbGV0ZSgpfSkpLFUhPT1udWxsJiZVLnB1c2godGhpcy5yYXdEZXN0cnVjdG9yLFgpfWJyZWFrO2RlZmF1bHQ6TGUoIlVuc3VwcG9ydGluZyBzaGFyaW5nIHBvbGljeSIpfXJldHVybiBYfWZ1bmN0aW9uIE51KFUsRyl7aWYoRz09PW51bGwpcmV0dXJuIHRoaXMuaXNSZWZlcmVuY2UmJkxlKCJudWxsIGlzIG5vdCBhIHZhbGlkICIrdGhpcy5uYW1lKSwwO0cuJCR8fExlKCdDYW5ub3QgcGFzcyAiJyt3aShHKSsnIiBhcyBhICcrdGhpcy5uYW1lKSxHLiQkLnB0cnx8TGUoIkNhbm5vdCBwYXNzIGRlbGV0ZWQgb2JqZWN0IGFzIGEgcG9pbnRlciBvZiB0eXBlICIrdGhpcy5uYW1lKSxHLiQkLnB0clR5cGUuaXNDb25zdCYmTGUoIkNhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgIitHLiQkLnB0clR5cGUubmFtZSsiIHRvIHBhcmFtZXRlciB0eXBlICIrdGhpcy5uYW1lKTt2YXIgWD1HLiQkLnB0clR5cGUucmVnaXN0ZXJlZENsYXNzLFE9RGMoRy4kJC5wdHIsWCx0aGlzLnJlZ2lzdGVyZWRDbGFzcyk7cmV0dXJuIFF9ZnVuY3Rpb24gSXUoVSl7cmV0dXJuIHRoaXMucmF3R2V0UG9pbnRlZSYmKFU9dGhpcy5yYXdHZXRQb2ludGVlKFUpKSxVfWZ1bmN0aW9uIHZ1KFUpe3RoaXMucmF3RGVzdHJ1Y3RvciYmdGhpcy5yYXdEZXN0cnVjdG9yKFUpfWZ1bmN0aW9uIEZ1KFUpe1UhPT1udWxsJiZVLmRlbGV0ZSgpfWZ1bmN0aW9uIFhhKFUsRyxYKXtpZihHPT09WClyZXR1cm4gVTtpZihYLmJhc2VDbGFzcz09PXZvaWQgMClyZXR1cm4gbnVsbDt2YXIgUT1YYShVLEcsWC5iYXNlQ2xhc3MpO3JldHVybiBRPT09bnVsbD9udWxsOlguZG93bmNhc3QoUSl9ZnVuY3Rpb24gTHUoKXtyZXR1cm4gT2JqZWN0LmtleXModHMpLmxlbmd0aH1mdW5jdGlvbiBEdSgpe3ZhciBVPVtdO2Zvcih2YXIgRyBpbiB0cyl0cy5oYXNPd25Qcm9wZXJ0eShHKSYmVS5wdXNoKHRzW0ddKTtyZXR1cm4gVX1mdW5jdGlvbiBCdShVKXtRaT1VLEppLmxlbmd0aCYmUWkmJlFpKEZjKX1mdW5jdGlvbiBVdSgpe24uZ2V0SW5oZXJpdGVkSW5zdGFuY2VDb3VudD1MdSxuLmdldExpdmVJbmhlcml0ZWRJbnN0YW5jZXM9RHUsbi5mbHVzaFBlbmRpbmdEZWxldGVzPUZjLG4uc2V0RGVsYXlGdW5jdGlvbj1CdX12YXIgdHM9e307ZnVuY3Rpb24ga3UoVSxHKXtmb3IoRz09PXZvaWQgMCYmTGUoInB0ciBzaG91bGQgbm90IGJlIHVuZGVmaW5lZCIpO1UuYmFzZUNsYXNzOylHPVUudXBjYXN0KEcpLFU9VS5iYXNlQ2xhc3M7cmV0dXJuIEd9ZnVuY3Rpb24gR3UoVSxHKXtyZXR1cm4gRz1rdShVLEcpLHRzW0ddfWZ1bmN0aW9uIEZzKFUsRyl7KCFHLnB0clR5cGV8fCFHLnB0cikmJmJpKCJtYWtlQ2xhc3NIYW5kbGUgcmVxdWlyZXMgcHRyIGFuZCBwdHJUeXBlIik7dmFyIFg9ISFHLnNtYXJ0UHRyVHlwZSxRPSEhRy5zbWFydFB0cjtyZXR1cm4gWCE9PVEmJmJpKCJCb3RoIHNtYXJ0UHRyVHlwZSBhbmQgc21hcnRQdHIgbXVzdCBiZSBzcGVjaWZpZWQiKSxHLmNvdW50PXt2YWx1ZToxfSxaaShPYmplY3QuY3JlYXRlKFUseyQkOnt2YWx1ZTpHfX0pKX1mdW5jdGlvbiBWdShVKXt2YXIgRz10aGlzLmdldFBvaW50ZWUoVSk7aWYoIUcpcmV0dXJuIHRoaXMuZGVzdHJ1Y3RvcihVKSxudWxsO3ZhciBYPUd1KHRoaXMucmVnaXN0ZXJlZENsYXNzLEcpO2lmKFghPT12b2lkIDApe2lmKFguJCQuY291bnQudmFsdWU9PT0wKXJldHVybiBYLiQkLnB0cj1HLFguJCQuc21hcnRQdHI9VSxYLmNsb25lKCk7dmFyIFE9WC5jbG9uZSgpO3JldHVybiB0aGlzLmRlc3RydWN0b3IoVSksUX1mdW5jdGlvbiB1dCgpe3JldHVybiB0aGlzLmlzU21hcnRQb2ludGVyP0ZzKHRoaXMucmVnaXN0ZXJlZENsYXNzLmluc3RhbmNlUHJvdG90eXBlLHtwdHJUeXBlOnRoaXMucG9pbnRlZVR5cGUscHRyOkcsc21hcnRQdHJUeXBlOnRoaXMsc21hcnRQdHI6VX0pOkZzKHRoaXMucmVnaXN0ZXJlZENsYXNzLmluc3RhbmNlUHJvdG90eXBlLHtwdHJUeXBlOnRoaXMscHRyOlV9KX12YXIgd3Q9dGhpcy5yZWdpc3RlcmVkQ2xhc3MuZ2V0QWN0dWFsVHlwZShHKSxSdD1LYVt3dF07aWYoIVJ0KXJldHVybiB1dC5jYWxsKHRoaXMpO3ZhciBtdDt0aGlzLmlzQ29uc3Q/bXQ9UnQuY29uc3RQb2ludGVyVHlwZTptdD1SdC5wb2ludGVyVHlwZTt2YXIgX3Q9WGEoRyx0aGlzLnJlZ2lzdGVyZWRDbGFzcyxtdC5yZWdpc3RlcmVkQ2xhc3MpO3JldHVybiBfdD09PW51bGw/dXQuY2FsbCh0aGlzKTp0aGlzLmlzU21hcnRQb2ludGVyP0ZzKG10LnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSx7cHRyVHlwZTptdCxwdHI6X3Qsc21hcnRQdHJUeXBlOnRoaXMsc21hcnRQdHI6VX0pOkZzKG10LnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSx7cHRyVHlwZTptdCxwdHI6X3R9KX1mdW5jdGlvbiB6dSgpe2ZyLnByb3RvdHlwZS5nZXRQb2ludGVlPUl1LGZyLnByb3RvdHlwZS5kZXN0cnVjdG9yPXZ1LGZyLnByb3RvdHlwZS5hcmdQYWNrQWR2YW5jZT04LGZyLnByb3RvdHlwZS5yZWFkVmFsdWVGcm9tUG9pbnRlcj1hcixmci5wcm90b3R5cGUuZGVsZXRlT2JqZWN0PUZ1LGZyLnByb3RvdHlwZS5mcm9tV2lyZVR5cGU9VnV9ZnVuY3Rpb24gZnIoVSxHLFgsUSx1dCx3dCxSdCxtdCxfdCxxdCxKdCl7dGhpcy5uYW1lPVUsdGhpcy5yZWdpc3RlcmVkQ2xhc3M9Ryx0aGlzLmlzUmVmZXJlbmNlPVgsdGhpcy5pc0NvbnN0PVEsdGhpcy5pc1NtYXJ0UG9pbnRlcj11dCx0aGlzLnBvaW50ZWVUeXBlPXd0LHRoaXMuc2hhcmluZ1BvbGljeT1SdCx0aGlzLnJhd0dldFBvaW50ZWU9bXQsdGhpcy5yYXdDb25zdHJ1Y3Rvcj1fdCx0aGlzLnJhd1NoYXJlPXF0LHRoaXMucmF3RGVzdHJ1Y3Rvcj1KdCwhdXQmJkcuYmFzZUNsYXNzPT09dm9pZCAwP1E/KHRoaXMudG9XaXJlVHlwZT1QdSx0aGlzLmRlc3RydWN0b3JGdW5jdGlvbj1udWxsKToodGhpcy50b1dpcmVUeXBlPU51LHRoaXMuZGVzdHJ1Y3RvckZ1bmN0aW9uPW51bGwpOnRoaXMudG9XaXJlVHlwZT1NdX1mdW5jdGlvbiBZYShVLEcsWCl7bi5oYXNPd25Qcm9wZXJ0eShVKXx8YmkoIlJlcGxhY2luZyBub25leGlzdGFudCBwdWJsaWMgc3ltYm9sIiksbltVXS5vdmVybG9hZFRhYmxlIT09dm9pZCAwJiZYIT09dm9pZCAwP25bVV0ub3ZlcmxvYWRUYWJsZVtYXT1HOihuW1VdPUcsbltVXS5hcmdDb3VudD1YKX1mdW5jdGlvbiBqdShVLEcsWCl7dmFyIFE9blsiZHluQ2FsbF8iK1VdO3JldHVybiBYJiZYLmxlbmd0aD9RLmFwcGx5KG51bGwsW0ddLmNvbmNhdChYKSk6US5jYWxsKG51bGwsRyl9ZnVuY3Rpb24gSHUoVSxHLFgpe3JldHVybiBVLmluZGV4T2YoImoiKSE9LTE/anUoVSxHLFgpOmdlLmdldChHKS5hcHBseShudWxsLFgpfWZ1bmN0aW9uIHF1KFUsRyl7dmFyIFg9W107cmV0dXJuIGZ1bmN0aW9uKCl7WC5sZW5ndGg9YXJndW1lbnRzLmxlbmd0aDtmb3IodmFyIFE9MDtRPGFyZ3VtZW50cy5sZW5ndGg7USsrKVhbUV09YXJndW1lbnRzW1FdO3JldHVybiBIdShVLEcsWCl9fWZ1bmN0aW9uIEhvKFUsRyl7VT1EbihVKTtmdW5jdGlvbiBYKCl7cmV0dXJuIFUuaW5kZXhPZigiaiIpIT0tMT9xdShVLEcpOmdlLmdldChHKX12YXIgUT1YKCk7cmV0dXJuIHR5cGVvZiBRIT0iZnVuY3Rpb24iJiZMZSgidW5rbm93biBmdW5jdGlvbiBwb2ludGVyIHdpdGggc2lnbmF0dXJlICIrVSsiOiAiK0cpLFF9dmFyICRhPXZvaWQgMDtmdW5jdGlvbiBaYShVKXt2YXIgRz10dChVKSxYPURuKEcpO3JldHVybiBLKEcpLFh9ZnVuY3Rpb24gTHMoVSxHKXt2YXIgWD1bXSxRPXt9O2Z1bmN0aW9uIHV0KHd0KXtpZighUVt3dF0mJiFqb1t3dF0pe2lmKE5yW3d0XSl7TnJbd3RdLmZvckVhY2godXQpO3JldHVybn1YLnB1c2god3QpLFFbd3RdPSEwfX10aHJvdyBHLmZvckVhY2godXQpLG5ldyAkYShVKyI6ICIrWC5tYXAoWmEpLmpvaW4oWyIsICJdKSl9ZnVuY3Rpb24gS3UoVSxHLFgsUSx1dCx3dCxSdCxtdCxfdCxxdCxKdCx3ZSxKZSl7SnQ9RG4oSnQpLHd0PUhvKHV0LHd0KSxtdCYmKG10PUhvKFJ0LG10KSkscXQmJihxdD1IbyhfdCxxdCkpLEplPUhvKHdlLEplKTt2YXIgYm49WWkoSnQpO0xjKGJuLGZ1bmN0aW9uKCl7THMoIkNhbm5vdCBjb25zdHJ1Y3QgIitKdCsiIGR1ZSB0byB1bmJvdW5kIHR5cGVzIixbUV0pfSksb28oW1UsRyxYXSxRP1tRXTpbXSxmdW5jdGlvbihybyl7cm89cm9bMF07dmFyIElvLGxyO1E/KElvPXJvLnJlZ2lzdGVyZWRDbGFzcyxscj1Jby5pbnN0YW5jZVByb3RvdHlwZSk6bHI9RnIucHJvdG90eXBlO3ZhciBacj1JcihibixmdW5jdGlvbigpe2lmKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSE9PW9mKXRocm93IG5ldyBUaSgiVXNlICduZXcnIHRvIGNvbnN0cnVjdCAiK0p0KTtpZihFaS5jb25zdHJ1Y3Rvcl9ib2R5PT09dm9pZCAwKXRocm93IG5ldyBUaShKdCsiIGhhcyBubyBhY2Nlc3NpYmxlIGNvbnN0cnVjdG9yIik7dmFyIHUxPUVpLmNvbnN0cnVjdG9yX2JvZHlbYXJndW1lbnRzLmxlbmd0aF07aWYodTE9PT12b2lkIDApdGhyb3cgbmV3IFRpKCJUcmllZCB0byBpbnZva2UgY3RvciBvZiAiK0p0KyIgd2l0aCBpbnZhbGlkIG51bWJlciBvZiBwYXJhbWV0ZXJzICgiK2FyZ3VtZW50cy5sZW5ndGgrIikgLSBleHBlY3RlZCAoIitPYmplY3Qua2V5cyhFaS5jb25zdHJ1Y3Rvcl9ib2R5KS50b1N0cmluZygpKyIpIHBhcmFtZXRlcnMgaW5zdGVhZCEiKTtyZXR1cm4gdTEuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksb2Y9T2JqZWN0LmNyZWF0ZShscix7Y29uc3RydWN0b3I6e3ZhbHVlOlpyfX0pO1pyLnByb3RvdHlwZT1vZjt2YXIgRWk9bmV3IHh1KEp0LFpyLG9mLEplLElvLHd0LG10LHF0KSxLUz1uZXcgZnIoSnQsRWksITAsITEsITEpLGExPW5ldyBmcihKdCsiKiIsRWksITEsITEsITEpLGYxPW5ldyBmcihKdCsiIGNvbnN0KiIsRWksITEsITAsITEpO3JldHVybiBLYVtVXT17cG9pbnRlclR5cGU6YTEsY29uc3RQb2ludGVyVHlwZTpmMX0sWWEoYm4sWnIpLFtLUyxhMSxmMV19KX1mdW5jdGlvbiBCYyhVLEcpe2Zvcih2YXIgWD1bXSxRPTA7UTxVO1ErKylYLnB1c2gocmVbKEc+PjIpK1FdKTtyZXR1cm4gWH1mdW5jdGlvbiBXdShVLEcsWCxRLHV0LHd0KXtMKEc+MCk7dmFyIFJ0PUJjKEcsWCk7dXQ9SG8oUSx1dCk7dmFyIG10PVt3dF0sX3Q9W107b28oW10sW1VdLGZ1bmN0aW9uKHF0KXtxdD1xdFswXTt2YXIgSnQ9ImNvbnN0cnVjdG9yICIrcXQubmFtZTtpZihxdC5yZWdpc3RlcmVkQ2xhc3MuY29uc3RydWN0b3JfYm9keT09PXZvaWQgMCYmKHF0LnJlZ2lzdGVyZWRDbGFzcy5jb25zdHJ1Y3Rvcl9ib2R5PVtdKSxxdC5yZWdpc3RlcmVkQ2xhc3MuY29uc3RydWN0b3JfYm9keVtHLTFdIT09dm9pZCAwKXRocm93IG5ldyBUaSgiQ2Fubm90IHJlZ2lzdGVyIG11bHRpcGxlIGNvbnN0cnVjdG9ycyB3aXRoIGlkZW50aWNhbCBudW1iZXIgb2YgcGFyYW1ldGVycyAoIisoRy0xKSsiKSBmb3IgY2xhc3MgJyIrcXQubmFtZSsiJyEgT3ZlcmxvYWQgcmVzb2x1dGlvbiBpcyBjdXJyZW50bHkgb25seSBwZXJmb3JtZWQgdXNpbmcgdGhlIHBhcmFtZXRlciBjb3VudCwgbm90IGFjdHVhbCB0eXBlIGluZm8hIik7cmV0dXJuIHF0LnJlZ2lzdGVyZWRDbGFzcy5jb25zdHJ1Y3Rvcl9ib2R5W0ctMV09ZnVuY3Rpb24oKXtMcygiQ2Fubm90IGNvbnN0cnVjdCAiK3F0Lm5hbWUrIiBkdWUgdG8gdW5ib3VuZCB0eXBlcyIsUnQpfSxvbyhbXSxSdCxmdW5jdGlvbih3ZSl7cmV0dXJuIHF0LnJlZ2lzdGVyZWRDbGFzcy5jb25zdHJ1Y3Rvcl9ib2R5W0ctMV09ZnVuY3Rpb24oKXthcmd1bWVudHMubGVuZ3RoIT09Ry0xJiZMZShKdCsiIGNhbGxlZCB3aXRoICIrYXJndW1lbnRzLmxlbmd0aCsiIGFyZ3VtZW50cywgZXhwZWN0ZWQgIisoRy0xKSksX3QubGVuZ3RoPTAsbXQubGVuZ3RoPUc7Zm9yKHZhciBibj0xO2JuPEc7KytibiltdFtibl09d2VbYm5dLnRvV2lyZVR5cGUoX3QsYXJndW1lbnRzW2JuLTFdKTt2YXIgcm89dXQuYXBwbHkobnVsbCxtdCk7cmV0dXJuIFJuKF90KSx3ZVswXS5mcm9tV2lyZVR5cGUocm8pfSxbXX0pLFtdfSl9ZnVuY3Rpb24gUWEoVSxHKXtpZighKFUgaW5zdGFuY2VvZiBGdW5jdGlvbikpdGhyb3cgbmV3IFR5cGVFcnJvcigibmV3XyBjYWxsZWQgd2l0aCBjb25zdHJ1Y3RvciB0eXBlICIrdHlwZW9mIFUrIiB3aGljaCBpcyBub3QgYSBmdW5jdGlvbiIpO3ZhciBYPUlyKFUubmFtZXx8InVua25vd25GdW5jdGlvbk5hbWUiLGZ1bmN0aW9uKCl7fSk7WC5wcm90b3R5cGU9VS5wcm90b3R5cGU7dmFyIFE9bmV3IFgsdXQ9VS5hcHBseShRLEcpO3JldHVybiB1dCBpbnN0YW5jZW9mIE9iamVjdD91dDpRfWZ1bmN0aW9uIEphKFUsRyxYLFEsdXQpe3ZhciB3dD1HLmxlbmd0aDt3dDwyJiZMZSgiYXJnVHlwZXMgYXJyYXkgc2l6ZSBtaXNtYXRjaCEgTXVzdCBhdCBsZWFzdCBnZXQgcmV0dXJuIHZhbHVlIGFuZCAndGhpcycgdHlwZXMhIik7Zm9yKHZhciBSdD1HWzFdIT09bnVsbCYmWCE9PW51bGwsbXQ9ITEsX3Q9MTtfdDxHLmxlbmd0aDsrK190KWlmKEdbX3RdIT09bnVsbCYmR1tfdF0uZGVzdHJ1Y3RvckZ1bmN0aW9uPT09dm9pZCAwKXttdD0hMDticmVha31mb3IodmFyIHF0PUdbMF0ubmFtZSE9PSJ2b2lkIixKdD0iIix3ZT0iIixfdD0wO190PHd0LTI7KytfdClKdCs9KF90IT09MD8iLCAiOiIiKSsiYXJnIitfdCx3ZSs9KF90IT09MD8iLCAiOiIiKSsiYXJnIitfdCsiV2lyZWQiO3ZhciBKZT0icmV0dXJuIGZ1bmN0aW9uICIrWWkoVSkrIigiK0p0K2ApIHsKaWYgKGFyZ3VtZW50cy5sZW5ndGggIT09IGArKHd0LTIpK2ApIHsKdGhyb3dCaW5kaW5nRXJyb3IoJ2Z1bmN0aW9uIGArVSsiIGNhbGxlZCB3aXRoICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBhcmd1bWVudHMsIGV4cGVjdGVkICIrKHd0LTIpK2AgYXJncyEnKTsKfQpgO210JiYoSmUrPWB2YXIgZGVzdHJ1Y3RvcnMgPSBbXTsKYCk7dmFyIGJuPW10PyJkZXN0cnVjdG9ycyI6Im51bGwiLHJvPVsidGhyb3dCaW5kaW5nRXJyb3IiLCJpbnZva2VyIiwiZm4iLCJydW5EZXN0cnVjdG9ycyIsInJldFR5cGUiLCJjbGFzc1BhcmFtIl0sSW89W0xlLFEsdXQsUm4sR1swXSxHWzFdXTtSdCYmKEplKz0idmFyIHRoaXNXaXJlZCA9IGNsYXNzUGFyYW0udG9XaXJlVHlwZSgiK2JuK2AsIHRoaXMpOwpgKTtmb3IodmFyIF90PTA7X3Q8d3QtMjsrK190KUplKz0idmFyIGFyZyIrX3QrIldpcmVkID0gYXJnVHlwZSIrX3QrIi50b1dpcmVUeXBlKCIrYm4rIiwgYXJnIitfdCsiKTsgLy8gIitHW190KzJdLm5hbWUrYApgLHJvLnB1c2goImFyZ1R5cGUiK190KSxJby5wdXNoKEdbX3QrMl0pO2lmKFJ0JiYod2U9InRoaXNXaXJlZCIrKHdlLmxlbmd0aD4wPyIsICI6IiIpK3dlKSxKZSs9KHF0PyJ2YXIgcnYgPSAiOiIiKSsiaW52b2tlcihmbiIrKHdlLmxlbmd0aD4wPyIsICI6IiIpK3dlK2ApOwpgLG10KUplKz1gcnVuRGVzdHJ1Y3RvcnMoZGVzdHJ1Y3RvcnMpOwpgO2Vsc2UgZm9yKHZhciBfdD1SdD8xOjI7X3Q8Ry5sZW5ndGg7KytfdCl7dmFyIGxyPV90PT09MT8idGhpc1dpcmVkIjoiYXJnIisoX3QtMikrIldpcmVkIjtHW190XS5kZXN0cnVjdG9yRnVuY3Rpb24hPT1udWxsJiYoSmUrPWxyKyJfZHRvcigiK2xyKyIpOyAvLyAiK0dbX3RdLm5hbWUrYApgLHJvLnB1c2gobHIrIl9kdG9yIiksSW8ucHVzaChHW190XS5kZXN0cnVjdG9yRnVuY3Rpb24pKX1xdCYmKEplKz1gdmFyIHJldCA9IHJldFR5cGUuZnJvbVdpcmVUeXBlKHJ2KTsKcmV0dXJuIHJldDsKYCksSmUrPWB9CmAscm8ucHVzaChKZSk7dmFyIFpyPVFhKEZ1bmN0aW9uLHJvKS5hcHBseShudWxsLElvKTtyZXR1cm4gWnJ9ZnVuY3Rpb24gWHUoVSxHLFgsUSx1dCx3dCxSdCxtdCl7dmFyIF90PUJjKFgsUSk7Rz1EbihHKSx3dD1Ibyh1dCx3dCksb28oW10sW1VdLGZ1bmN0aW9uKHF0KXtxdD1xdFswXTt2YXIgSnQ9cXQubmFtZSsiLiIrRzttdCYmcXQucmVnaXN0ZXJlZENsYXNzLnB1cmVWaXJ0dWFsRnVuY3Rpb25zLnB1c2goRyk7ZnVuY3Rpb24gd2UoKXtMcygiQ2Fubm90IGNhbGwgIitKdCsiIGR1ZSB0byB1bmJvdW5kIHR5cGVzIixfdCl9dmFyIEplPXF0LnJlZ2lzdGVyZWRDbGFzcy5pbnN0YW5jZVByb3RvdHlwZSxibj1KZVtHXTtyZXR1cm4gYm49PT12b2lkIDB8fGJuLm92ZXJsb2FkVGFibGU9PT12b2lkIDAmJmJuLmNsYXNzTmFtZSE9PXF0Lm5hbWUmJmJuLmFyZ0NvdW50PT09WC0yPyh3ZS5hcmdDb3VudD1YLTIsd2UuY2xhc3NOYW1lPXF0Lm5hbWUsSmVbR109d2UpOihXYShKZSxHLEp0KSxKZVtHXS5vdmVybG9hZFRhYmxlW1gtMl09d2UpLG9vKFtdLF90LGZ1bmN0aW9uKHJvKXt2YXIgSW89SmEoSnQscm8scXQsd3QsUnQpO3JldHVybiBKZVtHXS5vdmVybG9hZFRhYmxlPT09dm9pZCAwPyhJby5hcmdDb3VudD1YLTIsSmVbR109SW8pOkplW0ddLm92ZXJsb2FkVGFibGVbWC0yXT1JbyxbXX0pLFtdfSl9ZnVuY3Rpb24gWXUoVSxHLFgpe1U9RG4oVSksb28oW10sW0ddLGZ1bmN0aW9uKFEpe3JldHVybiBRPVFbMF0sbltVXT1RLmZyb21XaXJlVHlwZShYKSxbXX0pfXZhciBVYz1bXSxBbz1be30se3ZhbHVlOnZvaWQgMH0se3ZhbHVlOm51bGx9LHt2YWx1ZTohMH0se3ZhbHVlOiExfV07ZnVuY3Rpb24ga2MoVSl7VT40JiYtLUFvW1VdLnJlZmNvdW50PT09MCYmKEFvW1VdPXZvaWQgMCxVYy5wdXNoKFUpKX1mdW5jdGlvbiAkdSgpe2Zvcih2YXIgVT0wLEc9NTtHPEFvLmxlbmd0aDsrK0cpQW9bR10hPT12b2lkIDAmJisrVTtyZXR1cm4gVX1mdW5jdGlvbiBadSgpe2Zvcih2YXIgVT01O1U8QW8ubGVuZ3RoOysrVSlpZihBb1tVXSE9PXZvaWQgMClyZXR1cm4gQW9bVV07cmV0dXJuIG51bGx9ZnVuY3Rpb24gUXUoKXtuLmNvdW50X2VtdmFsX2hhbmRsZXM9JHUsbi5nZXRfZmlyc3RfZW12YWw9WnV9ZnVuY3Rpb24gdXIoVSl7c3dpdGNoKFUpe2Nhc2Ugdm9pZCAwOnJldHVybiAxO2Nhc2UgbnVsbDpyZXR1cm4gMjtjYXNlITA6cmV0dXJuIDM7Y2FzZSExOnJldHVybiA0O2RlZmF1bHQ6e3ZhciBHPVVjLmxlbmd0aD9VYy5wb3AoKTpBby5sZW5ndGg7cmV0dXJuIEFvW0ddPXtyZWZjb3VudDoxLHZhbHVlOlV9LEd9fX1mdW5jdGlvbiBKdShVLEcpe0c9RG4oRyksb3IoVSx7bmFtZTpHLGZyb21XaXJlVHlwZTpmdW5jdGlvbihYKXt2YXIgUT1Bb1tYXS52YWx1ZTtyZXR1cm4ga2MoWCksUX0sdG9XaXJlVHlwZTpmdW5jdGlvbihYLFEpe3JldHVybiB1cihRKX0sYXJnUGFja0FkdmFuY2U6OCxyZWFkVmFsdWVGcm9tUG9pbnRlcjphcixkZXN0cnVjdG9yRnVuY3Rpb246bnVsbH0pfWZ1bmN0aW9uIHRsKFUsRyxYKXtzd2l0Y2goRyl7Y2FzZSAwOnJldHVybiBmdW5jdGlvbihRKXt2YXIgdXQ9WD9ydDpDdDtyZXR1cm4gdGhpcy5mcm9tV2lyZVR5cGUodXRbUV0pfTtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKFEpe3ZhciB1dD1YP2t0OmxlO3JldHVybiB0aGlzLmZyb21XaXJlVHlwZSh1dFtRPj4xXSl9O2Nhc2UgMjpyZXR1cm4gZnVuY3Rpb24oUSl7dmFyIHV0PVg/cmU6cGU7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKHV0W1E+PjJdKX07ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGludGVnZXIgdHlwZTogIitVKX19ZnVuY3Rpb24gZWwoVSxHLFgsUSl7dmFyIHV0PXZyKFgpO0c9RG4oRyk7ZnVuY3Rpb24gd3QoKXt9d3QudmFsdWVzPXt9LG9yKFUse25hbWU6Ryxjb25zdHJ1Y3Rvcjp3dCxmcm9tV2lyZVR5cGU6ZnVuY3Rpb24oUnQpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLnZhbHVlc1tSdF19LHRvV2lyZVR5cGU6ZnVuY3Rpb24oUnQsbXQpe3JldHVybiBtdC52YWx1ZX0sYXJnUGFja0FkdmFuY2U6OCxyZWFkVmFsdWVGcm9tUG9pbnRlcjp0bChHLHV0LFEpLGRlc3RydWN0b3JGdW5jdGlvbjpudWxsfSksTGMoRyx3dCl9ZnVuY3Rpb24gRHMoVSxHKXt2YXIgWD1qb1tVXTtyZXR1cm4gWD09PXZvaWQgMCYmTGUoRysiIGhhcyB1bmtub3duIHR5cGUgIitaYShVKSksWH1mdW5jdGlvbiBubChVLEcsWCl7dmFyIFE9RHMoVSwiZW51bSIpO0c9RG4oRyk7dmFyIHV0PVEuY29uc3RydWN0b3Isd3Q9T2JqZWN0LmNyZWF0ZShRLmNvbnN0cnVjdG9yLnByb3RvdHlwZSx7dmFsdWU6e3ZhbHVlOlh9LGNvbnN0cnVjdG9yOnt2YWx1ZTpJcihRLm5hbWUrIl8iK0csZnVuY3Rpb24oKXt9KX19KTt1dC52YWx1ZXNbWF09d3QsdXRbR109d3R9ZnVuY3Rpb24gd2koVSl7aWYoVT09PW51bGwpcmV0dXJuIm51bGwiO3ZhciBHPXR5cGVvZiBVO3JldHVybiBHPT09Im9iamVjdCJ8fEc9PT0iYXJyYXkifHxHPT09ImZ1bmN0aW9uIj9VLnRvU3RyaW5nKCk6IiIrVX1mdW5jdGlvbiBvbChVLEcpe3N3aXRjaChHKXtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKFgpe3JldHVybiB0aGlzLmZyb21XaXJlVHlwZShmZVtYPj4yXSl9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24oWCl7cmV0dXJuIHRoaXMuZnJvbVdpcmVUeXBlKFp0W1g+PjNdKX07ZGVmYXVsdDp0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGZsb2F0IHR5cGU6ICIrVSl9fWZ1bmN0aW9uIHJsKFUsRyxYKXt2YXIgUT12cihYKTtHPURuKEcpLG9yKFUse25hbWU6Ryxmcm9tV2lyZVR5cGU6ZnVuY3Rpb24odXQpe3JldHVybiB1dH0sdG9XaXJlVHlwZTpmdW5jdGlvbih1dCx3dCl7aWYodHlwZW9mIHd0IT0ibnVtYmVyIiYmdHlwZW9mIHd0IT0iYm9vbGVhbiIpdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgIicrd2kod3QpKyciIHRvICcrdGhpcy5uYW1lKTtyZXR1cm4gd3R9LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6b2woRyxRKSxkZXN0cnVjdG9yRnVuY3Rpb246bnVsbH0pfWZ1bmN0aW9uIGlsKFUsRyxYLFEsdXQsd3Qpe3ZhciBSdD1CYyhHLFgpO1U9RG4oVSksdXQ9SG8oUSx1dCksTGMoVSxmdW5jdGlvbigpe0xzKCJDYW5ub3QgY2FsbCAiK1UrIiBkdWUgdG8gdW5ib3VuZCB0eXBlcyIsUnQpfSxHLTEpLG9vKFtdLFJ0LGZ1bmN0aW9uKG10KXt2YXIgX3Q9W210WzBdLG51bGxdLmNvbmNhdChtdC5zbGljZSgxKSk7cmV0dXJuIFlhKFUsSmEoVSxfdCxudWxsLHV0LHd0KSxHLTEpLFtdfSl9ZnVuY3Rpb24gc2woVSxHLFgpe3N3aXRjaChHKXtjYXNlIDA6cmV0dXJuIFg/ZnVuY3Rpb24odXQpe3JldHVybiBydFt1dF19OmZ1bmN0aW9uKHV0KXtyZXR1cm4gQ3RbdXRdfTtjYXNlIDE6cmV0dXJuIFg/ZnVuY3Rpb24odXQpe3JldHVybiBrdFt1dD4+MV19OmZ1bmN0aW9uKHV0KXtyZXR1cm4gbGVbdXQ+PjFdfTtjYXNlIDI6cmV0dXJuIFg/ZnVuY3Rpb24odXQpe3JldHVybiByZVt1dD4+Ml19OmZ1bmN0aW9uKHV0KXtyZXR1cm4gcGVbdXQ+PjJdfTtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gaW50ZWdlciB0eXBlOiAiK1UpfX1mdW5jdGlvbiBjbChVLEcsWCxRLHV0KXtHPURuKEcpLHV0PT09LTEmJih1dD00Mjk0OTY3Mjk1KTt2YXIgd3Q9dnIoWCksUnQ9ZnVuY3Rpb24ocXQpe3JldHVybiBxdH07aWYoUT09PTApe3ZhciBtdD0zMi04Klg7UnQ9ZnVuY3Rpb24ocXQpe3JldHVybiBxdDw8bXQ+Pj5tdH19dmFyIF90PUcuaW5kZXhPZigidW5zaWduZWQiKSE9LTE7b3IoVSx7bmFtZTpHLGZyb21XaXJlVHlwZTpSdCx0b1dpcmVUeXBlOmZ1bmN0aW9uKHF0LEp0KXtpZih0eXBlb2YgSnQhPSJudW1iZXIiJiZ0eXBlb2YgSnQhPSJib29sZWFuIil0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCAiJyt3aShKdCkrJyIgdG8gJyt0aGlzLm5hbWUpO2lmKEp0PFF8fEp0PnV0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1Bhc3NpbmcgYSBudW1iZXIgIicrd2koSnQpKyciIGZyb20gSlMgc2lkZSB0byBDL0MrKyBzaWRlIHRvIGFuIGFyZ3VtZW50IG9mIHR5cGUgIicrRysnIiwgd2hpY2ggaXMgb3V0c2lkZSB0aGUgdmFsaWQgcmFuZ2UgWycrUSsiLCAiK3V0KyJdISIpO3JldHVybiBfdD9KdD4+PjA6SnR8MH0sYXJnUGFja0FkdmFuY2U6OCxyZWFkVmFsdWVGcm9tUG9pbnRlcjpzbChHLHd0LFEhPT0wKSxkZXN0cnVjdG9yRnVuY3Rpb246bnVsbH0pfWZ1bmN0aW9uIGFsKFUsRyxYKXt2YXIgUT1bSW50OEFycmF5LFVpbnQ4QXJyYXksSW50MTZBcnJheSxVaW50MTZBcnJheSxJbnQzMkFycmF5LFVpbnQzMkFycmF5LEZsb2F0MzJBcnJheSxGbG9hdDY0QXJyYXldLHV0PVFbR107ZnVuY3Rpb24gd3QoUnQpe1J0PVJ0Pj4yO3ZhciBtdD1wZSxfdD1tdFtSdF0scXQ9bXRbUnQrMV07cmV0dXJuIG5ldyB1dChkdCxxdCxfdCl9WD1EbihYKSxvcihVLHtuYW1lOlgsZnJvbVdpcmVUeXBlOnd0LGFyZ1BhY2tBZHZhbmNlOjgscmVhZFZhbHVlRnJvbVBvaW50ZXI6d3R9LHtpZ25vcmVEdXBsaWNhdGVSZWdpc3RyYXRpb25zOiEwfSl9ZnVuY3Rpb24gZmwoVSxHKXtHPURuKEcpO3ZhciBYPUc9PT0ic3RkOjpzdHJpbmciO29yKFUse25hbWU6Ryxmcm9tV2lyZVR5cGU6ZnVuY3Rpb24oUSl7dmFyIHV0PXBlW1E+PjJdLHd0O2lmKFgpZm9yKHZhciBSdD1RKzQsbXQ9MDttdDw9dXQ7KyttdCl7dmFyIF90PVErNCttdDtpZihtdD09dXR8fEN0W190XT09MCl7dmFyIHF0PV90LVJ0LEp0PWsoUnQscXQpO3d0PT09dm9pZCAwP3d0PUp0Oih3dCs9IlwwIix3dCs9SnQpLFJ0PV90KzF9fWVsc2V7Zm9yKHZhciB3ZT1uZXcgQXJyYXkodXQpLG10PTA7bXQ8dXQ7KyttdCl3ZVttdF09U3RyaW5nLmZyb21DaGFyQ29kZShDdFtRKzQrbXRdKTt3dD13ZS5qb2luKCIiKX1yZXR1cm4gSyhRKSx3dH0sdG9XaXJlVHlwZTpmdW5jdGlvbihRLHV0KXt1dCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyJiYodXQ9bmV3IFVpbnQ4QXJyYXkodXQpKTt2YXIgd3QsUnQ9dHlwZW9mIHV0PT0ic3RyaW5nIjtSdHx8dXQgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx1dCBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5fHx1dCBpbnN0YW5jZW9mIEludDhBcnJheXx8TGUoIkNhbm5vdCBwYXNzIG5vbi1zdHJpbmcgdG8gc3RkOjpzdHJpbmciKSxYJiZSdD93dD1mdW5jdGlvbigpe3JldHVybiBSKHV0KX06d3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdXQubGVuZ3RofTt2YXIgbXQ9d3QoKSxfdD1WKDQrbXQrMSk7aWYocGVbX3Q+PjJdPW10LFgmJlJ0KVcodXQsX3QrNCxtdCsxKTtlbHNlIGlmKFJ0KWZvcih2YXIgcXQ9MDtxdDxtdDsrK3F0KXt2YXIgSnQ9dXQuY2hhckNvZGVBdChxdCk7SnQ+MjU1JiYoSyhfdCksTGUoIlN0cmluZyBoYXMgVVRGLTE2IGNvZGUgdW5pdHMgdGhhdCBkbyBub3QgZml0IGluIDggYml0cyIpKSxDdFtfdCs0K3F0XT1KdH1lbHNlIGZvcih2YXIgcXQ9MDtxdDxtdDsrK3F0KUN0W190KzQrcXRdPXV0W3F0XTtyZXR1cm4gUSE9PW51bGwmJlEucHVzaChLLF90KSxfdH0sYXJnUGFja0FkdmFuY2U6OCxyZWFkVmFsdWVGcm9tUG9pbnRlcjphcixkZXN0cnVjdG9yRnVuY3Rpb246ZnVuY3Rpb24oUSl7SyhRKX19KX1mdW5jdGlvbiB1bChVLEcsWCl7WD1EbihYKTt2YXIgUSx1dCx3dCxSdCxtdDtHPT09Mj8oUT1hdCx1dD1sdCxSdD1odCx3dD1mdW5jdGlvbigpe3JldHVybiBsZX0sbXQ9MSk6Rz09PTQmJihRPW90LHV0PVB0LFJ0PXl0LHd0PWZ1bmN0aW9uKCl7cmV0dXJuIHBlfSxtdD0yKSxvcihVLHtuYW1lOlgsZnJvbVdpcmVUeXBlOmZ1bmN0aW9uKF90KXtmb3IodmFyIHF0PXBlW190Pj4yXSxKdD13dCgpLHdlLEplPV90KzQsYm49MDtibjw9cXQ7Kytibil7dmFyIHJvPV90KzQrYm4qRztpZihibj09cXR8fEp0W3JvPj5tdF09PTApe3ZhciBJbz1yby1KZSxscj1RKEplLElvKTt3ZT09PXZvaWQgMD93ZT1scjood2UrPSJcMCIsd2UrPWxyKSxKZT1ybytHfX1yZXR1cm4gSyhfdCksd2V9LHRvV2lyZVR5cGU6ZnVuY3Rpb24oX3QscXQpe3R5cGVvZiBxdCE9InN0cmluZyImJkxlKCJDYW5ub3QgcGFzcyBub24tc3RyaW5nIHRvIEMrKyBzdHJpbmcgdHlwZSAiK1gpO3ZhciBKdD1SdChxdCksd2U9Vig0K0p0K0cpO3JldHVybiBwZVt3ZT4+Ml09SnQ+Pm10LHV0KHF0LHdlKzQsSnQrRyksX3QhPT1udWxsJiZfdC5wdXNoKEssd2UpLHdlfSxhcmdQYWNrQWR2YW5jZTo4LHJlYWRWYWx1ZUZyb21Qb2ludGVyOmFyLGRlc3RydWN0b3JGdW5jdGlvbjpmdW5jdGlvbihfdCl7SyhfdCl9fSl9ZnVuY3Rpb24gbGwoVSxHLFgsUSx1dCx3dCl7cm5bVV09e25hbWU6RG4oRykscmF3Q29uc3RydWN0b3I6SG8oWCxRKSxyYXdEZXN0cnVjdG9yOkhvKHV0LHd0KSxmaWVsZHM6W119fWZ1bmN0aW9uIHBsKFUsRyxYLFEsdXQsd3QsUnQsbXQsX3QscXQpe3JuW1VdLmZpZWxkcy5wdXNoKHtmaWVsZE5hbWU6RG4oRyksZ2V0dGVyUmV0dXJuVHlwZTpYLGdldHRlcjpIbyhRLHV0KSxnZXR0ZXJDb250ZXh0Ond0LHNldHRlckFyZ3VtZW50VHlwZTpSdCxzZXR0ZXI6SG8obXQsX3QpLHNldHRlckNvbnRleHQ6cXR9KX1mdW5jdGlvbiBkbChVLEcpe0c9RG4oRyksb3IoVSx7aXNWb2lkOiEwLG5hbWU6RyxhcmdQYWNrQWR2YW5jZTowLGZyb21XaXJlVHlwZTpmdW5jdGlvbigpe30sdG9XaXJlVHlwZTpmdW5jdGlvbihYLFEpe319KX1mdW5jdGlvbiBlcyhVKXtyZXR1cm4gVXx8TGUoIkNhbm5vdCB1c2UgZGVsZXRlZCB2YWwuIGhhbmRsZSA9ICIrVSksQW9bVV0udmFsdWV9ZnVuY3Rpb24gbWwoVSxHLFgpe1U9ZXMoVSksRz1EcyhHLCJlbXZhbDo6YXMiKTt2YXIgUT1bXSx1dD11cihRKTtyZXR1cm4gcmVbWD4+Ml09dXQsRy50b1dpcmVUeXBlKFEsVSl9dmFyIGhsPXt9O2Z1bmN0aW9uIEJzKFUpe3ZhciBHPWhsW1VdO3JldHVybiBHPT09dm9pZCAwP0RuKFUpOkd9dmFyIEdjPVtdO2Z1bmN0aW9uIF9sKFUsRyxYLFEpe1U9R2NbVV0sRz1lcyhHKSxYPUJzKFgpLFUoRyxYLG51bGwsUSl9ZnVuY3Rpb24gdGYoKXtyZXR1cm4gdHlwZW9mIGdsb2JhbFRoaXM9PSJvYmplY3QiP2dsb2JhbFRoaXM6ZnVuY3Rpb24oKXtyZXR1cm4gRnVuY3Rpb259KCkoInJldHVybiB0aGlzIikoKX1mdW5jdGlvbiB5bChVKXtyZXR1cm4gVT09PTA/dXIodGYoKSk6KFU9QnMoVSksdXIodGYoKVtVXSkpfWZ1bmN0aW9uIGdsKFUpe3ZhciBHPUdjLmxlbmd0aDtyZXR1cm4gR2MucHVzaChVKSxHfWZ1bmN0aW9uIEFsKFUsRyl7Zm9yKHZhciBYPW5ldyBBcnJheShVKSxRPTA7UTxVOysrUSlYW1FdPURzKHJlWyhHPj4yKStRXSwicGFyYW1ldGVyICIrUSk7cmV0dXJuIFh9ZnVuY3Rpb24gYmwoVSxHKXtmb3IodmFyIFg9QWwoVSxHKSxRPVhbMF0sdXQ9US5uYW1lKyJfJCIrWC5zbGljZSgxKS5tYXAoZnVuY3Rpb24oYm4pe3JldHVybiBibi5uYW1lfSkuam9pbigiXyIpKyIkIix3dD1bInJldFR5cGUiXSxSdD1bUV0sbXQ9IiIsX3Q9MDtfdDxVLTE7KytfdCltdCs9KF90IT09MD8iLCAiOiIiKSsiYXJnIitfdCx3dC5wdXNoKCJhcmdUeXBlIitfdCksUnQucHVzaChYWzErX3RdKTtmb3IodmFyIHF0PVlpKCJtZXRob2RDYWxsZXJfIit1dCksSnQ9InJldHVybiBmdW5jdGlvbiAiK3F0K2AoaGFuZGxlLCBuYW1lLCBkZXN0cnVjdG9ycywgYXJncykgewpgLHdlPTAsX3Q9MDtfdDxVLTE7KytfdClKdCs9IiAgICB2YXIgYXJnIitfdCsiID0gYXJnVHlwZSIrX3QrIi5yZWFkVmFsdWVGcm9tUG9pbnRlcihhcmdzIisod2U/IisiK3dlOiIiKStgKTsKYCx3ZSs9WFtfdCsxXS5hcmdQYWNrQWR2YW5jZTtKdCs9IiAgICB2YXIgcnYgPSBoYW5kbGVbbmFtZV0oIittdCtgKTsKYDtmb3IodmFyIF90PTA7X3Q8VS0xOysrX3QpWFtfdCsxXS5kZWxldGVPYmplY3QmJihKdCs9IiAgICBhcmdUeXBlIitfdCsiLmRlbGV0ZU9iamVjdChhcmciK190K2ApOwpgKTtRLmlzVm9pZHx8KEp0Kz1gICAgIHJldHVybiByZXRUeXBlLnRvV2lyZVR5cGUoZGVzdHJ1Y3RvcnMsIHJ2KTsKYCksSnQrPWB9OwpgLHd0LnB1c2goSnQpO3ZhciBKZT1RYShGdW5jdGlvbix3dCkuYXBwbHkobnVsbCxSdCk7cmV0dXJuIGdsKEplKX1mdW5jdGlvbiBUbChVKXtyZXR1cm4gVT1CcyhVKSx1cihuW1VdKX1mdW5jdGlvbiB3bChVLEcpe3JldHVybiBVPWVzKFUpLEc9ZXMoRyksdXIoVVtHXSl9ZnVuY3Rpb24gT2woVSl7VT40JiYoQW9bVV0ucmVmY291bnQrPTEpfWZ1bmN0aW9uIEVsKFUpe2Zvcih2YXIgRz0iIixYPTA7WDxVOysrWClHKz0oWCE9PTA/IiwgIjoiIikrImFyZyIrWDtmb3IodmFyIFE9InJldHVybiBmdW5jdGlvbiBlbXZhbF9hbGxvY2F0b3JfIitVK2AoY29uc3RydWN0b3IsIGFyZ1R5cGVzLCBhcmdzKSB7CmAsWD0wO1g8VTsrK1gpUSs9InZhciBhcmdUeXBlIitYKyIgPSByZXF1aXJlUmVnaXN0ZXJlZFR5cGUoTW9kdWxlWydIRUFQMzInXVsoYXJnVHlwZXMgPj4+IDIpICsgIitYKyddLCAicGFyYW1ldGVyICcrWCtgIik7CnZhciBhcmdgK1grIiA9IGFyZ1R5cGUiK1grYC5yZWFkVmFsdWVGcm9tUG9pbnRlcihhcmdzKTsKYXJncyArPSBhcmdUeXBlYCtYK2BbJ2FyZ1BhY2tBZHZhbmNlJ107CmA7cmV0dXJuIFErPSJ2YXIgb2JqID0gbmV3IGNvbnN0cnVjdG9yKCIrRytgKTsKcmV0dXJuIF9fZW12YWxfcmVnaXN0ZXIob2JqKTsKfQpgLG5ldyBGdW5jdGlvbigicmVxdWlyZVJlZ2lzdGVyZWRUeXBlIiwiTW9kdWxlIiwiX19lbXZhbF9yZWdpc3RlciIsUSkoRHMsbix1cil9dmFyIGVmPXt9O2Z1bmN0aW9uIFJsKFUsRyxYLFEpe1U9ZXMoVSk7dmFyIHV0PWVmW0ddO3JldHVybiB1dHx8KHV0PUVsKEcpLGVmW0ddPXV0KSx1dChVLFgsUSl9ZnVuY3Rpb24gU2woVSl7cmV0dXJuIHVyKEJzKFUpKX1mdW5jdGlvbiBDbChVKXt2YXIgRz1Bb1tVXS52YWx1ZTtSbihHKSxrYyhVKX1mdW5jdGlvbiB4bCgpe0tlKCl9ZnVuY3Rpb24gUGwoVSxHLFgpe0N0LmNvcHlXaXRoaW4oVSxHLEcrWCl9ZnVuY3Rpb24gTWwoVSl7dHJ5e3JldHVybiBBLmdyb3coVS1kdC5ieXRlTGVuZ3RoKzY1NTM1Pj4+MTYpLFF0KEEuYnVmZmVyKSwxfWNhdGNoe319ZnVuY3Rpb24gTmwoVSl7dmFyIEc9Q3QubGVuZ3RoO1U9VT4+PjA7dmFyIFg9MjE0NzQ4MzY0ODtpZihVPlgpcmV0dXJuITE7Zm9yKHZhciBRPTE7UTw9NDtRKj0yKXt2YXIgdXQ9RyooMSsuMi9RKTt1dD1NYXRoLm1pbih1dCxVKzEwMDY2MzI5Nik7dmFyIHd0PU1hdGgubWluKFgsRXQoTWF0aC5tYXgoVSx1dCksNjU1MzYpKSxSdD1NbCh3dCk7aWYoUnQpcmV0dXJuITB9cmV0dXJuITF9dmFyIFVzPXttYXBwaW5nczp7fSxidWZmZXJzOltudWxsLFtdLFtdXSxwcmludENoYXI6ZnVuY3Rpb24oVSxHKXt2YXIgWD1Vcy5idWZmZXJzW1VdO0c9PT0wfHxHPT09MTA/KChVPT09MT9NOk4pKGooWCwwKSksWC5sZW5ndGg9MCk6WC5wdXNoKEcpfSx2YXJhcmdzOnZvaWQgMCxnZXQ6ZnVuY3Rpb24oKXtVcy52YXJhcmdzKz00O3ZhciBVPXJlW1VzLnZhcmFyZ3MtND4+Ml07cmV0dXJuIFV9LGdldFN0cjpmdW5jdGlvbihVKXt2YXIgRz1rKFUpO3JldHVybiBHfSxnZXQ2NDpmdW5jdGlvbihVLEcpe3JldHVybiBVfX07ZnVuY3Rpb24gSWwoVSl7cmV0dXJuIDB9ZnVuY3Rpb24gdmwoVSxHLFgsUSx1dCl7fWZ1bmN0aW9uIEZsKFUsRyxYLFEpe2Zvcih2YXIgdXQ9MCx3dD0wO3d0PFg7d3QrKyl7Zm9yKHZhciBSdD1yZVtHK3d0Kjg+PjJdLG10PXJlW0crKHd0KjgrNCk+PjJdLF90PTA7X3Q8bXQ7X3QrKylVcy5wcmludENoYXIoVSxDdFtSdCtfdF0pO3V0Kz1tdH1yZXR1cm4gcmVbUT4+Ml09dXQsMH1mdW5jdGlvbiBMbChVKXtJKFV8MCl9dnM9bi5JbnRlcm5hbEVycm9yPSRpKEVycm9yLCJJbnRlcm5hbEVycm9yIiksTWMoKSxUaT1uLkJpbmRpbmdFcnJvcj0kaShFcnJvciwiQmluZGluZ0Vycm9yIiksQ3UoKSx6dSgpLFV1KCksJGE9bi5VbmJvdW5kVHlwZUVycm9yPSRpKEVycm9yLCJVbmJvdW5kVHlwZUVycm9yIiksUXUoKTt2YXIgRGw9e3Q6cG8sSTpBdSx4Okt1LHc6V3UsZDpYdSxrOll1LEg6SnUsbjplbCxhOm5sLEE6cmwsaTppbCxqOmNsLGg6YWwsQjpmbCx2OnVsLHU6bGwsYzpwbCxKOmRsLG06bWwsczpfbCxiOmtjLHk6eWwscDpibCxyOlRsLGU6d2wsZzpPbCxxOlJsLGY6U2wsbDpDbCxvOnhsLEU6UGwsRjpObCxHOklsLEM6dmwsejpGbCxEOkxsfSxuZj1XbigpLENlPW4uX19fd2FzbV9jYWxsX2N0b3JzPWZ1bmN0aW9uKCl7cmV0dXJuKENlPW4uX19fd2FzbV9jYWxsX2N0b3JzPW4uYXNtLkwpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sVj1uLl9tYWxsb2M9ZnVuY3Rpb24oKXtyZXR1cm4oVj1uLl9tYWxsb2M9bi5hc20uTSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfSxLPW4uX2ZyZWU9ZnVuY3Rpb24oKXtyZXR1cm4oSz1uLl9mcmVlPW4uYXNtLk4pLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sdHQ9bi5fX19nZXRUeXBlTmFtZT1mdW5jdGlvbigpe3JldHVybih0dD1uLl9fX2dldFR5cGVOYW1lPW4uYXNtLlApLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sTXQ9bi5fX19lbWJpbmRfcmVnaXN0ZXJfbmF0aXZlX2FuZF9idWlsdGluX3R5cGVzPWZ1bmN0aW9uKCl7cmV0dXJuKE10PW4uX19fZW1iaW5kX3JlZ2lzdGVyX25hdGl2ZV9hbmRfYnVpbHRpbl90eXBlcz1uLmFzbS5RKS5hcHBseShudWxsLGFyZ3VtZW50cyl9LHVlPW4uZHluQ2FsbF9qaWppPWZ1bmN0aW9uKCl7cmV0dXJuKHVlPW4uZHluQ2FsbF9qaWppPW4uYXNtLlIpLmFwcGx5KG51bGwsYXJndW1lbnRzKX0sVGU7ZnVuY3Rpb24gT2koVSl7dGhpcy5uYW1lPSJFeGl0U3RhdHVzIix0aGlzLm1lc3NhZ2U9IlByb2dyYW0gdGVybWluYXRlZCB3aXRoIGV4aXQoIitVKyIpIix0aGlzLnN0YXR1cz1VfUhuPWZ1bmN0aW9uIFUoKXtUZXx8VmMoKSxUZXx8KEhuPVUpfTtmdW5jdGlvbiBWYyhVKXtpZihVPVV8fGYsbW4+MHx8KHBuKCksbW4+MCkpcmV0dXJuO2Z1bmN0aW9uIEcoKXtUZXx8KFRlPSEwLG4uY2FsbGVkUnVuPSEwLCFTJiYoRW4oKSxvZSgpLG8obiksbi5vblJ1bnRpbWVJbml0aWFsaXplZCYmbi5vblJ1bnRpbWVJbml0aWFsaXplZCgpLFl0KCkpKX1uLnNldFN0YXR1cz8obi5zZXRTdGF0dXMoIlJ1bm5pbmcuLi4iKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe24uc2V0U3RhdHVzKCIiKX0sMSksRygpfSwxKSk6RygpfWlmKG4ucnVuPVZjLG4ucHJlSW5pdClmb3IodHlwZW9mIG4ucHJlSW5pdD09ImZ1bmN0aW9uIiYmKG4ucHJlSW5pdD1bbi5wcmVJbml0XSk7bi5wcmVJbml0Lmxlbmd0aD4wOyluLnByZUluaXQucG9wKCkoKTtyZXR1cm4gVmMoKSxlLnJlYWR5fX0oKTt0eXBlb2YgX209PSJvYmplY3QiJiZ0eXBlb2YgSmc9PSJvYmplY3QiP0pnLmV4cG9ydHM9UWc6dHlwZW9mIGRlZmluZT09ImZ1bmN0aW9uIiYmZGVmaW5lLmFtZD9kZWZpbmUoW10sZnVuY3Rpb24oKXtyZXR1cm4gUWd9KTp0eXBlb2YgX209PSJvYmplY3QiJiYoX20uQkFTSVM9UWcpfSk7dmFyIHQxPXt9O2RlKHQxLHtkZWZhdWx0OigpPT5UOH0pO2Z1bmN0aW9uIF84KHQsZSl7eS50eXBlT2Yub2JqZWN0KCJ0cmFuc2NvZGVyTW9kdWxlIixndSk7bGV0IG49dC5rdHgyQnVmZmVyLG89dC5zdXBwb3J0ZWRUYXJnZXRGb3JtYXRzLHI7dHJ5e3I9RlMobil9Y2F0Y2h7dGhyb3cgbmV3IEFlKCJJbnZhbGlkIEtUWDIgZmlsZS4iKX1pZihyLmxheWVyQ291bnQhPT0wKXRocm93IG5ldyBBZSgiS1RYMiB0ZXh0dXJlIGFycmF5cyBhcmUgbm90IHN1cHBvcnRlZC4iKTtpZihyLnBpeGVsRGVwdGghPT0wKXRocm93IG5ldyBBZSgiS1RYMiAzRCB0ZXh0dXJlcyBhcmUgdW5zdXBwb3J0ZWQuIik7bGV0IGk9ci5kYXRhRm9ybWF0RGVzY3JpcHRvclswXSxzPW5ldyBBcnJheShyLmxldmVsQ291bnQpO3JldHVybiByLnZrRm9ybWF0PT09MCYmKGkuY29sb3JNb2RlbD09PWtTfHxpLmNvbG9yTW9kZWw9PT1HUyk/ZzgobixyLG8sZ3UsZSxzKTooZS5wdXNoKG4uYnVmZmVyKSx5OChyLHMpKSxzfWZ1bmN0aW9uIHk4KHQsZSl7bGV0IG49dC52a0Zvcm1hdD09PXl1LlZLX0ZPUk1BVF9SOEc4QjhfU1JHQj9rbi5SR0I6a24uUkdCQSxvO3QudmtGb3JtYXQ9PT15dS5WS19GT1JNQVRfUjhHOEI4QThfVU5PUk0/bz1uci5VTlNJR05FRF9CWVRFOnQudmtGb3JtYXQ9PT15dS5WS19GT1JNQVRfUjE2RzE2QjE2QTE2X1NGTE9BVD9vPW5yLkhBTEZfRkxPQVQ6dC52a0Zvcm1hdD09PXl1LlZLX0ZPUk1BVF9SMzJHMzJCMzJBMzJfU0ZMT0FUJiYobz1uci5GTE9BVCk7Zm9yKGxldCByPTA7cjx0LmxldmVscy5sZW5ndGg7KytyKXtsZXQgaT17fTtlW3JdPWk7bGV0IHM9dC5sZXZlbHNbcl0ubGV2ZWxEYXRhLGY9dC5waXhlbFdpZHRoPj5yLHU9dC5waXhlbEhlaWdodD4+cixjPWYqdSprbi5jb21wb25lbnRzTGVuZ3RoKG4pO2ZvcihsZXQgbD0wO2w8dC5mYWNlQ291bnQ7KytsKXtsZXQgcD1zLmJ5dGVPZmZzZXQrYyp0LnR5cGVTaXplKmwsZDshaChvKXx8bnIuc2l6ZUluQnl0ZXMobyk9PT0xP2Q9bmV3IFVpbnQ4QXJyYXkocy5idWZmZXIscCxjKTpuci5zaXplSW5CeXRlcyhvKT09PTI/ZD1uZXcgVWludDE2QXJyYXkocy5idWZmZXIscCxjKTpkPW5ldyBGbG9hdDMyQXJyYXkocy5idWZmZXIscCxjKSxpW1VTW2xdXT17aW50ZXJuYWxGb3JtYXQ6bixkYXRhdHlwZTpvLHdpZHRoOmYsaGVpZ2h0OnUsbGV2ZWxCdWZmZXI6ZH19fX1mdW5jdGlvbiBnOCh0LGUsbixvLHIsaSl7bGV0IHM9bmV3IG8uS1RYMkZpbGUodCksZj1zLmdldFdpZHRoKCksdT1zLmdldEhlaWdodCgpLGM9cy5nZXRMZXZlbHMoKSxsPXMuZ2V0SGFzQWxwaGEoKTtpZighKGY+MCl8fCEodT4wKXx8IShjPjApKXRocm93IHMuY2xvc2UoKSxzLmRlbGV0ZSgpLG5ldyBBZSgiSW52YWxpZCBLVFgyIGZpbGUiKTtsZXQgcCxkLG09ZS5kYXRhRm9ybWF0RGVzY3JpcHRvclswXSxfPW8udHJhbnNjb2Rlcl90ZXh0dXJlX2Zvcm1hdDtpZihtLmNvbG9yTW9kZWw9PT1rUylpZihuLmV0YylwPWw/a24uUkdCQThfRVRDMl9FQUM6a24uUkdCOF9FVEMyLGQ9bD9fLmNURkVUQzJfUkdCQTpfLmNURkVUQzFfUkdCO2Vsc2UgaWYobi5ldGMxJiYhbClwPWtuLlJHQl9FVEMxLGQ9Xy5jVEZFVEMxX1JHQjtlbHNlIGlmKG4uczN0YylwPWw/a24uUkdCQV9EWFQ1OmtuLlJHQl9EWFQxLGQ9bD9fLmNURkJDM19SR0JBOl8uY1RGQkMxX1JHQjtlbHNlIGlmKG4ucHZydGMpcD1sP2tuLlJHQkFfUFZSVENfNEJQUFYxOmtuLlJHQl9QVlJUQ180QlBQVjEsZD1sP18uY1RGUFZSVEMxXzRfUkdCQTpfLmNURlBWUlRDMV80X1JHQjtlbHNlIGlmKG4uYXN0YylwPWtuLlJHQkFfQVNUQyxkPV8uY1RGQVNUQ180eDRfUkdCQTtlbHNlIGlmKG4uYmM3KXA9a24uUkdCQV9CQzcsZD1fLmNURkJDN19SR0JBO2Vsc2UgdGhyb3cgbmV3IEFlKCJObyB0cmFuc2NvZGluZyBmb3JtYXQgdGFyZ2V0IGF2YWlsYWJsZSBmb3IgRVRDMVMgY29tcHJlc3NlZCBrdHgyLiIpO2Vsc2UgaWYobS5jb2xvck1vZGVsPT09R1MpaWYobi5hc3RjKXA9a24uUkdCQV9BU1RDLGQ9Xy5jVEZBU1RDXzR4NF9SR0JBO2Vsc2UgaWYobi5iYzcpcD1rbi5SR0JBX0JDNyxkPV8uY1RGQkM3X1JHQkE7ZWxzZSBpZihuLnMzdGMpcD1sP2tuLlJHQkFfRFhUNTprbi5SR0JfRFhUMSxkPWw/Xy5jVEZCQzNfUkdCQTpfLmNURkJDMV9SR0I7ZWxzZSBpZihuLmV0YylwPWw/a24uUkdCQThfRVRDMl9FQUM6a24uUkdCOF9FVEMyLGQ9bD9fLmNURkVUQzJfUkdCQTpfLmNURkVUQzFfUkdCO2Vsc2UgaWYobi5ldGMxJiYhbClwPWtuLlJHQl9FVEMxLGQ9Xy5jVEZFVEMxX1JHQjtlbHNlIGlmKG4ucHZydGMpcD1sP2tuLlJHQkFfUFZSVENfNEJQUFYxOmtuLlJHQl9QVlJUQ180QlBQVjEsZD1sP18uY1RGUFZSVEMxXzRfUkdCQTpfLmNURlBWUlRDMV80X1JHQjtlbHNlIHRocm93IG5ldyBBZSgiTm8gdHJhbnNjb2RpbmcgZm9ybWF0IHRhcmdldCBhdmFpbGFibGUgZm9yIFVBU1RDIGNvbXByZXNzZWQga3R4Mi4iKTtpZighcy5zdGFydFRyYW5zY29kaW5nKCkpdGhyb3cgcy5jbG9zZSgpLHMuZGVsZXRlKCksbmV3IEFlKCJzdGFydFRyYW5zY29kaW5nKCkgZmFpbGVkIik7Zm9yKGxldCBnPTA7ZzxlLmxldmVscy5sZW5ndGg7KytnKXtsZXQgYj17fTtpW2ddPWIsZj1lLnBpeGVsV2lkdGg+PmcsdT1lLnBpeGVsSGVpZ2h0Pj5nO2xldCBUPXMuZ2V0SW1hZ2VUcmFuc2NvZGVkU2l6ZUluQnl0ZXMoZywwLDAsZC52YWx1ZSksTz1uZXcgVWludDhBcnJheShUKSxFPXMudHJhbnNjb2RlSW1hZ2UoTyxnLDAsMCxkLnZhbHVlLDAsLTEsLTEpO2lmKCFoKEUpKXRocm93IG5ldyBBZSgidHJhbnNjb2RlSW1hZ2UoKSBmYWlsZWQuIik7ci5wdXNoKE8uYnVmZmVyKSxiW1VTWzBdXT17aW50ZXJuYWxGb3JtYXQ6cCx3aWR0aDpmLGhlaWdodDp1LGxldmVsQnVmZmVyOk99fXJldHVybiBzLmNsb3NlKCkscy5kZWxldGUoKSxpfWFzeW5jIGZ1bmN0aW9uIEE4KHQsZSl7bGV0IG49dC53ZWJBc3NlbWJseUNvbmZpZyxvPUJTLmRlZmF1bHQ/P3NlbGYuQkFTSVM7cmV0dXJuIGgobi53YXNtQmluYXJ5RmlsZSk/Z3U9YXdhaXQgbyhuKTpndT1hd2FpdCBvKCksZ3UuaW5pdGlhbGl6ZUJhc2lzKCksITB9ZnVuY3Rpb24gYjgodCxlKXtsZXQgbj10LndlYkFzc2VtYmx5Q29uZmlnO3JldHVybiBoKG4pP0E4KHQsZSk6XzgodCxlKX12YXIgQlMsVVMsa1MsR1MsZ3UsVDgsZTE9JCgoKT0+e2Z0KCk7V3QoKTtOUygpO0pyKCk7SVMoKTtaZygpO3NvKCk7TFMoKTtCUz1kcihEUygpLDEpLFVTPVsicG9zaXRpdmVYIiwibmVnYXRpdmVYIiwicG9zaXRpdmVZIiwibmVnYXRpdmVZIiwicG9zaXRpdmVaIiwibmVnYXRpdmVaIl0sa1M9MTYzLEdTPTE2NjtUOD1RZShiOCl9KTt2YXIgVlM9e307dmFyIG4xPSQoKCk9PntzZWxmLm9ubWVzc2FnZT1mdW5jdGlvbih0KXtsZXQgZT10LmRhdGEuYXJyYXksbj1zZWxmLndlYmtpdFBvc3RNZXNzYWdlfHxzZWxmLnBvc3RNZXNzYWdlO3RyeXtuKHthcnJheTplfSxbZS5idWZmZXJdKX1jYXRjaHtuKHt9KX19fSk7dmFyIHltLGdtLHpTPSQoKCk9PntVZSgpO0x0KCk7V3QoKTtmdCgpO2p0KCk7eW09e307eW0uY2xpcFRyaWFuZ2xlQXRBeGlzQWxpZ25lZFRocmVzaG9sZD1mdW5jdGlvbih0LGUsbixvLHIsaSl7aWYoIWgodCkpdGhyb3cgbmV3IEQoInRocmVzaG9sZCBpcyByZXF1aXJlZC4iKTtpZighaChlKSl0aHJvdyBuZXcgRCgia2VlcEFib3ZlIGlzIHJlcXVpcmVkLiIpO2lmKCFoKG4pKXRocm93IG5ldyBEKCJ1MCBpcyByZXF1aXJlZC4iKTtpZighaChvKSl0aHJvdyBuZXcgRCgidTEgaXMgcmVxdWlyZWQuIik7aWYoIWgocikpdGhyb3cgbmV3IEQoInUyIGlzIHJlcXVpcmVkLiIpO2goaSk/aS5sZW5ndGg9MDppPVtdO2xldCBzLGYsdTtlPyhzPW48dCxmPW88dCx1PXI8dCk6KHM9bj50LGY9bz50LHU9cj50KTtsZXQgYz1zK2YrdSxsLHAsZCxtLF8sZztyZXR1cm4gYz09PTE/cz8obD0odC1uKS8oby1uKSxwPSh0LW4pLyhyLW4pLGkucHVzaCgxKSxpLnB1c2goMikscCE9PTEmJihpLnB1c2goLTEpLGkucHVzaCgwKSxpLnB1c2goMiksaS5wdXNoKHApKSxsIT09MSYmKGkucHVzaCgtMSksaS5wdXNoKDApLGkucHVzaCgxKSxpLnB1c2gobCkpKTpmPyhkPSh0LW8pLyhyLW8pLG09KHQtbykvKG4tbyksaS5wdXNoKDIpLGkucHVzaCgwKSxtIT09MSYmKGkucHVzaCgtMSksaS5wdXNoKDEpLGkucHVzaCgwKSxpLnB1c2gobSkpLGQhPT0xJiYoaS5wdXNoKC0xKSxpLnB1c2goMSksaS5wdXNoKDIpLGkucHVzaChkKSkpOnUmJihfPSh0LXIpLyhuLXIpLGc9KHQtcikvKG8tciksaS5wdXNoKDApLGkucHVzaCgxKSxnIT09MSYmKGkucHVzaCgtMSksaS5wdXNoKDIpLGkucHVzaCgxKSxpLnB1c2goZykpLF8hPT0xJiYoaS5wdXNoKC0xKSxpLnB1c2goMiksaS5wdXNoKDApLGkucHVzaChfKSkpOmM9PT0yPyFzJiZuIT09dD8obT0odC1vKS8obi1vKSxfPSh0LXIpLyhuLXIpLGkucHVzaCgwKSxpLnB1c2goLTEpLGkucHVzaCgxKSxpLnB1c2goMCksaS5wdXNoKG0pLGkucHVzaCgtMSksaS5wdXNoKDIpLGkucHVzaCgwKSxpLnB1c2goXykpOiFmJiZvIT09dD8oZz0odC1yKS8oby1yKSxsPSh0LW4pLyhvLW4pLGkucHVzaCgxKSxpLnB1c2goLTEpLGkucHVzaCgyKSxpLnB1c2goMSksaS5wdXNoKGcpLGkucHVzaCgtMSksaS5wdXNoKDApLGkucHVzaCgxKSxpLnB1c2gobCkpOiF1JiZyIT09dCYmKHA9KHQtbikvKHItbiksZD0odC1vKS8oci1vKSxpLnB1c2goMiksaS5wdXNoKC0xKSxpLnB1c2goMCksaS5wdXNoKDIpLGkucHVzaChwKSxpLnB1c2goLTEpLGkucHVzaCgxKSxpLnB1c2goMiksaS5wdXNoKGQpKTpjIT09MyYmKGkucHVzaCgwKSxpLnB1c2goMSksaS5wdXNoKDIpKSxpfTt5bS5jb21wdXRlQmFyeWNlbnRyaWNDb29yZGluYXRlcz1mdW5jdGlvbih0LGUsbixvLHIsaSxzLGYsdSl7aWYoIWgodCkpdGhyb3cgbmV3IEQoInggaXMgcmVxdWlyZWQuIik7aWYoIWgoZSkpdGhyb3cgbmV3IEQoInkgaXMgcmVxdWlyZWQuIik7aWYoIWgobikpdGhyb3cgbmV3IEQoIngxIGlzIHJlcXVpcmVkLiIpO2lmKCFoKG8pKXRocm93IG5ldyBEKCJ5MSBpcyByZXF1aXJlZC4iKTtpZighaChyKSl0aHJvdyBuZXcgRCgieDIgaXMgcmVxdWlyZWQuIik7aWYoIWgoaSkpdGhyb3cgbmV3IEQoInkyIGlzIHJlcXVpcmVkLiIpO2lmKCFoKHMpKXRocm93IG5ldyBEKCJ4MyBpcyByZXF1aXJlZC4iKTtpZighaChmKSl0aHJvdyBuZXcgRCgieTMgaXMgcmVxdWlyZWQuIik7bGV0IGM9bi1zLGw9cy1yLHA9aS1mLGQ9by1mLG09MS8ocCpjK2wqZCksXz1lLWYsZz10LXMsYj0ocCpnK2wqXykqbSxUPSgtZCpnK2MqXykqbSxPPTEtYi1UO3JldHVybiBoKHUpPyh1Lng9Yix1Lnk9VCx1Lno9Tyx1KTpuZXcgYShiLFQsTyl9O3ltLmNvbXB1dGVMaW5lU2VnbWVudExpbmVTZWdtZW50SW50ZXJzZWN0aW9uPWZ1bmN0aW9uKHQsZSxuLG8scixpLHMsZix1KXt5LnR5cGVPZi5udW1iZXIoIngwMCIsdCkseS50eXBlT2YubnVtYmVyKCJ5MDAiLGUpLHkudHlwZU9mLm51bWJlcigieDAxIixuKSx5LnR5cGVPZi5udW1iZXIoInkwMSIsbykseS50eXBlT2YubnVtYmVyKCJ4MTAiLHIpLHkudHlwZU9mLm51bWJlcigieTEwIixpKSx5LnR5cGVPZi5udW1iZXIoIngxMSIscykseS50eXBlT2YubnVtYmVyKCJ5MTEiLGYpO2xldCBjPShzLXIpKihlLWkpLShmLWkpKih0LXIpLGw9KG4tdCkqKGUtaSktKG8tZSkqKHQtcikscD0oZi1pKSoobi10KS0ocy1yKSooby1lKTtpZihwPT09MClyZXR1cm47bGV0IGQ9Yy9wLG09bC9wO2lmKGQ+PTAmJmQ8PTEmJm0+PTAmJm08PTEpcmV0dXJuIGgodSl8fCh1PW5ldyBKKSx1Lng9dCtkKihuLXQpLHUueT1lK2QqKG8tZSksdX07Z209eW19KTt2YXIgbzE9e307ZGUobzEse2RlZmF1bHQ6KCk9PkI4fSk7ZnVuY3Rpb24gRjgodCxlKXtsZXQgbj10LmlzRWFzdENoaWxkLG89dC5pc05vcnRoQ2hpbGQscj1uPyRyOjAsaT1uP3puOiRyLHM9bz8kcjowLGY9bz96bjokcix1PUU4LGM9UjgsbD1TOCxwPXg4O3UubGVuZ3RoPTAsYy5sZW5ndGg9MCxsLmxlbmd0aD0wLHAubGVuZ3RoPTA7bGV0IGQ9Qzg7ZC5sZW5ndGg9MDtsZXQgbT17fSxfPXQudmVydGljZXMsZz10LmluZGljZXM7Zz1nLnN1YmFycmF5KDAsdC5pbmRleENvdW50V2l0aG91dFNraXJ0cyk7bGV0IGI9UHMuY2xvbmUodC5lbmNvZGluZyksVD1iLmhhc1ZlcnRleE5vcm1hbHMsTz0wLEU9dC52ZXJ0ZXhDb3VudFdpdGhvdXRTa2lydHMsdz10Lm1pbmltdW1IZWlnaHQsQz10Lm1heGltdW1IZWlnaHQsTT1uZXcgQXJyYXkoRSksTj1uZXcgQXJyYXkoRSksRj1uZXcgQXJyYXkoRSksST1UP25ldyBBcnJheShFKjIpOnZvaWQgMCx2PTIwLEIsQSxTLHgsTDtmb3IoQT0wLFM9MDtBPEU7KytBLFMrPTIpe2xldCBHZT1iLmRlY29kZVRleHR1cmVDb29yZGluYXRlcyhfLEEsSTgpO2lmKEI9Yi5kZWNvZGVIZWlnaHQoXyxBKSx4PVAuY2xhbXAoR2UueCp6bnwwLDAsem4pLEw9UC5jbGFtcChHZS55KnpufDAsMCx6biksRltBXT1QLmNsYW1wKChCLXcpLyhDLXcpKnpufDAsMCx6bikseDx2JiYoeD0wKSxMPHYmJihMPTApLHpuLXg8diYmKHg9em4pLHpuLUw8diYmKEw9em4pLE1bQV09eCxOW0FdPUwsVCl7bGV0IGJlPWIuZ2V0T2N0RW5jb2RlZE5vcm1hbChfLEEsdjgpO0lbU109YmUueCxJW1MrMV09YmUueX0obiYmeD49JHJ8fCFuJiZ4PD0kcikmJihvJiZMPj0kcnx8IW8mJkw8PSRyKSYmKG1bQV09Tyx1LnB1c2goeCksYy5wdXNoKEwpLGwucHVzaChGW0FdKSxUJiYocC5wdXNoKElbU10pLHAucHVzaChJW1MrMV0pKSwrK08pfWxldCB6PVtdO3oucHVzaChuZXcgam4pLHoucHVzaChuZXcgam4pLHoucHVzaChuZXcgam4pO2xldCBqPVtdO2oucHVzaChuZXcgam4pLGoucHVzaChuZXcgam4pLGoucHVzaChuZXcgam4pO2xldCBrLHE7Zm9yKEE9MDtBPGcubGVuZ3RoO0ErPTMpe2xldCBHZT1nW0FdLGJlPWdbQSsxXSxsbj1nW0ErMl0scG49TVtHZV0sRW49TVtiZV0sb2U9TVtsbl07elswXS5pbml0aWFsaXplSW5kZXhlZChNLE4sRixJLEdlKSx6WzFdLmluaXRpYWxpemVJbmRleGVkKE0sTixGLEksYmUpLHpbMl0uaW5pdGlhbGl6ZUluZGV4ZWQoTSxOLEYsSSxsbik7bGV0IFl0PWdtLmNsaXBUcmlhbmdsZUF0QXhpc0FsaWduZWRUaHJlc2hvbGQoJHIsbixwbixFbixvZSx3OCk7az0wLCEoaz49WXQubGVuZ3RoKSYmKGs9alswXS5pbml0aWFsaXplRnJvbUNsaXBSZXN1bHQoWXQsayx6KSwhKGs+PVl0Lmxlbmd0aCkmJihrPWpbMV0uaW5pdGlhbGl6ZUZyb21DbGlwUmVzdWx0KFl0LGsseiksIShrPj1ZdC5sZW5ndGgpJiYoaz1qWzJdLmluaXRpYWxpemVGcm9tQ2xpcFJlc3VsdChZdCxrLHopLHE9Z20uY2xpcFRyaWFuZ2xlQXRBeGlzQWxpZ25lZFRocmVzaG9sZCgkcixvLGpbMF0uZ2V0VigpLGpbMV0uZ2V0VigpLGpbMl0uZ2V0VigpLGpTKSxIUyh1LGMsbCxwLGQsbSxxLGosVCksazxZdC5sZW5ndGgmJihqWzJdLmNsb25lKGpbMV0pLGpbMl0uaW5pdGlhbGl6ZUZyb21DbGlwUmVzdWx0KFl0LGsseikscT1nbS5jbGlwVHJpYW5nbGVBdEF4aXNBbGlnbmVkVGhyZXNob2xkKCRyLG8salswXS5nZXRWKCksalsxXS5nZXRWKCksalsyXS5nZXRWKCksalMpLEhTKHUsYyxsLHAsZCxtLHEsaixUKSkpKSl9bGV0IFc9bj8tem46MCxSPW8/LXpuOjAsbnQ9W10sYXQ9W10sbHQ9W10saHQ9W10sb3Q9TnVtYmVyLk1BWF9WQUxVRSxQdD0tb3QseXQ9Tzg7eXQubGVuZ3RoPTA7bGV0IEV0PVkuY2xvbmUodC5lbGxpcHNvaWQpLGR0PU50LmNsb25lKHQuY2hpbGRSZWN0YW5nbGUpLHJ0PWR0Lm5vcnRoLEN0PWR0LnNvdXRoLGt0PWR0LmVhc3QsbGU9ZHQud2VzdDtmb3Ioa3Q8bGUmJihrdCs9UC5UV09fUEkpLEE9MDtBPHUubGVuZ3RoOysrQSl4PU1hdGgucm91bmQodVtBXSkseDw9cj8obnQucHVzaChBKSx4PTApOng+PWk/KGx0LnB1c2goQSkseD16bik6eD14KjIrVyx1W0FdPXgsTD1NYXRoLnJvdW5kKGNbQV0pLEw8PXM/KGF0LnB1c2goQSksTD0wKTpMPj1mPyhodC5wdXNoKEEpLEw9em4pOkw9TCoyK1IsY1tBXT1MLEI9UC5sZXJwKHcsQyxsW0FdL3puKSxCPG90JiYob3Q9QiksQj5QdCYmKFB0PUIpLGxbQV09QixBbS5sb25naXR1ZGU9UC5sZXJwKGxlLGt0LHgvem4pLEFtLmxhdGl0dWRlPVAubGVycChDdCxydCxML3puKSxBbS5oZWlnaHQ9QixFdC5jYXJ0b2dyYXBoaWNUb0NhcnRlc2lhbihBbSxYaSkseXQucHVzaChYaS54KSx5dC5wdXNoKFhpLnkpLHl0LnB1c2goWGkueik7bGV0IHJlPWd0LmZyb21WZXJ0aWNlcyh5dCxhLlpFUk8sMyxNOCkscGU9U28uZnJvbVJlY3RhbmdsZShkdCxvdCxQdCxFdCxOOCksWnQ9bmV3IHhzKEV0KS5jb21wdXRlSG9yaXpvbkN1bGxpbmdQb2ludEZyb21WZXJ0aWNlc1Bvc3NpYmx5VW5kZXJFbGxpcHNvaWQocmUuY2VudGVyLHl0LDMscmUuY2VudGVyLG90LFA4KSxRdD1QdC1vdCxOZT1uZXcgVWludDE2QXJyYXkodS5sZW5ndGgrYy5sZW5ndGgrbC5sZW5ndGgpO2ZvcihBPTA7QTx1Lmxlbmd0aDsrK0EpTmVbQV09dVtBXTtsZXQgZ2U9dS5sZW5ndGg7Zm9yKEE9MDtBPGMubGVuZ3RoOysrQSlOZVtnZStBXT1jW0FdO2ZvcihnZSs9Yy5sZW5ndGgsQT0wO0E8bC5sZW5ndGg7KytBKU5lW2dlK0FdPXpuKihsW0FdLW90KS9RdDtsZXQgRWU9RnQuY3JlYXRlVHlwZWRBcnJheSh1Lmxlbmd0aCxkKSx1bjtpZihUKXtsZXQgR2U9bmV3IFVpbnQ4QXJyYXkocCk7ZS5wdXNoKE5lLmJ1ZmZlcixFZS5idWZmZXIsR2UuYnVmZmVyKSx1bj1HZS5idWZmZXJ9ZWxzZSBlLnB1c2goTmUuYnVmZmVyLEVlLmJ1ZmZlcik7cmV0dXJue3ZlcnRpY2VzOk5lLmJ1ZmZlcixlbmNvZGVkTm9ybWFsczp1bixpbmRpY2VzOkVlLmJ1ZmZlcixtaW5pbXVtSGVpZ2h0Om90LG1heGltdW1IZWlnaHQ6UHQsd2VzdEluZGljZXM6bnQsc291dGhJbmRpY2VzOmF0LGVhc3RJbmRpY2VzOmx0LG5vcnRoSW5kaWNlczpodCxib3VuZGluZ1NwaGVyZTpyZSxvcmllbnRlZEJvdW5kaW5nQm94OnBlLGhvcml6b25PY2NsdXNpb25Qb2ludDpadH19ZnVuY3Rpb24gam4oKXt0aGlzLnZlcnRleEJ1ZmZlcj12b2lkIDAsdGhpcy5pbmRleD12b2lkIDAsdGhpcy5maXJzdD12b2lkIDAsdGhpcy5zZWNvbmQ9dm9pZCAwLHRoaXMucmF0aW89dm9pZCAwfWZ1bmN0aW9uIHFTKHQsZSl7KytibTtsZXQgbj1MOFtibV0sbz1EOFtibV07cmV0dXJuIG49bm4ub2N0RGVjb2RlKHQuZmlyc3QuZ2V0Tm9ybWFsWCgpLHQuZmlyc3QuZ2V0Tm9ybWFsWSgpLG4pLG89bm4ub2N0RGVjb2RlKHQuc2Vjb25kLmdldE5vcm1hbFgoKSx0LnNlY29uZC5nZXROb3JtYWxZKCksbyksWGk9YS5sZXJwKG4sbyx0LnJhdGlvLFhpKSxhLm5vcm1hbGl6ZShYaSxYaSksbm4ub2N0RW5jb2RlKFhpLGUpLC0tYm0sZX1mdW5jdGlvbiBIUyh0LGUsbixvLHIsaSxzLGYsdSl7aWYocy5sZW5ndGg9PT0wKXJldHVybjtsZXQgYz0wLGw9MDtmb3IoO2w8cy5sZW5ndGg7KWw9Vm9bYysrXS5pbml0aWFsaXplRnJvbUNsaXBSZXN1bHQocyxsLGYpO2ZvcihsZXQgcD0wO3A8YzsrK3Ape2xldCBkPVZvW3BdO2lmKGQuaXNJbmRleGVkKCkpZC5uZXdJbmRleD1pW2QuaW5kZXhdLGQudUJ1ZmZlcj10LGQudkJ1ZmZlcj1lLGQuaGVpZ2h0QnVmZmVyPW4sdSYmKGQubm9ybWFsQnVmZmVyPW8pO2Vsc2V7bGV0IG09ZC5nZXRLZXkoKTtpZihoKGlbbV0pKWQubmV3SW5kZXg9aVttXTtlbHNle2xldCBfPXQubGVuZ3RoO3QucHVzaChkLmdldFUoKSksZS5wdXNoKGQuZ2V0VigpKSxuLnB1c2goZC5nZXRIKCkpLHUmJihvLnB1c2goZC5nZXROb3JtYWxYKCkpLG8ucHVzaChkLmdldE5vcm1hbFkoKSkpLGQubmV3SW5kZXg9XyxpW21dPV99fX1jPT09Mz8oci5wdXNoKFZvWzBdLm5ld0luZGV4KSxyLnB1c2goVm9bMV0ubmV3SW5kZXgpLHIucHVzaChWb1syXS5uZXdJbmRleCkpOmM9PT00JiYoci5wdXNoKFZvWzBdLm5ld0luZGV4KSxyLnB1c2goVm9bMV0ubmV3SW5kZXgpLHIucHVzaChWb1syXS5uZXdJbmRleCksci5wdXNoKFZvWzBdLm5ld0luZGV4KSxyLnB1c2goVm9bMl0ubmV3SW5kZXgpLHIucHVzaChWb1szXS5uZXdJbmRleCkpfXZhciB6biwkcix3OCxqUyxPOCxBbSxYaSxFOCxSOCxTOCxDOCx4OCxQOCxNOCxOOCxJOCx2OCxqYSxibSxMOCxEOCxWbyxCOCxyMT0kKCgpPT57YXMoKTt2ZSgpO1VlKCk7THQoKTtJZSgpO2Z0KCk7JHQoKTtzdSgpOyRlKCk7elMoKTtLdCgpO3BhKCk7d24oKTtjdSgpO3NvKCk7em49MzI3NjcsJHI9em4vMnwwLHc4PVtdLGpTPVtdLE84PVtdLEFtPW5ldyBjdCxYaT1uZXcgYSxFOD1bXSxSOD1bXSxTOD1bXSxDOD1bXSx4OD1bXSxQOD1uZXcgYSxNOD1uZXcgZ3QsTjg9bmV3IFNvLEk4PW5ldyBKLHY4PW5ldyBhO2puLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbih0KXtyZXR1cm4gaCh0KXx8KHQ9bmV3IGpuKSx0LnVCdWZmZXI9dGhpcy51QnVmZmVyLHQudkJ1ZmZlcj10aGlzLnZCdWZmZXIsdC5oZWlnaHRCdWZmZXI9dGhpcy5oZWlnaHRCdWZmZXIsdC5ub3JtYWxCdWZmZXI9dGhpcy5ub3JtYWxCdWZmZXIsdC5pbmRleD10aGlzLmluZGV4LHQuZmlyc3Q9dGhpcy5maXJzdCx0LnNlY29uZD10aGlzLnNlY29uZCx0LnJhdGlvPXRoaXMucmF0aW8sdH07am4ucHJvdG90eXBlLmluaXRpYWxpemVJbmRleGVkPWZ1bmN0aW9uKHQsZSxuLG8scil7dGhpcy51QnVmZmVyPXQsdGhpcy52QnVmZmVyPWUsdGhpcy5oZWlnaHRCdWZmZXI9bix0aGlzLm5vcm1hbEJ1ZmZlcj1vLHRoaXMuaW5kZXg9cix0aGlzLmZpcnN0PXZvaWQgMCx0aGlzLnNlY29uZD12b2lkIDAsdGhpcy5yYXRpbz12b2lkIDB9O2puLnByb3RvdHlwZS5pbml0aWFsaXplRnJvbUNsaXBSZXN1bHQ9ZnVuY3Rpb24odCxlLG4pe2xldCBvPWUrMTtyZXR1cm4gdFtlXSE9PS0xP25bdFtlXV0uY2xvbmUodGhpcyk6KHRoaXMudmVydGV4QnVmZmVyPXZvaWQgMCx0aGlzLmluZGV4PXZvaWQgMCx0aGlzLmZpcnN0PW5bdFtvXV0sKytvLHRoaXMuc2Vjb25kPW5bdFtvXV0sKytvLHRoaXMucmF0aW89dFtvXSwrK28pLG99O2puLnByb3RvdHlwZS5nZXRLZXk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZGV4ZWQoKT90aGlzLmluZGV4OkpTT04uc3RyaW5naWZ5KHtmaXJzdDp0aGlzLmZpcnN0LmdldEtleSgpLHNlY29uZDp0aGlzLnNlY29uZC5nZXRLZXkoKSxyYXRpbzp0aGlzLnJhdGlvfSl9O2puLnByb3RvdHlwZS5pc0luZGV4ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gaCh0aGlzLmluZGV4KX07am4ucHJvdG90eXBlLmdldEg9ZnVuY3Rpb24oKXtyZXR1cm4gaCh0aGlzLmluZGV4KT90aGlzLmhlaWdodEJ1ZmZlclt0aGlzLmluZGV4XTpQLmxlcnAodGhpcy5maXJzdC5nZXRIKCksdGhpcy5zZWNvbmQuZ2V0SCgpLHRoaXMucmF0aW8pfTtqbi5wcm90b3R5cGUuZ2V0VT1mdW5jdGlvbigpe3JldHVybiBoKHRoaXMuaW5kZXgpP3RoaXMudUJ1ZmZlclt0aGlzLmluZGV4XTpQLmxlcnAodGhpcy5maXJzdC5nZXRVKCksdGhpcy5zZWNvbmQuZ2V0VSgpLHRoaXMucmF0aW8pfTtqbi5wcm90b3R5cGUuZ2V0Vj1mdW5jdGlvbigpe3JldHVybiBoKHRoaXMuaW5kZXgpP3RoaXMudkJ1ZmZlclt0aGlzLmluZGV4XTpQLmxlcnAodGhpcy5maXJzdC5nZXRWKCksdGhpcy5zZWNvbmQuZ2V0VigpLHRoaXMucmF0aW8pfTtqYT1uZXcgSixibT0tMSxMOD1bbmV3IGEsbmV3IGFdLEQ4PVtuZXcgYSxuZXcgYV07am4ucHJvdG90eXBlLmdldE5vcm1hbFg9ZnVuY3Rpb24oKXtyZXR1cm4gaCh0aGlzLmluZGV4KT90aGlzLm5vcm1hbEJ1ZmZlclt0aGlzLmluZGV4KjJdOihqYT1xUyh0aGlzLGphKSxqYS54KX07am4ucHJvdG90eXBlLmdldE5vcm1hbFk9ZnVuY3Rpb24oKXtyZXR1cm4gaCh0aGlzLmluZGV4KT90aGlzLm5vcm1hbEJ1ZmZlclt0aGlzLmluZGV4KjIrMV06KGphPXFTKHRoaXMsamEpLGphLnkpfTtWbz1bXTtWby5wdXNoKG5ldyBqbik7Vm8ucHVzaChuZXcgam4pO1ZvLnB1c2gobmV3IGpuKTtWby5wdXNoKG5ldyBqbik7Qjg9UWUoRjgpfSk7dmFyIFU4LGkxPSQoKCk9PntVOD1sMSh7Ii4vY29tYmluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGkwKCkscjApKSwiLi9jcmVhdGVCb3hHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihmMCgpLGEwKSksIi4vY3JlYXRlQm94T3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHAwKCksbDApKSwiLi9jcmVhdGVDaXJjbGVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pih3MCgpLFQwKSksIi4vY3JlYXRlQ2lyY2xlT3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KFMwKCksUjApKSwiLi9jcmVhdGVDb3BsYW5hclBvbHlnb25HZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihVMCgpLEIwKSksIi4vY3JlYXRlQ29wbGFuYXJQb2x5Z29uT3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KFYwKCksRzApKSwiLi9jcmVhdGVDb3JyaWRvckdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHJfKCksb18pKSwiLi9jcmVhdGVDb3JyaWRvck91dGxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihjXygpLHNfKSksIi4vY3JlYXRlQ3lsaW5kZXJHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihkXygpLHBfKSksIi4vY3JlYXRlQ3lsaW5kZXJPdXRsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oeV8oKSxfXykpLCIuL2NyZWF0ZUVsbGlwc2VHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihBXygpLGdfKSksIi4vY3JlYXRlRWxsaXBzZU91dGxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihUXygpLGJfKSksIi4vY3JlYXRlRWxsaXBzb2lkR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oRV8oKSxPXykpLCIuL2NyZWF0ZUVsbGlwc29pZE91dGxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihDXygpLFNfKSksIi4vY3JlYXRlRnJ1c3R1bUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KERfKCksTF8pKSwiLi9jcmVhdGVGcnVzdHVtT3V0bGluZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KEdfKCksa18pKSwiLi9jcmVhdGVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihjMSgpLHMxKSksIi4vY3JlYXRlR3JvdW5kUG9seWxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihKXygpLFFfKSksIi4vY3JlYXRlUGxhbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihueSgpLGV5KSksIi4vY3JlYXRlUGxhbmVPdXRsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oaXkoKSxyeSkpLCIuL2NyZWF0ZVBvbHlnb25HZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihmeSgpLGF5KSksIi4vY3JlYXRlUG9seWdvbk91dGxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihweSgpLGx5KSksIi4vY3JlYXRlUG9seWxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihneSgpLHl5KSksIi4vY3JlYXRlUG9seWxpbmVWb2x1bWVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihUeSgpLGJ5KSksIi4vY3JlYXRlUG9seWxpbmVWb2x1bWVPdXRsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oRXkoKSxPeSkpLCIuL2NyZWF0ZVJlY3RhbmdsZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHZ5KCksSXkpKSwiLi9jcmVhdGVSZWN0YW5nbGVPdXRsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oRHkoKSxMeSkpLCIuL2NyZWF0ZVNpbXBsZVBvbHlsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oa3koKSxVeSkpLCIuL2NyZWF0ZVNwaGVyZUdlb21ldHJ5LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHp5KCksVnkpKSwiLi9jcmVhdGVTcGhlcmVPdXRsaW5lR2VvbWV0cnkuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4ocXkoKSxIeSkpLCIuL2NyZWF0ZVRhc2tQcm9jZXNzb3JXb3JrZXIuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oc28oKSxvMCkpLCIuL2NyZWF0ZVZlY3RvclRpbGVDbGFtcGVkUG9seWxpbmVzLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KFd5KCksS3kpKSwiLi9jcmVhdGVWZWN0b3JUaWxlR2VvbWV0cmllcy5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihZeSgpLFh5KSksIi4vY3JlYXRlVmVjdG9yVGlsZVBvaW50cy5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihReSgpLFp5KSksIi4vY3JlYXRlVmVjdG9yVGlsZVBvbHlnb25zLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHRnKCksSnkpKSwiLi9jcmVhdGVWZWN0b3JUaWxlUG9seWxpbmVzLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KG9nKCksbmcpKSwiLi9jcmVhdGVWZXJ0aWNlc0Zyb21Hb29nbGVFYXJ0aEVudGVycHJpc2VCdWZmZXIuanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oYWcoKSxjZykpLCIuL2NyZWF0ZVZlcnRpY2VzRnJvbUhlaWdodG1hcC5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihsZygpLHVnKSksIi4vY3JlYXRlVmVydGljZXNGcm9tUXVhbnRpemVkVGVycmFpbk1lc2guanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4obWcoKSxkZykpLCIuL2NyZWF0ZVdhbGxHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihBZygpLGdnKSksIi4vY3JlYXRlV2FsbE91dGxpbmVHZW9tZXRyeS5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9Pih3ZygpLFRnKSksIi4vZGVjb2RlRHJhY28uanMiOigpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4oeGcoKSxDZykpLCIuL2RlY29kZUdvb2dsZUVhcnRoRW50ZXJwcmlzZVBhY2tldC5qcyI6KCk9PlByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCk9PihxZygpLEhnKSksIi4vZGVjb2RlSTNTLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KCRnKCksWWcpKSwiLi90cmFuc2NvZGVLVFgyLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KGUxKCksdDEpKSwiLi90cmFuc2ZlclR5cGVkQXJyYXlUZXN0LmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KG4xKCksVlMpKSwiLi91cHNhbXBsZVF1YW50aXplZFRlcnJhaW5NZXNoLmpzIjooKT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+KHIxKCksbzEpKX0pfSk7dmFyIHMxPXt9O2RlKHMxLHtkZWZhdWx0OigpPT5WOH0pO2FzeW5jIGZ1bmN0aW9uIGs4KHQsZSl7bGV0IG49VG1bZV0/P1RtW3RdO3JldHVybiBoKG4pP246aChlKT8odHlwZW9mIGV4cG9ydHM9PSJvYmplY3QiP249cHIoZSk6bj0oYXdhaXQgaW1wb3J0KGUpKS5kZWZhdWx0LFRtW2VdPW4sbik6KHR5cGVvZiBleHBvcnRzPT0ib2JqZWN0Ij9uPXByKGBXb3JrZXJzLyR7dH1gKTpuPShoKGUpP2F3YWl0IGltcG9ydChlKTphd2FpdCBVOChgLi8ke3R9LmpzYCkpLmRlZmF1bHQsVG1bdF09bixuKX1hc3luYyBmdW5jdGlvbiBHOCh0LGUpe2xldCBuPXQuc3ViVGFza3Msbz1uLmxlbmd0aCxyPW5ldyBBcnJheShvKTtmb3IobGV0IGk9MDtpPG87aSsrKXtsZXQgcz1uW2ldLGY9cy5nZW9tZXRyeSx1PXMubW9kdWxlTmFtZSxjPXMubW9kdWxlUGF0aDtpZihoKHUpJiZoKGMpKXRocm93IG5ldyBEKCJNdXN0IG9ubHkgc2V0IG1vZHVsZU5hbWUgb3IgbW9kdWxlUGF0aCIpO2godSl8fGgoYyk/cltpXT1rOCh1LGMpLnRoZW4obD0+bChmLHMub2Zmc2V0KSk6cltpXT1mfXJldHVybiBQcm9taXNlLmFsbChyKS50aGVuKGZ1bmN0aW9uKGkpe3JldHVybiBzYS5wYWNrQ3JlYXRlR2VvbWV0cnlSZXN1bHRzKGksZSl9KX12YXIgVG0sVjgsYzE9JCgoKT0+e2p0KCk7ZnQoKTtuMCgpO3NvKCk7aTEoKTtUbT17fTtWOD1RZShHOCl9KTt2YXIgRGs9e307ZGUoRGsse2NvbWJpbmVHZW9tZXRyeTooKT0+ejgsY3JlYXRlQm94R2VvbWV0cnk6KCk9Pmo4LGNyZWF0ZUJveE91dGxpbmVHZW9tZXRyeTooKT0+SDgsY3JlYXRlQ2lyY2xlR2VvbWV0cnk6KCk9PnE4LGNyZWF0ZUNpcmNsZU91dGxpbmVHZW9tZXRyeTooKT0+SzgsY3JlYXRlQ29wbGFuYXJQb2x5Z29uR2VvbWV0cnk6KCk9Plc4LGNyZWF0ZUNvcGxhbmFyUG9seWdvbk91dGxpbmVHZW9tZXRyeTooKT0+WDgsY3JlYXRlQ29ycmlkb3JHZW9tZXRyeTooKT0+WTgsY3JlYXRlQ29ycmlkb3JPdXRsaW5lR2VvbWV0cnk6KCk9PiQ4LGNyZWF0ZUN5bGluZGVyR2VvbWV0cnk6KCk9Plo4LGNyZWF0ZUN5bGluZGVyT3V0bGluZUdlb21ldHJ5OigpPT5ROCxjcmVhdGVFbGxpcHNlR2VvbWV0cnk6KCk9Pko4LGNyZWF0ZUVsbGlwc2VPdXRsaW5lR2VvbWV0cnk6KCk9PnRrLGNyZWF0ZUVsbGlwc29pZEdlb21ldHJ5OigpPT5layxjcmVhdGVFbGxpcHNvaWRPdXRsaW5lR2VvbWV0cnk6KCk9Pm5rLGNyZWF0ZUZydXN0dW1HZW9tZXRyeTooKT0+b2ssY3JlYXRlRnJ1c3R1bU91dGxpbmVHZW9tZXRyeTooKT0+cmssY3JlYXRlR2VvbWV0cnk6KCk9PmlrLGNyZWF0ZUdyb3VuZFBvbHlsaW5lR2VvbWV0cnk6KCk9PnNrLGNyZWF0ZVBsYW5lR2VvbWV0cnk6KCk9PmNrLGNyZWF0ZVBsYW5lT3V0bGluZUdlb21ldHJ5OigpPT5hayxjcmVhdGVQb2x5Z29uR2VvbWV0cnk6KCk9PmZrLGNyZWF0ZVBvbHlnb25PdXRsaW5lR2VvbWV0cnk6KCk9PnVrLGNyZWF0ZVBvbHlsaW5lR2VvbWV0cnk6KCk9PmxrLGNyZWF0ZVBvbHlsaW5lVm9sdW1lR2VvbWV0cnk6KCk9PnBrLGNyZWF0ZVBvbHlsaW5lVm9sdW1lT3V0bGluZUdlb21ldHJ5OigpPT5kayxjcmVhdGVSZWN0YW5nbGVHZW9tZXRyeTooKT0+bWssY3JlYXRlUmVjdGFuZ2xlT3V0bGluZUdlb21ldHJ5OigpPT5oayxjcmVhdGVTaW1wbGVQb2x5bGluZUdlb21ldHJ5OigpPT5fayxjcmVhdGVTcGhlcmVHZW9tZXRyeTooKT0+eWssY3JlYXRlU3BoZXJlT3V0bGluZUdlb21ldHJ5OigpPT5nayxjcmVhdGVUYXNrUHJvY2Vzc29yV29ya2VyOigpPT5BayxjcmVhdGVWZWN0b3JUaWxlQ2xhbXBlZFBvbHlsaW5lczooKT0+YmssY3JlYXRlVmVjdG9yVGlsZUdlb21ldHJpZXM6KCk9PlRrLGNyZWF0ZVZlY3RvclRpbGVQb2ludHM6KCk9PndrLGNyZWF0ZVZlY3RvclRpbGVQb2x5Z29uczooKT0+T2ssY3JlYXRlVmVjdG9yVGlsZVBvbHlsaW5lczooKT0+RWssY3JlYXRlVmVydGljZXNGcm9tR29vZ2xlRWFydGhFbnRlcnByaXNlQnVmZmVyOigpPT5SayxjcmVhdGVWZXJ0aWNlc0Zyb21IZWlnaHRtYXA6KCk9PlNrLGNyZWF0ZVZlcnRpY2VzRnJvbVF1YW50aXplZFRlcnJhaW5NZXNoOigpPT5DayxjcmVhdGVXYWxsR2VvbWV0cnk6KCk9PnhrLGNyZWF0ZVdhbGxPdXRsaW5lR2VvbWV0cnk6KCk9PlBrLGRlY29kZURyYWNvOigpPT5NayxkZWNvZGVHb29nbGVFYXJ0aEVudGVycHJpc2VQYWNrZXQ6KCk9Pk5rLGRlY29kZUkzUzooKT0+SWssdHJhbnNjb2RlS1RYMjooKT0+dmssdHJhbnNmZXJUeXBlZEFycmF5VGVzdDooKT0+RmssdXBzYW1wbGVRdWFudGl6ZWRUZXJyYWluTWVzaDooKT0+TGt9KTt2YXIgejg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5pMCgpKX0sajg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5mMCgpKX0sSDg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5wMCgpKX0scTg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT53MCgpKX0sSzg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5TMCgpKX0sVzg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5VMCgpKX0sWDg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5WMCgpKX0sWTg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5yXygpKX0sJDg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5jXygpKX0sWjg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5kXygpKX0sUTg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT55XygpKX0sSjg9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5BXygpKX0sdGs9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5UXygpKX0sZWs9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5FXygpKX0sbms9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5DXygpKX0sb2s9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5EXygpKX0scms9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5HXygpKX0saWs9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5jMSgpKX0sc2s9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5KXygpKX0sY2s9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5ueSgpKX0sYWs9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5peSgpKX0sZms9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5meSgpKX0sdWs9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5weSgpKX0sbGs9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5neSgpKX0scGs9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5UeSgpKX0sZGs9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5FeSgpKX0sbWs9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT52eSgpKX0saGs9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5EeSgpKX0sX2s9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5reSgpKX0seWs9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT56eSgpKX0sZ2s9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5xeSgpKX0sQWs9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5zbygpKX0sYms9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5XeSgpKX0sVGs9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5ZeSgpKX0sd2s9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5ReSgpKX0sT2s9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT50ZygpKX0sRWs9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5vZygpKX0sUms9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5hZygpKX0sU2s9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5sZygpKX0sQ2s9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5tZygpKX0seGs9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5BZygpKX0sUGs9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT53ZygpKX0sTWs9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT54ZygpKX0sTms9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5xZygpKX0sSWs9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT4kZygpKX0sdms9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5lMSgpKX0sRms9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5uMSgpKX0sTGs9KCk9PntQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5yMSgpKX07cmV0dXJuIFFTKERrKTt9KSgpOwo=")});var qM=ld((BVt,yq)=>{var OVt=_(T()),yp=function(e){e==null&&(e=new Date().getTime()),this.N=624,this.M=397,this.MATRIX_A=2567483615,this.UPPER_MASK=2147483648,this.LOWER_MASK=2147483647,this.mt=new Array(this.N),this.mti=this.N+1,e.constructor==Array?this.init_by_array(e,e.length):this.init_seed(e)};yp.prototype.init_seed=function(e){for(this.mt[0]=e>>>0,this.mti=1;this.mti<this.N;this.mti++){var e=this.mt[this.mti-1]^this.mt[this.mti-1]>>>30;this.mt[this.mti]=(((e&4294901760)>>>16)*1812433253<<16)+(e&65535)*1812433253+this.mti,this.mt[this.mti]>>>=0}};yp.prototype.init_by_array=function(e,t){var n,i,o;for(this.init_seed(19650218),n=1,i=0,o=this.N>t?this.N:t;o;o--){var r=this.mt[n-1]^this.mt[n-1]>>>30;this.mt[n]=(this.mt[n]^(((r&4294901760)>>>16)*1664525<<16)+(r&65535)*1664525)+e[i]+i,this.mt[n]>>>=0,n++,i++,n>=this.N&&(this.mt[0]=this.mt[this.N-1],n=1),i>=t&&(i=0)}for(o=this.N-1;o;o--){var r=this.mt[n-1]^this.mt[n-1]>>>30;this.mt[n]=(this.mt[n]^(((r&4294901760)>>>16)*1566083941<<16)+(r&65535)*1566083941)-n,this.mt[n]>>>=0,n++,n>=this.N&&(this.mt[0]=this.mt[this.N-1],n=1)}this.mt[0]=2147483648};yp.prototype.random_int=function(){var e,t=new Array(0,this.MATRIX_A);if(this.mti>=this.N){var n;for(this.mti==this.N+1&&this.init_seed(5489),n=0;n<this.N-this.M;n++)e=this.mt[n]&this.UPPER_MASK|this.mt[n+1]&this.LOWER_MASK,this.mt[n]=this.mt[n+this.M]^e>>>1^t[e&1];for(;n<this.N-1;n++)e=this.mt[n]&this.UPPER_MASK|this.mt[n+1]&this.LOWER_MASK,this.mt[n]=this.mt[n+(this.M-this.N)]^e>>>1^t[e&1];e=this.mt[this.N-1]&this.UPPER_MASK|this.mt[0]&this.LOWER_MASK,this.mt[this.N-1]=this.mt[this.M-1]^e>>>1^t[e&1],this.mti=0}return e=this.mt[this.mti++],e^=e>>>11,e^=e<<7&2636928640,e^=e<<15&4022730752,e^=e>>>18,e>>>0};yp.prototype.random_int31=function(){return this.random_int()>>>1};yp.prototype.random_incl=function(){return this.random_int()*(1/4294967295)};yp.prototype.random=function(){return this.random_int()*(1/4294967296)};yp.prototype.random_excl=function(){return(this.random_int()+.5)*(1/4294967296)};yp.prototype.random_long=function(){var e=this.random_int()>>>5,t=this.random_int()>>>6;return(e*67108864+t)*(1/9007199254740992)};yq.exports=yp});var Bq=ld((BS,OS)=>{var xZt=_(T());/*! https://mths.be/punycode v1.4.0 by @mathias */(function(e){var t=typeof BS=="object"&&BS&&!BS.nodeType&&BS,n=typeof OS=="object"&&OS&&!OS.nodeType&&OS,i=typeof global=="object"&&global;(i.global===i||i.window===i||i.self===i)&&(e=i);var o,r=2147483647,s=36,a=1,c=26,d=38,u=700,h=72,p=128,g="-",f=/^xn--/,y=/[^\x20-\x7E]/,x=/[\x2E\u3002\uFF0E\uFF61]/g,S={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},C=s-a,V=Math.floor,L=String.fromCharCode,Z;function E(k){throw new RangeError(S[k])}function P(k,O){for(var N=k.length,z=[];N--;)z[N]=O(k[N]);return z}function W(k,O){var N=k.split("@"),z="";N.length>1&&(z=N[0]+"@",k=N[1]),k=k.replace(x,".");var K=k.split("."),te=P(K,O).join(".");return z+te}function v(k){for(var O=[],N=0,z=k.length,K,te;N<z;)K=k.charCodeAt(N++),K>=55296&&K<=56319&&N<z?(te=k.charCodeAt(N++),(te&64512)==56320?O.push(((K&1023)<<10)+(te&1023)+65536):(O.push(K),N--)):O.push(K);return O}function A(k){return P(k,function(O){var N="";return O>65535&&(O-=65536,N+=L(O>>>10&1023|55296),O=56320|O&1023),N+=L(O),N}).join("")}function b(k){return k-48<10?k-22:k-65<26?k-65:k-97<26?k-97:s}function R(k,O){return k+22+75*(k<26)-((O!=0)<<5)}function G(k,O,N){var z=0;for(k=N?V(k/u):k>>1,k+=V(k/O);k>C*c>>1;z+=s)k=V(k/C);return V(z+(C+1)*k/(k+d))}function I(k){var O=[],N=k.length,z,K=0,te=p,H=h,j,ee,fe,Te,de,xe,Ce,Ie,Le;for(j=k.lastIndexOf(g),j<0&&(j=0),ee=0;ee<j;++ee)k.charCodeAt(ee)>=128&&E("not-basic"),O.push(k.charCodeAt(ee));for(fe=j>0?j+1:0;fe<N;){for(Te=K,de=1,xe=s;fe>=N&&E("invalid-input"),Ce=b(k.charCodeAt(fe++)),(Ce>=s||Ce>V((r-K)/de))&&E("overflow"),K+=Ce*de,Ie=xe<=H?a:xe>=H+c?c:xe-H,!(Ce<Ie);xe+=s)Le=s-Ie,de>V(r/Le)&&E("overflow"),de*=Le;z=O.length+1,H=G(K-Te,z,Te==0),V(K/z)>r-te&&E("overflow"),te+=V(K/z),K%=z,O.splice(K++,0,te)}return A(O)}function w(k){var O,N,z,K,te,H,j,ee,fe,Te,de,xe=[],Ce,Ie,Le,Ne;for(k=v(k),Ce=k.length,O=p,N=0,te=h,H=0;H<Ce;++H)de=k[H],de<128&&xe.push(L(de));for(z=K=xe.length,K&&xe.push(g);z<Ce;){for(j=r,H=0;H<Ce;++H)de=k[H],de>=O&&de<j&&(j=de);for(Ie=z+1,j-O>V((r-N)/Ie)&&E("overflow"),N+=(j-O)*Ie,O=j,H=0;H<Ce;++H)if(de=k[H],de<O&&++N>r&&E("overflow"),de==O){for(ee=N,fe=s;Te=fe<=te?a:fe>=te+c?c:fe-te,!(ee<Te);fe+=s)Ne=ee-Te,Le=s-Te,xe.push(L(R(Te+Ne%Le,0))),ee=V(Ne/Le);xe.push(L(R(ee,0))),te=G(N,Ie,z==K),N=0,++z}++N,++O}return xe.join("")}function M(k){return W(k,function(O){return f.test(O)?I(O.slice(4).toLowerCase()):O})}function B(k){return W(k,function(O){return y.test(O)?"xn--"+w(O):O})}if(o={version:"1.3.2",ucs2:{decode:v,encode:A},decode:I,encode:w,toASCII:B,toUnicode:M},typeof define=="function"&&typeof define.amd=="object"&&define.amd)define("punycode",function(){return o});else if(t&&n)if(OS.exports==t)n.exports=o;else for(Z in o)o.hasOwnProperty(Z)&&(t[Z]=o[Z]);else e.punycode=o})(BS)});var Yq=ld((Oq,yN)=>{var _Zt=_(T());/*! * URI.js - Mutating URLs * IPv6 Support * * Version: 1.19.11 * * Author: Rodney Rehm * Web: http://medialize.github.io/URI.js/ * * Licensed under * MIT License http://www.opensource.org/licenses/mit-license * */(function(e,t){"use strict";typeof yN=="object"&&yN.exports?yN.exports=t():typeof define=="function"&&define.amd?define(t):e.IPv6=t(e)})(Oq,function(e){"use strict";var t=e&&e.IPv6;function n(o){var r=o.toLowerCase(),s=r.split(":"),a=s.length,c=8;s[0]===""&&s[1]===""&&s[2]===""?(s.shift(),s.shift()):s[0]===""&&s[1]===""?s.shift():s[a-1]===""&&s[a-2]===""&&s.pop(),a=s.length,s[a-1].indexOf(".")!==-1&&(c=7);var d;for(d=0;d<a&&s[d]!=="";d++);if(d<c)for(s.splice(d,1,"0000");s.length<c;)s.splice(d,0,"0000");for(var u,h=0;h<c;h++){u=s[h].split("");for(var p=0;p<3&&(u[0]==="0"&&u.length>1);p++)u.splice(0,1);s[h]=u.join("")}var g=-1,f=0,y=0,x=-1,S=!1;for(h=0;h<c;h++)S?s[h]==="0"?y+=1:(S=!1,y>f&&(g=x,f=y)):s[h]==="0"&&(S=!0,x=h,y=1);y>f&&(g=x,f=y),f>1&&s.splice(g,f,""),a=s.length;var C="";for(s[0]===""&&(C=":"),h=0;h<a&&(C+=s[h],h!==a-1);h++)C+=":";return s[a-1]===""&&(C+=":"),C}function i(){return e.IPv6===this&&(e.IPv6=t),this}return{best:n,noConflict:i}})});var Hq=ld((zq,xN)=>{var TZt=_(T());/*! * URI.js - Mutating URLs * Second Level Domain (SLD) Support * * Version: 1.19.11 * * Author: Rodney Rehm * Web: http://medialize.github.io/URI.js/ * * Licensed under * MIT License http://www.opensource.org/licenses/mit-license * */(function(e,t){"use strict";typeof xN=="object"&&xN.exports?xN.exports=t():typeof define=="function"&&define.amd?define(t):e.SecondLevelDomains=t(e)})(zq,function(e){"use strict";var t=e&&e.SecondLevelDomains,n={list:{ac:" com gov mil net org ",ae:" ac co gov mil name net org pro sch ",af:" com edu gov net org ",al:" com edu gov mil net org ",ao:" co ed gv it og pb ",ar:" com edu gob gov int mil net org tur ",at:" ac co gv or ",au:" asn com csiro edu gov id net org ",ba:" co com edu gov mil net org rs unbi unmo unsa untz unze ",bb:" biz co com edu gov info net org store tv ",bh:" biz cc com edu gov info net org ",bn:" com edu gov net org ",bo:" com edu gob gov int mil net org tv ",br:" adm adv agr am arq art ato b bio blog bmd cim cng cnt com coop ecn edu eng esp etc eti far flog fm fnd fot fst g12 ggf gov imb ind inf jor jus lel mat med mil mus net nom not ntr odo org ppg pro psc psi qsl rec slg srv tmp trd tur tv vet vlog wiki zlg ",bs:" com edu gov net org ",bz:" du et om ov rg ",ca:" ab bc mb nb nf nl ns nt nu on pe qc sk yk ",ck:" biz co edu gen gov info net org ",cn:" ac ah bj com cq edu fj gd gov gs gx gz ha hb he hi hl hn jl js jx ln mil net nm nx org qh sc sd sh sn sx tj tw xj xz yn zj ",co:" com edu gov mil net nom org ",cr:" ac c co ed fi go or sa ",cy:" ac biz com ekloges gov ltd name net org parliament press pro tm ",do:" art com edu gob gov mil net org sld web ",dz:" art asso com edu gov net org pol ",ec:" com edu fin gov info med mil net org pro ",eg:" com edu eun gov mil name net org sci ",er:" com edu gov ind mil net org rochest w ",es:" com edu gob nom org ",et:" biz com edu gov info name net org ",fj:" ac biz com info mil name net org pro ",fk:" ac co gov net nom org ",fr:" asso com f gouv nom prd presse tm ",gg:" co net org ",gh:" com edu gov mil org ",gn:" ac com gov net org ",gr:" com edu gov mil net org ",gt:" com edu gob ind mil net org ",gu:" com edu gov net org ",hk:" com edu gov idv net org ",hu:" 2000 agrar bolt casino city co erotica erotika film forum games hotel info ingatlan jogasz konyvelo lakas media news org priv reklam sex shop sport suli szex tm tozsde utazas video ",id:" ac co go mil net or sch web ",il:" ac co gov idf k12 muni net org ",in:" ac co edu ernet firm gen gov i ind mil net nic org res ",iq:" com edu gov i mil net org ",ir:" ac co dnssec gov i id net org sch ",it:" edu gov ",je:" co net org ",jo:" com edu gov mil name net org sch ",jp:" ac ad co ed go gr lg ne or ",ke:" ac co go info me mobi ne or sc ",kh:" com edu gov mil net org per ",ki:" biz com de edu gov info mob net org tel ",km:" asso com coop edu gouv k medecin mil nom notaires pharmaciens presse tm veterinaire ",kn:" edu gov net org ",kr:" ac busan chungbuk chungnam co daegu daejeon es gangwon go gwangju gyeongbuk gyeonggi gyeongnam hs incheon jeju jeonbuk jeonnam k kg mil ms ne or pe re sc seoul ulsan ",kw:" com edu gov net org ",ky:" com edu gov net org ",kz:" com edu gov mil net org ",lb:" com edu gov net org ",lk:" assn com edu gov grp hotel int ltd net ngo org sch soc web ",lr:" com edu gov net org ",lv:" asn com conf edu gov id mil net org ",ly:" com edu gov id med net org plc sch ",ma:" ac co gov m net org press ",mc:" asso tm ",me:" ac co edu gov its net org priv ",mg:" com edu gov mil nom org prd tm ",mk:" com edu gov inf name net org pro ",ml:" com edu gov net org presse ",mn:" edu gov org ",mo:" com edu gov net org ",mt:" com edu gov net org ",mv:" aero biz com coop edu gov info int mil museum name net org pro ",mw:" ac co com coop edu gov int museum net org ",mx:" com edu gob net org ",my:" com edu gov mil name net org sch ",nf:" arts com firm info net other per rec store web ",ng:" biz com edu gov mil mobi name net org sch ",ni:" ac co com edu gob mil net nom org ",np:" com edu gov mil net org ",nr:" biz com edu gov info net org ",om:" ac biz co com edu gov med mil museum net org pro sch ",pe:" com edu gob mil net nom org sld ",ph:" com edu gov i mil net ngo org ",pk:" biz com edu fam gob gok gon gop gos gov net org web ",pl:" art bialystok biz com edu gda gdansk gorzow gov info katowice krakow lodz lublin mil net ngo olsztyn org poznan pwr radom slupsk szczecin torun warszawa waw wroc wroclaw zgora ",pr:" ac biz com edu est gov info isla name net org pro prof ",ps:" com edu gov net org plo sec ",pw:" belau co ed go ne or ",ro:" arts com firm info nom nt org rec store tm www ",rs:" ac co edu gov in org ",sb:" com edu gov net org ",sc:" com edu gov net org ",sh:" co com edu gov net nom org ",sl:" com edu gov net org ",st:" co com consulado edu embaixada gov mil net org principe saotome store ",sv:" com edu gob org red ",sz:" ac co org ",tr:" av bbs bel biz com dr edu gen gov info k12 name net org pol tel tsk tv web ",tt:" aero biz cat co com coop edu gov info int jobs mil mobi museum name net org pro tel travel ",tw:" club com ebiz edu game gov idv mil net org ",mu:" ac co com gov net or org ",mz:" ac co edu gov org ",na:" co com ",nz:" ac co cri geek gen govt health iwi maori mil net org parliament school ",pa:" abo ac com edu gob ing med net nom org sld ",pt:" com edu gov int net nome org publ ",py:" com edu gov mil net org ",qa:" com edu gov mil net org ",re:" asso com nom ",ru:" ac adygeya altai amur arkhangelsk astrakhan bashkiria belgorod bir bryansk buryatia cbg chel chelyabinsk chita chukotka chuvashia com dagestan e-burg edu gov grozny int irkutsk ivanovo izhevsk jar joshkar-ola kalmykia kaluga kamchatka karelia kazan kchr kemerovo khabarovsk khakassia khv kirov koenig komi kostroma kranoyarsk kuban kurgan kursk lipetsk magadan mari mari-el marine mil mordovia mosreg msk murmansk nalchik net nnov nov novosibirsk nsk omsk orenburg org oryol penza perm pp pskov ptz rnd ryazan sakhalin samara saratov simbirsk smolensk spb stavropol stv surgut tambov tatarstan tom tomsk tsaritsyn tsk tula tuva tver tyumen udm udmurtia ulan-ude vladikavkaz vladimir vladivostok volgograd vologda voronezh vrn vyatka yakutia yamal yekaterinburg yuzhno-sakhalinsk ",rw:" ac co com edu gouv gov int mil net ",sa:" com edu gov med net org pub sch ",sd:" com edu gov info med net org tv ",se:" a ac b bd c d e f g h i k l m n o org p parti pp press r s t tm u w x y z ",sg:" com edu gov idn net org per ",sn:" art com edu gouv org perso univ ",sy:" com edu gov mil net news org ",th:" ac co go in mi net or ",tj:" ac biz co com edu go gov info int mil name net nic org test web ",tn:" agrinet com defense edunet ens fin gov ind info intl mincom nat net org perso rnrt rns rnu tourism ",tz:" ac co go ne or ",ua:" biz cherkassy chernigov chernovtsy ck cn co com crimea cv dn dnepropetrovsk donetsk dp edu gov if in ivano-frankivsk kh kharkov kherson khmelnitskiy kiev kirovograd km kr ks kv lg lugansk lutsk lviv me mk net nikolaev od odessa org pl poltava pp rovno rv sebastopol sumy te ternopil uzhgorod vinnica vn zaporizhzhe zhitomir zp zt ",ug:" ac co go ne or org sc ",uk:" ac bl british-library co cym gov govt icnet jet lea ltd me mil mod national-library-scotland nel net nhs nic nls org orgn parliament plc police sch scot soc ",us:" dni fed isa kids nsn ",uy:" com edu gub mil net org ",ve:" co com edu gob info mil net org web ",vi:" co com k12 net org ",vn:" ac biz com edu gov health info int name net org pro ",ye:" co com gov ltd me net org plc ",yu:" ac co edu gov org ",za:" ac agric alt bourse city co cybernet db edu gov grondar iaccess imt inca landesign law mil net ngo nis nom olivetti org pix school tm web ",zm:" ac co com edu gov net org sch ",com:"ar br cn de eu gb gr hu jpn kr no qc ru sa se uk us uy za ",net:"gb jp se uk ",org:"ae",de:"com "},has:function(i){var o=i.lastIndexOf(".");if(o<=0||o>=i.length-1)return!1;var r=i.lastIndexOf(".",o-1);if(r<=0||r>=o-1)return!1;var s=n.list[i.slice(o+1)];return s?s.indexOf(" "+i.slice(r+1,o)+" ")>=0:!1},is:function(i){var o=i.lastIndexOf(".");if(o<=0||o>=i.length-1)return!1;var r=i.lastIndexOf(".",o-1);if(r>=0)return!1;var s=n.list[i.slice(o+1)];return s?s.indexOf(" "+i.slice(0,o)+" ")>=0:!1},get:function(i){var o=i.lastIndexOf(".");if(o<=0||o>=i.length-1)return null;var r=i.lastIndexOf(".",o-1);if(r<=0||r>=o-1)return null;var s=n.list[i.slice(o+1)];return!s||s.indexOf(" "+i.slice(r+1,o)+" ")<0?null:i.slice(r+1)},noConflict:function(){return e.SecondLevelDomains===this&&(e.SecondLevelDomains=t),this}};return n})});var dd=ld((Kq,_N)=>{var SZt=_(T());/*! * URI.js - Mutating URLs * * Version: 1.19.11 * * Author: Rodney Rehm * Web: http://medialize.github.io/URI.js/ * * Licensed under * MIT License http://www.opensource.org/licenses/mit-license * */(function(e,t){"use strict";typeof _N=="object"&&_N.exports?_N.exports=t(Bq(),Yq(),Hq()):typeof define=="function"&&define.amd?define(["./punycode","./IPv6","./SecondLevelDomains"],t):e.URI=t(e.punycode,e.IPv6,e.SecondLevelDomains,e)})(Kq,function(e,t,n,i){"use strict";var o=i&&i.URI;function r(R,G){var I=arguments.length>=1,w=arguments.length>=2;if(!(this instanceof r))return I?w?new r(R,G):new r(R):new r;if(R===void 0){if(I)throw new TypeError("undefined is not a valid argument for URI");typeof location<"u"?R=location.href+"":R=""}if(R===null&&I)throw new TypeError("null is not a valid argument for URI");return this.href(R),G!==void 0?this.absoluteTo(G):this}function s(R){return/^[0-9]+$/.test(R)}r.version="1.19.11";var a=r.prototype,c=Object.prototype.hasOwnProperty;function d(R){return R.replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")}function u(R){return R===void 0?"Undefined":String(Object.prototype.toString.call(R)).slice(8,-1)}function h(R){return u(R)==="Array"}function p(R,G){var I={},w,M;if(u(G)==="RegExp")I=null;else if(h(G))for(w=0,M=G.length;w<M;w++)I[G[w]]=!0;else I[G]=!0;for(w=0,M=R.length;w<M;w++){var B=I&&I[R[w]]!==void 0||!I&&G.test(R[w]);B&&(R.splice(w,1),M--,w--)}return R}function g(R,G){var I,w;if(h(G)){for(I=0,w=G.length;I<w;I++)if(!g(R,G[I]))return!1;return!0}var M=u(G);for(I=0,w=R.length;I<w;I++)if(M==="RegExp"){if(typeof R[I]=="string"&&R[I].match(G))return!0}else if(R[I]===G)return!0;return!1}function f(R,G){if(!h(R)||!h(G)||R.length!==G.length)return!1;R.sort(),G.sort();for(var I=0,w=R.length;I<w;I++)if(R[I]!==G[I])return!1;return!0}function y(R){var G=/^\/+|\/+$/g;return R.replace(G,"")}r._parts=function(){return{protocol:null,username:null,password:null,hostname:null,urn:null,port:null,path:null,query:null,fragment:null,preventInvalidHostname:r.preventInvalidHostname,duplicateQueryParameters:r.duplicateQueryParameters,escapeQuerySpace:r.escapeQuerySpace}},r.preventInvalidHostname=!1,r.duplicateQueryParameters=!1,r.escapeQuerySpace=!0,r.protocol_expression=/^[a-z][a-z0-9.+-]*$/i,r.idn_expression=/[^a-z0-9\._-]/i,r.punycode_expression=/(xn--)/i,r.ip4_expression=/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/,r.ip6_expression=/^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/,r.find_uri_expression=/\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/ig,r.findUri={start:/\b(?:([a-z][a-z0-9.+-]*:\/\/)|www\.)/gi,end:/[\s\r\n]|$/,trim:/[`!()\[\]{};:'".,<>?«»“”„‘’]+$/,parens:/(\([^\)]*\)|\[[^\]]*\]|\{[^}]*\}|<[^>]*>)/g},r.leading_whitespace_expression=/^[\x00-\x20\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/,r.ascii_tab_whitespace=/[\u0009\u000A\u000D]+/g,r.defaultPorts={http:"80",https:"443",ftp:"21",gopher:"70",ws:"80",wss:"443"},r.hostProtocols=["http","https"],r.invalid_hostname_characters=/[^a-zA-Z0-9\.\-:_]/,r.domAttributes={a:"href",blockquote:"cite",link:"href",base:"href",script:"src",form:"action",img:"src",area:"href",iframe:"src",embed:"src",source:"src",track:"src",input:"src",audio:"src",video:"src"},r.getDomAttribute=function(R){if(!(!R||!R.nodeName)){var G=R.nodeName.toLowerCase();if(!(G==="input"&&R.type!=="image"))return r.domAttributes[G]}};function x(R){return escape(R)}function S(R){return encodeURIComponent(R).replace(/[!'()*]/g,x).replace(/\*/g,"%2A")}r.encode=S,r.decode=decodeURIComponent,r.iso8859=function(){r.encode=escape,r.decode=unescape},r.unicode=function(){r.encode=S,r.decode=decodeURIComponent},r.characters={pathname:{encode:{expression:/%(24|26|2B|2C|3B|3D|3A|40)/ig,map:{"%24":"$","%26":"&","%2B":"+","%2C":",","%3B":";","%3D":"=","%3A":":","%40":"@"}},decode:{expression:/[\/\?#]/g,map:{"/":"%2F","?":"%3F","#":"%23"}}},reserved:{encode:{expression:/%(21|23|24|26|27|28|29|2A|2B|2C|2F|3A|3B|3D|3F|40|5B|5D)/ig,map:{"%3A":":","%2F":"/","%3F":"?","%23":"#","%5B":"[","%5D":"]","%40":"@","%21":"!","%24":"$","%26":"&","%27":"'","%28":"(","%29":")","%2A":"*","%2B":"+","%2C":",","%3B":";","%3D":"="}}},urnpath:{encode:{expression:/%(21|24|27|28|29|2A|2B|2C|3B|3D|40)/ig,map:{"%21":"!","%24":"$","%27":"'","%28":"(","%29":")","%2A":"*","%2B":"+","%2C":",","%3B":";","%3D":"=","%40":"@"}},decode:{expression:/[\/\?#:]/g,map:{"/":"%2F","?":"%3F","#":"%23",":":"%3A"}}}},r.encodeQuery=function(R,G){var I=r.encode(R+"");return G===void 0&&(G=r.escapeQuerySpace),G?I.replace(/%20/g,"+"):I},r.decodeQuery=function(R,G){R+="",G===void 0&&(G=r.escapeQuerySpace);try{return r.decode(G?R.replace(/\+/g,"%20"):R)}catch{return R}};var C={encode:"encode",decode:"decode"},V,L=function(R,G){return function(I){try{return r[G](I+"").replace(r.characters[R][G].expression,function(w){return r.characters[R][G].map[w]})}catch{return I}}};for(V in C)r[V+"PathSegment"]=L("pathname",C[V]),r[V+"UrnPathSegment"]=L("urnpath",C[V]);var Z=function(R,G,I){return function(w){var M;I?M=function(N){return r[G](r[I](N))}:M=r[G];for(var B=(w+"").split(R),k=0,O=B.length;k<O;k++)B[k]=M(B[k]);return B.join(R)}};r.decodePath=Z("/","decodePathSegment"),r.decodeUrnPath=Z(":","decodeUrnPathSegment"),r.recodePath=Z("/","encodePathSegment","decode"),r.recodeUrnPath=Z(":","encodeUrnPathSegment","decode"),r.encodeReserved=L("reserved","encode"),r.parse=function(R,G){var I;return G||(G={preventInvalidHostname:r.preventInvalidHostname}),R=R.replace(r.leading_whitespace_expression,""),R=R.replace(r.ascii_tab_whitespace,""),I=R.indexOf("#"),I>-1&&(G.fragment=R.substring(I+1)||null,R=R.substring(0,I)),I=R.indexOf("?"),I>-1&&(G.query=R.substring(I+1)||null,R=R.substring(0,I)),R=R.replace(/^(https?|ftp|wss?)?:+[/\\]*/i,"$1://"),R=R.replace(/^[/\\]{2,}/i,"//"),R.substring(0,2)==="//"?(G.protocol=null,R=R.substring(2),R=r.parseAuthority(R,G)):(I=R.indexOf(":"),I>-1&&(G.protocol=R.substring(0,I)||null,G.protocol&&!G.protocol.match(r.protocol_expression)?G.protocol=void 0:R.substring(I+1,I+3).replace(/\\/g,"/")==="//"?(R=R.substring(I+3),R=r.parseAuthority(R,G)):(R=R.substring(I+1),G.urn=!0))),G.path=R,G},r.parseHost=function(R,G){R||(R=""),R=R.replace(/\\/g,"/");var I=R.indexOf("/"),w,M;if(I===-1&&(I=R.length),R.charAt(0)==="[")w=R.indexOf("]"),G.hostname=R.substring(1,w)||null,G.port=R.substring(w+2,I)||null,G.port==="/"&&(G.port=null);else{var B=R.indexOf(":"),k=R.indexOf("/"),O=R.indexOf(":",B+1);O!==-1&&(k===-1||O<k)?(G.hostname=R.substring(0,I)||null,G.port=null):(M=R.substring(0,I).split(":"),G.hostname=M[0]||null,G.port=M[1]||null)}return G.hostname&&R.substring(I).charAt(0)!=="/"&&(I++,R="/"+R),G.preventInvalidHostname&&r.ensureValidHostname(G.hostname,G.protocol),G.port&&r.ensureValidPort(G.port),R.substring(I)||"/"},r.parseAuthority=function(R,G){return R=r.parseUserinfo(R,G),r.parseHost(R,G)},r.parseUserinfo=function(R,G){var I=R,w=R.indexOf("\\");w!==-1&&(R=R.replace(/\\/g,"/"));var M=R.indexOf("/"),B=R.lastIndexOf("@",M>-1?M:R.length-1),k;return B>-1&&(M===-1||B<M)?(k=R.substring(0,B).split(":"),G.username=k[0]?r.decode(k[0]):null,k.shift(),G.password=k[0]?r.decode(k.join(":")):null,R=I.substring(B+1)):(G.username=null,G.password=null),R},r.parseQuery=function(R,G){if(!R)return{};if(R=R.replace(/&+/g,"&").replace(/^\?*&*|&+$/g,""),!R)return{};for(var I={},w=R.split("&"),M=w.length,B,k,O,N=0;N<M;N++)B=w[N].split("="),k=r.decodeQuery(B.shift(),G),O=B.length?r.decodeQuery(B.join("="),G):null,k!=="__proto__"&&(c.call(I,k)?((typeof I[k]=="string"||I[k]===null)&&(I[k]=[I[k]]),I[k].push(O)):I[k]=O);return I},r.build=function(R){var G="",I=!1;return R.protocol&&(G+=R.protocol+":"),!R.urn&&(G||R.hostname)&&(G+="//",I=!0),G+=r.buildAuthority(R)||"",typeof R.path=="string"&&(R.path.charAt(0)!=="/"&&I&&(G+="/"),G+=R.path),typeof R.query=="string"&&R.query&&(G+="?"+R.query),typeof R.fragment=="string"&&R.fragment&&(G+="#"+R.fragment),G},r.buildHost=function(R){var G="";if(R.hostname)r.ip6_expression.test(R.hostname)?G+="["+R.hostname+"]":G+=R.hostname;else return"";return R.port&&(G+=":"+R.port),G},r.buildAuthority=function(R){return r.buildUserinfo(R)+r.buildHost(R)},r.buildUserinfo=function(R){var G="";return R.username&&(G+=r.encode(R.username)),R.password&&(G+=":"+r.encode(R.password)),G&&(G+="@"),G},r.buildQuery=function(R,G,I){var w="",M,B,k,O;for(B in R)if(B!=="__proto__"&&c.call(R,B))if(h(R[B]))for(M={},k=0,O=R[B].length;k<O;k++)R[B][k]!==void 0&&M[R[B][k]+""]===void 0&&(w+="&"+r.buildQueryParameter(B,R[B][k],I),G!==!0&&(M[R[B][k]+""]=!0));else R[B]!==void 0&&(w+="&"+r.buildQueryParameter(B,R[B],I));return w.substring(1)},r.buildQueryParameter=function(R,G,I){return r.encodeQuery(R,I)+(G!==null?"="+r.encodeQuery(G,I):"")},r.addQuery=function(R,G,I){if(typeof G=="object")for(var w in G)c.call(G,w)&&r.addQuery(R,w,G[w]);else if(typeof G=="string"){if(R[G]===void 0){R[G]=I;return}else typeof R[G]=="string"&&(R[G]=[R[G]]);h(I)||(I=[I]),R[G]=(R[G]||[]).concat(I)}else throw new TypeError("URI.addQuery() accepts an object, string as the name parameter")},r.setQuery=function(R,G,I){if(typeof G=="object")for(var w in G)c.call(G,w)&&r.setQuery(R,w,G[w]);else if(typeof G=="string")R[G]=I===void 0?null:I;else throw new TypeError("URI.setQuery() accepts an object, string as the name parameter")},r.removeQuery=function(R,G,I){var w,M,B;if(h(G))for(w=0,M=G.length;w<M;w++)R[G[w]]=void 0;else if(u(G)==="RegExp")for(B in R)G.test(B)&&(R[B]=void 0);else if(typeof G=="object")for(B in G)c.call(G,B)&&r.removeQuery(R,B,G[B]);else if(typeof G=="string")I!==void 0?u(I)==="RegExp"?!h(R[G])&&I.test(R[G])?R[G]=void 0:R[G]=p(R[G],I):R[G]===String(I)&&(!h(I)||I.length===1)?R[G]=void 0:h(R[G])&&(R[G]=p(R[G],I)):R[G]=void 0;else throw new TypeError("URI.removeQuery() accepts an object, string, RegExp as the first parameter")},r.hasQuery=function(R,G,I,w){switch(u(G)){case"String":break;case"RegExp":for(var M in R)if(c.call(R,M)&&G.test(M)&&(I===void 0||r.hasQuery(R,M,I)))return!0;return!1;case"Object":for(var B in G)if(c.call(G,B)&&!r.hasQuery(R,B,G[B]))return!1;return!0;default:throw new TypeError("URI.hasQuery() accepts a string, regular expression or object as the name parameter")}switch(u(I)){case"Undefined":return G in R;case"Boolean":var k=!!(h(R[G])?R[G].length:R[G]);return I===k;case"Function":return!!I(R[G],G,R);case"Array":if(!h(R[G]))return!1;var O=w?g:f;return O(R[G],I);case"RegExp":return h(R[G])?w?g(R[G],I):!1:!!(R[G]&&R[G].match(I));case"Number":I=String(I);case"String":return h(R[G])?w?g(R[G],I):!1:R[G]===I;default:throw new TypeError("URI.hasQuery() accepts undefined, boolean, string, number, RegExp, Function as the value parameter")}},r.joinPaths=function(){for(var R=[],G=[],I=0,w=0;w<arguments.length;w++){var M=new r(arguments[w]);R.push(M);for(var B=M.segment(),k=0;k<B.length;k++)typeof B[k]=="string"&&G.push(B[k]),B[k]&&I++}if(!G.length||!I)return new r("");var O=new r("").segment(G);return(R[0].path()===""||R[0].path().slice(0,1)==="/")&&O.path("/"+O.path()),O.normalize()},r.commonPath=function(R,G){var I=Math.min(R.length,G.length),w;for(w=0;w<I;w++)if(R.charAt(w)!==G.charAt(w)){w--;break}return w<1?R.charAt(0)===G.charAt(0)&&R.charAt(0)==="/"?"/":"":((R.charAt(w)!=="/"||G.charAt(w)!=="/")&&(w=R.substring(0,w).lastIndexOf("/")),R.substring(0,w+1))},r.withinString=function(R,G,I){I||(I={});var w=I.start||r.findUri.start,M=I.end||r.findUri.end,B=I.trim||r.findUri.trim,k=I.parens||r.findUri.parens,O=/[a-z0-9-]=["']?$/i;for(w.lastIndex=0;;){var N=w.exec(R);if(!N)break;var z=N.index;if(I.ignoreHtml){var K=R.slice(Math.max(z-3,0),z);if(K&&O.test(K))continue}for(var te=z+R.slice(z).search(M),H=R.slice(z,te),j=-1;;){var ee=k.exec(H);if(!ee)break;var fe=ee.index+ee[0].length;j=Math.max(j,fe)}if(j>-1?H=H.slice(0,j)+H.slice(j).replace(B,""):H=H.replace(B,""),!(H.length<=N[0].length)&&!(I.ignore&&I.ignore.test(H))){te=z+H.length;var Te=G(H,z,te,R);if(Te===void 0){w.lastIndex=te;continue}Te=String(Te),R=R.slice(0,z)+Te+R.slice(te),w.lastIndex=z+Te.length}}return w.lastIndex=0,R},r.ensureValidHostname=function(R,G){var I=!!R,w=!!G,M=!1;if(w&&(M=g(r.hostProtocols,G)),M&&!I)throw new TypeError("Hostname cannot be empty, if protocol is "+G);if(R&&R.match(r.invalid_hostname_characters)){if(!e)throw new TypeError('Hostname "'+R+'" contains characters other than [A-Z0-9.-:_] and Punycode.js is not available');if(e.toASCII(R).match(r.invalid_hostname_characters))throw new TypeError('Hostname "'+R+'" contains characters other than [A-Z0-9.-:_]')}},r.ensureValidPort=function(R){if(R){var G=Number(R);if(!(s(G)&&G>0&&G<65536))throw new TypeError('Port "'+R+'" is not a valid port')}},r.noConflict=function(R){if(R){var G={URI:this.noConflict()};return i.URITemplate&&typeof i.URITemplate.noConflict=="function"&&(G.URITemplate=i.URITemplate.noConflict()),i.IPv6&&typeof i.IPv6.noConflict=="function"&&(G.IPv6=i.IPv6.noConflict()),i.SecondLevelDomains&&typeof i.SecondLevelDomains.noConflict=="function"&&(G.SecondLevelDomains=i.SecondLevelDomains.noConflict()),G}else i.URI===this&&(i.URI=o);return this},a.build=function(R){return R===!0?this._deferred_build=!0:(R===void 0||this._deferred_build)&&(this._string=r.build(this._parts),this._deferred_build=!1),this},a.clone=function(){return new r(this)},a.valueOf=a.toString=function(){return this.build(!1)._string};function E(R){return function(G,I){return G===void 0?this._parts[R]||"":(this._parts[R]=G||null,this.build(!I),this)}}function P(R,G){return function(I,w){return I===void 0?this._parts[R]||"":(I!==null&&(I=I+"",I.charAt(0)===G&&(I=I.substring(1))),this._parts[R]=I,this.build(!w),this)}}a.protocol=E("protocol"),a.username=E("username"),a.password=E("password"),a.hostname=E("hostname"),a.port=E("port"),a.query=P("query","?"),a.fragment=P("fragment","#"),a.search=function(R,G){var I=this.query(R,G);return typeof I=="string"&&I.length?"?"+I:I},a.hash=function(R,G){var I=this.fragment(R,G);return typeof I=="string"&&I.length?"#"+I:I},a.pathname=function(R,G){if(R===void 0||R===!0){var I=this._parts.path||(this._parts.hostname?"/":"");return R?(this._parts.urn?r.decodeUrnPath:r.decodePath)(I):I}else return this._parts.urn?this._parts.path=R?r.recodeUrnPath(R):"":this._parts.path=R?r.recodePath(R):"/",this.build(!G),this},a.path=a.pathname,a.href=function(R,G){var I;if(R===void 0)return this.toString();this._string="",this._parts=r._parts();var w=R instanceof r,M=typeof R=="object"&&(R.hostname||R.path||R.pathname);if(R.nodeName){var B=r.getDomAttribute(R);R=R[B]||"",M=!1}if(!w&&M&&R.pathname!==void 0&&(R=R.toString()),typeof R=="string"||R instanceof String)this._parts=r.parse(String(R),this._parts);else if(w||M){var k=w?R._parts:R;for(I in k)I!=="query"&&c.call(this._parts,I)&&(this._parts[I]=k[I]);k.query&&this.query(k.query,!1)}else throw new TypeError("invalid input");return this.build(!G),this},a.is=function(R){var G=!1,I=!1,w=!1,M=!1,B=!1,k=!1,O=!1,N=!this._parts.urn;switch(this._parts.hostname&&(N=!1,I=r.ip4_expression.test(this._parts.hostname),w=r.ip6_expression.test(this._parts.hostname),G=I||w,M=!G,B=M&&n&&n.has(this._parts.hostname),k=M&&r.idn_expression.test(this._parts.hostname),O=M&&r.punycode_expression.test(this._parts.hostname)),R.toLowerCase()){case"relative":return N;case"absolute":return!N;case"domain":case"name":return M;case"sld":return B;case"ip":return G;case"ip4":case"ipv4":case"inet4":return I;case"ip6":case"ipv6":case"inet6":return w;case"idn":return k;case"url":return!this._parts.urn;case"urn":return!!this._parts.urn;case"punycode":return O}return null};var W=a.protocol,v=a.port,A=a.hostname;a.protocol=function(R,G){if(R&&(R=R.replace(/:(\/\/)?$/,""),!R.match(r.protocol_expression)))throw new TypeError('Protocol "'+R+`" contains characters other than [A-Z0-9.+-] or doesn't start with [A-Z]`);return W.call(this,R,G)},a.scheme=a.protocol,a.port=function(R,G){return this._parts.urn?R===void 0?"":this:(R!==void 0&&(R===0&&(R=null),R&&(R+="",R.charAt(0)===":"&&(R=R.substring(1)),r.ensureValidPort(R))),v.call(this,R,G))},a.hostname=function(R,G){if(this._parts.urn)return R===void 0?"":this;if(R!==void 0){var I={preventInvalidHostname:this._parts.preventInvalidHostname},w=r.parseHost(R,I);if(w!=="/")throw new TypeError('Hostname "'+R+'" contains characters other than [A-Z0-9.-]');R=I.hostname,this._parts.preventInvalidHostname&&r.ensureValidHostname(R,this._parts.protocol)}return A.call(this,R,G)},a.origin=function(R,G){if(this._parts.urn)return R===void 0?"":this;if(R===void 0){var I=this.protocol(),w=this.authority();return w?(I?I+"://":"")+this.authority():""}else{var M=r(R);return this.protocol(M.protocol()).authority(M.authority()).build(!G),this}},a.host=function(R,G){if(this._parts.urn)return R===void 0?"":this;if(R===void 0)return this._parts.hostname?r.buildHost(this._parts):"";var I=r.parseHost(R,this._parts);if(I!=="/")throw new TypeError('Hostname "'+R+'" contains characters other than [A-Z0-9.-]');return this.build(!G),this},a.authority=function(R,G){if(this._parts.urn)return R===void 0?"":this;if(R===void 0)return this._parts.hostname?r.buildAuthority(this._parts):"";var I=r.parseAuthority(R,this._parts);if(I!=="/")throw new TypeError('Hostname "'+R+'" contains characters other than [A-Z0-9.-]');return this.build(!G),this},a.userinfo=function(R,G){if(this._parts.urn)return R===void 0?"":this;if(R===void 0){var I=r.buildUserinfo(this._parts);return I&&I.substring(0,I.length-1)}else return R[R.length-1]!=="@"&&(R+="@"),r.parseUserinfo(R,this._parts),this.build(!G),this},a.resource=function(R,G){var I;return R===void 0?this.path()+this.search()+this.hash():(I=r.parse(R),this._parts.path=I.path,this._parts.query=I.query,this._parts.fragment=I.fragment,this.build(!G),this)},a.subdomain=function(R,G){if(this._parts.urn)return R===void 0?"":this;if(R===void 0){if(!this._parts.hostname||this.is("IP"))return"";var I=this._parts.hostname.length-this.domain().length-1;return this._parts.hostname.substring(0,I)||""}else{var w=this._parts.hostname.length-this.domain().length,M=this._parts.hostname.substring(0,w),B=new RegExp("^"+d(M));if(R&&R.charAt(R.length-1)!=="."&&(R+="."),R.indexOf(":")!==-1)throw new TypeError("Domains cannot contain colons");return R&&r.ensureValidHostname(R,this._parts.protocol),this._parts.hostname=this._parts.hostname.replace(B,R),this.build(!G),this}},a.domain=function(R,G){if(this._parts.urn)return R===void 0?"":this;if(typeof R=="boolean"&&(G=R,R=void 0),R===void 0){if(!this._parts.hostname||this.is("IP"))return"";var I=this._parts.hostname.match(/\./g);if(I&&I.length<2)return this._parts.hostname;var w=this._parts.hostname.length-this.tld(G).length-1;return w=this._parts.hostname.lastIndexOf(".",w-1)+1,this._parts.hostname.substring(w)||""}else{if(!R)throw new TypeError("cannot set domain empty");if(R.indexOf(":")!==-1)throw new TypeError("Domains cannot contain colons");if(r.ensureValidHostname(R,this._parts.protocol),!this._parts.hostname||this.is("IP"))this._parts.hostname=R;else{var M=new RegExp(d(this.domain())+"$");this._parts.hostname=this._parts.hostname.replace(M,R)}return this.build(!G),this}},a.tld=function(R,G){if(this._parts.urn)return R===void 0?"":this;if(typeof R=="boolean"&&(G=R,R=void 0),R===void 0){if(!this._parts.hostname||this.is("IP"))return"";var I=this._parts.hostname.lastIndexOf("."),w=this._parts.hostname.substring(I+1);return G!==!0&&n&&n.list[w.toLowerCase()]&&n.get(this._parts.hostname)||w}else{var M;if(R)if(R.match(/[^a-zA-Z0-9-]/))if(n&&n.is(R))M=new RegExp(d(this.tld())+"$"),this._parts.hostname=this._parts.hostname.replace(M,R);else throw new TypeError('TLD "'+R+'" contains characters other than [A-Z0-9]');else{if(!this._parts.hostname||this.is("IP"))throw new ReferenceError("cannot set TLD on non-domain host");M=new RegExp(d(this.tld())+"$"),this._parts.hostname=this._parts.hostname.replace(M,R)}else throw new TypeError("cannot set TLD empty");return this.build(!G),this}},a.directory=function(R,G){if(this._parts.urn)return R===void 0?"":this;if(R===void 0||R===!0){if(!this._parts.path&&!this._parts.hostname)return"";if(this._parts.path==="/")return"/";var I=this._parts.path.length-this.filename().length-1,w=this._parts.path.substring(0,I)||(this._parts.hostname?"/":"");return R?r.decodePath(w):w}else{var M=this._parts.path.length-this.filename().length,B=this._parts.path.substring(0,M),k=new RegExp("^"+d(B));return this.is("relative")||(R||(R="/"),R.charAt(0)!=="/"&&(R="/"+R)),R&&R.charAt(R.length-1)!=="/"&&(R+="/"),R=r.recodePath(R),this._parts.path=this._parts.path.replace(k,R),this.build(!G),this}},a.filename=function(R,G){if(this._parts.urn)return R===void 0?"":this;if(typeof R!="string"){if(!this._parts.path||this._parts.path==="/")return"";var I=this._parts.path.lastIndexOf("/"),w=this._parts.path.substring(I+1);return R?r.decodePathSegment(w):w}else{var M=!1;R.charAt(0)==="/"&&(R=R.substring(1)),R.match(/\.?\//)&&(M=!0);var B=new RegExp(d(this.filename())+"$");return R=r.recodePath(R),this._parts.path=this._parts.path.replace(B,R),M?this.normalizePath(G):this.build(!G),this}},a.suffix=function(R,G){if(this._parts.urn)return R===void 0?"":this;if(R===void 0||R===!0){if(!this._parts.path||this._parts.path==="/")return"";var I=this.filename(),w=I.lastIndexOf("."),M,B;return w===-1?"":(M=I.substring(w+1),B=/^[a-z0-9%]+$/i.test(M)?M:"",R?r.decodePathSegment(B):B)}else{R.charAt(0)==="."&&(R=R.substring(1));var k=this.suffix(),O;if(k)R?O=new RegExp(d(k)+"$"):O=new RegExp(d("."+k)+"$");else{if(!R)return this;this._parts.path+="."+r.recodePath(R)}return O&&(R=r.recodePath(R),this._parts.path=this._parts.path.replace(O,R)),this.build(!G),this}},a.segment=function(R,G,I){var w=this._parts.urn?":":"/",M=this.path(),B=M.substring(0,1)==="/",k=M.split(w);if(R!==void 0&&typeof R!="number"&&(I=G,G=R,R=void 0),R!==void 0&&typeof R!="number")throw new Error('Bad segment "'+R+'", must be 0-based integer');if(B&&k.shift(),R<0&&(R=Math.max(k.length+R,0)),G===void 0)return R===void 0?k:k[R];if(R===null||k[R]===void 0)if(h(G)){k=[];for(var O=0,N=G.length;O<N;O++)!G[O].length&&(!k.length||!k[k.length-1].length)||(k.length&&!k[k.length-1].length&&k.pop(),k.push(y(G[O])))}else(G||typeof G=="string")&&(G=y(G),k[k.length-1]===""?k[k.length-1]=G:k.push(G));else G?k[R]=y(G):k.splice(R,1);return B&&k.unshift(""),this.path(k.join(w),I)},a.segmentCoded=function(R,G,I){var w,M,B;if(typeof R!="number"&&(I=G,G=R,R=void 0),G===void 0){if(w=this.segment(R,G,I),!h(w))w=w!==void 0?r.decode(w):void 0;else for(M=0,B=w.length;M<B;M++)w[M]=r.decode(w[M]);return w}if(!h(G))G=typeof G=="string"||G instanceof String?r.encode(G):G;else for(M=0,B=G.length;M<B;M++)G[M]=r.encode(G[M]);return this.segment(R,G,I)};var b=a.query;return a.query=function(R,G){if(R===!0)return r.parseQuery(this._parts.query,this._parts.escapeQuerySpace);if(typeof R=="function"){var I=r.parseQuery(this._parts.query,this._parts.escapeQuerySpace),w=R.call(this,I);return this._parts.query=r.buildQuery(w||I,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace),this.build(!G),this}else return R!==void 0&&typeof R!="string"?(this._parts.query=r.buildQuery(R,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace),this.build(!G),this):b.call(this,R,G)},a.setQuery=function(R,G,I){var w=r.parseQuery(this._parts.query,this._parts.escapeQuerySpace);if(typeof R=="string"||R instanceof String)w[R]=G!==void 0?G:null;else if(typeof R=="object")for(var M in R)c.call(R,M)&&(w[M]=R[M]);else throw new TypeError("URI.addQuery() accepts an object, string as the name parameter");return this._parts.query=r.buildQuery(w,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace),typeof R!="string"&&(I=G),this.build(!I),this},a.addQuery=function(R,G,I){var w=r.parseQuery(this._parts.query,this._parts.escapeQuerySpace);return r.addQuery(w,R,G===void 0?null:G),this._parts.query=r.buildQuery(w,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace),typeof R!="string"&&(I=G),this.build(!I),this},a.removeQuery=function(R,G,I){var w=r.parseQuery(this._parts.query,this._parts.escapeQuerySpace);return r.removeQuery(w,R,G),this._parts.query=r.buildQuery(w,this._parts.duplicateQueryParameters,this._parts.escapeQuerySpace),typeof R!="string"&&(I=G),this.build(!I),this},a.hasQuery=function(R,G,I){var w=r.parseQuery(this._parts.query,this._parts.escapeQuerySpace);return r.hasQuery(w,R,G,I)},a.setSearch=a.setQuery,a.addSearch=a.addQuery,a.removeSearch=a.removeQuery,a.hasSearch=a.hasQuery,a.normalize=function(){return this._parts.urn?this.normalizeProtocol(!1).normalizePath(!1).normalizeQuery(!1).normalizeFragment(!1).build():this.normalizeProtocol(!1).normalizeHostname(!1).normalizePort(!1).normalizePath(!1).normalizeQuery(!1).normalizeFragment(!1).build()},a.normalizeProtocol=function(R){return typeof this._parts.protocol=="string"&&(this._parts.protocol=this._parts.protocol.toLowerCase(),this.build(!R)),this},a.normalizeHostname=function(R){return this._parts.hostname&&(this.is("IDN")&&e?this._parts.hostname=e.toASCII(this._parts.hostname):this.is("IPv6")&&t&&(this._parts.hostname=t.best(this._parts.hostname)),this._parts.hostname=this._parts.hostname.toLowerCase(),this.build(!R)),this},a.normalizePort=function(R){return typeof this._parts.protocol=="string"&&this._parts.port===r.defaultPorts[this._parts.protocol]&&(this._parts.port=null,this.build(!R)),this},a.normalizePath=function(R){var G=this._parts.path;if(!G)return this;if(this._parts.urn)return this._parts.path=r.recodeUrnPath(this._parts.path),this.build(!R),this;if(this._parts.path==="/")return this;G=r.recodePath(G);var I,w="",M,B;for(G.charAt(0)!=="/"&&(I=!0,G="/"+G),(G.slice(-3)==="/.."||G.slice(-2)==="/.")&&(G+="/"),G=G.replace(/(\/(\.\/)+)|(\/\.$)/g,"/").replace(/\/{2,}/g,"/"),I&&(w=G.substring(1).match(/^(\.\.\/)+/)||"",w&&(w=w[0]));M=G.search(/\/\.\.(\/|$)/),M!==-1;){if(M===0){G=G.substring(3);continue}B=G.substring(0,M).lastIndexOf("/"),B===-1&&(B=M),G=G.substring(0,B)+G.substring(M+3)}return I&&this.is("relative")&&(G=w+G.substring(1)),this._parts.path=G,this.build(!R),this},a.normalizePathname=a.normalizePath,a.normalizeQuery=function(R){return typeof this._parts.query=="string"&&(this._parts.query.length?this.query(r.parseQuery(this._parts.query,this._parts.escapeQuerySpace)):this._parts.query=null,this.build(!R)),this},a.normalizeFragment=function(R){return this._parts.fragment||(this._parts.fragment=null,this.build(!R)),this},a.normalizeSearch=a.normalizeQuery,a.normalizeHash=a.normalizeFragment,a.iso8859=function(){var R=r.encode,G=r.decode;r.encode=escape,r.decode=decodeURIComponent;try{this.normalize()}finally{r.encode=R,r.decode=G}return this},a.unicode=function(){var R=r.encode,G=r.decode;r.encode=S,r.decode=unescape;try{this.normalize()}finally{r.encode=R,r.decode=G}return this},a.readable=function(){var R=this.clone();R.username("").password("").normalize();var G="";if(R._parts.protocol&&(G+=R._parts.protocol+"://"),R._parts.hostname&&(R.is("punycode")&&e?(G+=e.toUnicode(R._parts.hostname),R._parts.port&&(G+=":"+R._parts.port)):G+=R.host()),R._parts.hostname&&R._parts.path&&R._parts.path.charAt(0)!=="/"&&(G+="/"),G+=R.path(!0),R._parts.query){for(var I="",w=0,M=R._parts.query.split("&"),B=M.length;w<B;w++){var k=(M[w]||"").split("=");I+="&"+r.decodeQuery(k[0],this._parts.escapeQuerySpace).replace(/&/g,"%26"),k[1]!==void 0&&(I+="="+r.decodeQuery(k[1],this._parts.escapeQuerySpace).replace(/&/g,"%26"))}G+="?"+I.substring(1)}return G+=r.decodeQuery(R.hash(),!0),G},a.absoluteTo=function(R){var G=this.clone(),I=["protocol","username","password","hostname","port"],w,M,B;if(this._parts.urn)throw new Error("URNs do not have any generally defined hierarchical components");if(R instanceof r||(R=new r(R)),G._parts.protocol||(G._parts.protocol=R._parts.protocol,this._parts.hostname))return G;for(M=0;B=I[M];M++)G._parts[B]=R._parts[B];return G._parts.path?(G._parts.path.substring(-2)===".."&&(G._parts.path+="/"),G.path().charAt(0)!=="/"&&(w=R.directory(),w=w||(R.path().indexOf("/")===0?"/":""),G._parts.path=(w?w+"/":"")+G._parts.path,G.normalizePath())):(G._parts.path=R._parts.path,G._parts.query||(G._parts.query=R._parts.query)),G.build(),G},a.relativeTo=function(R){var G=this.clone().normalize(),I,w,M,B,k;if(G._parts.urn)throw new Error("URNs do not have any generally defined hierarchical components");if(R=new r(R).normalize(),I=G._parts,w=R._parts,B=G.path(),k=R.path(),B.charAt(0)!=="/")throw new Error("URI is already relative");if(k.charAt(0)!=="/")throw new Error("Cannot calculate a URI relative to another relative URI");if(I.protocol===w.protocol&&(I.protocol=null),I.username!==w.username||I.password!==w.password||I.protocol!==null||I.username!==null||I.password!==null)return G.build();if(I.hostname===w.hostname&&I.port===w.port)I.hostname=null,I.port=null;else return G.build();if(B===k)return I.path="",G.build();if(M=r.commonPath(B,k),!M)return G.build();var O=w.path.substring(M.length).replace(/[^\/]*$/,"").replace(/.*?\//g,"../");return I.path=O+I.path.substring(M.length)||"./",G.build()},a.equals=function(R){var G=this.clone(),I=new r(R),w={},M={},B={},k,O,N;if(G.normalize(),I.normalize(),G.toString()===I.toString())return!0;if(k=G.query(),O=I.query(),G.query(""),I.query(""),G.toString()!==I.toString()||k.length!==O.length)return!1;w=r.parseQuery(k,this._parts.escapeQuerySpace),M=r.parseQuery(O,this._parts.escapeQuerySpace);for(N in w)if(c.call(w,N)){if(h(w[N])){if(!f(w[N],M[N]))return!1}else if(w[N]!==M[N])return!1;B[N]=!0}for(N in M)if(c.call(M,N)&&!B[N])return!1;return!0},a.preventInvalidHostname=function(R){return this._parts.preventInvalidHostname=!!R,this},a.duplicateQueryParameters=function(R){return this._parts.duplicateQueryParameters=!!R,this},a.escapeQuerySpace=function(R){return this._parts.escapeQuerySpace=!!R,this},r})});var ile=ld((Jwn,nle)=>{"use strict";var Qwn=_(T());nle.exports=$He;var FP=1e20;function $He(e,t){t||(t={});var n=t.cutoff==null?.25:t.cutoff,i=t.radius==null?8:t.radius,o=t.channel||0,r,s,a,c,d,u,h,p,g,f,y;if(ArrayBuffer.isView(e)||Array.isArray(e)){if(!t.width||!t.height)throw Error("For raw data width and height should be provided by options");r=t.width,s=t.height,c=e,t.stride?u=t.stride:u=Math.floor(e.length/r/s)}else window.HTMLCanvasElement&&e instanceof window.HTMLCanvasElement?(p=e,h=p.getContext("2d"),r=p.width,s=p.height,g=h.getImageData(0,0,r,s),c=g.data,u=4):window.CanvasRenderingContext2D&&e instanceof window.CanvasRenderingContext2D?(p=e.canvas,h=e,r=p.width,s=p.height,g=h.getImageData(0,0,r,s),c=g.data,u=4):window.ImageData&&e instanceof window.ImageData&&(g=e,r=e.width,s=e.height,c=g.data,u=4);if(a=Math.max(r,s),window.Uint8ClampedArray&&c instanceof window.Uint8ClampedArray||window.Uint8Array&&c instanceof window.Uint8Array)for(d=c,c=Array(r*s),f=0,y=Math.floor(d.length/u);f<y;f++)c[f]=d[f*u+o]/255;else if(u!==1)throw Error("Raw data can have only 1 value per pixel");var x=Array(r*s),S=Array(r*s),C=Array(a),V=Array(a),L=Array(a+1),Z=Array(a);for(f=0,y=r*s;f<y;f++){var E=c[f];x[f]=E===1?0:E===0?FP:Math.pow(Math.max(0,.5-E),2),S[f]=E===1?FP:E===0?0:Math.pow(Math.max(0,E-.5),2)}ele(x,r,s,C,V,Z,L),ele(S,r,s,C,V,Z,L);var P=window.Float32Array?new Float32Array(r*s):new Array(r*s);for(f=0,y=r*s;f<y;f++)P[f]=Math.min(Math.max(1-((x[f]-S[f])/i+n),0),1);return P}function ele(e,t,n,i,o,r,s){for(var a=0;a<t;a++){for(var c=0;c<n;c++)i[c]=e[c*t+a];for(tle(i,o,r,s,n),c=0;c<n;c++)e[c*t+a]=o[c]}for(c=0;c<n;c++){for(a=0;a<t;a++)i[a]=e[c*t+a];for(tle(i,o,r,s,t),a=0;a<t;a++)e[c*t+a]=Math.sqrt(o[a])}}function tle(e,t,n,i,o){n[0]=0,i[0]=-FP,i[1]=+FP;for(var r=1,s=0;r<o;r++){for(var a=(e[r]+r*r-(e[n[s]]+n[s]*n[s]))/(2*r-2*n[s]);a<=i[s];)s--,a=(e[r]+r*r-(e[n[s]]+n[s]*n[s]))/(2*r-2*n[s]);s++,n[s]=r,i[s]=a,i[s+1]=+FP}for(r=0,s=0;r<o;r++){for(;i[s+1]<r;)s++;t[r]=(r-n[s])*(r-n[s])+e[n[s]]}}});var cle=ld((pFn,ck)=>{var bFn=_(T());function dKe(){var e=0,t=1,n=2,i=3,o=4,r=5,s=6,a=7,c=8,d=9,u=10,h=11,p=12,g=13,f=14,y=15,x=16,S=17,C=0,V=1,L=2,Z=3,E=4;function P(b,R){return 55296<=b.charCodeAt(R)&&b.charCodeAt(R)<=56319&&56320<=b.charCodeAt(R+1)&&b.charCodeAt(R+1)<=57343}function W(b,R){R===void 0&&(R=0);var G=b.charCodeAt(R);if(55296<=G&&G<=56319&&R<b.length-1){var I=G,w=b.charCodeAt(R+1);return 56320<=w&&w<=57343?(I-55296)*1024+(w-56320)+65536:I}if(56320<=G&&G<=57343&&R>=1){var I=b.charCodeAt(R-1),w=G;return 55296<=I&&I<=56319?(I-55296)*1024+(w-56320)+65536:w}return G}function v(b,R,G){var I=[b].concat(R).concat([G]),w=I[I.length-2],M=G,B=I.lastIndexOf(f);if(B>1&&I.slice(1,B).every(function(N){return N==i})&&[i,g,S].indexOf(b)==-1)return L;var k=I.lastIndexOf(o);if(k>0&&I.slice(1,k).every(function(N){return N==o})&&[p,o].indexOf(w)==-1)return I.filter(function(N){return N==o}).length%2==1?Z:E;if(w==e&&M==t)return C;if(w==n||w==e||w==t)return M==f&&R.every(function(N){return N==i})?L:V;if(M==n||M==e||M==t)return V;if(w==s&&(M==s||M==a||M==d||M==u))return C;if((w==d||w==a)&&(M==a||M==c))return C;if((w==u||w==c)&&M==c)return C;if(M==i||M==y)return C;if(M==r)return C;if(w==p)return C;var O=I.indexOf(i)!=-1?I.lastIndexOf(i)-1:I.length-2;return[g,S].indexOf(I[O])!=-1&&I.slice(O+1,-1).every(function(N){return N==i})&&M==f||w==y&&[x,S].indexOf(M)!=-1?C:R.indexOf(o)!=-1?L:w==o&&M==o?C:V}this.nextBreak=function(b,R){if(R===void 0&&(R=0),R<0)return 0;if(R>=b.length-1)return b.length;for(var G=A(W(b,R)),I=[],w=R+1;w<b.length;w++)if(!P(b,w-1)){var M=A(W(b,w));if(v(G,I,M))return w;I.push(M)}return b.length},this.splitGraphemes=function(b){for(var R=[],G=0,I;(I=this.nextBreak(b,G))<b.length;)R.push(b.slice(G,I)),G=I;return G<b.length&&R.push(b.slice(G)),R},this.iterateGraphemes=function(b){var R=0,G={next:function(){var I,w;return(w=this.nextBreak(b,R))<b.length?(I=b.slice(R,w),R=w,{value:I,done:!1}):R<b.length?(I=b.slice(R),R=b.length,{value:I,done:!1}):{value:void 0,done:!0}}.bind(this)};return typeof Symbol<"u"&&Symbol.iterator&&(G[Symbol.iterator]=function(){return G}),G},this.countGraphemes=function(b){for(var R=0,G=0,I;(I=this.nextBreak(b,G))<b.length;)G=I,R++;return G<b.length&&R++,R};function A(b){return 1536<=b&&b<=1541||b==1757||b==1807||b==2274||b==3406||b==69821||70082<=b&&b<=70083||b==72250||72326<=b&&b<=72329||b==73030?p:b==13?e:b==10?t:0<=b&&b<=9||11<=b&&b<=12||14<=b&&b<=31||127<=b&&b<=159||b==173||b==1564||b==6158||b==8203||8206<=b&&b<=8207||b==8232||b==8233||8234<=b&&b<=8238||8288<=b&&b<=8292||b==8293||8294<=b&&b<=8303||55296<=b&&b<=57343||b==65279||65520<=b&&b<=65528||65529<=b&&b<=65531||113824<=b&&b<=113827||119155<=b&&b<=119162||b==917504||b==917505||917506<=b&&b<=917535||917632<=b&&b<=917759||918e3<=b&&b<=921599?n:768<=b&&b<=879||1155<=b&&b<=1159||1160<=b&&b<=1161||1425<=b&&b<=1469||b==1471||1473<=b&&b<=1474||1476<=b&&b<=1477||b==1479||1552<=b&&b<=1562||1611<=b&&b<=1631||b==1648||1750<=b&&b<=1756||1759<=b&&b<=1764||1767<=b&&b<=1768||1770<=b&&b<=1773||b==1809||1840<=b&&b<=1866||1958<=b&&b<=1968||2027<=b&&b<=2035||2070<=b&&b<=2073||2075<=b&&b<=2083||2085<=b&&b<=2087||2089<=b&&b<=2093||2137<=b&&b<=2139||2260<=b&&b<=2273||2275<=b&&b<=2306||b==2362||b==2364||2369<=b&&b<=2376||b==2381||2385<=b&&b<=2391||2402<=b&&b<=2403||b==2433||b==2492||b==2494||2497<=b&&b<=2500||b==2509||b==2519||2530<=b&&b<=2531||2561<=b&&b<=2562||b==2620||2625<=b&&b<=2626||2631<=b&&b<=2632||2635<=b&&b<=2637||b==2641||2672<=b&&b<=2673||b==2677||2689<=b&&b<=2690||b==2748||2753<=b&&b<=2757||2759<=b&&b<=2760||b==2765||2786<=b&&b<=2787||2810<=b&&b<=2815||b==2817||b==2876||b==2878||b==2879||2881<=b&&b<=2884||b==2893||b==2902||b==2903||2914<=b&&b<=2915||b==2946||b==3006||b==3008||b==3021||b==3031||b==3072||3134<=b&&b<=3136||3142<=b&&b<=3144||3146<=b&&b<=3149||3157<=b&&b<=3158||3170<=b&&b<=3171||b==3201||b==3260||b==3263||b==3266||b==3270||3276<=b&&b<=3277||3285<=b&&b<=3286||3298<=b&&b<=3299||3328<=b&&b<=3329||3387<=b&&b<=3388||b==3390||3393<=b&&b<=3396||b==3405||b==3415||3426<=b&&b<=3427||b==3530||b==3535||3538<=b&&b<=3540||b==3542||b==3551||b==3633||3636<=b&&b<=3642||3655<=b&&b<=3662||b==3761||3764<=b&&b<=3769||3771<=b&&b<=3772||3784<=b&&b<=3789||3864<=b&&b<=3865||b==3893||b==3895||b==3897||3953<=b&&b<=3966||3968<=b&&b<=3972||3974<=b&&b<=3975||3981<=b&&b<=3991||3993<=b&&b<=4028||b==4038||4141<=b&&b<=4144||4146<=b&&b<=4151||4153<=b&&b<=4154||4157<=b&&b<=4158||4184<=b&&b<=4185||4190<=b&&b<=4192||4209<=b&&b<=4212||b==4226||4229<=b&&b<=4230||b==4237||b==4253||4957<=b&&b<=4959||5906<=b&&b<=5908||5938<=b&&b<=5940||5970<=b&&b<=5971||6002<=b&&b<=6003||6068<=b&&b<=6069||6071<=b&&b<=6077||b==6086||6089<=b&&b<=6099||b==6109||6155<=b&&b<=6157||6277<=b&&b<=6278||b==6313||6432<=b&&b<=6434||6439<=b&&b<=6440||b==6450||6457<=b&&b<=6459||6679<=b&&b<=6680||b==6683||b==6742||6744<=b&&b<=6750||b==6752||b==6754||6757<=b&&b<=6764||6771<=b&&b<=6780||b==6783||6832<=b&&b<=6845||b==6846||6912<=b&&b<=6915||b==6964||6966<=b&&b<=6970||b==6972||b==6978||7019<=b&&b<=7027||7040<=b&&b<=7041||7074<=b&&b<=7077||7080<=b&&b<=7081||7083<=b&&b<=7085||b==7142||7144<=b&&b<=7145||b==7149||7151<=b&&b<=7153||7212<=b&&b<=7219||7222<=b&&b<=7223||7376<=b&&b<=7378||7380<=b&&b<=7392||7394<=b&&b<=7400||b==7405||b==7412||7416<=b&&b<=7417||7616<=b&&b<=7673||7675<=b&&b<=7679||b==8204||8400<=b&&b<=8412||8413<=b&&b<=8416||b==8417||8418<=b&&b<=8420||8421<=b&&b<=8432||11503<=b&&b<=11505||b==11647||11744<=b&&b<=11775||12330<=b&&b<=12333||12334<=b&&b<=12335||12441<=b&&b<=12442||b==42607||42608<=b&&b<=42610||42612<=b&&b<=42621||42654<=b&&b<=42655||42736<=b&&b<=42737||b==43010||b==43014||b==43019||43045<=b&&b<=43046||43204<=b&&b<=43205||43232<=b&&b<=43249||43302<=b&&b<=43309||43335<=b&&b<=43345||43392<=b&&b<=43394||b==43443||43446<=b&&b<=43449||b==43452||b==43493||43561<=b&&b<=43566||43569<=b&&b<=43570||43573<=b&&b<=43574||b==43587||b==43596||b==43644||b==43696||43698<=b&&b<=43700||43703<=b&&b<=43704||43710<=b&&b<=43711||b==43713||43756<=b&&b<=43757||b==43766||b==44005||b==44008||b==44013||b==64286||65024<=b&&b<=65039||65056<=b&&b<=65071||65438<=b&&b<=65439||b==66045||b==66272||66422<=b&&b<=66426||68097<=b&&b<=68099||68101<=b&&b<=68102||68108<=b&&b<=68111||68152<=b&&b<=68154||b==68159||68325<=b&&b<=68326||b==69633||69688<=b&&b<=69702||69759<=b&&b<=69761||69811<=b&&b<=69814||69817<=b&&b<=69818||69888<=b&&b<=69890||69927<=b&&b<=69931||69933<=b&&b<=69940||b==70003||70016<=b&&b<=70017||70070<=b&&b<=70078||70090<=b&&b<=70092||70191<=b&&b<=70193||b==70196||70198<=b&&b<=70199||b==70206||b==70367||70371<=b&&b<=70378||70400<=b&&b<=70401||b==70460||b==70462||b==70464||b==70487||70502<=b&&b<=70508||70512<=b&&b<=70516||70712<=b&&b<=70719||70722<=b&&b<=70724||b==70726||b==70832||70835<=b&&b<=70840||b==70842||b==70845||70847<=b&&b<=70848||70850<=b&&b<=70851||b==71087||71090<=b&&b<=71093||71100<=b&&b<=71101||71103<=b&&b<=71104||71132<=b&&b<=71133||71219<=b&&b<=71226||b==71229||71231<=b&&b<=71232||b==71339||b==71341||71344<=b&&b<=71349||b==71351||71453<=b&&b<=71455||71458<=b&&b<=71461||71463<=b&&b<=71467||72193<=b&&b<=72198||72201<=b&&b<=72202||72243<=b&&b<=72248||72251<=b&&b<=72254||b==72263||72273<=b&&b<=72278||72281<=b&&b<=72283||72330<=b&&b<=72342||72344<=b&&b<=72345||72752<=b&&b<=72758||72760<=b&&b<=72765||b==72767||72850<=b&&b<=72871||72874<=b&&b<=72880||72882<=b&&b<=72883||72885<=b&&b<=72886||73009<=b&&b<=73014||b==73018||73020<=b&&b<=73021||73023<=b&&b<=73029||b==73031||92912<=b&&b<=92916||92976<=b&&b<=92982||94095<=b&&b<=94098||113821<=b&&b<=113822||b==119141||119143<=b&&b<=119145||119150<=b&&b<=119154||119163<=b&&b<=119170||119173<=b&&b<=119179||119210<=b&&b<=119213||119362<=b&&b<=119364||121344<=b&&b<=121398||121403<=b&&b<=121452||b==121461||b==121476||121499<=b&&b<=121503||121505<=b&&b<=121519||122880<=b&&b<=122886||122888<=b&&b<=122904||122907<=b&&b<=122913||122915<=b&&b<=122916||122918<=b&&b<=122922||125136<=b&&b<=125142||125252<=b&&b<=125258||917536<=b&&b<=917631||917760<=b&&b<=917999?i:127462<=b&&b<=127487?o:b==2307||b==2363||2366<=b&&b<=2368||2377<=b&&b<=2380||2382<=b&&b<=2383||2434<=b&&b<=2435||2495<=b&&b<=2496||2503<=b&&b<=2504||2507<=b&&b<=2508||b==2563||2622<=b&&b<=2624||b==2691||2750<=b&&b<=2752||b==2761||2763<=b&&b<=2764||2818<=b&&b<=2819||b==2880||2887<=b&&b<=2888||2891<=b&&b<=2892||b==3007||3009<=b&&b<=3010||3014<=b&&b<=3016||3018<=b&&b<=3020||3073<=b&&b<=3075||3137<=b&&b<=3140||3202<=b&&b<=3203||b==3262||3264<=b&&b<=3265||3267<=b&&b<=3268||3271<=b&&b<=3272||3274<=b&&b<=3275||3330<=b&&b<=3331||3391<=b&&b<=3392||3398<=b&&b<=3400||3402<=b&&b<=3404||3458<=b&&b<=3459||3536<=b&&b<=3537||3544<=b&&b<=3550||3570<=b&&b<=3571||b==3635||b==3763||3902<=b&&b<=3903||b==3967||b==4145||4155<=b&&b<=4156||4182<=b&&b<=4183||b==4228||b==6070||6078<=b&&b<=6085||6087<=b&&b<=6088||6435<=b&&b<=6438||6441<=b&&b<=6443||6448<=b&&b<=6449||6451<=b&&b<=6456||6681<=b&&b<=6682||b==6741||b==6743||6765<=b&&b<=6770||b==6916||b==6965||b==6971||6973<=b&&b<=6977||6979<=b&&b<=6980||b==7042||b==7073||7078<=b&&b<=7079||b==7082||b==7143||7146<=b&&b<=7148||b==7150||7154<=b&&b<=7155||7204<=b&&b<=7211||7220<=b&&b<=7221||b==7393||7410<=b&&b<=7411||b==7415||43043<=b&&b<=43044||b==43047||43136<=b&&b<=43137||43188<=b&&b<=43203||43346<=b&&b<=43347||b==43395||43444<=b&&b<=43445||43450<=b&&b<=43451||43453<=b&&b<=43456||43567<=b&&b<=43568||43571<=b&&b<=43572||b==43597||b==43755||43758<=b&&b<=43759||b==43765||44003<=b&&b<=44004||44006<=b&&b<=44007||44009<=b&&b<=44010||b==44012||b==69632||b==69634||b==69762||69808<=b&&b<=69810||69815<=b&&b<=69816||b==69932||b==70018||70067<=b&&b<=70069||70079<=b&&b<=70080||70188<=b&&b<=70190||70194<=b&&b<=70195||b==70197||70368<=b&&b<=70370||70402<=b&&b<=70403||b==70463||70465<=b&&b<=70468||70471<=b&&b<=70472||70475<=b&&b<=70477||70498<=b&&b<=70499||70709<=b&&b<=70711||70720<=b&&b<=70721||b==70725||70833<=b&&b<=70834||b==70841||70843<=b&&b<=70844||b==70846||b==70849||71088<=b&&b<=71089||71096<=b&&b<=71099||b==71102||71216<=b&&b<=71218||71227<=b&&b<=71228||b==71230||b==71340||71342<=b&&b<=71343||b==71350||71456<=b&&b<=71457||b==71462||72199<=b&&b<=72200||b==72249||72279<=b&&b<=72280||b==72343||b==72751||b==72766||b==72873||b==72881||b==72884||94033<=b&&b<=94078||b==119142||b==119149?r:4352<=b&&b<=4447||43360<=b&&b<=43388?s:4448<=b&&b<=4519||55216<=b&&b<=55238?a:4520<=b&&b<=4607||55243<=b&&b<=55291?c:b==44032||b==44060||b==44088||b==44116||b==44144||b==44172||b==44200||b==44228||b==44256||b==44284||b==44312||b==44340||b==44368||b==44396||b==44424||b==44452||b==44480||b==44508||b==44536||b==44564||b==44592||b==44620||b==44648||b==44676||b==44704||b==44732||b==44760||b==44788||b==44816||b==44844||b==44872||b==44900||b==44928||b==44956||b==44984||b==45012||b==45040||b==45068||b==45096||b==45124||b==45152||b==45180||b==45208||b==45236||b==45264||b==45292||b==45320||b==45348||b==45376||b==45404||b==45432||b==45460||b==45488||b==45516||b==45544||b==45572||b==45600||b==45628||b==45656||b==45684||b==45712||b==45740||b==45768||b==45796||b==45824||b==45852||b==45880||b==45908||b==45936||b==45964||b==45992||b==46020||b==46048||b==46076||b==46104||b==46132||b==46160||b==46188||b==46216||b==46244||b==46272||b==46300||b==46328||b==46356||b==46384||b==46412||b==46440||b==46468||b==46496||b==46524||b==46552||b==46580||b==46608||b==46636||b==46664||b==46692||b==46720||b==46748||b==46776||b==46804||b==46832||b==46860||b==46888||b==46916||b==46944||b==46972||b==47e3||b==47028||b==47056||b==47084||b==47112||b==47140||b==47168||b==47196||b==47224||b==47252||b==47280||b==47308||b==47336||b==47364||b==47392||b==47420||b==47448||b==47476||b==47504||b==47532||b==47560||b==47588||b==47616||b==47644||b==47672||b==47700||b==47728||b==47756||b==47784||b==47812||b==47840||b==47868||b==47896||b==47924||b==47952||b==47980||b==48008||b==48036||b==48064||b==48092||b==48120||b==48148||b==48176||b==48204||b==48232||b==48260||b==48288||b==48316||b==48344||b==48372||b==48400||b==48428||b==48456||b==48484||b==48512||b==48540||b==48568||b==48596||b==48624||b==48652||b==48680||b==48708||b==48736||b==48764||b==48792||b==48820||b==48848||b==48876||b==48904||b==48932||b==48960||b==48988||b==49016||b==49044||b==49072||b==49100||b==49128||b==49156||b==49184||b==49212||b==49240||b==49268||b==49296||b==49324||b==49352||b==49380||b==49408||b==49436||b==49464||b==49492||b==49520||b==49548||b==49576||b==49604||b==49632||b==49660||b==49688||b==49716||b==49744||b==49772||b==49800||b==49828||b==49856||b==49884||b==49912||b==49940||b==49968||b==49996||b==50024||b==50052||b==50080||b==50108||b==50136||b==50164||b==50192||b==50220||b==50248||b==50276||b==50304||b==50332||b==50360||b==50388||b==50416||b==50444||b==50472||b==50500||b==50528||b==50556||b==50584||b==50612||b==50640||b==50668||b==50696||b==50724||b==50752||b==50780||b==50808||b==50836||b==50864||b==50892||b==50920||b==50948||b==50976||b==51004||b==51032||b==51060||b==51088||b==51116||b==51144||b==51172||b==51200||b==51228||b==51256||b==51284||b==51312||b==51340||b==51368||b==51396||b==51424||b==51452||b==51480||b==51508||b==51536||b==51564||b==51592||b==51620||b==51648||b==51676||b==51704||b==51732||b==51760||b==51788||b==51816||b==51844||b==51872||b==51900||b==51928||b==51956||b==51984||b==52012||b==52040||b==52068||b==52096||b==52124||b==52152||b==52180||b==52208||b==52236||b==52264||b==52292||b==52320||b==52348||b==52376||b==52404||b==52432||b==52460||b==52488||b==52516||b==52544||b==52572||b==52600||b==52628||b==52656||b==52684||b==52712||b==52740||b==52768||b==52796||b==52824||b==52852||b==52880||b==52908||b==52936||b==52964||b==52992||b==53020||b==53048||b==53076||b==53104||b==53132||b==53160||b==53188||b==53216||b==53244||b==53272||b==53300||b==53328||b==53356||b==53384||b==53412||b==53440||b==53468||b==53496||b==53524||b==53552||b==53580||b==53608||b==53636||b==53664||b==53692||b==53720||b==53748||b==53776||b==53804||b==53832||b==53860||b==53888||b==53916||b==53944||b==53972||b==54e3||b==54028||b==54056||b==54084||b==54112||b==54140||b==54168||b==54196||b==54224||b==54252||b==54280||b==54308||b==54336||b==54364||b==54392||b==54420||b==54448||b==54476||b==54504||b==54532||b==54560||b==54588||b==54616||b==54644||b==54672||b==54700||b==54728||b==54756||b==54784||b==54812||b==54840||b==54868||b==54896||b==54924||b==54952||b==54980||b==55008||b==55036||b==55064||b==55092||b==55120||b==55148||b==55176?d:44033<=b&&b<=44059||44061<=b&&b<=44087||44089<=b&&b<=44115||44117<=b&&b<=44143||44145<=b&&b<=44171||44173<=b&&b<=44199||44201<=b&&b<=44227||44229<=b&&b<=44255||44257<=b&&b<=44283||44285<=b&&b<=44311||44313<=b&&b<=44339||44341<=b&&b<=44367||44369<=b&&b<=44395||44397<=b&&b<=44423||44425<=b&&b<=44451||44453<=b&&b<=44479||44481<=b&&b<=44507||44509<=b&&b<=44535||44537<=b&&b<=44563||44565<=b&&b<=44591||44593<=b&&b<=44619||44621<=b&&b<=44647||44649<=b&&b<=44675||44677<=b&&b<=44703||44705<=b&&b<=44731||44733<=b&&b<=44759||44761<=b&&b<=44787||44789<=b&&b<=44815||44817<=b&&b<=44843||44845<=b&&b<=44871||44873<=b&&b<=44899||44901<=b&&b<=44927||44929<=b&&b<=44955||44957<=b&&b<=44983||44985<=b&&b<=45011||45013<=b&&b<=45039||45041<=b&&b<=45067||45069<=b&&b<=45095||45097<=b&&b<=45123||45125<=b&&b<=45151||45153<=b&&b<=45179||45181<=b&&b<=45207||45209<=b&&b<=45235||45237<=b&&b<=45263||45265<=b&&b<=45291||45293<=b&&b<=45319||45321<=b&&b<=45347||45349<=b&&b<=45375||45377<=b&&b<=45403||45405<=b&&b<=45431||45433<=b&&b<=45459||45461<=b&&b<=45487||45489<=b&&b<=45515||45517<=b&&b<=45543||45545<=b&&b<=45571||45573<=b&&b<=45599||45601<=b&&b<=45627||45629<=b&&b<=45655||45657<=b&&b<=45683||45685<=b&&b<=45711||45713<=b&&b<=45739||45741<=b&&b<=45767||45769<=b&&b<=45795||45797<=b&&b<=45823||45825<=b&&b<=45851||45853<=b&&b<=45879||45881<=b&&b<=45907||45909<=b&&b<=45935||45937<=b&&b<=45963||45965<=b&&b<=45991||45993<=b&&b<=46019||46021<=b&&b<=46047||46049<=b&&b<=46075||46077<=b&&b<=46103||46105<=b&&b<=46131||46133<=b&&b<=46159||46161<=b&&b<=46187||46189<=b&&b<=46215||46217<=b&&b<=46243||46245<=b&&b<=46271||46273<=b&&b<=46299||46301<=b&&b<=46327||46329<=b&&b<=46355||46357<=b&&b<=46383||46385<=b&&b<=46411||46413<=b&&b<=46439||46441<=b&&b<=46467||46469<=b&&b<=46495||46497<=b&&b<=46523||46525<=b&&b<=46551||46553<=b&&b<=46579||46581<=b&&b<=46607||46609<=b&&b<=46635||46637<=b&&b<=46663||46665<=b&&b<=46691||46693<=b&&b<=46719||46721<=b&&b<=46747||46749<=b&&b<=46775||46777<=b&&b<=46803||46805<=b&&b<=46831||46833<=b&&b<=46859||46861<=b&&b<=46887||46889<=b&&b<=46915||46917<=b&&b<=46943||46945<=b&&b<=46971||46973<=b&&b<=46999||47001<=b&&b<=47027||47029<=b&&b<=47055||47057<=b&&b<=47083||47085<=b&&b<=47111||47113<=b&&b<=47139||47141<=b&&b<=47167||47169<=b&&b<=47195||47197<=b&&b<=47223||47225<=b&&b<=47251||47253<=b&&b<=47279||47281<=b&&b<=47307||47309<=b&&b<=47335||47337<=b&&b<=47363||47365<=b&&b<=47391||47393<=b&&b<=47419||47421<=b&&b<=47447||47449<=b&&b<=47475||47477<=b&&b<=47503||47505<=b&&b<=47531||47533<=b&&b<=47559||47561<=b&&b<=47587||47589<=b&&b<=47615||47617<=b&&b<=47643||47645<=b&&b<=47671||47673<=b&&b<=47699||47701<=b&&b<=47727||47729<=b&&b<=47755||47757<=b&&b<=47783||47785<=b&&b<=47811||47813<=b&&b<=47839||47841<=b&&b<=47867||47869<=b&&b<=47895||47897<=b&&b<=47923||47925<=b&&b<=47951||47953<=b&&b<=47979||47981<=b&&b<=48007||48009<=b&&b<=48035||48037<=b&&b<=48063||48065<=b&&b<=48091||48093<=b&&b<=48119||48121<=b&&b<=48147||48149<=b&&b<=48175||48177<=b&&b<=48203||48205<=b&&b<=48231||48233<=b&&b<=48259||48261<=b&&b<=48287||48289<=b&&b<=48315||48317<=b&&b<=48343||48345<=b&&b<=48371||48373<=b&&b<=48399||48401<=b&&b<=48427||48429<=b&&b<=48455||48457<=b&&b<=48483||48485<=b&&b<=48511||48513<=b&&b<=48539||48541<=b&&b<=48567||48569<=b&&b<=48595||48597<=b&&b<=48623||48625<=b&&b<=48651||48653<=b&&b<=48679||48681<=b&&b<=48707||48709<=b&&b<=48735||48737<=b&&b<=48763||48765<=b&&b<=48791||48793<=b&&b<=48819||48821<=b&&b<=48847||48849<=b&&b<=48875||48877<=b&&b<=48903||48905<=b&&b<=48931||48933<=b&&b<=48959||48961<=b&&b<=48987||48989<=b&&b<=49015||49017<=b&&b<=49043||49045<=b&&b<=49071||49073<=b&&b<=49099||49101<=b&&b<=49127||49129<=b&&b<=49155||49157<=b&&b<=49183||49185<=b&&b<=49211||49213<=b&&b<=49239||49241<=b&&b<=49267||49269<=b&&b<=49295||49297<=b&&b<=49323||49325<=b&&b<=49351||49353<=b&&b<=49379||49381<=b&&b<=49407||49409<=b&&b<=49435||49437<=b&&b<=49463||49465<=b&&b<=49491||49493<=b&&b<=49519||49521<=b&&b<=49547||49549<=b&&b<=49575||49577<=b&&b<=49603||49605<=b&&b<=49631||49633<=b&&b<=49659||49661<=b&&b<=49687||49689<=b&&b<=49715||49717<=b&&b<=49743||49745<=b&&b<=49771||49773<=b&&b<=49799||49801<=b&&b<=49827||49829<=b&&b<=49855||49857<=b&&b<=49883||49885<=b&&b<=49911||49913<=b&&b<=49939||49941<=b&&b<=49967||49969<=b&&b<=49995||49997<=b&&b<=50023||50025<=b&&b<=50051||50053<=b&&b<=50079||50081<=b&&b<=50107||50109<=b&&b<=50135||50137<=b&&b<=50163||50165<=b&&b<=50191||50193<=b&&b<=50219||50221<=b&&b<=50247||50249<=b&&b<=50275||50277<=b&&b<=50303||50305<=b&&b<=50331||50333<=b&&b<=50359||50361<=b&&b<=50387||50389<=b&&b<=50415||50417<=b&&b<=50443||50445<=b&&b<=50471||50473<=b&&b<=50499||50501<=b&&b<=50527||50529<=b&&b<=50555||50557<=b&&b<=50583||50585<=b&&b<=50611||50613<=b&&b<=50639||50641<=b&&b<=50667||50669<=b&&b<=50695||50697<=b&&b<=50723||50725<=b&&b<=50751||50753<=b&&b<=50779||50781<=b&&b<=50807||50809<=b&&b<=50835||50837<=b&&b<=50863||50865<=b&&b<=50891||50893<=b&&b<=50919||50921<=b&&b<=50947||50949<=b&&b<=50975||50977<=b&&b<=51003||51005<=b&&b<=51031||51033<=b&&b<=51059||51061<=b&&b<=51087||51089<=b&&b<=51115||51117<=b&&b<=51143||51145<=b&&b<=51171||51173<=b&&b<=51199||51201<=b&&b<=51227||51229<=b&&b<=51255||51257<=b&&b<=51283||51285<=b&&b<=51311||51313<=b&&b<=51339||51341<=b&&b<=51367||51369<=b&&b<=51395||51397<=b&&b<=51423||51425<=b&&b<=51451||51453<=b&&b<=51479||51481<=b&&b<=51507||51509<=b&&b<=51535||51537<=b&&b<=51563||51565<=b&&b<=51591||51593<=b&&b<=51619||51621<=b&&b<=51647||51649<=b&&b<=51675||51677<=b&&b<=51703||51705<=b&&b<=51731||51733<=b&&b<=51759||51761<=b&&b<=51787||51789<=b&&b<=51815||51817<=b&&b<=51843||51845<=b&&b<=51871||51873<=b&&b<=51899||51901<=b&&b<=51927||51929<=b&&b<=51955||51957<=b&&b<=51983||51985<=b&&b<=52011||52013<=b&&b<=52039||52041<=b&&b<=52067||52069<=b&&b<=52095||52097<=b&&b<=52123||52125<=b&&b<=52151||52153<=b&&b<=52179||52181<=b&&b<=52207||52209<=b&&b<=52235||52237<=b&&b<=52263||52265<=b&&b<=52291||52293<=b&&b<=52319||52321<=b&&b<=52347||52349<=b&&b<=52375||52377<=b&&b<=52403||52405<=b&&b<=52431||52433<=b&&b<=52459||52461<=b&&b<=52487||52489<=b&&b<=52515||52517<=b&&b<=52543||52545<=b&&b<=52571||52573<=b&&b<=52599||52601<=b&&b<=52627||52629<=b&&b<=52655||52657<=b&&b<=52683||52685<=b&&b<=52711||52713<=b&&b<=52739||52741<=b&&b<=52767||52769<=b&&b<=52795||52797<=b&&b<=52823||52825<=b&&b<=52851||52853<=b&&b<=52879||52881<=b&&b<=52907||52909<=b&&b<=52935||52937<=b&&b<=52963||52965<=b&&b<=52991||52993<=b&&b<=53019||53021<=b&&b<=53047||53049<=b&&b<=53075||53077<=b&&b<=53103||53105<=b&&b<=53131||53133<=b&&b<=53159||53161<=b&&b<=53187||53189<=b&&b<=53215||53217<=b&&b<=53243||53245<=b&&b<=53271||53273<=b&&b<=53299||53301<=b&&b<=53327||53329<=b&&b<=53355||53357<=b&&b<=53383||53385<=b&&b<=53411||53413<=b&&b<=53439||53441<=b&&b<=53467||53469<=b&&b<=53495||53497<=b&&b<=53523||53525<=b&&b<=53551||53553<=b&&b<=53579||53581<=b&&b<=53607||53609<=b&&b<=53635||53637<=b&&b<=53663||53665<=b&&b<=53691||53693<=b&&b<=53719||53721<=b&&b<=53747||53749<=b&&b<=53775||53777<=b&&b<=53803||53805<=b&&b<=53831||53833<=b&&b<=53859||53861<=b&&b<=53887||53889<=b&&b<=53915||53917<=b&&b<=53943||53945<=b&&b<=53971||53973<=b&&b<=53999||54001<=b&&b<=54027||54029<=b&&b<=54055||54057<=b&&b<=54083||54085<=b&&b<=54111||54113<=b&&b<=54139||54141<=b&&b<=54167||54169<=b&&b<=54195||54197<=b&&b<=54223||54225<=b&&b<=54251||54253<=b&&b<=54279||54281<=b&&b<=54307||54309<=b&&b<=54335||54337<=b&&b<=54363||54365<=b&&b<=54391||54393<=b&&b<=54419||54421<=b&&b<=54447||54449<=b&&b<=54475||54477<=b&&b<=54503||54505<=b&&b<=54531||54533<=b&&b<=54559||54561<=b&&b<=54587||54589<=b&&b<=54615||54617<=b&&b<=54643||54645<=b&&b<=54671||54673<=b&&b<=54699||54701<=b&&b<=54727||54729<=b&&b<=54755||54757<=b&&b<=54783||54785<=b&&b<=54811||54813<=b&&b<=54839||54841<=b&&b<=54867||54869<=b&&b<=54895||54897<=b&&b<=54923||54925<=b&&b<=54951||54953<=b&&b<=54979||54981<=b&&b<=55007||55009<=b&&b<=55035||55037<=b&&b<=55063||55065<=b&&b<=55091||55093<=b&&b<=55119||55121<=b&&b<=55147||55149<=b&&b<=55175||55177<=b&&b<=55203?u:b==9757||b==9977||9994<=b&&b<=9997||b==127877||127938<=b&&b<=127940||b==127943||127946<=b&&b<=127948||128066<=b&&b<=128067||128070<=b&&b<=128080||b==128110||128112<=b&&b<=128120||b==128124||128129<=b&&b<=128131||128133<=b&&b<=128135||b==128170||128372<=b&&b<=128373||b==128378||b==128400||128405<=b&&b<=128406||128581<=b&&b<=128583||128587<=b&&b<=128591||b==128675||128692<=b&&b<=128694||b==128704||b==128716||129304<=b&&b<=129308||129310<=b&&b<=129311||b==129318||129328<=b&&b<=129337||129341<=b&&b<=129342||129489<=b&&b<=129501?g:127995<=b&&b<=127999?f:b==8205?y:b==9792||b==9794||9877<=b&&b<=9878||b==9992||b==10084||b==127752||b==127806||b==127859||b==127891||b==127908||b==127912||b==127979||b==127981||b==128139||128187<=b&&b<=128188||b==128295||b==128300||b==128488||b==128640||b==128658?x:128102<=b&&b<=128105?S:h}return this}typeof ck<"u"&&ck.exports&&(ck.exports=dKe)});var Qhe=ld((XJ,WJ)=>{var rsi=_(T());(function(e,t){typeof XJ=="object"&&typeof WJ<"u"?WJ.exports=t():typeof define=="function"&&define.amd?define(t):(e=e||self).RBush=t()})(XJ,function(){"use strict";function e(x,S,C,V,L){(function Z(E,P,W,v,A){for(;v>W;){if(v-W>600){var b=v-W+1,R=P-W+1,G=Math.log(b),I=.5*Math.exp(2*G/3),w=.5*Math.sqrt(G*I*(b-I)/b)*(R-b/2<0?-1:1),M=Math.max(W,Math.floor(P-R*I/b+w)),B=Math.min(v,Math.floor(P+(b-R)*I/b+w));Z(E,P,M,B,A)}var k=E[P],O=W,N=v;for(t(E,W,P),A(E[v],k)>0&&t(E,W,v);O<N;){for(t(E,O,N),O++,N--;A(E[O],k)<0;)O++;for(;A(E[N],k)>0;)N--}A(E[W],k)===0?t(E,W,N):t(E,++N,v),N<=P&&(W=N+1),P<=N&&(v=N-1)}})(x,S,C||0,V||x.length-1,L||n)}function t(x,S,C){var V=x[S];x[S]=x[C],x[C]=V}function n(x,S){return x<S?-1:x>S?1:0}var i=function(x){x===void 0&&(x=9),this._maxEntries=Math.max(4,x),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()};function o(x,S,C){if(!C)return S.indexOf(x);for(var V=0;V<S.length;V++)if(C(x,S[V]))return V;return-1}function r(x,S){s(x,0,x.children.length,S,x)}function s(x,S,C,V,L){L||(L=f(null)),L.minX=1/0,L.minY=1/0,L.maxX=-1/0,L.maxY=-1/0;for(var Z=S;Z<C;Z++){var E=x.children[Z];a(L,x.leaf?V(E):E)}return L}function a(x,S){return x.minX=Math.min(x.minX,S.minX),x.minY=Math.min(x.minY,S.minY),x.maxX=Math.max(x.maxX,S.maxX),x.maxY=Math.max(x.maxY,S.maxY),x}function c(x,S){return x.minX-S.minX}function d(x,S){return x.minY-S.minY}function u(x){return(x.maxX-x.minX)*(x.maxY-x.minY)}function h(x){return x.maxX-x.minX+(x.maxY-x.minY)}function p(x,S){return x.minX<=S.minX&&x.minY<=S.minY&&S.maxX<=x.maxX&&S.maxY<=x.maxY}function g(x,S){return S.minX<=x.maxX&&S.minY<=x.maxY&&S.maxX>=x.minX&&S.maxY>=x.minY}function f(x){return{children:x,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function y(x,S,C,V,L){for(var Z=[S,C];Z.length;)if(!((C=Z.pop())-(S=Z.pop())<=V)){var E=S+Math.ceil((C-S)/V/2)*V;e(x,E,S,C,L),Z.push(S,E,E,C)}}return i.prototype.all=function(){return this._all(this.data,[])},i.prototype.search=function(x){var S=this.data,C=[];if(!g(x,S))return C;for(var V=this.toBBox,L=[];S;){for(var Z=0;Z<S.children.length;Z++){var E=S.children[Z],P=S.leaf?V(E):E;g(x,P)&&(S.leaf?C.push(E):p(x,P)?this._all(E,C):L.push(E))}S=L.pop()}return C},i.prototype.collides=function(x){var S=this.data;if(!g(x,S))return!1;for(var C=[];S;){for(var V=0;V<S.children.length;V++){var L=S.children[V],Z=S.leaf?this.toBBox(L):L;if(g(x,Z)){if(S.leaf||p(x,Z))return!0;C.push(L)}}S=C.pop()}return!1},i.prototype.load=function(x){if(!x||!x.length)return this;if(x.length<this._minEntries){for(var S=0;S<x.length;S++)this.insert(x[S]);return this}var C=this._build(x.slice(),0,x.length-1,0);if(this.data.children.length)if(this.data.height===C.height)this._splitRoot(this.data,C);else{if(this.data.height<C.height){var V=this.data;this.data=C,C=V}this._insert(C,this.data.height-C.height-1,!0)}else this.data=C;return this},i.prototype.insert=function(x){return x&&this._insert(x,this.data.height-1),this},i.prototype.clear=function(){return this.data=f([]),this},i.prototype.remove=function(x,S){if(!x)return this;for(var C,V,L,Z=this.data,E=this.toBBox(x),P=[],W=[];Z||P.length;){if(Z||(Z=P.pop(),V=P[P.length-1],C=W.pop(),L=!0),Z.leaf){var v=o(x,Z.children,S);if(v!==-1)return Z.children.splice(v,1),P.push(Z),this._condense(P),this}L||Z.leaf||!p(Z,E)?V?(C++,Z=V.children[C],L=!1):Z=null:(P.push(Z),W.push(C),C=0,V=Z,Z=Z.children[0])}return this},i.prototype.toBBox=function(x){return x},i.prototype.compareMinX=function(x,S){return x.minX-S.minX},i.prototype.compareMinY=function(x,S){return x.minY-S.minY},i.prototype.toJSON=function(){return this.data},i.prototype.fromJSON=function(x){return this.data=x,this},i.prototype._all=function(x,S){for(var C=[];x;)x.leaf?S.push.apply(S,x.children):C.push.apply(C,x.children),x=C.pop();return S},i.prototype._build=function(x,S,C,V){var L,Z=C-S+1,E=this._maxEntries;if(Z<=E)return r(L=f(x.slice(S,C+1)),this.toBBox),L;V||(V=Math.ceil(Math.log(Z)/Math.log(E)),E=Math.ceil(Z/Math.pow(E,V-1))),(L=f([])).leaf=!1,L.height=V;var P=Math.ceil(Z/E),W=P*Math.ceil(Math.sqrt(E));y(x,S,C,W,this.compareMinX);for(var v=S;v<=C;v+=W){var A=Math.min(v+W-1,C);y(x,v,A,P,this.compareMinY);for(var b=v;b<=A;b+=P){var R=Math.min(b+P-1,A);L.children.push(this._build(x,b,R,V-1))}}return r(L,this.toBBox),L},i.prototype._chooseSubtree=function(x,S,C,V){for(;V.push(S),!S.leaf&&V.length-1!==C;){for(var L=1/0,Z=1/0,E=void 0,P=0;P<S.children.length;P++){var W=S.children[P],v=u(W),A=(b=x,R=W,(Math.max(R.maxX,b.maxX)-Math.min(R.minX,b.minX))*(Math.max(R.maxY,b.maxY)-Math.min(R.minY,b.minY))-v);A<Z?(Z=A,L=v<L?v:L,E=W):A===Z&&v<L&&(L=v,E=W)}S=E||S.children[0]}var b,R;return S},i.prototype._insert=function(x,S,C){var V=C?x:this.toBBox(x),L=[],Z=this._chooseSubtree(V,this.data,S,L);for(Z.children.push(x),a(Z,V);S>=0&&L[S].children.length>this._maxEntries;)this._split(L,S),S--;this._adjustParentBBoxes(V,L,S)},i.prototype._split=function(x,S){var C=x[S],V=C.children.length,L=this._minEntries;this._chooseSplitAxis(C,L,V);var Z=this._chooseSplitIndex(C,L,V),E=f(C.children.splice(Z,C.children.length-Z));E.height=C.height,E.leaf=C.leaf,r(C,this.toBBox),r(E,this.toBBox),S?x[S-1].children.push(E):this._splitRoot(C,E)},i.prototype._splitRoot=function(x,S){this.data=f([x,S]),this.data.height=x.height+1,this.data.leaf=!1,r(this.data,this.toBBox)},i.prototype._chooseSplitIndex=function(x,S,C){for(var V,L,Z,E,P,W,v,A=1/0,b=1/0,R=S;R<=C-S;R++){var G=s(x,0,R,this.toBBox),I=s(x,R,C,this.toBBox),w=(L=G,Z=I,E=void 0,P=void 0,W=void 0,v=void 0,E=Math.max(L.minX,Z.minX),P=Math.max(L.minY,Z.minY),W=Math.min(L.maxX,Z.maxX),v=Math.min(L.maxY,Z.maxY),Math.max(0,W-E)*Math.max(0,v-P)),M=u(G)+u(I);w<A?(A=w,V=R,b=M<b?M:b):w===A&&M<b&&(b=M,V=R)}return V||C-S},i.prototype._chooseSplitAxis=function(x,S,C){var V=x.leaf?this.compareMinX:c,L=x.leaf?this.compareMinY:d;this._allDistMargin(x,S,C,V)<this._allDistMargin(x,S,C,L)&&x.children.sort(V)},i.prototype._allDistMargin=function(x,S,C,V){x.children.sort(V);for(var L=this.toBBox,Z=s(x,0,S,L),E=s(x,C-S,C,L),P=h(Z)+h(E),W=S;W<C-S;W++){var v=x.children[W];a(Z,x.leaf?L(v):v),P+=h(Z)}for(var A=C-S-1;A>=S;A--){var b=x.children[A];a(E,x.leaf?L(b):b),P+=h(E)}return P},i.prototype._adjustParentBBoxes=function(x,S,C){for(var V=C;V>=0;V--)a(S[V],x)},i.prototype._condense=function(x){for(var S=x.length-1,C=void 0;S>=0;S--)x[S].children.length===0?S>0?(C=x[S-1].children).splice(C.indexOf(x[S]),1):this.clear():r(x[S],this.toBBox)},i})});var p7=ld((exports,module)=>{var cQi=_(T());/*! * protobuf.js v7.4.0 (c) 2016, daniel wirtz * compiled thu, 22 aug 2024 20:30:39 utc * licensed under the bsd-3-clause license * see: https://github.com/dcodeio/protobuf.js for details */(function(undefined){"use strict";(function(t,n,i){function o(s){var a=n[s];return a||t[s][0].call(a=n[s]={exports:{}},o,a,a.exports),a.exports}var r=o(i[0]);r.util.global.protobuf=r,typeof define=="function"&&define.amd&&define(["long"],function(s){return s&&s.isLong&&(r.util.Long=s,r.configure()),r}),typeof module=="object"&&module&&module.exports&&(module.exports=r)})({1:[function(e,t,n){"use strict";t.exports=i;function i(o,r){for(var s=new Array(arguments.length-1),a=0,c=2,d=!0;c<arguments.length;)s[a++]=arguments[c++];return new Promise(function(h,p){s[a]=function(f){if(d)if(d=!1,f)p(f);else{for(var y=new Array(arguments.length-1),x=0;x<y.length;)y[x++]=arguments[x];h.apply(null,y)}};try{o.apply(r||null,s)}catch(g){d&&(d=!1,p(g))}})}},{}],2:[function(e,t,n){"use strict";var i=n;i.length=function(d){var u=d.length;if(!u)return 0;for(var h=0;--u%4>1&&d.charAt(u)==="=";)++h;return Math.ceil(d.length*3)/4-h};for(var o=new Array(64),r=new Array(123),s=0;s<64;)r[o[s]=s<26?s+65:s<52?s+71:s<62?s-4:s-59|43]=s++;i.encode=function(d,u,h){for(var p=null,g=[],f=0,y=0,x;u<h;){var S=d[u++];switch(y){case 0:g[f++]=o[S>>2],x=(S&3)<<4,y=1;break;case 1:g[f++]=o[x|S>>4],x=(S&15)<<2,y=2;break;case 2:g[f++]=o[x|S>>6],g[f++]=o[S&63],y=0;break}f>8191&&((p||(p=[])).push(String.fromCharCode.apply(String,g)),f=0)}return y&&(g[f++]=o[x],g[f++]=61,y===1&&(g[f++]=61)),p?(f&&p.push(String.fromCharCode.apply(String,g.slice(0,f))),p.join("")):String.fromCharCode.apply(String,g.slice(0,f))};var a="invalid encoding";i.decode=function(d,u,h){for(var p=h,g=0,f,y=0;y<d.length;){var x=d.charCodeAt(y++);if(x===61&&g>1)break;if((x=r[x])===undefined)throw Error(a);switch(g){case 0:f=x,g=1;break;case 1:u[h++]=f<<2|(x&48)>>4,f=x,g=2;break;case 2:u[h++]=(f&15)<<4|(x&60)>>2,f=x,g=3;break;case 3:u[h++]=(f&3)<<6|x,g=0;break}}if(g===1)throw Error(a);return h-p},i.test=function(d){return/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(d)}},{}],3:[function(e,t,n){"use strict";t.exports=i;function i(){this._listeners={}}i.prototype.on=function(r,s,a){return(this._listeners[r]||(this._listeners[r]=[])).push({fn:s,ctx:a||this}),this},i.prototype.off=function(r,s){if(r===undefined)this._listeners={};else if(s===undefined)this._listeners[r]=[];else for(var a=this._listeners[r],c=0;c<a.length;)a[c].fn===s?a.splice(c,1):++c;return this},i.prototype.emit=function(r){var s=this._listeners[r];if(s){for(var a=[],c=1;c<arguments.length;)a.push(arguments[c++]);for(c=0;c<s.length;)s[c].fn.apply(s[c++].ctx,a)}return this}},{}],4:[function(e,t,n){"use strict";t.exports=i(i);function i(c){return typeof Float32Array<"u"?function(){var d=new Float32Array([-0]),u=new Uint8Array(d.buffer),h=u[3]===128;function p(x,S,C){d[0]=x,S[C]=u[0],S[C+1]=u[1],S[C+2]=u[2],S[C+3]=u[3]}function g(x,S,C){d[0]=x,S[C]=u[3],S[C+1]=u[2],S[C+2]=u[1],S[C+3]=u[0]}c.writeFloatLE=h?p:g,c.writeFloatBE=h?g:p;function f(x,S){return u[0]=x[S],u[1]=x[S+1],u[2]=x[S+2],u[3]=x[S+3],d[0]}function y(x,S){return u[3]=x[S],u[2]=x[S+1],u[1]=x[S+2],u[0]=x[S+3],d[0]}c.readFloatLE=h?f:y,c.readFloatBE=h?y:f}():function(){function d(h,p,g,f){var y=p<0?1:0;if(y&&(p=-p),p===0)h(1/p>0?0:2147483648,g,f);else if(isNaN(p))h(2143289344,g,f);else if(p>34028234663852886e22)h((y<<31|2139095040)>>>0,g,f);else if(p<11754943508222875e-54)h((y<<31|Math.round(p/1401298464324817e-60))>>>0,g,f);else{var x=Math.floor(Math.log(p)/Math.LN2),S=Math.round(p*Math.pow(2,-x)*8388608)&8388607;h((y<<31|x+127<<23|S)>>>0,g,f)}}c.writeFloatLE=d.bind(null,o),c.writeFloatBE=d.bind(null,r);function u(h,p,g){var f=h(p,g),y=(f>>31)*2+1,x=f>>>23&255,S=f&8388607;return x===255?S?NaN:y*(1/0):x===0?y*1401298464324817e-60*S:y*Math.pow(2,x-150)*(S+8388608)}c.readFloatLE=u.bind(null,s),c.readFloatBE=u.bind(null,a)}(),typeof Float64Array<"u"?function(){var d=new Float64Array([-0]),u=new Uint8Array(d.buffer),h=u[7]===128;function p(x,S,C){d[0]=x,S[C]=u[0],S[C+1]=u[1],S[C+2]=u[2],S[C+3]=u[3],S[C+4]=u[4],S[C+5]=u[5],S[C+6]=u[6],S[C+7]=u[7]}function g(x,S,C){d[0]=x,S[C]=u[7],S[C+1]=u[6],S[C+2]=u[5],S[C+3]=u[4],S[C+4]=u[3],S[C+5]=u[2],S[C+6]=u[1],S[C+7]=u[0]}c.writeDoubleLE=h?p:g,c.writeDoubleBE=h?g:p;function f(x,S){return u[0]=x[S],u[1]=x[S+1],u[2]=x[S+2],u[3]=x[S+3],u[4]=x[S+4],u[5]=x[S+5],u[6]=x[S+6],u[7]=x[S+7],d[0]}function y(x,S){return u[7]=x[S],u[6]=x[S+1],u[5]=x[S+2],u[4]=x[S+3],u[3]=x[S+4],u[2]=x[S+5],u[1]=x[S+6],u[0]=x[S+7],d[0]}c.readDoubleLE=h?f:y,c.readDoubleBE=h?y:f}():function(){function d(h,p,g,f,y,x){var S=f<0?1:0;if(S&&(f=-f),f===0)h(0,y,x+p),h(1/f>0?0:2147483648,y,x+g);else if(isNaN(f))h(0,y,x+p),h(2146959360,y,x+g);else if(f>17976931348623157e292)h(0,y,x+p),h((S<<31|2146435072)>>>0,y,x+g);else{var C;if(f<22250738585072014e-324)C=f/5e-324,h(C>>>0,y,x+p),h((S<<31|C/4294967296)>>>0,y,x+g);else{var V=Math.floor(Math.log(f)/Math.LN2);V===1024&&(V=1023),C=f*Math.pow(2,-V),h(C*4503599627370496>>>0,y,x+p),h((S<<31|V+1023<<20|C*1048576&1048575)>>>0,y,x+g)}}}c.writeDoubleLE=d.bind(null,o,0,4),c.writeDoubleBE=d.bind(null,r,4,0);function u(h,p,g,f,y){var x=h(f,y+p),S=h(f,y+g),C=(S>>31)*2+1,V=S>>>20&2047,L=4294967296*(S&1048575)+x;return V===2047?L?NaN:C*(1/0):V===0?C*5e-324*L:C*Math.pow(2,V-1075)*(L+4503599627370496)}c.readDoubleLE=u.bind(null,s,0,4),c.readDoubleBE=u.bind(null,a,4,0)}(),c}function o(c,d,u){d[u]=c&255,d[u+1]=c>>>8&255,d[u+2]=c>>>16&255,d[u+3]=c>>>24}function r(c,d,u){d[u]=c>>>24,d[u+1]=c>>>16&255,d[u+2]=c>>>8&255,d[u+3]=c&255}function s(c,d){return(c[d]|c[d+1]<<8|c[d+2]<<16|c[d+3]<<24)>>>0}function a(c,d){return(c[d]<<24|c[d+1]<<16|c[d+2]<<8|c[d+3])>>>0}},{}],5:[function(require,module,exports){"use strict";module.exports=inquire;function inquire(moduleName){try{var mod=eval("quire".replace(/^/,"re"))(moduleName);if(mod&&(mod.length||Object.keys(mod).length))return mod}catch(e){}return null}},{}],6:[function(e,t,n){"use strict";t.exports=i;function i(o,r,s){var a=s||8192,c=a>>>1,d=null,u=a;return function(p){if(p<1||p>c)return o(p);u+p>a&&(d=o(a),u=0);var g=r.call(d,u,u+=p);return u&7&&(u=(u|7)+1),g}}},{}],7:[function(e,t,n){"use strict";var i=n;i.length=function(r){for(var s=0,a=0,c=0;c<r.length;++c)a=r.charCodeAt(c),a<128?s+=1:a<2048?s+=2:(a&64512)===55296&&(r.charCodeAt(c+1)&64512)===56320?(++c,s+=4):s+=3;return s},i.read=function(r,s,a){var c=a-s;if(c<1)return"";for(var d=null,u=[],h=0,p;s<a;)p=r[s++],p<128?u[h++]=p:p>191&&p<224?u[h++]=(p&31)<<6|r[s++]&63:p>239&&p<365?(p=((p&7)<<18|(r[s++]&63)<<12|(r[s++]&63)<<6|r[s++]&63)-65536,u[h++]=55296+(p>>10),u[h++]=56320+(p&1023)):u[h++]=(p&15)<<12|(r[s++]&63)<<6|r[s++]&63,h>8191&&((d||(d=[])).push(String.fromCharCode.apply(String,u)),h=0);return d?(h&&d.push(String.fromCharCode.apply(String,u.slice(0,h))),d.join("")):String.fromCharCode.apply(String,u.slice(0,h))},i.write=function(r,s,a){for(var c=a,d,u,h=0;h<r.length;++h)d=r.charCodeAt(h),d<128?s[a++]=d:d<2048?(s[a++]=d>>6|192,s[a++]=d&63|128):(d&64512)===55296&&((u=r.charCodeAt(h+1))&64512)===56320?(d=65536+((d&1023)<<10)+(u&1023),++h,s[a++]=d>>18|240,s[a++]=d>>12&63|128,s[a++]=d>>6&63|128,s[a++]=d&63|128):(s[a++]=d>>12|224,s[a++]=d>>6&63|128,s[a++]=d&63|128);return a-c}},{}],8:[function(e,t,n){"use strict";var i=n;i.build="minimal",i.Writer=e(16),i.BufferWriter=e(17),i.Reader=e(9),i.BufferReader=e(10),i.util=e(15),i.rpc=e(12),i.roots=e(11),i.configure=o;function o(){i.util._configure(),i.Writer._configure(i.BufferWriter),i.Reader._configure(i.BufferReader)}o()},{10:10,11:11,12:12,15:15,16:16,17:17,9:9}],9:[function(e,t,n){"use strict";t.exports=c;var i=e(15),o,r=i.LongBits,s=i.utf8;function a(f,y){return RangeError("index out of range: "+f.pos+" + "+(y||1)+" > "+f.len)}function c(f){this.buf=f,this.pos=0,this.len=f.length}var d=typeof Uint8Array<"u"?function(y){if(y instanceof Uint8Array||Array.isArray(y))return new c(y);throw Error("illegal buffer")}:function(y){if(Array.isArray(y))return new c(y);throw Error("illegal buffer")},u=function(){return i.Buffer?function(x){return(c.create=function(C){return i.Buffer.isBuffer(C)?new o(C):d(C)})(x)}:d};c.create=u(),c.prototype._slice=i.Array.prototype.subarray||i.Array.prototype.slice,c.prototype.uint32=function(){var y=4294967295;return function(){if(y=(this.buf[this.pos]&127)>>>0,this.buf[this.pos++]<128||(y=(y|(this.buf[this.pos]&127)<<7)>>>0,this.buf[this.pos++]<128)||(y=(y|(this.buf[this.pos]&127)<<14)>>>0,this.buf[this.pos++]<128)||(y=(y|(this.buf[this.pos]&127)<<21)>>>0,this.buf[this.pos++]<128)||(y=(y|(this.buf[this.pos]&15)<<28)>>>0,this.buf[this.pos++]<128))return y;if((this.pos+=5)>this.len)throw this.pos=this.len,a(this,10);return y}}(),c.prototype.int32=function(){return this.uint32()|0},c.prototype.sint32=function(){var y=this.uint32();return y>>>1^-(y&1)|0};function h(){var f=new r(0,0),y=0;if(this.len-this.pos>4){for(;y<4;++y)if(f.lo=(f.lo|(this.buf[this.pos]&127)<<y*7)>>>0,this.buf[this.pos++]<128)return f;if(f.lo=(f.lo|(this.buf[this.pos]&127)<<28)>>>0,f.hi=(f.hi|(this.buf[this.pos]&127)>>4)>>>0,this.buf[this.pos++]<128)return f;y=0}else{for(;y<3;++y){if(this.pos>=this.len)throw a(this);if(f.lo=(f.lo|(this.buf[this.pos]&127)<<y*7)>>>0,this.buf[this.pos++]<128)return f}return f.lo=(f.lo|(this.buf[this.pos++]&127)<<y*7)>>>0,f}if(this.len-this.pos>4){for(;y<5;++y)if(f.hi=(f.hi|(this.buf[this.pos]&127)<<y*7+3)>>>0,this.buf[this.pos++]<128)return f}else for(;y<5;++y){if(this.pos>=this.len)throw a(this);if(f.hi=(f.hi|(this.buf[this.pos]&127)<<y*7+3)>>>0,this.buf[this.pos++]<128)return f}throw Error("invalid varint encoding")}c.prototype.bool=function(){return this.uint32()!==0};function p(f,y){return(f[y-4]|f[y-3]<<8|f[y-2]<<16|f[y-1]<<24)>>>0}c.prototype.fixed32=function(){if(this.pos+4>this.len)throw a(this,4);return p(this.buf,this.pos+=4)},c.prototype.sfixed32=function(){if(this.pos+4>this.len)throw a(this,4);return p(this.buf,this.pos+=4)|0};function g(){if(this.pos+8>this.len)throw a(this,8);return new r(p(this.buf,this.pos+=4),p(this.buf,this.pos+=4))}c.prototype.float=function(){if(this.pos+4>this.len)throw a(this,4);var y=i.float.readFloatLE(this.buf,this.pos);return this.pos+=4,y},c.prototype.double=function(){if(this.pos+8>this.len)throw a(this,4);var y=i.float.readDoubleLE(this.buf,this.pos);return this.pos+=8,y},c.prototype.bytes=function(){var y=this.uint32(),x=this.pos,S=this.pos+y;if(S>this.len)throw a(this,y);if(this.pos+=y,Array.isArray(this.buf))return this.buf.slice(x,S);if(x===S){var C=i.Buffer;return C?C.alloc(0):new this.buf.constructor(0)}return this._slice.call(this.buf,x,S)},c.prototype.string=function(){var y=this.bytes();return s.read(y,0,y.length)},c.prototype.skip=function(y){if(typeof y=="number"){if(this.pos+y>this.len)throw a(this,y);this.pos+=y}else do if(this.pos>=this.len)throw a(this);while(this.buf[this.pos++]&128);return this},c.prototype.skipType=function(f){switch(f){case 0:this.skip();break;case 1:this.skip(8);break;case 2:this.skip(this.uint32());break;case 3:for(;(f=this.uint32()&7)!==4;)this.skipType(f);break;case 5:this.skip(4);break;default:throw Error("invalid wire type "+f+" at offset "+this.pos)}return this},c._configure=function(f){o=f,c.create=u(),o._configure();var y=i.Long?"toLong":"toNumber";i.merge(c.prototype,{int64:function(){return h.call(this)[y](!1)},uint64:function(){return h.call(this)[y](!0)},sint64:function(){return h.call(this).zzDecode()[y](!1)},fixed64:function(){return g.call(this)[y](!0)},sfixed64:function(){return g.call(this)[y](!1)}})}},{15:15}],10:[function(e,t,n){"use strict";t.exports=r;var i=e(9);(r.prototype=Object.create(i.prototype)).constructor=r;var o=e(15);function r(s){i.call(this,s)}r._configure=function(){o.Buffer&&(r.prototype._slice=o.Buffer.prototype.slice)},r.prototype.string=function(){var a=this.uint32();return this.buf.utf8Slice?this.buf.utf8Slice(this.pos,this.pos=Math.min(this.pos+a,this.len)):this.buf.toString("utf-8",this.pos,this.pos=Math.min(this.pos+a,this.len))},r._configure()},{15:15,9:9}],11:[function(e,t,n){"use strict";t.exports={}},{}],12:[function(e,t,n){"use strict";var i=n;i.Service=e(13)},{13:13}],13:[function(e,t,n){"use strict";t.exports=o;var i=e(15);(o.prototype=Object.create(i.EventEmitter.prototype)).constructor=o;function o(r,s,a){if(typeof r!="function")throw TypeError("rpcImpl must be a function");i.EventEmitter.call(this),this.rpcImpl=r,this.requestDelimited=!!s,this.responseDelimited=!!a}o.prototype.rpcCall=function r(s,a,c,d,u){if(!d)throw TypeError("request must be specified");var h=this;if(!u)return i.asPromise(r,h,s,a,c,d);if(!h.rpcImpl)return setTimeout(function(){u(Error("already ended"))},0),undefined;try{return h.rpcImpl(s,a[h.requestDelimited?"encodeDelimited":"encode"](d).finish(),function(g,f){if(g)return h.emit("error",g,s),u(g);if(f===null)return h.end(!0),undefined;if(!(f instanceof c))try{f=c[h.responseDelimited?"decodeDelimited":"decode"](f)}catch(y){return h.emit("error",y,s),u(y)}return h.emit("data",f,s),u(null,f)})}catch(p){return h.emit("error",p,s),setTimeout(function(){u(p)},0),undefined}},o.prototype.end=function(s){return this.rpcImpl&&(s||this.rpcImpl(null,null,null),this.rpcImpl=null,this.emit("end").off()),this}},{15:15}],14:[function(e,t,n){"use strict";t.exports=o;var i=e(15);function o(c,d){this.lo=c>>>0,this.hi=d>>>0}var r=o.zero=new o(0,0);r.toNumber=function(){return 0},r.zzEncode=r.zzDecode=function(){return this},r.length=function(){return 1};var s=o.zeroHash="\0\0\0\0\0\0\0\0";o.fromNumber=function(d){if(d===0)return r;var u=d<0;u&&(d=-d);var h=d>>>0,p=(d-h)/4294967296>>>0;return u&&(p=~p>>>0,h=~h>>>0,++h>4294967295&&(h=0,++p>4294967295&&(p=0))),new o(h,p)},o.from=function(d){if(typeof d=="number")return o.fromNumber(d);if(i.isString(d))if(i.Long)d=i.Long.fromString(d);else return o.fromNumber(parseInt(d,10));return d.low||d.high?new o(d.low>>>0,d.high>>>0):r},o.prototype.toNumber=function(d){if(!d&&this.hi>>>31){var u=~this.lo+1>>>0,h=~this.hi>>>0;return u||(h=h+1>>>0),-(u+h*4294967296)}return this.lo+this.hi*4294967296},o.prototype.toLong=function(d){return i.Long?new i.Long(this.lo|0,this.hi|0,!!d):{low:this.lo|0,high:this.hi|0,unsigned:!!d}};var a=String.prototype.charCodeAt;o.fromHash=function(d){return d===s?r:new o((a.call(d,0)|a.call(d,1)<<8|a.call(d,2)<<16|a.call(d,3)<<24)>>>0,(a.call(d,4)|a.call(d,5)<<8|a.call(d,6)<<16|a.call(d,7)<<24)>>>0)},o.prototype.toHash=function(){return String.fromCharCode(this.lo&255,this.lo>>>8&255,this.lo>>>16&255,this.lo>>>24,this.hi&255,this.hi>>>8&255,this.hi>>>16&255,this.hi>>>24)},o.prototype.zzEncode=function(){var d=this.hi>>31;return this.hi=((this.hi<<1|this.lo>>>31)^d)>>>0,this.lo=(this.lo<<1^d)>>>0,this},o.prototype.zzDecode=function(){var d=-(this.lo&1);return this.lo=((this.lo>>>1|this.hi<<31)^d)>>>0,this.hi=(this.hi>>>1^d)>>>0,this},o.prototype.length=function(){var d=this.lo,u=(this.lo>>>28|this.hi<<4)>>>0,h=this.hi>>>24;return h===0?u===0?d<16384?d<128?1:2:d<2097152?3:4:u<16384?u<128?5:6:u<2097152?7:8:h<128?9:10}},{15:15}],15:[function(e,t,n){"use strict";var i=n;i.asPromise=e(1),i.base64=e(2),i.EventEmitter=e(3),i.float=e(4),i.inquire=e(5),i.utf8=e(7),i.pool=e(6),i.LongBits=e(14),i.isNode=!!(typeof global<"u"&&global&&global.process&&global.process.versions&&global.process.versions.node),i.global=i.isNode&&global||typeof window<"u"&&window||typeof self<"u"&&self||this,i.emptyArray=Object.freeze?Object.freeze([]):[],i.emptyObject=Object.freeze?Object.freeze({}):{},i.isInteger=Number.isInteger||function(a){return typeof a=="number"&&isFinite(a)&&Math.floor(a)===a},i.isString=function(a){return typeof a=="string"||a instanceof String},i.isObject=function(a){return a&&typeof a=="object"},i.isset=i.isSet=function(a,c){var d=a[c];return d!=null&&a.hasOwnProperty(c)?typeof d!="object"||(Array.isArray(d)?d.length:Object.keys(d).length)>0:!1},i.Buffer=function(){try{var s=i.inquire("buffer").Buffer;return s.prototype.utf8Write?s:null}catch{return null}}(),i._Buffer_from=null,i._Buffer_allocUnsafe=null,i.newBuffer=function(a){return typeof a=="number"?i.Buffer?i._Buffer_allocUnsafe(a):new i.Array(a):i.Buffer?i._Buffer_from(a):typeof Uint8Array>"u"?a:new Uint8Array(a)},i.Array=typeof Uint8Array<"u"?Uint8Array:Array,i.Long=i.global.dcodeIO&&i.global.dcodeIO.Long||i.global.Long||i.inquire("long"),i.key2Re=/^true|false|0|1$/,i.key32Re=/^-?(?:0|[1-9][0-9]*)$/,i.key64Re=/^(?:[\\x00-\\xff]{8}|-?(?:0|[1-9][0-9]*))$/,i.longToHash=function(a){return a?i.LongBits.from(a).toHash():i.LongBits.zeroHash},i.longFromHash=function(a,c){var d=i.LongBits.fromHash(a);return i.Long?i.Long.fromBits(d.lo,d.hi,c):d.toNumber(!!c)};function o(s,a,c){for(var d=Object.keys(a),u=0;u<d.length;++u)(s[d[u]]===undefined||!c)&&(s[d[u]]=a[d[u]]);return s}i.merge=o,i.lcFirst=function(a){return a.charAt(0).toLowerCase()+a.substring(1)};function r(s){function a(c,d){if(!(this instanceof a))return new a(c,d);Object.defineProperty(this,"message",{get:function(){return c}}),Error.captureStackTrace?Error.captureStackTrace(this,a):Object.defineProperty(this,"stack",{value:new Error().stack||""}),d&&o(this,d)}return a.prototype=Object.create(Error.prototype,{constructor:{value:a,writable:!0,enumerable:!1,configurable:!0},name:{get:function(){return s},set:undefined,enumerable:!1,configurable:!0},toString:{value:function(){return this.name+": "+this.message},writable:!0,enumerable:!1,configurable:!0}}),a}i.newError=r,i.ProtocolError=r("ProtocolError"),i.oneOfGetter=function(a){for(var c={},d=0;d<a.length;++d)c[a[d]]=1;return function(){for(var u=Object.keys(this),h=u.length-1;h>-1;--h)if(c[u[h]]===1&&this[u[h]]!==undefined&&this[u[h]]!==null)return u[h]}},i.oneOfSetter=function(a){return function(c){for(var d=0;d<a.length;++d)a[d]!==c&&delete this[a[d]]}},i.toJSONOptions={longs:String,enums:String,bytes:String,json:!0},i._configure=function(){var s=i.Buffer;if(!s){i._Buffer_from=i._Buffer_allocUnsafe=null;return}i._Buffer_from=s.from!==Uint8Array.from&&s.from||function(c,d){return new s(c,d)},i._Buffer_allocUnsafe=s.allocUnsafe||function(c){return new s(c)}}},{1:1,14:14,2:2,3:3,4:4,5:5,6:6,7:7}],16:[function(e,t,n){"use strict";t.exports=h;var i=e(15),o,r=i.LongBits,s=i.base64,a=i.utf8;function c(V,L,Z){this.fn=V,this.len=L,this.next=undefined,this.val=Z}function d(){}function u(V){this.head=V.head,this.tail=V.tail,this.len=V.len,this.next=V.states}function h(){this.len=0,this.head=new c(d,0,0),this.tail=this.head,this.states=null}var p=function(){return i.Buffer?function(){return(h.create=function(){return new o})()}:function(){return new h}};h.create=p(),h.alloc=function(L){return new i.Array(L)},i.Array!==Array&&(h.alloc=i.pool(h.alloc,i.Array.prototype.subarray)),h.prototype._push=function(L,Z,E){return this.tail=this.tail.next=new c(L,Z,E),this.len+=Z,this};function g(V,L,Z){L[Z]=V&255}function f(V,L,Z){for(;V>127;)L[Z++]=V&127|128,V>>>=7;L[Z]=V}function y(V,L){this.len=V,this.next=undefined,this.val=L}y.prototype=Object.create(c.prototype),y.prototype.fn=f,h.prototype.uint32=function(L){return this.len+=(this.tail=this.tail.next=new y((L=L>>>0)<128?1:L<16384?2:L<2097152?3:L<268435456?4:5,L)).len,this},h.prototype.int32=function(L){return L<0?this._push(x,10,r.fromNumber(L)):this.uint32(L)},h.prototype.sint32=function(L){return this.uint32((L<<1^L>>31)>>>0)};function x(V,L,Z){for(;V.hi;)L[Z++]=V.lo&127|128,V.lo=(V.lo>>>7|V.hi<<25)>>>0,V.hi>>>=7;for(;V.lo>127;)L[Z++]=V.lo&127|128,V.lo=V.lo>>>7;L[Z++]=V.lo}h.prototype.uint64=function(L){var Z=r.from(L);return this._push(x,Z.length(),Z)},h.prototype.int64=h.prototype.uint64,h.prototype.sint64=function(L){var Z=r.from(L).zzEncode();return this._push(x,Z.length(),Z)},h.prototype.bool=function(L){return this._push(g,1,L?1:0)};function S(V,L,Z){L[Z]=V&255,L[Z+1]=V>>>8&255,L[Z+2]=V>>>16&255,L[Z+3]=V>>>24}h.prototype.fixed32=function(L){return this._push(S,4,L>>>0)},h.prototype.sfixed32=h.prototype.fixed32,h.prototype.fixed64=function(L){var Z=r.from(L);return this._push(S,4,Z.lo)._push(S,4,Z.hi)},h.prototype.sfixed64=h.prototype.fixed64,h.prototype.float=function(L){return this._push(i.float.writeFloatLE,4,L)},h.prototype.double=function(L){return this._push(i.float.writeDoubleLE,8,L)};var C=i.Array.prototype.set?function(L,Z,E){Z.set(L,E)}:function(L,Z,E){for(var P=0;P<L.length;++P)Z[E+P]=L[P]};h.prototype.bytes=function(L){var Z=L.length>>>0;if(!Z)return this._push(g,1,0);if(i.isString(L)){var E=h.alloc(Z=s.length(L));s.decode(L,E,0),L=E}return this.uint32(Z)._push(C,Z,L)},h.prototype.string=function(L){var Z=a.length(L);return Z?this.uint32(Z)._push(a.write,Z,L):this._push(g,1,0)},h.prototype.fork=function(){return this.states=new u(this),this.head=this.tail=new c(d,0,0),this.len=0,this},h.prototype.reset=function(){return this.states?(this.head=this.states.head,this.tail=this.states.tail,this.len=this.states.len,this.states=this.states.next):(this.head=this.tail=new c(d,0,0),this.len=0),this},h.prototype.ldelim=function(){var L=this.head,Z=this.tail,E=this.len;return this.reset().uint32(E),E&&(this.tail.next=L.next,this.tail=Z,this.len+=E),this},h.prototype.finish=function(){for(var L=this.head.next,Z=this.constructor.alloc(this.len),E=0;L;)L.fn(L.val,Z,E),E+=L.len,L=L.next;return Z},h._configure=function(V){o=V,h.create=p(),o._configure()}},{15:15}],17:[function(e,t,n){"use strict";t.exports=r;var i=e(16);(r.prototype=Object.create(i.prototype)).constructor=r;var o=e(15);function r(){i.call(this)}r._configure=function(){r.alloc=o._Buffer_allocUnsafe,r.writeBytesBuffer=o.Buffer&&o.Buffer.prototype instanceof Uint8Array&&o.Buffer.prototype.set.name==="set"?function(c,d,u){d.set(c,u)}:function(c,d,u){if(c.copy)c.copy(d,u,0,c.length);else for(var h=0;h<c.length;)d[u++]=c[h++]}},r.prototype.bytes=function(c){o.isString(c)&&(c=o._Buffer_from(c,"base64"));var d=c.length>>>0;return this.uint32(d),d&&this._push(r.writeBytesBuffer,d,c),this};function s(a,c,d){a.length<40?o.utf8.write(a,c,d):c.utf8Write?c.utf8Write(a,d):c.write(a,d)}r.prototype.string=function(c){var d=o.Buffer.byteLength(c);return this.uint32(d),d&&this._push(s,d,c),this},r._configure()},{15:15,16:16}]},{},[8])})()});var tCe=ld((ceo,dB)=>{var leo=_(T());/* Copyright 2015-2018 Esri. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 @preserve */(function(){var e=function(){var o={};o.defaultNoDataValue=-34027999387901484e22,o.decode=function(u,h){h=h||{};var p=h.encodedMaskData||h.encodedMaskData===null,g=c(u,h.inputOffset||0,p),f=h.noDataValue!==null?h.noDataValue:o.defaultNoDataValue,y=r(g,h.pixelType||Float32Array,h.encodedMaskData,f,h.returnMask),x={width:g.width,height:g.height,pixelData:y.resultPixels,minValue:y.minValue,maxValue:g.pixels.maxValue,noDataValue:f};return y.resultMask&&(x.maskData=y.resultMask),h.returnEncodedMask&&g.mask&&(x.encodedMaskData=g.mask.bitset?g.mask.bitset:null),h.returnFileInfo&&(x.fileInfo=s(g),h.computeUsedBitDepths&&(x.fileInfo.bitDepths=a(g))),x};var r=function(u,h,p,g,f){var y=0,x=u.pixels.numBlocksX,S=u.pixels.numBlocksY,C=Math.floor(u.width/x),V=Math.floor(u.height/S),L=2*u.maxZError,Z=Number.MAX_VALUE,E;p=p||(u.mask?u.mask.bitset:null);var P,W;P=new h(u.width*u.height),f&&p&&(W=new Uint8Array(u.width*u.height));for(var v=new Float32Array(C*V),A,b,R=0;R<=S;R++){var G=R!==S?V:u.height%S;if(G!==0)for(var I=0;I<=x;I++){var w=I!==x?C:u.width%x;if(w!==0){var M=R*u.width*V+I*C,B=u.width-w,k=u.pixels.blocks[y],O,N,z;k.encoding<2?(k.encoding===0?O=k.rawData:(d(k.stuffedData,k.bitsPerPixel,k.numValidPixels,k.offset,L,v,u.pixels.maxValue),O=v),N=0):k.encoding===2?z=0:z=k.offset;var K;if(p)for(b=0;b<G;b++){for(M&7&&(K=p[M>>3],K<<=M&7),A=0;A<w;A++)M&7||(K=p[M>>3]),K&128?(W&&(W[M]=1),E=k.encoding<2?O[N++]:z,Z=Z>E?E:Z,P[M++]=E):(W&&(W[M]=0),P[M++]=g),K<<=1;M+=B}else if(k.encoding<2)for(b=0;b<G;b++){for(A=0;A<w;A++)E=O[N++],Z=Z>E?E:Z,P[M++]=E;M+=B}else for(Z=Z>z?z:Z,b=0;b<G;b++){for(A=0;A<w;A++)P[M++]=z;M+=B}if(k.encoding===1&&N!==k.numValidPixels)throw"Block and Mask do not match";y++}}}return{resultPixels:P,resultMask:W,minValue:Z}},s=function(u){return{fileIdentifierString:u.fileIdentifierString,fileVersion:u.fileVersion,imageType:u.imageType,height:u.height,width:u.width,maxZError:u.maxZError,eofOffset:u.eofOffset,mask:u.mask?{numBlocksX:u.mask.numBlocksX,numBlocksY:u.mask.numBlocksY,numBytes:u.mask.numBytes,maxValue:u.mask.maxValue}:null,pixels:{numBlocksX:u.pixels.numBlocksX,numBlocksY:u.pixels.numBlocksY,numBytes:u.pixels.numBytes,maxValue:u.pixels.maxValue,noDataValue:u.noDataValue}}},a=function(u){for(var h=u.pixels.numBlocksX*u.pixels.numBlocksY,p={},g=0;g<h;g++){var f=u.pixels.blocks[g];f.encoding===0?p.float32=!0:f.encoding===1?p[f.bitsPerPixel]=!0:p[0]=!0}return Object.keys(p)},c=function(u,h,p){var g={},f=new Uint8Array(u,h,10);if(g.fileIdentifierString=String.fromCharCode.apply(null,f),g.fileIdentifierString.trim()!=="CntZImage")throw"Unexpected file identifier string: "+g.fileIdentifierString;h+=10;var y=new DataView(u,h,24);if(g.fileVersion=y.getInt32(0,!0),g.imageType=y.getInt32(4,!0),g.height=y.getUint32(8,!0),g.width=y.getUint32(12,!0),g.maxZError=y.getFloat64(16,!0),h+=24,!p)if(y=new DataView(u,h,16),g.mask={},g.mask.numBlocksY=y.getUint32(0,!0),g.mask.numBlocksX=y.getUint32(4,!0),g.mask.numBytes=y.getUint32(8,!0),g.mask.maxValue=y.getFloat32(12,!0),h+=16,g.mask.numBytes>0){var x=new Uint8Array(Math.ceil(g.width*g.height/8));y=new DataView(u,h,g.mask.numBytes);var S=y.getInt16(0,!0),C=2,V=0;do{if(S>0)for(;S--;)x[V++]=y.getUint8(C++);else{var L=y.getUint8(C++);for(S=-S;S--;)x[V++]=L}S=y.getInt16(C,!0),C+=2}while(C<g.mask.numBytes);if(S!==-32768||V<x.length)throw"Unexpected end of mask RLE encoding";g.mask.bitset=x,h+=g.mask.numBytes}else(g.mask.numBytes|g.mask.numBlocksY|g.mask.maxValue)===0&&(g.mask.bitset=new Uint8Array(Math.ceil(g.width*g.height/8)));y=new DataView(u,h,16),g.pixels={},g.pixels.numBlocksY=y.getUint32(0,!0),g.pixels.numBlocksX=y.getUint32(4,!0),g.pixels.numBytes=y.getUint32(8,!0),g.pixels.maxValue=y.getFloat32(12,!0),h+=16;var Z=g.pixels.numBlocksX,E=g.pixels.numBlocksY,P=Z+(g.width%Z>0?1:0),W=E+(g.height%E>0?1:0);g.pixels.blocks=new Array(P*W);for(var v=0,A=0;A<W;A++)for(var b=0;b<P;b++){var R=0,G=u.byteLength-h;y=new DataView(u,h,Math.min(10,G));var I={};g.pixels.blocks[v++]=I;var w=y.getUint8(0);if(R++,I.encoding=w&63,I.encoding>3)throw"Invalid block encoding ("+I.encoding+")";if(I.encoding===2){h++;continue}if(w!==0&&w!==2){if(w>>=6,I.offsetType=w,w===2)I.offset=y.getInt8(1),R++;else if(w===1)I.offset=y.getInt16(1,!0),R+=2;else if(w===0)I.offset=y.getFloat32(1,!0),R+=4;else throw"Invalid block offset type";if(I.encoding===1)if(w=y.getUint8(R),R++,I.bitsPerPixel=w&63,w>>=6,I.numValidPixelsType=w,w===2)I.numValidPixels=y.getUint8(R),R++;else if(w===1)I.numValidPixels=y.getUint16(R,!0),R+=2;else if(w===0)I.numValidPixels=y.getUint32(R,!0),R+=4;else throw"Invalid valid pixel count type"}if(h+=R,I.encoding!==3){var M,B;if(I.encoding===0){var k=(g.pixels.numBytes-1)/4;if(k!==Math.floor(k))throw"uncompressed block has invalid length";M=new ArrayBuffer(k*4),B=new Uint8Array(M),B.set(new Uint8Array(u,h,k*4));var O=new Float32Array(M);I.rawData=O,h+=k*4}else if(I.encoding===1){var N=Math.ceil(I.numValidPixels*I.bitsPerPixel/8),z=Math.ceil(N/4);M=new ArrayBuffer(z*4),B=new Uint8Array(M),B.set(new Uint8Array(u,h,N)),I.stuffedData=new Uint32Array(M),h+=N}}}return g.eofOffset=h,g},d=function(u,h,p,g,f,y,x){var S=(1<<h)-1,C=0,V,L=0,Z,E,P=Math.ceil((x-g)/f),W=u.length*4-Math.ceil(h*p/8);for(u[u.length-1]<<=8*W,V=0;V<p;V++){if(L===0&&(E=u[C++],L=32),L>=h)Z=E>>>L-h&S,L-=h;else{var v=h-L;Z=(E&S)<<v&S,E=u[C++],L=32-v,Z+=E>>>L}y[V]=Z<P?g+Z*f:x}return y};return o}(),t=function(){"use strict";var o={unstuff:function(c,d,u,h,p,g,f,y){var x=(1<<u)-1,S=0,C,V=0,L,Z,E,P,W=c.length*4-Math.ceil(u*h/8);if(c[c.length-1]<<=8*W,p)for(C=0;C<h;C++)V===0&&(Z=c[S++],V=32),V>=u?(L=Z>>>V-u&x,V-=u):(E=u-V,L=(Z&x)<<E&x,Z=c[S++],V=32-E,L+=Z>>>V),d[C]=p[L];else for(P=Math.ceil((y-g)/f),C=0;C<h;C++)V===0&&(Z=c[S++],V=32),V>=u?(L=Z>>>V-u&x,V-=u):(E=u-V,L=(Z&x)<<E&x,Z=c[S++],V=32-E,L+=Z>>>V),d[C]=L<P?g+L*f:y},unstuffLUT:function(c,d,u,h,p,g){var f=(1<<d)-1,y=0,x=0,S=0,C=0,V=0,L,Z=[],E=c.length*4-Math.ceil(d*u/8);c[c.length-1]<<=8*E;var P=Math.ceil((g-h)/p);for(x=0;x<u;x++)C===0&&(L=c[y++],C=32),C>=d?(V=L>>>C-d&f,C-=d):(S=d-C,V=(L&f)<<S&f,L=c[y++],C=32-S,V+=L>>>C),Z[x]=V<P?h+V*p:g;return Z.unshift(h),Z},unstuff2:function(c,d,u,h,p,g,f,y){var x=(1<<u)-1,S=0,C,V=0,L=0,Z,E,P;if(p)for(C=0;C<h;C++)V===0&&(E=c[S++],V=32,L=0),V>=u?(Z=E>>>L&x,V-=u,L+=u):(P=u-V,Z=E>>>L&x,E=c[S++],V=32-P,Z|=(E&(1<<P)-1)<<u-P,L=P),d[C]=p[Z];else{var W=Math.ceil((y-g)/f);for(C=0;C<h;C++)V===0&&(E=c[S++],V=32,L=0),V>=u?(Z=E>>>L&x,V-=u,L+=u):(P=u-V,Z=E>>>L&x,E=c[S++],V=32-P,Z|=(E&(1<<P)-1)<<u-P,L=P),d[C]=Z<W?g+Z*f:y}return d},unstuffLUT2:function(c,d,u,h,p,g){var f=(1<<d)-1,y=0,x=0,S=0,C=0,V=0,L=0,Z,E=[],P=Math.ceil((g-h)/p);for(x=0;x<u;x++)C===0&&(Z=c[y++],C=32,L=0),C>=d?(V=Z>>>L&f,C-=d,L+=d):(S=d-C,V=Z>>>L&f,Z=c[y++],C=32-S,V|=(Z&(1<<S)-1)<<d-S,L=S),E[x]=V<P?h+V*p:g;return E.unshift(h),E},originalUnstuff:function(c,d,u,h){var p=(1<<u)-1,g=0,f,y=0,x,S,C,V=c.length*4-Math.ceil(u*h/8);for(c[c.length-1]<<=8*V,f=0;f<h;f++)y===0&&(S=c[g++],y=32),y>=u?(x=S>>>y-u&p,y-=u):(C=u-y,x=(S&p)<<C&p,S=c[g++],y=32-C,x+=S>>>y),d[f]=x;return d},originalUnstuff2:function(c,d,u,h){var p=(1<<u)-1,g=0,f,y=0,x=0,S,C,V;for(f=0;f<h;f++)y===0&&(C=c[g++],y=32,x=0),y>=u?(S=C>>>x&p,y-=u,x+=u):(V=u-y,S=C>>>x&p,C=c[g++],y=32-V,S|=(C&(1<<V)-1)<<u-V,x=V),d[f]=S;return d}},r={HUFFMAN_LUT_BITS_MAX:12,computeChecksumFletcher32:function(c){for(var d=65535,u=65535,h=c.length,p=Math.floor(h/2),g=0;p;){var f=p>=359?359:p;p-=f;do d+=c[g++]<<8,u+=d+=c[g++];while(--f);d=(d&65535)+(d>>>16),u=(u&65535)+(u>>>16)}return h&1&&(u+=d+=c[g]<<8),d=(d&65535)+(d>>>16),u=(u&65535)+(u>>>16),(u<<16|d)>>>0},readHeaderInfo:function(c,d){var u=d.ptr,h=new Uint8Array(c,u,6),p={};if(p.fileIdentifierString=String.fromCharCode.apply(null,h),p.fileIdentifierString.lastIndexOf("Lerc2",0)!==0)throw"Unexpected file identifier string (expect Lerc2 ): "+p.fileIdentifierString;u+=6;var g=new DataView(c,u,8),f=g.getInt32(0,!0);p.fileVersion=f,u+=4,f>=3&&(p.checksum=g.getUint32(4,!0),u+=4),g=new DataView(c,u,12),p.height=g.getUint32(0,!0),p.width=g.getUint32(4,!0),u+=8,f>=4?(p.numDims=g.getUint32(8,!0),u+=4):p.numDims=1,g=new DataView(c,u,40),p.numValidPixel=g.getUint32(0,!0),p.microBlockSize=g.getInt32(4,!0),p.blobSize=g.getInt32(8,!0),p.imageType=g.getInt32(12,!0),p.maxZError=g.getFloat64(16,!0),p.zMin=g.getFloat64(24,!0),p.zMax=g.getFloat64(32,!0),u+=40,d.headerInfo=p,d.ptr=u;var y,x;if(f>=3&&(x=f>=4?52:48,y=this.computeChecksumFletcher32(new Uint8Array(c,u-x,p.blobSize-14)),y!==p.checksum))throw"Checksum failed.";return!0},checkMinMaxRanges:function(c,d){var u=d.headerInfo,h=this.getDataTypeArray(u.imageType),p=u.numDims*this.getDataTypeSize(u.imageType),g=this.readSubArray(c,d.ptr,h,p),f=this.readSubArray(c,d.ptr+p,h,p);d.ptr+=2*p;var y,x=!0;for(y=0;y<u.numDims;y++)if(g[y]!==f[y]){x=!1;break}return u.minValues=g,u.maxValues=f,x},readSubArray:function(c,d,u,h){var p;if(u===Uint8Array)p=new Uint8Array(c,d,h);else{var g=new ArrayBuffer(h),f=new Uint8Array(g);f.set(new Uint8Array(c,d,h)),p=new u(g)}return p},readMask:function(c,d){var u=d.ptr,h=d.headerInfo,p=h.width*h.height,g=h.numValidPixel,f=new DataView(c,u,4),y={};if(y.numBytes=f.getUint32(0,!0),u+=4,(g===0||p===g)&&y.numBytes!==0)throw"invalid mask";var x,S;if(g===0)x=new Uint8Array(Math.ceil(p/8)),y.bitset=x,S=new Uint8Array(p),d.pixels.resultMask=S,u+=y.numBytes;else if(y.numBytes>0){x=new Uint8Array(Math.ceil(p/8)),f=new DataView(c,u,y.numBytes);var C=f.getInt16(0,!0),V=2,L=0,Z=0;do{if(C>0)for(;C--;)x[L++]=f.getUint8(V++);else for(Z=f.getUint8(V++),C=-C;C--;)x[L++]=Z;C=f.getInt16(V,!0),V+=2}while(V<y.numBytes);if(C!==-32768||L<x.length)throw"Unexpected end of mask RLE encoding";S=new Uint8Array(p);var E=0,P=0;for(P=0;P<p;P++)P&7?(E=x[P>>3],E<<=P&7):E=x[P>>3],E&128&&(S[P]=1);d.pixels.resultMask=S,y.bitset=x,u+=y.numBytes}return d.ptr=u,d.mask=y,!0},readDataOneSweep:function(c,d,u){var h=d.ptr,p=d.headerInfo,g=p.numDims,f=p.width*p.height,y=p.imageType,x=p.numValidPixel*r.getDataTypeSize(y)*g,S,C=d.pixels.resultMask;if(u===Uint8Array)S=new Uint8Array(c,h,x);else{var V=new ArrayBuffer(x),L=new Uint8Array(V);L.set(new Uint8Array(c,h,x)),S=new u(V)}if(S.length===f*g)d.pixels.resultPixels=S;else{d.pixels.resultPixels=new u(f*g);var Z=0,E=0,P=0,W=0;if(g>1)for(P=0;P<g;P++)for(W=P*f,E=0;E<f;E++)C[E]&&(d.pixels.resultPixels[W+E]=S[Z++]);else for(E=0;E<f;E++)C[E]&&(d.pixels.resultPixels[E]=S[Z++])}return h+=x,d.ptr=h,!0},readHuffmanTree:function(c,d){var u=this.HUFFMAN_LUT_BITS_MAX,h=new DataView(c,d.ptr,16);d.ptr+=16;var p=h.getInt32(0,!0);if(p<2)throw"unsupported Huffman version";var g=h.getInt32(4,!0),f=h.getInt32(8,!0),y=h.getInt32(12,!0);if(f>=y)return!1;var x=new Uint32Array(y-f);r.decodeBits(c,d,x);var S=[],C,V,L,Z;for(C=f;C<y;C++)V=C-(C<g?0:g),S[V]={first:x[C-f],second:null};var E=c.byteLength-d.ptr,P=Math.ceil(E/4),W=new ArrayBuffer(P*4),v=new Uint8Array(W);v.set(new Uint8Array(c,d.ptr,E));var A=new Uint32Array(W),b=0,R,G=0;for(R=A[0],C=f;C<y;C++)V=C-(C<g?0:g),Z=S[V].first,Z>0&&(S[V].second=R<<b>>>32-Z,32-b>=Z?(b+=Z,b===32&&(b=0,G++,R=A[G])):(b+=Z-32,G++,R=A[G],S[V].second|=R>>>32-b));var I=0,w=0,M=new s;for(C=0;C<S.length;C++)S[C]!==void 0&&(I=Math.max(I,S[C].first));I>=u?w=u:w=I,I>=30&&console.log("WARning, large NUM LUT BITS IS "+I);var B=[],k,O,N,z,K,te;for(C=f;C<y;C++)if(V=C-(C<g?0:g),Z=S[V].first,Z>0)if(k=[Z,V],Z<=w)for(O=S[V].second<<w-Z,N=1<<w-Z,L=0;L<N;L++)B[O|L]=k;else for(O=S[V].second,te=M,z=Z-1;z>=0;z--)K=O>>>z&1,K?(te.right||(te.right=new s),te=te.right):(te.left||(te.left=new s),te=te.left),z===0&&!te.val&&(te.val=k[1]);return{decodeLut:B,numBitsLUTQick:w,numBitsLUT:I,tree:M,stuffedData:A,srcPtr:G,bitPos:b}},readHuffman:function(c,d,u){var h=d.headerInfo,p=h.numDims,g=d.headerInfo.height,f=d.headerInfo.width,y=f*g,x=this.readHuffmanTree(c,d),S=x.decodeLut,C=x.tree,V=x.stuffedData,L=x.srcPtr,Z=x.bitPos,E=x.numBitsLUTQick,P=x.numBitsLUT,W=d.headerInfo.imageType===0?128:0,v,A,b,R=d.pixels.resultMask,G,I,w,M,B,k,O,N=0;Z>0&&(L++,Z=0);var z=V[L],K=d.encodeMode===1,te=new u(y*p),H=te,j;for(j=0;j<h.numDims;j++){if(p>1&&(H=new u(te.buffer,y*j,y),N=0),d.headerInfo.numValidPixel===f*g)for(k=0,M=0;M<g;M++)for(B=0;B<f;B++,k++){if(A=0,G=z<<Z>>>32-E,I=G,32-Z<E&&(G|=V[L+1]>>>64-Z-E,I=G),S[I])A=S[I][1],Z+=S[I][0];else for(G=z<<Z>>>32-P,I=G,32-Z<P&&(G|=V[L+1]>>>64-Z-P,I=G),v=C,O=0;O<P;O++)if(w=G>>>P-O-1&1,v=w?v.right:v.left,!(v.left||v.right)){A=v.val,Z=Z+O+1;break}Z>=32&&(Z-=32,L++,z=V[L]),b=A-W,K?(B>0?b+=N:M>0?b+=H[k-f]:b+=N,b&=255,H[k]=b,N=b):H[k]=b}else for(k=0,M=0;M<g;M++)for(B=0;B<f;B++,k++)if(R[k]){if(A=0,G=z<<Z>>>32-E,I=G,32-Z<E&&(G|=V[L+1]>>>64-Z-E,I=G),S[I])A=S[I][1],Z+=S[I][0];else for(G=z<<Z>>>32-P,I=G,32-Z<P&&(G|=V[L+1]>>>64-Z-P,I=G),v=C,O=0;O<P;O++)if(w=G>>>P-O-1&1,v=w?v.right:v.left,!(v.left||v.right)){A=v.val,Z=Z+O+1;break}Z>=32&&(Z-=32,L++,z=V[L]),b=A-W,K?(B>0&&R[k-1]?b+=N:M>0&&R[k-f]?b+=H[k-f]:b+=N,b&=255,H[k]=b,N=b):H[k]=b}d.ptr=d.ptr+(L+1)*4+(Z>0?4:0)}d.pixels.resultPixels=te},decodeBits:function(c,d,u,h,p){{var g=d.headerInfo,f=g.fileVersion,y=0,x=new DataView(c,d.ptr,5),S=x.getUint8(0);y++;var C=S>>6,V=C===0?4:3-C,L=(S&32)>0,Z=S&31,E=0;if(V===1)E=x.getUint8(y),y++;else if(V===2)E=x.getUint16(y,!0),y+=2;else if(V===4)E=x.getUint32(y,!0),y+=4;else throw"Invalid valid pixel count type";var P=2*g.maxZError,W,v,A,b,R,G,I,w,M,B,k=g.numDims>1?g.maxValues[p]:g.zMax;if(L){for(d.counter.lut++,w=x.getUint8(y),M=Z,y++,b=Math.ceil((w-1)*Z/8),R=Math.ceil(b/4),v=new ArrayBuffer(R*4),A=new Uint8Array(v),d.ptr+=y,A.set(new Uint8Array(c,d.ptr,b)),I=new Uint32Array(v),d.ptr+=b,B=0;w-1>>>B;)B++;b=Math.ceil(E*B/8),R=Math.ceil(b/4),v=new ArrayBuffer(R*4),A=new Uint8Array(v),A.set(new Uint8Array(c,d.ptr,b)),W=new Uint32Array(v),d.ptr+=b,f>=3?G=o.unstuffLUT2(I,Z,w-1,h,P,k):G=o.unstuffLUT(I,Z,w-1,h,P,k),f>=3?o.unstuff2(W,u,B,E,G):o.unstuff(W,u,B,E,G)}else d.counter.bitstuffer++,B=Z,d.ptr+=y,B>0&&(b=Math.ceil(E*B/8),R=Math.ceil(b/4),v=new ArrayBuffer(R*4),A=new Uint8Array(v),A.set(new Uint8Array(c,d.ptr,b)),W=new Uint32Array(v),d.ptr+=b,f>=3?h==null?o.originalUnstuff2(W,u,B,E):o.unstuff2(W,u,B,E,!1,h,P,k):h==null?o.originalUnstuff(W,u,B,E):o.unstuff(W,u,B,E,!1,h,P,k))}},readTiles:function(c,d,u){var h=d.headerInfo,p=h.width,g=h.height,f=h.microBlockSize,y=h.imageType,x=r.getDataTypeSize(y),S=Math.ceil(p/f),C=Math.ceil(g/f);d.pixels.numBlocksY=C,d.pixels.numBlocksX=S,d.pixels.ptr=0;var V=0,L=0,Z=0,E=0,P=0,W=0,v=0,A=0,b=0,R=0,G=0,I=0,w=0,M=0,B=0,k=0,O,N,z,K,te,H,j=new u(f*f),ee=g%f||f,fe=p%f||f,Te,de,xe=h.numDims,Ce,Ie=d.pixels.resultMask,Le=d.pixels.resultPixels;for(Z=0;Z<C;Z++)for(P=Z!==C-1?f:ee,E=0;E<S;E++)for(W=E!==S-1?f:fe,G=Z*p*f+E*f,I=p-W,Ce=0;Ce<xe;Ce++){if(xe>1&&(Le=new u(d.pixels.resultPixels.buffer,p*g*Ce*x,p*g)),v=c.byteLength-d.ptr,O=new DataView(c,d.ptr,Math.min(10,v)),N={},k=0,A=O.getUint8(0),k++,b=A>>6&255,R=A>>2&15,R!==(E*f>>3&15))throw"integrity issue";if(H=A&3,H>3)throw d.ptr+=k,"Invalid block encoding ("+H+")";if(H===2){d.counter.constant++,d.ptr+=k;continue}else if(H===0){if(d.counter.uncompressed++,d.ptr+=k,w=P*W*x,M=c.byteLength-d.ptr,w=w<M?w:M,z=new ArrayBuffer(w%x===0?w:w+x-w%x),K=new Uint8Array(z),K.set(new Uint8Array(c,d.ptr,w)),te=new u(z),B=0,Ie)for(V=0;V<P;V++){for(L=0;L<W;L++)Ie[G]&&(Le[G]=te[B++]),G++;G+=I}else for(V=0;V<P;V++){for(L=0;L<W;L++)Le[G++]=te[B++];G+=I}d.ptr+=B*x}else if(Te=r.getDataTypeUsed(y,b),de=r.getOnePixel(N,k,Te,O),k+=r.getDataTypeSize(Te),H===3)if(d.ptr+=k,d.counter.constantoffset++,Ie)for(V=0;V<P;V++){for(L=0;L<W;L++)Ie[G]&&(Le[G]=de),G++;G+=I}else for(V=0;V<P;V++){for(L=0;L<W;L++)Le[G++]=de;G+=I}else if(d.ptr+=k,r.decodeBits(c,d,j,de,Ce),k=0,Ie)for(V=0;V<P;V++){for(L=0;L<W;L++)Ie[G]&&(Le[G]=j[k++]),G++;G+=I}else for(V=0;V<P;V++){for(L=0;L<W;L++)Le[G++]=j[k++];G+=I}}},formatFileInfo:function(c){return{fileIdentifierString:c.headerInfo.fileIdentifierString,fileVersion:c.headerInfo.fileVersion,imageType:c.headerInfo.imageType,height:c.headerInfo.height,width:c.headerInfo.width,numValidPixel:c.headerInfo.numValidPixel,microBlockSize:c.headerInfo.microBlockSize,blobSize:c.headerInfo.blobSize,maxZError:c.headerInfo.maxZError,pixelType:r.getPixelType(c.headerInfo.imageType),eofOffset:c.eofOffset,mask:c.mask?{numBytes:c.mask.numBytes}:null,pixels:{numBlocksX:c.pixels.numBlocksX,numBlocksY:c.pixels.numBlocksY,maxValue:c.headerInfo.zMax,minValue:c.headerInfo.zMin,noDataValue:c.noDataValue}}},constructConstantSurface:function(c){var d=c.headerInfo.zMax,u=c.headerInfo.numDims,h=c.headerInfo.height*c.headerInfo.width,p=h*u,g=0,f=0,y=0,x=c.pixels.resultMask;if(x)if(u>1)for(g=0;g<u;g++)for(y=g*h,f=0;f<h;f++)x[f]&&(c.pixels.resultPixels[y+f]=d);else for(f=0;f<h;f++)x[f]&&(c.pixels.resultPixels[f]=d);else if(c.pixels.resultPixels.fill)c.pixels.resultPixels.fill(d);else for(f=0;f<p;f++)c.pixels.resultPixels[f]=d},getDataTypeArray:function(c){var d;switch(c){case 0:d=Int8Array;break;case 1:d=Uint8Array;break;case 2:d=Int16Array;break;case 3:d=Uint16Array;break;case 4:d=Int32Array;break;case 5:d=Uint32Array;break;case 6:d=Float32Array;break;case 7:d=Float64Array;break;default:d=Float32Array}return d},getPixelType:function(c){var d;switch(c){case 0:d="S8";break;case 1:d="U8";break;case 2:d="S16";break;case 3:d="U16";break;case 4:d="S32";break;case 5:d="U32";break;case 6:d="F32";break;case 7:d="F64";break;default:d="F32"}return d},isValidPixelValue:function(c,d){if(d==null)return!1;var u;switch(c){case 0:u=d>=-128&&d<=127;break;case 1:u=d>=0&&d<=255;break;case 2:u=d>=-32768&&d<=32767;break;case 3:u=d>=0&&d<=65536;break;case 4:u=d>=-2147483648&&d<=2147483647;break;case 5:u=d>=0&&d<=4294967296;break;case 6:u=d>=-34027999387901484e22&&d<=34027999387901484e22;break;case 7:u=d>=5e-324&&d<=17976931348623157e292;break;default:u=!1}return u},getDataTypeSize:function(c){var d=0;switch(c){case 0:case 1:d=1;break;case 2:case 3:d=2;break;case 4:case 5:case 6:d=4;break;case 7:d=8;break;default:d=c}return d},getDataTypeUsed:function(c,d){var u=c;switch(c){case 2:case 4:u=c-d;break;case 3:case 5:u=c-2*d;break;case 6:d===0?u=c:d===1?u=2:u=1;break;case 7:d===0?u=c:u=c-2*d+1;break;default:u=c;break}return u},getOnePixel:function(c,d,u,h){var p=0;switch(u){case 0:p=h.getInt8(d);break;case 1:p=h.getUint8(d);break;case 2:p=h.getInt16(d,!0);break;case 3:p=h.getUint16(d,!0);break;case 4:p=h.getInt32(d,!0);break;case 5:p=h.getUInt32(d,!0);break;case 6:p=h.getFloat32(d,!0);break;case 7:p=h.getFloat64(d,!0);break;default:throw"the decoder does not understand this pixel type"}return p}},s=function(c,d,u){this.val=c,this.left=d,this.right=u},a={decode:function(c,d){d=d||{};var u=d.noDataValue,h=0,p={};if(p.ptr=d.inputOffset||0,p.pixels={},!!r.readHeaderInfo(c,p)){var g=p.headerInfo,f=g.fileVersion,y=r.getDataTypeArray(g.imageType);r.readMask(c,p),g.numValidPixel!==g.width*g.height&&!p.pixels.resultMask&&(p.pixels.resultMask=d.maskData);var x=g.width*g.height;if(p.pixels.resultPixels=new y(x*g.numDims),p.counter={onesweep:0,uncompressed:0,lut:0,bitstuffer:0,constant:0,constantoffset:0},g.numValidPixel!==0)if(g.zMax===g.zMin)r.constructConstantSurface(p);else if(f>=4&&r.checkMinMaxRanges(c,p))r.constructConstantSurface(p);else{var S=new DataView(c,p.ptr,2),C=S.getUint8(0);if(p.ptr++,C)r.readDataOneSweep(c,p,y);else if(f>1&&g.imageType<=1&&Math.abs(g.maxZError-.5)<1e-5){var V=S.getUint8(1);if(p.ptr++,p.encodeMode=V,V>2||f<4&&V>1)throw"Invalid Huffman flag "+V;V?r.readHuffman(c,p,y):r.readTiles(c,p,y)}else r.readTiles(c,p,y)}p.eofOffset=p.ptr;var L;d.inputOffset?(L=p.headerInfo.blobSize+d.inputOffset-p.ptr,Math.abs(L)>=1&&(p.eofOffset=d.inputOffset+p.headerInfo.blobSize)):(L=p.headerInfo.blobSize-p.ptr,Math.abs(L)>=1&&(p.eofOffset=p.headerInfo.blobSize));var Z={width:g.width,height:g.height,pixelData:p.pixels.resultPixels,minValue:g.zMin,maxValue:g.zMax,validPixelCount:g.numValidPixel,dimCount:g.numDims,dimStats:{minValues:g.minValues,maxValues:g.maxValues},maskData:p.pixels.resultMask};if(p.pixels.resultMask&&r.isValidPixelValue(g.imageType,u)){var E=p.pixels.resultMask;for(h=0;h<x;h++)E[h]||(Z.pixelData[h]=u);Z.noDataValue=u}return p.noDataValue=u,d.returnFileInfo&&(Z.fileInfo=r.formatFileInfo(p)),Z}},getBandCount:function(c){var d=0,u=0,h={};for(h.ptr=0,h.pixels={};u<c.byteLength-58;)r.readHeaderInfo(c,h),u+=h.headerInfo.blobSize,d++,h.ptr=u;return d}};return a}(),n=function(){var o=new ArrayBuffer(4),r=new Uint8Array(o),s=new Uint32Array(o);return s[0]=1,r[0]===1}(),i={decode:function(o,r){if(!n)throw"Big endian system is not supported.";r=r||{};var s=r.inputOffset||0,a=new Uint8Array(o,s,10),c=String.fromCharCode.apply(null,a),d,u;if(c.trim()==="CntZImage")d=e,u=1;else if(c.substring(0,5)==="Lerc2")d=t,u=2;else throw"Unexpected file identifier string: "+c;for(var h=0,p=o.byteLength-10,g,f=[],y,x,S={width:0,height:0,pixels:[],pixelType:r.pixelType,mask:null,statistics:[]};s<p;){var C=d.decode(o,{inputOffset:s,encodedMaskData:g,maskData:x,returnMask:h===0,returnEncodedMask:h===0,returnFileInfo:!0,pixelType:r.pixelType||null,noDataValue:r.noDataValue||null});s=C.fileInfo.eofOffset,h===0&&(g=C.encodedMaskData,x=C.maskData,S.width=C.width,S.height=C.height,S.dimCount=C.dimCount||1,S.pixelType=C.pixelType||C.fileInfo.pixelType,S.mask=C.maskData),u>1&&C.fileInfo.mask&&C.fileInfo.mask.numBytes>0&&f.push(C.maskData),h++,S.pixels.push(C.pixelData),S.statistics.push({minValue:C.minValue,maxValue:C.maxValue,noDataValue:C.noDataValue,dimStats:C.dimStats})}var V,L,Z;if(u>1&&f.length>1){for(Z=S.width*S.height,S.bandMasks=f,x=new Uint8Array(Z),x.set(f[0]),V=1;V<f.length;V++)for(y=f[V],L=0;L<Z;L++)x[L]=x[L]&y[L];S.maskData=x}return S}};typeof define=="function"&&define.amd?define([],function(){return i}):typeof dB<"u"&&dB.exports?dB.exports=i:this.Lerc=i})()});var OCe=ld((JZo,BCe)=>{var QZo=_(T());BCe.exports={webm:"data:video/webm;base64,GkXfowEAAAAAAAAfQoaBAUL3gQFC8oEEQvOBCEKChHdlYm1Ch4EEQoWBAhhTgGcBAAAAAAAVkhFNm3RALE27i1OrhBVJqWZTrIHfTbuMU6uEFlSua1OsggEwTbuMU6uEHFO7a1OsghV17AEAAAAAAACkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVSalmAQAAAAAAAEUq17GDD0JATYCNTGF2ZjU1LjMzLjEwMFdBjUxhdmY1NS4zMy4xMDBzpJBlrrXf3DCDVB8KcgbMpcr+RImIQJBgAAAAAAAWVK5rAQAAAAAAD++uAQAAAAAAADLXgQFzxYEBnIEAIrWcg3VuZIaFVl9WUDiDgQEj44OEAmJaAOABAAAAAAAABrCBsLqBkK4BAAAAAAAPq9eBAnPFgQKcgQAitZyDdW5khohBX1ZPUkJJU4OBAuEBAAAAAAAAEZ+BArWIQOdwAAAAAABiZIEgY6JPbwIeVgF2b3JiaXMAAAAAAoC7AAAAAAAAgLUBAAAAAAC4AQN2b3JiaXMtAAAAWGlwaC5PcmcgbGliVm9yYmlzIEkgMjAxMDExMDEgKFNjaGF1ZmVudWdnZXQpAQAAABUAAABlbmNvZGVyPUxhdmM1NS41Mi4xMDIBBXZvcmJpcyVCQ1YBAEAAACRzGCpGpXMWhBAaQlAZ4xxCzmvsGUJMEYIcMkxbyyVzkCGkoEKIWyiB0JBVAABAAACHQXgUhIpBCCGEJT1YkoMnPQghhIg5eBSEaUEIIYQQQgghhBBCCCGERTlokoMnQQgdhOMwOAyD5Tj4HIRFOVgQgydB6CCED0K4moOsOQghhCQ1SFCDBjnoHITCLCiKgsQwuBaEBDUojILkMMjUgwtCiJqDSTX4GoRnQXgWhGlBCCGEJEFIkIMGQcgYhEZBWJKDBjm4FITLQagahCo5CB+EIDRkFQCQAACgoiiKoigKEBqyCgDIAAAQQFEUx3EcyZEcybEcCwgNWQUAAAEACAAAoEiKpEiO5EiSJFmSJVmSJVmS5omqLMuyLMuyLMsyEBqyCgBIAABQUQxFcRQHCA1ZBQBkAAAIoDiKpViKpWiK54iOCISGrAIAgAAABAAAEDRDUzxHlETPVFXXtm3btm3btm3btm3btm1blmUZCA1ZBQBAAAAQ0mlmqQaIMAMZBkJDVgEACAAAgBGKMMSA0JBVAABAAACAGEoOogmtOd+c46BZDppKsTkdnEi1eZKbirk555xzzsnmnDHOOeecopxZDJoJrTnnnMSgWQqaCa0555wnsXnQmiqtOeeccc7pYJwRxjnnnCateZCajbU555wFrWmOmkuxOeecSLl5UptLtTnnnHPOOeecc84555zqxekcnBPOOeecqL25lpvQxTnnnE/G6d6cEM4555xzzjnnnHPOOeecIDRkFQAABABAEIaNYdwpCNLnaCBGEWIaMulB9+gwCRqDnELq0ehopJQ6CCWVcVJKJwgNWQUAAAIAQAghhRRSSCGFFFJIIYUUYoghhhhyyimnoIJKKqmooowyyyyzzDLLLLPMOuyssw47DDHEEEMrrcRSU2011lhr7jnnmoO0VlprrbVSSimllFIKQkNWAQAgAAAEQgYZZJBRSCGFFGKIKaeccgoqqIDQkFUAACAAgAAAAABP8hzRER3RER3RER3RER3R8RzPESVREiVREi3TMjXTU0VVdWXXlnVZt31b2IVd933d933d+HVhWJZlWZZlWZZlWZZlWZZlWZYgNGQVAAACAAAghBBCSCGFFFJIKcYYc8w56CSUEAgNWQUAAAIACAAAAHAUR3EcyZEcSbIkS9IkzdIsT/M0TxM9URRF0zRV0RVdUTdtUTZl0zVdUzZdVVZtV5ZtW7Z125dl2/d93/d93/d93/d93/d9XQdCQ1YBABIAADqSIymSIimS4ziOJElAaMgqAEAGAEAAAIriKI7jOJIkSZIlaZJneZaomZrpmZ4qqkBoyCoAABAAQAAAAAAAAIqmeIqpeIqoeI7oiJJomZaoqZoryqbsuq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq4LhIasAgAkAAB0JEdyJEdSJEVSJEdygNCQVQCADACAAAAcwzEkRXIsy9I0T/M0TxM90RM901NFV3SB0JBVAAAgAIAAAAAAAAAMybAUy9EcTRIl1VItVVMt1VJF1VNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVN0zRNEwgNWQkAkAEAkBBTLS3GmgmLJGLSaqugYwxS7KWxSCpntbfKMYUYtV4ah5RREHupJGOKQcwtpNApJq3WVEKFFKSYYyoVUg5SIDRkhQAQmgHgcBxAsixAsiwAAAAAAAAAkDQN0DwPsDQPAAAAAAAAACRNAyxPAzTPAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA0jRA8zxA8zwAAAAAAAAA0DwP8DwR8EQRAAAAAAAAACzPAzTRAzxRBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA0jRA8zxA8zwAAAAAAAAAsDwP8EQR0DwRAAAAAAAAACzPAzxRBDzRAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEOAAABBgIRQasiIAiBMAcEgSJAmSBM0DSJYFTYOmwTQBkmVB06BpME0AAAAAAAAAAAAAJE2DpkHTIIoASdOgadA0iCIAAAAAAAAAAAAAkqZB06BpEEWApGnQNGgaRBEAAAAAAAAAAAAAzzQhihBFmCbAM02IIkQRpgkAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAGHAAAAgwoQwUGrIiAIgTAHA4imUBAIDjOJYFAACO41gWAABYliWKAABgWZooAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAYcAAACDChDBQashIAiAIAcCiKZQHHsSzgOJYFJMmyAJYF0DyApgFEEQAIAAAocAAACLBBU2JxgEJDVgIAUQAABsWxLE0TRZKkaZoniiRJ0zxPFGma53meacLzPM80IYqiaJoQRVE0TZimaaoqME1VFQAAUOAAABBgg6bE4gCFhqwEAEICAByKYlma5nmeJ4qmqZokSdM8TxRF0TRNU1VJkqZ5niiKommapqqyLE3zPFEURdNUVVWFpnmeKIqiaaqq6sLzPE8URdE0VdV14XmeJ4qiaJqq6roQRVE0TdNUTVV1XSCKpmmaqqqqrgtETxRNU1Vd13WB54miaaqqq7ouEE3TVFVVdV1ZBpimaaqq68oyQFVV1XVdV5YBqqqqruu6sgxQVdd1XVmWZQCu67qyLMsCAAAOHAAAAoygk4wqi7DRhAsPQKEhKwKAKAAAwBimFFPKMCYhpBAaxiSEFEImJaXSUqogpFJSKRWEVEoqJaOUUmopVRBSKamUCkIqJZVSAADYgQMA2IGFUGjISgAgDwCAMEYpxhhzTiKkFGPOOScRUoox55yTSjHmnHPOSSkZc8w556SUzjnnnHNSSuacc845KaVzzjnnnJRSSuecc05KKSWEzkEnpZTSOeecEwAAVOAAABBgo8jmBCNBhYasBABSAQAMjmNZmuZ5omialiRpmud5niiapiZJmuZ5nieKqsnzPE8URdE0VZXneZ4oiqJpqirXFUXTNE1VVV2yLIqmaZqq6rowTdNUVdd1XZimaaqq67oubFtVVdV1ZRm2raqq6rqyDFzXdWXZloEsu67s2rIAAPAEBwCgAhtWRzgpGgssNGQlAJABAEAYg5BCCCFlEEIKIYSUUggJAAAYcAAACDChDBQashIASAUAAIyx1lprrbXWQGettdZaa62AzFprrbXWWmuttdZaa6211lJrrbXWWmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmstpZRSSimllFJKKaWUUkoppZRSSgUA+lU4APg/2LA6wknRWGChISsBgHAAAMAYpRhzDEIppVQIMeacdFRai7FCiDHnJKTUWmzFc85BKCGV1mIsnnMOQikpxVZjUSmEUlJKLbZYi0qho5JSSq3VWIwxqaTWWoutxmKMSSm01FqLMRYjbE2ptdhqq7EYY2sqLbQYY4zFCF9kbC2m2moNxggjWywt1VprMMYY3VuLpbaaizE++NpSLDHWXAAAd4MDAESCjTOsJJ0VjgYXGrISAAgJACAQUooxxhhzzjnnpFKMOeaccw5CCKFUijHGnHMOQgghlIwx5pxzEEIIIYRSSsaccxBCCCGEkFLqnHMQQgghhBBKKZ1zDkIIIYQQQimlgxBCCCGEEEoopaQUQgghhBBCCKmklEIIIYRSQighlZRSCCGEEEIpJaSUUgohhFJCCKGElFJKKYUQQgillJJSSimlEkoJJYQSUikppRRKCCGUUkpKKaVUSgmhhBJKKSWllFJKIYQQSikFAAAcOAAABBhBJxlVFmGjCRcegEJDVgIAZAAAkKKUUiktRYIipRikGEtGFXNQWoqocgxSzalSziDmJJaIMYSUk1Qy5hRCDELqHHVMKQYtlRhCxhik2HJLoXMOAAAAQQCAgJAAAAMEBTMAwOAA4XMQdAIERxsAgCBEZohEw0JweFAJEBFTAUBigkIuAFRYXKRdXECXAS7o4q4DIQQhCEEsDqCABByccMMTb3jCDU7QKSp1IAAAAAAADADwAACQXAAREdHMYWRobHB0eHyAhIiMkAgAAAAAABcAfAAAJCVAREQ0cxgZGhscHR4fICEiIyQBAIAAAgAAAAAggAAEBAQAAAAAAAIAAAAEBB9DtnUBAAAAAAAEPueBAKOFggAAgACjzoEAA4BwBwCdASqwAJAAAEcIhYWIhYSIAgIABhwJ7kPfbJyHvtk5D32ych77ZOQ99snIe+2TkPfbJyHvtk5D32ych77ZOQ99YAD+/6tQgKOFggADgAqjhYIAD4AOo4WCACSADqOZgQArADECAAEQEAAYABhYL/QACIBDmAYAAKOFggA6gA6jhYIAT4AOo5mBAFMAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAGSADqOFggB6gA6jmYEAewAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIAj4AOo5mBAKMAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAKSADqOFggC6gA6jmYEAywAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIAz4AOo4WCAOSADqOZgQDzADECAAEQEAAYABhYL/QACIBDmAYAAKOFggD6gA6jhYIBD4AOo5iBARsAEQIAARAQFGAAYWC/0AAiAQ5gGACjhYIBJIAOo4WCATqADqOZgQFDADECAAEQEAAYABhYL/QACIBDmAYAAKOFggFPgA6jhYIBZIAOo5mBAWsAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAXqADqOFggGPgA6jmYEBkwAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIBpIAOo4WCAbqADqOZgQG7ADECAAEQEAAYABhYL/QACIBDmAYAAKOFggHPgA6jmYEB4wAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIB5IAOo4WCAfqADqOZgQILADECAAEQEAAYABhYL/QACIBDmAYAAKOFggIPgA6jhYICJIAOo5mBAjMAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAjqADqOFggJPgA6jmYECWwAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYICZIAOo4WCAnqADqOZgQKDADECAAEQEAAYABhYL/QACIBDmAYAAKOFggKPgA6jhYICpIAOo5mBAqsAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCArqADqOFggLPgA6jmIEC0wARAgABEBAUYABhYL/QACIBDmAYAKOFggLkgA6jhYIC+oAOo5mBAvsAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCAw+ADqOZgQMjADECAAEQEAAYABhYL/QACIBDmAYAAKOFggMkgA6jhYIDOoAOo5mBA0sAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCA0+ADqOFggNkgA6jmYEDcwAxAgABEBAAGAAYWC/0AAiAQ5gGAACjhYIDeoAOo4WCA4+ADqOZgQObADECAAEQEAAYABhYL/QACIBDmAYAAKOFggOkgA6jhYIDuoAOo5mBA8MAMQIAARAQABgAGFgv9AAIgEOYBgAAo4WCA8+ADqOFggPkgA6jhYID+oAOo4WCBA+ADhxTu2sBAAAAAAAAEbuPs4EDt4r3gQHxghEr8IEK",mp4:"data:video/mp4;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAAAGF21kYXTeBAAAbGliZmFhYyAxLjI4AABCAJMgBDIARwAAArEGBf//rdxF6b3m2Ui3lizYINkj7u94MjY0IC0gY29yZSAxNDIgcjIgOTU2YzhkOCAtIEguMjY0L01QRUctNCBBVkMgY29kZWMgLSBDb3B5bGVmdCAyMDAzLTIwMTQgLSBodHRwOi8vd3d3LnZpZGVvbGFuLm9yZy94MjY0Lmh0bWwgLSBvcHRpb25zOiBjYWJhYz0wIHJlZj0zIGRlYmxvY2s9MTowOjAgYW5hbHlzZT0weDE6MHgxMTEgbWU9aGV4IHN1Ym1lPTcgcHN5PTEgcHN5X3JkPTEuMDA6MC4wMCBtaXhlZF9yZWY9MSBtZV9yYW5nZT0xNiBjaHJvbWFfbWU9MSB0cmVsbGlzPTEgOHg4ZGN0PTAgY3FtPTAgZGVhZHpvbmU9MjEsMTEgZmFzdF9wc2tpcD0xIGNocm9tYV9xcF9vZmZzZXQ9LTIgdGhyZWFkcz02IGxvb2thaGVhZF90aHJlYWRzPTEgc2xpY2VkX3RocmVhZHM9MCBucj0wIGRlY2ltYXRlPTEgaW50ZXJsYWNlZD0wIGJsdXJheV9jb21wYXQ9MCBjb25zdHJhaW5lZF9pbnRyYT0wIGJmcmFtZXM9MCB3ZWlnaHRwPTAga2V5aW50PTI1MCBrZXlpbnRfbWluPTI1IHNjZW5lY3V0PTQwIGludHJhX3JlZnJlc2g9MCByY19sb29rYWhlYWQ9NDAgcmM9Y3JmIG1idHJlZT0xIGNyZj0yMy4wIHFjb21wPTAuNjAgcXBtaW49MCBxcG1heD02OSBxcHN0ZXA9NCB2YnZfbWF4cmF0ZT03NjggdmJ2X2J1ZnNpemU9MzAwMCBjcmZfbWF4PTAuMCBuYWxfaHJkPW5vbmUgZmlsbGVyPTAgaXBfcmF0aW89MS40MCBhcT0xOjEuMDAAgAAAAFZliIQL8mKAAKvMnJycnJycnJycnXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXiEASZACGQAjgCEASZACGQAjgAAAAAdBmjgX4GSAIQBJkAIZACOAAAAAB0GaVAX4GSAhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZpgL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGagC/AySEASZACGQAjgAAAAAZBmqAvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZrAL8DJIQBJkAIZACOAAAAABkGa4C/AySEASZACGQAjgCEASZACGQAjgAAAAAZBmwAvwMkhAEmQAhkAI4AAAAAGQZsgL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGbQC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBm2AvwMkhAEmQAhkAI4AAAAAGQZuAL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGboC/AySEASZACGQAjgAAAAAZBm8AvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZvgL8DJIQBJkAIZACOAAAAABkGaAC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBmiAvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZpAL8DJIQBJkAIZACOAAAAABkGaYC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBmoAvwMkhAEmQAhkAI4AAAAAGQZqgL8DJIQBJkAIZACOAIQBJkAIZACOAAAAABkGawC/AySEASZACGQAjgAAAAAZBmuAvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZsAL8DJIQBJkAIZACOAAAAABkGbIC/AySEASZACGQAjgCEASZACGQAjgAAAAAZBm0AvwMkhAEmQAhkAI4AhAEmQAhkAI4AAAAAGQZtgL8DJIQBJkAIZACOAAAAABkGbgCvAySEASZACGQAjgCEASZACGQAjgAAAAAZBm6AnwMkhAEmQAhkAI4AhAEmQAhkAI4AhAEmQAhkAI4AhAEmQAhkAI4AAAAhubW9vdgAAAGxtdmhkAAAAAAAAAAAAAAAAAAAD6AAABDcAAQAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAzB0cmFrAAAAXHRraGQAAAADAAAAAAAAAAAAAAABAAAAAAAAA+kAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAALAAAACQAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAAPpAAAAAAABAAAAAAKobWRpYQAAACBtZGhkAAAAAAAAAAAAAAAAAAB1MAAAdU5VxAAAAAAALWhkbHIAAAAAAAAAAHZpZGUAAAAAAAAAAAAAAABWaWRlb0hhbmRsZXIAAAACU21pbmYAAAAUdm1oZAAAAAEAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAhNzdGJsAAAAr3N0c2QAAAAAAAAAAQAAAJ9hdmMxAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAALAAkABIAAAASAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGP//AAAALWF2Y0MBQsAN/+EAFWdCwA3ZAsTsBEAAAPpAADqYA8UKkgEABWjLg8sgAAAAHHV1aWRraEDyXyRPxbo5pRvPAyPzAAAAAAAAABhzdHRzAAAAAAAAAAEAAAAeAAAD6QAAABRzdHNzAAAAAAAAAAEAAAABAAAAHHN0c2MAAAAAAAAAAQAAAAEAAAABAAAAAQAAAIxzdHN6AAAAAAAAAAAAAAAeAAADDwAAAAsAAAALAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAAiHN0Y28AAAAAAAAAHgAAAEYAAANnAAADewAAA5gAAAO0AAADxwAAA+MAAAP2AAAEEgAABCUAAARBAAAEXQAABHAAAASMAAAEnwAABLsAAATOAAAE6gAABQYAAAUZAAAFNQAABUgAAAVkAAAFdwAABZMAAAWmAAAFwgAABd4AAAXxAAAGDQAABGh0cmFrAAAAXHRraGQAAAADAAAAAAAAAAAAAAACAAAAAAAABDcAAAAAAAAAAAAAAAEBAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAAQkAAADcAABAAAAAAPgbWRpYQAAACBtZGhkAAAAAAAAAAAAAAAAAAC7gAAAykBVxAAAAAAALWhkbHIAAAAAAAAAAHNvdW4AAAAAAAAAAAAAAABTb3VuZEhhbmRsZXIAAAADi21pbmYAAAAQc21oZAAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAADT3N0YmwAAABnc3RzZAAAAAAAAAABAAAAV21wNGEAAAAAAAAAAQAAAAAAAAAAAAIAEAAAAAC7gAAAAAAAM2VzZHMAAAAAA4CAgCIAAgAEgICAFEAVBbjYAAu4AAAADcoFgICAAhGQBoCAgAECAAAAIHN0dHMAAAAAAAAAAgAAADIAAAQAAAAAAQAAAkAAAAFUc3RzYwAAAAAAAAAbAAAAAQAAAAEAAAABAAAAAgAAAAIAAAABAAAAAwAAAAEAAAABAAAABAAAAAIAAAABAAAABgAAAAEAAAABAAAABwAAAAIAAAABAAAACAAAAAEAAAABAAAACQAAAAIAAAABAAAACgAAAAEAAAABAAAACwAAAAIAAAABAAAADQAAAAEAAAABAAAADgAAAAIAAAABAAAADwAAAAEAAAABAAAAEAAAAAIAAAABAAAAEQAAAAEAAAABAAAAEgAAAAIAAAABAAAAFAAAAAEAAAABAAAAFQAAAAIAAAABAAAAFgAAAAEAAAABAAAAFwAAAAIAAAABAAAAGAAAAAEAAAABAAAAGQAAAAIAAAABAAAAGgAAAAEAAAABAAAAGwAAAAIAAAABAAAAHQAAAAEAAAABAAAAHgAAAAIAAAABAAAAHwAAAAQAAAABAAAA4HN0c3oAAAAAAAAAAAAAADMAAAAaAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAACMc3RjbwAAAAAAAAAfAAAALAAAA1UAAANyAAADhgAAA6IAAAO+AAAD0QAAA+0AAAQAAAAEHAAABC8AAARLAAAEZwAABHoAAASWAAAEqQAABMUAAATYAAAE9AAABRAAAAUjAAAFPwAABVIAAAVuAAAFgQAABZ0AAAWwAAAFzAAABegAAAX7AAAGFwAAAGJ1ZHRhAAAAWm1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAALWlsc3QAAAAlqXRvbwAAAB1kYXRhAAAAAQAAAABMYXZmNTUuMzMuMTAw"}});var zCe=ld((jZo,YCe)=>{var qZo=_(T()),{webm:sVt,mp4:aVt}=OCe(),oq=()=>typeof navigator<"u"&&parseFloat((""+(/CPU.*OS ([0-9_]{3,4})[0-9_]{0,1}|(CPU like).*AppleWebKit.*Mobile/i.exec(navigator.userAgent)||[0,""])[1]).replace("undefined","3_2").replace("_",".").replace("_",""))<10&&!window.MSStream,rq=()=>"wakeLock"in navigator,sq=class{constructor(){if(this.enabled=!1,rq()){this._wakeLock=null;let t=()=>{this._wakeLock!==null&&document.visibilityState==="visible"&&this.enable()};document.addEventListener("visibilitychange",t),document.addEventListener("fullscreenchange",t)}else oq()?this.noSleepTimer=null:(this.noSleepVideo=document.createElement("video"),this.noSleepVideo.setAttribute("title","No Sleep"),this.noSleepVideo.setAttribute("playsinline",""),this._addSourceToVideo(this.noSleepVideo,"webm",sVt),this._addSourceToVideo(this.noSleepVideo,"mp4",aVt),this.noSleepVideo.addEventListener("loadedmetadata",()=>{this.noSleepVideo.duration<=1?this.noSleepVideo.setAttribute("loop",""):this.noSleepVideo.addEventListener("timeupdate",()=>{this.noSleepVideo.currentTime>.5&&(this.noSleepVideo.currentTime=Math.random())})}))}_addSourceToVideo(t,n,i){var o=document.createElement("source");o.src=i,o.type=`video/${n}`,t.appendChild(o)}get isEnabled(){return this.enabled}enable(){return rq()?navigator.wakeLock.request("screen").then(t=>{this._wakeLock=t,this.enabled=!0,console.log("Wake Lock active."),this._wakeLock.addEventListener("release",()=>{console.log("Wake Lock released.")})}).catch(t=>{throw this.enabled=!1,console.error(`${t.name}, ${t.message}`),t}):oq()?(this.disable(),console.warn(` NoSleep enabled for older iOS devices. This can interrupt active or long-running network requests from completing successfully. See https://github.com/richtr/NoSleep.js/issues/15 for more details. `),this.noSleepTimer=window.setInterval(()=>{document.hidden||(window.location.href=window.location.href.split("#")[0],window.setTimeout(window.stop,0))},15e3),this.enabled=!0,Promise.resolve()):this.noSleepVideo.play().then(n=>(this.enabled=!0,n)).catch(n=>{throw this.enabled=!1,n})}disable(){rq()?(this._wakeLock&&this._wakeLock.release(),this._wakeLock=null):oq()?this.noSleepTimer&&(console.warn(` NoSleep now disabled for older iOS devices. `),window.clearInterval(this.noSleepTimer),this.noSleepTimer=null):this.noSleepVideo.pause(),this.enabled=!1}};YCe.exports=sq});var IVt={};s1e(IVt,{AlphaMode:()=>Tf,AlphaPipelineStage:()=>VW,AnchorPointDirect:()=>GX,AnchorPointIndirect:()=>EX,Animation:()=>dM,AnimationViewModel:()=>uM,Appearance:()=>no,ApproximateTerrainHeights:()=>di,ArcGISTiledElevationTerrainProvider:()=>$8,ArcGisBaseMapType:()=>Ah,ArcGisMapServerImageryProvider:()=>l0,ArcGisMapService:()=>jd,ArcType:()=>en,ArticulationStageType:()=>bc,AssociativeArray:()=>Gt,Atmosphere:()=>S_,AtmospherePipelineStage:()=>oW,AttributeCompression:()=>wn,AttributeType:()=>on,AutoExposure:()=>c9,AutomaticUniforms:()=>xp,Axis:()=>Po,AxisAlignedBoundingBox:()=>K0,B3dmLoader:()=>DX,B3dmParser:()=>NX,BaseLayerPicker:()=>gM,BaseLayerPickerViewModel:()=>bM,BatchTable:()=>Ex,BatchTableHierarchy:()=>$x,BatchTexture:()=>$c,BatchTexturePipelineStage:()=>LW,Billboard:()=>lo,BillboardCollection:()=>Ed,BillboardGraphics:()=>ac,BillboardLoadState:()=>ns,BillboardTexture:()=>xb,BillboardVisualizer:()=>mE,BingMapsGeocoderService:()=>t7,BingMapsImageryProvider:()=>Gw,BingMapsStyle:()=>kV,BlendEquation:()=>va,BlendFunction:()=>Co,BlendOption:()=>Lo,BlendingState:()=>un,BoundingRectangle:()=>Ke,BoundingSphere:()=>le,BoundingSphereState:()=>dt,BoundingVolumeSemantics:()=>g_,BoxEmitter:()=>z7,BoxGeometry:()=>Wa,BoxGeometryUpdater:()=>VI,BoxGraphics:()=>Ax,BoxOutlineGeometry:()=>Fm,BrdfLutGenerator:()=>aF,Buffer:()=>xt,BufferLoader:()=>r_,BufferUsage:()=>Me,CPUStylingPipelineStage:()=>EW,CallbackPositionProperty:()=>LI,CallbackProperty:()=>Dm,Camera:()=>ro,CameraEventAggregator:()=>p9,CameraEventType:()=>Ai,CameraFlightPath:()=>lF,Cartesian2:()=>U,Cartesian3:()=>m,Cartesian4:()=>se,Cartographic:()=>he,CartographicGeocoderService:()=>i7,CatmullRomSpline:()=>o7,Cesium3DContentGroup:()=>qx,Cesium3DTile:()=>Ju,Cesium3DTileBatchTable:()=>Hp,Cesium3DTileColorBlendMode:()=>vl,Cesium3DTileContent:()=>H7,Cesium3DTileContentFactory:()=>A_,Cesium3DTileContentState:()=>Bo,Cesium3DTileContentType:()=>Zs,Cesium3DTileFeature:()=>Bs,Cesium3DTileFeatureTable:()=>ih,Cesium3DTileOptimizationHint:()=>Ou,Cesium3DTileOptimizations:()=>u2,Cesium3DTilePass:()=>wo,Cesium3DTilePassState:()=>pm,Cesium3DTilePointFeature:()=>_b,Cesium3DTileRefine:()=>Uo,Cesium3DTileStyle:()=>RS,Cesium3DTileStyleEngine:()=>g2,Cesium3DTilesInspector:()=>pM,Cesium3DTilesInspectorViewModel:()=>fM,Cesium3DTilesVoxelProvider:()=>K7,Cesium3DTileset:()=>bs,Cesium3DTilesetBaseTraversal:()=>C2,Cesium3DTilesetCache:()=>f2,Cesium3DTilesetGraphics:()=>Ox,Cesium3DTilesetHeatmap:()=>p2,Cesium3DTilesetMetadata:()=>H_,Cesium3DTilesetMostDetailedTraversal:()=>_2,Cesium3DTilesetSkipTraversal:()=>R2,Cesium3DTilesetStatistics:()=>fh,Cesium3DTilesetTraversal:()=>Js,Cesium3DTilesetVisualizer:()=>Z2,CesiumInspector:()=>SM,CesiumInspectorViewModel:()=>TM,CesiumTerrainProvider:()=>xS,CesiumWidget:()=>bA,Check:()=>yo,CheckerboardMaterialProperty:()=>R1,CircleEmitter:()=>wA,CircleGeometry:()=>d7,CircleOutlineGeometry:()=>u7,ClassificationModelDrawCommand:()=>TP,ClassificationPipelineStage:()=>RW,ClassificationPrimitive:()=>hC,ClassificationType:()=>Un,ClearCommand:()=>ti,ClippingPlane:()=>y_,ClippingPlaneCollection:()=>fs,ClippingPolygon:()=>DC,ClippingPolygonCollection:()=>qm,Clock:()=>xh,ClockRange:()=>Or,ClockStep:()=>fo,ClockViewModel:()=>sM,CloudCollection:()=>e6,CloudType:()=>vL,Color:()=>D,ColorBlendMode:()=>pc,ColorGeometryInstanceAttribute:()=>Yt,ColorMaterialProperty:()=>Dt,Command:()=>O6,ComponentDatatype:()=>Q,Composite3DTileContent:()=>vI,CompositeEntityCollection:()=>EK,CompositeMaterialProperty:()=>G1,CompositePositionProperty:()=>ya,CompositeProperty:()=>Tc,CompressedTextureBuffer:()=>mR,ComputeCommand:()=>Fc,ComputeEngine:()=>uR,ConditionsExpression:()=>XA,ConeEmitter:()=>n6,ConstantPositionProperty:()=>Oc,ConstantProperty:()=>Qn,ConstantSpline:()=>zX,ContentMetadata:()=>n2,Context:()=>oE,ContextLimits:()=>Nt,CoplanarPolygonGeometry:()=>uv,CoplanarPolygonGeometryLibrary:()=>Eb,CoplanarPolygonOutlineGeometry:()=>Ku,CornerType:()=>vi,CorrelationGroup:()=>IX,CorridorGeometry:()=>$_,CorridorGeometryLibrary:()=>Bi,CorridorGeometryUpdater:()=>F2,CorridorGraphics:()=>Nx,CorridorOutlineGeometry:()=>w2,Credit:()=>Ct,CreditDisplay:()=>hF,CubeMap:()=>xr,CubeMapFace:()=>SR,CubicRealPolynomial:()=>fx,CullFace:()=>Ti,CullingVolume:()=>hs,CumulusCloud:()=>lu,CustomDataSource:()=>D2,CustomHeightmapTerrainProvider:()=>m7,CustomShader:()=>aS,CustomShaderMode:()=>bb,CustomShaderPipelineStage:()=>FW,CustomShaderTranslucencyMode:()=>Ig,CylinderGeometry:()=>B2,CylinderGeometryLibrary:()=>eT,CylinderGeometryUpdater:()=>Y2,CylinderGraphics:()=>kx,CylinderOutlineGeometry:()=>O2,CzmlDataSource:()=>tv,DataSource:()=>Br,DataSourceClock:()=>_h,DataSourceCollection:()=>nv,DataSourceDisplay:()=>kv,DebugAppearance:()=>i6,DebugCameraPrimitive:()=>ip,DebugInspector:()=>C9,DebugModelMatrixPrimitive:()=>AA,DefaultProxy:()=>h7,DepthFunction:()=>cc,DepthPlane:()=>TF,DequantizationPipelineStage:()=>MW,DerivedCommand:()=>op,DeveloperError:()=>pe,DeviceOrientationCameraController:()=>SF,DirectionalLight:()=>o6,DiscardEmptyTileImagePolicy:()=>UV,DiscardMissingTileImagePolicy:()=>Rw,DistanceDisplayCondition:()=>wt,DistanceDisplayConditionGeometryInstanceAttribute:()=>kn,DoubleEndedPriorityQueue:()=>uS,DoublyLinkedList:()=>h2,DracoLoader:()=>eb,DrawCommand:()=>$e,DynamicAtmosphereLightingType:()=>rb,DynamicEnvironmentMapManager:()=>sb,DynamicGeometryBatch:()=>aT,DynamicGeometryUpdater:()=>ii,EarthOrientationParameters:()=>iR,EarthOrientationParametersSample:()=>P0,EasingFunction:()=>zr,EllipseGeometry:()=>dl,EllipseGeometryLibrary:()=>Hl,EllipseGeometryUpdater:()=>ov,EllipseGraphics:()=>Ux,EllipseOutlineGeometry:()=>kd,Ellipsoid:()=>ne,EllipsoidGeodesic:()=>Fp,EllipsoidGeometry:()=>js,EllipsoidGeometryUpdater:()=>sv,EllipsoidGraphics:()=>Dx,EllipsoidOutlineGeometry:()=>Wd,EllipsoidPrimitive:()=>tF,EllipsoidRhumbLine:()=>wa,EllipsoidSurfaceAppearance:()=>r6,EllipsoidTangentPlane:()=>Qr,EllipsoidTerrainProvider:()=>$f,EllipsoidalOccluder:()=>kb,Empty3DTileContent:()=>h1,EncodedCartesian3:()=>On,Entity:()=>jo,EntityCluster:()=>vd,EntityCollection:()=>Qs,EntityView:()=>Dv,Event:()=>be,EventHelper:()=>dr,Expression:()=>Wu,ExpressionNodeType:()=>gt,ExtrapolationType:()=>Fd,FeatureDetection:()=>Bt,FeatureIdPipelineStage:()=>Eg,Fog:()=>CF,ForEach:()=>We,FrameRateMonitor:()=>kA,FrameState:()=>VF,Framebuffer:()=>Wr,FramebufferManager:()=>fi,Frozen:()=>Y,FrustumCommands:()=>EF,FrustumGeometry:()=>kT,FrustumOutlineGeometry:()=>bF,Fullscreen:()=>br,FullscreenButton:()=>VM,FullscreenButtonViewModel:()=>CM,GeoJsonDataSource:()=>cy,GeoJsonLoader:()=>BX,GeocodeType:()=>Dy,Geocoder:()=>RM,GeocoderService:()=>EL,GeocoderViewModel:()=>LM,GeographicProjection:()=>Ei,GeographicTilingScheme:()=>Hi,Geometry:()=>lt,Geometry3DTileContent:()=>AI,GeometryAttribute:()=>Ge,GeometryAttributes:()=>mn,GeometryFactory:()=>f7,GeometryInstance:()=>Et,GeometryInstanceAttribute:()=>lc,GeometryOffsetAttribute:()=>rn,GeometryPipeline:()=>Fn,GeometryPipelineStage:()=>DW,GeometryType:()=>xu,GeometryUpdater:()=>oi,GeometryUpdaterSet:()=>yT,GeometryVisualizer:()=>Gv,GetFeatureInfoFormat:()=>FT,Globe:()=>jw,GlobeDepth:()=>IF,GlobeSurfaceShaderSet:()=>Lw,GlobeSurfaceTile:()=>mm,GlobeSurfaceTileProvider:()=>Uw,GlobeTranslucency:()=>Dw,GlobeTranslucencyFramebuffer:()=>XF,GlobeTranslucencyState:()=>LF,GltfBufferViewLoader:()=>RC,GltfDracoLoader:()=>ZC,GltfGpmLoader:()=>WX,GltfGpmLocal:()=>OC,GltfImageLoader:()=>GC,GltfIndexBufferLoader:()=>EC,GltfJsonLoader:()=>XC,GltfLoader:()=>nh,GltfLoaderUtil:()=>Al,GltfMeshPrimitiveGpmLoader:()=>FX,GltfStructuralMetadataLoader:()=>RX,GltfTextureLoader:()=>WC,GltfVertexBufferLoader:()=>PC,GoogleEarthEnterpriseImageryProvider:()=>a6,GoogleEarthEnterpriseMapsProvider:()=>Xw,GoogleEarthEnterpriseMetadata:()=>Z0,GoogleEarthEnterpriseTerrainData:()=>IL,GoogleEarthEnterpriseTerrainProvider:()=>S7,GoogleEarthEnterpriseTileInformation:()=>VA,GoogleGeocoderService:()=>V7,GoogleMaps:()=>TS,GpxDataSource:()=>Kv,GregorianDate:()=>Tp,GridImageryProvider:()=>c6,GridMaterialProperty:()=>M1,GroundGeometryUpdater:()=>Yn,GroundPolylineGeometry:()=>Px,GroundPolylinePrimitive:()=>Am,GroundPrimitive:()=>Dc,GroupMetadata:()=>C1,HeadingPitchRange:()=>sm,HeadingPitchRoll:()=>Ea,Heap:()=>$L,HeightReference:()=>Je,HeightmapEncoding:()=>lm,HeightmapTerrainData:()=>Oa,HeightmapTessellator:()=>wV,HermitePolynomialApproximation:()=>z2,HermiteSpline:()=>Rg,HilbertOrder:()=>SC,HomeButton:()=>GM,HomeButtonViewModel:()=>ZM,HorizontalOrigin:()=>_i,I3SBuildingSceneLayerExplorer:()=>$6,I3SBuildingSceneLayerExplorerViewModel:()=>EM,I3SDataProvider:()=>Qh,I3SDecoder:()=>UA,I3SFeature:()=>DA,I3SField:()=>BA,I3SGeometry:()=>wL,I3SLayer:()=>XS,I3SNode:()=>FL,I3SStatistics:()=>zA,I3SSublayer:()=>KA,I3SSymbology:()=>YA,I3dmLoader:()=>YX,I3dmParser:()=>OX,ITwinData:()=>m6,ITwinPlatform:()=>As,Iau2000Orientation:()=>$w,Iau2006XysData:()=>oR,Iau2006XysSample:()=>dx,IauOrientationAxes:()=>eF,IauOrientationParameters:()=>qw,ImageBasedLighting:()=>jx,ImageBasedLightingPipelineStage:()=>sW,ImageMaterialProperty:()=>q0,Imagery:()=>HV,ImageryLayer:()=>za,ImageryLayerCollection:()=>Bw,ImageryLayerFeatureInfo:()=>Fh,ImageryProvider:()=>pl,ImageryState:()=>ci,Implicit3DTileContent:()=>FC,ImplicitAvailabilityBitstream:()=>VC,ImplicitMetadataView:()=>LC,ImplicitSubdivisionScheme:()=>$r,ImplicitSubtree:()=>p_,ImplicitSubtreeCache:()=>PA,ImplicitSubtreeMetadata:()=>MI,ImplicitTileCoordinates:()=>Q_,ImplicitTileset:()=>J_,IndexDatatype:()=>Ae,InfoBox:()=>PM,InfoBoxViewModel:()=>WM,InspectorShared:()=>Ja,InstanceAttributeSemantic:()=>ts,InstancingPipelineStage:()=>_W,InterpolationAlgorithm:()=>L7,InterpolationType:()=>eh,Intersect:()=>zt,IntersectionTests:()=>qn,Intersections2D:()=>L0,Interval:()=>Xa,InvertClassification:()=>sL,Ion:()=>Ym,IonGeocodeProviderType:()=>G0,IonGeocoderService:()=>SS,IonImageryProvider:()=>d0,IonResource:()=>_d,IonWorldImageryStyle:()=>u0,Iso8601:()=>Be,JobScheduler:()=>RF,JobType:()=>Ma,JsonMetadataTable:()=>ab,JulianDate:()=>q,KTX2Transcoder:()=>hR,KeyboardEventModifier:()=>ra,KeyframeNode:()=>bo,KmlCamera:()=>Jv,KmlDataSource:()=>GT,KmlLookAt:()=>fw,KmlTour:()=>pw,KmlTourFlyTo:()=>gw,KmlTourWait:()=>yw,Label:()=>wg,LabelCollection:()=>Zf,LabelGraphics:()=>Nm,LabelStyle:()=>Do,LabelVisualizer:()=>Ev,LagrangePolynomialApproximation:()=>H2,LeapSecond:()=>Yi,Light:()=>h6,LightingModel:()=>Vf,LightingPipelineStage:()=>OW,LinearApproximation:()=>nT,LinearSpline:()=>Lg,ManagedArray:()=>qc,MapMode2D:()=>nd,MapProjection:()=>G7,MapboxImageryProvider:()=>Ww,MapboxStyleImageryProvider:()=>f6,Material:()=>zi,MaterialAppearance:()=>ao,MaterialPipelineStage:()=>zW,MaterialProperty:()=>Qo,Math:()=>X,Matrix2:()=>Ii,Matrix3:()=>$,Matrix4:()=>F,Megatexture:()=>pL,MeshPrimitiveGpmLocal:()=>wX,MetadataClass:()=>Jm,MetadataClassProperty:()=>yf,MetadataComponentType:()=>Ft,MetadataEntity:()=>Nn,MetadataEnum:()=>oX,MetadataEnumValue:()=>iX,MetadataPicking:()=>ZF,MetadataPickingPipelineStage:()=>Rd,MetadataPipelineStage:()=>Au,MetadataSchema:()=>Vd,MetadataSchemaLoader:()=>vC,MetadataSemantic:()=>b_,MetadataTable:()=>Pu,MetadataTableProperty:()=>kI,MetadataType:()=>ct,MipmapHint:()=>df,Model:()=>sh,Model3DTileContent:()=>Gd,ModelAlphaOptions:()=>dP,ModelAnimation:()=>QX,ModelAnimationChannel:()=>JX,ModelAnimationCollection:()=>jX,ModelAnimationLoop:()=>Nl,ModelAnimationState:()=>oh,ModelArticulation:()=>cW,ModelArticulationStage:()=>aW,ModelClippingPlanesPipelineStage:()=>uW,ModelClippingPolygonsPipelineStage:()=>fW,ModelColorPipelineStage:()=>Gg,ModelComponents:()=>Tn,ModelDrawCommand:()=>SP,ModelDrawCommands:()=>LP,ModelFeature:()=>qX,ModelFeatureTable:()=>eW,ModelGraphics:()=>Up,ModelLightingOptions:()=>yP,ModelMatrixUpdateStage:()=>TW,ModelNode:()=>pW,ModelRenderResources:()=>uP,ModelRuntimeNode:()=>CW,ModelRuntimePrimitive:()=>cP,ModelSceneGraph:()=>RP,ModelSilhouettePipelineStage:()=>fP,ModelSkin:()=>lP,ModelSplitterPipelineStage:()=>bP,ModelStatistics:()=>ZP,ModelType:()=>cr,ModelUtility:()=>Qt,ModelVisualizer:()=>Iv,Moon:()=>iF,MorphTargetsPipelineStage:()=>KW,MorphWeightSpline:()=>E7,MortonOrder:()=>Ug,Multiple3DTileContent:()=>r2,MultisampleFramebuffer:()=>rE,NavigationHelpButton:()=>XM,NavigationHelpButtonViewModel:()=>IM,NearFarScalar:()=>kt,NeverTileDiscardPolicy:()=>b6,NodeRenderResources:()=>gP,NodeStatisticsPipelineStage:()=>SW,NodeTransformationProperty:()=>Bx,OIT:()=>PF,Occluder:()=>oF,OffsetGeometryInstanceAttribute:()=>$i,OpenCageGeocoderService:()=>X7,OpenStreetMapImageryProvider:()=>I0,OrderedGroundPrimitiveCollection:()=>iv,OrientedBoundingBox:()=>En,OrthographicFrustum:()=>an,OrthographicOffCenterFrustum:()=>Pr,Packable:()=>W7,PackableForInterpolation:()=>P7,Particle:()=>NL,ParticleBurst:()=>y6,ParticleEmitter:()=>x6,ParticleSystem:()=>_6,Pass:()=>Ee,PassState:()=>sc,PathGraphics:()=>Dp,PathVisualizer:()=>Wv,PeliasGeocoderService:()=>RA,PerInstanceColorAppearance:()=>dn,PerformanceDisplay:()=>p0,PerformanceWatchdog:()=>wM,PerformanceWatchdogViewModel:()=>vM,PerspectiveFrustum:()=>Gi,PerspectiveOffCenterFrustum:()=>bl,PickDepth:()=>GF,PickDepthFramebuffer:()=>wF,PickFramebuffer:()=>AF,PickedMetadataInfo:()=>j9,Picking:()=>DF,PickingPipelineStage:()=>JW,PinBuilder:()=>t0,PixelDatatype:()=>je,PixelFormat:()=>it,Plane:()=>sn,PlaneGeometry:()=>av,PlaneGeometryUpdater:()=>lv,PlaneGraphics:()=>gI,PlaneOutlineGeometry:()=>cv,PntsLoader:()=>EP,PntsParser:()=>I_,PointCloud:()=>fA,PointCloudEyeDomeLighting:()=>lb,PointCloudShading:()=>Cf,PointCloudStylingPipelineStage:()=>jW,PointGraphics:()=>Yx,PointPrimitive:()=>Es,PointPrimitiveCollection:()=>P1,PointVisualizer:()=>vv,PolygonGeometry:()=>ob,PolygonGeometryLibrary:()=>Bn,PolygonGeometryUpdater:()=>hv,PolygonGraphics:()=>km,PolygonHierarchy:()=>Fa,PolygonOutlineGeometry:()=>mv,PolygonPipeline:()=>ai,Polyline:()=>Uu,PolylineArrowMaterialProperty:()=>k1,PolylineCollection:()=>lh,PolylineColorAppearance:()=>jr,PolylineDashMaterialProperty:()=>D1,PolylineGeometry:()=>e0,PolylineGeometryUpdater:()=>Av,PolylineGlowMaterialProperty:()=>O1,PolylineGraphics:()=>dc,PolylineMaterialAppearance:()=>ha,PolylineOutlineMaterialProperty:()=>Jg,PolylinePipeline:()=>Pi,PolylineVisualizer:()=>Nv,PolylineVolumeGeometry:()=>bv,PolylineVolumeGeometryLibrary:()=>ph,PolylineVolumeGeometryUpdater:()=>_v,PolylineVolumeGraphics:()=>zx,PolylineVolumeOutlineGeometry:()=>xv,PositionProperty:()=>Mm,PositionPropertyArray:()=>Ob,PostProcessStage:()=>ho,PostProcessStageCollection:()=>u9,PostProcessStageComposite:()=>od,PostProcessStageLibrary:()=>tu,PostProcessStageSampleMode:()=>eu,PostProcessStageTextureCache:()=>qT,PpeMetadata:()=>vX,PpeSource:()=>k6,PpeTexture:()=>PX,Primitive:()=>In,PrimitiveCollection:()=>ll,PrimitiveLoadPlan:()=>L_,PrimitiveOutlineGenerator:()=>V_,PrimitiveOutlinePipelineStage:()=>eP,PrimitivePipeline:()=>Ix,PrimitiveRenderResources:()=>xP,PrimitiveState:()=>Sr,PrimitiveStatisticsPipelineStage:()=>tP,PrimitiveType:()=>we,ProjectionPicker:()=>DM,ProjectionPickerViewModel:()=>UM,Property:()=>J,PropertyArray:()=>z1,PropertyAttribute:()=>C_,PropertyAttributeProperty:()=>SX,PropertyBag:()=>zc,PropertyTable:()=>tl,PropertyTexture:()=>cb,PropertyTextureProperty:()=>TX,ProviderViewModel:()=>cs,Proxy:()=>v7,QuadraticRealPolynomial:()=>Ac,QuadtreeOccluders:()=>Ow,QuadtreePrimitive:()=>Qw,QuadtreeTile:()=>Yw,QuadtreeTileLoadState:()=>ta,QuadtreeTileProvider:()=>T6,QuantizedMeshTerrainData:()=>yS,QuarticRealPolynomial:()=>bR,Quaternion:()=>ve,QuaternionSpline:()=>KX,Queue:()=>yg,Ray:()=>pn,Rectangle:()=>ce,RectangleCollisionChecker:()=>_T,RectangleGeometry:()=>mT,RectangleGeometryLibrary:()=>Gs,RectangleGeometryUpdater:()=>Tv,RectangleGraphics:()=>Um,RectangleOutlineGeometry:()=>k_,ReferenceFrame:()=>ki,ReferenceProperty:()=>Yb,RenderState:()=>Ue,Renderbuffer:()=>fd,RenderbufferFormat:()=>Nc,Request:()=>zo,RequestErrorEvent:()=>tf,RequestScheduler:()=>ic,RequestState:()=>jn,RequestType:()=>ds,Resource:()=>Ze,ResourceCache:()=>Ri,ResourceCacheKey:()=>Ml,ResourceCacheStatistics:()=>aX,ResourceLoader:()=>Ki,ResourceLoaderState:()=>yt,Rotation:()=>$u,RuntimeError:()=>ae,S2Cell:()=>Qp,SDFSettings:()=>Hs,SampledPositionProperty:()=>_a,SampledProperty:()=>Md,Sampler:()=>qt,ScaledPositionProperty:()=>Af,Scene:()=>$9,SceneFramebuffer:()=>YT,SceneMode:()=>oe,SceneMode2DPipelineStage:()=>nP,SceneModePicker:()=>AM,SceneModePickerViewModel:()=>FM,SceneTransforms:()=>Ui,SceneTransitioner:()=>f9,ScreenSpaceCameraController:()=>y9,ScreenSpaceEventHandler:()=>iu,ScreenSpaceEventType:()=>Sn,SelectedFeatureIdPipelineStage:()=>Xg,SelectionIndicator:()=>kM,SelectionIndicatorViewModel:()=>NM,SensorVolumePortionToDisplay:()=>Q1,ShaderBuilder:()=>Cx,ShaderCache:()=>$G,ShaderDestination:()=>ye,ShaderFunction:()=>cE,ShaderProgram:()=>$t,ShaderSource:()=>De,ShaderStruct:()=>aE,ShadowMap:()=>y0,ShadowMapShader:()=>ap,ShadowMode:()=>_n,ShadowVolumeAppearance:()=>gd,ShowGeometryInstanceAttribute:()=>xn,Simon1994PlanetaryPositions:()=>O0,SimplePolylineGeometry:()=>w7,SingleTileImageryProvider:()=>Pw,SkinningPipelineStage:()=>oP,SkyAtmosphere:()=>nA,SkyBox:()=>rA,SpatialNode:()=>K9,Spdcf:()=>XX,SpecularEnvironmentCubeMap:()=>Om,SphereEmitter:()=>C6,SphereGeometry:()=>F7,SphereOutlineGeometry:()=>Xb,Spherical:()=>K2,Spline:()=>io,SplitDirection:()=>vr,Splitter:()=>_L,StaticGeometryColorBatch:()=>im,StaticGeometryPerMaterialBatch:()=>om,StaticGroundGeometryColorBatch:()=>fV,StaticGroundGeometryPerMaterialBatch:()=>Zv,StaticGroundPolylinePerMaterialBatch:()=>Mv,StaticOutlineGeometryBatch:()=>gV,StencilConstants:()=>Ut,StencilFunction:()=>Dn,StencilOperation:()=>ht,SteppedSpline:()=>HX,Stereographic:()=>fc,StorageType:()=>Tg,StripeMaterialProperty:()=>K1,StripeOrientation:()=>Th,StructuralMetadata:()=>Ys,StyleCommandsNeeded:()=>rh,StyleExpression:()=>V6,Sun:()=>uA,SunLight:()=>Ip,SunPostProcess:()=>T9,SupportedImageFormats:()=>ZX,SvgPathBindingHandler:()=>oM,TaskProcessor:()=>xi,Terrain:()=>qA,TerrainData:()=>wh,TerrainEncoding:()=>Rc,TerrainFillMesh:()=>jV,TerrainMesh:()=>um,TerrainOffsetProperty:()=>Hx,TerrainProvider:()=>os,TerrainQuantization:()=>ea,TerrainState:()=>mo,Texture:()=>vt,TextureAtlas:()=>Vx,TextureCache:()=>eE,TextureMagnificationFilter:()=>hi,TextureManager:()=>B9,TextureMinificationFilter:()=>jt,TexturePacker:()=>rC,TextureUniform:()=>M6,TextureWrap:()=>Vn,TileAvailability:()=>Yh,TileBoundingRegion:()=>Xd,TileBoundingS2Cell:()=>l2,TileBoundingSphere:()=>Wb,TileBoundingVolume:()=>L6,TileCoordinatesImageryProvider:()=>eM,TileDiscardPolicy:()=>Z6,TileEdge:()=>yn,TileImagery:()=>KV,TileMapServiceImageryProvider:()=>Ly,TileMetadata:()=>i2,TileOrientedBoundingBox:()=>Ol,TileProviderError:()=>Zo,TileReplacementQueue:()=>zw,TileSelectionResult:()=>Jn,TileState:()=>G6,Tileset3DTileContent:()=>WP,TilesetMetadata:()=>d2,TilesetPipelineStage:()=>tW,TilingScheme:()=>A7,TimeConstants:()=>Kn,TimeDynamicImagery:()=>AT,TimeDynamicPointCloud:()=>SL,TimeInterval:()=>Ln,TimeIntervalCollection:()=>Dr,TimeIntervalCollectionPositionProperty:()=>zb,TimeIntervalCollectionProperty:()=>Hb,TimeStandard:()=>Hn,Timeline:()=>YM,TimelineHighlightRange:()=>BM,TimelineTrack:()=>OM,Tipsify:()=>gR,ToggleButtonViewModel:()=>Ky,Tonemapper:()=>_0,TrackingReferenceFrame:()=>wp,Transforms:()=>Pt,TranslationRotationScale:()=>$0,TranslucentTileClassification:()=>NF,TridiagonalSystemSolver:()=>jC,TrustedServers:()=>HS,TweenCollection:()=>nS,UniformState:()=>iE,UniformType:()=>hL,UrlTemplateImageryProvider:()=>Ya,VERSION:()=>EVt,VRButton:()=>HM,VRButtonViewModel:()=>zM,VRTheWorldTerrainProvider:()=>M7,VaryingType:()=>N6,Vector3DTileBatch:()=>bf,Vector3DTileClampedPolylines:()=>$P,Vector3DTileContent:()=>t2,Vector3DTileGeometry:()=>Jp,Vector3DTilePoints:()=>zP,Vector3DTilePolygons:()=>HP,Vector3DTilePolylines:()=>F_,Vector3DTilePrimitive:()=>n_,VelocityOrientationProperty:()=>Q2,VelocityVectorProperty:()=>Kb,VertexArray:()=>ni,VertexArrayFacade:()=>Xp,VertexAttributeSemantic:()=>ft,VertexFormat:()=>Xe,VerticalExaggeration:()=>Tr,VerticalExaggerationPipelineStage:()=>sP,VerticalOrigin:()=>An,VideoSynchronizer:()=>N7,View:()=>KT,Viewer:()=>cq,ViewportQuad:()=>E6,Visibility:()=>hr,Visualizer:()=>v4,VoxelBoxShape:()=>up,VoxelCell:()=>V9,VoxelContent:()=>cS,VoxelCylinderShape:()=>lS,VoxelEllipsoidShape:()=>dS,VoxelInspector:()=>JM,VoxelInspectorViewModel:()=>KM,VoxelMetadataOrder:()=>xm,VoxelPrimitive:()=>Ay,VoxelProvider:()=>X6,VoxelRenderResources:()=>N9,VoxelShape:()=>W6,VoxelShapeType:()=>Mi,VoxelTraversal:()=>J9,VulkanConstants:()=>k7,WallGeometry:()=>Cv,WallGeometryLibrary:()=>hT,WallGeometryUpdater:()=>Rv,WallGraphics:()=>Bp,WallOutlineGeometry:()=>Lv,WebGLConstants:()=>ie,WebMapServiceImageryProvider:()=>ww,WebMapTileServiceImageryProvider:()=>Aw,WebMercatorProjection:()=>Xi,WebMercatorTilingScheme:()=>rs,WindingOrder:()=>us,WireframeIndexGenerator:()=>r1,WireframePipelineStage:()=>aP,_shadersAcesTonemappingStage:()=>BF,_shadersAdditiveBlend:()=>x9,_shadersAdjustTranslucentFS:()=>aL,_shadersAllMaterialAppearanceFS:()=>pE,_shadersAllMaterialAppearanceVS:()=>bE,_shadersAmbientOcclusionGenerate:()=>OF,_shadersAmbientOcclusionModulate:()=>YF,_shadersAspectRampMaterial:()=>TE,_shadersAtmosphereCommon:()=>$m,_shadersAtmosphereStageFS:()=>nW,_shadersAtmosphereStageVS:()=>iW,_shadersBasicMaterialAppearanceFS:()=>gE,_shadersBasicMaterialAppearanceVS:()=>yE,_shadersBillboardCollectionFS:()=>PP,_shadersBillboardCollectionVS:()=>vP,_shadersBlackAndWhite:()=>zF,_shadersBloomComposite:()=>HF,_shadersBrdfLutGeneratorFS:()=>rF,_shadersBrightPass:()=>_9,_shadersBrightness:()=>KF,_shadersBumpMapMaterial:()=>SE,_shadersCPUStylingStageFS:()=>GW,_shadersCPUStylingStageVS:()=>ZW,_shadersCheckerboardMaterial:()=>CE,_shadersCloudCollectionFS:()=>gA,_shadersCloudCollectionVS:()=>yA,_shadersCloudNoiseFS:()=>xA,_shadersCloudNoiseVS:()=>_A,_shadersCompareAndPackTranslucentDepth:()=>MF,_shadersCompositeOITFS:()=>WF,_shadersCompositeTranslucentClassification:()=>HT,_shadersComputeIrradianceFS:()=>fX,_shadersComputeRadianceMapFS:()=>pX,_shadersContrastBias:()=>JF,_shadersConvolveSpecularMapFS:()=>bX,_shadersConvolveSpecularMapVS:()=>gX,_shadersCustomShaderStageFS:()=>XW,_shadersCustomShaderStageVS:()=>IW,_shadersCzmBuiltins:()=>_x,_shadersDepthOfField:()=>QF,_shadersDepthPlaneFS:()=>gF,_shadersDepthPlaneVS:()=>yF,_shadersDepthView:()=>jF,_shadersDepthViewPacked:()=>A6,_shadersDotMaterial:()=>VE,_shadersEdgeDetection:()=>qF,_shadersElevationBandMaterial:()=>LE,_shadersElevationContourMaterial:()=>RE,_shadersElevationRampMaterial:()=>ZE,_shadersEllipsoidFS:()=>$V,_shadersEllipsoidSurfaceAppearanceFS:()=>MA,_shadersEllipsoidSurfaceAppearanceVS:()=>NA,_shadersEllipsoidVS:()=>eL,_shadersFXAA:()=>t9,_shadersFXAA3_11:()=>a9,_shadersFadeMaterial:()=>GE,_shadersFeatureIdStageFS:()=>WW,_shadersFeatureIdStageVS:()=>PW,_shadersFilmicTonemapping:()=>$F,_shadersGaussianBlur1D:()=>Py,_shadersGeometryStageFS:()=>NW,_shadersGeometryStageVS:()=>kW,_shadersGlobeFS:()=>Cw,_shadersGlobeVS:()=>Vw,_shadersGridMaterial:()=>EE,_shadersGroundAtmosphere:()=>AV,_shadersHSBToRGB:()=>bZ,_shadersHSLToRGB:()=>gZ,_shadersImageBasedLightingStageFS:()=>rW,_shadersInstancingStageCommon:()=>bW,_shadersInstancingStageVS:()=>gW,_shadersIntersectBox:()=>X9,_shadersIntersectClippingPlanes:()=>I9,_shadersIntersectCylinder:()=>W9,_shadersIntersectDepth:()=>E9,_shadersIntersectEllipsoid:()=>P9,_shadersIntersectLongitude:()=>mL,_shadersIntersection:()=>rS,_shadersIntersectionUtils:()=>G9,_shadersLegacyInstancingStageVS:()=>yW,_shadersLensFlare:()=>n9,_shadersLightingStageFS:()=>BW,_shadersMaterialStageFS:()=>YW,_shadersMegatexture:()=>M9,_shadersMetadataStageFS:()=>vW,_shadersMetadataStageVS:()=>wW,_shadersModelClippingPlanesStageFS:()=>dW,_shadersModelClippingPolygonsStageFS:()=>hW,_shadersModelClippingPolygonsStageVS:()=>mW,_shadersModelColorStageFS:()=>lW,_shadersModelFS:()=>VP,_shadersModelSilhouetteStageFS:()=>mP,_shadersModelSilhouetteStageVS:()=>hP,_shadersModelSplitterStageFS:()=>pP,_shadersModelVS:()=>CP,_shadersModifiedReinhardTonemapping:()=>i9,_shadersMorphTargetsStageVS:()=>HW,_shadersNightVision:()=>o9,_shadersNormalMapMaterial:()=>IE,_shadersOctree:()=>A9,_shadersPassThrough:()=>id,_shadersPassThroughDepth:()=>Iy,_shadersPbrNeutralTonemapping:()=>e9,_shadersPerInstanceColorAppearanceFS:()=>UE,_shadersPerInstanceColorAppearanceVS:()=>DE,_shadersPerInstanceFlatColorAppearanceFS:()=>Gx,_shadersPerInstanceFlatColorAppearanceVS:()=>BE,_shadersPointCloudEyeDomeLighting:()=>AX,_shadersPointCloudStylingStageVS:()=>QW,_shadersPointPrimitiveCollectionFS:()=>Kg,_shadersPointPrimitiveCollectionVS:()=>A2,_shadersPolygonSignedDistanceFS:()=>mX,_shadersPolylineArrowMaterial:()=>XE,_shadersPolylineColorAppearanceVS:()=>oI,_shadersPolylineCommon:()=>yd,_shadersPolylineDashMaterial:()=>WE,_shadersPolylineFS:()=>wx,_shadersPolylineGlowMaterial:()=>PE,_shadersPolylineMaterialAppearanceVS:()=>rI,_shadersPolylineOutlineMaterial:()=>vE,_shadersPolylineShadowVolumeFS:()=>eI,_shadersPolylineShadowVolumeMorphFS:()=>tI,_shadersPolylineShadowVolumeMorphVS:()=>nI,_shadersPolylineShadowVolumeVS:()=>iI,_shadersPolylineVS:()=>kP,_shadersPrimitiveOutlineStageFS:()=>$W,_shadersPrimitiveOutlineStageVS:()=>qW,_shadersRGBToHSB:()=>yZ,_shadersRGBToHSL:()=>xZ,_shadersRGBToXYZ:()=>_Z,_shadersReinhardTonemapping:()=>r9,_shadersReprojectWebMercatorFS:()=>Mw,_shadersReprojectWebMercatorVS:()=>Nw,_shadersRimLightingMaterial:()=>wE,_shadersSelectedFeatureIdStageCommon:()=>o1,_shadersShadowVolumeAppearanceFS:()=>uC,_shadersShadowVolumeAppearanceVS:()=>zE,_shadersShadowVolumeFS:()=>J0,_shadersSilhouette:()=>s9,_shadersSkinningStageVS:()=>iP,_shadersSkyAtmosphereCommon:()=>bL,_shadersSkyAtmosphereFS:()=>eA,_shadersSkyAtmosphereVS:()=>tA,_shadersSkyBoxFS:()=>iA,_shadersSkyBoxVS:()=>oA,_shadersSlopeRampMaterial:()=>FE,_shadersStripeMaterial:()=>AE,_shadersSunFS:()=>sA,_shadersSunTextureFS:()=>aA,_shadersSunVS:()=>cA,_shadersTexturedMaterialAppearanceFS:()=>xE,_shadersTexturedMaterialAppearanceVS:()=>_E,_shadersVector3DTileClampedPolylinesFS:()=>jP,_shadersVector3DTileClampedPolylinesVS:()=>QP,_shadersVector3DTilePolylinesVS:()=>KP,_shadersVectorTileVS:()=>TC,_shadersVerticalExaggerationStageVS:()=>rP,_shadersViewportQuadFS:()=>TA,_shadersViewportQuadVS:()=>ux,_shadersVoxelFS:()=>R9,_shadersVoxelUtils:()=>L9,_shadersVoxelVS:()=>Z9,_shadersWater:()=>NE,_shadersWaterMaskMaterial:()=>ME,_shadersXYZToRGB:()=>TZ,_shadersacesTonemapping:()=>SZ,_shadersalphaWeight:()=>CZ,_shadersantialias:()=>VZ,_shadersapplyHSBShift:()=>LZ,_shadersapproximateSphericalCoordinates:()=>RZ,_shadersapproximateTanh:()=>ZZ,_shadersbackFacing:()=>GZ,_shadersbranchFreeTernary:()=>EZ,_shaderscascadeColor:()=>IZ,_shaderscascadeDistance:()=>XZ,_shaderscascadeMatrix:()=>WZ,_shaderscascadeWeights:()=>PZ,_shadersclipPolygons:()=>vZ,_shaderscolumbusViewMorph:()=>wZ,_shaderscomputeAtmosphereColor:()=>FZ,_shaderscomputeGroundAtmosphereScattering:()=>AZ,_shaderscomputePosition:()=>MZ,_shaderscomputeScattering:()=>NZ,_shadersconvertUvToBox:()=>v9,_shadersconvertUvToCylinder:()=>w9,_shadersconvertUvToEllipsoid:()=>F9,_shaderscosineAndSine:()=>kZ,_shadersdecompressTextureCoordinates:()=>UZ,_shadersdegreesPerRadian:()=>VR,_shadersdepthClamp:()=>DZ,_shadersdepthRange:()=>LR,_shadersdepthRangeStruct:()=>cZ,_shaderseastNorthUpToEyeCoordinates:()=>BZ,_shadersellipsoidContainsPoint:()=>OZ,_shadersellipsoidTextureCoordinates:()=>YZ,_shadersepsilon1:()=>RR,_shadersepsilon2:()=>ZR,_shadersepsilon3:()=>GR,_shadersepsilon4:()=>ER,_shadersepsilon5:()=>IR,_shadersepsilon6:()=>XR,_shadersepsilon7:()=>WR,_shadersequalsEpsilon:()=>zZ,_shaderseyeOffset:()=>HZ,_shaderseyeToWindowCoordinates:()=>KZ,_shadersfastApproximateAtan:()=>JZ,_shadersfog:()=>QZ,_shadersgammaCorrect:()=>jZ,_shadersgeodeticSurfaceNormal:()=>qZ,_shadersgetDefaultMaterial:()=>$Z,_shadersgetDynamicAtmosphereLightDirection:()=>eG,_shadersgetLambertDiffuse:()=>tG,_shadersgetSpecular:()=>nG,_shadersgetWaterNoise:()=>iG,_shadershue:()=>oG,_shadersinfinity:()=>PR,_shadersinverseGamma:()=>rG,_shadersisEmpty:()=>sG,_shadersisFull:()=>aG,_shaderslatitudeToWebMercatorFraction:()=>cG,_shaderslineDistance:()=>lG,_shaderslinearToSrgb:()=>dG,_shadersluminance:()=>uG,_shadersmaterial:()=>lZ,_shadersmaterialInput:()=>dZ,_shadersmaximumComponent:()=>mG,_shadersmetersPerPixel:()=>hG,_shadersmodelMaterial:()=>uZ,_shadersmodelToWindowCoordinates:()=>fG,_shadersmodelVertexOutput:()=>mZ,_shadersmultiplyWithColorBalance:()=>pG,_shadersnearFarScalar:()=>bG,_shadersoctDecode:()=>gG,_shadersoneOverPi:()=>vR,_shadersoneOverTwoPi:()=>wR,_shaderspackDepth:()=>yG,_shaderspassCesium3DTile:()=>FR,_shaderspassCesium3DTileClassification:()=>AR,_shaderspassCesium3DTileClassificationIgnoreShow:()=>MR,_shaderspassClassification:()=>NR,_shaderspassCompute:()=>kR,_shaderspassEnvironment:()=>UR,_shaderspassGlobe:()=>DR,_shaderspassOpaque:()=>BR,_shaderspassOverlay:()=>OR,_shaderspassTerrainClassification:()=>YR,_shaderspassTranslucent:()=>zR,_shaderspassVoxels:()=>HR,_shaderspbrLighting:()=>xG,_shaderspbrNeutralTonemapping:()=>_G,_shadersphong:()=>TG,_shaderspi:()=>KR,_shaderspiOverFour:()=>JR,_shaderspiOverSix:()=>QR,_shaderspiOverThree:()=>jR,_shaderspiOverTwo:()=>qR,_shadersplaneDistance:()=>SG,_shaderspointAlongRay:()=>CG,_shadersradiansPerDegree:()=>$R,_shadersray:()=>hZ,_shadersrayEllipsoidIntersectionInterval:()=>VG,_shadersraySegment:()=>fZ,_shadersraySphereIntersectionInterval:()=>LG,_shadersreadDepth:()=>RG,_shadersreadNonPerspective:()=>ZG,_shadersreverseLogDepth:()=>GG,_shadersround:()=>EG,_shaderssaturation:()=>IG,_shaderssceneMode2D:()=>eZ,_shaderssceneMode3D:()=>tZ,_shaderssceneModeColumbusView:()=>nZ,_shaderssceneModeMorphing:()=>iZ,_shadersshadowDepthCompare:()=>XG,_shadersshadowParameters:()=>pZ,_shadersshadowVisibility:()=>WG,_shaderssignNotZero:()=>PG,_shaderssolarRadius:()=>oZ,_shaderssphericalHarmonics:()=>vG,_shaderssrgbToLinear:()=>wG,_shaderstangentToEyeSpaceMatrix:()=>FG,_shaderstextureCube:()=>AG,_shadersthreePiOver2:()=>rZ,_shaderstransformPlane:()=>MG,_shaderstranslateRelativeToEye:()=>NG,_shaderstranslucentPhong:()=>kG,_shaderstranspose:()=>UG,_shaderstwoPi:()=>sZ,_shadersunpackClippingExtents:()=>DG,_shadersunpackDepth:()=>BG,_shadersunpackFloat:()=>OG,_shadersunpackUint:()=>YG,_shadersvalueTransform:()=>zG,_shadersvertexLogDepth:()=>HG,_shaderswebMercatorMaxLatitude:()=>aZ,_shaderswindowToEyeCoordinates:()=>KG,_shaderswriteDepthClamp:()=>JG,_shaderswriteLogDepth:()=>QG,_shaderswriteNonPerspective:()=>jG,addBuffer:()=>JI,addDefaults:()=>UI,addExtensionsRequired:()=>zI,addExtensionsUsed:()=>vu,addPipelineExtras:()=>dg,addToArray:()=>Ls,appendForwardSlash:()=>JL,arrayRemoveDuplicates:()=>_o,barycentricCoordinates:()=>hx,binarySearch:()=>Xo,buildModuleUrl:()=>nn,buildVoxelDrawCommands:()=>U9,clone:()=>Ye,combine:()=>St,computeFlyToLocationForRectangle:()=>PT,createBillboardPointCallback:()=>W_,createCommand:()=>Rn,createDefaultImageryProviderViewModels:()=>yM,createDefaultTerrainProviderViewModels:()=>xM,createElevationBandMaterial:()=>P6,createGooglePhotorealistic3DTileset:()=>v6,createGuid:()=>zn,createMaterialPropertyDescriptor:()=>Wo,createOsmBuildingsAsync:()=>w6,createPropertyDescriptor:()=>ue,createRawPropertyDescriptor:()=>Yc,createTangentSpaceDebugPrimitive:()=>F6,createTaskProcessorWorker:()=>U6,createUniform:()=>cR,createUniformArray:()=>lR,createWorldBathymetryAsync:()=>GA,createWorldImageryAsync:()=>m0,createWorldTerrainAsync:()=>VS,decodeGoogleEarthEnterpriseData:()=>EA,decodeVectorPolylinePositions:()=>e2,defaultValue:()=>D7,defer:()=>Ll,defined:()=>l,demodernizeShader:()=>qG,deprecationWarning:()=>Vs,destroyObject:()=>me,exportKml:()=>N4,findAccessorMinMax:()=>u_,findContentMetadata:()=>M_,findGroupMetadata:()=>N_,findTileMetadata:()=>o2,forEachTextureInMaterial:()=>IC,formatError:()=>jf,freezeRenderState:()=>IO,getAbsoluteUri:()=>$h,getAccessorByteStride:()=>Fl,getBaseUri:()=>QL,getBinaryAccessor:()=>Td,getClipAndStyleCode:()=>mA,getClippingFunction:()=>c0,getComponentReader:()=>nb,getElement:()=>Xn,getExtensionFromUri:()=>nx,getFilenameFromUri:()=>Db,getImageFromTypedArray:()=>D9,getImagePixels:()=>Zm,getJsonFromTypedArray:()=>qo,getMagic:()=>zm,getMetadataClassProperty:()=>Q9,getMetadataProperty:()=>q9,getStringFromTypedArray:()=>Pl,getTimestamp:()=>Si,hasExtension:()=>ri,heightReferenceOnEntityPropertyChanged:()=>Op,isBitSet:()=>Xc,isBlobUri:()=>ix,isCrossOriginUrl:()=>w0,isDataUri:()=>Sp,isLeapYear:()=>Rm,knockout:()=>Se,knockout_3_5_1:()=>PS,knockout_es5:()=>iM,loadAndExecuteScript:()=>ox,loadCubeMap:()=>dE,loadImageFromTypedArray:()=>c_,loadKTX2:()=>Zl,mergeSort:()=>f0,moveTechniqueRenderStates:()=>YI,moveTechniquesToExtension:()=>HI,numberOfComponentsForType:()=>Cd,objectToQuery:()=>rx,oneTimeWarning:()=>_t,parseBatchTable:()=>mb,parseFeatureMetadataLegacy:()=>LX,parseGlb:()=>BI,parseResponseHeaders:()=>jL,parseStructuralMetadata:()=>VX,pickModel:()=>c1,pointInsideTriangle:()=>B7,preprocess3DTileContent:()=>Gb,processVoxelProperties:()=>k9,queryToObject:()=>ud,readAccessorPacked:()=>QI,removeExtension:()=>m_,removeExtensionsRequired:()=>DI,removeExtensionsUsed:()=>d_,removePipelineExtras:()=>OI,removeUnusedElements:()=>KI,resizeImageToNextPowerOfTwo:()=>hg,sampleTerrain:()=>Sw,sampleTerrainMostDetailed:()=>WT,scaleToGeodeticSurface:()=>tx,srgbToLinear:()=>LS,subdivideArray:()=>HE,subscribeAndEvaluate:()=>Ra,updateAccessorComponentTypes:()=>jI,updateVersion:()=>qI,usesExtension:()=>ar,viewerCesium3DTilesInspectorMixin:()=>lq,viewerCesiumInspectorMixin:()=>dq,viewerDragDropMixin:()=>mq,viewerPerformanceWatchdogMixin:()=>hq,viewerVoxelInspectorMixin:()=>fq,webGLConstantToGlslType:()=>O7,wrapFunction:()=>IA,writeTextToCanvas:()=>v_});var mIo=_(T(),1);var Eio=_(T(),1);var RLt=_(T(),1);var QVt=_(T(),1);var DVt=_(T(),1);var wVt=_(T(),1);function c1e(e){return e!=null}var l=c1e;var MVt=_(T(),1);function $y(e){this.name="DeveloperError",this.message=e;let t;try{throw new Error}catch(n){t=n.stack}this.stack=t}l(Object.create)&&($y.prototype=Object.create(Error.prototype),$y.prototype.constructor=$y);$y.prototype.toString=function(){let e=`${this.name}: ${this.message}`;return l(this.stack)&&(e+=` ${this.stack.toString()}`),e};$y.throwInstantiationError=function(){throw new $y("This function defines an interface and should not be called directly.")};var pe=$y;var Ss={};Ss.typeOf={};function l1e(e){return`${e} is required, actual value was undefined`}function AS(e,t,n){return`Expected ${n} to be typeof ${t}, actual typeof was ${e}`}Ss.defined=function(e,t){if(!l(t))throw new pe(l1e(e))};Ss.typeOf.func=function(e,t){if(typeof t!="function")throw new pe(AS(typeof t,"function",e))};Ss.typeOf.string=function(e,t){if(typeof t!="string")throw new pe(AS(typeof t,"string",e))};Ss.typeOf.number=function(e,t){if(typeof t!="number")throw new pe(AS(typeof t,"number",e))};Ss.typeOf.number.lessThan=function(e,t,n){if(Ss.typeOf.number(e,t),t>=n)throw new pe(`Expected ${e} to be less than ${n}, actual value was ${t}`)};Ss.typeOf.number.lessThanOrEquals=function(e,t,n){if(Ss.typeOf.number(e,t),t>n)throw new pe(`Expected ${e} to be less than or equal to ${n}, actual value was ${t}`)};Ss.typeOf.number.greaterThan=function(e,t,n){if(Ss.typeOf.number(e,t),t<=n)throw new pe(`Expected ${e} to be greater than ${n}, actual value was ${t}`)};Ss.typeOf.number.greaterThanOrEquals=function(e,t,n){if(Ss.typeOf.number(e,t),t<n)throw new pe(`Expected ${e} to be greater than or equal to ${n}, actual value was ${t}`)};Ss.typeOf.object=function(e,t){if(typeof t!="object")throw new pe(AS(typeof t,"object",e))};Ss.typeOf.bool=function(e,t){if(typeof t!="boolean")throw new pe(AS(typeof t,"boolean",e))};Ss.typeOf.bigint=function(e,t){if(typeof t!="bigint")throw new pe(AS(typeof t,"bigint",e))};Ss.typeOf.number.equals=function(e,t,n,i){if(Ss.typeOf.number(e,n),Ss.typeOf.number(t,i),n!==i)throw new pe(`${e} must be equal to ${t}, the actual values are ${n} and ${i}`)};var yo=Ss;var zVt=_(T(),1),kB=_(qM(),1);var at={};at.EPSILON1=.1;at.EPSILON2=.01;at.EPSILON3=.001;at.EPSILON4=1e-4;at.EPSILON5=1e-5;at.EPSILON6=1e-6;at.EPSILON7=1e-7;at.EPSILON8=1e-8;at.EPSILON9=1e-9;at.EPSILON10=1e-10;at.EPSILON11=1e-11;at.EPSILON12=1e-12;at.EPSILON13=1e-13;at.EPSILON14=1e-14;at.EPSILON15=1e-15;at.EPSILON16=1e-16;at.EPSILON17=1e-17;at.EPSILON18=1e-18;at.EPSILON19=1e-19;at.EPSILON20=1e-20;at.EPSILON21=1e-21;at.GRAVITATIONALPARAMETER=3986004418e5;at.SOLAR_RADIUS=6955e5;at.LUNAR_RADIUS=1737400;at.SIXTY_FOUR_KILOBYTES=64*1024;at.FOUR_GIGABYTES=4*1024*1024*1024;at.sign=Math.sign??function(t){return t=+t,t===0||t!==t?t:t>0?1:-1};at.signNotZero=function(e){return e<0?-1:1};at.toSNorm=function(e,t){return t=t??255,Math.round((at.clamp(e,-1,1)*.5+.5)*t)};at.fromSNorm=function(e,t){return t=t??255,at.clamp(e,0,t)/t*2-1};at.normalize=function(e,t,n){return n=Math.max(n-t,0),n===0?0:at.clamp((e-t)/n,0,1)};at.sinh=Math.sinh??function(t){return(Math.exp(t)-Math.exp(-t))/2};at.cosh=Math.cosh??function(t){return(Math.exp(t)+Math.exp(-t))/2};at.lerp=function(e,t,n){return(1-n)*e+n*t};at.PI=Math.PI;at.ONE_OVER_PI=1/Math.PI;at.PI_OVER_TWO=Math.PI/2;at.PI_OVER_THREE=Math.PI/3;at.PI_OVER_FOUR=Math.PI/4;at.PI_OVER_SIX=Math.PI/6;at.THREE_PI_OVER_TWO=3*Math.PI/2;at.TWO_PI=2*Math.PI;at.ONE_OVER_TWO_PI=1/(2*Math.PI);at.RADIANS_PER_DEGREE=Math.PI/180;at.DEGREES_PER_RADIAN=180/Math.PI;at.RADIANS_PER_ARCSECOND=at.RADIANS_PER_DEGREE/3600;at.toRadians=function(e){return e*at.RADIANS_PER_DEGREE};at.toDegrees=function(e){return e*at.DEGREES_PER_RADIAN};at.convertLongitudeRange=function(e){let t=at.TWO_PI,n=e-Math.floor(e/t)*t;return n<-Math.PI?n+t:n>=Math.PI?n-t:n};at.clampToLatitudeRange=function(e){return at.clamp(e,-1*at.PI_OVER_TWO,at.PI_OVER_TWO)};at.negativePiToPi=function(e){return e>=-at.PI&&e<=at.PI?e:at.zeroToTwoPi(e+at.PI)-at.PI};at.zeroToTwoPi=function(e){if(e>=0&&e<=at.TWO_PI)return e;let t=at.mod(e,at.TWO_PI);return Math.abs(t)<at.EPSILON14&&Math.abs(e)>at.EPSILON14?at.TWO_PI:t};at.mod=function(e,t){return at.sign(e)===at.sign(t)&&Math.abs(e)<Math.abs(t)?e:(e%t+t)%t};at.equalsEpsilon=function(e,t,n,i){n=n??0,i=i??n;let o=Math.abs(e-t);return o<=i||o<=n*Math.max(Math.abs(e),Math.abs(t))};at.lessThan=function(e,t,n){return e-t<-n};at.lessThanOrEquals=function(e,t,n){return e-t<n};at.greaterThan=function(e,t,n){return e-t>n};at.greaterThanOrEquals=function(e,t,n){return e-t>-n};var $M=[1];at.factorial=function(e){let t=$M.length;if(e>=t){let n=$M[t-1];for(let i=t;i<=e;i++){let o=n*i;$M.push(o),n=o}}return $M[e]};at.incrementWrap=function(e,t,n){return n=n??0,++e,e>t&&(e=n),e};at.isPowerOfTwo=function(e){return e!==0&&(e&e-1)===0};at.nextPowerOfTwo=function(e){return--e,e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,++e,e};at.previousPowerOfTwo=function(e){return e|=e>>1,e|=e>>2,e|=e>>4,e|=e>>8,e|=e>>16,e|=e>>32,e=(e>>>0)-(e>>>1),e};at.clamp=function(e,t,n){return e<t?t:e>n?n:e};var xq=new kB.default;at.setRandomNumberSeed=function(e){xq=new kB.default(e)};at.nextRandomNumber=function(){return xq.random()};at.randomBetween=function(e,t){return at.nextRandomNumber()*(t-e)+e};at.acosClamped=function(e){return Math.acos(at.clamp(e,-1,1))};at.asinClamped=function(e){return Math.asin(at.clamp(e,-1,1))};at.chordLength=function(e,t){return 2*t*Math.sin(e*.5)};at.logBase=function(e,t){return Math.log(e)/Math.log(t)};at.cbrt=Math.cbrt??function(t){let n=Math.pow(Math.abs(t),.3333333333333333);return t<0?-n:n};at.log2=Math.log2??function(t){return Math.log(t)*Math.LOG2E};at.fog=function(e,t){let n=e*t;return 1-Math.exp(-(n*n))};at.fastApproximateAtan=function(e){return e*(-.1784*Math.abs(e)-.0663*e*e+1.0301)};at.fastApproximateAtan2=function(e,t){let n,i=Math.abs(e);n=Math.abs(t);let o=Math.max(i,n);n=Math.min(i,n);let r=n/o;return i=at.fastApproximateAtan(r),i=Math.abs(t)>Math.abs(e)?at.PI_OVER_TWO-i:i,i=e<0?at.PI-i:i,i=t<0?-i:i,i};var X=at;function et(e,t,n){this.x=e??0,this.y=t??0,this.z=n??0}et.fromSpherical=function(e,t){l(t)||(t=new et);let n=e.clock,i=e.cone,o=e.magnitude??1,r=o*Math.sin(i);return t.x=r*Math.cos(n),t.y=r*Math.sin(n),t.z=o*Math.cos(i),t};et.fromElements=function(e,t,n,i){return l(i)?(i.x=e,i.y=t,i.z=n,i):new et(e,t,n)};et.clone=function(e,t){if(l(e))return l(t)?(t.x=e.x,t.y=e.y,t.z=e.z,t):new et(e.x,e.y,e.z)};et.fromCartesian4=et.clone;et.packedLength=3;et.pack=function(e,t,n){return n=n??0,t[n++]=e.x,t[n++]=e.y,t[n]=e.z,t};et.unpack=function(e,t,n){return t=t??0,l(n)||(n=new et),n.x=e[t++],n.y=e[t++],n.z=e[t],n};et.packArray=function(e,t){let n=e.length,i=n*3;l(t)?!Array.isArray(t)&&t.length!==i||t.length!==i&&(t.length=i):t=new Array(i);for(let o=0;o<n;++o)et.pack(e[o],t,o*3);return t};et.unpackArray=function(e,t){let n=e.length;l(t)?t.length=n/3:t=new Array(n/3);for(let i=0;i<n;i+=3){let o=i/3;t[o]=et.unpack(e,i,t[o])}return t};et.fromArray=et.unpack;et.maximumComponent=function(e){return Math.max(e.x,e.y,e.z)};et.minimumComponent=function(e){return Math.min(e.x,e.y,e.z)};et.minimumByComponent=function(e,t,n){return n.x=Math.min(e.x,t.x),n.y=Math.min(e.y,t.y),n.z=Math.min(e.z,t.z),n};et.maximumByComponent=function(e,t,n){return n.x=Math.max(e.x,t.x),n.y=Math.max(e.y,t.y),n.z=Math.max(e.z,t.z),n};et.clamp=function(e,t,n,i){let o=X.clamp(e.x,t.x,n.x),r=X.clamp(e.y,t.y,n.y),s=X.clamp(e.z,t.z,n.z);return i.x=o,i.y=r,i.z=s,i};et.magnitudeSquared=function(e){return e.x*e.x+e.y*e.y+e.z*e.z};et.magnitude=function(e){return Math.sqrt(et.magnitudeSquared(e))};var tN=new et;et.distance=function(e,t){return et.subtract(e,t,tN),et.magnitude(tN)};et.distanceSquared=function(e,t){return et.subtract(e,t,tN),et.magnitudeSquared(tN)};et.normalize=function(e,t){let n=et.magnitude(e);return t.x=e.x/n,t.y=e.y/n,t.z=e.z/n,t};et.dot=function(e,t){return e.x*t.x+e.y*t.y+e.z*t.z};et.multiplyComponents=function(e,t,n){return n.x=e.x*t.x,n.y=e.y*t.y,n.z=e.z*t.z,n};et.divideComponents=function(e,t,n){return n.x=e.x/t.x,n.y=e.y/t.y,n.z=e.z/t.z,n};et.add=function(e,t,n){return n.x=e.x+t.x,n.y=e.y+t.y,n.z=e.z+t.z,n};et.subtract=function(e,t,n){return n.x=e.x-t.x,n.y=e.y-t.y,n.z=e.z-t.z,n};et.multiplyByScalar=function(e,t,n){return n.x=e.x*t,n.y=e.y*t,n.z=e.z*t,n};et.divideByScalar=function(e,t,n){return n.x=e.x/t,n.y=e.y/t,n.z=e.z/t,n};et.negate=function(e,t){return t.x=-e.x,t.y=-e.y,t.z=-e.z,t};et.abs=function(e,t){return t.x=Math.abs(e.x),t.y=Math.abs(e.y),t.z=Math.abs(e.z),t};var _q=new et;et.lerp=function(e,t,n,i){return et.multiplyByScalar(t,n,_q),i=et.multiplyByScalar(e,1-n,i),et.add(_q,i,i)};var eN=new et,UB=new et;et.angleBetween=function(e,t){et.normalize(e,eN),et.normalize(t,UB);let n=et.dot(eN,UB),i=et.magnitude(et.cross(eN,UB,eN));return Math.atan2(i,n)};var d1e=new et;et.mostOrthogonalAxis=function(e,t){let n=et.normalize(e,d1e);return et.abs(n,n),n.x<=n.y?n.x<=n.z?t=et.clone(et.UNIT_X,t):t=et.clone(et.UNIT_Z,t):n.y<=n.z?t=et.clone(et.UNIT_Y,t):t=et.clone(et.UNIT_Z,t),t};et.projectVector=function(e,t,n){let i=et.dot(e,t)/et.dot(t,t);return et.multiplyByScalar(t,i,n)};et.equals=function(e,t){return e===t||l(e)&&l(t)&&e.x===t.x&&e.y===t.y&&e.z===t.z};et.equalsArray=function(e,t,n){return e.x===t[n]&&e.y===t[n+1]&&e.z===t[n+2]};et.equalsEpsilon=function(e,t,n,i){return e===t||l(e)&&l(t)&&X.equalsEpsilon(e.x,t.x,n,i)&&X.equalsEpsilon(e.y,t.y,n,i)&&X.equalsEpsilon(e.z,t.z,n,i)};et.cross=function(e,t,n){let i=e.x,o=e.y,r=e.z,s=t.x,a=t.y,c=t.z,d=o*c-r*a,u=r*s-i*c,h=i*a-o*s;return n.x=d,n.y=u,n.z=h,n};et.midpoint=function(e,t,n){return n.x=(e.x+t.x)*.5,n.y=(e.y+t.y)*.5,n.z=(e.z+t.z)*.5,n};et.fromDegrees=function(e,t,n,i,o){return e=X.toRadians(e),t=X.toRadians(t),et.fromRadians(e,t,n,i,o)};var bu=new et,MS=new et;et._ellipsoidRadiiSquared=new et(6378137*6378137,6378137*6378137,6356752314245179e-9*6356752314245179e-9);et.fromRadians=function(e,t,n,i,o){n=n??0;let r=l(i)?i.radiiSquared:et._ellipsoidRadiiSquared,s=Math.cos(t);bu.x=s*Math.cos(e),bu.y=s*Math.sin(e),bu.z=Math.sin(t),bu=et.normalize(bu,bu),et.multiplyComponents(r,bu,MS);let a=Math.sqrt(et.dot(bu,MS));return MS=et.divideByScalar(MS,a,MS),bu=et.multiplyByScalar(bu,n,bu),l(o)||(o=new et),et.add(MS,bu,o)};et.fromDegreesArray=function(e,t,n){let i=e.length;l(n)?n.length=i/2:n=new Array(i/2);for(let o=0;o<i;o+=2){let r=e[o],s=e[o+1],a=o/2;n[a]=et.fromDegrees(r,s,0,t,n[a])}return n};et.fromRadiansArray=function(e,t,n){let i=e.length;l(n)?n.length=i/2:n=new Array(i/2);for(let o=0;o<i;o+=2){let r=e[o],s=e[o+1],a=o/2;n[a]=et.fromRadians(r,s,0,t,n[a])}return n};et.fromDegreesArrayHeights=function(e,t,n){let i=e.length;l(n)?n.length=i/3:n=new Array(i/3);for(let o=0;o<i;o+=3){let r=e[o],s=e[o+1],a=e[o+2],c=o/3;n[c]=et.fromDegrees(r,s,a,t,n[c])}return n};et.fromRadiansArrayHeights=function(e,t,n){let i=e.length;l(n)?n.length=i/3:n=new Array(i/3);for(let o=0;o<i;o+=3){let r=e[o],s=e[o+1],a=e[o+2],c=o/3;n[c]=et.fromRadians(r,s,a,t,n[c])}return n};et.ZERO=Object.freeze(new et(0,0,0));et.ONE=Object.freeze(new et(1,1,1));et.UNIT_X=Object.freeze(new et(1,0,0));et.UNIT_Y=Object.freeze(new et(0,1,0));et.UNIT_Z=Object.freeze(new et(0,0,1));et.prototype.clone=function(e){return et.clone(this,e)};et.prototype.equals=function(e){return et.equals(this,e)};et.prototype.equalsEpsilon=function(e,t,n){return et.equalsEpsilon(this,e,t,n)};et.prototype.toString=function(){return`(${this.x}, ${this.y}, ${this.z})`};var m=et;var xLt=_(T(),1);var eLt=_(T(),1);function Tt(e,t,n,i){this.x=e??0,this.y=t??0,this.z=n??0,this.w=i??0}Tt.fromElements=function(e,t,n,i,o){return l(o)?(o.x=e,o.y=t,o.z=n,o.w=i,o):new Tt(e,t,n,i)};Tt.fromColor=function(e,t){return l(t)?(t.x=e.red,t.y=e.green,t.z=e.blue,t.w=e.alpha,t):new Tt(e.red,e.green,e.blue,e.alpha)};Tt.clone=function(e,t){if(l(e))return l(t)?(t.x=e.x,t.y=e.y,t.z=e.z,t.w=e.w,t):new Tt(e.x,e.y,e.z,e.w)};Tt.packedLength=4;Tt.pack=function(e,t,n){return n=n??0,t[n++]=e.x,t[n++]=e.y,t[n++]=e.z,t[n]=e.w,t};Tt.unpack=function(e,t,n){return t=t??0,l(n)||(n=new Tt),n.x=e[t++],n.y=e[t++],n.z=e[t++],n.w=e[t],n};Tt.packArray=function(e,t){let n=e.length,i=n*4;l(t)?!Array.isArray(t)&&t.length!==i||t.length!==i&&(t.length=i):t=new Array(i);for(let o=0;o<n;++o)Tt.pack(e[o],t,o*4);return t};Tt.unpackArray=function(e,t){let n=e.length;l(t)?t.length=n/4:t=new Array(n/4);for(let i=0;i<n;i+=4){let o=i/4;t[o]=Tt.unpack(e,i,t[o])}return t};Tt.fromArray=Tt.unpack;Tt.maximumComponent=function(e){return Math.max(e.x,e.y,e.z,e.w)};Tt.minimumComponent=function(e){return Math.min(e.x,e.y,e.z,e.w)};Tt.minimumByComponent=function(e,t,n){return n.x=Math.min(e.x,t.x),n.y=Math.min(e.y,t.y),n.z=Math.min(e.z,t.z),n.w=Math.min(e.w,t.w),n};Tt.maximumByComponent=function(e,t,n){return n.x=Math.max(e.x,t.x),n.y=Math.max(e.y,t.y),n.z=Math.max(e.z,t.z),n.w=Math.max(e.w,t.w),n};Tt.clamp=function(e,t,n,i){let o=X.clamp(e.x,t.x,n.x),r=X.clamp(e.y,t.y,n.y),s=X.clamp(e.z,t.z,n.z),a=X.clamp(e.w,t.w,n.w);return i.x=o,i.y=r,i.z=s,i.w=a,i};Tt.magnitudeSquared=function(e){return e.x*e.x+e.y*e.y+e.z*e.z+e.w*e.w};Tt.magnitude=function(e){return Math.sqrt(Tt.magnitudeSquared(e))};var nN=new Tt;Tt.distance=function(e,t){return Tt.subtract(e,t,nN),Tt.magnitude(nN)};Tt.distanceSquared=function(e,t){return Tt.subtract(e,t,nN),Tt.magnitudeSquared(nN)};Tt.normalize=function(e,t){let n=Tt.magnitude(e);return t.x=e.x/n,t.y=e.y/n,t.z=e.z/n,t.w=e.w/n,t};Tt.dot=function(e,t){return e.x*t.x+e.y*t.y+e.z*t.z+e.w*t.w};Tt.multiplyComponents=function(e,t,n){return n.x=e.x*t.x,n.y=e.y*t.y,n.z=e.z*t.z,n.w=e.w*t.w,n};Tt.divideComponents=function(e,t,n){return n.x=e.x/t.x,n.y=e.y/t.y,n.z=e.z/t.z,n.w=e.w/t.w,n};Tt.add=function(e,t,n){return n.x=e.x+t.x,n.y=e.y+t.y,n.z=e.z+t.z,n.w=e.w+t.w,n};Tt.subtract=function(e,t,n){return n.x=e.x-t.x,n.y=e.y-t.y,n.z=e.z-t.z,n.w=e.w-t.w,n};Tt.multiplyByScalar=function(e,t,n){return n.x=e.x*t,n.y=e.y*t,n.z=e.z*t,n.w=e.w*t,n};Tt.divideByScalar=function(e,t,n){return n.x=e.x/t,n.y=e.y/t,n.z=e.z/t,n.w=e.w/t,n};Tt.negate=function(e,t){return t.x=-e.x,t.y=-e.y,t.z=-e.z,t.w=-e.w,t};Tt.abs=function(e,t){return t.x=Math.abs(e.x),t.y=Math.abs(e.y),t.z=Math.abs(e.z),t.w=Math.abs(e.w),t};var Tq=new Tt;Tt.lerp=function(e,t,n,i){return Tt.multiplyByScalar(t,n,Tq),i=Tt.multiplyByScalar(e,1-n,i),Tt.add(Tq,i,i)};var u1e=new Tt;Tt.mostOrthogonalAxis=function(e,t){let n=Tt.normalize(e,u1e);return Tt.abs(n,n),n.x<=n.y?n.x<=n.z?n.x<=n.w?t=Tt.clone(Tt.UNIT_X,t):t=Tt.clone(Tt.UNIT_W,t):n.z<=n.w?t=Tt.clone(Tt.UNIT_Z,t):t=Tt.clone(Tt.UNIT_W,t):n.y<=n.z?n.y<=n.w?t=Tt.clone(Tt.UNIT_Y,t):t=Tt.clone(Tt.UNIT_W,t):n.z<=n.w?t=Tt.clone(Tt.UNIT_Z,t):t=Tt.clone(Tt.UNIT_W,t),t};Tt.equals=function(e,t){return e===t||l(e)&&l(t)&&e.x===t.x&&e.y===t.y&&e.z===t.z&&e.w===t.w};Tt.equalsArray=function(e,t,n){return e.x===t[n]&&e.y===t[n+1]&&e.z===t[n+2]&&e.w===t[n+3]};Tt.equalsEpsilon=function(e,t,n,i){return e===t||l(e)&&l(t)&&X.equalsEpsilon(e.x,t.x,n,i)&&X.equalsEpsilon(e.y,t.y,n,i)&&X.equalsEpsilon(e.z,t.z,n,i)&&X.equalsEpsilon(e.w,t.w,n,i)};Tt.ZERO=Object.freeze(new Tt(0,0,0,0));Tt.ONE=Object.freeze(new Tt(1,1,1,1));Tt.UNIT_X=Object.freeze(new Tt(1,0,0,0));Tt.UNIT_Y=Object.freeze(new Tt(0,1,0,0));Tt.UNIT_Z=Object.freeze(new Tt(0,0,1,0));Tt.UNIT_W=Object.freeze(new Tt(0,0,0,1));Tt.prototype.clone=function(e){return Tt.clone(this,e)};Tt.prototype.equals=function(e){return Tt.equals(this,e)};Tt.prototype.equalsEpsilon=function(e,t,n){return Tt.equalsEpsilon(this,e,t,n)};Tt.prototype.toString=function(){return`(${this.x}, ${this.y}, ${this.z}, ${this.w})`};var DB=new Float32Array(1),ec=new Uint8Array(DB.buffer),m1e=new Uint32Array([287454020]),h1e=new Uint8Array(m1e.buffer),Sq=h1e[0]===68;Tt.packFloat=function(e,t){return l(t)||(t=new Tt),DB[0]=e,Sq?(t.x=ec[0],t.y=ec[1],t.z=ec[2],t.w=ec[3]):(t.x=ec[3],t.y=ec[2],t.z=ec[1],t.w=ec[0]),t};Tt.unpackFloat=function(e){return Sq?(ec[0]=e.x,ec[1]=e.y,ec[2]=e.z,ec[3]=e.w):(ec[0]=e.w,ec[1]=e.z,ec[2]=e.y,ec[3]=e.x),DB[0]};var se=Tt;var nLt=_(T(),1),BB={};BB.EMPTY_OBJECT=Object.freeze({});BB.EMPTY_ARRAY=Object.freeze([]);var Y=BB;var aLt=_(T(),1);function nt(e,t,n,i,o,r,s,a,c){this[0]=e??0,this[1]=i??0,this[2]=s??0,this[3]=t??0,this[4]=o??0,this[5]=a??0,this[6]=n??0,this[7]=r??0,this[8]=c??0}nt.packedLength=9;nt.pack=function(e,t,n){return n=n??0,t[n++]=e[0],t[n++]=e[1],t[n++]=e[2],t[n++]=e[3],t[n++]=e[4],t[n++]=e[5],t[n++]=e[6],t[n++]=e[7],t[n++]=e[8],t};nt.unpack=function(e,t,n){return t=t??0,l(n)||(n=new nt),n[0]=e[t++],n[1]=e[t++],n[2]=e[t++],n[3]=e[t++],n[4]=e[t++],n[5]=e[t++],n[6]=e[t++],n[7]=e[t++],n[8]=e[t++],n};nt.packArray=function(e,t){let n=e.length,i=n*9;l(t)?!Array.isArray(t)&&t.length!==i||t.length!==i&&(t.length=i):t=new Array(i);for(let o=0;o<n;++o)nt.pack(e[o],t,o*9);return t};nt.unpackArray=function(e,t){let n=e.length;l(t)?t.length=n/9:t=new Array(n/9);for(let i=0;i<n;i+=9){let o=i/9;t[o]=nt.unpack(e,i,t[o])}return t};nt.clone=function(e,t){if(l(e))return l(t)?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t):new nt(e[0],e[3],e[6],e[1],e[4],e[7],e[2],e[5],e[8])};nt.fromArray=nt.unpack;nt.fromColumnMajorArray=function(e,t){return nt.clone(e,t)};nt.fromRowMajorArray=function(e,t){return l(t)?(t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],t):new nt(e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8])};nt.fromQuaternion=function(e,t){let n=e.x*e.x,i=e.x*e.y,o=e.x*e.z,r=e.x*e.w,s=e.y*e.y,a=e.y*e.z,c=e.y*e.w,d=e.z*e.z,u=e.z*e.w,h=e.w*e.w,p=n-s-d+h,g=2*(i-u),f=2*(o+c),y=2*(i+u),x=-n+s-d+h,S=2*(a-r),C=2*(o-c),V=2*(a+r),L=-n-s+d+h;return l(t)?(t[0]=p,t[1]=y,t[2]=C,t[3]=g,t[4]=x,t[5]=V,t[6]=f,t[7]=S,t[8]=L,t):new nt(p,g,f,y,x,S,C,V,L)};nt.fromHeadingPitchRoll=function(e,t){let n=Math.cos(-e.pitch),i=Math.cos(-e.heading),o=Math.cos(e.roll),r=Math.sin(-e.pitch),s=Math.sin(-e.heading),a=Math.sin(e.roll),c=n*i,d=-o*s+a*r*i,u=a*s+o*r*i,h=n*s,p=o*i+a*r*s,g=-a*i+o*r*s,f=-r,y=a*n,x=o*n;return l(t)?(t[0]=c,t[1]=h,t[2]=f,t[3]=d,t[4]=p,t[5]=y,t[6]=u,t[7]=g,t[8]=x,t):new nt(c,d,u,h,p,g,f,y,x)};nt.fromScale=function(e,t){return l(t)?(t[0]=e.x,t[1]=0,t[2]=0,t[3]=0,t[4]=e.y,t[5]=0,t[6]=0,t[7]=0,t[8]=e.z,t):new nt(e.x,0,0,0,e.y,0,0,0,e.z)};nt.fromUniformScale=function(e,t){return l(t)?(t[0]=e,t[1]=0,t[2]=0,t[3]=0,t[4]=e,t[5]=0,t[6]=0,t[7]=0,t[8]=e,t):new nt(e,0,0,0,e,0,0,0,e)};nt.fromCrossProduct=function(e,t){return l(t)?(t[0]=0,t[1]=e.z,t[2]=-e.y,t[3]=-e.z,t[4]=0,t[5]=e.x,t[6]=e.y,t[7]=-e.x,t[8]=0,t):new nt(0,-e.z,e.y,e.z,0,-e.x,-e.y,e.x,0)};nt.fromRotationX=function(e,t){let n=Math.cos(e),i=Math.sin(e);return l(t)?(t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=n,t[5]=i,t[6]=0,t[7]=-i,t[8]=n,t):new nt(1,0,0,0,n,-i,0,i,n)};nt.fromRotationY=function(e,t){let n=Math.cos(e),i=Math.sin(e);return l(t)?(t[0]=n,t[1]=0,t[2]=-i,t[3]=0,t[4]=1,t[5]=0,t[6]=i,t[7]=0,t[8]=n,t):new nt(n,0,i,0,1,0,-i,0,n)};nt.fromRotationZ=function(e,t){let n=Math.cos(e),i=Math.sin(e);return l(t)?(t[0]=n,t[1]=i,t[2]=0,t[3]=-i,t[4]=n,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t):new nt(n,-i,0,i,n,0,0,0,1)};nt.toArray=function(e,t){return l(t)?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t):[e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8]]};nt.getElementIndex=function(e,t){return e*3+t};nt.getColumn=function(e,t,n){let i=t*3,o=e[i],r=e[i+1],s=e[i+2];return n.x=o,n.y=r,n.z=s,n};nt.setColumn=function(e,t,n,i){i=nt.clone(e,i);let o=t*3;return i[o]=n.x,i[o+1]=n.y,i[o+2]=n.z,i};nt.getRow=function(e,t,n){let i=e[t],o=e[t+3],r=e[t+6];return n.x=i,n.y=o,n.z=r,n};nt.setRow=function(e,t,n,i){return i=nt.clone(e,i),i[t]=n.x,i[t+3]=n.y,i[t+6]=n.z,i};var f1e=new m;nt.setScale=function(e,t,n){let i=nt.getScale(e,f1e),o=t.x/i.x,r=t.y/i.y,s=t.z/i.z;return n[0]=e[0]*o,n[1]=e[1]*o,n[2]=e[2]*o,n[3]=e[3]*r,n[4]=e[4]*r,n[5]=e[5]*r,n[6]=e[6]*s,n[7]=e[7]*s,n[8]=e[8]*s,n};var p1e=new m;nt.setUniformScale=function(e,t,n){let i=nt.getScale(e,p1e),o=t/i.x,r=t/i.y,s=t/i.z;return n[0]=e[0]*o,n[1]=e[1]*o,n[2]=e[2]*o,n[3]=e[3]*r,n[4]=e[4]*r,n[5]=e[5]*r,n[6]=e[6]*s,n[7]=e[7]*s,n[8]=e[8]*s,n};var OB=new m;nt.getScale=function(e,t){return t.x=m.magnitude(m.fromElements(e[0],e[1],e[2],OB)),t.y=m.magnitude(m.fromElements(e[3],e[4],e[5],OB)),t.z=m.magnitude(m.fromElements(e[6],e[7],e[8],OB)),t};var Cq=new m;nt.getMaximumScale=function(e){return nt.getScale(e,Cq),m.maximumComponent(Cq)};var b1e=new m;nt.setRotation=function(e,t,n){let i=nt.getScale(e,b1e);return n[0]=t[0]*i.x,n[1]=t[1]*i.x,n[2]=t[2]*i.x,n[3]=t[3]*i.y,n[4]=t[4]*i.y,n[5]=t[5]*i.y,n[6]=t[6]*i.z,n[7]=t[7]*i.z,n[8]=t[8]*i.z,n};var g1e=new m;nt.getRotation=function(e,t){let n=nt.getScale(e,g1e);return t[0]=e[0]/n.x,t[1]=e[1]/n.x,t[2]=e[2]/n.x,t[3]=e[3]/n.y,t[4]=e[4]/n.y,t[5]=e[5]/n.y,t[6]=e[6]/n.z,t[7]=e[7]/n.z,t[8]=e[8]/n.z,t};nt.multiply=function(e,t,n){let i=e[0]*t[0]+e[3]*t[1]+e[6]*t[2],o=e[1]*t[0]+e[4]*t[1]+e[7]*t[2],r=e[2]*t[0]+e[5]*t[1]+e[8]*t[2],s=e[0]*t[3]+e[3]*t[4]+e[6]*t[5],a=e[1]*t[3]+e[4]*t[4]+e[7]*t[5],c=e[2]*t[3]+e[5]*t[4]+e[8]*t[5],d=e[0]*t[6]+e[3]*t[7]+e[6]*t[8],u=e[1]*t[6]+e[4]*t[7]+e[7]*t[8],h=e[2]*t[6]+e[5]*t[7]+e[8]*t[8];return n[0]=i,n[1]=o,n[2]=r,n[3]=s,n[4]=a,n[5]=c,n[6]=d,n[7]=u,n[8]=h,n};nt.add=function(e,t,n){return n[0]=e[0]+t[0],n[1]=e[1]+t[1],n[2]=e[2]+t[2],n[3]=e[3]+t[3],n[4]=e[4]+t[4],n[5]=e[5]+t[5],n[6]=e[6]+t[6],n[7]=e[7]+t[7],n[8]=e[8]+t[8],n};nt.subtract=function(e,t,n){return n[0]=e[0]-t[0],n[1]=e[1]-t[1],n[2]=e[2]-t[2],n[3]=e[3]-t[3],n[4]=e[4]-t[4],n[5]=e[5]-t[5],n[6]=e[6]-t[6],n[7]=e[7]-t[7],n[8]=e[8]-t[8],n};nt.multiplyByVector=function(e,t,n){let i=t.x,o=t.y,r=t.z,s=e[0]*i+e[3]*o+e[6]*r,a=e[1]*i+e[4]*o+e[7]*r,c=e[2]*i+e[5]*o+e[8]*r;return n.x=s,n.y=a,n.z=c,n};nt.multiplyByScalar=function(e,t,n){return n[0]=e[0]*t,n[1]=e[1]*t,n[2]=e[2]*t,n[3]=e[3]*t,n[4]=e[4]*t,n[5]=e[5]*t,n[6]=e[6]*t,n[7]=e[7]*t,n[8]=e[8]*t,n};nt.multiplyByScale=function(e,t,n){return n[0]=e[0]*t.x,n[1]=e[1]*t.x,n[2]=e[2]*t.x,n[3]=e[3]*t.y,n[4]=e[4]*t.y,n[5]=e[5]*t.y,n[6]=e[6]*t.z,n[7]=e[7]*t.z,n[8]=e[8]*t.z,n};nt.multiplyByUniformScale=function(e,t,n){return n[0]=e[0]*t,n[1]=e[1]*t,n[2]=e[2]*t,n[3]=e[3]*t,n[4]=e[4]*t,n[5]=e[5]*t,n[6]=e[6]*t,n[7]=e[7]*t,n[8]=e[8]*t,n};nt.negate=function(e,t){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t[4]=-e[4],t[5]=-e[5],t[6]=-e[6],t[7]=-e[7],t[8]=-e[8],t};nt.transpose=function(e,t){let n=e[0],i=e[3],o=e[6],r=e[1],s=e[4],a=e[7],c=e[2],d=e[5],u=e[8];return t[0]=n,t[1]=i,t[2]=o,t[3]=r,t[4]=s,t[5]=a,t[6]=c,t[7]=d,t[8]=u,t};function y1e(e){let t=0;for(let n=0;n<9;++n){let i=e[n];t+=i*i}return Math.sqrt(t)}var YB=[1,0,0],zB=[2,2,1];function x1e(e){let t=0;for(let n=0;n<3;++n){let i=e[nt.getElementIndex(zB[n],YB[n])];t+=2*i*i}return Math.sqrt(t)}function _1e(e,t){let n=X.EPSILON15,i=0,o=1;for(let d=0;d<3;++d){let u=Math.abs(e[nt.getElementIndex(zB[d],YB[d])]);u>i&&(o=d,i=u)}let r=1,s=0,a=YB[o],c=zB[o];if(Math.abs(e[nt.getElementIndex(c,a)])>n){let d=e[nt.getElementIndex(c,c)],u=e[nt.getElementIndex(a,a)],h=e[nt.getElementIndex(c,a)],p=(d-u)/2/h,g;p<0?g=-1/(-p+Math.sqrt(1+p*p)):g=1/(p+Math.sqrt(1+p*p)),r=1/Math.sqrt(1+g*g),s=g*r}return t=nt.clone(nt.IDENTITY,t),t[nt.getElementIndex(a,a)]=t[nt.getElementIndex(c,c)]=r,t[nt.getElementIndex(c,a)]=s,t[nt.getElementIndex(a,c)]=-s,t}var iN=new nt,Vq=new nt;nt.computeEigenDecomposition=function(e,t){let n=X.EPSILON20,i=10,o=0,r=0;l(t)||(t={});let s=t.unitary=nt.clone(nt.IDENTITY,t.unitary),a=t.diagonal=nt.clone(e,t.diagonal),c=n*y1e(a);for(;r<i&&x1e(a)>c;)_1e(a,iN),nt.transpose(iN,Vq),nt.multiply(a,iN,a),nt.multiply(Vq,a,a),nt.multiply(s,iN,s),++o>2&&(++r,o=0);return t};nt.abs=function(e,t){return t[0]=Math.abs(e[0]),t[1]=Math.abs(e[1]),t[2]=Math.abs(e[2]),t[3]=Math.abs(e[3]),t[4]=Math.abs(e[4]),t[5]=Math.abs(e[5]),t[6]=Math.abs(e[6]),t[7]=Math.abs(e[7]),t[8]=Math.abs(e[8]),t};nt.determinant=function(e){let t=e[0],n=e[3],i=e[6],o=e[1],r=e[4],s=e[7],a=e[2],c=e[5],d=e[8];return t*(r*d-c*s)+o*(c*i-n*d)+a*(n*s-r*i)};nt.inverse=function(e,t){let n=e[0],i=e[1],o=e[2],r=e[3],s=e[4],a=e[5],c=e[6],d=e[7],u=e[8],h=nt.determinant(e);t[0]=s*u-d*a,t[1]=d*o-i*u,t[2]=i*a-s*o,t[3]=c*a-r*u,t[4]=n*u-c*o,t[5]=r*o-n*a,t[6]=r*d-c*s,t[7]=c*i-n*d,t[8]=n*s-r*i;let p=1/h;return nt.multiplyByScalar(t,p,t)};var T1e=new nt;nt.inverseTranspose=function(e,t){return nt.inverse(nt.transpose(e,T1e),t)};nt.equals=function(e,t){return e===t||l(e)&&l(t)&&e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]&&e[4]===t[4]&&e[5]===t[5]&&e[6]===t[6]&&e[7]===t[7]&&e[8]===t[8]};nt.equalsEpsilon=function(e,t,n){return n=n??0,e===t||l(e)&&l(t)&&Math.abs(e[0]-t[0])<=n&&Math.abs(e[1]-t[1])<=n&&Math.abs(e[2]-t[2])<=n&&Math.abs(e[3]-t[3])<=n&&Math.abs(e[4]-t[4])<=n&&Math.abs(e[5]-t[5])<=n&&Math.abs(e[6]-t[6])<=n&&Math.abs(e[7]-t[7])<=n&&Math.abs(e[8]-t[8])<=n};nt.IDENTITY=Object.freeze(new nt(1,0,0,0,1,0,0,0,1));nt.ZERO=Object.freeze(new nt(0,0,0,0,0,0,0,0,0));nt.COLUMN0ROW0=0;nt.COLUMN0ROW1=1;nt.COLUMN0ROW2=2;nt.COLUMN1ROW0=3;nt.COLUMN1ROW1=4;nt.COLUMN1ROW2=5;nt.COLUMN2ROW0=6;nt.COLUMN2ROW1=7;nt.COLUMN2ROW2=8;Object.defineProperties(nt.prototype,{length:{get:function(){return nt.packedLength}}});nt.prototype.clone=function(e){return nt.clone(this,e)};nt.prototype.equals=function(e){return nt.equals(this,e)};nt.equalsArray=function(e,t,n){return e[0]===t[n]&&e[1]===t[n+1]&&e[2]===t[n+2]&&e[3]===t[n+3]&&e[4]===t[n+4]&&e[5]===t[n+5]&&e[6]===t[n+6]&&e[7]===t[n+7]&&e[8]===t[n+8]};nt.prototype.equalsEpsilon=function(e,t){return nt.equalsEpsilon(this,e,t)};nt.prototype.toString=function(){return`(${this[0]}, ${this[3]}, ${this[6]}) (${this[1]}, ${this[4]}, ${this[7]}) (${this[2]}, ${this[5]}, ${this[8]})`};var $=nt;var dLt=_(T(),1);function zL(e){this.name="RuntimeError",this.message=e;let t;try{throw new Error}catch(n){t=n.stack}this.stack=t}l(Object.create)&&(zL.prototype=Object.create(Error.prototype),zL.prototype.constructor=zL);zL.prototype.toString=function(){let e=`${this.name}: ${this.message}`;return l(this.stack)&&(e+=` ${this.stack.toString()}`),e};var ae=zL;function tt(e,t,n,i,o,r,s,a,c,d,u,h,p,g,f,y){this[0]=e??0,this[1]=o??0,this[2]=c??0,this[3]=p??0,this[4]=t??0,this[5]=r??0,this[6]=d??0,this[7]=g??0,this[8]=n??0,this[9]=s??0,this[10]=u??0,this[11]=f??0,this[12]=i??0,this[13]=a??0,this[14]=h??0,this[15]=y??0}tt.packedLength=16;tt.pack=function(e,t,n){return n=n??0,t[n++]=e[0],t[n++]=e[1],t[n++]=e[2],t[n++]=e[3],t[n++]=e[4],t[n++]=e[5],t[n++]=e[6],t[n++]=e[7],t[n++]=e[8],t[n++]=e[9],t[n++]=e[10],t[n++]=e[11],t[n++]=e[12],t[n++]=e[13],t[n++]=e[14],t[n]=e[15],t};tt.unpack=function(e,t,n){return t=t??0,l(n)||(n=new tt),n[0]=e[t++],n[1]=e[t++],n[2]=e[t++],n[3]=e[t++],n[4]=e[t++],n[5]=e[t++],n[6]=e[t++],n[7]=e[t++],n[8]=e[t++],n[9]=e[t++],n[10]=e[t++],n[11]=e[t++],n[12]=e[t++],n[13]=e[t++],n[14]=e[t++],n[15]=e[t],n};tt.packArray=function(e,t){let n=e.length,i=n*16;l(t)?!Array.isArray(t)&&t.length!==i||t.length!==i&&(t.length=i):t=new Array(i);for(let o=0;o<n;++o)tt.pack(e[o],t,o*16);return t};tt.unpackArray=function(e,t){let n=e.length;l(t)?t.length=n/16:t=new Array(n/16);for(let i=0;i<n;i+=16){let o=i/16;t[o]=tt.unpack(e,i,t[o])}return t};tt.clone=function(e,t){if(l(e))return l(t)?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t):new tt(e[0],e[4],e[8],e[12],e[1],e[5],e[9],e[13],e[2],e[6],e[10],e[14],e[3],e[7],e[11],e[15])};tt.fromArray=tt.unpack;tt.fromColumnMajorArray=function(e,t){return tt.clone(e,t)};tt.fromRowMajorArray=function(e,t){return l(t)?(t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=e[1],t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=e[2],t[9]=e[6],t[10]=e[10],t[11]=e[14],t[12]=e[3],t[13]=e[7],t[14]=e[11],t[15]=e[15],t):new tt(e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8],e[9],e[10],e[11],e[12],e[13],e[14],e[15])};tt.fromRotationTranslation=function(e,t,n){return t=t??m.ZERO,l(n)?(n[0]=e[0],n[1]=e[1],n[2]=e[2],n[3]=0,n[4]=e[3],n[5]=e[4],n[6]=e[5],n[7]=0,n[8]=e[6],n[9]=e[7],n[10]=e[8],n[11]=0,n[12]=t.x,n[13]=t.y,n[14]=t.z,n[15]=1,n):new tt(e[0],e[3],e[6],t.x,e[1],e[4],e[7],t.y,e[2],e[5],e[8],t.z,0,0,0,1)};tt.fromTranslationQuaternionRotationScale=function(e,t,n,i){l(i)||(i=new tt);let o=n.x,r=n.y,s=n.z,a=t.x*t.x,c=t.x*t.y,d=t.x*t.z,u=t.x*t.w,h=t.y*t.y,p=t.y*t.z,g=t.y*t.w,f=t.z*t.z,y=t.z*t.w,x=t.w*t.w,S=a-h-f+x,C=2*(c-y),V=2*(d+g),L=2*(c+y),Z=-a+h-f+x,E=2*(p-u),P=2*(d-g),W=2*(p+u),v=-a-h+f+x;return i[0]=S*o,i[1]=L*o,i[2]=P*o,i[3]=0,i[4]=C*r,i[5]=Z*r,i[6]=W*r,i[7]=0,i[8]=V*s,i[9]=E*s,i[10]=v*s,i[11]=0,i[12]=e.x,i[13]=e.y,i[14]=e.z,i[15]=1,i};tt.fromTranslationRotationScale=function(e,t){return tt.fromTranslationQuaternionRotationScale(e.translation,e.rotation,e.scale,t)};tt.fromTranslation=function(e,t){return tt.fromRotationTranslation($.IDENTITY,e,t)};tt.fromScale=function(e,t){return l(t)?(t[0]=e.x,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=e.y,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=e.z,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t):new tt(e.x,0,0,0,0,e.y,0,0,0,0,e.z,0,0,0,0,1)};tt.fromUniformScale=function(e,t){return l(t)?(t[0]=e,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=e,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=e,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t):new tt(e,0,0,0,0,e,0,0,0,0,e,0,0,0,0,1)};tt.fromRotation=function(e,t){return l(t)||(t=new tt),t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=0,t[4]=e[3],t[5]=e[4],t[6]=e[5],t[7]=0,t[8]=e[6],t[9]=e[7],t[10]=e[8],t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t};var NS=new m,kS=new m,HL=new m;tt.fromCamera=function(e,t){let n=e.position,i=e.direction,o=e.up;m.normalize(i,NS),m.normalize(m.cross(NS,o,kS),kS),m.normalize(m.cross(kS,NS,HL),HL);let r=kS.x,s=kS.y,a=kS.z,c=NS.x,d=NS.y,u=NS.z,h=HL.x,p=HL.y,g=HL.z,f=n.x,y=n.y,x=n.z,S=r*-f+s*-y+a*-x,C=h*-f+p*-y+g*-x,V=c*f+d*y+u*x;return l(t)?(t[0]=r,t[1]=h,t[2]=-c,t[3]=0,t[4]=s,t[5]=p,t[6]=-d,t[7]=0,t[8]=a,t[9]=g,t[10]=-u,t[11]=0,t[12]=S,t[13]=C,t[14]=V,t[15]=1,t):new tt(r,s,a,S,h,p,g,C,-c,-d,-u,V,0,0,0,1)};tt.computePerspectiveFieldOfView=function(e,t,n,i,o){let s=1/Math.tan(e*.5),a=s/t,c=(i+n)/(n-i),d=2*i*n/(n-i);return o[0]=a,o[1]=0,o[2]=0,o[3]=0,o[4]=0,o[5]=s,o[6]=0,o[7]=0,o[8]=0,o[9]=0,o[10]=c,o[11]=-1,o[12]=0,o[13]=0,o[14]=d,o[15]=0,o};tt.computeOrthographicOffCenter=function(e,t,n,i,o,r,s){let a=1/(t-e),c=1/(i-n),d=1/(r-o),u=-(t+e)*a,h=-(i+n)*c,p=-(r+o)*d;return a*=2,c*=2,d*=-2,s[0]=a,s[1]=0,s[2]=0,s[3]=0,s[4]=0,s[5]=c,s[6]=0,s[7]=0,s[8]=0,s[9]=0,s[10]=d,s[11]=0,s[12]=u,s[13]=h,s[14]=p,s[15]=1,s};tt.computePerspectiveOffCenter=function(e,t,n,i,o,r,s){let a=2*o/(t-e),c=2*o/(i-n),d=(t+e)/(t-e),u=(i+n)/(i-n),h=-(r+o)/(r-o),p=-1,g=-2*r*o/(r-o);return s[0]=a,s[1]=0,s[2]=0,s[3]=0,s[4]=0,s[5]=c,s[6]=0,s[7]=0,s[8]=d,s[9]=u,s[10]=h,s[11]=p,s[12]=0,s[13]=0,s[14]=g,s[15]=0,s};tt.computeInfinitePerspectiveOffCenter=function(e,t,n,i,o,r){let s=2*o/(t-e),a=2*o/(i-n),c=(t+e)/(t-e),d=(i+n)/(i-n),u=-1,h=-1,p=-2*o;return r[0]=s,r[1]=0,r[2]=0,r[3]=0,r[4]=0,r[5]=a,r[6]=0,r[7]=0,r[8]=c,r[9]=d,r[10]=u,r[11]=h,r[12]=0,r[13]=0,r[14]=p,r[15]=0,r};tt.computeViewportTransformation=function(e,t,n,i){l(i)||(i=new tt),e=e??Y.EMPTY_OBJECT;let o=e.x??0,r=e.y??0,s=e.width??0,a=e.height??0;t=t??0,n=n??1;let c=s*.5,d=a*.5,u=(n-t)*.5,h=c,p=d,g=u,f=o+c,y=r+d,x=t+u,S=1;return i[0]=h,i[1]=0,i[2]=0,i[3]=0,i[4]=0,i[5]=p,i[6]=0,i[7]=0,i[8]=0,i[9]=0,i[10]=g,i[11]=0,i[12]=f,i[13]=y,i[14]=x,i[15]=S,i};tt.computeView=function(e,t,n,i,o){return o[0]=i.x,o[1]=n.x,o[2]=-t.x,o[3]=0,o[4]=i.y,o[5]=n.y,o[6]=-t.y,o[7]=0,o[8]=i.z,o[9]=n.z,o[10]=-t.z,o[11]=0,o[12]=-m.dot(i,e),o[13]=-m.dot(n,e),o[14]=m.dot(t,e),o[15]=1,o};tt.toArray=function(e,t){return l(t)?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t):[e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7],e[8],e[9],e[10],e[11],e[12],e[13],e[14],e[15]]};tt.getElementIndex=function(e,t){return e*4+t};tt.getColumn=function(e,t,n){let i=t*4,o=e[i],r=e[i+1],s=e[i+2],a=e[i+3];return n.x=o,n.y=r,n.z=s,n.w=a,n};tt.setColumn=function(e,t,n,i){i=tt.clone(e,i);let o=t*4;return i[o]=n.x,i[o+1]=n.y,i[o+2]=n.z,i[o+3]=n.w,i};tt.getRow=function(e,t,n){let i=e[t],o=e[t+4],r=e[t+8],s=e[t+12];return n.x=i,n.y=o,n.z=r,n.w=s,n};tt.setRow=function(e,t,n,i){return i=tt.clone(e,i),i[t]=n.x,i[t+4]=n.y,i[t+8]=n.z,i[t+12]=n.w,i};tt.setTranslation=function(e,t,n){return n[0]=e[0],n[1]=e[1],n[2]=e[2],n[3]=e[3],n[4]=e[4],n[5]=e[5],n[6]=e[6],n[7]=e[7],n[8]=e[8],n[9]=e[9],n[10]=e[10],n[11]=e[11],n[12]=t.x,n[13]=t.y,n[14]=t.z,n[15]=e[15],n};var S1e=new m;tt.setScale=function(e,t,n){let i=tt.getScale(e,S1e),o=t.x/i.x,r=t.y/i.y,s=t.z/i.z;return n[0]=e[0]*o,n[1]=e[1]*o,n[2]=e[2]*o,n[3]=e[3],n[4]=e[4]*r,n[5]=e[5]*r,n[6]=e[6]*r,n[7]=e[7],n[8]=e[8]*s,n[9]=e[9]*s,n[10]=e[10]*s,n[11]=e[11],n[12]=e[12],n[13]=e[13],n[14]=e[14],n[15]=e[15],n};var C1e=new m;tt.setUniformScale=function(e,t,n){let i=tt.getScale(e,C1e),o=t/i.x,r=t/i.y,s=t/i.z;return n[0]=e[0]*o,n[1]=e[1]*o,n[2]=e[2]*o,n[3]=e[3],n[4]=e[4]*r,n[5]=e[5]*r,n[6]=e[6]*r,n[7]=e[7],n[8]=e[8]*s,n[9]=e[9]*s,n[10]=e[10]*s,n[11]=e[11],n[12]=e[12],n[13]=e[13],n[14]=e[14],n[15]=e[15],n};var HB=new m;tt.getScale=function(e,t){return t.x=m.magnitude(m.fromElements(e[0],e[1],e[2],HB)),t.y=m.magnitude(m.fromElements(e[4],e[5],e[6],HB)),t.z=m.magnitude(m.fromElements(e[8],e[9],e[10],HB)),t};var Lq=new m;tt.getMaximumScale=function(e){return tt.getScale(e,Lq),m.maximumComponent(Lq)};var V1e=new m;tt.setRotation=function(e,t,n){let i=tt.getScale(e,V1e);return n[0]=t[0]*i.x,n[1]=t[1]*i.x,n[2]=t[2]*i.x,n[3]=e[3],n[4]=t[3]*i.y,n[5]=t[4]*i.y,n[6]=t[5]*i.y,n[7]=e[7],n[8]=t[6]*i.z,n[9]=t[7]*i.z,n[10]=t[8]*i.z,n[11]=e[11],n[12]=e[12],n[13]=e[13],n[14]=e[14],n[15]=e[15],n};var L1e=new m;tt.getRotation=function(e,t){let n=tt.getScale(e,L1e);return t[0]=e[0]/n.x,t[1]=e[1]/n.x,t[2]=e[2]/n.x,t[3]=e[4]/n.y,t[4]=e[5]/n.y,t[5]=e[6]/n.y,t[6]=e[8]/n.z,t[7]=e[9]/n.z,t[8]=e[10]/n.z,t};tt.multiply=function(e,t,n){let i=e[0],o=e[1],r=e[2],s=e[3],a=e[4],c=e[5],d=e[6],u=e[7],h=e[8],p=e[9],g=e[10],f=e[11],y=e[12],x=e[13],S=e[14],C=e[15],V=t[0],L=t[1],Z=t[2],E=t[3],P=t[4],W=t[5],v=t[6],A=t[7],b=t[8],R=t[9],G=t[10],I=t[11],w=t[12],M=t[13],B=t[14],k=t[15],O=i*V+a*L+h*Z+y*E,N=o*V+c*L+p*Z+x*E,z=r*V+d*L+g*Z+S*E,K=s*V+u*L+f*Z+C*E,te=i*P+a*W+h*v+y*A,H=o*P+c*W+p*v+x*A,j=r*P+d*W+g*v+S*A,ee=s*P+u*W+f*v+C*A,fe=i*b+a*R+h*G+y*I,Te=o*b+c*R+p*G+x*I,de=r*b+d*R+g*G+S*I,xe=s*b+u*R+f*G+C*I,Ce=i*w+a*M+h*B+y*k,Ie=o*w+c*M+p*B+x*k,Le=r*w+d*M+g*B+S*k,Ne=s*w+u*M+f*B+C*k;return n[0]=O,n[1]=N,n[2]=z,n[3]=K,n[4]=te,n[5]=H,n[6]=j,n[7]=ee,n[8]=fe,n[9]=Te,n[10]=de,n[11]=xe,n[12]=Ce,n[13]=Ie,n[14]=Le,n[15]=Ne,n};tt.add=function(e,t,n){return n[0]=e[0]+t[0],n[1]=e[1]+t[1],n[2]=e[2]+t[2],n[3]=e[3]+t[3],n[4]=e[4]+t[4],n[5]=e[5]+t[5],n[6]=e[6]+t[6],n[7]=e[7]+t[7],n[8]=e[8]+t[8],n[9]=e[9]+t[9],n[10]=e[10]+t[10],n[11]=e[11]+t[11],n[12]=e[12]+t[12],n[13]=e[13]+t[13],n[14]=e[14]+t[14],n[15]=e[15]+t[15],n};tt.subtract=function(e,t,n){return n[0]=e[0]-t[0],n[1]=e[1]-t[1],n[2]=e[2]-t[2],n[3]=e[3]-t[3],n[4]=e[4]-t[4],n[5]=e[5]-t[5],n[6]=e[6]-t[6],n[7]=e[7]-t[7],n[8]=e[8]-t[8],n[9]=e[9]-t[9],n[10]=e[10]-t[10],n[11]=e[11]-t[11],n[12]=e[12]-t[12],n[13]=e[13]-t[13],n[14]=e[14]-t[14],n[15]=e[15]-t[15],n};tt.multiplyTransformation=function(e,t,n){let i=e[0],o=e[1],r=e[2],s=e[4],a=e[5],c=e[6],d=e[8],u=e[9],h=e[10],p=e[12],g=e[13],f=e[14],y=t[0],x=t[1],S=t[2],C=t[4],V=t[5],L=t[6],Z=t[8],E=t[9],P=t[10],W=t[12],v=t[13],A=t[14],b=i*y+s*x+d*S,R=o*y+a*x+u*S,G=r*y+c*x+h*S,I=i*C+s*V+d*L,w=o*C+a*V+u*L,M=r*C+c*V+h*L,B=i*Z+s*E+d*P,k=o*Z+a*E+u*P,O=r*Z+c*E+h*P,N=i*W+s*v+d*A+p,z=o*W+a*v+u*A+g,K=r*W+c*v+h*A+f;return n[0]=b,n[1]=R,n[2]=G,n[3]=0,n[4]=I,n[5]=w,n[6]=M,n[7]=0,n[8]=B,n[9]=k,n[10]=O,n[11]=0,n[12]=N,n[13]=z,n[14]=K,n[15]=1,n};tt.multiplyByMatrix3=function(e,t,n){let i=e[0],o=e[1],r=e[2],s=e[4],a=e[5],c=e[6],d=e[8],u=e[9],h=e[10],p=t[0],g=t[1],f=t[2],y=t[3],x=t[4],S=t[5],C=t[6],V=t[7],L=t[8],Z=i*p+s*g+d*f,E=o*p+a*g+u*f,P=r*p+c*g+h*f,W=i*y+s*x+d*S,v=o*y+a*x+u*S,A=r*y+c*x+h*S,b=i*C+s*V+d*L,R=o*C+a*V+u*L,G=r*C+c*V+h*L;return n[0]=Z,n[1]=E,n[2]=P,n[3]=0,n[4]=W,n[5]=v,n[6]=A,n[7]=0,n[8]=b,n[9]=R,n[10]=G,n[11]=0,n[12]=e[12],n[13]=e[13],n[14]=e[14],n[15]=e[15],n};tt.multiplyByTranslation=function(e,t,n){let i=t.x,o=t.y,r=t.z,s=i*e[0]+o*e[4]+r*e[8]+e[12],a=i*e[1]+o*e[5]+r*e[9]+e[13],c=i*e[2]+o*e[6]+r*e[10]+e[14];return n[0]=e[0],n[1]=e[1],n[2]=e[2],n[3]=e[3],n[4]=e[4],n[5]=e[5],n[6]=e[6],n[7]=e[7],n[8]=e[8],n[9]=e[9],n[10]=e[10],n[11]=e[11],n[12]=s,n[13]=a,n[14]=c,n[15]=e[15],n};tt.multiplyByScale=function(e,t,n){let i=t.x,o=t.y,r=t.z;return i===1&&o===1&&r===1?tt.clone(e,n):(n[0]=i*e[0],n[1]=i*e[1],n[2]=i*e[2],n[3]=e[3],n[4]=o*e[4],n[5]=o*e[5],n[6]=o*e[6],n[7]=e[7],n[8]=r*e[8],n[9]=r*e[9],n[10]=r*e[10],n[11]=e[11],n[12]=e[12],n[13]=e[13],n[14]=e[14],n[15]=e[15],n)};tt.multiplyByUniformScale=function(e,t,n){return n[0]=e[0]*t,n[1]=e[1]*t,n[2]=e[2]*t,n[3]=e[3],n[4]=e[4]*t,n[5]=e[5]*t,n[6]=e[6]*t,n[7]=e[7],n[8]=e[8]*t,n[9]=e[9]*t,n[10]=e[10]*t,n[11]=e[11],n[12]=e[12],n[13]=e[13],n[14]=e[14],n[15]=e[15],n};tt.multiplyByVector=function(e,t,n){let i=t.x,o=t.y,r=t.z,s=t.w,a=e[0]*i+e[4]*o+e[8]*r+e[12]*s,c=e[1]*i+e[5]*o+e[9]*r+e[13]*s,d=e[2]*i+e[6]*o+e[10]*r+e[14]*s,u=e[3]*i+e[7]*o+e[11]*r+e[15]*s;return n.x=a,n.y=c,n.z=d,n.w=u,n};tt.multiplyByPointAsVector=function(e,t,n){let i=t.x,o=t.y,r=t.z,s=e[0]*i+e[4]*o+e[8]*r,a=e[1]*i+e[5]*o+e[9]*r,c=e[2]*i+e[6]*o+e[10]*r;return n.x=s,n.y=a,n.z=c,n};tt.multiplyByPoint=function(e,t,n){let i=t.x,o=t.y,r=t.z,s=e[0]*i+e[4]*o+e[8]*r+e[12],a=e[1]*i+e[5]*o+e[9]*r+e[13],c=e[2]*i+e[6]*o+e[10]*r+e[14];return n.x=s,n.y=a,n.z=c,n};tt.multiplyByScalar=function(e,t,n){return n[0]=e[0]*t,n[1]=e[1]*t,n[2]=e[2]*t,n[3]=e[3]*t,n[4]=e[4]*t,n[5]=e[5]*t,n[6]=e[6]*t,n[7]=e[7]*t,n[8]=e[8]*t,n[9]=e[9]*t,n[10]=e[10]*t,n[11]=e[11]*t,n[12]=e[12]*t,n[13]=e[13]*t,n[14]=e[14]*t,n[15]=e[15]*t,n};tt.negate=function(e,t){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t[4]=-e[4],t[5]=-e[5],t[6]=-e[6],t[7]=-e[7],t[8]=-e[8],t[9]=-e[9],t[10]=-e[10],t[11]=-e[11],t[12]=-e[12],t[13]=-e[13],t[14]=-e[14],t[15]=-e[15],t};tt.transpose=function(e,t){let n=e[1],i=e[2],o=e[3],r=e[6],s=e[7],a=e[11];return t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=n,t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=i,t[9]=r,t[10]=e[10],t[11]=e[14],t[12]=o,t[13]=s,t[14]=a,t[15]=e[15],t};tt.abs=function(e,t){return t[0]=Math.abs(e[0]),t[1]=Math.abs(e[1]),t[2]=Math.abs(e[2]),t[3]=Math.abs(e[3]),t[4]=Math.abs(e[4]),t[5]=Math.abs(e[5]),t[6]=Math.abs(e[6]),t[7]=Math.abs(e[7]),t[8]=Math.abs(e[8]),t[9]=Math.abs(e[9]),t[10]=Math.abs(e[10]),t[11]=Math.abs(e[11]),t[12]=Math.abs(e[12]),t[13]=Math.abs(e[13]),t[14]=Math.abs(e[14]),t[15]=Math.abs(e[15]),t};tt.equals=function(e,t){return e===t||l(e)&&l(t)&&e[12]===t[12]&&e[13]===t[13]&&e[14]===t[14]&&e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[4]===t[4]&&e[5]===t[5]&&e[6]===t[6]&&e[8]===t[8]&&e[9]===t[9]&&e[10]===t[10]&&e[3]===t[3]&&e[7]===t[7]&&e[11]===t[11]&&e[15]===t[15]};tt.equalsEpsilon=function(e,t,n){return n=n??0,e===t||l(e)&&l(t)&&Math.abs(e[0]-t[0])<=n&&Math.abs(e[1]-t[1])<=n&&Math.abs(e[2]-t[2])<=n&&Math.abs(e[3]-t[3])<=n&&Math.abs(e[4]-t[4])<=n&&Math.abs(e[5]-t[5])<=n&&Math.abs(e[6]-t[6])<=n&&Math.abs(e[7]-t[7])<=n&&Math.abs(e[8]-t[8])<=n&&Math.abs(e[9]-t[9])<=n&&Math.abs(e[10]-t[10])<=n&&Math.abs(e[11]-t[11])<=n&&Math.abs(e[12]-t[12])<=n&&Math.abs(e[13]-t[13])<=n&&Math.abs(e[14]-t[14])<=n&&Math.abs(e[15]-t[15])<=n};tt.getTranslation=function(e,t){return t.x=e[12],t.y=e[13],t.z=e[14],t};tt.getMatrix3=function(e,t){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[4],t[4]=e[5],t[5]=e[6],t[6]=e[8],t[7]=e[9],t[8]=e[10],t};var R1e=new $,Z1e=new $,G1e=new se,E1e=new se(0,0,0,1);tt.inverse=function(e,t){let n=e[0],i=e[4],o=e[8],r=e[12],s=e[1],a=e[5],c=e[9],d=e[13],u=e[2],h=e[6],p=e[10],g=e[14],f=e[3],y=e[7],x=e[11],S=e[15],C=p*S,V=g*x,L=h*S,Z=g*y,E=h*x,P=p*y,W=u*S,v=g*f,A=u*x,b=p*f,R=u*y,G=h*f,I=C*a+Z*c+E*d-(V*a+L*c+P*d),w=V*s+W*c+b*d-(C*s+v*c+A*d),M=L*s+v*a+R*d-(Z*s+W*a+G*d),B=P*s+A*a+G*c-(E*s+b*a+R*c),k=V*i+L*o+P*r-(C*i+Z*o+E*r),O=C*n+v*o+A*r-(V*n+W*o+b*r),N=Z*n+W*i+G*r-(L*n+v*i+R*r),z=E*n+b*i+R*o-(P*n+A*i+G*o);C=o*d,V=r*c,L=i*d,Z=r*a,E=i*c,P=o*a,W=n*d,v=r*s,A=n*c,b=o*s,R=n*a,G=i*s;let K=C*y+Z*x+E*S-(V*y+L*x+P*S),te=V*f+W*x+b*S-(C*f+v*x+A*S),H=L*f+v*y+R*S-(Z*f+W*y+G*S),j=P*f+A*y+G*x-(E*f+b*y+R*x),ee=L*p+P*g+V*h-(E*g+C*h+Z*p),fe=A*g+C*u+v*p-(W*p+b*g+V*u),Te=W*h+G*g+Z*u-(R*g+L*u+v*h),de=R*p+E*u+b*h-(A*h+G*p+P*u),xe=n*I+i*w+o*M+r*B;if(Math.abs(xe)<X.EPSILON21){if($.equalsEpsilon(tt.getMatrix3(e,R1e),Z1e,X.EPSILON7)&&se.equals(tt.getRow(e,3,G1e),E1e))return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=0,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=0,t[11]=0,t[12]=-e[12],t[13]=-e[13],t[14]=-e[14],t[15]=1,t;throw new ae("matrix is not invertible because its determinate is zero.")}return xe=1/xe,t[0]=I*xe,t[1]=w*xe,t[2]=M*xe,t[3]=B*xe,t[4]=k*xe,t[5]=O*xe,t[6]=N*xe,t[7]=z*xe,t[8]=K*xe,t[9]=te*xe,t[10]=H*xe,t[11]=j*xe,t[12]=ee*xe,t[13]=fe*xe,t[14]=Te*xe,t[15]=de*xe,t};tt.inverseTransformation=function(e,t){let n=e[0],i=e[1],o=e[2],r=e[4],s=e[5],a=e[6],c=e[8],d=e[9],u=e[10],h=e[12],p=e[13],g=e[14],f=-n*h-i*p-o*g,y=-r*h-s*p-a*g,x=-c*h-d*p-u*g;return t[0]=n,t[1]=r,t[2]=c,t[3]=0,t[4]=i,t[5]=s,t[6]=d,t[7]=0,t[8]=o,t[9]=a,t[10]=u,t[11]=0,t[12]=f,t[13]=y,t[14]=x,t[15]=1,t};var I1e=new tt;tt.inverseTranspose=function(e,t){return tt.inverse(tt.transpose(e,I1e),t)};tt.IDENTITY=Object.freeze(new tt(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1));tt.ZERO=Object.freeze(new tt(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0));tt.COLUMN0ROW0=0;tt.COLUMN0ROW1=1;tt.COLUMN0ROW2=2;tt.COLUMN0ROW3=3;tt.COLUMN1ROW0=4;tt.COLUMN1ROW1=5;tt.COLUMN1ROW2=6;tt.COLUMN1ROW3=7;tt.COLUMN2ROW0=8;tt.COLUMN2ROW1=9;tt.COLUMN2ROW2=10;tt.COLUMN2ROW3=11;tt.COLUMN3ROW0=12;tt.COLUMN3ROW1=13;tt.COLUMN3ROW2=14;tt.COLUMN3ROW3=15;Object.defineProperties(tt.prototype,{length:{get:function(){return tt.packedLength}}});tt.prototype.clone=function(e){return tt.clone(this,e)};tt.prototype.equals=function(e){return tt.equals(this,e)};tt.equalsArray=function(e,t,n){return e[0]===t[n]&&e[1]===t[n+1]&&e[2]===t[n+2]&&e[3]===t[n+3]&&e[4]===t[n+4]&&e[5]===t[n+5]&&e[6]===t[n+6]&&e[7]===t[n+7]&&e[8]===t[n+8]&&e[9]===t[n+9]&&e[10]===t[n+10]&&e[11]===t[n+11]&&e[12]===t[n+12]&&e[13]===t[n+13]&&e[14]===t[n+14]&&e[15]===t[n+15]};tt.prototype.equalsEpsilon=function(e,t){return tt.equalsEpsilon(this,e,t)};tt.prototype.toString=function(){return`(${this[0]}, ${this[4]}, ${this[8]}, ${this[12]}) (${this[1]}, ${this[5]}, ${this[9]}, ${this[13]}) (${this[2]}, ${this[6]}, ${this[10]}, ${this[14]}) (${this[3]}, ${this[7]}, ${this[11]}, ${this[15]})`};var F=tt;var TLt=_(T(),1),X1e={DEPTH_BUFFER_BIT:256,STENCIL_BUFFER_BIT:1024,COLOR_BUFFER_BIT:16384,POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6,ZERO:0,ONE:1,SRC_COLOR:768,ONE_MINUS_SRC_COLOR:769,SRC_ALPHA:770,ONE_MINUS_SRC_ALPHA:771,DST_ALPHA:772,ONE_MINUS_DST_ALPHA:773,DST_COLOR:774,ONE_MINUS_DST_COLOR:775,SRC_ALPHA_SATURATE:776,FUNC_ADD:32774,BLEND_EQUATION:32777,BLEND_EQUATION_RGB:32777,BLEND_EQUATION_ALPHA:34877,FUNC_SUBTRACT:32778,FUNC_REVERSE_SUBTRACT:32779,BLEND_DST_RGB:32968,BLEND_SRC_RGB:32969,BLEND_DST_ALPHA:32970,BLEND_SRC_ALPHA:32971,CONSTANT_COLOR:32769,ONE_MINUS_CONSTANT_COLOR:32770,CONSTANT_ALPHA:32771,ONE_MINUS_CONSTANT_ALPHA:32772,BLEND_COLOR:32773,ARRAY_BUFFER:34962,ELEMENT_ARRAY_BUFFER:34963,ARRAY_BUFFER_BINDING:34964,ELEMENT_ARRAY_BUFFER_BINDING:34965,STREAM_DRAW:35040,STATIC_DRAW:35044,DYNAMIC_DRAW:35048,BUFFER_SIZE:34660,BUFFER_USAGE:34661,CURRENT_VERTEX_ATTRIB:34342,FRONT:1028,BACK:1029,FRONT_AND_BACK:1032,CULL_FACE:2884,BLEND:3042,DITHER:3024,STENCIL_TEST:2960,DEPTH_TEST:2929,SCISSOR_TEST:3089,POLYGON_OFFSET_FILL:32823,SAMPLE_ALPHA_TO_COVERAGE:32926,SAMPLE_COVERAGE:32928,NO_ERROR:0,INVALID_ENUM:1280,INVALID_VALUE:1281,INVALID_OPERATION:1282,OUT_OF_MEMORY:1285,CW:2304,CCW:2305,LINE_WIDTH:2849,ALIASED_POINT_SIZE_RANGE:33901,ALIASED_LINE_WIDTH_RANGE:33902,CULL_FACE_MODE:2885,FRONT_FACE:2886,DEPTH_RANGE:2928,DEPTH_WRITEMASK:2930,DEPTH_CLEAR_VALUE:2931,DEPTH_FUNC:2932,STENCIL_CLEAR_VALUE:2961,STENCIL_FUNC:2962,STENCIL_FAIL:2964,STENCIL_PASS_DEPTH_FAIL:2965,STENCIL_PASS_DEPTH_PASS:2966,STENCIL_REF:2967,STENCIL_VALUE_MASK:2963,STENCIL_WRITEMASK:2968,STENCIL_BACK_FUNC:34816,STENCIL_BACK_FAIL:34817,STENCIL_BACK_PASS_DEPTH_FAIL:34818,STENCIL_BACK_PASS_DEPTH_PASS:34819,STENCIL_BACK_REF:36003,STENCIL_BACK_VALUE_MASK:36004,STENCIL_BACK_WRITEMASK:36005,VIEWPORT:2978,SCISSOR_BOX:3088,COLOR_CLEAR_VALUE:3106,COLOR_WRITEMASK:3107,UNPACK_ALIGNMENT:3317,PACK_ALIGNMENT:3333,MAX_TEXTURE_SIZE:3379,MAX_VIEWPORT_DIMS:3386,SUBPIXEL_BITS:3408,RED_BITS:3410,GREEN_BITS:3411,BLUE_BITS:3412,ALPHA_BITS:3413,DEPTH_BITS:3414,STENCIL_BITS:3415,POLYGON_OFFSET_UNITS:10752,POLYGON_OFFSET_FACTOR:32824,TEXTURE_BINDING_2D:32873,SAMPLE_BUFFERS:32936,SAMPLES:32937,SAMPLE_COVERAGE_VALUE:32938,SAMPLE_COVERAGE_INVERT:32939,COMPRESSED_TEXTURE_FORMATS:34467,DONT_CARE:4352,FASTEST:4353,NICEST:4354,GENERATE_MIPMAP_HINT:33170,BYTE:5120,UNSIGNED_BYTE:5121,SHORT:5122,UNSIGNED_SHORT:5123,INT:5124,UNSIGNED_INT:5125,FLOAT:5126,DEPTH_COMPONENT:6402,ALPHA:6406,RGB:6407,RGBA:6408,LUMINANCE:6409,LUMINANCE_ALPHA:6410,UNSIGNED_SHORT_4_4_4_4:32819,UNSIGNED_SHORT_5_5_5_1:32820,UNSIGNED_SHORT_5_6_5:33635,FRAGMENT_SHADER:35632,VERTEX_SHADER:35633,MAX_VERTEX_ATTRIBS:34921,MAX_VERTEX_UNIFORM_VECTORS:36347,MAX_VARYING_VECTORS:36348,MAX_COMBINED_TEXTURE_IMAGE_UNITS:35661,MAX_VERTEX_TEXTURE_IMAGE_UNITS:35660,MAX_TEXTURE_IMAGE_UNITS:34930,MAX_FRAGMENT_UNIFORM_VECTORS:36349,SHADER_TYPE:35663,DELETE_STATUS:35712,LINK_STATUS:35714,VALIDATE_STATUS:35715,ATTACHED_SHADERS:35717,ACTIVE_UNIFORMS:35718,ACTIVE_ATTRIBUTES:35721,SHADING_LANGUAGE_VERSION:35724,CURRENT_PROGRAM:35725,NEVER:512,LESS:513,EQUAL:514,LEQUAL:515,GREATER:516,NOTEQUAL:517,GEQUAL:518,ALWAYS:519,KEEP:7680,REPLACE:7681,INCR:7682,DECR:7683,INVERT:5386,INCR_WRAP:34055,DECR_WRAP:34056,VENDOR:7936,RENDERER:7937,VERSION:7938,NEAREST:9728,LINEAR:9729,NEAREST_MIPMAP_NEAREST:9984,LINEAR_MIPMAP_NEAREST:9985,NEAREST_MIPMAP_LINEAR:9986,LINEAR_MIPMAP_LINEAR:9987,TEXTURE_MAG_FILTER:10240,TEXTURE_MIN_FILTER:10241,TEXTURE_WRAP_S:10242,TEXTURE_WRAP_T:10243,TEXTURE_2D:3553,TEXTURE:5890,TEXTURE_CUBE_MAP:34067,TEXTURE_BINDING_CUBE_MAP:34068,TEXTURE_CUBE_MAP_POSITIVE_X:34069,TEXTURE_CUBE_MAP_NEGATIVE_X:34070,TEXTURE_CUBE_MAP_POSITIVE_Y:34071,TEXTURE_CUBE_MAP_NEGATIVE_Y:34072,TEXTURE_CUBE_MAP_POSITIVE_Z:34073,TEXTURE_CUBE_MAP_NEGATIVE_Z:34074,MAX_CUBE_MAP_TEXTURE_SIZE:34076,TEXTURE0:33984,TEXTURE1:33985,TEXTURE2:33986,TEXTURE3:33987,TEXTURE4:33988,TEXTURE5:33989,TEXTURE6:33990,TEXTURE7:33991,TEXTURE8:33992,TEXTURE9:33993,TEXTURE10:33994,TEXTURE11:33995,TEXTURE12:33996,TEXTURE13:33997,TEXTURE14:33998,TEXTURE15:33999,TEXTURE16:34e3,TEXTURE17:34001,TEXTURE18:34002,TEXTURE19:34003,TEXTURE20:34004,TEXTURE21:34005,TEXTURE22:34006,TEXTURE23:34007,TEXTURE24:34008,TEXTURE25:34009,TEXTURE26:34010,TEXTURE27:34011,TEXTURE28:34012,TEXTURE29:34013,TEXTURE30:34014,TEXTURE31:34015,ACTIVE_TEXTURE:34016,REPEAT:10497,CLAMP_TO_EDGE:33071,MIRRORED_REPEAT:33648,FLOAT_VEC2:35664,FLOAT_VEC3:35665,FLOAT_VEC4:35666,INT_VEC2:35667,INT_VEC3:35668,INT_VEC4:35669,BOOL:35670,BOOL_VEC2:35671,BOOL_VEC3:35672,BOOL_VEC4:35673,FLOAT_MAT2:35674,FLOAT_MAT3:35675,FLOAT_MAT4:35676,SAMPLER_2D:35678,SAMPLER_CUBE:35680,VERTEX_ATTRIB_ARRAY_ENABLED:34338,VERTEX_ATTRIB_ARRAY_SIZE:34339,VERTEX_ATTRIB_ARRAY_STRIDE:34340,VERTEX_ATTRIB_ARRAY_TYPE:34341,VERTEX_ATTRIB_ARRAY_NORMALIZED:34922,VERTEX_ATTRIB_ARRAY_POINTER:34373,VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:34975,IMPLEMENTATION_COLOR_READ_TYPE:35738,IMPLEMENTATION_COLOR_READ_FORMAT:35739,COMPILE_STATUS:35713,LOW_FLOAT:36336,MEDIUM_FLOAT:36337,HIGH_FLOAT:36338,LOW_INT:36339,MEDIUM_INT:36340,HIGH_INT:36341,FRAMEBUFFER:36160,RENDERBUFFER:36161,RGBA4:32854,RGB5_A1:32855,RGB565:36194,DEPTH_COMPONENT16:33189,STENCIL_INDEX:6401,STENCIL_INDEX8:36168,DEPTH_STENCIL:34041,RENDERBUFFER_WIDTH:36162,RENDERBUFFER_HEIGHT:36163,RENDERBUFFER_INTERNAL_FORMAT:36164,RENDERBUFFER_RED_SIZE:36176,RENDERBUFFER_GREEN_SIZE:36177,RENDERBUFFER_BLUE_SIZE:36178,RENDERBUFFER_ALPHA_SIZE:36179,RENDERBUFFER_DEPTH_SIZE:36180,RENDERBUFFER_STENCIL_SIZE:36181,FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:36048,FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:36049,FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:36050,FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE:36051,COLOR_ATTACHMENT0:36064,DEPTH_ATTACHMENT:36096,STENCIL_ATTACHMENT:36128,DEPTH_STENCIL_ATTACHMENT:33306,NONE:0,FRAMEBUFFER_COMPLETE:36053,FRAMEBUFFER_INCOMPLETE_ATTACHMENT:36054,FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:36055,FRAMEBUFFER_INCOMPLETE_DIMENSIONS:36057,FRAMEBUFFER_UNSUPPORTED:36061,FRAMEBUFFER_BINDING:36006,RENDERBUFFER_BINDING:36007,MAX_RENDERBUFFER_SIZE:34024,INVALID_FRAMEBUFFER_OPERATION:1286,UNPACK_FLIP_Y_WEBGL:37440,UNPACK_PREMULTIPLY_ALPHA_WEBGL:37441,CONTEXT_LOST_WEBGL:37442,UNPACK_COLORSPACE_CONVERSION_WEBGL:37443,BROWSER_DEFAULT_WEBGL:37444,COMPRESSED_RGB_S3TC_DXT1_EXT:33776,COMPRESSED_RGBA_S3TC_DXT1_EXT:33777,COMPRESSED_RGBA_S3TC_DXT3_EXT:33778,COMPRESSED_RGBA_S3TC_DXT5_EXT:33779,COMPRESSED_RGB_PVRTC_4BPPV1_IMG:35840,COMPRESSED_RGB_PVRTC_2BPPV1_IMG:35841,COMPRESSED_RGBA_PVRTC_4BPPV1_IMG:35842,COMPRESSED_RGBA_PVRTC_2BPPV1_IMG:35843,COMPRESSED_RGBA_ASTC_4x4_WEBGL:37808,COMPRESSED_RGB_ETC1_WEBGL:36196,COMPRESSED_RGBA_BPTC_UNORM:36492,HALF_FLOAT_OES:36193,DOUBLE:5130,READ_BUFFER:3074,UNPACK_ROW_LENGTH:3314,UNPACK_SKIP_ROWS:3315,UNPACK_SKIP_PIXELS:3316,PACK_ROW_LENGTH:3330,PACK_SKIP_ROWS:3331,PACK_SKIP_PIXELS:3332,COLOR:6144,DEPTH:6145,STENCIL:6146,RED:6403,RGB8:32849,RGBA8:32856,RGB10_A2:32857,TEXTURE_BINDING_3D:32874,UNPACK_SKIP_IMAGES:32877,UNPACK_IMAGE_HEIGHT:32878,TEXTURE_3D:32879,TEXTURE_WRAP_R:32882,MAX_3D_TEXTURE_SIZE:32883,UNSIGNED_INT_2_10_10_10_REV:33640,MAX_ELEMENTS_VERTICES:33e3,MAX_ELEMENTS_INDICES:33001,TEXTURE_MIN_LOD:33082,TEXTURE_MAX_LOD:33083,TEXTURE_BASE_LEVEL:33084,TEXTURE_MAX_LEVEL:33085,MIN:32775,MAX:32776,DEPTH_COMPONENT24:33190,MAX_TEXTURE_LOD_BIAS:34045,TEXTURE_COMPARE_MODE:34892,TEXTURE_COMPARE_FUNC:34893,CURRENT_QUERY:34917,QUERY_RESULT:34918,QUERY_RESULT_AVAILABLE:34919,STREAM_READ:35041,STREAM_COPY:35042,STATIC_READ:35045,STATIC_COPY:35046,DYNAMIC_READ:35049,DYNAMIC_COPY:35050,MAX_DRAW_BUFFERS:34852,DRAW_BUFFER0:34853,DRAW_BUFFER1:34854,DRAW_BUFFER2:34855,DRAW_BUFFER3:34856,DRAW_BUFFER4:34857,DRAW_BUFFER5:34858,DRAW_BUFFER6:34859,DRAW_BUFFER7:34860,DRAW_BUFFER8:34861,DRAW_BUFFER9:34862,DRAW_BUFFER10:34863,DRAW_BUFFER11:34864,DRAW_BUFFER12:34865,DRAW_BUFFER13:34866,DRAW_BUFFER14:34867,DRAW_BUFFER15:34868,MAX_FRAGMENT_UNIFORM_COMPONENTS:35657,MAX_VERTEX_UNIFORM_COMPONENTS:35658,SAMPLER_3D:35679,SAMPLER_2D_SHADOW:35682,FRAGMENT_SHADER_DERIVATIVE_HINT:35723,PIXEL_PACK_BUFFER:35051,PIXEL_UNPACK_BUFFER:35052,PIXEL_PACK_BUFFER_BINDING:35053,PIXEL_UNPACK_BUFFER_BINDING:35055,FLOAT_MAT2x3:35685,FLOAT_MAT2x4:35686,FLOAT_MAT3x2:35687,FLOAT_MAT3x4:35688,FLOAT_MAT4x2:35689,FLOAT_MAT4x3:35690,SRGB:35904,SRGB8:35905,SRGB8_ALPHA8:35907,COMPARE_REF_TO_TEXTURE:34894,RGBA32F:34836,RGB32F:34837,RGBA16F:34842,RGB16F:34843,VERTEX_ATTRIB_ARRAY_INTEGER:35069,MAX_ARRAY_TEXTURE_LAYERS:35071,MIN_PROGRAM_TEXEL_OFFSET:35076,MAX_PROGRAM_TEXEL_OFFSET:35077,MAX_VARYING_COMPONENTS:35659,TEXTURE_2D_ARRAY:35866,TEXTURE_BINDING_2D_ARRAY:35869,R11F_G11F_B10F:35898,UNSIGNED_INT_10F_11F_11F_REV:35899,RGB9_E5:35901,UNSIGNED_INT_5_9_9_9_REV:35902,TRANSFORM_FEEDBACK_BUFFER_MODE:35967,MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS:35968,TRANSFORM_FEEDBACK_VARYINGS:35971,TRANSFORM_FEEDBACK_BUFFER_START:35972,TRANSFORM_FEEDBACK_BUFFER_SIZE:35973,TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:35976,RASTERIZER_DISCARD:35977,MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS:35978,MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS:35979,INTERLEAVED_ATTRIBS:35980,SEPARATE_ATTRIBS:35981,TRANSFORM_FEEDBACK_BUFFER:35982,TRANSFORM_FEEDBACK_BUFFER_BINDING:35983,RGBA32UI:36208,RGB32UI:36209,RGBA16UI:36214,RGB16UI:36215,RGBA8UI:36220,RGB8UI:36221,RGBA32I:36226,RGB32I:36227,RGBA16I:36232,RGB16I:36233,RGBA8I:36238,RGB8I:36239,RED_INTEGER:36244,RGB_INTEGER:36248,RGBA_INTEGER:36249,SAMPLER_2D_ARRAY:36289,SAMPLER_2D_ARRAY_SHADOW:36292,SAMPLER_CUBE_SHADOW:36293,UNSIGNED_INT_VEC2:36294,UNSIGNED_INT_VEC3:36295,UNSIGNED_INT_VEC4:36296,INT_SAMPLER_2D:36298,INT_SAMPLER_3D:36299,INT_SAMPLER_CUBE:36300,INT_SAMPLER_2D_ARRAY:36303,UNSIGNED_INT_SAMPLER_2D:36306,UNSIGNED_INT_SAMPLER_3D:36307,UNSIGNED_INT_SAMPLER_CUBE:36308,UNSIGNED_INT_SAMPLER_2D_ARRAY:36311,DEPTH_COMPONENT32F:36012,DEPTH32F_STENCIL8:36013,FLOAT_32_UNSIGNED_INT_24_8_REV:36269,FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:33296,FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE:33297,FRAMEBUFFER_ATTACHMENT_RED_SIZE:33298,FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:33299,FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:33300,FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:33301,FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:33302,FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:33303,FRAMEBUFFER_DEFAULT:33304,UNSIGNED_INT_24_8:34042,DEPTH24_STENCIL8:35056,UNSIGNED_NORMALIZED:35863,DRAW_FRAMEBUFFER_BINDING:36006,READ_FRAMEBUFFER:36008,DRAW_FRAMEBUFFER:36009,READ_FRAMEBUFFER_BINDING:36010,RENDERBUFFER_SAMPLES:36011,FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER:36052,MAX_COLOR_ATTACHMENTS:36063,COLOR_ATTACHMENT1:36065,COLOR_ATTACHMENT2:36066,COLOR_ATTACHMENT3:36067,COLOR_ATTACHMENT4:36068,COLOR_ATTACHMENT5:36069,COLOR_ATTACHMENT6:36070,COLOR_ATTACHMENT7:36071,COLOR_ATTACHMENT8:36072,COLOR_ATTACHMENT9:36073,COLOR_ATTACHMENT10:36074,COLOR_ATTACHMENT11:36075,COLOR_ATTACHMENT12:36076,COLOR_ATTACHMENT13:36077,COLOR_ATTACHMENT14:36078,COLOR_ATTACHMENT15:36079,FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:36182,MAX_SAMPLES:36183,HALF_FLOAT:5131,RG:33319,RG_INTEGER:33320,R8:33321,RG8:33323,R16F:33325,R32F:33326,RG16F:33327,RG32F:33328,R8I:33329,R8UI:33330,R16I:33331,R16UI:33332,R32I:33333,R32UI:33334,RG8I:33335,RG8UI:33336,RG16I:33337,RG16UI:33338,RG32I:33339,RG32UI:33340,VERTEX_ARRAY_BINDING:34229,R8_SNORM:36756,RG8_SNORM:36757,RGB8_SNORM:36758,RGBA8_SNORM:36759,SIGNED_NORMALIZED:36764,COPY_READ_BUFFER:36662,COPY_WRITE_BUFFER:36663,COPY_READ_BUFFER_BINDING:36662,COPY_WRITE_BUFFER_BINDING:36663,UNIFORM_BUFFER:35345,UNIFORM_BUFFER_BINDING:35368,UNIFORM_BUFFER_START:35369,UNIFORM_BUFFER_SIZE:35370,MAX_VERTEX_UNIFORM_BLOCKS:35371,MAX_FRAGMENT_UNIFORM_BLOCKS:35373,MAX_COMBINED_UNIFORM_BLOCKS:35374,MAX_UNIFORM_BUFFER_BINDINGS:35375,MAX_UNIFORM_BLOCK_SIZE:35376,MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS:35377,MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS:35379,UNIFORM_BUFFER_OFFSET_ALIGNMENT:35380,ACTIVE_UNIFORM_BLOCKS:35382,UNIFORM_TYPE:35383,UNIFORM_SIZE:35384,UNIFORM_BLOCK_INDEX:35386,UNIFORM_OFFSET:35387,UNIFORM_ARRAY_STRIDE:35388,UNIFORM_MATRIX_STRIDE:35389,UNIFORM_IS_ROW_MAJOR:35390,UNIFORM_BLOCK_BINDING:35391,UNIFORM_BLOCK_DATA_SIZE:35392,UNIFORM_BLOCK_ACTIVE_UNIFORMS:35394,UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES:35395,UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER:35396,UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER:35398,INVALID_INDEX:4294967295,MAX_VERTEX_OUTPUT_COMPONENTS:37154,MAX_FRAGMENT_INPUT_COMPONENTS:37157,MAX_SERVER_WAIT_TIMEOUT:37137,OBJECT_TYPE:37138,SYNC_CONDITION:37139,SYNC_STATUS:37140,SYNC_FLAGS:37141,SYNC_FENCE:37142,SYNC_GPU_COMMANDS_COMPLETE:37143,UNSIGNALED:37144,SIGNALED:37145,ALREADY_SIGNALED:37146,TIMEOUT_EXPIRED:37147,CONDITION_SATISFIED:37148,WAIT_FAILED:37149,SYNC_FLUSH_COMMANDS_BIT:1,VERTEX_ATTRIB_ARRAY_DIVISOR:35070,ANY_SAMPLES_PASSED:35887,ANY_SAMPLES_PASSED_CONSERVATIVE:36202,SAMPLER_BINDING:35097,RGB10_A2UI:36975,INT_2_10_10_10_REV:36255,TRANSFORM_FEEDBACK:36386,TRANSFORM_FEEDBACK_PAUSED:36387,TRANSFORM_FEEDBACK_ACTIVE:36388,TRANSFORM_FEEDBACK_BINDING:36389,COMPRESSED_R11_EAC:37488,COMPRESSED_SIGNED_R11_EAC:37489,COMPRESSED_RG11_EAC:37490,COMPRESSED_SIGNED_RG11_EAC:37491,COMPRESSED_RGB8_ETC2:37492,COMPRESSED_SRGB8_ETC2:37493,COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:37494,COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:37495,COMPRESSED_RGBA8_ETC2_EAC:37496,COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:37497,TEXTURE_IMMUTABLE_FORMAT:37167,MAX_ELEMENT_INDEX:36203,TEXTURE_IMMUTABLE_LEVELS:33503,MAX_TEXTURE_MAX_ANISOTROPY_EXT:34047},ie=Object.freeze(X1e);var W1e=new m;function It(e){this._size=e.size,this._datatype=e.datatype,this.getValue=e.getValue}var da={};da[ie.FLOAT]="float";da[ie.FLOAT_VEC2]="vec2";da[ie.FLOAT_VEC3]="vec3";da[ie.FLOAT_VEC4]="vec4";da[ie.INT]="int";da[ie.INT_VEC2]="ivec2";da[ie.INT_VEC3]="ivec3";da[ie.INT_VEC4]="ivec4";da[ie.BOOL]="bool";da[ie.BOOL_VEC2]="bvec2";da[ie.BOOL_VEC3]="bvec3";da[ie.BOOL_VEC4]="bvec4";da[ie.FLOAT_MAT2]="mat2";da[ie.FLOAT_MAT3]="mat3";da[ie.FLOAT_MAT4]="mat4";da[ie.SAMPLER_2D]="sampler2D";da[ie.SAMPLER_CUBE]="samplerCube";It.prototype.getDeclaration=function(e){let t=`uniform ${da[this._datatype]} ${e}`,n=this._size;return n===1?t+=";":t+=`[${n.toString()}];`,t};var P1e={czm_viewport:new It({size:1,datatype:ie.FLOAT_VEC4,getValue:function(e){return e.viewportCartesian4}}),czm_viewportOrthographic:new It({size:1,datatype:ie.FLOAT_MAT4,getValue:function(e){return e.viewportOrthographic}}),czm_viewportTransformation:new It({size:1,datatype:ie.FLOAT_MAT4,getValue:function(e){return e.viewportTransformation}}),czm_globeDepthTexture:new It({size:1,datatype:ie.SAMPLER_2D,getValue:function(e){return e.globeDepthTexture}}),czm_model:new It({size:1,datatype:ie.FLOAT_MAT4,getValue:function(e){return e.model}}),czm_inverseModel:new It({size:1,datatype:ie.FLOAT_MAT4,getValue:function(e){return e.inverseModel}}),czm_view:new It({size:1,datatype:ie.FLOAT_MAT4,getValue:function(e){return e.view}}),czm_view3D:new It({size:1,datatype:ie.FLOAT_MAT4,getValue:function(e){return e.view3D}}),czm_viewRotation:new It({size:1,datatype:ie.FLOAT_MAT3,getValue:function(e){return e.viewRotation}}),czm_viewRotation3D:new It({size:1,datatype:ie.FLOAT_MAT3,getValue:function(e){return e.viewRotation3D}}),czm_inverseView:new It({size:1,datatype:ie.FLOAT_MAT4,getValue:function(e){return e.inverseView}}),czm_inverseView3D:new It({size:1,datatype:ie.FLOAT_MAT4,getValue:function(e){return e.inverseView3D}}),czm_inverseViewRotation:new It({size:1,datatype:ie.FLOAT_MAT3,getValue:function(e){return e.inverseViewRotation}}),czm_inverseViewRotation3D:new It({size:1,datatype:ie.FLOAT_MAT3,getValue:function(e){return e.inverseViewRotation3D}}),czm_projection:new It({size:1,datatype:ie.FLOAT_MAT4,getValue:function(e){return e.projection}}),czm_inverseProjection:new It({size:1,datatype:ie.FLOAT_MAT4,getValue:function(e){return e.inverseProjection}}),czm_infiniteProjection:new It({size:1,datatype:ie.FLOAT_MAT4,getValue:function(e){return e.infiniteProjection}}),czm_modelView:new It({size:1,datatype:ie.FLOAT_MAT4,getValue:function(e){return e.modelView}}),czm_modelView3D:new It({size:1,datatype:ie.FLOAT_MAT4,getValue:function(e){return e.modelView3D}}),czm_modelViewRelativeToEye:new It({size:1,datatype:ie.FLOAT_MAT4,getValue:function(e){return e.modelViewRelativeToEye}}),czm_inverseModelView:new It({size:1,datatype:ie.FLOAT_MAT4,getValue:function(e){return e.inverseModelView}}),czm_inverseModelView3D:new It({size:1,datatype:ie.FLOAT_MAT4,getValue:function(e){return e.inverseModelView3D}}),czm_viewProjection:new It({size:1,datatype:ie.FLOAT_MAT4,getValue:function(e){return e.viewProjection}}),czm_inverseViewProjection:new It({size:1,datatype:ie.FLOAT_MAT4,getValue:function(e){return e.inverseViewProjection}}),czm_modelViewProjection:new It({size:1,datatype:ie.FLOAT_MAT4,getValue:function(e){return e.modelViewProjection}}),czm_inverseModelViewProjection:new It({size:1,datatype:ie.FLOAT_MAT4,getValue:function(e){return e.inverseModelViewProjection}}),czm_modelViewProjectionRelativeToEye:new It({size:1,datatype:ie.FLOAT_MAT4,getValue:function(e){return e.modelViewProjectionRelativeToEye}}),czm_modelViewInfiniteProjection:new It({size:1,datatype:ie.FLOAT_MAT4,getValue:function(e){return e.modelViewInfiniteProjection}}),czm_orthographicIn3D:new It({size:1,datatype:ie.FLOAT,getValue:function(e){return e.orthographicIn3D?1:0}}),czm_normal:new It({size:1,datatype:ie.FLOAT_MAT3,getValue:function(e){return e.normal}}),czm_normal3D:new It({size:1,datatype:ie.FLOAT_MAT3,getValue:function(e){return e.normal3D}}),czm_inverseNormal:new It({size:1,datatype:ie.FLOAT_MAT3,getValue:function(e){return e.inverseNormal}}),czm_inverseNormal3D:new It({size:1,datatype:ie.FLOAT_MAT3,getValue:function(e){return e.inverseNormal3D}}),czm_eyeHeight:new It({size:1,datatype:ie.FLOAT,getValue:function(e){return e.eyeHeight}}),czm_eyeHeight2D:new It({size:1,datatype:ie.FLOAT_VEC2,getValue:function(e){return e.eyeHeight2D}}),czm_eyeEllipsoidNormalEC:new It({size:1,datatype:ie.FLOAT_VEC3,getValue:function(e){return e.eyeEllipsoidNormalEC}}),czm_eyeEllipsoidCurvature:new It({size:1,datatype:ie.FLOAT_VEC2,getValue:function(e){return e.eyeEllipsoidCurvature}}),czm_modelToEnu:new It({size:1,datatype:ie.FLOAT_MAT4,getValue:function(e){return e.modelToEnu}}),czm_enuToModel:new It({size:1,datatype:ie.FLOAT_MAT4,getValue:function(e){return e.enuToModel}}),czm_entireFrustum:new It({size:1,datatype:ie.FLOAT_VEC2,getValue:function(e){return e.entireFrustum}}),czm_currentFrustum:new It({size:1,datatype:ie.FLOAT_VEC2,getValue:function(e){return e.currentFrustum}}),czm_frustumPlanes:new It({size:1,datatype:ie.FLOAT_VEC4,getValue:function(e){return e.frustumPlanes}}),czm_farDepthFromNearPlusOne:new It({size:1,datatype:ie.FLOAT,getValue:function(e){return e.farDepthFromNearPlusOne}}),czm_log2FarDepthFromNearPlusOne:new It({size:1,datatype:ie.FLOAT,getValue:function(e){return e.log2FarDepthFromNearPlusOne}}),czm_oneOverLog2FarDepthFromNearPlusOne:new It({size:1,datatype:ie.FLOAT,getValue:function(e){return e.oneOverLog2FarDepthFromNearPlusOne}}),czm_sunPositionWC:new It({size:1,datatype:ie.FLOAT_VEC3,getValue:function(e){return e.sunPositionWC}}),czm_sunPositionColumbusView:new It({size:1,datatype:ie.FLOAT_VEC3,getValue:function(e){return e.sunPositionColumbusView}}),czm_sunDirectionEC:new It({size:1,datatype:ie.FLOAT_VEC3,getValue:function(e){return e.sunDirectionEC}}),czm_sunDirectionWC:new It({size:1,datatype:ie.FLOAT_VEC3,getValue:function(e){return e.sunDirectionWC}}),czm_moonDirectionEC:new It({size:1,datatype:ie.FLOAT_VEC3,getValue:function(e){return e.moonDirectionEC}}),czm_lightDirectionEC:new It({size:1,datatype:ie.FLOAT_VEC3,getValue:function(e){return e.lightDirectionEC}}),czm_lightDirectionWC:new It({size:1,datatype:ie.FLOAT_VEC3,getValue:function(e){return e.lightDirectionWC}}),czm_lightColor:new It({size:1,datatype:ie.FLOAT_VEC3,getValue:function(e){return e.lightColor}}),czm_lightColorHdr:new It({size:1,datatype:ie.FLOAT_VEC3,getValue:function(e){return e.lightColorHdr}}),czm_encodedCameraPositionMCHigh:new It({size:1,datatype:ie.FLOAT_VEC3,getValue:function(e){return e.encodedCameraPositionMCHigh}}),czm_encodedCameraPositionMCLow:new It({size:1,datatype:ie.FLOAT_VEC3,getValue:function(e){return e.encodedCameraPositionMCLow}}),czm_viewerPositionWC:new It({size:1,datatype:ie.FLOAT_VEC3,getValue:function(e){return F.getTranslation(e.inverseView,W1e)}}),czm_frameNumber:new It({size:1,datatype:ie.FLOAT,getValue:function(e){return e.frameState.frameNumber}}),czm_morphTime:new It({size:1,datatype:ie.FLOAT,getValue:function(e){return e.frameState.morphTime}}),czm_sceneMode:new It({size:1,datatype:ie.FLOAT,getValue:function(e){return e.frameState.mode}}),czm_pass:new It({size:1,datatype:ie.FLOAT,getValue:function(e){return e.pass}}),czm_backgroundColor:new It({size:1,datatype:ie.FLOAT_VEC4,getValue:function(e){return e.backgroundColor}}),czm_brdfLut:new It({size:1,datatype:ie.SAMPLER_2D,getValue:function(e){return e.brdfLut}}),czm_environmentMap:new It({size:1,datatype:ie.SAMPLER_CUBE,getValue:function(e){return e.environmentMap}}),czm_specularEnvironmentMaps:new It({size:1,datatype:ie.SAMPLER_CUBE,getValue:function(e){return e.specularEnvironmentMaps}}),czm_specularEnvironmentMapsMaximumLOD:new It({size:1,datatype:ie.FLOAT,getValue:function(e){return e.specularEnvironmentMapsMaximumLOD}}),czm_sphericalHarmonicCoefficients:new It({size:9,datatype:ie.FLOAT_VEC3,getValue:function(e){return e.sphericalHarmonicCoefficients}}),czm_temeToPseudoFixed:new It({size:1,datatype:ie.FLOAT_MAT3,getValue:function(e){return e.temeToPseudoFixedMatrix}}),czm_pixelRatio:new It({size:1,datatype:ie.FLOAT,getValue:function(e){return e.pixelRatio}}),czm_fogDensity:new It({size:1,datatype:ie.FLOAT,getValue:function(e){return e.fogDensity}}),czm_fogVisualDensityScalar:new It({size:1,datatype:ie.FLOAT,getValue:function(e){return e.fogVisualDensityScalar}}),czm_fogMinimumBrightness:new It({size:1,datatype:ie.FLOAT,getValue:function(e){return e.fogMinimumBrightness}}),czm_atmosphereHsbShift:new It({size:1,datatype:ie.FLOAT_VEC3,getValue:function(e){return e.atmosphereHsbShift}}),czm_atmosphereLightIntensity:new It({size:1,datatype:ie.FLOAT,getValue:function(e){return e.atmosphereLightIntensity}}),czm_atmosphereRayleighCoefficient:new It({size:1,datatype:ie.FLOAT_VEC3,getValue:function(e){return e.atmosphereRayleighCoefficient}}),czm_atmosphereRayleighScaleHeight:new It({size:1,datatype:ie.FLOAT,getValue:function(e){return e.atmosphereRayleighScaleHeight}}),czm_atmosphereMieCoefficient:new It({size:1,datatype:ie.FLOAT_VEC3,getValue:function(e){return e.atmosphereMieCoefficient}}),czm_atmosphereMieScaleHeight:new It({size:1,datatype:ie.FLOAT,getValue:function(e){return e.atmosphereMieScaleHeight}}),czm_atmosphereMieAnisotropy:new It({size:1,datatype:ie.FLOAT,getValue:function(e){return e.atmosphereMieAnisotropy}}),czm_atmosphereDynamicLighting:new It({size:1,datatype:ie.FLOAT,getValue:function(e){return e.atmosphereDynamicLighting}}),czm_splitPosition:new It({size:1,datatype:ie.FLOAT,getValue:function(e){return e.splitPosition}}),czm_geometricToleranceOverMeter:new It({size:1,datatype:ie.FLOAT,getValue:function(e){return e.geometricToleranceOverMeter}}),czm_minimumDisableDepthTestDistance:new It({size:1,datatype:ie.FLOAT,getValue:function(e){return e.minimumDisableDepthTestDistance}}),czm_invertClassificationColor:new It({size:1,datatype:ie.FLOAT_VEC4,getValue:function(e){return e.invertClassificationColor}}),czm_gamma:new It({size:1,datatype:ie.FLOAT,getValue:function(e){return e.gamma}}),czm_ellipsoidRadii:new It({size:1,datatype:ie.FLOAT_VEC3,getValue:function(e){return e.ellipsoid.radii}}),czm_ellipsoidInverseRadii:new It({size:1,datatype:ie.FLOAT_VEC3,getValue:function(e){return e.ellipsoid.oneOverRadii}})},xp=P1e;var zLt=_(T(),1);var GLt=_(T(),1);function v1e(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){let t=Math.random()*16|0;return(e==="x"?t:t&3|8).toString(16)})}var zn=v1e;var ILt=_(T(),1);function w1e(){return!0}function F1e(e,t){t=t??"This object was destroyed, i.e., destroy() was called.";function n(){}for(let i in e)typeof e[i]=="function"&&(e[i]=n);e.isDestroyed=w1e}var me=F1e;var wLt=_(T(),1);var Ms={UNSIGNED_BYTE:ie.UNSIGNED_BYTE,UNSIGNED_SHORT:ie.UNSIGNED_SHORT,UNSIGNED_INT:ie.UNSIGNED_INT};Ms.getSizeInBytes=function(e){switch(e){case Ms.UNSIGNED_BYTE:return Uint8Array.BYTES_PER_ELEMENT;case Ms.UNSIGNED_SHORT:return Uint16Array.BYTES_PER_ELEMENT;case Ms.UNSIGNED_INT:return Uint32Array.BYTES_PER_ELEMENT}};Ms.fromSizeInBytes=function(e){switch(e){case 2:return Ms.UNSIGNED_SHORT;case 4:return Ms.UNSIGNED_INT;case 1:return Ms.UNSIGNED_BYTE}};Ms.validate=function(e){return l(e)&&(e===Ms.UNSIGNED_BYTE||e===Ms.UNSIGNED_SHORT||e===Ms.UNSIGNED_INT)};Ms.createTypedArray=function(e,t){return e>=X.SIXTY_FOUR_KILOBYTES?new Uint32Array(t):new Uint16Array(t)};Ms.createTypedArrayFromArrayBuffer=function(e,t,n,i){return e>=X.SIXTY_FOUR_KILOBYTES?new Uint32Array(t,n,i):new Uint16Array(t,n,i)};Ms.fromTypedArray=function(e){if(e instanceof Uint8Array)return Ms.UNSIGNED_BYTE;if(e instanceof Uint16Array)return Ms.UNSIGNED_SHORT;if(e instanceof Uint32Array)return Ms.UNSIGNED_INT};var Ae=Object.freeze(Ms);var MLt=_(T(),1);var oN={STREAM_DRAW:ie.STREAM_DRAW,STATIC_DRAW:ie.STATIC_DRAW,DYNAMIC_DRAW:ie.DYNAMIC_DRAW,validate:function(e){return e===oN.STREAM_DRAW||e===oN.STATIC_DRAW||e===oN.DYNAMIC_DRAW}},Me=Object.freeze(oN);function gu(e){e=e??Y.EMPTY_OBJECT;let t=e.context._gl,n=e.bufferTarget,i=e.typedArray,o=e.sizeInBytes,r=e.usage,s=l(i);s&&(o=i.byteLength);let a=t.createBuffer();t.bindBuffer(n,a),t.bufferData(n,s?i:o,r),t.bindBuffer(n,null),this._id=zn(),this._gl=t,this._webgl2=e.context._webgl2,this._bufferTarget=n,this._sizeInBytes=o,this._usage=r,this._buffer=a,this.vertexArrayDestroyable=!0}gu.createVertexBuffer=function(e){return new gu({context:e.context,bufferTarget:ie.ARRAY_BUFFER,typedArray:e.typedArray,sizeInBytes:e.sizeInBytes,usage:e.usage})};gu.createIndexBuffer=function(e){let t=e.context,n=e.indexDatatype,i=Ae.getSizeInBytes(n),o=new gu({context:t,bufferTarget:ie.ELEMENT_ARRAY_BUFFER,typedArray:e.typedArray,sizeInBytes:e.sizeInBytes,usage:e.usage}),r=o.sizeInBytes/i;return Object.defineProperties(o,{indexDatatype:{get:function(){return n}},bytesPerIndex:{get:function(){return i}},numberOfIndices:{get:function(){return r}}}),o};Object.defineProperties(gu.prototype,{sizeInBytes:{get:function(){return this._sizeInBytes}},usage:{get:function(){return this._usage}}});gu.prototype._getBuffer=function(){return this._buffer};gu.prototype.copyFromArrayView=function(e,t){t=t??0;let n=this._gl,i=this._bufferTarget;n.bindBuffer(i,this._buffer),n.bufferSubData(i,t,e),n.bindBuffer(i,null)};gu.prototype.copyFromBuffer=function(e,t,n,i){let o=ie.COPY_READ_BUFFER,r=ie.COPY_WRITE_BUFFER,s=this._gl;s.bindBuffer(r,this._buffer),s.bindBuffer(o,e._buffer),s.copyBufferSubData(o,r,t,n,i),s.bindBuffer(r,null),s.bindBuffer(o,null)};gu.prototype.getBufferData=function(e,t,n,i){t=t??0,n=n??0;let o=this._gl,r=ie.COPY_READ_BUFFER;o.bindBuffer(r,this._buffer),o.getBufferSubData(r,t,e,n,i),o.bindBuffer(r,null)};gu.prototype.isDestroyed=function(){return!1};gu.prototype.destroy=function(){return this._gl.deleteBuffer(this._buffer),me(this)};var xt=gu;var lRt=_(T(),1);var rRt=_(T(),1);var $Lt=_(T(),1);var JLt=_(T(),1);var W0,Ir={requestFullscreen:void 0,exitFullscreen:void 0,fullscreenEnabled:void 0,fullscreenElement:void 0,fullscreenchange:void 0,fullscreenerror:void 0},Vl={};Object.defineProperties(Vl,{element:{get:function(){if(Vl.supportsFullscreen())return document[Ir.fullscreenElement]}},changeEventName:{get:function(){if(Vl.supportsFullscreen())return Ir.fullscreenchange}},errorEventName:{get:function(){if(Vl.supportsFullscreen())return Ir.fullscreenerror}},enabled:{get:function(){if(Vl.supportsFullscreen())return document[Ir.fullscreenEnabled]}},fullscreen:{get:function(){if(Vl.supportsFullscreen())return Vl.element!==null}}});Vl.supportsFullscreen=function(){if(l(W0))return W0;W0=!1;let e=document.body;if(typeof e.requestFullscreen=="function")return Ir.requestFullscreen="requestFullscreen",Ir.exitFullscreen="exitFullscreen",Ir.fullscreenEnabled="fullscreenEnabled",Ir.fullscreenElement="fullscreenElement",Ir.fullscreenchange="fullscreenchange",Ir.fullscreenerror="fullscreenerror",W0=!0,W0;let t=["webkit","moz","o","ms","khtml"],n;for(let i=0,o=t.length;i<o;++i){let r=t[i];n=`${r}RequestFullscreen`,typeof e[n]=="function"?(Ir.requestFullscreen=n,W0=!0):(n=`${r}RequestFullScreen`,typeof e[n]=="function"&&(Ir.requestFullscreen=n,W0=!0)),n=`${r}ExitFullscreen`,typeof document[n]=="function"?Ir.exitFullscreen=n:(n=`${r}CancelFullScreen`,typeof document[n]=="function"&&(Ir.exitFullscreen=n)),n=`${r}FullscreenEnabled`,document[n]!==void 0?Ir.fullscreenEnabled=n:(n=`${r}FullScreenEnabled`,document[n]!==void 0&&(Ir.fullscreenEnabled=n)),n=`${r}FullscreenElement`,document[n]!==void 0?Ir.fullscreenElement=n:(n=`${r}FullScreenElement`,document[n]!==void 0&&(Ir.fullscreenElement=n)),n=`${r}fullscreenchange`,document[`on${n}`]!==void 0&&(r==="ms"&&(n="MSFullscreenChange"),Ir.fullscreenchange=n),n=`${r}fullscreenerror`,document[`on${n}`]!==void 0&&(r==="ms"&&(n="MSFullscreenError"),Ir.fullscreenerror=n)}return W0};Vl.requestFullscreen=function(e,t){Vl.supportsFullscreen()&&e[Ir.requestFullscreen]({vrDisplay:t})};Vl.exitFullscreen=function(){Vl.supportsFullscreen()&&document[Ir.exitFullscreen]()};Vl._names=Ir;var br=Vl;var tc;typeof navigator<"u"?tc=navigator:tc={};function ex(e){let t=e.split(".");for(let n=0,i=t.length;n<i;++n)t[n]=parseInt(t[n],10);return t}var rN,Rq;function $B(){if(!l(rN)&&(rN=!1,!uN())){let e=/ Chrome\/([\.0-9]+)/.exec(tc.userAgent);e!==null&&(rN=!0,Rq=ex(e[1]))}return rN}function A1e(){return $B()&&Rq}var sN,Zq;function Gq(){if(!l(sN)&&(sN=!1,!$B()&&!uN()&&/ Safari\/[\.0-9]+/.test(tc.userAgent))){let e=/ Version\/([\.0-9]+)/.exec(tc.userAgent);e!==null&&(sN=!0,Zq=ex(e[1]))}return sN}function M1e(){return Gq()&&Zq}var aN,jB;function Eq(){if(!l(aN)){aN=!1;let e=/ AppleWebKit\/([\.0-9]+)(\+?)/.exec(tc.userAgent);e!==null&&(aN=!0,jB=ex(e[1]),jB.isNightly=!!e[2])}return aN}function N1e(){return Eq()&&jB}var KL,qB;function Iq(){if(!l(KL)){KL=!1;let e;tc.appName==="Microsoft Internet Explorer"?(e=/MSIE ([0-9]{1,}[\.0-9]{0,})/.exec(tc.userAgent),e!==null&&(KL=!0,qB=ex(e[1]))):tc.appName==="Netscape"&&(e=/Trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/.exec(tc.userAgent),e!==null&&(KL=!0,qB=ex(e[1])))}return KL}function k1e(){return Iq()&&qB}var cN,Xq;function uN(){if(!l(cN)){cN=!1;let e=/ Edg\/([\.0-9]+)/.exec(tc.userAgent);e!==null&&(cN=!0,Xq=ex(e[1]))}return cN}function U1e(){return uN()&&Xq}var lN,eO;function mN(){if(!l(lN)){lN=!1;let e=/Firefox\/([\.0-9]+)/.exec(tc.userAgent);e!==null&&(lN=!0,eO=ex(e[1]))}return lN}var KB;function D1e(){return l(KB)||(KB=/Windows/i.test(tc.appVersion)),KB}var JB;function B1e(){return l(JB)||(JB=navigator.platform==="iPhone"||navigator.platform==="iPod"||navigator.platform==="iPad"),JB}function O1e(){return mN()&&eO}var QB;function Y1e(){return l(QB)||(QB=!mN()&&typeof PointerEvent<"u"&&(!l(tc.pointerEnabled)||tc.pointerEnabled)),QB}var Wq,dN;function Pq(){if(!l(dN)){let e=document.createElement("canvas");e.setAttribute("style","image-rendering: -moz-crisp-edges;image-rendering: pixelated;");let t=e.style.imageRendering;dN=l(t)&&t!=="",dN&&(Wq=t)}return dN}function z1e(){return Pq()?Wq:void 0}function wc(){return wc._result}wc._promise=void 0;wc._result=void 0;wc.initialize=function(){return l(wc._promise)||(wc._promise=new Promise(e=>{let t=new Image;t.onload=function(){wc._result=t.width>0&&t.height>0,e(wc._result)},t.onerror=function(){wc._result=!1,e(wc._result)},t.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA"})),wc._promise};Object.defineProperties(wc,{initialized:{get:function(){return l(wc._result)}}});var US=[];typeof ArrayBuffer<"u"&&(US.push(Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array),typeof Uint8ClampedArray<"u"&&US.push(Uint8ClampedArray),typeof Uint8ClampedArray<"u"&&US.push(Uint8ClampedArray),typeof BigInt64Array<"u"&&US.push(BigInt64Array),typeof BigUint64Array<"u"&&US.push(BigUint64Array));var yu={isChrome:$B,chromeVersion:A1e,isSafari:Gq,safariVersion:M1e,isWebkit:Eq,webkitVersion:N1e,isInternetExplorer:Iq,internetExplorerVersion:k1e,isEdge:uN,edgeVersion:U1e,isFirefox:mN,firefoxVersion:O1e,isWindows:D1e,isIPadOrIOS:B1e,hardwareConcurrency:tc.hardwareConcurrency??3,supportsPointerEvents:Y1e,supportsImageRenderingPixelated:Pq,supportsWebP:wc,imageRenderingValue:z1e,typedArrayTypes:US};yu.supportsBasis=function(e){return yu.supportsWebAssembly()&&e.context.supportsBasis};yu.supportsFullscreen=function(){return br.supportsFullscreen()};yu.supportsTypedArrays=function(){return typeof ArrayBuffer<"u"};yu.supportsBigInt64Array=function(){return typeof BigInt64Array<"u"};yu.supportsBigUint64Array=function(){return typeof BigUint64Array<"u"};yu.supportsBigInt=function(){return typeof BigInt<"u"};yu.supportsWebWorkers=function(){return typeof Worker<"u"};yu.supportsWebAssembly=function(){return typeof WebAssembly<"u"};yu.supportsWebgl2=function(e){return e.context.webgl2};yu.supportsEsmWebWorkers=function(){return!mN()||parseInt(eO)>=114};var Bt=yu;function tO(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n*6<1?e+(t-e)*6*n:n*2<1?t:n*3<2?e+(t-e)*(2/3-n)*6:e}function re(e,t,n,i){this.red=e??1,this.green=t??1,this.blue=n??1,this.alpha=i??1}re.fromCartesian4=function(e,t){return l(t)?(t.red=e.x,t.green=e.y,t.blue=e.z,t.alpha=e.w,t):new re(e.x,e.y,e.z,e.w)};re.fromBytes=function(e,t,n,i,o){return e=re.byteToFloat(e??255),t=re.byteToFloat(t??255),n=re.byteToFloat(n??255),i=re.byteToFloat(i??255),l(o)?(o.red=e,o.green=t,o.blue=n,o.alpha=i,o):new re(e,t,n,i)};re.fromAlpha=function(e,t,n){return l(n)?(n.red=e.red,n.green=e.green,n.blue=e.blue,n.alpha=t,n):new re(e.red,e.green,e.blue,t)};var nO,iO,_p;Bt.supportsTypedArrays()&&(nO=new ArrayBuffer(4),iO=new Uint32Array(nO),_p=new Uint8Array(nO));re.fromRgba=function(e,t){return iO[0]=e,re.fromBytes(_p[0],_p[1],_p[2],_p[3],t)};re.fromHsl=function(e,t,n,i,o){e=(e??0)%1,t=t??0,n=n??0,i=i??1;let r=n,s=n,a=n;if(t!==0){let c;n<.5?c=n*(1+t):c=n+t-n*t;let d=2*n-c;r=tO(d,c,e+1/3),s=tO(d,c,e),a=tO(d,c,e-1/3)}return l(o)?(o.red=r,o.green=s,o.blue=a,o.alpha=i,o):new re(r,s,a,i)};re.fromRandom=function(e,t){e=e??Y.EMPTY_OBJECT;let n=e.red;if(!l(n)){let s=e.minimumRed??0,a=e.maximumRed??1;n=s+X.nextRandomNumber()*(a-s)}let i=e.green;if(!l(i)){let s=e.minimumGreen??0,a=e.maximumGreen??1;i=s+X.nextRandomNumber()*(a-s)}let o=e.blue;if(!l(o)){let s=e.minimumBlue??0,a=e.maximumBlue??1;o=s+X.nextRandomNumber()*(a-s)}let r=e.alpha;if(!l(r)){let s=e.minimumAlpha??0,a=e.maximumAlpha??1;r=s+X.nextRandomNumber()*(a-s)}return l(t)?(t.red=n,t.green=i,t.blue=o,t.alpha=r,t):new re(n,i,o,r)};var H1e=/^#([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])?$/i,K1e=/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})?$/i,J1e=/^rgba?\s*\(\s*([0-9.]+%?)\s*[,\s]+\s*([0-9.]+%?)\s*[,\s]+\s*([0-9.]+%?)(?:\s*[,\s/]+\s*([0-9.]+))?\s*\)$/i,Q1e=/^hsla?\s*\(\s*([0-9.]+)\s*[,\s]+\s*([0-9.]+%)\s*[,\s]+\s*([0-9.]+%)(?:\s*[,\s/]+\s*([0-9.]+))?\s*\)$/i;re.fromCssColorString=function(e,t){l(t)||(t=new re),e=e.trim();let n=re[e.toUpperCase()];if(l(n))return re.clone(n,t),t;let i=H1e.exec(e);return i!==null?(t.red=parseInt(i[1],16)/15,t.green=parseInt(i[2],16)/15,t.blue=parseInt(i[3],16)/15,t.alpha=parseInt(i[4]??"f",16)/15,t):(i=K1e.exec(e),i!==null?(t.red=parseInt(i[1],16)/255,t.green=parseInt(i[2],16)/255,t.blue=parseInt(i[3],16)/255,t.alpha=parseInt(i[4]??"ff",16)/255,t):(i=J1e.exec(e),i!==null?(t.red=parseFloat(i[1])/(i[1].substr(-1)==="%"?100:255),t.green=parseFloat(i[2])/(i[2].substr(-1)==="%"?100:255),t.blue=parseFloat(i[3])/(i[3].substr(-1)==="%"?100:255),t.alpha=parseFloat(i[4]??"1.0"),t):(i=Q1e.exec(e),i!==null?re.fromHsl(parseFloat(i[1])/360,parseFloat(i[2])/100,parseFloat(i[3])/100,parseFloat(i[4]??"1.0"),t):(t=void 0,t))))};re.packedLength=4;re.pack=function(e,t,n){return n=n??0,t[n++]=e.red,t[n++]=e.green,t[n++]=e.blue,t[n]=e.alpha,t};re.unpack=function(e,t,n){return t=t??0,l(n)||(n=new re),n.red=e[t++],n.green=e[t++],n.blue=e[t++],n.alpha=e[t],n};re.byteToFloat=function(e){return e/255};re.floatToByte=function(e){return e===1?255:e*256|0};re.clone=function(e,t){if(l(e))return l(t)?(t.red=e.red,t.green=e.green,t.blue=e.blue,t.alpha=e.alpha,t):new re(e.red,e.green,e.blue,e.alpha)};re.equals=function(e,t){return e===t||l(e)&&l(t)&&e.red===t.red&&e.green===t.green&&e.blue===t.blue&&e.alpha===t.alpha};re.equalsArray=function(e,t,n){return e.red===t[n]&&e.green===t[n+1]&&e.blue===t[n+2]&&e.alpha===t[n+3]};re.prototype.clone=function(e){return re.clone(this,e)};re.prototype.equals=function(e){return re.equals(this,e)};re.prototype.equalsEpsilon=function(e,t){return this===e||l(e)&&Math.abs(this.red-e.red)<=t&&Math.abs(this.green-e.green)<=t&&Math.abs(this.blue-e.blue)<=t&&Math.abs(this.alpha-e.alpha)<=t};re.prototype.toString=function(){return`(${this.red}, ${this.green}, ${this.blue}, ${this.alpha})`};re.prototype.toCssColorString=function(){let e=re.floatToByte(this.red),t=re.floatToByte(this.green),n=re.floatToByte(this.blue);return this.alpha===1?`rgb(${e},${t},${n})`:`rgba(${e},${t},${n},${this.alpha})`};re.prototype.toCssHexString=function(){let e=re.floatToByte(this.red).toString(16);e.length<2&&(e=`0${e}`);let t=re.floatToByte(this.green).toString(16);t.length<2&&(t=`0${t}`);let n=re.floatToByte(this.blue).toString(16);if(n.length<2&&(n=`0${n}`),this.alpha<1){let i=re.floatToByte(this.alpha).toString(16);return i.length<2&&(i=`0${i}`),`#${e}${t}${n}${i}`}return`#${e}${t}${n}`};re.prototype.toBytes=function(e){let t=re.floatToByte(this.red),n=re.floatToByte(this.green),i=re.floatToByte(this.blue),o=re.floatToByte(this.alpha);return l(e)?(e[0]=t,e[1]=n,e[2]=i,e[3]=o,e):[t,n,i,o]};re.prototype.toRgba=function(){return _p[0]=re.floatToByte(this.red),_p[1]=re.floatToByte(this.green),_p[2]=re.floatToByte(this.blue),_p[3]=re.floatToByte(this.alpha),iO[0]};re.prototype.brighten=function(e,t){return e=1-e,t.red=1-(1-this.red)*e,t.green=1-(1-this.green)*e,t.blue=1-(1-this.blue)*e,t.alpha=this.alpha,t};re.prototype.darken=function(e,t){return e=1-e,t.red=this.red*e,t.green=this.green*e,t.blue=this.blue*e,t.alpha=this.alpha,t};re.prototype.withAlpha=function(e,t){return re.fromAlpha(this,e,t)};re.add=function(e,t,n){return n.red=e.red+t.red,n.green=e.green+t.green,n.blue=e.blue+t.blue,n.alpha=e.alpha+t.alpha,n};re.subtract=function(e,t,n){return n.red=e.red-t.red,n.green=e.green-t.green,n.blue=e.blue-t.blue,n.alpha=e.alpha-t.alpha,n};re.multiply=function(e,t,n){return n.red=e.red*t.red,n.green=e.green*t.green,n.blue=e.blue*t.blue,n.alpha=e.alpha*t.alpha,n};re.divide=function(e,t,n){return n.red=e.red/t.red,n.green=e.green/t.green,n.blue=e.blue/t.blue,n.alpha=e.alpha/t.alpha,n};re.mod=function(e,t,n){return n.red=e.red%t.red,n.green=e.green%t.green,n.blue=e.blue%t.blue,n.alpha=e.alpha%t.alpha,n};re.lerp=function(e,t,n,i){return i.red=X.lerp(e.red,t.red,n),i.green=X.lerp(e.green,t.green,n),i.blue=X.lerp(e.blue,t.blue,n),i.alpha=X.lerp(e.alpha,t.alpha,n),i};re.multiplyByScalar=function(e,t,n){return n.red=e.red*t,n.green=e.green*t,n.blue=e.blue*t,n.alpha=e.alpha*t,n};re.divideByScalar=function(e,t,n){return n.red=e.red/t,n.green=e.green/t,n.blue=e.blue/t,n.alpha=e.alpha/t,n};re.ALICEBLUE=Object.freeze(re.fromCssColorString("#F0F8FF"));re.ANTIQUEWHITE=Object.freeze(re.fromCssColorString("#FAEBD7"));re.AQUA=Object.freeze(re.fromCssColorString("#00FFFF"));re.AQUAMARINE=Object.freeze(re.fromCssColorString("#7FFFD4"));re.AZURE=Object.freeze(re.fromCssColorString("#F0FFFF"));re.BEIGE=Object.freeze(re.fromCssColorString("#F5F5DC"));re.BISQUE=Object.freeze(re.fromCssColorString("#FFE4C4"));re.BLACK=Object.freeze(re.fromCssColorString("#000000"));re.BLANCHEDALMOND=Object.freeze(re.fromCssColorString("#FFEBCD"));re.BLUE=Object.freeze(re.fromCssColorString("#0000FF"));re.BLUEVIOLET=Object.freeze(re.fromCssColorString("#8A2BE2"));re.BROWN=Object.freeze(re.fromCssColorString("#A52A2A"));re.BURLYWOOD=Object.freeze(re.fromCssColorString("#DEB887"));re.CADETBLUE=Object.freeze(re.fromCssColorString("#5F9EA0"));re.CHARTREUSE=Object.freeze(re.fromCssColorString("#7FFF00"));re.CHOCOLATE=Object.freeze(re.fromCssColorString("#D2691E"));re.CORAL=Object.freeze(re.fromCssColorString("#FF7F50"));re.CORNFLOWERBLUE=Object.freeze(re.fromCssColorString("#6495ED"));re.CORNSILK=Object.freeze(re.fromCssColorString("#FFF8DC"));re.CRIMSON=Object.freeze(re.fromCssColorString("#DC143C"));re.CYAN=Object.freeze(re.fromCssColorString("#00FFFF"));re.DARKBLUE=Object.freeze(re.fromCssColorString("#00008B"));re.DARKCYAN=Object.freeze(re.fromCssColorString("#008B8B"));re.DARKGOLDENROD=Object.freeze(re.fromCssColorString("#B8860B"));re.DARKGRAY=Object.freeze(re.fromCssColorString("#A9A9A9"));re.DARKGREEN=Object.freeze(re.fromCssColorString("#006400"));re.DARKGREY=re.DARKGRAY;re.DARKKHAKI=Object.freeze(re.fromCssColorString("#BDB76B"));re.DARKMAGENTA=Object.freeze(re.fromCssColorString("#8B008B"));re.DARKOLIVEGREEN=Object.freeze(re.fromCssColorString("#556B2F"));re.DARKORANGE=Object.freeze(re.fromCssColorString("#FF8C00"));re.DARKORCHID=Object.freeze(re.fromCssColorString("#9932CC"));re.DARKRED=Object.freeze(re.fromCssColorString("#8B0000"));re.DARKSALMON=Object.freeze(re.fromCssColorString("#E9967A"));re.DARKSEAGREEN=Object.freeze(re.fromCssColorString("#8FBC8F"));re.DARKSLATEBLUE=Object.freeze(re.fromCssColorString("#483D8B"));re.DARKSLATEGRAY=Object.freeze(re.fromCssColorString("#2F4F4F"));re.DARKSLATEGREY=re.DARKSLATEGRAY;re.DARKTURQUOISE=Object.freeze(re.fromCssColorString("#00CED1"));re.DARKVIOLET=Object.freeze(re.fromCssColorString("#9400D3"));re.DEEPPINK=Object.freeze(re.fromCssColorString("#FF1493"));re.DEEPSKYBLUE=Object.freeze(re.fromCssColorString("#00BFFF"));re.DIMGRAY=Object.freeze(re.fromCssColorString("#696969"));re.DIMGREY=re.DIMGRAY;re.DODGERBLUE=Object.freeze(re.fromCssColorString("#1E90FF"));re.FIREBRICK=Object.freeze(re.fromCssColorString("#B22222"));re.FLORALWHITE=Object.freeze(re.fromCssColorString("#FFFAF0"));re.FORESTGREEN=Object.freeze(re.fromCssColorString("#228B22"));re.FUCHSIA=Object.freeze(re.fromCssColorString("#FF00FF"));re.GAINSBORO=Object.freeze(re.fromCssColorString("#DCDCDC"));re.GHOSTWHITE=Object.freeze(re.fromCssColorString("#F8F8FF"));re.GOLD=Object.freeze(re.fromCssColorString("#FFD700"));re.GOLDENROD=Object.freeze(re.fromCssColorString("#DAA520"));re.GRAY=Object.freeze(re.fromCssColorString("#808080"));re.GREEN=Object.freeze(re.fromCssColorString("#008000"));re.GREENYELLOW=Object.freeze(re.fromCssColorString("#ADFF2F"));re.GREY=re.GRAY;re.HONEYDEW=Object.freeze(re.fromCssColorString("#F0FFF0"));re.HOTPINK=Object.freeze(re.fromCssColorString("#FF69B4"));re.INDIANRED=Object.freeze(re.fromCssColorString("#CD5C5C"));re.INDIGO=Object.freeze(re.fromCssColorString("#4B0082"));re.IVORY=Object.freeze(re.fromCssColorString("#FFFFF0"));re.KHAKI=Object.freeze(re.fromCssColorString("#F0E68C"));re.LAVENDER=Object.freeze(re.fromCssColorString("#E6E6FA"));re.LAVENDAR_BLUSH=Object.freeze(re.fromCssColorString("#FFF0F5"));re.LAWNGREEN=Object.freeze(re.fromCssColorString("#7CFC00"));re.LEMONCHIFFON=Object.freeze(re.fromCssColorString("#FFFACD"));re.LIGHTBLUE=Object.freeze(re.fromCssColorString("#ADD8E6"));re.LIGHTCORAL=Object.freeze(re.fromCssColorString("#F08080"));re.LIGHTCYAN=Object.freeze(re.fromCssColorString("#E0FFFF"));re.LIGHTGOLDENRODYELLOW=Object.freeze(re.fromCssColorString("#FAFAD2"));re.LIGHTGRAY=Object.freeze(re.fromCssColorString("#D3D3D3"));re.LIGHTGREEN=Object.freeze(re.fromCssColorString("#90EE90"));re.LIGHTGREY=re.LIGHTGRAY;re.LIGHTPINK=Object.freeze(re.fromCssColorString("#FFB6C1"));re.LIGHTSEAGREEN=Object.freeze(re.fromCssColorString("#20B2AA"));re.LIGHTSKYBLUE=Object.freeze(re.fromCssColorString("#87CEFA"));re.LIGHTSLATEGRAY=Object.freeze(re.fromCssColorString("#778899"));re.LIGHTSLATEGREY=re.LIGHTSLATEGRAY;re.LIGHTSTEELBLUE=Object.freeze(re.fromCssColorString("#B0C4DE"));re.LIGHTYELLOW=Object.freeze(re.fromCssColorString("#FFFFE0"));re.LIME=Object.freeze(re.fromCssColorString("#00FF00"));re.LIMEGREEN=Object.freeze(re.fromCssColorString("#32CD32"));re.LINEN=Object.freeze(re.fromCssColorString("#FAF0E6"));re.MAGENTA=Object.freeze(re.fromCssColorString("#FF00FF"));re.MAROON=Object.freeze(re.fromCssColorString("#800000"));re.MEDIUMAQUAMARINE=Object.freeze(re.fromCssColorString("#66CDAA"));re.MEDIUMBLUE=Object.freeze(re.fromCssColorString("#0000CD"));re.MEDIUMORCHID=Object.freeze(re.fromCssColorString("#BA55D3"));re.MEDIUMPURPLE=Object.freeze(re.fromCssColorString("#9370DB"));re.MEDIUMSEAGREEN=Object.freeze(re.fromCssColorString("#3CB371"));re.MEDIUMSLATEBLUE=Object.freeze(re.fromCssColorString("#7B68EE"));re.MEDIUMSPRINGGREEN=Object.freeze(re.fromCssColorString("#00FA9A"));re.MEDIUMTURQUOISE=Object.freeze(re.fromCssColorString("#48D1CC"));re.MEDIUMVIOLETRED=Object.freeze(re.fromCssColorString("#C71585"));re.MIDNIGHTBLUE=Object.freeze(re.fromCssColorString("#191970"));re.MINTCREAM=Object.freeze(re.fromCssColorString("#F5FFFA"));re.MISTYROSE=Object.freeze(re.fromCssColorString("#FFE4E1"));re.MOCCASIN=Object.freeze(re.fromCssColorString("#FFE4B5"));re.NAVAJOWHITE=Object.freeze(re.fromCssColorString("#FFDEAD"));re.NAVY=Object.freeze(re.fromCssColorString("#000080"));re.OLDLACE=Object.freeze(re.fromCssColorString("#FDF5E6"));re.OLIVE=Object.freeze(re.fromCssColorString("#808000"));re.OLIVEDRAB=Object.freeze(re.fromCssColorString("#6B8E23"));re.ORANGE=Object.freeze(re.fromCssColorString("#FFA500"));re.ORANGERED=Object.freeze(re.fromCssColorString("#FF4500"));re.ORCHID=Object.freeze(re.fromCssColorString("#DA70D6"));re.PALEGOLDENROD=Object.freeze(re.fromCssColorString("#EEE8AA"));re.PALEGREEN=Object.freeze(re.fromCssColorString("#98FB98"));re.PALETURQUOISE=Object.freeze(re.fromCssColorString("#AFEEEE"));re.PALEVIOLETRED=Object.freeze(re.fromCssColorString("#DB7093"));re.PAPAYAWHIP=Object.freeze(re.fromCssColorString("#FFEFD5"));re.PEACHPUFF=Object.freeze(re.fromCssColorString("#FFDAB9"));re.PERU=Object.freeze(re.fromCssColorString("#CD853F"));re.PINK=Object.freeze(re.fromCssColorString("#FFC0CB"));re.PLUM=Object.freeze(re.fromCssColorString("#DDA0DD"));re.POWDERBLUE=Object.freeze(re.fromCssColorString("#B0E0E6"));re.PURPLE=Object.freeze(re.fromCssColorString("#800080"));re.RED=Object.freeze(re.fromCssColorString("#FF0000"));re.ROSYBROWN=Object.freeze(re.fromCssColorString("#BC8F8F"));re.ROYALBLUE=Object.freeze(re.fromCssColorString("#4169E1"));re.SADDLEBROWN=Object.freeze(re.fromCssColorString("#8B4513"));re.SALMON=Object.freeze(re.fromCssColorString("#FA8072"));re.SANDYBROWN=Object.freeze(re.fromCssColorString("#F4A460"));re.SEAGREEN=Object.freeze(re.fromCssColorString("#2E8B57"));re.SEASHELL=Object.freeze(re.fromCssColorString("#FFF5EE"));re.SIENNA=Object.freeze(re.fromCssColorString("#A0522D"));re.SILVER=Object.freeze(re.fromCssColorString("#C0C0C0"));re.SKYBLUE=Object.freeze(re.fromCssColorString("#87CEEB"));re.SLATEBLUE=Object.freeze(re.fromCssColorString("#6A5ACD"));re.SLATEGRAY=Object.freeze(re.fromCssColorString("#708090"));re.SLATEGREY=re.SLATEGRAY;re.SNOW=Object.freeze(re.fromCssColorString("#FFFAFA"));re.SPRINGGREEN=Object.freeze(re.fromCssColorString("#00FF7F"));re.STEELBLUE=Object.freeze(re.fromCssColorString("#4682B4"));re.TAN=Object.freeze(re.fromCssColorString("#D2B48C"));re.TEAL=Object.freeze(re.fromCssColorString("#008080"));re.THISTLE=Object.freeze(re.fromCssColorString("#D8BFD8"));re.TOMATO=Object.freeze(re.fromCssColorString("#FF6347"));re.TURQUOISE=Object.freeze(re.fromCssColorString("#40E0D0"));re.VIOLET=Object.freeze(re.fromCssColorString("#EE82EE"));re.WHEAT=Object.freeze(re.fromCssColorString("#F5DEB3"));re.WHITE=Object.freeze(re.fromCssColorString("#FFFFFF"));re.WHITESMOKE=Object.freeze(re.fromCssColorString("#F5F5F5"));re.YELLOW=Object.freeze(re.fromCssColorString("#FFFF00"));re.YELLOWGREEN=Object.freeze(re.fromCssColorString("#9ACD32"));re.TRANSPARENT=Object.freeze(new re(0,0,0,0));var D=re;function hN(e){e=e??Y.EMPTY_OBJECT,this.color=e.color,this.depth=e.depth,this.stencil=e.stencil,this.renderState=e.renderState,this.framebuffer=e.framebuffer,this.owner=e.owner,this.pass=e.pass}hN.ALL=Object.freeze(new hN({color:new D(0,0,0,0),depth:1,stencil:0}));hN.prototype.execute=function(e,t){e.clear(this,t)};var ti=hN;var pRt=_(T(),1);var uRt=_(T(),1),j1e={ENVIRONMENT:0,COMPUTE:1,GLOBE:2,TERRAIN_CLASSIFICATION:3,CESIUM_3D_TILE:4,CESIUM_3D_TILE_CLASSIFICATION:5,CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW:6,OPAQUE:7,TRANSLUCENT:8,VOXELS:9,OVERLAY:10,NUMBER_OF_PASSES:11},Ee=Object.freeze(j1e);function vq(e){e=e??Y.EMPTY_OBJECT,this.vertexArray=e.vertexArray,this.fragmentShaderSource=e.fragmentShaderSource,this.shaderProgram=e.shaderProgram,this.uniformMap=e.uniformMap,this.outputTexture=e.outputTexture,this.preExecute=e.preExecute,this.postExecute=e.postExecute,this.canceled=e.canceled,this.persists=e.persists??!1,this.pass=Ee.COMPUTE,this.owner=e.owner}vq.prototype.execute=function(e){e.execute(this)};var Fc=vq;var dWt=_(T(),1);var XIt=_(T(),1);var xRt=_(T(),1);function Mt(e,t){this.x=e??0,this.y=t??0}Mt.fromElements=function(e,t,n){return l(n)?(n.x=e,n.y=t,n):new Mt(e,t)};Mt.clone=function(e,t){if(l(e))return l(t)?(t.x=e.x,t.y=e.y,t):new Mt(e.x,e.y)};Mt.fromCartesian3=Mt.clone;Mt.fromCartesian4=Mt.clone;Mt.packedLength=2;Mt.pack=function(e,t,n){return n=n??0,t[n++]=e.x,t[n]=e.y,t};Mt.unpack=function(e,t,n){return t=t??0,l(n)||(n=new Mt),n.x=e[t++],n.y=e[t],n};Mt.packArray=function(e,t){let n=e.length,i=n*2;l(t)?!Array.isArray(t)&&t.length!==i||t.length!==i&&(t.length=i):t=new Array(i);for(let o=0;o<n;++o)Mt.pack(e[o],t,o*2);return t};Mt.unpackArray=function(e,t){let n=e.length;l(t)?t.length=n/2:t=new Array(n/2);for(let i=0;i<n;i+=2){let o=i/2;t[o]=Mt.unpack(e,i,t[o])}return t};Mt.fromArray=Mt.unpack;Mt.maximumComponent=function(e){return Math.max(e.x,e.y)};Mt.minimumComponent=function(e){return Math.min(e.x,e.y)};Mt.minimumByComponent=function(e,t,n){return n.x=Math.min(e.x,t.x),n.y=Math.min(e.y,t.y),n};Mt.maximumByComponent=function(e,t,n){return n.x=Math.max(e.x,t.x),n.y=Math.max(e.y,t.y),n};Mt.clamp=function(e,t,n,i){let o=X.clamp(e.x,t.x,n.x),r=X.clamp(e.y,t.y,n.y);return i.x=o,i.y=r,i};Mt.magnitudeSquared=function(e){return e.x*e.x+e.y*e.y};Mt.magnitude=function(e){return Math.sqrt(Mt.magnitudeSquared(e))};var fN=new Mt;Mt.distance=function(e,t){return Mt.subtract(e,t,fN),Mt.magnitude(fN)};Mt.distanceSquared=function(e,t){return Mt.subtract(e,t,fN),Mt.magnitudeSquared(fN)};Mt.normalize=function(e,t){let n=Mt.magnitude(e);return t.x=e.x/n,t.y=e.y/n,t};Mt.dot=function(e,t){return e.x*t.x+e.y*t.y};Mt.cross=function(e,t){return e.x*t.y-e.y*t.x};Mt.multiplyComponents=function(e,t,n){return n.x=e.x*t.x,n.y=e.y*t.y,n};Mt.divideComponents=function(e,t,n){return n.x=e.x/t.x,n.y=e.y/t.y,n};Mt.add=function(e,t,n){return n.x=e.x+t.x,n.y=e.y+t.y,n};Mt.subtract=function(e,t,n){return n.x=e.x-t.x,n.y=e.y-t.y,n};Mt.multiplyByScalar=function(e,t,n){return n.x=e.x*t,n.y=e.y*t,n};Mt.divideByScalar=function(e,t,n){return n.x=e.x/t,n.y=e.y/t,n};Mt.negate=function(e,t){return t.x=-e.x,t.y=-e.y,t};Mt.abs=function(e,t){return t.x=Math.abs(e.x),t.y=Math.abs(e.y),t};var wq=new Mt;Mt.lerp=function(e,t,n,i){return Mt.multiplyByScalar(t,n,wq),i=Mt.multiplyByScalar(e,1-n,i),Mt.add(wq,i,i)};var Fq=new Mt,Aq=new Mt;Mt.angleBetween=function(e,t){return Mt.normalize(e,Fq),Mt.normalize(t,Aq),X.acosClamped(Mt.dot(Fq,Aq))};var q1e=new Mt;Mt.mostOrthogonalAxis=function(e,t){let n=Mt.normalize(e,q1e);return Mt.abs(n,n),n.x<=n.y?t=Mt.clone(Mt.UNIT_X,t):t=Mt.clone(Mt.UNIT_Y,t),t};Mt.equals=function(e,t){return e===t||l(e)&&l(t)&&e.x===t.x&&e.y===t.y};Mt.equalsArray=function(e,t,n){return e.x===t[n]&&e.y===t[n+1]};Mt.equalsEpsilon=function(e,t,n,i){return e===t||l(e)&&l(t)&&X.equalsEpsilon(e.x,t.x,n,i)&&X.equalsEpsilon(e.y,t.y,n,i)};Mt.ZERO=Object.freeze(new Mt(0,0));Mt.ONE=Object.freeze(new Mt(1,1));Mt.UNIT_X=Object.freeze(new Mt(1,0));Mt.UNIT_Y=Object.freeze(new Mt(0,1));Mt.prototype.clone=function(e){return Mt.clone(this,e)};Mt.prototype.equals=function(e){return Mt.equals(this,e)};Mt.prototype.equalsEpsilon=function(e,t,n){return Mt.equalsEpsilon(this,e,t,n)};Mt.prototype.toString=function(){return`(${this.x}, ${this.y})`};var U=Mt;var IRt=_(T(),1);var VRt=_(T(),1);var $1e=new m,eVe=new m;function tVe(e,t,n,i,o){let r=e.x,s=e.y,a=e.z,c=t.x,d=t.y,u=t.z,h=r*r*c*c,p=s*s*d*d,g=a*a*u*u,f=h+p+g,y=Math.sqrt(1/f),x=m.multiplyByScalar(e,y,$1e);if(f<i)return isFinite(y)?m.clone(x,o):void 0;let S=n.x,C=n.y,V=n.z,L=eVe;L.x=x.x*S*2,L.y=x.y*C*2,L.z=x.z*V*2;let Z=(1-y)*m.magnitude(e)/(.5*m.magnitude(L)),E=0,P,W,v,A,b,R,G,I,w,M,B;do{Z-=E,v=1/(1+Z*S),A=1/(1+Z*C),b=1/(1+Z*V),R=v*v,G=A*A,I=b*b,w=R*v,M=G*A,B=I*b,P=h*R+p*G+g*I-1,W=h*w*S+p*M*C+g*B*V;let k=-2*W;E=P/k}while(Math.abs(P)>X.EPSILON12);return l(o)?(o.x=r*v,o.y=s*A,o.z=a*b,o):new m(r*v,s*A,a*b)}var tx=tVe;function Ao(e,t,n){this.longitude=e??0,this.latitude=t??0,this.height=n??0}Ao.fromRadians=function(e,t,n,i){return n=n??0,l(i)?(i.longitude=e,i.latitude=t,i.height=n,i):new Ao(e,t,n)};Ao.fromDegrees=function(e,t,n,i){return e=X.toRadians(e),t=X.toRadians(t),Ao.fromRadians(e,t,n,i)};var nVe=new m,iVe=new m,oVe=new m;Ao._ellipsoidOneOverRadii=new m(1/6378137,1/6378137,1/6356752314245179e-9);Ao._ellipsoidOneOverRadiiSquared=new m(1/(6378137*6378137),1/(6378137*6378137),1/(6356752314245179e-9*6356752314245179e-9));Ao._ellipsoidCenterToleranceSquared=X.EPSILON1;Ao.fromCartesian=function(e,t,n){let i=l(t)?t.oneOverRadii:Ao._ellipsoidOneOverRadii,o=l(t)?t.oneOverRadiiSquared:Ao._ellipsoidOneOverRadiiSquared,r=l(t)?t._centerToleranceSquared:Ao._ellipsoidCenterToleranceSquared,s=tx(e,i,o,r,iVe);if(!l(s))return;let a=m.multiplyComponents(s,o,nVe);a=m.normalize(a,a);let c=m.subtract(e,s,oVe),d=Math.atan2(a.y,a.x),u=Math.asin(a.z),h=X.sign(m.dot(c,e))*m.magnitude(c);return l(n)?(n.longitude=d,n.latitude=u,n.height=h,n):new Ao(d,u,h)};Ao.toCartesian=function(e,t,n){return m.fromRadians(e.longitude,e.latitude,e.height,t,n)};Ao.clone=function(e,t){if(l(e))return l(t)?(t.longitude=e.longitude,t.latitude=e.latitude,t.height=e.height,t):new Ao(e.longitude,e.latitude,e.height)};Ao.equals=function(e,t){return e===t||l(e)&&l(t)&&e.longitude===t.longitude&&e.latitude===t.latitude&&e.height===t.height};Ao.equalsEpsilon=function(e,t,n){return n=n??0,e===t||l(e)&&l(t)&&Math.abs(e.longitude-t.longitude)<=n&&Math.abs(e.latitude-t.latitude)<=n&&Math.abs(e.height-t.height)<=n};Ao.ZERO=Object.freeze(new Ao(0,0,0));Ao.prototype.clone=function(e){return Ao.clone(this,e)};Ao.prototype.equals=function(e){return Ao.equals(this,e)};Ao.prototype.equalsEpsilon=function(e,t){return Ao.equalsEpsilon(this,e,t)};Ao.prototype.toString=function(){return`(${this.longitude}, ${this.latitude}, ${this.height})`};var he=Ao;var MRt=_(T(),1);function Nq(e,t,n,i){t=t??0,n=n??0,i=i??0,e._radii=new m(t,n,i),e._radiiSquared=new m(t*t,n*n,i*i),e._radiiToTheFourth=new m(t*t*t*t,n*n*n*n,i*i*i*i),e._oneOverRadii=new m(t===0?0:1/t,n===0?0:1/n,i===0?0:1/i),e._oneOverRadiiSquared=new m(t===0?0:1/(t*t),n===0?0:1/(n*n),i===0?0:1/(i*i)),e._minimumRadius=Math.min(t,n,i),e._maximumRadius=Math.max(t,n,i),e._centerToleranceSquared=X.EPSILON1,e._radiiSquared.z!==0&&(e._squaredXOverSquaredZ=e._radiiSquared.x/e._radiiSquared.z)}function yi(e,t,n){this._radii=void 0,this._radiiSquared=void 0,this._radiiToTheFourth=void 0,this._oneOverRadii=void 0,this._oneOverRadiiSquared=void 0,this._minimumRadius=void 0,this._maximumRadius=void 0,this._centerToleranceSquared=void 0,this._squaredXOverSquaredZ=void 0,Nq(this,e,t,n)}Object.defineProperties(yi.prototype,{radii:{get:function(){return this._radii}},radiiSquared:{get:function(){return this._radiiSquared}},radiiToTheFourth:{get:function(){return this._radiiToTheFourth}},oneOverRadii:{get:function(){return this._oneOverRadii}},oneOverRadiiSquared:{get:function(){return this._oneOverRadiiSquared}},minimumRadius:{get:function(){return this._minimumRadius}},maximumRadius:{get:function(){return this._maximumRadius}}});yi.clone=function(e,t){if(!l(e))return;let n=e._radii;return l(t)?(m.clone(n,t._radii),m.clone(e._radiiSquared,t._radiiSquared),m.clone(e._radiiToTheFourth,t._radiiToTheFourth),m.clone(e._oneOverRadii,t._oneOverRadii),m.clone(e._oneOverRadiiSquared,t._oneOverRadiiSquared),t._minimumRadius=e._minimumRadius,t._maximumRadius=e._maximumRadius,t._centerToleranceSquared=e._centerToleranceSquared,t):new yi(n.x,n.y,n.z)};yi.fromCartesian3=function(e,t){return l(t)||(t=new yi),l(e)&&Nq(t,e.x,e.y,e.z),t};yi.WGS84=Object.freeze(new yi(6378137,6378137,6356752314245179e-9));yi.UNIT_SPHERE=Object.freeze(new yi(1,1,1));yi.MOON=Object.freeze(new yi(X.LUNAR_RADIUS,X.LUNAR_RADIUS,X.LUNAR_RADIUS));yi._default=yi.WGS84;Object.defineProperties(yi,{default:{get:function(){return yi._default},set:function(e){yi._default=e,m._ellipsoidRadiiSquared=e.radiiSquared,he._ellipsoidOneOverRadii=e.oneOverRadii,he._ellipsoidOneOverRadiiSquared=e.oneOverRadiiSquared,he._ellipsoidCenterToleranceSquared=e._centerToleranceSquared}}});yi.prototype.clone=function(e){return yi.clone(this,e)};yi.packedLength=m.packedLength;yi.pack=function(e,t,n){return n=n??0,m.pack(e._radii,t,n),t};yi.unpack=function(e,t,n){t=t??0;let i=m.unpack(e,t);return yi.fromCartesian3(i,n)};yi.prototype.geocentricSurfaceNormal=m.normalize;yi.prototype.geodeticSurfaceNormalCartographic=function(e,t){let n=e.longitude,i=e.latitude,o=Math.cos(i),r=o*Math.cos(n),s=o*Math.sin(n),a=Math.sin(i);return l(t)||(t=new m),t.x=r,t.y=s,t.z=a,m.normalize(t,t)};yi.prototype.geodeticSurfaceNormal=function(e,t){if(!m.equalsEpsilon(e,m.ZERO,X.EPSILON14))return l(t)||(t=new m),t=m.multiplyComponents(e,this._oneOverRadiiSquared,t),m.normalize(t,t)};var rVe=new m,sVe=new m;yi.prototype.cartographicToCartesian=function(e,t){let n=rVe,i=sVe;this.geodeticSurfaceNormalCartographic(e,n),m.multiplyComponents(this._radiiSquared,n,i);let o=Math.sqrt(m.dot(n,i));return m.divideByScalar(i,o,i),m.multiplyByScalar(n,e.height,n),l(t)||(t=new m),m.add(i,n,t)};yi.prototype.cartographicArrayToCartesianArray=function(e,t){let n=e.length;l(t)?t.length=n:t=new Array(n);for(let i=0;i<n;i++)t[i]=this.cartographicToCartesian(e[i],t[i]);return t};var aVe=new m,cVe=new m,lVe=new m;yi.prototype.cartesianToCartographic=function(e,t){let n=this.scaleToGeodeticSurface(e,cVe);if(!l(n))return;let i=this.geodeticSurfaceNormal(n,aVe),o=m.subtract(e,n,lVe),r=Math.atan2(i.y,i.x),s=Math.asin(i.z),a=X.sign(m.dot(o,e))*m.magnitude(o);return l(t)?(t.longitude=r,t.latitude=s,t.height=a,t):new he(r,s,a)};yi.prototype.cartesianArrayToCartographicArray=function(e,t){let n=e.length;l(t)?t.length=n:t=new Array(n);for(let i=0;i<n;++i)t[i]=this.cartesianToCartographic(e[i],t[i]);return t};yi.prototype.scaleToGeodeticSurface=function(e,t){return tx(e,this._oneOverRadii,this._oneOverRadiiSquared,this._centerToleranceSquared,t)};yi.prototype.scaleToGeocentricSurface=function(e,t){l(t)||(t=new m);let n=e.x,i=e.y,o=e.z,r=this._oneOverRadiiSquared,s=1/Math.sqrt(n*n*r.x+i*i*r.y+o*o*r.z);return m.multiplyByScalar(e,s,t)};yi.prototype.transformPositionToScaledSpace=function(e,t){return l(t)||(t=new m),m.multiplyComponents(e,this._oneOverRadii,t)};yi.prototype.transformPositionFromScaledSpace=function(e,t){return l(t)||(t=new m),m.multiplyComponents(e,this._radii,t)};yi.prototype.equals=function(e){return this===e||l(e)&&m.equals(this._radii,e._radii)};yi.prototype.toString=function(){return this._radii.toString()};yi.prototype.getSurfaceNormalIntersectionWithZAxis=function(e,t,n){t=t??0;let i=this._squaredXOverSquaredZ;if(l(n)||(n=new m),n.x=0,n.y=0,n.z=e.z*(1-i),!(Math.abs(n.z)>=this._radii.z-t))return n};var dVe=new m;yi.prototype.getLocalCurvature=function(e,t){l(t)||(t=new U);let n=this.getSurfaceNormalIntersectionWithZAxis(e,0,dVe),i=m.distance(e,n),o=this.minimumRadius*i/this.maximumRadius**2,r=i*o**2;return U.fromElements(1/i,1/r,t)};var uVe=[.14887433898163,.43339539412925,.67940956829902,.86506336668898,.97390652851717,0],mVe=[.29552422471475,.26926671930999,.21908636251598,.14945134915058,.066671344308684,0];function Mq(e,t,n){let i=.5*(t+e),o=.5*(t-e),r=0;for(let s=0;s<5;s++){let a=o*uVe[s];r+=mVe[s]*(n(i+a)+n(i-a))}return r*=o,r}yi.prototype.surfaceArea=function(e){let t=e.west,n=e.east,i=e.south,o=e.north;for(;n<t;)n+=X.TWO_PI;let r=this._radiiSquared,s=r.x,a=r.y,c=r.z,d=s*a;return Mq(i,o,function(u){let h=Math.cos(u),p=Math.sin(u);return Math.cos(u)*Mq(t,n,function(g){let f=Math.cos(g),y=Math.sin(g);return Math.sqrt(d*p*p+c*(a*f*f+s*y*y)*h*h)})})};var ne=yi;var ORt=_(T(),1);function pN(e){this._ellipsoid=e??ne.default,this._semimajorAxis=this._ellipsoid.maximumRadius,this._oneOverSemimajorAxis=1/this._semimajorAxis}Object.defineProperties(pN.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}});pN.prototype.project=function(e,t){let n=this._semimajorAxis,i=e.longitude*n,o=e.latitude*n,r=e.height;return l(t)?(t.x=i,t.y=o,t.z=r,t):new m(i,o,r)};pN.prototype.unproject=function(e,t){let n=this._oneOverSemimajorAxis,i=e.x*n,o=e.y*n,r=e.z;return l(t)?(t.longitude=i,t.latitude=o,t.height=r,t):new he(i,o,r)};var Ei=pN;var zRt=_(T(),1),hVe={OUTSIDE:-1,INTERSECTING:0,INSIDE:1},zt=Object.freeze(hVe);var SIt=_(T(),1);var hIt=_(T(),1);var xEt=_(T(),1);var KRt=_(T(),1);function fVe(e,t,n){let i=0,o=e.length-1,r,s;for(;i<=o;){if(r=~~((i+o)/2),s=n(e[r],t),s<0){i=r+1;continue}if(s>0){o=r-1;continue}return r}return~(o+1)}var Xo=fVe;var QRt=_(T(),1);function pVe(e,t,n,i,o){this.xPoleWander=e,this.yPoleWander=t,this.xPoleOffset=n,this.yPoleOffset=i,this.ut1MinusUtc=o}var P0=pVe;var yZt=_(T(),1);var iZt=_(T(),1);var qRt=_(T(),1);function bVe(e){return e%4===0&&e%100!==0||e%400===0}var Rm=bVe;var kq=[31,28,31,30,31,30,31,31,30,31,30,31];function gVe(e,t,n,i,o,r,s,a){e=e??1,t=t??1,n=n??1,i=i??0,o=o??0,r=r??0,s=s??0,a=a??!1,this.year=e,this.month=t,this.day=n,this.hour=i,this.minute=o,this.second=r,this.millisecond=s,this.isLeapSecond=a;function y(){yo.typeOf.number.greaterThanOrEquals("Year",e,1),yo.typeOf.number.lessThanOrEquals("Year",e,9999),yo.typeOf.number.greaterThanOrEquals("Month",t,1),yo.typeOf.number.lessThanOrEquals("Month",t,12),yo.typeOf.number.greaterThanOrEquals("Day",n,1),yo.typeOf.number.lessThanOrEquals("Day",n,31),yo.typeOf.number.greaterThanOrEquals("Hour",i,0),yo.typeOf.number.lessThanOrEquals("Hour",i,23),yo.typeOf.number.greaterThanOrEquals("Minute",o,0),yo.typeOf.number.lessThanOrEquals("Minute",o,59),yo.typeOf.bool("IsLeapSecond",a),yo.typeOf.number.greaterThanOrEquals("Second",r,0),yo.typeOf.number.lessThanOrEquals("Second",r,a?60:59),yo.typeOf.number.greaterThanOrEquals("Millisecond",s,0),yo.typeOf.number.lessThan("Millisecond",s,1e3)}function x(){let S=t===2&&Rm(e)?kq[t-1]+1:kq[t-1];if(n>S)throw new pe("Month and Day represents invalid date")}}var Tp=gVe;var rZt=_(T(),1);function yVe(e,t){this.julianDate=e,this.offset=t}var Yi=yVe;var aZt=_(T(),1),xVe={SECONDS_PER_MILLISECOND:.001,SECONDS_PER_MINUTE:60,MINUTES_PER_HOUR:60,HOURS_PER_DAY:24,SECONDS_PER_HOUR:3600,MINUTES_PER_DAY:1440,SECONDS_PER_DAY:86400,DAYS_PER_JULIAN_CENTURY:36525,PICOSECOND:1e-9,MODIFIED_JULIAN_DATE_DIFFERENCE:24000005e-1},Kn=Object.freeze(xVe);var lZt=_(T(),1),_Ve={UTC:0,TAI:1},Hn=Object.freeze(_Ve);var Dq=new Tp,oO=[31,28,31,30,31,30,31,31,30,31,30,31],rO=29;function sO(e,t){return Wt.compare(e.julianDate,t.julianDate)}var DS=new Yi;function gN(e){DS.julianDate=e;let t=Wt.leapSeconds,n=Xo(t,DS,sO);n<0&&(n=~n),n>=t.length&&(n=t.length-1);let i=t[n].offset;n>0&&Wt.secondsDifference(t[n].julianDate,e)>i&&(n--,i=t[n].offset),Wt.addSeconds(e,i,e)}function Uq(e,t){DS.julianDate=e;let n=Wt.leapSeconds,i=Xo(n,DS,sO);if(i<0&&(i=~i),i===0)return Wt.addSeconds(e,-n[0].offset,t);if(i>=n.length)return Wt.addSeconds(e,-n[i-1].offset,t);let o=Wt.secondsDifference(n[i].julianDate,e);if(o===0)return Wt.addSeconds(e,-n[i].offset,t);if(!(o<=1))return Wt.addSeconds(e,-n[--i].offset,t)}function v0(e,t,n){let i=t/Kn.SECONDS_PER_DAY|0;return e+=i,t-=Kn.SECONDS_PER_DAY*i,t<0&&(e--,t+=Kn.SECONDS_PER_DAY),n.dayNumber=e,n.secondsOfDay=t,n}function aO(e,t,n,i,o,r,s){let a=(t-14)/12|0,c=e+4800+a,d=(1461*c/4|0)+(367*(t-2-12*a)/12|0)-(3*((c+100)/100|0)/4|0)+n-32075;i=i-12,i<0&&(i+=24);let u=r+(i*Kn.SECONDS_PER_HOUR+o*Kn.SECONDS_PER_MINUTE+s*Kn.SECONDS_PER_MILLISECOND);return u>=43200&&(d-=1),[d,u]}var TVe=/^(\d{4})$/,SVe=/^(\d{4})-(\d{2})$/,CVe=/^(\d{4})-?(\d{3})$/,VVe=/^(\d{4})-?W(\d{2})-?(\d{1})?$/,LVe=/^(\d{4})-?(\d{2})-?(\d{2})$/,cO=/([Z+\-])?(\d{2})?:?(\d{2})?$/,RVe=/^(\d{2})(\.\d+)?/.source+cO.source,ZVe=/^(\d{2}):?(\d{2})(\.\d+)?/.source+cO.source,GVe=/^(\d{2}):?(\d{2}):?(\d{2})(\.\d+)?/.source+cO.source;function Wt(e,t,n){this.dayNumber=void 0,this.secondsOfDay=void 0,e=e??0,t=t??0,n=n??Hn.UTC;let i=e|0;t=t+(e-i)*Kn.SECONDS_PER_DAY,v0(i,t,this),n===Hn.UTC&&gN(this)}Wt.fromGregorianDate=function(e,t){let n=aO(e.year,e.month,e.day,e.hour,e.minute,e.second,e.millisecond);return l(t)?(v0(n[0],n[1],t),gN(t),t):new Wt(n[0],n[1],Hn.UTC)};Wt.fromDate=function(e,t){let n=aO(e.getUTCFullYear(),e.getUTCMonth()+1,e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds());return l(t)?(v0(n[0],n[1],t),gN(t),t):new Wt(n[0],n[1],Hn.UTC)};Wt.fromIso8601=function(e,t){e=e.replace(",",".");let n=e.split("T"),i,o=1,r=1,s=0,a=0,c=0,d=0,u=n[0],h=n[1],p,g;if(n=u.match(LVe),n!==null)i=+n[1],o=+n[2],r=+n[3];else if(n=u.match(SVe),n!==null)i=+n[1],o=+n[2];else if(n=u.match(TVe),n!==null)i=+n[1];else{let S;if(n=u.match(CVe),n!==null)i=+n[1],S=+n[2],g=Rm(i);else if(n=u.match(VVe),n!==null){i=+n[1];let C=+n[2],V=+n[3]||0,L=new Date(Date.UTC(i,0,4));S=C*7+V-L.getUTCDay()-3}p=new Date(Date.UTC(i,0,1)),p.setUTCDate(S),o=p.getUTCMonth()+1,r=p.getUTCDate()}g=Rm(i);let f;if(l(h)){n=h.match(GVe),n!==null?(s=+n[1],a=+n[2],c=+n[3],d=+(n[4]||0)*1e3,f=5):(n=h.match(ZVe),n!==null?(s=+n[1],a=+n[2],c=+(n[3]||0)*60,f=4):(n=h.match(RVe),n!==null&&(s=+n[1],a=+(n[2]||0)*60,f=3)));let S=n[f],C=+n[f+1],V=+(n[f+2]||0);switch(S){case"+":s=s-C,a=a-V;break;case"-":s=s+C,a=a+V;break;case"Z":break;default:a=a+new Date(Date.UTC(i,o-1,r,s,a)).getTimezoneOffset();break}}let y=c===60;for(y&&c--;a>=60;)a-=60,s++;for(;s>=24;)s-=24,r++;for(p=g&&o===2?rO:oO[o-1];r>p;)r-=p,o++,o>12&&(o-=12,i++),p=g&&o===2?rO:oO[o-1];for(;a<0;)a+=60,s--;for(;s<0;)s+=24,r--;for(;r<1;)o--,o<1&&(o+=12,i--),p=g&&o===2?rO:oO[o-1],r+=p;let x=aO(i,o,r,s,a,c,d);return l(t)?(v0(x[0],x[1],t),gN(t)):t=new Wt(x[0],x[1],Hn.UTC),y&&Wt.addSeconds(t,1,t),t};Wt.now=function(e){return Wt.fromDate(new Date,e)};var bN=new Wt(0,0,Hn.TAI);Wt.toGregorianDate=function(e,t){let n=!1,i=Uq(e,bN);l(i)||(Wt.addSeconds(e,-1,bN),i=Uq(bN,bN),n=!0);let o=i.dayNumber,r=i.secondsOfDay;r>=43200&&(o+=1);let s=o+68569|0,a=4*s/146097|0;s=s-((146097*a+3)/4|0)|0;let c=4e3*(s+1)/1461001|0;s=s-(1461*c/4|0)+31|0;let d=80*s/2447|0,u=s-(2447*d/80|0)|0;s=d/11|0;let h=d+2-12*s|0,p=100*(a-49)+c+s|0,g=r/Kn.SECONDS_PER_HOUR|0,f=r-g*Kn.SECONDS_PER_HOUR,y=f/Kn.SECONDS_PER_MINUTE|0;f=f-y*Kn.SECONDS_PER_MINUTE;let x=f|0,S=(f-x)/Kn.SECONDS_PER_MILLISECOND;return g+=12,g>23&&(g-=24),n&&(x+=1),l(t)?(t.year=p,t.month=h,t.day=u,t.hour=g,t.minute=y,t.second=x,t.millisecond=S,t.isLeapSecond=n,t):new Tp(p,h,u,g,y,x,S,n)};Wt.toDate=function(e){let t=Wt.toGregorianDate(e,Dq),n=t.second;return t.isLeapSecond&&(n-=1),new Date(Date.UTC(t.year,t.month-1,t.day,t.hour,t.minute,n,t.millisecond))};Wt.toIso8601=function(e,t){let n=Wt.toGregorianDate(e,Dq),i=n.year,o=n.month,r=n.day,s=n.hour,a=n.minute,c=n.second,d=n.millisecond;i===1e4&&o===1&&r===1&&s===0&&a===0&&c===0&&d===0&&(i=9999,o=12,r=31,s=24);let u;if(!l(t)&&d!==0){let h=d*.01;return u=h<1e-6?h.toFixed(20).replace(".","").replace(/0+$/,""):h.toString().replace(".",""),`${i.toString().padStart(4,"0")}-${o.toString().padStart(2,"0")}-${r.toString().padStart(2,"0")}T${s.toString().padStart(2,"0")}:${a.toString().padStart(2,"0")}:${c.toString().padStart(2,"0")}.${u}Z`}return!l(t)||t===0?`${i.toString().padStart(4,"0")}-${o.toString().padStart(2,"0")}-${r.toString().padStart(2,"0")}T${s.toString().padStart(2,"0")}:${a.toString().padStart(2,"0")}:${c.toString().padStart(2,"0")}Z`:(u=(d*.01).toFixed(t).replace(".","").slice(0,t),`${i.toString().padStart(4,"0")}-${o.toString().padStart(2,"0")}-${r.toString().padStart(2,"0")}T${s.toString().padStart(2,"0")}:${a.toString().padStart(2,"0")}:${c.toString().padStart(2,"0")}.${u}Z`)};Wt.clone=function(e,t){if(l(e))return l(t)?(t.dayNumber=e.dayNumber,t.secondsOfDay=e.secondsOfDay,t):new Wt(e.dayNumber,e.secondsOfDay,Hn.TAI)};Wt.compare=function(e,t){let n=e.dayNumber-t.dayNumber;return n!==0?n:e.secondsOfDay-t.secondsOfDay};Wt.equals=function(e,t){return e===t||l(e)&&l(t)&&e.dayNumber===t.dayNumber&&e.secondsOfDay===t.secondsOfDay};Wt.equalsEpsilon=function(e,t,n){return n=n??0,e===t||l(e)&&l(t)&&Math.abs(Wt.secondsDifference(e,t))<=n};Wt.totalDays=function(e){return e.dayNumber+e.secondsOfDay/Kn.SECONDS_PER_DAY};Wt.secondsDifference=function(e,t){return(e.dayNumber-t.dayNumber)*Kn.SECONDS_PER_DAY+(e.secondsOfDay-t.secondsOfDay)};Wt.daysDifference=function(e,t){let n=e.dayNumber-t.dayNumber,i=(e.secondsOfDay-t.secondsOfDay)/Kn.SECONDS_PER_DAY;return n+i};Wt.computeTaiMinusUtc=function(e){DS.julianDate=e;let t=Wt.leapSeconds,n=Xo(t,DS,sO);return n<0&&(n=~n,--n,n<0&&(n=0)),t[n].offset};Wt.addSeconds=function(e,t,n){return v0(e.dayNumber,e.secondsOfDay+t,n)};Wt.addMinutes=function(e,t,n){let i=e.secondsOfDay+t*Kn.SECONDS_PER_MINUTE;return v0(e.dayNumber,i,n)};Wt.addHours=function(e,t,n){let i=e.secondsOfDay+t*Kn.SECONDS_PER_HOUR;return v0(e.dayNumber,i,n)};Wt.addDays=function(e,t,n){let i=e.dayNumber+t;return v0(i,e.secondsOfDay,n)};Wt.lessThan=function(e,t){return Wt.compare(e,t)<0};Wt.lessThanOrEquals=function(e,t){return Wt.compare(e,t)<=0};Wt.greaterThan=function(e,t){return Wt.compare(e,t)>0};Wt.greaterThanOrEquals=function(e,t){return Wt.compare(e,t)>=0};Wt.prototype.clone=function(e){return Wt.clone(this,e)};Wt.prototype.equals=function(e){return Wt.equals(this,e)};Wt.prototype.equalsEpsilon=function(e,t){return Wt.equalsEpsilon(this,e,t)};Wt.prototype.toString=function(){return Wt.toIso8601(this)};Wt.leapSeconds=[new Yi(new Wt(2441317,43210,Hn.TAI),10),new Yi(new Wt(2441499,43211,Hn.TAI),11),new Yi(new Wt(2441683,43212,Hn.TAI),12),new Yi(new Wt(2442048,43213,Hn.TAI),13),new Yi(new Wt(2442413,43214,Hn.TAI),14),new Yi(new Wt(2442778,43215,Hn.TAI),15),new Yi(new Wt(2443144,43216,Hn.TAI),16),new Yi(new Wt(2443509,43217,Hn.TAI),17),new Yi(new Wt(2443874,43218,Hn.TAI),18),new Yi(new Wt(2444239,43219,Hn.TAI),19),new Yi(new Wt(2444786,43220,Hn.TAI),20),new Yi(new Wt(2445151,43221,Hn.TAI),21),new Yi(new Wt(2445516,43222,Hn.TAI),22),new Yi(new Wt(2446247,43223,Hn.TAI),23),new Yi(new Wt(2447161,43224,Hn.TAI),24),new Yi(new Wt(2447892,43225,Hn.TAI),25),new Yi(new Wt(2448257,43226,Hn.TAI),26),new Yi(new Wt(2448804,43227,Hn.TAI),27),new Yi(new Wt(2449169,43228,Hn.TAI),28),new Yi(new Wt(2449534,43229,Hn.TAI),29),new Yi(new Wt(2450083,43230,Hn.TAI),30),new Yi(new Wt(2450630,43231,Hn.TAI),31),new Yi(new Wt(2451179,43232,Hn.TAI),32),new Yi(new Wt(2453736,43233,Hn.TAI),33),new Yi(new Wt(2454832,43234,Hn.TAI),34),new Yi(new Wt(2456109,43235,Hn.TAI),35),new Yi(new Wt(2457204,43236,Hn.TAI),36),new Yi(new Wt(2457754,43237,Hn.TAI),37)];var q=Wt;var aEt=_(T(),1),a$=_(dd(),1);var VZt=_(T(),1);function EVe(e){return(e.length===0||e[e.length-1]!=="/")&&(e=`${e}/`),e}var JL=EVe;var RZt=_(T(),1);function Jq(e,t){if(e===null||typeof e!="object")return e;t=t??!1;let n=new e.constructor;for(let i in e)if(e.hasOwnProperty(i)){let o=e[i];t&&(o=Jq(o,t)),n[i]=o}return n}var Ye=Jq;var EZt=_(T(),1);function Qq(e,t,n){n=n??!1;let i={},o=l(e),r=l(t),s,a,c;if(o)for(s in e)e.hasOwnProperty(s)&&(a=e[s],r&&n&&typeof a=="object"&&t.hasOwnProperty(s)?(c=t[s],typeof c=="object"?i[s]=Qq(a,c,n):i[s]=a):i[s]=a);if(r)for(s in t)t.hasOwnProperty(s)&&!i.hasOwnProperty(s)&&(c=t[s],i[s]=c);return i}var St=Qq;var XZt=_(T(),1);function IVe(){let e,t,n=new Promise(function(i,o){e=i,t=o});return{resolve:e,reject:t,promise:n}}var Ll=IVe;var vZt=_(T(),1),jq=_(dd(),1);function lO(e,t){let n;return typeof document<"u"&&(n=document),lO._implementation(e,t,n)}lO._implementation=function(e,t,n){if(!l(t)){if(typeof n>"u")return e;t=n.baseURI??n.location.href}let i=new jq.default(e);return i.scheme()!==""?i.toString():i.absoluteTo(t).toString()};var $h=lO;var FZt=_(T(),1),qq=_(dd(),1);function XVe(e,t){let n="",i=e.lastIndexOf("/");return i!==-1&&(n=e.substring(0,i+1)),t&&(e=new qq.default(e),e.query().length!==0&&(n+=`?${e.query()}`),e.fragment().length!==0&&(n+=`#${e.fragment()}`)),n}var QL=XVe;var MZt=_(T(),1),$q=_(dd(),1);function WVe(e){let t=new $q.default(e);t.normalize();let n=t.path(),i=n.lastIndexOf("/");return i!==-1&&(n=n.substr(i+1)),i=n.lastIndexOf("."),i===-1?n="":n=n.substr(i+1),n}var nx=WVe;var UZt=_(T(),1);var e$={};function PVe(e,t,n){l(t)||(t=e.width),l(n)||(n=e.height);let i=e$[t];l(i)||(i={},e$[t]=i);let o=i[n];if(!l(o)){let r=document.createElement("canvas");r.width=t,r.height=n,o=r.getContext("2d",{willReadFrequently:!0}),o.globalCompositeOperation="copy",i[n]=o}return o.drawImage(e,0,0,t,n),o.getImageData(0,0,t,n).data}var Zm=PVe;var BZt=_(T(),1);var vVe=/^blob:/i;function wVe(e){return vVe.test(e)}var ix=wVe;var zZt=_(T(),1);var ef;function FVe(e){l(ef)||(ef=document.createElement("a")),ef.href=window.location.href;let t=ef.host,n=ef.protocol;return ef.href=e,ef.href=ef.href,n!==ef.protocol||t!==ef.host}var w0=FVe;var KZt=_(T(),1);var AVe=/^data:/i;function MVe(e){return AVe.test(e)}var Sp=MVe;var QZt=_(T(),1);function NVe(e){let t=document.createElement("script");return t.async=!0,t.src=e,new Promise((n,i)=>{window.crossOriginIsolated&&t.setAttribute("crossorigin","anonymous");let o=document.getElementsByTagName("head")[0];t.onload=function(){t.onload=void 0,o.removeChild(t),n()},t.onerror=function(r){i(r)},o.appendChild(t)})}var ox=NVe;var qZt=_(T(),1);function kVe(e){let t="";for(let n in e)if(e.hasOwnProperty(n)){let i=e[n],o=`${encodeURIComponent(n)}=`;if(Array.isArray(i))for(let r=0,s=i.length;r<s;++r)t+=`${o+encodeURIComponent(i[r])}&`;else t+=`${o+encodeURIComponent(i)}&`}return t=t.slice(0,-1),t}var rx=kVe;var tGt=_(T(),1);function UVe(e){let t={};if(e==="")return t;let n=e.replace(/\+/g,"%20").split(/[&;]/);for(let i=0,o=n.length;i<o;++i){let r=n[i].split("="),s=decodeURIComponent(r[0]),a=r[1];l(a)?a=decodeURIComponent(a):a="";let c=t[s];typeof c=="string"?t[s]=[c,a]:Array.isArray(c)?c.push(a):t[s]=a}return t}var ud=UVe;var uGt=_(T(),1);var iGt=_(T(),1),DVe={UNISSUED:0,ISSUED:1,ACTIVE:2,RECEIVED:3,CANCELLED:4,FAILED:5},jn=Object.freeze(DVe);var rGt=_(T(),1),BVe={TERRAIN:0,IMAGERY:1,TILES3D:2,OTHER:3},ds=Object.freeze(BVe);function TN(e){e=e??Y.EMPTY_OBJECT;let t=e.throttleByServer??!1,n=e.throttle??!1;this.url=e.url,this.requestFunction=e.requestFunction,this.cancelFunction=e.cancelFunction,this.priorityFunction=e.priorityFunction,this.priority=e.priority??0,this.throttle=n,this.throttleByServer=t,this.type=e.type??ds.OTHER,this.serverKey=e.serverKey,this.state=jn.UNISSUED,this.deferred=void 0,this.cancelled=!1}TN.prototype.cancel=function(){this.cancelled=!0};TN.prototype.clone=function(e){return l(e)?(e.url=this.url,e.requestFunction=this.requestFunction,e.cancelFunction=this.cancelFunction,e.priorityFunction=this.priorityFunction,e.priority=this.priority,e.throttle=this.throttle,e.throttleByServer=this.throttleByServer,e.type=this.type,e.serverKey=this.serverKey,e.state=jn.UNISSUED,e.deferred=void 0,e.cancelled=!1,e):new TN(this)};var zo=TN;var gGt=_(T(),1);var hGt=_(T(),1);function OVe(e){let t={};if(!e)return t;let n=e.split(`\r `);for(let i=0;i<n.length;++i){let o=n[i],r=o.indexOf(": ");if(r>0){let s=o.substring(0,r),a=o.substring(r+2);t[s]=a}}return t}var jL=OVe;function t$(e,t,n){this.statusCode=e,this.response=t,this.responseHeaders=n,typeof this.responseHeaders=="string"&&(this.responseHeaders=jL(this.responseHeaders))}t$.prototype.toString=function(){let e="Request has failed.";return l(this.statusCode)&&(e+=` Status Code: ${this.statusCode}`),e};var tf=t$;var WGt=_(T(),1),SN=_(dd(),1);var _Gt=_(T(),1);function qL(){this._listeners=[],this._scopes=[],this._toRemove=[],this._insideRaiseEvent=!1}Object.defineProperties(qL.prototype,{numberOfListeners:{get:function(){return this._listeners.length-this._toRemove.length}}});qL.prototype.addEventListener=function(e,t){this._listeners.push(e),this._scopes.push(t);let n=this;return function(){n.removeEventListener(e,t)}};qL.prototype.removeEventListener=function(e,t){let n=this._listeners,i=this._scopes,o=-1;for(let r=0;r<n.length;r++)if(n[r]===e&&i[r]===t){o=r;break}return o!==-1?(this._insideRaiseEvent?(this._toRemove.push(o),n[o]=void 0,i[o]=void 0):(n.splice(o,1),i.splice(o,1)),!0):!1};function YVe(e,t){return t-e}qL.prototype.raiseEvent=function(){this._insideRaiseEvent=!0;let e,t=this._listeners,n=this._scopes,i=t.length;for(e=0;e<i;e++){let r=t[e];l(r)&&t[e].apply(n[e],arguments)}let o=this._toRemove;if(i=o.length,i>0){for(o.sort(YVe),e=0;e<i;e++){let r=o[e];t.splice(r,1),n.splice(r,1)}o.length=0}this._insideRaiseEvent=!1};var be=qL;var CGt=_(T(),1);function sx(e){this._comparator=e.comparator,this._array=[],this._length=0,this._maximumLength=void 0}Object.defineProperties(sx.prototype,{length:{get:function(){return this._length}},internalArray:{get:function(){return this._array}},maximumLength:{get:function(){return this._maximumLength},set:function(e){let t=this._length;if(e<t){let n=this._array;for(let i=e;i<t;++i)n[i]=void 0;this._length=e,n.length=e}this._maximumLength=e}},comparator:{get:function(){return this._comparator}}});function dO(e,t,n){let i=e[t];e[t]=e[n],e[n]=i}sx.prototype.reserve=function(e){e=e??this._length,this._array.length=e};sx.prototype.heapify=function(e){e=e??0;let t=this._length,n=this._comparator,i=this._array,o=-1,r=!0;for(;r;){let s=2*(e+1),a=s-1;a<t&&n(i[a],i[e])<0?o=a:o=e,s<t&&n(i[s],i[o])<0&&(o=s),o!==e?(dO(i,o,e),e=o):r=!1}};sx.prototype.resort=function(){let e=this._length;for(let t=Math.ceil(e/2);t>=0;--t)this.heapify(t)};sx.prototype.insert=function(e){let t=this._array,n=this._comparator,i=this._maximumLength,o=this._length++;for(o<t.length?t[o]=e:t.push(e);o!==0;){let s=Math.floor((o-1)/2);if(n(t[o],t[s])<0)dO(t,o,s),o=s;else break}let r;return l(i)&&this._length>i&&(r=t[i],this._length=i),r};sx.prototype.pop=function(e){if(e=e??0,this._length===0)return;let t=this._array,n=t[e];return dO(t,e,--this._length),this.heapify(e),t[this._length]=void 0,n};var $L=sx;function zVe(e,t){return e.priority-t.priority}var eo={numberOfAttemptedRequests:0,numberOfActiveRequests:0,numberOfCancelledRequests:0,numberOfCancelledActiveRequests:0,numberOfFailedRequests:0,numberOfActiveRequestsEver:0,lastNumberOfActiveRequests:0},YS=20,nc=new $L({comparator:zVe});nc.maximumLength=YS;nc.reserve(YS);var nf=[],Cp={},HVe=typeof document<"u"?new SN.default(document.location.href):new SN.default,CN=new be;function Ho(){}Ho.maximumRequests=50;Ho.maximumRequestsPerServer=18;Ho.requestsByServer={};Ho.throttleRequests=!0;Ho.debugShowStatistics=!1;Ho.requestCompletedEvent=CN;Object.defineProperties(Ho,{statistics:{get:function(){return eo}},priorityHeapLength:{get:function(){return YS},set:function(e){if(e<YS)for(;nc.length>e;){let t=nc.pop();ax(t)}YS=e,nc.maximumLength=e,nc.reserve(e)}}});function n$(e){l(e.priorityFunction)&&(e.priority=e.priorityFunction())}Ho.serverHasOpenSlots=function(e,t){t=t??1;let n=Ho.requestsByServer[e]??Ho.maximumRequestsPerServer;return Cp[e]+t<=n};Ho.heapHasOpenSlots=function(e){return nc.length+e<=YS};function i$(e){return e.state===jn.UNISSUED&&(e.state=jn.ISSUED,e.deferred=Ll()),e.deferred.promise}function KVe(e){return function(t){if(e.state===jn.CANCELLED)return;let n=e.deferred;--eo.numberOfActiveRequests,--Cp[e.serverKey],CN.raiseEvent(),e.state=jn.RECEIVED,e.deferred=void 0,n.resolve(t)}}function JVe(e){return function(t){e.state!==jn.CANCELLED&&(++eo.numberOfFailedRequests,--eo.numberOfActiveRequests,--Cp[e.serverKey],CN.raiseEvent(t),e.state=jn.FAILED,e.deferred.reject(t))}}function o$(e){let t=i$(e);return e.state=jn.ACTIVE,nf.push(e),++eo.numberOfActiveRequests,++eo.numberOfActiveRequestsEver,++Cp[e.serverKey],e.requestFunction().then(KVe(e)).catch(JVe(e)),t}function ax(e){let t=e.state===jn.ACTIVE;if(e.state=jn.CANCELLED,++eo.numberOfCancelledRequests,l(e.deferred)){let n=e.deferred;e.deferred=void 0,n.reject()}t&&(--eo.numberOfActiveRequests,--Cp[e.serverKey],++eo.numberOfCancelledActiveRequests),l(e.cancelFunction)&&e.cancelFunction()}Ho.update=function(){let e,t,n=0,i=nf.length;for(e=0;e<i;++e){if(t=nf[e],t.cancelled&&ax(t),t.state!==jn.ACTIVE){++n;continue}n>0&&(nf[e-n]=t)}nf.length-=n;let o=nc.internalArray,r=nc.length;for(e=0;e<r;++e)n$(o[e]);nc.resort();let s=Math.max(Ho.maximumRequests-nf.length,0),a=0;for(;a<s&&nc.length>0;){if(t=nc.pop(),t.cancelled){ax(t);continue}if(t.throttleByServer&&!Ho.serverHasOpenSlots(t.serverKey)){ax(t);continue}o$(t),++a}QVe()};Ho.getServerKey=function(e){let t=new SN.default(e);t.scheme()===""&&(t=t.absoluteTo(HVe),t.normalize());let n=t.authority();/:/.test(n)||(n=`${n}:${t.scheme()==="https"?"443":"80"}`);let i=Cp[n];return l(i)||(Cp[n]=0),n};Ho.request=function(e){if(Sp(e.url)||ix(e.url))return CN.raiseEvent(),e.state=jn.RECEIVED,e.requestFunction();if(++eo.numberOfAttemptedRequests,l(e.serverKey)||(e.serverKey=Ho.getServerKey(e.url)),Ho.throttleRequests&&e.throttleByServer&&!Ho.serverHasOpenSlots(e.serverKey))return;if(!Ho.throttleRequests||!e.throttle)return o$(e);if(nf.length>=Ho.maximumRequests)return;n$(e);let t=nc.insert(e);if(l(t)){if(t===e)return;ax(t)}return i$(e)};function QVe(){Ho.debugShowStatistics&&(eo.numberOfActiveRequests===0&&eo.lastNumberOfActiveRequests>0&&(eo.numberOfAttemptedRequests>0&&(console.log(`Number of attempted requests: ${eo.numberOfAttemptedRequests}`),eo.numberOfAttemptedRequests=0),eo.numberOfCancelledRequests>0&&(console.log(`Number of cancelled requests: ${eo.numberOfCancelledRequests}`),eo.numberOfCancelledRequests=0),eo.numberOfCancelledActiveRequests>0&&(console.log(`Number of cancelled active requests: ${eo.numberOfCancelledActiveRequests}`),eo.numberOfCancelledActiveRequests=0),eo.numberOfFailedRequests>0&&(console.log(`Number of failed requests: ${eo.numberOfFailedRequests}`),eo.numberOfFailedRequests=0)),eo.lastNumberOfActiveRequests=eo.numberOfActiveRequests)}Ho.clearForSpecs=function(){for(;nc.length>0;){let t=nc.pop();ax(t)}let e=nf.length;for(let t=0;t<e;++t)ax(nf[t]);nf.length=0,Cp={},eo.numberOfAttemptedRequests=0,eo.numberOfActiveRequests=0,eo.numberOfCancelledRequests=0,eo.numberOfCancelledActiveRequests=0,eo.numberOfFailedRequests=0,eo.numberOfActiveRequestsEver=0,eo.lastNumberOfActiveRequests=0};Ho.numberOfActiveRequestsByServer=function(e){return Cp[e]};Ho.requestHeap=nc;var ic=Ho;var wGt=_(T(),1),r$=_(dd(),1);var eR={},zS={};eR.add=function(e,t){let n=`${e.toLowerCase()}:${t}`;l(zS[n])||(zS[n]=!0)};eR.remove=function(e,t){let n=`${e.toLowerCase()}:${t}`;l(zS[n])&&delete zS[n]};function jVe(e){let t=new r$.default(e);t.normalize();let n=t.authority();if(n.length!==0){if(t.authority(n),n.indexOf("@")!==-1&&(n=n.split("@")[1]),n.indexOf(":")===-1){let i=t.scheme();if(i.length===0&&(i=window.location.protocol,i=i.substring(0,i.length-1)),i==="http")n+=":80";else if(i==="https")n+=":443";else return}return n}}eR.contains=function(e){let t=jVe(e);return!!(l(t)&&l(zS[t]))};eR.clear=function(){zS={}};var HS=eR;var c$=function(){try{let e=new XMLHttpRequest;return e.open("GET","#",!0),e.responseType="blob",e.responseType==="blob"}catch{return!1}}();function Xt(e){e=e??Y.EMPTY_OBJECT,typeof e=="string"&&(e={url:e}),this._url=void 0,this._templateValues=of(e.templateValues,{}),this._queryParameters=of(e.queryParameters,{}),this.headers=of(e.headers,{}),this.request=e.request??new zo,this.proxy=e.proxy,this.retryCallback=e.retryCallback,this.retryAttempts=e.retryAttempts??0,this._retryCount=0,e.parseUrl??!0?this.parseUrl(e.url,!0,!0):this._url=e.url,this._credits=e.credits}function of(e,t){return l(e)?Ye(e):t}Xt.createIfNeeded=function(e){return e instanceof Xt?e.getDerivedResource({request:e.request}):typeof e!="string"?e:new Xt({url:e})};var KS;Xt.supportsImageBitmapOptions=function(){return l(KS)?KS:typeof createImageBitmap!="function"?(KS=Promise.resolve(!1),KS):(KS=Xt.fetchBlob({url:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAABGdBTUEAAE4g3rEiDgAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADElEQVQI12Ng6GAAAAEUAIngE3ZiAAAAAElFTkSuQmCC"}).then(function(t){let n={imageOrientation:"flipY",premultiplyAlpha:"none",colorSpaceConversion:"none"};return Promise.all([createImageBitmap(t,n),createImageBitmap(t)])}).then(function(t){let n=Zm(t[0]),i=Zm(t[1]);return n[1]!==i[1]}).catch(function(){return!1}),KS)};Object.defineProperties(Xt,{isBlobSupported:{get:function(){return c$}}});Object.defineProperties(Xt.prototype,{queryParameters:{get:function(){return this._queryParameters}},templateValues:{get:function(){return this._templateValues}},url:{get:function(){return this.getUrlComponent(!0,!0)},set:function(e){this.parseUrl(e,!1,!1)}},extension:{get:function(){return nx(this._url)}},isDataUri:{get:function(){return Sp(this._url)}},isBlobUri:{get:function(){return ix(this._url)}},isCrossOriginUrl:{get:function(){return w0(this._url)}},hasHeaders:{get:function(){return Object.keys(this.headers).length>0}},credits:{get:function(){return this._credits}}});Xt.prototype.toString=function(){return this.getUrlComponent(!0,!0)};Xt.prototype.parseUrl=function(e,t,n,i){let o=new a$.default(e),r=qVe(o.query());this._queryParameters=t?LN(r,this.queryParameters,n):r,o.search(""),o.fragment(""),l(i)&&o.scheme()===""&&(o=o.absoluteTo($h(i))),this._url=o.toString()};function qVe(e){return e.length===0?{}:e.indexOf("=")===-1?{[e]:void 0}:ud(e)}function LN(e,t,n){if(!n)return St(e,t);let i=Ye(e,!0);for(let o in t)if(t.hasOwnProperty(o)){let r=i[o],s=t[o];l(r)?(Array.isArray(r)||(r=i[o]=[r]),i[o]=r.concat(s)):i[o]=Array.isArray(s)?s.slice():s}return i}Xt.prototype.getUrlComponent=function(e,t){if(this.isDataUri)return this._url;let n=this._url;e&&(n=`${n}${$Ve(this.queryParameters)}`),n=n.replace(/%7B/g,"{").replace(/%7D/g,"}");let i=this._templateValues;return Object.keys(i).length>0&&(n=n.replace(/{(.*?)}/g,function(o,r){let s=i[r];return l(s)?encodeURIComponent(s):o})),t&&l(this.proxy)&&(n=this.proxy.getURL(n)),n};function $Ve(e){let t=Object.keys(e);return t.length===0?"":t.length===1&&!l(e[t[0]])?`?${t[0]}`:`?${rx(e)}`}Xt.prototype.setQueryParameters=function(e,t){t?this._queryParameters=LN(this._queryParameters,e,!1):this._queryParameters=LN(e,this._queryParameters,!1)};Xt.prototype.appendQueryParameters=function(e){this._queryParameters=LN(e,this._queryParameters,!0)};Xt.prototype.setTemplateValues=function(e,t){t?this._templateValues=St(this._templateValues,e):this._templateValues=St(e,this._templateValues)};Xt.prototype.getDerivedResource=function(e){let t=this.clone();if(t._retryCount=0,l(e.url)){let n=e.preserveQueryParameters??!1;t.parseUrl(e.url,!0,n,this._url)}return l(e.queryParameters)&&(t._queryParameters=St(e.queryParameters,t.queryParameters)),l(e.templateValues)&&(t._templateValues=St(e.templateValues,t.templateValues)),l(e.headers)&&(t.headers=St(e.headers,t.headers)),l(e.proxy)&&(t.proxy=e.proxy),l(e.request)&&(t.request=e.request),l(e.retryCallback)&&(t.retryCallback=e.retryCallback),l(e.retryAttempts)&&(t.retryAttempts=e.retryAttempts),t};Xt.prototype.retryOnError=function(e){let t=this.retryCallback;if(typeof t!="function"||this._retryCount>=this.retryAttempts)return Promise.resolve(!1);let n=this;return Promise.resolve(t(this,e)).then(function(i){return++n._retryCount,i})};Xt.prototype.clone=function(e){return l(e)?(e._url=this._url,e._queryParameters=Ye(this._queryParameters),e._templateValues=Ye(this._templateValues),e.headers=Ye(this.headers),e.proxy=this.proxy,e.retryCallback=this.retryCallback,e.retryAttempts=this.retryAttempts,e._retryCount=0,e.request=this.request.clone(),e):new Xt({url:this._url,queryParameters:this.queryParameters,templateValues:this.templateValues,headers:this.headers,proxy:this.proxy,retryCallback:this.retryCallback,retryAttempts:this.retryAttempts,request:this.request.clone(),parseUrl:!1,credits:l(this.credits)?this.credits.slice():void 0})};Xt.prototype.getBaseUri=function(e){return QL(this.getUrlComponent(e),e)};Xt.prototype.appendForwardSlash=function(){this._url=JL(this._url)};Xt.prototype.fetchArrayBuffer=function(){return this.fetch({responseType:"arraybuffer"})};Xt.fetchArrayBuffer=function(e){return new Xt(e).fetchArrayBuffer()};Xt.prototype.fetchBlob=function(){return this.fetch({responseType:"blob"})};Xt.fetchBlob=function(e){return new Xt(e).fetchBlob()};Xt.prototype.fetchImage=function(e){e=e??Y.EMPTY_OBJECT;let t=e.preferImageBitmap??!1,n=e.preferBlob??!1,i=e.flipY??!1,o=e.skipColorSpaceConversion??!1;if(mO(this.request),!c$||this.isDataUri||this.isBlobUri||!this.hasHeaders&&!n)return uO({resource:this,flipY:i,skipColorSpaceConversion:o,preferImageBitmap:t});let r=this.fetchBlob();if(!l(r))return;let s,a,c,d;return Xt.supportsImageBitmapOptions().then(function(u){return s=u,a=s&&t,r}).then(function(u){if(!l(u))return;if(d=u,a)return Xt.createImageBitmapFromBlob(u,{flipY:i,premultiplyAlpha:!1,skipColorSpaceConversion:o});let h=window.URL.createObjectURL(u);return c=new Xt({url:h}),uO({resource:c,flipY:i,skipColorSpaceConversion:o,preferImageBitmap:!1})}).then(function(u){if(l(u))return u.blob=d,a||window.URL.revokeObjectURL(c.url),u}).catch(function(u){return l(c)&&window.URL.revokeObjectURL(c.url),u.blob=d,Promise.reject(u)})};function uO(e){let t=e.resource,n=e.flipY,i=e.skipColorSpaceConversion,o=e.preferImageBitmap,r=t.request;r.url=t.url,r.requestFunction=function(){let a=!1;!t.isDataUri&&!t.isBlobUri&&(a=t.isCrossOriginUrl);let c=Ll();return Xt._Implementations.createImage(r,a,c,n,i,o),c.promise};let s=ic.request(r);if(l(s))return s.catch(function(a){return r.state!==jn.FAILED?Promise.reject(a):t.retryOnError(a).then(function(c){return c?(r.state=jn.UNISSUED,r.deferred=void 0,uO({resource:t,flipY:n,skipColorSpaceConversion:i,preferImageBitmap:o})):Promise.reject(a)})})}Xt.fetchImage=function(e){return new Xt(e).fetchImage({flipY:e.flipY,skipColorSpaceConversion:e.skipColorSpaceConversion,preferBlob:e.preferBlob,preferImageBitmap:e.preferImageBitmap})};Xt.prototype.fetchText=function(){return this.fetch({responseType:"text"})};Xt.fetchText=function(e){return new Xt(e).fetchText()};Xt.prototype.fetchJson=function(){let e=this.fetch({responseType:"text",headers:{Accept:"application/json,*/*;q=0.01"}});if(l(e))return e.then(function(t){if(l(t))return JSON.parse(t)})};Xt.fetchJson=function(e){return new Xt(e).fetchJson()};Xt.prototype.fetchXML=function(){return this.fetch({responseType:"document",overrideMimeType:"text/xml"})};Xt.fetchXML=function(e){return new Xt(e).fetchXML()};Xt.prototype.fetchJsonp=function(e){e=e??"callback",mO(this.request);let t;do t=`loadJsonp${X.nextRandomNumber().toString().substring(2,8)}`;while(l(window[t]));return l$(this,e,t)};function l$(e,t,n){let i={};i[t]=n,e.setQueryParameters(i);let o=e.request,r=e.url;o.url=r,o.requestFunction=function(){let a=Ll();return window[n]=function(c){a.resolve(c);try{delete window[n]}catch{window[n]=void 0}},Xt._Implementations.loadAndExecuteScript(r,n,a),a.promise};let s=ic.request(o);if(l(s))return s.catch(function(a){return o.state!==jn.FAILED?Promise.reject(a):e.retryOnError(a).then(function(c){return c?(o.state=jn.UNISSUED,o.deferred=void 0,l$(e,t,n)):Promise.reject(a)})})}Xt.fetchJsonp=function(e){return new Xt(e).fetchJsonp(e.callbackParameterName)};Xt.prototype._makeRequest=function(e){let t=this;mO(t.request);let n=t.request,i=t.url;n.url=i,n.requestFunction=function(){let r=e.responseType,s=St(e.headers,t.headers),a=e.overrideMimeType,c=e.method,d=e.data,u=Ll(),h=Xt._Implementations.loadWithXhr(i,r,c,d,s,u,a);return l(h)&&l(h.abort)&&(n.cancelFunction=function(){h.abort()}),u.promise};let o=ic.request(n);if(l(o))return o.then(function(r){return n.cancelFunction=void 0,r}).catch(function(r){return n.cancelFunction=void 0,n.state!==jn.FAILED?Promise.reject(r):t.retryOnError(r).then(function(s){return s?(n.state=jn.UNISSUED,n.deferred=void 0,t.fetch(e)):Promise.reject(r)})})};function mO(e){if(e.state===jn.ISSUED||e.state===jn.ACTIVE)throw new ae("The Resource is already being fetched.");e.state=jn.UNISSUED,e.deferred=void 0}var eLe=/^data:(.*?)(;base64)?,(.*)$/;function VN(e,t){let n=decodeURIComponent(t);return e?atob(n):n}function s$(e,t){let n=VN(e,t),i=new ArrayBuffer(n.length),o=new Uint8Array(i);for(let r=0;r<n.length;r++)o[r]=n.charCodeAt(r);return i}function tLe(e,t){t=t??"";let n=e[1],i=!!e[2],o=e[3],r,s;switch(t){case"":case"text":return VN(i,o);case"arraybuffer":return s$(i,o);case"blob":return r=s$(i,o),new Blob([r],{type:n});case"document":return s=new DOMParser,s.parseFromString(VN(i,o),n);case"json":return JSON.parse(VN(i,o));default:}}Xt.prototype.fetch=function(e){return e=of(e,{}),e.method="GET",this._makeRequest(e)};Xt.fetch=function(e){return new Xt(e).fetch({responseType:e.responseType,overrideMimeType:e.overrideMimeType})};Xt.prototype.delete=function(e){return e=of(e,{}),e.method="DELETE",this._makeRequest(e)};Xt.delete=function(e){return new Xt(e).delete({responseType:e.responseType,overrideMimeType:e.overrideMimeType,data:e.data})};Xt.prototype.head=function(e){return e=of(e,{}),e.method="HEAD",this._makeRequest(e)};Xt.head=function(e){return new Xt(e).head({responseType:e.responseType,overrideMimeType:e.overrideMimeType})};Xt.prototype.options=function(e){return e=of(e,{}),e.method="OPTIONS",this._makeRequest(e)};Xt.options=function(e){return new Xt(e).options({responseType:e.responseType,overrideMimeType:e.overrideMimeType})};Xt.prototype.post=function(e,t){return yo.defined("data",e),t=of(t,{}),t.method="POST",t.data=e,this._makeRequest(t)};Xt.post=function(e){return new Xt(e).post(e.data,{responseType:e.responseType,overrideMimeType:e.overrideMimeType})};Xt.prototype.put=function(e,t){return yo.defined("data",e),t=of(t,{}),t.method="PUT",t.data=e,this._makeRequest(t)};Xt.put=function(e){return new Xt(e).put(e.data,{responseType:e.responseType,overrideMimeType:e.overrideMimeType})};Xt.prototype.patch=function(e,t){return yo.defined("data",e),t=of(t,{}),t.method="PATCH",t.data=e,this._makeRequest(t)};Xt.patch=function(e){return new Xt(e).patch(e.data,{responseType:e.responseType,overrideMimeType:e.overrideMimeType})};Xt._Implementations={};Xt._Implementations.loadImageElement=function(e,t,n){let i=new Image;i.onload=function(){i.naturalWidth===0&&i.naturalHeight===0&&i.width===0&&i.height===0&&(i.width=300,i.height=150),n.resolve(i)},i.onerror=function(o){n.reject(o)},t&&(HS.contains(e)?i.crossOrigin="use-credentials":i.crossOrigin=""),i.src=e};Xt._Implementations.createImage=function(e,t,n,i,o,r){let s=e.url;Xt.supportsImageBitmapOptions().then(function(a){if(!(a&&r)){Xt._Implementations.loadImageElement(s,t,n);return}let c="blob",d="GET",u=Ll(),h=Xt._Implementations.loadWithXhr(s,c,d,void 0,void 0,u,void 0,void 0,void 0);return l(h)&&l(h.abort)&&(e.cancelFunction=function(){h.abort()}),u.promise.then(function(p){if(!l(p)){n.reject(new ae(`Successfully retrieved ${s} but it contained no content.`));return}return Xt.createImageBitmapFromBlob(p,{flipY:i,premultiplyAlpha:!1,skipColorSpaceConversion:o})}).then(function(p){n.resolve(p)})}).catch(function(a){n.reject(a)})};Xt.createImageBitmapFromBlob=function(e,t){return yo.defined("options",t),yo.typeOf.bool("options.flipY",t.flipY),yo.typeOf.bool("options.premultiplyAlpha",t.premultiplyAlpha),yo.typeOf.bool("options.skipColorSpaceConversion",t.skipColorSpaceConversion),createImageBitmap(e,{imageOrientation:t.flipY?"flipY":"none",premultiplyAlpha:t.premultiplyAlpha?"premultiply":"none",colorSpaceConversion:t.skipColorSpaceConversion?"none":"default"})};function nLe(e,t,n,i,o,r,s){fetch(e,{method:n,headers:o}).then(async a=>{if(!a.ok){let c={};a.headers.forEach((d,u)=>{c[u]=d}),r.reject(new tf(a.status,a,c));return}switch(t){case"text":r.resolve(a.text());break;case"json":r.resolve(a.json());break;default:r.resolve(new Uint8Array(await a.arrayBuffer()).buffer);break}}).catch(()=>{r.reject(new tf)})}var iLe=typeof XMLHttpRequest>"u";Xt._Implementations.loadWithXhr=function(e,t,n,i,o,r,s){let a=eLe.exec(e);if(a!==null){r.resolve(tLe(a,t));return}if(iLe){nLe(e,t,n,i,o,r,s);return}let c=new XMLHttpRequest;if(HS.contains(e)&&(c.withCredentials=!0),c.open(n,e,!0),l(s)&&l(c.overrideMimeType)&&c.overrideMimeType(s),l(o))for(let u in o)o.hasOwnProperty(u)&&c.setRequestHeader(u,o[u]);l(t)&&(c.responseType=t);let d=!1;return typeof e=="string"&&(d=e.indexOf("file://")===0||typeof window<"u"&&window.location.origin==="file://"),c.onload=function(){if((c.status<200||c.status>=300)&&!(d&&c.status===0)){r.reject(new tf(c.status,c.response,c.getAllResponseHeaders()));return}let u=c.response,h=c.responseType;if(n==="HEAD"||n==="OPTIONS"){let g=c.getAllResponseHeaders().trim().split(/[\r\n]+/),f={};g.forEach(function(y){let x=y.split(": "),S=x.shift();f[S]=x.join(": ")}),r.resolve(f);return}if(c.status===204)r.resolve(void 0);else if(l(u)&&(!l(t)||h===t))r.resolve(u);else if(t==="json"&&typeof u=="string")try{r.resolve(JSON.parse(u))}catch(p){r.reject(p)}else(h===""||h==="document")&&l(c.responseXML)&&c.responseXML.hasChildNodes()?r.resolve(c.responseXML):(h===""||h==="text")&&l(c.responseText)?r.resolve(c.responseText):r.reject(new ae("Invalid XMLHttpRequest response type."))},c.onerror=function(u){r.reject(new tf)},c.send(i),c};Xt._Implementations.loadAndExecuteScript=function(e,t,n){return ox(e,t).catch(function(i){n.reject(i)})};Xt._DefaultImplementations={};Xt._DefaultImplementations.createImage=Xt._Implementations.createImage;Xt._DefaultImplementations.loadWithXhr=Xt._Implementations.loadWithXhr;Xt._DefaultImplementations.loadAndExecuteScript=Xt._Implementations.loadAndExecuteScript;Xt.DEFAULT=Object.freeze(new Xt({url:typeof document>"u"?"":document.location.href.split("?")[0]}));var Ze=Xt;function nR(e){e=e??Y.EMPTY_OBJECT,this._dates=void 0,this._samples=void 0,this._dateColumn=-1,this._xPoleWanderRadiansColumn=-1,this._yPoleWanderRadiansColumn=-1,this._ut1MinusUtcSecondsColumn=-1,this._xCelestialPoleOffsetRadiansColumn=-1,this._yCelestialPoleOffsetRadiansColumn=-1,this._taiMinusUtcSecondsColumn=-1,this._columnCount=0,this._lastIndex=-1,this._addNewLeapSeconds=e.addNewLeapSeconds??!0,l(e.data)?d$(this,e.data):d$(this,{columnNames:["dateIso8601","modifiedJulianDateUtc","xPoleWanderRadians","yPoleWanderRadians","ut1MinusUtcSeconds","lengthOfDayCorrectionSeconds","xCelestialPoleOffsetRadians","yCelestialPoleOffsetRadians","taiMinusUtcSeconds"],samples:[]})}nR.fromUrl=async function(e,t){t=t??Y.EMPTY_OBJECT;let n=Ze.createIfNeeded(e),i;try{i=await n.fetchJson()}catch{throw new ae(`An error occurred while retrieving the EOP data from the URL ${n.url}.`)}return new nR({addNewLeapSeconds:t.addNewLeapSeconds,data:i})};nR.NONE=Object.freeze({compute:function(e,t){return l(t)?(t.xPoleWander=0,t.yPoleWander=0,t.xPoleOffset=0,t.yPoleOffset=0,t.ut1MinusUtc=0):t=new P0(0,0,0,0,0),t}});nR.prototype.compute=function(e,t){if(!l(this._samples))return;if(l(t)||(t=new P0(0,0,0,0,0)),this._samples.length===0)return t.xPoleWander=0,t.yPoleWander=0,t.xPoleOffset=0,t.yPoleOffset=0,t.ut1MinusUtc=0,t;let n=this._dates,i=this._lastIndex,o=0,r=0;if(l(i)){let a=n[i],c=n[i+1],d=q.lessThanOrEquals(a,e),u=!l(c),h=u||q.greaterThanOrEquals(c,e);if(d&&h)return o=i,!u&&c.equals(e)&&++o,r=o+1,m$(this,n,this._samples,e,o,r,t),t}let s=Xo(n,e,q.compare,this._dateColumn);return s>=0?(s<n.length-1&&n[s+1].equals(e)&&++s,o=s,r=s):(r=~s,o=r-1,o<0&&(o=0)),this._lastIndex=o,m$(this,n,this._samples,e,o,r,t),t};function oLe(e,t){return q.compare(e.julianDate,t)}function d$(e,t){if(!l(t.columnNames))throw new ae("Error in loaded EOP data: The columnNames property is required.");if(!l(t.samples))throw new ae("Error in loaded EOP data: The samples property is required.");let n=t.columnNames.indexOf("modifiedJulianDateUtc"),i=t.columnNames.indexOf("xPoleWanderRadians"),o=t.columnNames.indexOf("yPoleWanderRadians"),r=t.columnNames.indexOf("ut1MinusUtcSeconds"),s=t.columnNames.indexOf("xCelestialPoleOffsetRadians"),a=t.columnNames.indexOf("yCelestialPoleOffsetRadians"),c=t.columnNames.indexOf("taiMinusUtcSeconds");if(n<0||i<0||o<0||r<0||s<0||a<0||c<0)throw new ae("Error in loaded EOP data: The columnNames property must include modifiedJulianDateUtc, xPoleWanderRadians, yPoleWanderRadians, ut1MinusUtcSeconds, xCelestialPoleOffsetRadians, yCelestialPoleOffsetRadians, and taiMinusUtcSeconds columns");let d=e._samples=t.samples,u=e._dates=[];e._dateColumn=n,e._xPoleWanderRadiansColumn=i,e._yPoleWanderRadiansColumn=o,e._ut1MinusUtcSecondsColumn=r,e._xCelestialPoleOffsetRadiansColumn=s,e._yCelestialPoleOffsetRadiansColumn=a,e._taiMinusUtcSecondsColumn=c,e._columnCount=t.columnNames.length,e._lastIndex=void 0;let h,p=e._addNewLeapSeconds;for(let g=0,f=d.length;g<f;g+=e._columnCount){let y=d[g+n],x=d[g+c],S=y+Kn.MODIFIED_JULIAN_DATE_DIFFERENCE,C=new q(S,x,Hn.TAI);if(u.push(C),p){if(x!==h&&l(h)){let V=q.leapSeconds,L=Xo(V,C,oLe);if(L<0){let Z=new Yi(C,x);V.splice(~L,0,Z)}}h=x}}}function u$(e,t,n,i,o){let r=n*i;o.xPoleWander=t[r+e._xPoleWanderRadiansColumn],o.yPoleWander=t[r+e._yPoleWanderRadiansColumn],o.xPoleOffset=t[r+e._xCelestialPoleOffsetRadiansColumn],o.yPoleOffset=t[r+e._yCelestialPoleOffsetRadiansColumn],o.ut1MinusUtc=t[r+e._ut1MinusUtcSecondsColumn]}function tR(e,t,n){return t+e*(n-t)}function m$(e,t,n,i,o,r,s){let a=e._columnCount;if(r>t.length-1)return s.xPoleWander=0,s.yPoleWander=0,s.xPoleOffset=0,s.yPoleOffset=0,s.ut1MinusUtc=0,s;let c=t[o],d=t[r];if(c.equals(d)||i.equals(c))return u$(e,n,o,a,s),s;if(i.equals(d))return u$(e,n,r,a,s),s;let u=q.secondsDifference(i,c)/q.secondsDifference(d,c),h=o*a,p=r*a,g=n[h+e._ut1MinusUtcSecondsColumn],f=n[p+e._ut1MinusUtcSecondsColumn],y=f-g;if(y>.5||y<-.5){let x=n[h+e._taiMinusUtcSecondsColumn],S=n[p+e._taiMinusUtcSecondsColumn];x!==S&&(d.equals(i)?g=f:f-=S-x)}return s.xPoleWander=tR(u,n[h+e._xPoleWanderRadiansColumn],n[p+e._xPoleWanderRadiansColumn]),s.yPoleWander=tR(u,n[h+e._yPoleWanderRadiansColumn],n[p+e._yPoleWanderRadiansColumn]),s.xPoleOffset=tR(u,n[h+e._xCelestialPoleOffsetRadiansColumn],n[p+e._xCelestialPoleOffsetRadiansColumn]),s.yPoleOffset=tR(u,n[h+e._yCelestialPoleOffsetRadiansColumn],n[p+e._yCelestialPoleOffsetRadiansColumn]),s.ut1MinusUtc=tR(u,g,f),s}var iR=nR;var CEt=_(T(),1);function oc(e,t,n){this.heading=e??0,this.pitch=t??0,this.roll=n??0}oc.fromQuaternion=function(e,t){l(t)||(t=new oc);let n=2*(e.w*e.y-e.z*e.x),i=1-2*(e.x*e.x+e.y*e.y),o=2*(e.w*e.x+e.y*e.z),r=1-2*(e.y*e.y+e.z*e.z),s=2*(e.w*e.z+e.x*e.y);return t.heading=-Math.atan2(s,r),t.roll=Math.atan2(o,i),t.pitch=-X.asinClamped(n),t};oc.fromDegrees=function(e,t,n,i){return l(i)||(i=new oc),i.heading=e*X.RADIANS_PER_DEGREE,i.pitch=t*X.RADIANS_PER_DEGREE,i.roll=n*X.RADIANS_PER_DEGREE,i};oc.clone=function(e,t){if(l(e))return l(t)?(t.heading=e.heading,t.pitch=e.pitch,t.roll=e.roll,t):new oc(e.heading,e.pitch,e.roll)};oc.equals=function(e,t){return e===t||l(e)&&l(t)&&e.heading===t.heading&&e.pitch===t.pitch&&e.roll===t.roll};oc.equalsEpsilon=function(e,t,n,i){return e===t||l(e)&&l(t)&&X.equalsEpsilon(e.heading,t.heading,n,i)&&X.equalsEpsilon(e.pitch,t.pitch,n,i)&&X.equalsEpsilon(e.roll,t.roll,n,i)};oc.prototype.clone=function(e){return oc.clone(this,e)};oc.prototype.equals=function(e){return oc.equals(this,e)};oc.prototype.equalsEpsilon=function(e,t,n){return oc.equalsEpsilon(this,e,t,n)};oc.prototype.toString=function(){return`(${this.heading}, ${this.pitch}, ${this.roll})`};var Ea=oc;var kEt=_(T(),1);var GEt=_(T(),1);var h$={};var f$=/((?:.*\/)|^)Cesium\.js(?:\?|\#|$)/;function rLe(){let e=document.getElementsByTagName("script");for(let t=0,n=e.length;t<n;++t){let i=e[t].getAttribute("src"),o=f$.exec(i);if(o!==null)return o[1]}}var RN;function p$(e){return typeof document>"u"?e:(l(RN)||(RN=document.createElement("a")),RN.href=e,RN.href)}var cx;function b$(){if(l(cx))return cx;let e;return typeof CESIUM_BASE_URL<"u"?e=CESIUM_BASE_URL:l(h$?.url)?e=$h(".",h$.url):typeof define=="object"&&l(define.amd)&&!define.amd.toUrlUndefined&&l(jM.toUrl)?e=$h("..",lx("Core/buildModuleUrl.js")):e=rLe(),cx=new Ze({url:p$(e)}),cx.appendForwardSlash(),cx}function sLe(e){return p$(jM.toUrl(`../${e}`))}function g$(e){return b$().getDerivedResource({url:e}).url}var ZN;function lx(e){return l(ZN)||(typeof define=="object"&&l(define.amd)&&!define.amd.toUrlUndefined&&l(jM.toUrl)?ZN=sLe:ZN=g$),ZN(e)}lx._cesiumScriptRegex=f$;lx._buildModuleUrlFromBaseUrl=g$;lx._clearBaseResource=function(){cx=void 0};lx.setBaseUrl=function(e){cx=Ze.DEFAULT.getDerivedResource({url:e})};lx.getCesiumBaseUrl=b$;var nn=lx;var XEt=_(T(),1);function aLe(e,t,n){this.x=e,this.y=t,this.s=n}var dx=aLe;function pO(e){e=e??Y.EMPTY_OBJECT,this._xysFileUrlTemplate=Ze.createIfNeeded(e.xysFileUrlTemplate),this._interpolationOrder=e.interpolationOrder??9,this._sampleZeroJulianEphemerisDate=e.sampleZeroJulianEphemerisDate??24423965e-1,this._sampleZeroDateTT=new q(this._sampleZeroJulianEphemerisDate,0,Hn.TAI),this._stepSizeDays=e.stepSizeDays??1,this._samplesPerXysFile=e.samplesPerXysFile??1e3,this._totalSamples=e.totalSamples??27426,this._samples=new Array(this._totalSamples*3),this._chunkDownloadsInProgress=[];let t=this._interpolationOrder,n=this._denominators=new Array(t+1),i=this._xTable=new Array(t+1),o=Math.pow(this._stepSizeDays,t);for(let r=0;r<=t;++r){n[r]=o,i[r]=r*this._stepSizeDays;for(let s=0;s<=t;++s)s!==r&&(n[r]*=r-s);n[r]=1/n[r]}this._work=new Array(t+1),this._coef=new Array(t+1)}var cLe=new q(0,0,Hn.TAI);function hO(e,t,n){let i=cLe;return i.dayNumber=t,i.secondsOfDay=n,q.daysDifference(i,e._sampleZeroDateTT)}pO.prototype.preload=function(e,t,n,i){let o=hO(this,e,t),r=hO(this,n,i),s=o/this._stepSizeDays-this._interpolationOrder/2|0;s<0&&(s=0);let a=r/this._stepSizeDays-this._interpolationOrder/2|0+this._interpolationOrder;a>=this._totalSamples&&(a=this._totalSamples-1);let c=s/this._samplesPerXysFile|0,d=a/this._samplesPerXysFile|0,u=[];for(let h=c;h<=d;++h)u.push(fO(this,h));return Promise.all(u)};pO.prototype.computeXysRadians=function(e,t,n){let i=hO(this,e,t);if(i<0)return;let o=i/this._stepSizeDays|0;if(o>=this._totalSamples)return;let r=this._interpolationOrder,s=o-(r/2|0);s<0&&(s=0);let a=s+r;a>=this._totalSamples&&(a=this._totalSamples-1,s=a-r,s<0&&(s=0));let c=!1,d=this._samples;if(l(d[s*3])||(fO(this,s/this._samplesPerXysFile|0),c=!0),l(d[a*3])||(fO(this,a/this._samplesPerXysFile|0),c=!0),c)return;l(n)?(n.x=0,n.y=0,n.s=0):n=new dx(0,0,0);let u=i-s*this._stepSizeDays,h=this._work,p=this._denominators,g=this._coef,f=this._xTable,y,x;for(y=0;y<=r;++y)h[y]=u-f[y];for(y=0;y<=r;++y){for(g[y]=1,x=0;x<=r;++x)x!==y&&(g[y]*=h[x]);g[y]*=p[y];let S=(s+y)*3;n.x+=g[y]*d[S++],n.y+=g[y]*d[S++],n.s+=g[y]*d[S]}return n};function fO(e,t){if(e._chunkDownloadsInProgress[t])return e._chunkDownloadsInProgress[t];let n,i=e._xysFileUrlTemplate;l(i)?n=i.getDerivedResource({templateValues:{0:t}}):n=new Ze({url:nn(`Assets/IAU2006_XYS/IAU2006_XYS_${t}.json`)});let o=n.fetchJson().then(function(r){e._chunkDownloadsInProgress[t]=!1;let s=e._samples,a=r.samples,c=t*e._samplesPerXysFile*3;for(let d=0,u=a.length;d<u;++d)s[c+d]=a[d]});return e._chunkDownloadsInProgress[t]=o,o}var oR=pO;var HEt=_(T(),1);function ot(e,t,n,i){this.x=e??0,this.y=t??0,this.z=n??0,this.w=i??0}var rR=new m;ot.fromAxisAngle=function(e,t,n){let i=t/2,o=Math.sin(i);rR=m.normalize(e,rR);let r=rR.x*o,s=rR.y*o,a=rR.z*o,c=Math.cos(i);return l(n)?(n.x=r,n.y=s,n.z=a,n.w=c,n):new ot(r,s,a,c)};var lLe=[1,2,0],dLe=new Array(3);ot.fromRotationMatrix=function(e,t){let n,i,o,r,s,a=e[$.COLUMN0ROW0],c=e[$.COLUMN1ROW1],d=e[$.COLUMN2ROW2],u=a+c+d;if(u>0)n=Math.sqrt(u+1),s=.5*n,n=.5/n,i=(e[$.COLUMN1ROW2]-e[$.COLUMN2ROW1])*n,o=(e[$.COLUMN2ROW0]-e[$.COLUMN0ROW2])*n,r=(e[$.COLUMN0ROW1]-e[$.COLUMN1ROW0])*n;else{let h=lLe,p=0;c>a&&(p=1),d>a&&d>c&&(p=2);let g=h[p],f=h[g];n=Math.sqrt(e[$.getElementIndex(p,p)]-e[$.getElementIndex(g,g)]-e[$.getElementIndex(f,f)]+1);let y=dLe;y[p]=.5*n,n=.5/n,s=(e[$.getElementIndex(f,g)]-e[$.getElementIndex(g,f)])*n,y[g]=(e[$.getElementIndex(g,p)]+e[$.getElementIndex(p,g)])*n,y[f]=(e[$.getElementIndex(f,p)]+e[$.getElementIndex(p,f)])*n,i=-y[0],o=-y[1],r=-y[2]}return l(t)?(t.x=i,t.y=o,t.z=r,t.w=s,t):new ot(i,o,r,s)};var y$=new ot,x$=new ot,bO=new ot,_$=new ot;ot.fromHeadingPitchRoll=function(e,t){return _$=ot.fromAxisAngle(m.UNIT_X,e.roll,y$),bO=ot.fromAxisAngle(m.UNIT_Y,-e.pitch,t),t=ot.multiply(bO,_$,bO),x$=ot.fromAxisAngle(m.UNIT_Z,-e.heading,y$),ot.multiply(x$,t,t)};var GN=new m,gO=new m,Gm=new ot,T$=new ot,EN=new ot;ot.packedLength=4;ot.pack=function(e,t,n){return n=n??0,t[n++]=e.x,t[n++]=e.y,t[n++]=e.z,t[n]=e.w,t};ot.unpack=function(e,t,n){return t=t??0,l(n)||(n=new ot),n.x=e[t],n.y=e[t+1],n.z=e[t+2],n.w=e[t+3],n};ot.packedInterpolationLength=3;ot.convertPackedArrayForInterpolation=function(e,t,n,i){ot.unpack(e,n*4,EN),ot.conjugate(EN,EN);for(let o=0,r=n-t+1;o<r;o++){let s=o*3;ot.unpack(e,(t+o)*4,Gm),ot.multiply(Gm,EN,Gm),Gm.w<0&&ot.negate(Gm,Gm),ot.computeAxis(Gm,GN);let a=ot.computeAngle(Gm);l(i)||(i=[]),i[s]=GN.x*a,i[s+1]=GN.y*a,i[s+2]=GN.z*a}};ot.unpackInterpolationResult=function(e,t,n,i,o){l(o)||(o=new ot),m.fromArray(e,0,gO);let r=m.magnitude(gO);return ot.unpack(t,i*4,T$),r===0?ot.clone(ot.IDENTITY,Gm):ot.fromAxisAngle(gO,r,Gm),ot.multiply(Gm,T$,o)};ot.clone=function(e,t){if(l(e))return l(t)?(t.x=e.x,t.y=e.y,t.z=e.z,t.w=e.w,t):new ot(e.x,e.y,e.z,e.w)};ot.conjugate=function(e,t){return t.x=-e.x,t.y=-e.y,t.z=-e.z,t.w=e.w,t};ot.magnitudeSquared=function(e){return e.x*e.x+e.y*e.y+e.z*e.z+e.w*e.w};ot.magnitude=function(e){return Math.sqrt(ot.magnitudeSquared(e))};ot.normalize=function(e,t){let n=1/ot.magnitude(e),i=e.x*n,o=e.y*n,r=e.z*n,s=e.w*n;return t.x=i,t.y=o,t.z=r,t.w=s,t};ot.inverse=function(e,t){let n=ot.magnitudeSquared(e);return t=ot.conjugate(e,t),ot.multiplyByScalar(t,1/n,t)};ot.add=function(e,t,n){return n.x=e.x+t.x,n.y=e.y+t.y,n.z=e.z+t.z,n.w=e.w+t.w,n};ot.subtract=function(e,t,n){return n.x=e.x-t.x,n.y=e.y-t.y,n.z=e.z-t.z,n.w=e.w-t.w,n};ot.negate=function(e,t){return t.x=-e.x,t.y=-e.y,t.z=-e.z,t.w=-e.w,t};ot.dot=function(e,t){return e.x*t.x+e.y*t.y+e.z*t.z+e.w*t.w};ot.multiply=function(e,t,n){let i=e.x,o=e.y,r=e.z,s=e.w,a=t.x,c=t.y,d=t.z,u=t.w,h=s*a+i*u+o*d-r*c,p=s*c-i*d+o*u+r*a,g=s*d+i*c-o*a+r*u,f=s*u-i*a-o*c-r*d;return n.x=h,n.y=p,n.z=g,n.w=f,n};ot.multiplyByScalar=function(e,t,n){return n.x=e.x*t,n.y=e.y*t,n.z=e.z*t,n.w=e.w*t,n};ot.divideByScalar=function(e,t,n){return n.x=e.x/t,n.y=e.y/t,n.z=e.z/t,n.w=e.w/t,n};ot.computeAxis=function(e,t){let n=e.w;if(Math.abs(n-1)<X.EPSILON6||Math.abs(n+1)<X.EPSILON6)return t.x=1,t.y=t.z=0,t;let i=1/Math.sqrt(1-n*n);return t.x=e.x*i,t.y=e.y*i,t.z=e.z*i,t};ot.computeAngle=function(e){return Math.abs(e.w-1)<X.EPSILON6?0:2*Math.acos(e.w)};var yO=new ot;ot.lerp=function(e,t,n,i){return yO=ot.multiplyByScalar(t,n,yO),i=ot.multiplyByScalar(e,1-n,i),ot.add(yO,i,i)};var S$=new ot,xO=new ot,_O=new ot;ot.slerp=function(e,t,n,i){let o=ot.dot(e,t),r=t;if(o<0&&(o=-o,r=S$=ot.negate(t,S$)),1-o<X.EPSILON6)return ot.lerp(e,r,n,i);let s=Math.acos(o);return xO=ot.multiplyByScalar(e,Math.sin((1-n)*s),xO),_O=ot.multiplyByScalar(r,Math.sin(n*s),_O),i=ot.add(xO,_O,i),ot.multiplyByScalar(i,1/Math.sin(s),i)};ot.log=function(e,t){let n=X.acosClamped(e.w),i=0;return n!==0&&(i=n/Math.sin(n)),m.multiplyByScalar(e,i,t)};ot.exp=function(e,t){let n=m.magnitude(e),i=0;return n!==0&&(i=Math.sin(n)/n),t.x=e.x*i,t.y=e.y*i,t.z=e.z*i,t.w=Math.cos(n),t};var uLe=new m,mLe=new m,sR=new ot,JS=new ot;ot.computeInnerQuadrangle=function(e,t,n,i){let o=ot.conjugate(t,sR);ot.multiply(o,n,JS);let r=ot.log(JS,uLe);ot.multiply(o,e,JS);let s=ot.log(JS,mLe);return m.add(r,s,r),m.multiplyByScalar(r,.25,r),m.negate(r,r),ot.exp(r,sR),ot.multiply(t,sR,i)};ot.squad=function(e,t,n,i,o,r){let s=ot.slerp(e,t,o,sR),a=ot.slerp(n,i,o,JS);return ot.slerp(s,a,2*o*(1-o),r)};var hLe=new ot,C$=1.9011074535173003,IN=Bt.supportsTypedArrays()?new Float32Array(8):[],XN=Bt.supportsTypedArrays()?new Float32Array(8):[],Vp=Bt.supportsTypedArrays()?new Float32Array(8):[],Lp=Bt.supportsTypedArrays()?new Float32Array(8):[];for(let e=0;e<7;++e){let t=e+1,n=2*t+1;IN[e]=1/(t*n),XN[e]=t/n}IN[7]=C$/(8*17);XN[7]=C$*8/17;ot.fastSlerp=function(e,t,n,i){let o=ot.dot(e,t),r;o>=0?r=1:(r=-1,o=-o);let s=o-1,a=1-n,c=n*n,d=a*a;for(let g=7;g>=0;--g)Vp[g]=(IN[g]*c-XN[g])*s,Lp[g]=(IN[g]*d-XN[g])*s;let u=r*n*(1+Vp[0]*(1+Vp[1]*(1+Vp[2]*(1+Vp[3]*(1+Vp[4]*(1+Vp[5]*(1+Vp[6]*(1+Vp[7])))))))),h=a*(1+Lp[0]*(1+Lp[1]*(1+Lp[2]*(1+Lp[3]*(1+Lp[4]*(1+Lp[5]*(1+Lp[6]*(1+Lp[7])))))))),p=ot.multiplyByScalar(e,h,hLe);return ot.multiplyByScalar(t,u,i),ot.add(p,i,i)};ot.fastSquad=function(e,t,n,i,o,r){let s=ot.fastSlerp(e,t,o,sR),a=ot.fastSlerp(n,i,o,JS);return ot.fastSlerp(s,a,2*o*(1-o),r)};ot.equals=function(e,t){return e===t||l(e)&&l(t)&&e.x===t.x&&e.y===t.y&&e.z===t.z&&e.w===t.w};ot.equalsEpsilon=function(e,t,n){return n=n??0,e===t||l(e)&&l(t)&&Math.abs(e.x-t.x)<=n&&Math.abs(e.y-t.y)<=n&&Math.abs(e.z-t.z)<=n&&Math.abs(e.w-t.w)<=n};ot.ZERO=Object.freeze(new ot(0,0,0,0));ot.IDENTITY=Object.freeze(new ot(0,0,0,1));ot.prototype.clone=function(e){return ot.clone(this,e)};ot.prototype.equals=function(e){return ot.equals(this,e)};ot.prototype.equalsEpsilon=function(e,t){return ot.equalsEpsilon(this,e,t)};ot.prototype.toString=function(){return`(${this.x}, ${this.y}, ${this.z}, ${this.w})`};var ve=ot;var ui={},TO={up:{south:"east",north:"west",west:"south",east:"north"},down:{south:"west",north:"east",west:"north",east:"south"},south:{up:"west",down:"east",west:"down",east:"up"},north:{up:"east",down:"west",west:"up",east:"down"},west:{up:"north",down:"south",north:"down",south:"up"},east:{up:"south",down:"north",north:"up",south:"down"}},QS={north:[-1,0,0],east:[0,1,0],up:[0,0,1],south:[1,0,0],west:[0,-1,0],down:[0,0,-1]},SO={},Rl={east:new m,north:new m,up:new m,west:new m,south:new m,down:new m},F0=new m,A0=new m,M0=new m;ui.localFrameToFixedFrameGenerator=function(e,t){if(!TO.hasOwnProperty(e)||!TO[e].hasOwnProperty(t))throw new pe("firstAxis and secondAxis must be east, north, up, west, south or down.");let n=TO[e][t],i,o=e+t;return l(SO[o])?i=SO[o]:(i=function(r,s,a){if(l(a)||(a=new F),m.equalsEpsilon(r,m.ZERO,X.EPSILON14))m.unpack(QS[e],0,F0),m.unpack(QS[t],0,A0),m.unpack(QS[n],0,M0);else if(X.equalsEpsilon(r.x,0,X.EPSILON14)&&X.equalsEpsilon(r.y,0,X.EPSILON14)){let c=X.sign(r.z);m.unpack(QS[e],0,F0),e!=="east"&&e!=="west"&&m.multiplyByScalar(F0,c,F0),m.unpack(QS[t],0,A0),t!=="east"&&t!=="west"&&m.multiplyByScalar(A0,c,A0),m.unpack(QS[n],0,M0),n!=="east"&&n!=="west"&&m.multiplyByScalar(M0,c,M0)}else{s=s??ne.default,s.geodeticSurfaceNormal(r,Rl.up);let c=Rl.up,d=Rl.east;d.x=-r.y,d.y=r.x,d.z=0,m.normalize(d,Rl.east),m.cross(c,d,Rl.north),m.multiplyByScalar(Rl.up,-1,Rl.down),m.multiplyByScalar(Rl.east,-1,Rl.west),m.multiplyByScalar(Rl.north,-1,Rl.south),F0=Rl[e],A0=Rl[t],M0=Rl[n]}return a[0]=F0.x,a[1]=F0.y,a[2]=F0.z,a[3]=0,a[4]=A0.x,a[5]=A0.y,a[6]=A0.z,a[7]=0,a[8]=M0.x,a[9]=M0.y,a[10]=M0.z,a[11]=0,a[12]=r.x,a[13]=r.y,a[14]=r.z,a[15]=1,a},SO[o]=i),i};ui.eastNorthUpToFixedFrame=ui.localFrameToFixedFrameGenerator("east","north");ui.northEastDownToFixedFrame=ui.localFrameToFixedFrameGenerator("north","east");ui.northUpEastToFixedFrame=ui.localFrameToFixedFrameGenerator("north","up");ui.northWestUpToFixedFrame=ui.localFrameToFixedFrameGenerator("north","west");var fLe=new ve,pLe=new m(1,1,1),bLe=new F;ui.headingPitchRollToFixedFrame=function(e,t,n,i,o){i=i??ui.eastNorthUpToFixedFrame;let r=ve.fromHeadingPitchRoll(t,fLe),s=F.fromTranslationQuaternionRotationScale(m.ZERO,r,pLe,bLe);return o=i(e,n,o),F.multiply(o,s,o)};var gLe=new F,yLe=new $;ui.headingPitchRollQuaternion=function(e,t,n,i,o){let r=ui.headingPitchRollToFixedFrame(e,t,n,i,gLe),s=F.getMatrix3(r,yLe);return ve.fromRotationMatrix(s,o)};var xLe=new m(1,1,1),_Le=new m,V$=new F,TLe=new F,SLe=new $,CLe=new ve;ui.fixedFrameToHeadingPitchRoll=function(e,t,n,i){t=t??ne.default,n=n??ui.eastNorthUpToFixedFrame,l(i)||(i=new Ea);let o=F.getTranslation(e,_Le);if(m.equals(o,m.ZERO))return i.heading=0,i.pitch=0,i.roll=0,i;let r=F.inverseTransformation(n(o,t,V$),V$),s=F.setScale(e,xLe,TLe);s=F.setTranslation(s,m.ZERO,s),r=F.multiply(r,s,r);let a=ve.fromRotationMatrix(F.getMatrix3(r,SLe),CLe);return a=ve.normalize(a,a),Ea.fromQuaternion(a,i)};var VLe=6*3600+41*60+50.54841,LLe=8640184812866e-6,RLe=.093104,ZLe=-62e-7,GLe=11772758384668e-32,ELe=72921158553e-15,ILe=X.TWO_PI/86400,WN=new q;ui.computeIcrfToCentralBodyFixedMatrix=function(e,t){let n=ui.computeIcrfToFixedMatrix(e,t);return l(n)||(n=ui.computeTemeToPseudoFixedMatrix(e,t)),n};ui.computeTemeToPseudoFixedMatrix=function(e,t){WN=q.addSeconds(e,-q.computeTaiMinusUtc(e),WN);let n=WN.dayNumber,i=WN.secondsOfDay,o,r=n-2451545;i>=43200?o=(r+.5)/Kn.DAYS_PER_JULIAN_CENTURY:o=(r-.5)/Kn.DAYS_PER_JULIAN_CENTURY;let a=(VLe+o*(LLe+o*(RLe+o*ZLe)))*ILe%X.TWO_PI,c=ELe+GLe*(n-24515455e-1),d=(i+Kn.SECONDS_PER_DAY*.5)%Kn.SECONDS_PER_DAY,u=a+c*d,h=Math.cos(u),p=Math.sin(u);return l(t)?(t[0]=h,t[1]=-p,t[2]=0,t[3]=p,t[4]=h,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t):new $(h,p,0,-p,h,0,0,0,1)};ui.iau2006XysData=new oR;ui.earthOrientationParameters=iR.NONE;var LO=32.184,XLe=2451545;ui.preloadIcrfFixed=function(e){let t=e.start.dayNumber,n=e.start.secondsOfDay+LO,i=e.stop.dayNumber,o=e.stop.secondsOfDay+LO;return ui.iau2006XysData.preload(t,n,i,o)};ui.computeIcrfToFixedMatrix=function(e,t){l(t)||(t=new $);let n=ui.computeFixedToIcrfMatrix(e,t);if(l(n))return $.transpose(n,t)};var WLe=32.184,PLe=2451545,PN=new Ea,vLe=new $,wLe=new q;ui.computeMoonFixedToIcrfMatrix=function(e,t){l(t)||(t=new $);let n=q.addSeconds(e,WLe,wLe),i=q.totalDays(n)-PLe,o=X.toRadians(12.112)-X.toRadians(.052992)*i,r=X.toRadians(24.224)-X.toRadians(.105984)*i,s=X.toRadians(227.645)+X.toRadians(13.012)*i,a=X.toRadians(261.105)+X.toRadians(13.340716)*i,c=X.toRadians(358)+X.toRadians(.9856)*i;return PN.pitch=X.toRadians(180)-X.toRadians(3.878)*Math.sin(o)-X.toRadians(.12)*Math.sin(r)+X.toRadians(.07)*Math.sin(s)-X.toRadians(.017)*Math.sin(a),PN.roll=X.toRadians(66.53-90)+X.toRadians(1.543)*Math.cos(o)+X.toRadians(.24)*Math.cos(r)-X.toRadians(.028)*Math.cos(s)+X.toRadians(.007)*Math.cos(a),PN.heading=X.toRadians(244.375-90)+X.toRadians(13.17635831)*i+X.toRadians(3.558)*Math.sin(o)+X.toRadians(.121)*Math.sin(r)-X.toRadians(.064)*Math.sin(s)+X.toRadians(.016)*Math.sin(a)+X.toRadians(.025)*Math.sin(c),$.fromHeadingPitchRoll(PN,vLe)};ui.computeIcrfToMoonFixedMatrix=function(e,t){l(t)||(t=new $);let n=ui.computeMoonFixedToIcrfMatrix(e,t);if(l(n))return $.transpose(n,t)};var FLe=new dx(0,0,0),ALe=new P0(0,0,0,0,0,0),CO=new $,VO=new $;ui.computeFixedToIcrfMatrix=function(e,t){l(t)||(t=new $);let n=ui.earthOrientationParameters.compute(e,ALe);if(!l(n))return;let i=e.dayNumber,o=e.secondsOfDay+LO,r=ui.iau2006XysData.computeXysRadians(i,o,FLe);if(!l(r))return;let s=r.x+n.xPoleOffset,a=r.y+n.yPoleOffset,c=1/(1+Math.sqrt(1-s*s-a*a)),d=CO;d[0]=1-c*s*s,d[3]=-c*s*a,d[6]=s,d[1]=-c*s*a,d[4]=1-c*a*a,d[7]=a,d[2]=-s,d[5]=-a,d[8]=1-c*(s*s+a*a);let u=$.fromRotationZ(-r.s,VO),h=$.multiply(d,u,CO),p=e.dayNumber,g=e.secondsOfDay-q.computeTaiMinusUtc(e)+n.ut1MinusUtc,f=p-2451545,y=g/Kn.SECONDS_PER_DAY,x=.779057273264+y+.00273781191135448*(f+y);x=x%1*X.TWO_PI;let S=$.fromRotationZ(x,VO),C=$.multiply(h,S,CO),V=Math.cos(n.xPoleWander),L=Math.cos(n.yPoleWander),Z=Math.sin(n.xPoleWander),E=Math.sin(n.yPoleWander),P=i-XLe+o/Kn.SECONDS_PER_DAY;P/=36525;let W=-47e-6*P*X.RADIANS_PER_DEGREE/3600,v=Math.cos(W),A=Math.sin(W),b=VO;return b[0]=V*v,b[1]=V*A,b[2]=Z,b[3]=-L*A+E*Z*v,b[4]=L*v+E*Z*A,b[5]=-E*V,b[6]=-E*A-L*Z*v,b[7]=E*v-L*Z*A,b[8]=L*V,$.multiply(C,b,t)};var MLe=new se;ui.pointToWindowCoordinates=function(e,t,n,i){return i=ui.pointToGLWindowCoordinates(e,t,n,i),i.y=2*t[5]-i.y,i};ui.pointToGLWindowCoordinates=function(e,t,n,i){l(i)||(i=new U);let o=MLe;return F.multiplyByVector(e,se.fromElements(n.x,n.y,n.z,1,o),o),se.multiplyByScalar(o,1/o.w,o),F.multiplyByVector(t,o,o),U.fromCartesian4(o,i)};var NLe=new m,kLe=new m,ULe=new m;ui.rotationMatrixFromPositionVelocity=function(e,t,n,i){let o=(n??ne.default).geodeticSurfaceNormal(e,NLe),r=m.cross(t,o,kLe);m.equalsEpsilon(r,m.ZERO,X.EPSILON6)&&(r=m.clone(m.UNIT_X,r));let s=m.cross(r,t,ULe);return m.normalize(s,s),m.cross(t,s,r),m.negate(r,r),m.normalize(r,r),l(i)||(i=new $),i[0]=t.x,i[1]=t.y,i[2]=t.z,i[3]=r.x,i[4]=r.y,i[5]=r.z,i[6]=s.x,i[7]=s.y,i[8]=s.z,i};var L$=new F(0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1),R$=new he,RO=new m,DLe=new m,BLe=new $,ZO=new F,Z$=new F;ui.basisTo2D=function(e,t,n){let i=F.getTranslation(t,DLe),o=e.ellipsoid,r;if(m.equals(i,m.ZERO))r=m.clone(m.ZERO,RO);else{let u=o.cartesianToCartographic(i,R$);r=e.project(u,RO),m.fromElements(r.z,r.x,r.y,r)}let s=ui.eastNorthUpToFixedFrame(i,o,ZO),a=F.inverseTransformation(s,Z$),c=F.getMatrix3(t,BLe),d=F.multiplyByMatrix3(a,c,n);return F.multiply(L$,d,n),F.setTranslation(n,r,n),n};ui.ellipsoidTo2DModelMatrix=function(e,t,n){let i=e.ellipsoid,o=ui.eastNorthUpToFixedFrame(t,i,ZO),r=F.inverseTransformation(o,Z$),s=i.cartesianToCartographic(t,R$),a=e.project(s,RO);m.fromElements(a.z,a.x,a.y,a);let c=F.fromTranslation(a,ZO);return F.multiply(L$,r,n),F.multiply(c,n,n),n};var Pt=ui;function Gn(e,t,n,i){this.west=e??0,this.south=t??0,this.east=n??0,this.north=i??0}Object.defineProperties(Gn.prototype,{width:{get:function(){return Gn.computeWidth(this)}},height:{get:function(){return Gn.computeHeight(this)}}});Gn.packedLength=4;Gn.pack=function(e,t,n){return n=n??0,t[n++]=e.west,t[n++]=e.south,t[n++]=e.east,t[n]=e.north,t};Gn.unpack=function(e,t,n){return t=t??0,l(n)||(n=new Gn),n.west=e[t++],n.south=e[t++],n.east=e[t++],n.north=e[t],n};Gn.computeWidth=function(e){let t=e.east,n=e.west;return t<n&&(t+=X.TWO_PI),t-n};Gn.computeHeight=function(e){return e.north-e.south};Gn.fromDegrees=function(e,t,n,i,o){return e=X.toRadians(e??0),t=X.toRadians(t??0),n=X.toRadians(n??0),i=X.toRadians(i??0),l(o)?(o.west=e,o.south=t,o.east=n,o.north=i,o):new Gn(e,t,n,i)};Gn.fromRadians=function(e,t,n,i,o){return l(o)?(o.west=e??0,o.south=t??0,o.east=n??0,o.north=i??0,o):new Gn(e,t,n,i)};Gn.fromCartographicArray=function(e,t){let n=Number.MAX_VALUE,i=-Number.MAX_VALUE,o=Number.MAX_VALUE,r=-Number.MAX_VALUE,s=Number.MAX_VALUE,a=-Number.MAX_VALUE;for(let c=0,d=e.length;c<d;c++){let u=e[c];n=Math.min(n,u.longitude),i=Math.max(i,u.longitude),s=Math.min(s,u.latitude),a=Math.max(a,u.latitude);let h=u.longitude>=0?u.longitude:u.longitude+X.TWO_PI;o=Math.min(o,h),r=Math.max(r,h)}return i-n>r-o&&(n=o,i=r,i>X.PI&&(i=i-X.TWO_PI),n>X.PI&&(n=n-X.TWO_PI)),l(t)?(t.west=n,t.south=s,t.east=i,t.north=a,t):new Gn(n,s,i,a)};Gn.fromCartesianArray=function(e,t,n){t=t??ne.default;let i=Number.MAX_VALUE,o=-Number.MAX_VALUE,r=Number.MAX_VALUE,s=-Number.MAX_VALUE,a=Number.MAX_VALUE,c=-Number.MAX_VALUE;for(let d=0,u=e.length;d<u;d++){let h=t.cartesianToCartographic(e[d]);i=Math.min(i,h.longitude),o=Math.max(o,h.longitude),a=Math.min(a,h.latitude),c=Math.max(c,h.latitude);let p=h.longitude>=0?h.longitude:h.longitude+X.TWO_PI;r=Math.min(r,p),s=Math.max(s,p)}return o-i>s-r&&(i=r,o=s,o>X.PI&&(o=o-X.TWO_PI),i>X.PI&&(i=i-X.TWO_PI)),l(n)?(n.west=i,n.south=a,n.east=o,n.north=c,n):new Gn(i,a,o,c)};var OLe=new m,YLe=new m,zLe=new m,HLe=new m,KLe=new m,GO=new Array(5);for(let e=0;e<GO.length;++e)GO[e]=new m;Gn.fromBoundingSphere=function(e,t,n){let i=e.center,o=e.radius;if(l(t)||(t=ne.default),l(n)||(n=new Gn),m.equals(i,m.ZERO))return Gn.clone(Gn.MAX_VALUE,n),n;let r=Pt.eastNorthUpToFixedFrame(i,t,OLe),s=F.multiplyByPointAsVector(r,m.UNIT_X,YLe);m.normalize(s,s);let a=F.multiplyByPointAsVector(r,m.UNIT_Y,zLe);m.normalize(a,a),m.multiplyByScalar(a,o,a),m.multiplyByScalar(s,o,s);let c=m.negate(a,KLe),d=m.negate(s,HLe),u=GO,h=u[0];return m.add(i,a,h),h=u[1],m.add(i,d,h),h=u[2],m.add(i,c,h),h=u[3],m.add(i,s,h),u[4]=i,Gn.fromCartesianArray(u,t,n)};Gn.clone=function(e,t){if(l(e))return l(t)?(t.west=e.west,t.south=e.south,t.east=e.east,t.north=e.north,t):new Gn(e.west,e.south,e.east,e.north)};Gn.equalsEpsilon=function(e,t,n){return n=n??0,e===t||l(e)&&l(t)&&Math.abs(e.west-t.west)<=n&&Math.abs(e.south-t.south)<=n&&Math.abs(e.east-t.east)<=n&&Math.abs(e.north-t.north)<=n};Gn.prototype.clone=function(e){return Gn.clone(this,e)};Gn.prototype.equals=function(e){return Gn.equals(this,e)};Gn.equals=function(e,t){return e===t||l(e)&&l(t)&&e.west===t.west&&e.south===t.south&&e.east===t.east&&e.north===t.north};Gn.prototype.equalsEpsilon=function(e,t){return Gn.equalsEpsilon(this,e,t)};Gn._validate=function(e){};Gn.southwest=function(e,t){return l(t)?(t.longitude=e.west,t.latitude=e.south,t.height=0,t):new he(e.west,e.south)};Gn.northwest=function(e,t){return l(t)?(t.longitude=e.west,t.latitude=e.north,t.height=0,t):new he(e.west,e.north)};Gn.northeast=function(e,t){return l(t)?(t.longitude=e.east,t.latitude=e.north,t.height=0,t):new he(e.east,e.north)};Gn.southeast=function(e,t){return l(t)?(t.longitude=e.east,t.latitude=e.south,t.height=0,t):new he(e.east,e.south)};Gn.center=function(e,t){let n=e.east,i=e.west;n<i&&(n+=X.TWO_PI);let o=X.negativePiToPi((i+n)*.5),r=(e.south+e.north)*.5;return l(t)?(t.longitude=o,t.latitude=r,t.height=0,t):new he(o,r)};Gn.intersection=function(e,t,n){let i=e.east,o=e.west,r=t.east,s=t.west;i<o&&r>0?i+=X.TWO_PI:r<s&&i>0&&(r+=X.TWO_PI),i<o&&s<0?s+=X.TWO_PI:r<s&&o<0&&(o+=X.TWO_PI);let a=X.negativePiToPi(Math.max(o,s)),c=X.negativePiToPi(Math.min(i,r));if((e.west<e.east||t.west<t.east)&&c<=a)return;let d=Math.max(e.south,t.south),u=Math.min(e.north,t.north);if(!(d>=u))return l(n)?(n.west=a,n.south=d,n.east=c,n.north=u,n):new Gn(a,d,c,u)};Gn.simpleIntersection=function(e,t,n){let i=Math.max(e.west,t.west),o=Math.max(e.south,t.south),r=Math.min(e.east,t.east),s=Math.min(e.north,t.north);if(!(o>=s||i>=r))return l(n)?(n.west=i,n.south=o,n.east=r,n.north=s,n):new Gn(i,o,r,s)};Gn.union=function(e,t,n){l(n)||(n=new Gn);let i=e.east,o=e.west,r=t.east,s=t.west;i<o&&r>0?i+=X.TWO_PI:r<s&&i>0&&(r+=X.TWO_PI),i<o&&s<0?s+=X.TWO_PI:r<s&&o<0&&(o+=X.TWO_PI);let a=X.negativePiToPi(Math.min(o,s)),c=X.negativePiToPi(Math.max(i,r));return n.west=a,n.south=Math.min(e.south,t.south),n.east=c,n.north=Math.max(e.north,t.north),n};Gn.expand=function(e,t,n){return l(n)||(n=new Gn),n.west=Math.min(e.west,t.longitude),n.south=Math.min(e.south,t.latitude),n.east=Math.max(e.east,t.longitude),n.north=Math.max(e.north,t.latitude),n};Gn.contains=function(e,t){let n=t.longitude,i=t.latitude,o=e.west,r=e.east;return r<o&&(r+=X.TWO_PI,n<0&&(n+=X.TWO_PI)),(n>o||X.equalsEpsilon(n,o,X.EPSILON14))&&(n<r||X.equalsEpsilon(n,r,X.EPSILON14))&&i>=e.south&&i<=e.north};var JLe=new he;Gn.subsample=function(e,t,n,i){t=t??ne.default,n=n??0,l(i)||(i=[]);let o=0,r=e.north,s=e.south,a=e.east,c=e.west,d=JLe;d.height=n,d.longitude=c,d.latitude=r,i[o]=t.cartographicToCartesian(d,i[o]),o++,d.longitude=a,i[o]=t.cartographicToCartesian(d,i[o]),o++,d.latitude=s,i[o]=t.cartographicToCartesian(d,i[o]),o++,d.longitude=c,i[o]=t.cartographicToCartesian(d,i[o]),o++,r<0?d.latitude=r:s>0?d.latitude=s:d.latitude=0;for(let u=1;u<8;++u)d.longitude=-Math.PI+u*X.PI_OVER_TWO,Gn.contains(e,d)&&(i[o]=t.cartographicToCartesian(d,i[o]),o++);return d.latitude===0&&(d.longitude=c,i[o]=t.cartographicToCartesian(d,i[o]),o++,d.longitude=a,i[o]=t.cartographicToCartesian(d,i[o]),o++),i.length=o,i};Gn.subsection=function(e,t,n,i,o,r){if(l(r)||(r=new Gn),e.west<=e.east){let a=e.east-e.west;r.west=e.west+t*a,r.east=e.west+i*a}else{let a=X.TWO_PI+e.east-e.west;r.west=X.negativePiToPi(e.west+t*a),r.east=X.negativePiToPi(e.west+i*a)}let s=e.north-e.south;return r.south=e.south+n*s,r.north=e.south+o*s,t===1&&(r.west=e.east),i===1&&(r.east=e.east),n===1&&(r.south=e.north),o===1&&(r.north=e.north),r};Gn.MAX_VALUE=Object.freeze(new Gn(-Math.PI,-X.PI_OVER_TWO,Math.PI,X.PI_OVER_TWO));var ce=Gn;function Xr(e,t,n,i){this.x=e??0,this.y=t??0,this.width=n??0,this.height=i??0}Xr.packedLength=4;Xr.pack=function(e,t,n){return n=n??0,t[n++]=e.x,t[n++]=e.y,t[n++]=e.width,t[n]=e.height,t};Xr.unpack=function(e,t,n){return t=t??0,l(n)||(n=new Xr),n.x=e[t++],n.y=e[t++],n.width=e[t++],n.height=e[t],n};Xr.fromPoints=function(e,t){if(l(t)||(t=new Xr),!l(e)||e.length===0)return t.x=0,t.y=0,t.width=0,t.height=0,t;let n=e.length,i=e[0].x,o=e[0].y,r=e[0].x,s=e[0].y;for(let a=1;a<n;a++){let c=e[a],d=c.x,u=c.y;i=Math.min(d,i),r=Math.max(d,r),o=Math.min(u,o),s=Math.max(u,s)}return t.x=i,t.y=o,t.width=r-i,t.height=s-o,t};var G$=new Ei,QLe=new he,jLe=new he;Xr.fromRectangle=function(e,t,n){if(l(n)||(n=new Xr),!l(e))return n.x=0,n.y=0,n.width=0,n.height=0,n;G$._ellipsoid=ne.default,t=t??G$;let i=t.project(ce.southwest(e,QLe)),o=t.project(ce.northeast(e,jLe));return U.subtract(o,i,o),n.x=i.x,n.y=i.y,n.width=o.x,n.height=o.y,n};Xr.clone=function(e,t){if(l(e))return l(t)?(t.x=e.x,t.y=e.y,t.width=e.width,t.height=e.height,t):new Xr(e.x,e.y,e.width,e.height)};Xr.union=function(e,t,n){l(n)||(n=new Xr);let i=Math.min(e.x,t.x),o=Math.min(e.y,t.y),r=Math.max(e.x+e.width,t.x+t.width),s=Math.max(e.y+e.height,t.y+t.height);return n.x=i,n.y=o,n.width=r-i,n.height=s-o,n};Xr.expand=function(e,t,n){n=Xr.clone(e,n);let i=t.x-n.x,o=t.y-n.y;return i>n.width?n.width=i:i<0&&(n.width-=i,n.x=t.x),o>n.height?n.height=o:o<0&&(n.height-=o,n.y=t.y),n};Xr.intersect=function(e,t){let n=e.x,i=e.y,o=t.x,r=t.y;return n>o+t.width||n+e.width<o||i+e.height<r||i>r+t.height?zt.OUTSIDE:zt.INTERSECTING};Xr.equals=function(e,t){return e===t||l(e)&&l(t)&&e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height};Xr.prototype.clone=function(e){return Xr.clone(this,e)};Xr.prototype.intersect=function(e){return Xr.intersect(this,e)};Xr.prototype.equals=function(e){return Xr.equals(this,e)};var Ke=Xr;var vIt=_(T(),1);var Ia={POINTS:ie.POINTS,LINES:ie.LINES,LINE_LOOP:ie.LINE_LOOP,LINE_STRIP:ie.LINE_STRIP,TRIANGLES:ie.TRIANGLES,TRIANGLE_STRIP:ie.TRIANGLE_STRIP,TRIANGLE_FAN:ie.TRIANGLE_FAN};Ia.isLines=function(e){return e===Ia.LINES||e===Ia.LINE_LOOP||e===Ia.LINE_STRIP};Ia.isTriangles=function(e){return e===Ia.TRIANGLES||e===Ia.TRIANGLE_STRIP||e===Ia.TRIANGLE_FAN};Ia.validate=function(e){return e===Ia.POINTS||e===Ia.LINES||e===Ia.LINE_LOOP||e===Ia.LINE_STRIP||e===Ia.TRIANGLES||e===Ia.TRIANGLE_STRIP||e===Ia.TRIANGLE_FAN};var we=Object.freeze(Ia);var FIt=_(T(),1),ux=`in vec4 position; in vec2 textureCoordinates; out vec2 v_textureCoordinates; void main() { gl_Position = position; v_textureCoordinates = textureCoordinates; } `;var UIt=_(T(),1);var gr={CULL:1,OCCLUDE:2,EXECUTE_IN_CLOSEST_FRUSTUM:4,DEBUG_SHOW_BOUNDING_VOLUME:8,CAST_SHADOWS:16,RECEIVE_SHADOWS:32,PICK_ONLY:64,DEPTH_FOR_TRANSLUCENT_CLASSIFICATION:128};function aR(e){e=e??Y.EMPTY_OBJECT,this._boundingVolume=e.boundingVolume,this._orientedBoundingBox=e.orientedBoundingBox,this._modelMatrix=e.modelMatrix,this._primitiveType=e.primitiveType??we.TRIANGLES,this._vertexArray=e.vertexArray,this._count=e.count,this._offset=e.offset??0,this._instanceCount=e.instanceCount??0,this._shaderProgram=e.shaderProgram,this._uniformMap=e.uniformMap,this._renderState=e.renderState,this._framebuffer=e.framebuffer,this._pass=e.pass,this._owner=e.owner,this._debugOverlappingFrustums=0,this._pickId=e.pickId,this._pickMetadataAllowed=e.pickMetadataAllowed===!0,this._pickedMetadataInfo=void 0,this._flags=0,this.cull=e.cull??!0,this.occlude=e.occlude??!0,this.executeInClosestFrustum=e.executeInClosestFrustum??!1,this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this.castShadows=e.castShadows??!1,this.receiveShadows=e.receiveShadows??!1,this.pickOnly=e.pickOnly??!1,this.depthForTranslucentClassification=e.depthForTranslucentClassification??!1,this.dirty=!0,this.lastDirtyTime=0,this.derivedCommands={}}function rc(e,t){return(e._flags&t)===t}function N0(e,t,n){n?e._flags|=t:e._flags&=~t}Object.defineProperties(aR.prototype,{boundingVolume:{get:function(){return this._boundingVolume},set:function(e){this._boundingVolume!==e&&(this._boundingVolume=e,this.dirty=!0)}},orientedBoundingBox:{get:function(){return this._orientedBoundingBox},set:function(e){this._orientedBoundingBox!==e&&(this._orientedBoundingBox=e,this.dirty=!0)}},cull:{get:function(){return rc(this,gr.CULL)},set:function(e){rc(this,gr.CULL)!==e&&(N0(this,gr.CULL,e),this.dirty=!0)}},occlude:{get:function(){return rc(this,gr.OCCLUDE)},set:function(e){rc(this,gr.OCCLUDE)!==e&&(N0(this,gr.OCCLUDE,e),this.dirty=!0)}},modelMatrix:{get:function(){return this._modelMatrix},set:function(e){this._modelMatrix!==e&&(this._modelMatrix=e,this.dirty=!0)}},primitiveType:{get:function(){return this._primitiveType},set:function(e){this._primitiveType!==e&&(this._primitiveType=e,this.dirty=!0)}},vertexArray:{get:function(){return this._vertexArray},set:function(e){this._vertexArray!==e&&(this._vertexArray=e,this.dirty=!0)}},count:{get:function(){return this._count},set:function(e){this._count!==e&&(this._count=e,this.dirty=!0)}},offset:{get:function(){return this._offset},set:function(e){this._offset!==e&&(this._offset=e,this.dirty=!0)}},instanceCount:{get:function(){return this._instanceCount},set:function(e){this._instanceCount!==e&&(this._instanceCount=e,this.dirty=!0)}},shaderProgram:{get:function(){return this._shaderProgram},set:function(e){this._shaderProgram!==e&&(this._shaderProgram=e,this.dirty=!0)}},castShadows:{get:function(){return rc(this,gr.CAST_SHADOWS)},set:function(e){rc(this,gr.CAST_SHADOWS)!==e&&(N0(this,gr.CAST_SHADOWS,e),this.dirty=!0)}},receiveShadows:{get:function(){return rc(this,gr.RECEIVE_SHADOWS)},set:function(e){rc(this,gr.RECEIVE_SHADOWS)!==e&&(N0(this,gr.RECEIVE_SHADOWS,e),this.dirty=!0)}},uniformMap:{get:function(){return this._uniformMap},set:function(e){this._uniformMap!==e&&(this._uniformMap=e,this.dirty=!0)}},renderState:{get:function(){return this._renderState},set:function(e){this._renderState!==e&&(this._renderState=e,this.dirty=!0)}},framebuffer:{get:function(){return this._framebuffer},set:function(e){this._framebuffer!==e&&(this._framebuffer=e,this.dirty=!0)}},pass:{get:function(){return this._pass},set:function(e){this._pass!==e&&(this._pass=e,this.dirty=!0)}},executeInClosestFrustum:{get:function(){return rc(this,gr.EXECUTE_IN_CLOSEST_FRUSTUM)},set:function(e){rc(this,gr.EXECUTE_IN_CLOSEST_FRUSTUM)!==e&&(N0(this,gr.EXECUTE_IN_CLOSEST_FRUSTUM,e),this.dirty=!0)}},owner:{get:function(){return this._owner},set:function(e){this._owner!==e&&(this._owner=e,this.dirty=!0)}},debugShowBoundingVolume:{get:function(){return rc(this,gr.DEBUG_SHOW_BOUNDING_VOLUME)},set:function(e){rc(this,gr.DEBUG_SHOW_BOUNDING_VOLUME)!==e&&(N0(this,gr.DEBUG_SHOW_BOUNDING_VOLUME,e),this.dirty=!0)}},debugOverlappingFrustums:{get:function(){return this._debugOverlappingFrustums},set:function(e){this._debugOverlappingFrustums!==e&&(this._debugOverlappingFrustums=e,this.dirty=!0)}},pickId:{get:function(){return this._pickId},set:function(e){this._pickId!==e&&(this._pickId=e,this.dirty=!0)}},pickMetadataAllowed:{get:function(){return this._pickMetadataAllowed}},pickedMetadataInfo:{get:function(){return this._pickedMetadataInfo},set:function(e){this._pickedMetadataInfo!==e&&(this._pickedMetadataInfo=e,this.dirty=!0)}},pickOnly:{get:function(){return rc(this,gr.PICK_ONLY)},set:function(e){rc(this,gr.PICK_ONLY)!==e&&(N0(this,gr.PICK_ONLY,e),this.dirty=!0)}},depthForTranslucentClassification:{get:function(){return rc(this,gr.DEPTH_FOR_TRANSLUCENT_CLASSIFICATION)},set:function(e){rc(this,gr.DEPTH_FOR_TRANSLUCENT_CLASSIFICATION)!==e&&(N0(this,gr.DEPTH_FOR_TRANSLUCENT_CLASSIFICATION,e),this.dirty=!0)}}});aR.shallowClone=function(e,t){if(l(e))return l(t)||(t=new aR),t._boundingVolume=e._boundingVolume,t._orientedBoundingBox=e._orientedBoundingBox,t._modelMatrix=e._modelMatrix,t._primitiveType=e._primitiveType,t._vertexArray=e._vertexArray,t._count=e._count,t._offset=e._offset,t._instanceCount=e._instanceCount,t._shaderProgram=e._shaderProgram,t._uniformMap=e._uniformMap,t._renderState=e._renderState,t._framebuffer=e._framebuffer,t._pass=e._pass,t._owner=e._owner,t._debugOverlappingFrustums=e._debugOverlappingFrustums,t._pickId=e._pickId,t._pickMetadataAllowed=e._pickMetadataAllowed,t._pickedMetadataInfo=e._pickedMetadataInfo,t._flags=e._flags,t.dirty=!0,t.lastDirtyTime=0,t};aR.prototype.execute=function(e,t){e.draw(this,t)};var $e=aR;var nXt=_(T(),1);var KIt=_(T(),1);var OIt=_(T(),1);var mi={UNSIGNED_BYTE:ie.UNSIGNED_BYTE,UNSIGNED_SHORT:ie.UNSIGNED_SHORT,UNSIGNED_INT:ie.UNSIGNED_INT,FLOAT:ie.FLOAT,HALF_FLOAT:ie.HALF_FLOAT_OES,UNSIGNED_INT_24_8:ie.UNSIGNED_INT_24_8,UNSIGNED_SHORT_4_4_4_4:ie.UNSIGNED_SHORT_4_4_4_4,UNSIGNED_SHORT_5_5_5_1:ie.UNSIGNED_SHORT_5_5_5_1,UNSIGNED_SHORT_5_6_5:ie.UNSIGNED_SHORT_5_6_5};mi.toWebGLConstant=function(e,t){switch(e){case mi.UNSIGNED_BYTE:return ie.UNSIGNED_BYTE;case mi.UNSIGNED_SHORT:return ie.UNSIGNED_SHORT;case mi.UNSIGNED_INT:return ie.UNSIGNED_INT;case mi.FLOAT:return ie.FLOAT;case mi.HALF_FLOAT:return t.webgl2?ie.HALF_FLOAT:ie.HALF_FLOAT_OES;case mi.UNSIGNED_INT_24_8:return ie.UNSIGNED_INT_24_8;case mi.UNSIGNED_SHORT_4_4_4_4:return ie.UNSIGNED_SHORT_4_4_4_4;case mi.UNSIGNED_SHORT_5_5_5_1:return ie.UNSIGNED_SHORT_5_5_5_1;case mi.UNSIGNED_SHORT_5_6_5:return mi.UNSIGNED_SHORT_5_6_5}};mi.isPacked=function(e){return e===mi.UNSIGNED_INT_24_8||e===mi.UNSIGNED_SHORT_4_4_4_4||e===mi.UNSIGNED_SHORT_5_5_5_1||e===mi.UNSIGNED_SHORT_5_6_5};mi.sizeInBytes=function(e){switch(e){case mi.UNSIGNED_BYTE:return 1;case mi.UNSIGNED_SHORT:case mi.UNSIGNED_SHORT_4_4_4_4:case mi.UNSIGNED_SHORT_5_5_5_1:case mi.UNSIGNED_SHORT_5_6_5:case mi.HALF_FLOAT:return 2;case mi.UNSIGNED_INT:case mi.FLOAT:case mi.UNSIGNED_INT_24_8:return 4}};mi.validate=function(e){return e===mi.UNSIGNED_BYTE||e===mi.UNSIGNED_SHORT||e===mi.UNSIGNED_INT||e===mi.FLOAT||e===mi.HALF_FLOAT||e===mi.UNSIGNED_INT_24_8||e===mi.UNSIGNED_SHORT_4_4_4_4||e===mi.UNSIGNED_SHORT_5_5_5_1||e===mi.UNSIGNED_SHORT_5_6_5};mi.getTypedArrayConstructor=function(e){let t=mi.sizeInBytes(e);return t===Uint8Array.BYTES_PER_ELEMENT?Uint8Array:t===Uint16Array.BYTES_PER_ELEMENT?Uint16Array:t===Float32Array.BYTES_PER_ELEMENT&&e===mi.FLOAT?Float32Array:Uint32Array};var je=Object.freeze(mi);var st={DEPTH_COMPONENT:ie.DEPTH_COMPONENT,DEPTH_STENCIL:ie.DEPTH_STENCIL,ALPHA:ie.ALPHA,RED:ie.RED,RG:ie.RG,RGB:ie.RGB,RGBA:ie.RGBA,LUMINANCE:ie.LUMINANCE,LUMINANCE_ALPHA:ie.LUMINANCE_ALPHA,RGB_DXT1:ie.COMPRESSED_RGB_S3TC_DXT1_EXT,RGBA_DXT1:ie.COMPRESSED_RGBA_S3TC_DXT1_EXT,RGBA_DXT3:ie.COMPRESSED_RGBA_S3TC_DXT3_EXT,RGBA_DXT5:ie.COMPRESSED_RGBA_S3TC_DXT5_EXT,RGB_PVRTC_4BPPV1:ie.COMPRESSED_RGB_PVRTC_4BPPV1_IMG,RGB_PVRTC_2BPPV1:ie.COMPRESSED_RGB_PVRTC_2BPPV1_IMG,RGBA_PVRTC_4BPPV1:ie.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,RGBA_PVRTC_2BPPV1:ie.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG,RGBA_ASTC:ie.COMPRESSED_RGBA_ASTC_4x4_WEBGL,RGB_ETC1:ie.COMPRESSED_RGB_ETC1_WEBGL,RGB8_ETC2:ie.COMPRESSED_RGB8_ETC2,RGBA8_ETC2_EAC:ie.COMPRESSED_RGBA8_ETC2_EAC,RGBA_BC7:ie.COMPRESSED_RGBA_BPTC_UNORM};st.componentsLength=function(e){switch(e){case st.RGB:return 3;case st.RGBA:return 4;case st.LUMINANCE_ALPHA:case st.RG:return 2;case st.ALPHA:case st.RED:case st.LUMINANCE:return 1;default:return 1}};st.validate=function(e){return e===st.DEPTH_COMPONENT||e===st.DEPTH_STENCIL||e===st.ALPHA||e===st.RED||e===st.RG||e===st.RGB||e===st.RGBA||e===st.LUMINANCE||e===st.LUMINANCE_ALPHA||e===st.RGB_DXT1||e===st.RGBA_DXT1||e===st.RGBA_DXT3||e===st.RGBA_DXT5||e===st.RGB_PVRTC_4BPPV1||e===st.RGB_PVRTC_2BPPV1||e===st.RGBA_PVRTC_4BPPV1||e===st.RGBA_PVRTC_2BPPV1||e===st.RGBA_ASTC||e===st.RGB_ETC1||e===st.RGB8_ETC2||e===st.RGBA8_ETC2_EAC||e===st.RGBA_BC7};st.isColorFormat=function(e){return e===st.RED||e===st.ALPHA||e===st.RGB||e===st.RGBA||e===st.LUMINANCE||e===st.LUMINANCE_ALPHA};st.isDepthFormat=function(e){return e===st.DEPTH_COMPONENT||e===st.DEPTH_STENCIL};st.isCompressedFormat=function(e){return e===st.RGB_DXT1||e===st.RGBA_DXT1||e===st.RGBA_DXT3||e===st.RGBA_DXT5||e===st.RGB_PVRTC_4BPPV1||e===st.RGB_PVRTC_2BPPV1||e===st.RGBA_PVRTC_4BPPV1||e===st.RGBA_PVRTC_2BPPV1||e===st.RGBA_ASTC||e===st.RGB_ETC1||e===st.RGB8_ETC2||e===st.RGBA8_ETC2_EAC||e===st.RGBA_BC7};st.isDXTFormat=function(e){return e===st.RGB_DXT1||e===st.RGBA_DXT1||e===st.RGBA_DXT3||e===st.RGBA_DXT5};st.isPVRTCFormat=function(e){return e===st.RGB_PVRTC_4BPPV1||e===st.RGB_PVRTC_2BPPV1||e===st.RGBA_PVRTC_4BPPV1||e===st.RGBA_PVRTC_2BPPV1};st.isASTCFormat=function(e){return e===st.RGBA_ASTC};st.isETC1Format=function(e){return e===st.RGB_ETC1};st.isETC2Format=function(e){return e===st.RGB8_ETC2||e===st.RGBA8_ETC2_EAC};st.isBC7Format=function(e){return e===st.RGBA_BC7};st.compressedTextureSizeInBytes=function(e,t,n){switch(e){case st.RGB_DXT1:case st.RGBA_DXT1:case st.RGB_ETC1:case st.RGB8_ETC2:return Math.floor((t+3)/4)*Math.floor((n+3)/4)*8;case st.RGBA_DXT3:case st.RGBA_DXT5:case st.RGBA_ASTC:case st.RGBA8_ETC2_EAC:return Math.floor((t+3)/4)*Math.floor((n+3)/4)*16;case st.RGB_PVRTC_4BPPV1:case st.RGBA_PVRTC_4BPPV1:return Math.floor((Math.max(t,8)*Math.max(n,8)*4+7)/8);case st.RGB_PVRTC_2BPPV1:case st.RGBA_PVRTC_2BPPV1:return Math.floor((Math.max(t,16)*Math.max(n,8)*2+7)/8);case st.RGBA_BC7:return Math.ceil(t/4)*Math.ceil(n/4)*16;default:return 0}};st.textureSizeInBytes=function(e,t,n,i){let o=st.componentsLength(e);return je.isPacked(t)&&(o=1),o*je.sizeInBytes(t)*n*i};st.alignmentInBytes=function(e,t,n){let i=st.textureSizeInBytes(e,t,n,1)%4;return i===0?4:i===2?2:1};st.createTypedArray=function(e,t,n,i){let o=je.getTypedArrayConstructor(t),r=st.componentsLength(e)*n*i;return new o(r)};st.flipY=function(e,t,n,i,o){if(o===1)return e;let r=st.createTypedArray(t,n,i,o),s=st.componentsLength(t),a=i*s;for(let c=0;c<o;++c){let d=c*i*s,u=(o-c-1)*i*s;for(let h=0;h<a;++h)r[u+h]=e[d+h]}return r};st.toInternalFormat=function(e,t,n){if(!n.webgl2)return e;if(e===st.DEPTH_STENCIL)return ie.DEPTH24_STENCIL8;if(e===st.DEPTH_COMPONENT){if(t===je.UNSIGNED_SHORT)return ie.DEPTH_COMPONENT16;if(t===je.UNSIGNED_INT)return ie.DEPTH_COMPONENT24}if(t===je.FLOAT)switch(e){case st.RGBA:return ie.RGBA32F;case st.RGB:return ie.RGB32F;case st.RG:return ie.RG32F;case st.RED:return ie.R32F}if(t===je.HALF_FLOAT)switch(e){case st.RGBA:return ie.RGBA16F;case st.RGB:return ie.RGB16F;case st.RG:return ie.RG16F;case st.RED:return ie.R16F}return e};var it=Object.freeze(st);var QIt=_(T(),1),yr={_maximumCombinedTextureImageUnits:0,_maximumCubeMapSize:0,_maximumFragmentUniformVectors:0,_maximumTextureImageUnits:0,_maximumRenderbufferSize:0,_maximumTextureSize:0,_maximumVaryingVectors:0,_maximumVertexAttributes:0,_maximumVertexTextureImageUnits:0,_maximumVertexUniformVectors:0,_minimumAliasedLineWidth:0,_maximumAliasedLineWidth:0,_minimumAliasedPointSize:0,_maximumAliasedPointSize:0,_maximumViewportWidth:0,_maximumViewportHeight:0,_maximumTextureFilterAnisotropy:0,_maximumDrawBuffers:0,_maximumColorAttachments:0,_maximumSamples:0,_highpFloatSupported:!1,_highpIntSupported:!1};Object.defineProperties(yr,{maximumCombinedTextureImageUnits:{get:function(){return yr._maximumCombinedTextureImageUnits}},maximumCubeMapSize:{get:function(){return yr._maximumCubeMapSize}},maximumFragmentUniformVectors:{get:function(){return yr._maximumFragmentUniformVectors}},maximumTextureImageUnits:{get:function(){return yr._maximumTextureImageUnits}},maximumRenderbufferSize:{get:function(){return yr._maximumRenderbufferSize}},maximumTextureSize:{get:function(){return yr._maximumTextureSize}},maximumVaryingVectors:{get:function(){return yr._maximumVaryingVectors}},maximumVertexAttributes:{get:function(){return yr._maximumVertexAttributes}},maximumVertexTextureImageUnits:{get:function(){return yr._maximumVertexTextureImageUnits}},maximumVertexUniformVectors:{get:function(){return yr._maximumVertexUniformVectors}},minimumAliasedLineWidth:{get:function(){return yr._minimumAliasedLineWidth}},maximumAliasedLineWidth:{get:function(){return yr._maximumAliasedLineWidth}},minimumAliasedPointSize:{get:function(){return yr._minimumAliasedPointSize}},maximumAliasedPointSize:{get:function(){return yr._maximumAliasedPointSize}},maximumViewportWidth:{get:function(){return yr._maximumViewportWidth}},maximumViewportHeight:{get:function(){return yr._maximumViewportHeight}},maximumTextureFilterAnisotropy:{get:function(){return yr._maximumTextureFilterAnisotropy}},maximumDrawBuffers:{get:function(){return yr._maximumDrawBuffers}},maximumColorAttachments:{get:function(){return yr._maximumColorAttachments}},maximumSamples:{get:function(){return yr._maximumSamples}},highpFloatSupported:{get:function(){return yr._highpFloatSupported}},highpIntSupported:{get:function(){return yr._highpIntSupported}}});var Nt=yr;function EO(e,t,n){let i=e._gl;i.framebufferTexture2D(i.FRAMEBUFFER,t,n._target,n._texture,0)}function vN(e,t,n){let i=e._gl;i.framebufferRenderbuffer(i.FRAMEBUFFER,t,i.RENDERBUFFER,n._getRenderbuffer())}function Em(e){e=e??Y.EMPTY_OBJECT;let n=e.context._gl,i=Nt.maximumColorAttachments;if(this._gl=n,this._framebuffer=n.createFramebuffer(),this._colorTextures=[],this._colorRenderbuffers=[],this._activeColorAttachments=[],this._depthTexture=void 0,this._depthRenderbuffer=void 0,this._stencilRenderbuffer=void 0,this._depthStencilTexture=void 0,this._depthStencilRenderbuffer=void 0,this.destroyAttachments=e.destroyAttachments??!0,this._bind(),l(e.colorTextures)){let o=e.colorTextures,r=this._colorTextures.length=this._activeColorAttachments.length=o.length;for(let s=0;s<r;++s){let a=o[s],c=this._gl.COLOR_ATTACHMENT0+s;EO(this,c,a),this._activeColorAttachments[s]=c,this._colorTextures[s]=a}}if(l(e.colorRenderbuffers)){let o=e.colorRenderbuffers,r=this._colorRenderbuffers.length=this._activeColorAttachments.length=o.length;for(let s=0;s<r;++s){let a=o[s],c=this._gl.COLOR_ATTACHMENT0+s;vN(this,c,a),this._activeColorAttachments[s]=c,this._colorRenderbuffers[s]=a}}if(l(e.depthTexture)){let o=e.depthTexture;EO(this,this._gl.DEPTH_ATTACHMENT,o),this._depthTexture=o}if(l(e.depthRenderbuffer)){let o=e.depthRenderbuffer;vN(this,this._gl.DEPTH_ATTACHMENT,o),this._depthRenderbuffer=o}if(l(e.stencilRenderbuffer)){let o=e.stencilRenderbuffer;vN(this,this._gl.STENCIL_ATTACHMENT,o),this._stencilRenderbuffer=o}if(l(e.depthStencilTexture)){let o=e.depthStencilTexture;EO(this,this._gl.DEPTH_STENCIL_ATTACHMENT,o),this._depthStencilTexture=o}if(l(e.depthStencilRenderbuffer)){let o=e.depthStencilRenderbuffer;vN(this,this._gl.DEPTH_STENCIL_ATTACHMENT,o),this._depthStencilRenderbuffer=o}this._unBind()}Object.defineProperties(Em.prototype,{status:{get:function(){this._bind();let e=this._gl.checkFramebufferStatus(this._gl.FRAMEBUFFER);return this._unBind(),e}},numberOfColorAttachments:{get:function(){return this._activeColorAttachments.length}},depthTexture:{get:function(){return this._depthTexture}},depthRenderbuffer:{get:function(){return this._depthRenderbuffer}},stencilRenderbuffer:{get:function(){return this._stencilRenderbuffer}},depthStencilTexture:{get:function(){return this._depthStencilTexture}},depthStencilRenderbuffer:{get:function(){return this._depthStencilRenderbuffer}},hasDepthAttachment:{get:function(){return!!(this.depthTexture||this.depthRenderbuffer||this.depthStencilTexture||this.depthStencilRenderbuffer)}}});Em.prototype._bind=function(){let e=this._gl;e.bindFramebuffer(e.FRAMEBUFFER,this._framebuffer)};Em.prototype._unBind=function(){let e=this._gl;e.bindFramebuffer(e.FRAMEBUFFER,null)};Em.prototype.bindDraw=function(){let e=this._gl;e.bindFramebuffer(e.DRAW_FRAMEBUFFER,this._framebuffer)};Em.prototype.bindRead=function(){let e=this._gl;e.bindFramebuffer(e.READ_FRAMEBUFFER,this._framebuffer)};Em.prototype._getActiveColorAttachments=function(){return this._activeColorAttachments};Em.prototype.getColorTexture=function(e){return this._colorTextures[e]};Em.prototype.getColorRenderbuffer=function(e){return this._colorRenderbuffers[e]};Em.prototype.isDestroyed=function(){return!1};Em.prototype.destroy=function(){if(this.destroyAttachments){let e=this._colorTextures;for(let n=0;n<e.length;++n){let i=e[n];l(i)&&i.destroy()}let t=this._colorRenderbuffers;for(let n=0;n<t.length;++n){let i=t[n];l(i)&&i.destroy()}this._depthTexture=this._depthTexture&&this._depthTexture.destroy(),this._depthRenderbuffer=this._depthRenderbuffer&&this._depthRenderbuffer.destroy(),this._stencilRenderbuffer=this._stencilRenderbuffer&&this._stencilRenderbuffer.destroy(),this._depthStencilTexture=this._depthStencilTexture&&this._depthStencilTexture.destroy(),this._depthStencilRenderbuffer=this._depthStencilRenderbuffer&&this._depthStencilRenderbuffer.destroy()}return this._gl.deleteFramebuffer(this._framebuffer),me(this)};var Wr=Em;var pXt=_(T(),1);var rXt=_(T(),1);var wN={CLOCKWISE:ie.CW,COUNTER_CLOCKWISE:ie.CCW};wN.validate=function(e){return e===wN.CLOCKWISE||e===wN.COUNTER_CLOCKWISE};var us=Object.freeze(wN);var aXt=_(T(),1);function E$(e){if(typeof e!="object"||e===null)return e;let t,n=Object.keys(e);for(let i=0;i<n.length;i++)t=n[i],e.hasOwnProperty(t)&&t!=="_applyFunctions"&&(e[t]=E$(e[t]));return Object.freeze(e)}var IO=E$;function sf(e){let t=e??Y.EMPTY_OBJECT,n=t.cull??Y.EMPTY_OBJECT,i=t.polygonOffset??Y.EMPTY_OBJECT,o=t.scissorTest??Y.EMPTY_OBJECT,r=o.rectangle??Y.EMPTY_OBJECT,s=t.depthRange??Y.EMPTY_OBJECT,a=t.depthTest??Y.EMPTY_OBJECT,c=t.colorMask??Y.EMPTY_OBJECT,d=t.blending??Y.EMPTY_OBJECT,u=d.color??Y.EMPTY_OBJECT,h=t.stencilTest??Y.EMPTY_OBJECT,p=h.frontOperation??Y.EMPTY_OBJECT,g=h.backOperation??Y.EMPTY_OBJECT,f=t.sampleCoverage??Y.EMPTY_OBJECT,y=t.viewport;this.frontFace=t.frontFace??us.COUNTER_CLOCKWISE,this.cull={enabled:n.enabled??!1,face:n.face??ie.BACK},this.lineWidth=t.lineWidth??1,this.polygonOffset={enabled:i.enabled??!1,factor:i.factor??0,units:i.units??0},this.scissorTest={enabled:o.enabled??!1,rectangle:Ke.clone(r)},this.depthRange={near:s.near??0,far:s.far??1},this.depthTest={enabled:a.enabled??!1,func:a.func??ie.LESS},this.colorMask={red:c.red??!0,green:c.green??!0,blue:c.blue??!0,alpha:c.alpha??!0},this.depthMask=t.depthMask??!0,this.stencilMask=t.stencilMask??-1,this.blending={enabled:d.enabled??!1,color:new D(u.red??0,u.green??0,u.blue??0,u.alpha??0),equationRgb:d.equationRgb??ie.FUNC_ADD,equationAlpha:d.equationAlpha??ie.FUNC_ADD,functionSourceRgb:d.functionSourceRgb??ie.ONE,functionSourceAlpha:d.functionSourceAlpha??ie.ONE,functionDestinationRgb:d.functionDestinationRgb??ie.ZERO,functionDestinationAlpha:d.functionDestinationAlpha??ie.ZERO},this.stencilTest={enabled:h.enabled??!1,frontFunction:h.frontFunction??ie.ALWAYS,backFunction:h.backFunction??ie.ALWAYS,reference:h.reference??0,mask:h.mask??-1,frontOperation:{fail:p.fail??ie.KEEP,zFail:p.zFail??ie.KEEP,zPass:p.zPass??ie.KEEP},backOperation:{fail:g.fail??ie.KEEP,zFail:g.zFail??ie.KEEP,zPass:g.zPass??ie.KEEP}},this.sampleCoverage={enabled:f.enabled??!1,value:f.value??1,invert:f.invert??!1},this.viewport=l(y)?new Ke(y.x,y.y,y.width,y.height):void 0,this.id=0,this._applyFunctions=[]}var qLe=0,rf={};sf.fromCache=function(e){let t=JSON.stringify(e),n=rf[t];if(l(n))return++n.referenceCount,n.state;let i=new sf(e),o=JSON.stringify(i);return n=rf[o],l(n)||(i.id=qLe++,n={referenceCount:0,state:i},rf[o]=n),++n.referenceCount,rf[t]={referenceCount:1,state:n.state},n.state};sf.removeFromCache=function(e){let t=new sf(e),n=JSON.stringify(t),i=rf[n],o=JSON.stringify(e),r=rf[o];l(r)&&(--r.referenceCount,r.referenceCount===0&&(delete rf[o],l(i)&&--i.referenceCount)),l(i)&&i.referenceCount===0&&delete rf[n]};sf.getCache=function(){return rf};sf.clearCache=function(){rf={}};function mx(e,t,n){n?e.enable(t):e.disable(t)}function I$(e,t){e.frontFace(t.frontFace)}function X$(e,t){let n=t.cull,i=n.enabled;mx(e,e.CULL_FACE,i),i&&e.cullFace(n.face)}function W$(e,t){e.lineWidth(t.lineWidth)}function P$(e,t){let n=t.polygonOffset,i=n.enabled;mx(e,e.POLYGON_OFFSET_FILL,i),i&&e.polygonOffset(n.factor,n.units)}function v$(e,t,n){let i=t.scissorTest,o=l(n.scissorTest)?n.scissorTest.enabled:i.enabled;if(mx(e,e.SCISSOR_TEST,o),o){let r=l(n.scissorTest)?n.scissorTest.rectangle:i.rectangle;e.scissor(r.x,r.y,r.width,r.height)}}function w$(e,t){let n=t.depthRange;e.depthRange(n.near,n.far)}function F$(e,t){let n=t.depthTest,i=n.enabled;mx(e,e.DEPTH_TEST,i),i&&e.depthFunc(n.func)}function A$(e,t){let n=t.colorMask;e.colorMask(n.red,n.green,n.blue,n.alpha)}function M$(e,t){e.depthMask(t.depthMask)}function N$(e,t){e.stencilMask(t.stencilMask)}function $Le(e,t){e.blendColor(t.red,t.green,t.blue,t.alpha)}function k$(e,t,n){let i=t.blending,o=l(n.blendingEnabled)?n.blendingEnabled:i.enabled;mx(e,e.BLEND,o),o&&($Le(e,i.color),e.blendEquationSeparate(i.equationRgb,i.equationAlpha),e.blendFuncSeparate(i.functionSourceRgb,i.functionDestinationRgb,i.functionSourceAlpha,i.functionDestinationAlpha))}function U$(e,t){let n=t.stencilTest,i=n.enabled;if(mx(e,e.STENCIL_TEST,i),i){let o=n.frontFunction,r=n.backFunction,s=n.reference,a=n.mask;e.stencilFunc(o,s,a),e.stencilFuncSeparate(e.BACK,r,s,a),e.stencilFuncSeparate(e.FRONT,o,s,a);let c=n.frontOperation,d=c.fail,u=c.zFail,h=c.zPass;e.stencilOpSeparate(e.FRONT,d,u,h);let p=n.backOperation,g=p.fail,f=p.zFail,y=p.zPass;e.stencilOpSeparate(e.BACK,g,f,y)}}function D$(e,t){let n=t.sampleCoverage,i=n.enabled;mx(e,e.SAMPLE_COVERAGE,i),i&&e.sampleCoverage(n.value,n.invert)}var eRe=new Ke;function B$(e,t,n){let i=t.viewport??n.viewport;l(i)||(i=eRe,i.width=n.context.drawingBufferWidth,i.height=n.context.drawingBufferHeight),n.context.uniformState.viewport=i,e.viewport(i.x,i.y,i.width,i.height)}sf.apply=function(e,t,n){I$(e,t),X$(e,t),W$(e,t),P$(e,t),w$(e,t),F$(e,t),A$(e,t),M$(e,t),N$(e,t),U$(e,t),D$(e,t),v$(e,t,n),k$(e,t,n),B$(e,t,n)};function tRe(e,t){let n=[];return e.frontFace!==t.frontFace&&n.push(I$),(e.cull.enabled!==t.cull.enabled||e.cull.face!==t.cull.face)&&n.push(X$),e.lineWidth!==t.lineWidth&&n.push(W$),(e.polygonOffset.enabled!==t.polygonOffset.enabled||e.polygonOffset.factor!==t.polygonOffset.factor||e.polygonOffset.units!==t.polygonOffset.units)&&n.push(P$),(e.depthRange.near!==t.depthRange.near||e.depthRange.far!==t.depthRange.far)&&n.push(w$),(e.depthTest.enabled!==t.depthTest.enabled||e.depthTest.func!==t.depthTest.func)&&n.push(F$),(e.colorMask.red!==t.colorMask.red||e.colorMask.green!==t.colorMask.green||e.colorMask.blue!==t.colorMask.blue||e.colorMask.alpha!==t.colorMask.alpha)&&n.push(A$),e.depthMask!==t.depthMask&&n.push(M$),e.stencilMask!==t.stencilMask&&n.push(N$),(e.stencilTest.enabled!==t.stencilTest.enabled||e.stencilTest.frontFunction!==t.stencilTest.frontFunction||e.stencilTest.backFunction!==t.stencilTest.backFunction||e.stencilTest.reference!==t.stencilTest.reference||e.stencilTest.mask!==t.stencilTest.mask||e.stencilTest.frontOperation.fail!==t.stencilTest.frontOperation.fail||e.stencilTest.frontOperation.zFail!==t.stencilTest.frontOperation.zFail||e.stencilTest.backOperation.fail!==t.stencilTest.backOperation.fail||e.stencilTest.backOperation.zFail!==t.stencilTest.backOperation.zFail||e.stencilTest.backOperation.zPass!==t.stencilTest.backOperation.zPass)&&n.push(U$),(e.sampleCoverage.enabled!==t.sampleCoverage.enabled||e.sampleCoverage.value!==t.sampleCoverage.value||e.sampleCoverage.invert!==t.sampleCoverage.invert)&&n.push(D$),n}sf.partialApply=function(e,t,n,i,o,r){if(t!==n){let u=n._applyFunctions[t.id];l(u)||(u=tRe(t,n),n._applyFunctions[t.id]=u);let h=u.length;for(let p=0;p<h;++p)u[p](e,n)}let s=l(i.scissorTest)?i.scissorTest:t.scissorTest,a=l(o.scissorTest)?o.scissorTest:n.scissorTest;(s!==a||r)&&v$(e,n,o);let c=l(i.blendingEnabled)?i.blendingEnabled:t.blending.enabled,d=l(o.blendingEnabled)?o.blendingEnabled:n.blending.enabled;(c!==d||d&&t.blending!==n.blending)&&k$(e,n,o),(t!==n||i!==o||i.context!==o.context)&&B$(e,n,o)};sf.getState=function(e){return{frontFace:e.frontFace,cull:{enabled:e.cull.enabled,face:e.cull.face},lineWidth:e.lineWidth,polygonOffset:{enabled:e.polygonOffset.enabled,factor:e.polygonOffset.factor,units:e.polygonOffset.units},scissorTest:{enabled:e.scissorTest.enabled,rectangle:Ke.clone(e.scissorTest.rectangle)},depthRange:{near:e.depthRange.near,far:e.depthRange.far},depthTest:{enabled:e.depthTest.enabled,func:e.depthTest.func},colorMask:{red:e.colorMask.red,green:e.colorMask.green,blue:e.colorMask.blue,alpha:e.colorMask.alpha},depthMask:e.depthMask,stencilMask:e.stencilMask,blending:{enabled:e.blending.enabled,color:D.clone(e.blending.color),equationRgb:e.blending.equationRgb,equationAlpha:e.blending.equationAlpha,functionSourceRgb:e.blending.functionSourceRgb,functionSourceAlpha:e.blending.functionSourceAlpha,functionDestinationRgb:e.blending.functionDestinationRgb,functionDestinationAlpha:e.blending.functionDestinationAlpha},stencilTest:{enabled:e.stencilTest.enabled,frontFunction:e.stencilTest.frontFunction,backFunction:e.stencilTest.backFunction,reference:e.stencilTest.reference,mask:e.stencilTest.mask,frontOperation:{fail:e.stencilTest.frontOperation.fail,zFail:e.stencilTest.frontOperation.zFail,zPass:e.stencilTest.frontOperation.zPass},backOperation:{fail:e.stencilTest.backOperation.fail,zFail:e.stencilTest.backOperation.zFail,zPass:e.stencilTest.backOperation.zPass}},sampleCoverage:{enabled:e.sampleCoverage.enabled,value:e.sampleCoverage.value,invert:e.sampleCoverage.invert},viewport:l(e.viewport)?Ke.clone(e.viewport):void 0}};var Ue=sf;var jXt=_(T(),1);var IXt=_(T(),1);var xXt=_(T(),1);function Jt(e,t,n,i){this[0]=e??0,this[1]=n??0,this[2]=t??0,this[3]=i??0}Jt.packedLength=4;Jt.pack=function(e,t,n){return n=n??0,t[n++]=e[0],t[n++]=e[1],t[n++]=e[2],t[n++]=e[3],t};Jt.unpack=function(e,t,n){return t=t??0,l(n)||(n=new Jt),n[0]=e[t++],n[1]=e[t++],n[2]=e[t++],n[3]=e[t++],n};Jt.packArray=function(e,t){let n=e.length,i=n*4;l(t)?!Array.isArray(t)&&t.length!==i||t.length!==i&&(t.length=i):t=new Array(i);for(let o=0;o<n;++o)Jt.pack(e[o],t,o*4);return t};Jt.unpackArray=function(e,t){let n=e.length;l(t)?t.length=n/4:t=new Array(n/4);for(let i=0;i<n;i+=4){let o=i/4;t[o]=Jt.unpack(e,i,t[o])}return t};Jt.clone=function(e,t){if(l(e))return l(t)?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t):new Jt(e[0],e[2],e[1],e[3])};Jt.fromArray=Jt.unpack;Jt.fromColumnMajorArray=function(e,t){return Jt.clone(e,t)};Jt.fromRowMajorArray=function(e,t){return l(t)?(t[0]=e[0],t[1]=e[2],t[2]=e[1],t[3]=e[3],t):new Jt(e[0],e[1],e[2],e[3])};Jt.fromScale=function(e,t){return l(t)?(t[0]=e.x,t[1]=0,t[2]=0,t[3]=e.y,t):new Jt(e.x,0,0,e.y)};Jt.fromUniformScale=function(e,t){return l(t)?(t[0]=e,t[1]=0,t[2]=0,t[3]=e,t):new Jt(e,0,0,e)};Jt.fromRotation=function(e,t){let n=Math.cos(e),i=Math.sin(e);return l(t)?(t[0]=n,t[1]=i,t[2]=-i,t[3]=n,t):new Jt(n,-i,i,n)};Jt.toArray=function(e,t){return l(t)?(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t):[e[0],e[1],e[2],e[3]]};Jt.getElementIndex=function(e,t){return e*2+t};Jt.getColumn=function(e,t,n){let i=t*2,o=e[i],r=e[i+1];return n.x=o,n.y=r,n};Jt.setColumn=function(e,t,n,i){i=Jt.clone(e,i);let o=t*2;return i[o]=n.x,i[o+1]=n.y,i};Jt.getRow=function(e,t,n){let i=e[t],o=e[t+2];return n.x=i,n.y=o,n};Jt.setRow=function(e,t,n,i){return i=Jt.clone(e,i),i[t]=n.x,i[t+2]=n.y,i};var nRe=new U;Jt.setScale=function(e,t,n){let i=Jt.getScale(e,nRe),o=t.x/i.x,r=t.y/i.y;return n[0]=e[0]*o,n[1]=e[1]*o,n[2]=e[2]*r,n[3]=e[3]*r,n};var iRe=new U;Jt.setUniformScale=function(e,t,n){let i=Jt.getScale(e,iRe),o=t/i.x,r=t/i.y;return n[0]=e[0]*o,n[1]=e[1]*o,n[2]=e[2]*r,n[3]=e[3]*r,n};var O$=new U;Jt.getScale=function(e,t){return t.x=U.magnitude(U.fromElements(e[0],e[1],O$)),t.y=U.magnitude(U.fromElements(e[2],e[3],O$)),t};var Y$=new U;Jt.getMaximumScale=function(e){return Jt.getScale(e,Y$),U.maximumComponent(Y$)};var oRe=new U;Jt.setRotation=function(e,t,n){let i=Jt.getScale(e,oRe);return n[0]=t[0]*i.x,n[1]=t[1]*i.x,n[2]=t[2]*i.y,n[3]=t[3]*i.y,n};var rRe=new U;Jt.getRotation=function(e,t){let n=Jt.getScale(e,rRe);return t[0]=e[0]/n.x,t[1]=e[1]/n.x,t[2]=e[2]/n.y,t[3]=e[3]/n.y,t};Jt.multiply=function(e,t,n){let i=e[0]*t[0]+e[2]*t[1],o=e[0]*t[2]+e[2]*t[3],r=e[1]*t[0]+e[3]*t[1],s=e[1]*t[2]+e[3]*t[3];return n[0]=i,n[1]=r,n[2]=o,n[3]=s,n};Jt.add=function(e,t,n){return n[0]=e[0]+t[0],n[1]=e[1]+t[1],n[2]=e[2]+t[2],n[3]=e[3]+t[3],n};Jt.subtract=function(e,t,n){return n[0]=e[0]-t[0],n[1]=e[1]-t[1],n[2]=e[2]-t[2],n[3]=e[3]-t[3],n};Jt.multiplyByVector=function(e,t,n){let i=e[0]*t.x+e[2]*t.y,o=e[1]*t.x+e[3]*t.y;return n.x=i,n.y=o,n};Jt.multiplyByScalar=function(e,t,n){return n[0]=e[0]*t,n[1]=e[1]*t,n[2]=e[2]*t,n[3]=e[3]*t,n};Jt.multiplyByScale=function(e,t,n){return n[0]=e[0]*t.x,n[1]=e[1]*t.x,n[2]=e[2]*t.y,n[3]=e[3]*t.y,n};Jt.multiplyByUniformScale=function(e,t,n){return n[0]=e[0]*t,n[1]=e[1]*t,n[2]=e[2]*t,n[3]=e[3]*t,n};Jt.negate=function(e,t){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t};Jt.transpose=function(e,t){let n=e[0],i=e[2],o=e[1],r=e[3];return t[0]=n,t[1]=i,t[2]=o,t[3]=r,t};Jt.abs=function(e,t){return t[0]=Math.abs(e[0]),t[1]=Math.abs(e[1]),t[2]=Math.abs(e[2]),t[3]=Math.abs(e[3]),t};Jt.equals=function(e,t){return e===t||l(e)&&l(t)&&e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]&&e[3]===t[3]};Jt.equalsArray=function(e,t,n){return e[0]===t[n]&&e[1]===t[n+1]&&e[2]===t[n+2]&&e[3]===t[n+3]};Jt.equalsEpsilon=function(e,t,n){return n=n??0,e===t||l(e)&&l(t)&&Math.abs(e[0]-t[0])<=n&&Math.abs(e[1]-t[1])<=n&&Math.abs(e[2]-t[2])<=n&&Math.abs(e[3]-t[3])<=n};Jt.IDENTITY=Object.freeze(new Jt(1,0,0,1));Jt.ZERO=Object.freeze(new Jt(0,0,0,0));Jt.COLUMN0ROW0=0;Jt.COLUMN0ROW1=1;Jt.COLUMN1ROW0=2;Jt.COLUMN1ROW1=3;Object.defineProperties(Jt.prototype,{length:{get:function(){return Jt.packedLength}}});Jt.prototype.clone=function(e){return Jt.clone(this,e)};Jt.prototype.equals=function(e){return Jt.equals(this,e)};Jt.prototype.equalsEpsilon=function(e,t){return Jt.equalsEpsilon(this,e,t)};Jt.prototype.toString=function(){return`(${this[0]}, ${this[2]}) (${this[1]}, ${this[3]})`};var Ii=Jt;function sRe(e,t,n,i){switch(t.type){case e.FLOAT:return new z$(e,t,n,i);case e.FLOAT_VEC2:return new H$(e,t,n,i);case e.FLOAT_VEC3:return new K$(e,t,n,i);case e.FLOAT_VEC4:return new J$(e,t,n,i);case e.SAMPLER_2D:case e.SAMPLER_CUBE:return new XO(e,t,n,i);case e.INT:case e.BOOL:return new Q$(e,t,n,i);case e.INT_VEC2:case e.BOOL_VEC2:return new j$(e,t,n,i);case e.INT_VEC3:case e.BOOL_VEC3:return new q$(e,t,n,i);case e.INT_VEC4:case e.BOOL_VEC4:return new $$(e,t,n,i);case e.FLOAT_MAT2:return new eee(e,t,n,i);case e.FLOAT_MAT3:return new tee(e,t,n,i);case e.FLOAT_MAT4:return new nee(e,t,n,i);default:throw new ae(`Unrecognized uniform type: ${t.type} for uniform "${n}".`)}}function z$(e,t,n,i){this.name=n,this.value=void 0,this._value=0,this._gl=e,this._location=i}z$.prototype.set=function(){this.value!==this._value&&(this._value=this.value,this._gl.uniform1f(this._location,this.value))};function H$(e,t,n,i){this.name=n,this.value=void 0,this._value=new U,this._gl=e,this._location=i}H$.prototype.set=function(){let e=this.value;U.equals(e,this._value)||(U.clone(e,this._value),this._gl.uniform2f(this._location,e.x,e.y))};function K$(e,t,n,i){this.name=n,this.value=void 0,this._value=void 0,this._gl=e,this._location=i}K$.prototype.set=function(){let e=this.value;l(e.red)?D.equals(e,this._value)||(this._value=D.clone(e,this._value),this._gl.uniform3f(this._location,e.red,e.green,e.blue)):l(e.x)&&(m.equals(e,this._value)||(this._value=m.clone(e,this._value),this._gl.uniform3f(this._location,e.x,e.y,e.z)))};function J$(e,t,n,i){this.name=n,this.value=void 0,this._value=void 0,this._gl=e,this._location=i}J$.prototype.set=function(){let e=this.value;l(e.red)?D.equals(e,this._value)||(this._value=D.clone(e,this._value),this._gl.uniform4f(this._location,e.red,e.green,e.blue,e.alpha)):l(e.x)&&(se.equals(e,this._value)||(this._value=se.clone(e,this._value),this._gl.uniform4f(this._location,e.x,e.y,e.z,e.w)))};function XO(e,t,n,i){this.name=n,this.value=void 0,this._gl=e,this._location=i,this.textureUnitIndex=void 0}XO.prototype.set=function(){let e=this._gl;e.activeTexture(e.TEXTURE0+this.textureUnitIndex);let t=this.value;e.bindTexture(t._target,t._texture)};XO.prototype._setSampler=function(e){return this.textureUnitIndex=e,this._gl.uniform1i(this._location,e),e+1};function Q$(e,t,n,i){this.name=n,this.value=void 0,this._value=0,this._gl=e,this._location=i}Q$.prototype.set=function(){this.value!==this._value&&(this._value=this.value,this._gl.uniform1i(this._location,this.value))};function j$(e,t,n,i){this.name=n,this.value=void 0,this._value=new U,this._gl=e,this._location=i}j$.prototype.set=function(){let e=this.value;U.equals(e,this._value)||(U.clone(e,this._value),this._gl.uniform2i(this._location,e.x,e.y))};function q$(e,t,n,i){this.name=n,this.value=void 0,this._value=new m,this._gl=e,this._location=i}q$.prototype.set=function(){let e=this.value;m.equals(e,this._value)||(m.clone(e,this._value),this._gl.uniform3i(this._location,e.x,e.y,e.z))};function $$(e,t,n,i){this.name=n,this.value=void 0,this._value=new se,this._gl=e,this._location=i}$$.prototype.set=function(){let e=this.value;se.equals(e,this._value)||(se.clone(e,this._value),this._gl.uniform4i(this._location,e.x,e.y,e.z,e.w))};var aRe=new Float32Array(4);function eee(e,t,n,i){this.name=n,this.value=void 0,this._value=new Ii,this._gl=e,this._location=i}eee.prototype.set=function(){if(!Ii.equalsArray(this.value,this._value,0)){Ii.clone(this.value,this._value);let e=Ii.toArray(this.value,aRe);this._gl.uniformMatrix2fv(this._location,!1,e)}};var cRe=new Float32Array(9);function tee(e,t,n,i){this.name=n,this.value=void 0,this._value=new $,this._gl=e,this._location=i}tee.prototype.set=function(){if(!$.equalsArray(this.value,this._value,0)){$.clone(this.value,this._value);let e=$.toArray(this.value,cRe);this._gl.uniformMatrix3fv(this._location,!1,e)}};var lRe=new Float32Array(16);function nee(e,t,n,i){this.name=n,this.value=void 0,this._value=new F,this._gl=e,this._location=i}nee.prototype.set=function(){if(!F.equalsArray(this.value,this._value,0)){F.clone(this.value,this._value);let e=F.toArray(this.value,lRe);this._gl.uniformMatrix4fv(this._location,!1,e)}};var cR=sRe;var UXt=_(T(),1);function dRe(e,t,n,i){switch(t.type){case e.FLOAT:return new iee(e,t,n,i);case e.FLOAT_VEC2:return new oee(e,t,n,i);case e.FLOAT_VEC3:return new ree(e,t,n,i);case e.FLOAT_VEC4:return new see(e,t,n,i);case e.SAMPLER_2D:case e.SAMPLER_CUBE:return new WO(e,t,n,i);case e.INT:case e.BOOL:return new aee(e,t,n,i);case e.INT_VEC2:case e.BOOL_VEC2:return new cee(e,t,n,i);case e.INT_VEC3:case e.BOOL_VEC3:return new lee(e,t,n,i);case e.INT_VEC4:case e.BOOL_VEC4:return new dee(e,t,n,i);case e.FLOAT_MAT2:return new uee(e,t,n,i);case e.FLOAT_MAT3:return new mee(e,t,n,i);case e.FLOAT_MAT4:return new hee(e,t,n,i);default:throw new ae(`Unrecognized uniform type: ${t.type} for uniform "${n}".`)}}function iee(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Float32Array(o),this._gl=e,this._location=i[0]}iee.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1;for(let o=0;o<t;++o){let r=e[o];r!==n[o]&&(n[o]=r,i=!0)}i&&this._gl.uniform1fv(this._location,n)};function oee(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Float32Array(o*2),this._gl=e,this._location=i[0]}oee.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1,o=0;for(let r=0;r<t;++r){let s=e[r];U.equalsArray(s,n,o)||(U.pack(s,n,o),i=!0),o+=2}i&&this._gl.uniform2fv(this._location,n)};function ree(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Float32Array(o*3),this._gl=e,this._location=i[0]}ree.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1,o=0;for(let r=0;r<t;++r){let s=e[r];l(s.red)?(s.red!==n[o]||s.green!==n[o+1]||s.blue!==n[o+2])&&(n[o]=s.red,n[o+1]=s.green,n[o+2]=s.blue,i=!0):l(s.x)&&(m.equalsArray(s,n,o)||(m.pack(s,n,o),i=!0)),o+=3}i&&this._gl.uniform3fv(this._location,n)};function see(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Float32Array(o*4),this._gl=e,this._location=i[0]}see.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1,o=0;for(let r=0;r<t;++r){let s=e[r];l(s.red)?D.equalsArray(s,n,o)||(D.pack(s,n,o),i=!0):l(s.x)&&(se.equalsArray(s,n,o)||(se.pack(s,n,o),i=!0)),o+=4}i&&this._gl.uniform4fv(this._location,n)};function WO(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Float32Array(o),this._gl=e,this._locations=i,this.textureUnitIndex=void 0}WO.prototype.set=function(){let e=this._gl,t=e.TEXTURE0+this.textureUnitIndex,n=this.value,i=n.length;for(let o=0;o<i;++o){let r=n[o];e.activeTexture(t+o),e.bindTexture(r._target,r._texture)}};WO.prototype._setSampler=function(e){this.textureUnitIndex=e;let t=this._locations,n=t.length;for(let i=0;i<n;++i){let o=e+i;this._gl.uniform1i(t[i],o)}return e+n};function aee(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Int32Array(o),this._gl=e,this._location=i[0]}aee.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1;for(let o=0;o<t;++o){let r=e[o];r!==n[o]&&(n[o]=r,i=!0)}i&&this._gl.uniform1iv(this._location,n)};function cee(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Int32Array(o*2),this._gl=e,this._location=i[0]}cee.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1,o=0;for(let r=0;r<t;++r){let s=e[r];U.equalsArray(s,n,o)||(U.pack(s,n,o),i=!0),o+=2}i&&this._gl.uniform2iv(this._location,n)};function lee(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Int32Array(o*3),this._gl=e,this._location=i[0]}lee.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1,o=0;for(let r=0;r<t;++r){let s=e[r];m.equalsArray(s,n,o)||(m.pack(s,n,o),i=!0),o+=3}i&&this._gl.uniform3iv(this._location,n)};function dee(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Int32Array(o*4),this._gl=e,this._location=i[0]}dee.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1,o=0;for(let r=0;r<t;++r){let s=e[r];se.equalsArray(s,n,o)||(se.pack(s,n,o),i=!0),o+=4}i&&this._gl.uniform4iv(this._location,n)};function uee(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Float32Array(o*4),this._gl=e,this._location=i[0]}uee.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1,o=0;for(let r=0;r<t;++r){let s=e[r];Ii.equalsArray(s,n,o)||(Ii.pack(s,n,o),i=!0),o+=4}i&&this._gl.uniformMatrix2fv(this._location,!1,n)};function mee(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Float32Array(o*9),this._gl=e,this._location=i[0]}mee.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1,o=0;for(let r=0;r<t;++r){let s=e[r];$.equalsArray(s,n,o)||($.pack(s,n,o),i=!0),o+=9}i&&this._gl.uniformMatrix3fv(this._location,!1,n)};function hee(e,t,n,i){let o=i.length;this.name=n,this.value=new Array(o),this._value=new Float32Array(o*16),this._gl=e,this._location=i[0]}hee.prototype.set=function(){let e=this.value,t=e.length,n=this._value,i=!1,o=0;for(let r=0;r<t;++r){let s=e[r];F.equalsArray(s,n,o)||(F.pack(s,n,o),i=!0),o+=16}i&&this._gl.uniformMatrix4fv(this._location,!1,n)};var lR=dRe;var uRe=0;function Rp(e){let t=e.vertexShaderText,n=e.fragmentShaderText;typeof spector<"u"&&(t=t.replace(/^#line/gm,"//#line"),n=n.replace(/^#line/gm,"//#line"));let i=mRe(t,n);this._gl=e.gl,this._logShaderCompilation=e.logShaderCompilation,this._debugShaders=e.debugShaders,this._attributeLocations=e.attributeLocations,this._program=void 0,this._numberOfVertexAttributes=void 0,this._vertexAttributes=void 0,this._uniformsByName=void 0,this._uniforms=void 0,this._automaticUniforms=void 0,this._manualUniforms=void 0,this._duplicateUniformNames=i.duplicateUniformNames,this._cachedShader=void 0,this.maximumTextureUnitIndex=void 0,this._vertexShaderSource=e.vertexShaderSource,this._vertexShaderText=e.vertexShaderText,this._fragmentShaderSource=e.fragmentShaderSource,this._fragmentShaderText=i.fragmentShaderText,this.id=uRe++}Rp.fromCache=function(e){return e=e??Y.EMPTY_OBJECT,e.context.shaderCache.getShaderProgram(e)};Rp.replaceCache=function(e){return e=e??Y.EMPTY_OBJECT,e.context.shaderCache.replaceShaderProgram(e)};Object.defineProperties(Rp.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},vertexAttributes:{get:function(){return FN(this),this._vertexAttributes}},numberOfVertexAttributes:{get:function(){return FN(this),this._numberOfVertexAttributes}},allUniforms:{get:function(){return FN(this),this._uniformsByName}}});function fee(e){let t=[],n=e.match(/uniform.*?(?![^{]*})(?=[=\[;])/g);if(l(n)){let i=n.length;for(let o=0;o<i;o++){let r=n[o].trim(),s=r.slice(r.lastIndexOf(" ")+1);t.push(s)}}return t}function mRe(e,t){let n={};if(!Nt.highpFloatSupported||!Nt.highpIntSupported){let i,o,r,s,a=fee(e),c=fee(t),d=a.length,u=c.length;for(i=0;i<d;i++)for(o=0;o<u;o++)if(a[i]===c[o]){r=a[i],s=`czm_mediump_${r}`;let h=new RegExp(`${r}\\b`,"g");t=t.replace(h,s),n[s]=r}}return{fragmentShaderText:t,duplicateUniformNames:n}}var af="[Cesium WebGL] ";function hRe(e,t){let n=t._vertexShaderText,i=t._fragmentShaderText,o=e.createShader(e.VERTEX_SHADER);e.shaderSource(o,n),e.compileShader(o);let r=e.createShader(e.FRAGMENT_SHADER);e.shaderSource(r,i),e.compileShader(r);let s=e.createProgram();e.attachShader(s,o),e.attachShader(s,r);let a=t._attributeLocations;if(l(a))for(let p in a)a.hasOwnProperty(p)&&e.bindAttribLocation(s,a[p],p);e.linkProgram(s);let c;if(e.getProgramParameter(s,e.LINK_STATUS))return t._logShaderCompilation&&(c=e.getShaderInfoLog(o),l(c)&&c.length>0&&console.log(`${af}Vertex shader compile log: ${c}`),c=e.getShaderInfoLog(r),l(c)&&c.length>0&&console.log(`${af}Fragment shader compile log: ${c}`),c=e.getProgramInfoLog(s),l(c)&&c.length>0&&console.log(`${af}Shader program link log: ${c}`)),e.deleteShader(o),e.deleteShader(r),s;let d,u=t._debugShaders;throw e.getShaderParameter(r,e.COMPILE_STATUS)?e.getShaderParameter(o,e.COMPILE_STATUS)?(c=e.getProgramInfoLog(s),console.error(`${af}Shader program link log: ${c}`),h(o,"vertex"),h(r,"fragment"),d=`Program failed to link. Link log: ${c}`):(c=e.getShaderInfoLog(o),console.error(`${af}Vertex shader compile log: ${c}`),console.error(`${af} Vertex shader source: ${n}`),d=`Vertex shader failed to compile. Compile log: ${c}`):(c=e.getShaderInfoLog(r),console.error(`${af}Fragment shader compile log: ${c}`),console.error(`${af} Fragment shader source: ${i}`),d=`Fragment shader failed to compile. Compile log: ${c}`),e.deleteShader(o),e.deleteShader(r),e.deleteProgram(s),new ae(d);function h(p,g){if(!l(u))return;let f=u.getTranslatedShaderSource(p);if(f===""){console.error(`${af}${g} shader translation failed.`);return}console.error(`${af}Translated ${g} shaderSource: ${f}`)}}function fRe(e,t,n){let i={};for(let o=0;o<n;++o){let r=e.getActiveAttrib(t,o),s=e.getAttribLocation(t,r.name);i[r.name]={name:r.name,type:r.type,index:s}}return i}function pRe(e,t){let n={},i=[],o=[],r=e.getProgramParameter(t,e.ACTIVE_UNIFORMS);for(let s=0;s<r;++s){let a=e.getActiveUniform(t,s),c="[0]",d=a.name.indexOf(c,a.name.length-c.length)!==-1?a.name.slice(0,a.name.length-3):a.name;if(d.indexOf("gl_")!==0)if(a.name.indexOf("[")<0){let u=e.getUniformLocation(t,d);if(u!==null){let h=cR(e,a,d,u);n[d]=h,i.push(h),h._setSampler&&o.push(h)}}else{let u,h,p,g,f=d.indexOf("[");if(f>=0){if(u=n[d.slice(0,f)],!l(u))continue;h=u._locations,h.length<=1&&(p=u.value,g=e.getUniformLocation(t,d),g!==null&&(h.push(g),p.push(e.getUniform(t,g))))}else{h=[];for(let y=0;y<a.size;++y)g=e.getUniformLocation(t,`${d}[${y}]`),g!==null&&h.push(g);u=lR(e,a,d,h),n[d]=u,i.push(u),u._setSampler&&o.push(u)}}}return{uniformsByName:n,uniforms:i,samplerUniforms:o}}function bRe(e,t){let n=[],i=[];for(let o in t)if(t.hasOwnProperty(o)){let r=t[o],s=o,a=e._duplicateUniformNames[s];l(a)&&(r.name=a,s=a);let c=xp[s];l(c)?n.push({uniform:r,automaticUniform:c}):i.push(r)}return{automaticUniforms:n,manualUniforms:i}}function gRe(e,t,n){e.useProgram(t);let i=0,o=n.length;for(let r=0;r<o;++r)i=n[r]._setSampler(i);return e.useProgram(null),i}function FN(e){l(e._program)||pee(e)}function pee(e){let t=e._program,n=e._gl,i=hRe(n,e,e._debugShaders),o=n.getProgramParameter(i,n.ACTIVE_ATTRIBUTES),r=pRe(n,i),s=bRe(e,r.uniformsByName);e._program=i,e._numberOfVertexAttributes=o,e._vertexAttributes=fRe(n,i,o),e._uniformsByName=r.uniformsByName,e._uniforms=r.uniforms,e._automaticUniforms=s.automaticUniforms,e._manualUniforms=s.manualUniforms,e.maximumTextureUnitIndex=gRe(n,i,r.samplerUniforms),t&&e._gl.deleteProgram(t),typeof spector<"u"&&(e._program.__SPECTOR_rebuildProgram=function(a,c,d,u){let h=e._vertexShaderText,p=e._fragmentShaderText,g=/ ! = /g;e._vertexShaderText=a.replace(g," != "),e._fragmentShaderText=c.replace(g," != ");try{pee(e),d(e._program)}catch(f){e._vertexShaderText=h,e._fragmentShaderText=p;let x=/(?:Compile|Link) error: ([^]*)/.exec(f.message);u(x?x[1]:f.message)}})}Rp.prototype._bind=function(){FN(this),this._gl.useProgram(this._program)};Rp.prototype._setUniforms=function(e,t,n){let i,o;if(l(e)){let a=this._manualUniforms;for(i=a.length,o=0;o<i;++o){let c=a[o];c.value=e[c.name]()}}let r=this._automaticUniforms;for(i=r.length,o=0;o<i;++o){let a=r[o];a.uniform.value=a.automaticUniform.getValue(t)}let s=this._uniforms;for(i=s.length,o=0;o<i;++o)s[o].set();if(n){let a=this._gl,c=this._program;a.validateProgram(c)}};Rp.prototype.isDestroyed=function(){return!1};Rp.prototype.destroy=function(){this._cachedShader.cache.releaseShaderProgram(this)};Rp.prototype.finalDestroy=function(){return this._gl.deleteProgram(this._program),me(this)};var $t=Rp;function AN(e){this._context=e}var dR,yRe=new $e({primitiveType:we.TRIANGLES}),xRe=new ti({color:new D(0,0,0,0)});function _Re(e,t){return new Wr({context:e,colorTextures:[t],destroyAttachments:!1})}function TRe(e,t){return $t.fromCache({context:e,vertexShaderSource:ux,fragmentShaderSource:t,attributeLocations:{position:0,textureCoordinates:1}})}function SRe(e,t){return(!l(dR)||dR.viewport.width!==e||dR.viewport.height!==t)&&(dR=Ue.fromCache({viewport:new Ke(0,0,e,t)})),dR}AN.prototype.execute=function(e){l(e.preExecute)&&e.preExecute(e);let t=e.outputTexture,n=t.width,i=t.height,o=this._context,r=l(e.vertexArray)?e.vertexArray:o.getViewportQuadVertexArray(),s=l(e.shaderProgram)?e.shaderProgram:TRe(o,e.fragmentShaderSource),a=_Re(o,t),c=SRe(n,i),d=e.uniformMap,u=xRe;u.framebuffer=a,u.renderState=c,u.execute(o);let h=yRe;h.vertexArray=r,h.renderState=c,h.shaderProgram=s,h.uniformMap=d,h.framebuffer=a,h.execute(o),a.destroy(),e.persists||(s.destroy(),l(e.vertexArray)&&r.destroy()),l(e.postExecute)&&e.postExecute(t)};AN.prototype.isDestroyed=function(){return!1};AN.prototype.destroy=function(){return me(this)};var uR=AN;var h3t=_(T(),1);var fWt=_(T(),1);var Zn={BYTE:ie.BYTE,UNSIGNED_BYTE:ie.UNSIGNED_BYTE,SHORT:ie.SHORT,UNSIGNED_SHORT:ie.UNSIGNED_SHORT,INT:ie.INT,UNSIGNED_INT:ie.UNSIGNED_INT,FLOAT:ie.FLOAT,DOUBLE:ie.DOUBLE};Zn.getSizeInBytes=function(e){switch(e){case Zn.BYTE:return Int8Array.BYTES_PER_ELEMENT;case Zn.UNSIGNED_BYTE:return Uint8Array.BYTES_PER_ELEMENT;case Zn.SHORT:return Int16Array.BYTES_PER_ELEMENT;case Zn.UNSIGNED_SHORT:return Uint16Array.BYTES_PER_ELEMENT;case Zn.INT:return Int32Array.BYTES_PER_ELEMENT;case Zn.UNSIGNED_INT:return Uint32Array.BYTES_PER_ELEMENT;case Zn.FLOAT:return Float32Array.BYTES_PER_ELEMENT;case Zn.DOUBLE:return Float64Array.BYTES_PER_ELEMENT}};Zn.fromTypedArray=function(e){if(e instanceof Int8Array)return Zn.BYTE;if(e instanceof Uint8Array)return Zn.UNSIGNED_BYTE;if(e instanceof Int16Array)return Zn.SHORT;if(e instanceof Uint16Array)return Zn.UNSIGNED_SHORT;if(e instanceof Int32Array)return Zn.INT;if(e instanceof Uint32Array)return Zn.UNSIGNED_INT;if(e instanceof Float32Array)return Zn.FLOAT;if(e instanceof Float64Array)return Zn.DOUBLE};Zn.validate=function(e){return l(e)&&(e===Zn.BYTE||e===Zn.UNSIGNED_BYTE||e===Zn.SHORT||e===Zn.UNSIGNED_SHORT||e===Zn.INT||e===Zn.UNSIGNED_INT||e===Zn.FLOAT||e===Zn.DOUBLE)};Zn.createTypedArray=function(e,t){switch(e){case Zn.BYTE:return new Int8Array(t);case Zn.UNSIGNED_BYTE:return new Uint8Array(t);case Zn.SHORT:return new Int16Array(t);case Zn.UNSIGNED_SHORT:return new Uint16Array(t);case Zn.INT:return new Int32Array(t);case Zn.UNSIGNED_INT:return new Uint32Array(t);case Zn.FLOAT:return new Float32Array(t);case Zn.DOUBLE:return new Float64Array(t)}};Zn.createArrayBufferView=function(e,t,n,i){switch(n=n??0,i=i??(t.byteLength-n)/Zn.getSizeInBytes(e),e){case Zn.BYTE:return new Int8Array(t,n,i);case Zn.UNSIGNED_BYTE:return new Uint8Array(t,n,i);case Zn.SHORT:return new Int16Array(t,n,i);case Zn.UNSIGNED_SHORT:return new Uint16Array(t,n,i);case Zn.INT:return new Int32Array(t,n,i);case Zn.UNSIGNED_INT:return new Uint32Array(t,n,i);case Zn.FLOAT:return new Float32Array(t,n,i);case Zn.DOUBLE:return new Float64Array(t,n,i)}};Zn.fromName=function(e){switch(e){case"BYTE":return Zn.BYTE;case"UNSIGNED_BYTE":return Zn.UNSIGNED_BYTE;case"SHORT":return Zn.SHORT;case"UNSIGNED_SHORT":return Zn.UNSIGNED_SHORT;case"INT":return Zn.INT;case"UNSIGNED_INT":return Zn.UNSIGNED_INT;case"FLOAT":return Zn.FLOAT;case"DOUBLE":return Zn.DOUBLE}};var Q=Object.freeze(Zn);var XWt=_(T(),1);var bWt=_(T(),1),CRe={NONE:0,TRIANGLES:1,LINES:2,POLYLINES:3},xu=Object.freeze(CRe);function PO(e){e=e??Y.EMPTY_OBJECT,this.attributes=e.attributes,this.indices=e.indices,this.primitiveType=e.primitiveType??we.TRIANGLES,this.boundingSphere=e.boundingSphere,this.geometryType=e.geometryType??xu.NONE,this.boundingSphereCV=e.boundingSphereCV,this.offsetAttribute=e.offsetAttribute}PO.computeNumberOfVertices=function(e){let t=-1;for(let n in e.attributes)if(e.attributes.hasOwnProperty(n)&&l(e.attributes[n])&&l(e.attributes[n].values)){let i=e.attributes[n];t=i.values.length/i.componentsPerAttribute}return t};var VRe=new he,LRe=new m,bee=new F,RRe=[new he,new he,new he],ZRe=[new U,new U,new U],GRe=[new U,new U,new U],ERe=new m,IRe=new ve,XRe=new F,WRe=new Ii;PO._textureCoordinateRotationPoints=function(e,t,n,i){let o,r=ce.center(i,VRe),s=he.toCartesian(r,n,LRe),a=Pt.eastNorthUpToFixedFrame(s,n,bee),c=F.inverse(a,bee),d=ZRe,u=RRe;u[0].longitude=i.west,u[0].latitude=i.south,u[1].longitude=i.west,u[1].latitude=i.north,u[2].longitude=i.east,u[2].latitude=i.south;let h=ERe;for(o=0;o<3;o++)he.toCartesian(u[o],n,h),h=F.multiplyByPointAsVector(c,h,h),d[o].x=h.x,d[o].y=h.y;let p=ve.fromAxisAngle(m.UNIT_Z,-t,IRe),g=$.fromQuaternion(p,XRe),f=e.length,y=Number.POSITIVE_INFINITY,x=Number.POSITIVE_INFINITY,S=Number.NEGATIVE_INFINITY,C=Number.NEGATIVE_INFINITY;for(o=0;o<f;o++)h=F.multiplyByPointAsVector(c,e[o],h),h=$.multiplyByVector(g,h,h),y=Math.min(y,h.x),x=Math.min(x,h.y),S=Math.max(S,h.x),C=Math.max(C,h.y);let V=Ii.fromRotation(t,WRe),L=GRe;L[0].x=y,L[0].y=x,L[1].x=y,L[1].y=C,L[2].x=S,L[2].y=x;let Z=d[0],E=d[2].x-Z.x,P=d[1].y-Z.y;for(o=0;o<3;o++){let R=L[o];Ii.multiplyByVector(V,R,R),R.x=(R.x-Z.x)/E,R.y=(R.y-Z.y)/P}let W=L[0],v=L[1],A=L[2],b=new Array(6);return U.pack(W,b),U.pack(v,b,2),U.pack(A,b,4),b};var lt=PO;var vWt=_(T(),1);function PRe(e){e=e??Y.EMPTY_OBJECT,this.componentDatatype=e.componentDatatype,this.componentsPerAttribute=e.componentsPerAttribute,this.normalize=e.normalize??!1,this.values=e.values}var Ge=PRe;var oPt=_(T(),1);var ePt=_(T(),1);var AWt=_(T(),1);function jS(e,t,n,i,o){this._format=e,this._datatype=t,this._width=n,this._height=i,this._buffer=o}Object.defineProperties(jS.prototype,{internalFormat:{get:function(){return this._format}},pixelDatatype:{get:function(){return this._datatype}},width:{get:function(){return this._width}},height:{get:function(){return this._height}},bufferView:{get:function(){return this._buffer}},arrayBufferView:{get:function(){return this._buffer}}});jS.clone=function(e){if(l(e))return new jS(e._format,e._datatype,e._width,e._height,e._buffer)};jS.prototype.clone=function(){return jS.clone(this)};var mR=jS;var KWt=_(T(),1),gee=_(dd(),1);function yee(){if(!l(ua._canTransferArrayBuffer)){let e=FO("transferTypedArrayTest");e.postMessage=e.webkitPostMessage??e.postMessage;let t=99,n=new Int8Array([t]);try{e.postMessage({array:n},[n.buffer])}catch{return ua._canTransferArrayBuffer=!1,ua._canTransferArrayBuffer}ua._canTransferArrayBuffer=new Promise(i=>{e.onmessage=function(o){let r=o.data.array,s=l(r)&&r[0]===t;i(s),e.terminate(),ua._canTransferArrayBuffer=s}})}return ua._canTransferArrayBuffer}var wO=new be;function vO(e){let t;try{t=new Blob([e],{type:"application/javascript"})}catch{let o=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder||window.MSBlobBuilder,r=new o;r.append(e),t=r.getBlob("application/javascript")}return(window.URL||window.webkitURL).createObjectURL(t)}function FO(e){let t=new gee.default(e),n=t.scheme().length!==0&&t.fragment().length===0,i=e.replace(/\.js$/,""),o={},r,s;if(w0(e))s=e;else if(!n){let a=nn(`${ua._workerModulePrefix}/${i}.js`);w0(a)&&(s=a)}if(s){let a=`import "${s}";`;return r=vO(a),o.type="module",new Worker(r,o)}if(!n&&typeof CESIUM_WORKERS<"u"){let a=` importScripts("${vO(CESIUM_WORKERS)}"); CesiumWorkers["${i}"](); `;return r=vO(a),new Worker(r,o)}if(r=e,n||(r=nn(`${ua._workerModulePrefix+i}.js`)),!Bt.supportsEsmWebWorkers())throw new ae("This browser is not supported. Please update your browser to continue.");return o.type="module",new Worker(r,o)}async function vRe(e,t){let n={modulePath:void 0,wasmBinaryFile:void 0,wasmBinary:void 0};if(!Bt.supportsWebAssembly()){if(!l(t.fallbackModulePath))throw new ae(`This browser does not support Web Assembly, and no backup module was provided for ${e._workerPath}`);return n.modulePath=nn(t.fallbackModulePath),n}n.wasmBinaryFile=nn(t.wasmBinaryFile);let i=await Ze.fetchArrayBuffer({url:n.wasmBinaryFile});return n.wasmBinary=i,n}function ua(e,t){this._workerPath=e,this._maximumActiveTasks=t??Number.POSITIVE_INFINITY,this._activeTasks=0,this._nextID=0,this._webAssemblyPromise=void 0}var wRe=(e,t,n,i)=>{let o=({data:r})=>{if(r.id===t){if(l(r.error)){let s=r.error;s.name==="RuntimeError"?(s=new ae(r.error.message),s.stack=r.error.stack):s.name==="DeveloperError"?(s=new pe(r.error.message),s.stack=r.error.stack):s.name==="Error"&&(s=new Error(r.error.message),s.stack=r.error.stack),wO.raiseEvent(s),i(s)}else wO.raiseEvent(),n(r.result);e.removeEventListener("message",o)}};return o},FRe=[];async function ARe(e,t,n){let i=await Promise.resolve(yee());l(n)?i||(n.length=0):n=FRe;let o=e._nextID++,r=new Promise((s,a)=>{e._worker.addEventListener("message",wRe(e._worker,o,s,a))});return e._worker.postMessage({id:o,baseUrl:nn.getCesiumBaseUrl().url,parameters:t,canTransferArrayBuffer:i},n),r}async function MRe(e,t,n){++e._activeTasks;try{let i=await ARe(e,t,n);return--e._activeTasks,i}catch(i){throw--e._activeTasks,i}}ua.prototype.scheduleTask=function(e,t){if(l(this._worker)||(this._worker=FO(this._workerPath)),!(this._activeTasks>=this._maximumActiveTasks))return MRe(this,e,t)};ua.prototype.initWebAssemblyModule=async function(e){if(l(this._webAssemblyPromise))return this._webAssemblyPromise;let t=async()=>{let n=this._worker=FO(this._workerPath),i=await vRe(this,e),o=await Promise.resolve(yee()),r,s=i.wasmBinary;l(s)&&o&&(r=[s]);let a=new Promise((c,d)=>{n.onmessage=function({data:u}){l(u)?c(u.result):d(new ae("Could not configure wasm module"))}});return n.postMessage({canTransferArrayBuffer:o,parameters:{webAssemblyConfig:i}},r),a};return this._webAssemblyPromise=t(),this._webAssemblyPromise};ua.prototype.isDestroyed=function(){return!1};ua.prototype.destroy=function(){return l(this._worker)&&this._worker.terminate(),me(this)};ua.taskCompletedEvent=wO;ua._defaultWorkerModulePrefix="Workers/";ua._workerModulePrefix=ua._defaultWorkerModulePrefix;ua._canTransferArrayBuffer=void 0;var xi=ua;function Zp(){}Zp._transcodeTaskProcessor=new xi("transcodeKTX2",Number.POSITIVE_INFINITY);Zp._readyPromise=void 0;function NRe(){let e=Zp._transcodeTaskProcessor.initWebAssemblyModule({wasmBinaryFile:"ThirdParty/basis_transcoder.wasm"}).then(function(t){if(t)return Zp._transcodeTaskProcessor;throw new ae("KTX2 transcoder could not be initialized.")});Zp._readyPromise=e}Zp.transcode=function(e,t){return l(Zp._readyPromise)||NRe(),Zp._readyPromise.then(function(n){let i=e;e instanceof ArrayBuffer&&(i=new Uint8Array(e));let o={supportedTargetFormats:t,ktx2Buffer:i};return n.scheduleTask(o,[i.buffer])}).then(function(n){let i=n.length,o=Object.keys(n[0]);for(let r=0;r<i;r++){let s=n[r];for(let a=0;a<o.length;a++){let c=s[o[a]];s[o[a]]=new mR(c.internalFormat,c.datatype,c.width,c.height,c.levelBuffer)}}if(o.length===1){for(let r=0;r<i;++r)n[r]=n[r][o[0]];i===1&&(n=n[0])}return n}).catch(function(n){throw n})};var hR=Zp;var xee;_ee.setKTX2SupportedFormats=function(e,t,n,i,o,r){xee={s3tc:e,pvrtc:t,astc:n,etc:i,etc1:o,bc7:r}};function _ee(e){let t;return e instanceof ArrayBuffer||ArrayBuffer.isView(e)?t=Promise.resolve(e):t=Ze.createIfNeeded(e).fetchArrayBuffer(),t.then(function(n){return hR.transcode(n,xee)})}var Zl=_ee;var Swt=_(T(),1);var UPt=_(T(),1);var xPt=_(T(),1);var sPt=_(T(),1);function kRe(e,t){this.start=e??0,this.stop=t??0}var Xa=kRe;function fn(e,t){this.center=m.clone(e??m.ZERO),this.radius=t??0}var NO=new m,kO=new m,UO=new m,DO=new m,BO=new m,OO=new m,YO=new m,ma=new m,zO=new m,HO=new m,KO=new m,JO=new m,URe=4/3*X.PI;fn.fromPoints=function(e,t){if(l(t)||(t=new fn),!l(e)||e.length===0)return t.center=m.clone(m.ZERO,t.center),t.radius=0,t;let n=m.clone(e[0],YO),i=m.clone(n,NO),o=m.clone(n,kO),r=m.clone(n,UO),s=m.clone(n,DO),a=m.clone(n,BO),c=m.clone(n,OO),d=e.length,u;for(u=1;u<d;u++){m.clone(e[u],n);let W=n.x,v=n.y,A=n.z;W<i.x&&m.clone(n,i),W>s.x&&m.clone(n,s),v<o.y&&m.clone(n,o),v>a.y&&m.clone(n,a),A<r.z&&m.clone(n,r),A>c.z&&m.clone(n,c)}let h=m.magnitudeSquared(m.subtract(s,i,ma)),p=m.magnitudeSquared(m.subtract(a,o,ma)),g=m.magnitudeSquared(m.subtract(c,r,ma)),f=i,y=s,x=h;p>x&&(x=p,f=o,y=a),g>x&&(x=g,f=r,y=c);let S=zO;S.x=(f.x+y.x)*.5,S.y=(f.y+y.y)*.5,S.z=(f.z+y.z)*.5;let C=m.magnitudeSquared(m.subtract(y,S,ma)),V=Math.sqrt(C),L=HO;L.x=i.x,L.y=o.y,L.z=r.z;let Z=KO;Z.x=s.x,Z.y=a.y,Z.z=c.z;let E=m.midpoint(L,Z,JO),P=0;for(u=0;u<d;u++){m.clone(e[u],n);let W=m.magnitude(m.subtract(n,E,ma));W>P&&(P=W);let v=m.magnitudeSquared(m.subtract(n,S,ma));if(v>C){let A=Math.sqrt(v);V=(V+A)*.5,C=V*V;let b=A-V;S.x=(V*S.x+b*n.x)/A,S.y=(V*S.y+b*n.y)/A,S.z=(V*S.z+b*n.z)/A}}return V<P?(m.clone(S,t.center),t.radius=V):(m.clone(E,t.center),t.radius=P),t};var Tee=new Ei,DRe=new m,BRe=new m,AO=new he,MO=new he;fn.fromRectangle2D=function(e,t,n){return fn.fromRectangleWithHeights2D(e,t,0,0,n)};fn.fromRectangleWithHeights2D=function(e,t,n,i,o){if(l(o)||(o=new fn),!l(e))return o.center=m.clone(m.ZERO,o.center),o.radius=0,o;Tee._ellipsoid=ne.default,t=t??Tee,ce.southwest(e,AO),AO.height=n,ce.northeast(e,MO),MO.height=i;let r=t.project(AO,DRe),s=t.project(MO,BRe),a=s.x-r.x,c=s.y-r.y,d=s.z-r.z;o.radius=Math.sqrt(a*a+c*c+d*d)*.5;let u=o.center;return u.x=r.x+a*.5,u.y=r.y+c*.5,u.z=r.z+d*.5,o};var ORe=[];fn.fromRectangle3D=function(e,t,n,i){if(t=t??ne.default,n=n??0,l(i)||(i=new fn),!l(e))return i.center=m.clone(m.ZERO,i.center),i.radius=0,i;let o=ce.subsample(e,t,n,ORe);return fn.fromPoints(o,i)};fn.fromVertices=function(e,t,n,i){if(l(i)||(i=new fn),!l(e)||e.length===0)return i.center=m.clone(m.ZERO,i.center),i.radius=0,i;t=t??m.ZERO,n=n??3;let o=YO;o.x=e[0]+t.x,o.y=e[1]+t.y,o.z=e[2]+t.z;let r=m.clone(o,NO),s=m.clone(o,kO),a=m.clone(o,UO),c=m.clone(o,DO),d=m.clone(o,BO),u=m.clone(o,OO),h=e.length,p;for(p=0;p<h;p+=n){let A=e[p]+t.x,b=e[p+1]+t.y,R=e[p+2]+t.z;o.x=A,o.y=b,o.z=R,A<r.x&&m.clone(o,r),A>c.x&&m.clone(o,c),b<s.y&&m.clone(o,s),b>d.y&&m.clone(o,d),R<a.z&&m.clone(o,a),R>u.z&&m.clone(o,u)}let g=m.magnitudeSquared(m.subtract(c,r,ma)),f=m.magnitudeSquared(m.subtract(d,s,ma)),y=m.magnitudeSquared(m.subtract(u,a,ma)),x=r,S=c,C=g;f>C&&(C=f,x=s,S=d),y>C&&(C=y,x=a,S=u);let V=zO;V.x=(x.x+S.x)*.5,V.y=(x.y+S.y)*.5,V.z=(x.z+S.z)*.5;let L=m.magnitudeSquared(m.subtract(S,V,ma)),Z=Math.sqrt(L),E=HO;E.x=r.x,E.y=s.y,E.z=a.z;let P=KO;P.x=c.x,P.y=d.y,P.z=u.z;let W=m.midpoint(E,P,JO),v=0;for(p=0;p<h;p+=n){o.x=e[p]+t.x,o.y=e[p+1]+t.y,o.z=e[p+2]+t.z;let A=m.magnitude(m.subtract(o,W,ma));A>v&&(v=A);let b=m.magnitudeSquared(m.subtract(o,V,ma));if(b>L){let R=Math.sqrt(b);Z=(Z+R)*.5,L=Z*Z;let G=R-Z;V.x=(Z*V.x+G*o.x)/R,V.y=(Z*V.y+G*o.y)/R,V.z=(Z*V.z+G*o.z)/R}}return Z<v?(m.clone(V,i.center),i.radius=Z):(m.clone(W,i.center),i.radius=v),i};fn.fromEncodedCartesianVertices=function(e,t,n){if(l(n)||(n=new fn),!l(e)||!l(t)||e.length!==t.length||e.length===0)return n.center=m.clone(m.ZERO,n.center),n.radius=0,n;let i=YO;i.x=e[0]+t[0],i.y=e[1]+t[1],i.z=e[2]+t[2];let o=m.clone(i,NO),r=m.clone(i,kO),s=m.clone(i,UO),a=m.clone(i,DO),c=m.clone(i,BO),d=m.clone(i,OO),u=e.length,h;for(h=0;h<u;h+=3){let v=e[h]+t[h],A=e[h+1]+t[h+1],b=e[h+2]+t[h+2];i.x=v,i.y=A,i.z=b,v<o.x&&m.clone(i,o),v>a.x&&m.clone(i,a),A<r.y&&m.clone(i,r),A>c.y&&m.clone(i,c),b<s.z&&m.clone(i,s),b>d.z&&m.clone(i,d)}let p=m.magnitudeSquared(m.subtract(a,o,ma)),g=m.magnitudeSquared(m.subtract(c,r,ma)),f=m.magnitudeSquared(m.subtract(d,s,ma)),y=o,x=a,S=p;g>S&&(S=g,y=r,x=c),f>S&&(S=f,y=s,x=d);let C=zO;C.x=(y.x+x.x)*.5,C.y=(y.y+x.y)*.5,C.z=(y.z+x.z)*.5;let V=m.magnitudeSquared(m.subtract(x,C,ma)),L=Math.sqrt(V),Z=HO;Z.x=o.x,Z.y=r.y,Z.z=s.z;let E=KO;E.x=a.x,E.y=c.y,E.z=d.z;let P=m.midpoint(Z,E,JO),W=0;for(h=0;h<u;h+=3){i.x=e[h]+t[h],i.y=e[h+1]+t[h+1],i.z=e[h+2]+t[h+2];let v=m.magnitude(m.subtract(i,P,ma));v>W&&(W=v);let A=m.magnitudeSquared(m.subtract(i,C,ma));if(A>V){let b=Math.sqrt(A);L=(L+b)*.5,V=L*L;let R=b-L;C.x=(L*C.x+R*i.x)/b,C.y=(L*C.y+R*i.y)/b,C.z=(L*C.z+R*i.z)/b}}return L<W?(m.clone(C,n.center),n.radius=L):(m.clone(P,n.center),n.radius=W),n};fn.fromCornerPoints=function(e,t,n){l(n)||(n=new fn);let i=m.midpoint(e,t,n.center);return n.radius=m.distance(i,t),n};fn.fromEllipsoid=function(e,t){return l(t)||(t=new fn),m.clone(m.ZERO,t.center),t.radius=e.maximumRadius,t};var YRe=new m;fn.fromBoundingSpheres=function(e,t){if(l(t)||(t=new fn),!l(e)||e.length===0)return t.center=m.clone(m.ZERO,t.center),t.radius=0,t;let n=e.length;if(n===1)return fn.clone(e[0],t);if(n===2)return fn.union(e[0],e[1],t);let i=[],o;for(o=0;o<n;o++)i.push(e[o].center);t=fn.fromPoints(i,t);let r=t.center,s=t.radius;for(o=0;o<n;o++){let a=e[o];s=Math.max(s,m.distance(r,a.center,YRe)+a.radius)}return t.radius=s,t};var zRe=new m,HRe=new m,KRe=new m;fn.fromOrientedBoundingBox=function(e,t){l(t)||(t=new fn);let n=e.halfAxes,i=$.getColumn(n,0,zRe),o=$.getColumn(n,1,HRe),r=$.getColumn(n,2,KRe);return m.add(i,o,i),m.add(i,r,i),t.center=m.clone(e.center,t.center),t.radius=m.magnitude(i),t};var JRe=new m,QRe=new m;fn.fromTransformation=function(e,t){l(t)||(t=new fn);let n=F.getTranslation(e,JRe),i=F.getScale(e,QRe),o=.5*m.magnitude(i);return t.center=m.clone(n,t.center),t.radius=o,t};fn.clone=function(e,t){if(l(e))return l(t)?(t.center=m.clone(e.center,t.center),t.radius=e.radius,t):new fn(e.center,e.radius)};fn.packedLength=4;fn.pack=function(e,t,n){n=n??0;let i=e.center;return t[n++]=i.x,t[n++]=i.y,t[n++]=i.z,t[n]=e.radius,t};fn.unpack=function(e,t,n){t=t??0,l(n)||(n=new fn);let i=n.center;return i.x=e[t++],i.y=e[t++],i.z=e[t++],n.radius=e[t],n};var jRe=new m,qRe=new m;fn.union=function(e,t,n){l(n)||(n=new fn);let i=e.center,o=e.radius,r=t.center,s=t.radius,a=m.subtract(r,i,jRe),c=m.magnitude(a);if(o>=c+s)return e.clone(n),n;if(s>=c+o)return t.clone(n),n;let d=(o+c+s)*.5,u=m.multiplyByScalar(a,(-o+d)/c,qRe);return m.add(u,i,u),m.clone(u,n.center),n.radius=d,n};var $Re=new m;fn.expand=function(e,t,n){n=fn.clone(e,n);let i=m.magnitude(m.subtract(t,n.center,$Re));return i>n.radius&&(n.radius=i),n};fn.intersectPlane=function(e,t){let n=e.center,i=e.radius,o=t.normal,r=m.dot(o,n)+t.distance;return r<-i?zt.OUTSIDE:r<i?zt.INTERSECTING:zt.INSIDE};fn.transform=function(e,t,n){return l(n)||(n=new fn),n.center=F.multiplyByPoint(t,e.center,n.center),n.radius=F.getMaximumScale(t)*e.radius,n};var eZe=new m;fn.distanceSquaredTo=function(e,t){let n=m.subtract(e.center,t,eZe),i=m.magnitude(n)-e.radius;return i<=0?0:i*i};fn.transformWithoutScale=function(e,t,n){return l(n)||(n=new fn),n.center=F.multiplyByPoint(t,e.center,n.center),n.radius=e.radius,n};var tZe=new m;fn.computePlaneDistances=function(e,t,n,i){l(i)||(i=new Xa);let o=m.subtract(e.center,t,tZe),r=m.dot(n,o);return i.start=r-e.radius,i.stop=r+e.radius,i};var See=new m,nZe=new m,iZe=new m,oZe=new m,rZe=new m,sZe=new he,Vee=new Array(8);for(let e=0;e<8;++e)Vee[e]=new m;var Cee=new Ei;fn.projectTo2D=function(e,t,n){Cee._ellipsoid=ne.default,t=t??Cee;let i=t.ellipsoid,o=e.center,r=e.radius,s;m.equals(o,m.ZERO)?s=m.clone(m.UNIT_X,See):s=i.geodeticSurfaceNormal(o,See);let a=m.cross(m.UNIT_Z,s,nZe);m.normalize(a,a);let c=m.cross(s,a,iZe);m.normalize(c,c),m.multiplyByScalar(s,r,s),m.multiplyByScalar(c,r,c),m.multiplyByScalar(a,r,a);let d=m.negate(c,rZe),u=m.negate(a,oZe),h=Vee,p=h[0];m.add(s,c,p),m.add(p,a,p),p=h[1],m.add(s,c,p),m.add(p,u,p),p=h[2],m.add(s,d,p),m.add(p,u,p),p=h[3],m.add(s,d,p),m.add(p,a,p),m.negate(s,s),p=h[4],m.add(s,c,p),m.add(p,a,p),p=h[5],m.add(s,c,p),m.add(p,u,p),p=h[6],m.add(s,d,p),m.add(p,u,p),p=h[7],m.add(s,d,p),m.add(p,a,p);let g=h.length;for(let S=0;S<g;++S){let C=h[S];m.add(o,C,C);let V=i.cartesianToCartographic(C,sZe);t.project(V,C)}n=fn.fromPoints(h,n),o=n.center;let f=o.x,y=o.y,x=o.z;return o.x=x,o.y=f,o.z=y,n};fn.isOccluded=function(e,t){return!t.isBoundingSphereVisible(e)};fn.equals=function(e,t){return e===t||l(e)&&l(t)&&m.equals(e.center,t.center)&&e.radius===t.radius};fn.prototype.intersectPlane=function(e){return fn.intersectPlane(this,e)};fn.prototype.distanceSquaredTo=function(e){return fn.distanceSquaredTo(this,e)};fn.prototype.computePlaneDistances=function(e,t,n){return fn.computePlaneDistances(this,e,t,n)};fn.prototype.isOccluded=function(e){return fn.isOccluded(this,e)};fn.prototype.equals=function(e){return fn.equals(this,e)};fn.prototype.clone=function(e){return fn.clone(this,e)};fn.prototype.volume=function(){let e=this.radius;return URe*e*e*e};var le=fn;var SPt=_(T(),1);function aZe(e){e=e??Y.EMPTY_OBJECT,this.position=e.position,this.normal=e.normal,this.st=e.st,this.bitangent=e.bitangent,this.tangent=e.tangent,this.color=e.color}var mn=aZe;var VPt=_(T(),1),cZe={NONE:0,TOP:1,ALL:2},rn=Object.freeze(cZe);var GPt=_(T(),1);function ms(e){e=e??Y.EMPTY_OBJECT,this.position=e.position??!1,this.normal=e.normal??!1,this.st=e.st??!1,this.bitangent=e.bitangent??!1,this.tangent=e.tangent??!1,this.color=e.color??!1}ms.POSITION_ONLY=Object.freeze(new ms({position:!0}));ms.POSITION_AND_NORMAL=Object.freeze(new ms({position:!0,normal:!0}));ms.POSITION_NORMAL_AND_ST=Object.freeze(new ms({position:!0,normal:!0,st:!0}));ms.POSITION_AND_ST=Object.freeze(new ms({position:!0,st:!0}));ms.POSITION_AND_COLOR=Object.freeze(new ms({position:!0,color:!0}));ms.ALL=Object.freeze(new ms({position:!0,normal:!0,st:!0,tangent:!0,bitangent:!0}));ms.DEFAULT=ms.POSITION_NORMAL_AND_ST;ms.packedLength=6;ms.pack=function(e,t,n){return n=n??0,t[n++]=e.position?1:0,t[n++]=e.normal?1:0,t[n++]=e.st?1:0,t[n++]=e.tangent?1:0,t[n++]=e.bitangent?1:0,t[n]=e.color?1:0,t};ms.unpack=function(e,t,n){return t=t??0,l(n)||(n=new ms),n.position=e[t++]===1,n.normal=e[t++]===1,n.st=e[t++]===1,n.tangent=e[t++]===1,n.bitangent=e[t++]===1,n.color=e[t]===1,n};ms.clone=function(e,t){if(l(e))return l(t)||(t=new ms),t.position=e.position,t.normal=e.normal,t.st=e.st,t.tangent=e.tangent,t.bitangent=e.bitangent,t.color=e.color,t};var Xe=ms;var lZe=new m;function md(e){e=e??Y.EMPTY_OBJECT;let t=e.minimum,n=e.maximum,i=e.vertexFormat??Xe.DEFAULT;this._minimum=m.clone(t),this._maximum=m.clone(n),this._vertexFormat=i,this._offsetAttribute=e.offsetAttribute,this._workerName="createBoxGeometry"}md.fromDimensions=function(e){e=e??Y.EMPTY_OBJECT;let t=e.dimensions,n=m.multiplyByScalar(t,.5,new m);return new md({minimum:m.negate(n,new m),maximum:n,vertexFormat:e.vertexFormat,offsetAttribute:e.offsetAttribute})};md.fromAxisAlignedBoundingBox=function(e){return new md({minimum:e.minimum,maximum:e.maximum})};md.packedLength=2*m.packedLength+Xe.packedLength+1;md.pack=function(e,t,n){return n=n??0,m.pack(e._minimum,t,n),m.pack(e._maximum,t,n+m.packedLength),Xe.pack(e._vertexFormat,t,n+2*m.packedLength),t[n+2*m.packedLength+Xe.packedLength]=e._offsetAttribute??-1,t};var Ree=new m,Zee=new m,Gee=new Xe,Lee={minimum:Ree,maximum:Zee,vertexFormat:Gee,offsetAttribute:void 0};md.unpack=function(e,t,n){t=t??0;let i=m.unpack(e,t,Ree),o=m.unpack(e,t+m.packedLength,Zee),r=Xe.unpack(e,t+2*m.packedLength,Gee),s=e[t+2*m.packedLength+Xe.packedLength];return l(n)?(n._minimum=m.clone(i,n._minimum),n._maximum=m.clone(o,n._maximum),n._vertexFormat=Xe.clone(r,n._vertexFormat),n._offsetAttribute=s===-1?void 0:s,n):(Lee.offsetAttribute=s===-1?void 0:s,new md(Lee))};md.createGeometry=function(e){let t=e._minimum,n=e._maximum,i=e._vertexFormat;if(m.equals(t,n))return;let o=new mn,r,s;if(i.position&&(i.st||i.normal||i.tangent||i.bitangent)){if(i.position&&(s=new Float64Array(6*4*3),s[0]=t.x,s[1]=t.y,s[2]=n.z,s[3]=n.x,s[4]=t.y,s[5]=n.z,s[6]=n.x,s[7]=n.y,s[8]=n.z,s[9]=t.x,s[10]=n.y,s[11]=n.z,s[12]=t.x,s[13]=t.y,s[14]=t.z,s[15]=n.x,s[16]=t.y,s[17]=t.z,s[18]=n.x,s[19]=n.y,s[20]=t.z,s[21]=t.x,s[22]=n.y,s[23]=t.z,s[24]=n.x,s[25]=t.y,s[26]=t.z,s[27]=n.x,s[28]=n.y,s[29]=t.z,s[30]=n.x,s[31]=n.y,s[32]=n.z,s[33]=n.x,s[34]=t.y,s[35]=n.z,s[36]=t.x,s[37]=t.y,s[38]=t.z,s[39]=t.x,s[40]=n.y,s[41]=t.z,s[42]=t.x,s[43]=n.y,s[44]=n.z,s[45]=t.x,s[46]=t.y,s[47]=n.z,s[48]=t.x,s[49]=n.y,s[50]=t.z,s[51]=n.x,s[52]=n.y,s[53]=t.z,s[54]=n.x,s[55]=n.y,s[56]=n.z,s[57]=t.x,s[58]=n.y,s[59]=n.z,s[60]=t.x,s[61]=t.y,s[62]=t.z,s[63]=n.x,s[64]=t.y,s[65]=t.z,s[66]=n.x,s[67]=t.y,s[68]=n.z,s[69]=t.x,s[70]=t.y,s[71]=n.z,o.position=new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:s})),i.normal){let d=new Float32Array(72);d[0]=0,d[1]=0,d[2]=1,d[3]=0,d[4]=0,d[5]=1,d[6]=0,d[7]=0,d[8]=1,d[9]=0,d[10]=0,d[11]=1,d[12]=0,d[13]=0,d[14]=-1,d[15]=0,d[16]=0,d[17]=-1,d[18]=0,d[19]=0,d[20]=-1,d[21]=0,d[22]=0,d[23]=-1,d[24]=1,d[25]=0,d[26]=0,d[27]=1,d[28]=0,d[29]=0,d[30]=1,d[31]=0,d[32]=0,d[33]=1,d[34]=0,d[35]=0,d[36]=-1,d[37]=0,d[38]=0,d[39]=-1,d[40]=0,d[41]=0,d[42]=-1,d[43]=0,d[44]=0,d[45]=-1,d[46]=0,d[47]=0,d[48]=0,d[49]=1,d[50]=0,d[51]=0,d[52]=1,d[53]=0,d[54]=0,d[55]=1,d[56]=0,d[57]=0,d[58]=1,d[59]=0,d[60]=0,d[61]=-1,d[62]=0,d[63]=0,d[64]=-1,d[65]=0,d[66]=0,d[67]=-1,d[68]=0,d[69]=0,d[70]=-1,d[71]=0,o.normal=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:d})}if(i.st){let d=new Float32Array(48);d[0]=0,d[1]=0,d[2]=1,d[3]=0,d[4]=1,d[5]=1,d[6]=0,d[7]=1,d[8]=1,d[9]=0,d[10]=0,d[11]=0,d[12]=0,d[13]=1,d[14]=1,d[15]=1,d[16]=0,d[17]=0,d[18]=1,d[19]=0,d[20]=1,d[21]=1,d[22]=0,d[23]=1,d[24]=1,d[25]=0,d[26]=0,d[27]=0,d[28]=0,d[29]=1,d[30]=1,d[31]=1,d[32]=1,d[33]=0,d[34]=0,d[35]=0,d[36]=0,d[37]=1,d[38]=1,d[39]=1,d[40]=0,d[41]=0,d[42]=1,d[43]=0,d[44]=1,d[45]=1,d[46]=0,d[47]=1,o.st=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:d})}if(i.tangent){let d=new Float32Array(72);d[0]=1,d[1]=0,d[2]=0,d[3]=1,d[4]=0,d[5]=0,d[6]=1,d[7]=0,d[8]=0,d[9]=1,d[10]=0,d[11]=0,d[12]=-1,d[13]=0,d[14]=0,d[15]=-1,d[16]=0,d[17]=0,d[18]=-1,d[19]=0,d[20]=0,d[21]=-1,d[22]=0,d[23]=0,d[24]=0,d[25]=1,d[26]=0,d[27]=0,d[28]=1,d[29]=0,d[30]=0,d[31]=1,d[32]=0,d[33]=0,d[34]=1,d[35]=0,d[36]=0,d[37]=-1,d[38]=0,d[39]=0,d[40]=-1,d[41]=0,d[42]=0,d[43]=-1,d[44]=0,d[45]=0,d[46]=-1,d[47]=0,d[48]=-1,d[49]=0,d[50]=0,d[51]=-1,d[52]=0,d[53]=0,d[54]=-1,d[55]=0,d[56]=0,d[57]=-1,d[58]=0,d[59]=0,d[60]=1,d[61]=0,d[62]=0,d[63]=1,d[64]=0,d[65]=0,d[66]=1,d[67]=0,d[68]=0,d[69]=1,d[70]=0,d[71]=0,o.tangent=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:d})}if(i.bitangent){let d=new Float32Array(72);d[0]=0,d[1]=1,d[2]=0,d[3]=0,d[4]=1,d[5]=0,d[6]=0,d[7]=1,d[8]=0,d[9]=0,d[10]=1,d[11]=0,d[12]=0,d[13]=1,d[14]=0,d[15]=0,d[16]=1,d[17]=0,d[18]=0,d[19]=1,d[20]=0,d[21]=0,d[22]=1,d[23]=0,d[24]=0,d[25]=0,d[26]=1,d[27]=0,d[28]=0,d[29]=1,d[30]=0,d[31]=0,d[32]=1,d[33]=0,d[34]=0,d[35]=1,d[36]=0,d[37]=0,d[38]=1,d[39]=0,d[40]=0,d[41]=1,d[42]=0,d[43]=0,d[44]=1,d[45]=0,d[46]=0,d[47]=1,d[48]=0,d[49]=0,d[50]=1,d[51]=0,d[52]=0,d[53]=1,d[54]=0,d[55]=0,d[56]=1,d[57]=0,d[58]=0,d[59]=1,d[60]=0,d[61]=0,d[62]=1,d[63]=0,d[64]=0,d[65]=1,d[66]=0,d[67]=0,d[68]=1,d[69]=0,d[70]=0,d[71]=1,o.bitangent=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:d})}r=new Uint16Array(6*2*3),r[0]=0,r[1]=1,r[2]=2,r[3]=0,r[4]=2,r[5]=3,r[6]=6,r[7]=5,r[8]=4,r[9]=7,r[10]=6,r[11]=4,r[12]=8,r[13]=9,r[14]=10,r[15]=8,r[16]=10,r[17]=11,r[18]=14,r[19]=13,r[20]=12,r[21]=15,r[22]=14,r[23]=12,r[24]=18,r[25]=17,r[26]=16,r[27]=19,r[28]=18,r[29]=16,r[30]=20,r[31]=21,r[32]=22,r[33]=20,r[34]=22,r[35]=23}else s=new Float64Array(8*3),s[0]=t.x,s[1]=t.y,s[2]=t.z,s[3]=n.x,s[4]=t.y,s[5]=t.z,s[6]=n.x,s[7]=n.y,s[8]=t.z,s[9]=t.x,s[10]=n.y,s[11]=t.z,s[12]=t.x,s[13]=t.y,s[14]=n.z,s[15]=n.x,s[16]=t.y,s[17]=n.z,s[18]=n.x,s[19]=n.y,s[20]=n.z,s[21]=t.x,s[22]=n.y,s[23]=n.z,o.position=new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:s}),r=new Uint16Array(6*2*3),r[0]=4,r[1]=5,r[2]=6,r[3]=4,r[4]=6,r[5]=7,r[6]=1,r[7]=0,r[8]=3,r[9]=1,r[10]=3,r[11]=2,r[12]=1,r[13]=6,r[14]=5,r[15]=1,r[16]=2,r[17]=6,r[18]=2,r[19]=3,r[20]=7,r[21]=2,r[22]=7,r[23]=6,r[24]=3,r[25]=0,r[26]=4,r[27]=3,r[28]=4,r[29]=7,r[30]=0,r[31]=1,r[32]=5,r[33]=0,r[34]=5,r[35]=4;let a=m.subtract(n,t,lZe),c=m.magnitude(a)*.5;if(l(e._offsetAttribute)){let d=s.length,u=e._offsetAttribute===rn.NONE?0:1,h=new Uint8Array(d/3).fill(u);o.applyOffset=new Ge({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:h})}return new lt({attributes:o,indices:r,primitiveType:we.TRIANGLES,boundingSphere:new le(m.ZERO,c),offsetAttribute:e._offsetAttribute})};var QO;md.getUnitBox=function(){return l(QO)||(QO=md.createGeometry(md.fromDimensions({dimensions:new m(1,1,1),vertexFormat:Xe.POSITION_ONLY}))),QO};var Wa=md;var _vt=_(T(),1);var i2t=_(T(),1);var JPt=_(T(),1);var to={SCALAR:"SCALAR",VEC2:"VEC2",VEC3:"VEC3",VEC4:"VEC4",MAT2:"MAT2",MAT3:"MAT3",MAT4:"MAT4"};to.getMathType=function(e){switch(e){case to.SCALAR:return Number;case to.VEC2:return U;case to.VEC3:return m;case to.VEC4:return se;case to.MAT2:return Ii;case to.MAT3:return $;case to.MAT4:return F}};to.getNumberOfComponents=function(e){switch(e){case to.SCALAR:return 1;case to.VEC2:return 2;case to.VEC3:return 3;case to.VEC4:case to.MAT2:return 4;case to.MAT3:return 9;case to.MAT4:return 16}};to.getAttributeLocationCount=function(e){switch(e){case to.SCALAR:case to.VEC2:case to.VEC3:case to.VEC4:return 1;case to.MAT2:return 2;case to.MAT3:return 3;case to.MAT4:return 4}};to.getGlslType=function(e){switch(e){case to.SCALAR:return"float";case to.VEC2:return"vec2";case to.VEC3:return"vec3";case to.VEC4:return"vec4";case to.MAT2:return"mat2";case to.MAT3:return"mat3";case to.MAT4:return"mat4"}};var on=Object.freeze(to);var Eee=1/256,Iee=256,xo={};xo.octEncodeInRange=function(e,t,n){if(n.x=e.x/(Math.abs(e.x)+Math.abs(e.y)+Math.abs(e.z)),n.y=e.y/(Math.abs(e.x)+Math.abs(e.y)+Math.abs(e.z)),e.z<0){let i=n.x,o=n.y;n.x=(1-Math.abs(o))*X.signNotZero(i),n.y=(1-Math.abs(i))*X.signNotZero(o)}return n.x=X.toSNorm(n.x,t),n.y=X.toSNorm(n.y,t),n};xo.octEncode=function(e,t){return xo.octEncodeInRange(e,255,t)};var fR=new U,Xee=new Uint8Array(1);function MN(e){return Xee[0]=e,Xee[0]}xo.octEncodeToCartesian4=function(e,t){return xo.octEncodeInRange(e,65535,fR),t.x=MN(fR.x*Eee),t.y=MN(fR.x),t.z=MN(fR.y*Eee),t.w=MN(fR.y),t};xo.octDecodeInRange=function(e,t,n,i){if(i.x=X.fromSNorm(e,n),i.y=X.fromSNorm(t,n),i.z=1-(Math.abs(i.x)+Math.abs(i.y)),i.z<0){let o=i.x;i.x=(1-Math.abs(i.y))*X.signNotZero(o),i.y=(1-Math.abs(o))*X.signNotZero(i.y)}return m.normalize(i,i)};xo.octDecode=function(e,t,n){return xo.octDecodeInRange(e,t,255,n)};xo.octDecodeFromCartesian4=function(e,t){let n=e.x,i=e.y,o=e.z,r=e.w,s=n*Iee+i,a=o*Iee+r;return xo.octDecodeInRange(s,a,65535,t)};xo.octPackFloat=function(e){return 256*e.x+e.y};var qO=new U;xo.octEncodeFloat=function(e){return xo.octEncode(e,qO),xo.octPackFloat(qO)};xo.octDecodeFloat=function(e,t){let n=e/256,i=Math.floor(n),o=(n-i)*256;return xo.octDecode(i,o,t)};xo.octPack=function(e,t,n,i){let o=xo.octEncodeFloat(e),r=xo.octEncodeFloat(t),s=xo.octEncode(n,qO);return i.x=65536*s.x+o,i.y=65536*s.y+r,i};xo.octUnpack=function(e,t,n,i){let o=e.x/65536,r=Math.floor(o),s=(o-r)*65536;o=e.y/65536;let a=Math.floor(o),c=(o-a)*65536;xo.octDecodeFloat(s,t),xo.octDecodeFloat(c,n),xo.octDecode(r,a,i)};xo.compressTextureCoordinates=function(e){let t=e.x*4095|0,n=e.y*4095|0;return 4096*t+n};xo.decompressTextureCoordinates=function(e,t){let n=e/4096,i=Math.floor(n);return t.x=i/4095,t.y=(e-i*4096)/4095,t};function jO(e){return e>>1^-(e&1)}xo.zigZagDeltaDecode=function(e,t,n){let i=e.length,o=0,r=0,s=0;for(let a=0;a<i;++a)o+=jO(e[a]),r+=jO(t[a]),e[a]=o,t[a]=r,l(n)&&(s+=jO(n[a]),n[a]=s)};xo.dequantize=function(e,t,n,i){let o=on.getNumberOfComponents(n),r;switch(t){case Q.BYTE:r=127;break;case Q.UNSIGNED_BYTE:r=255;break;case Q.SHORT:r=32767;break;case Q.UNSIGNED_SHORT:r=65535;break;case Q.INT:r=2147483647;break;case Q.UNSIGNED_INT:r=4294967295;break}let s=new Float32Array(i*o);for(let a=0;a<i;a++)for(let c=0;c<o;c++){let d=a*o+c;s[d]=Math.max(e[d]/r,-1)}return s};xo.decodeRGB565=function(e,t){let n=e.length;l(t)||(t=new Float32Array(n*3));let i=31,o=63,r=1/31,s=1/63;for(let a=0;a<n;a++){let c=e[a],d=c>>11,u=c>>5&o,h=c&i,p=3*a;t[p]=d*r,t[p+1]=u*s,t[p+2]=h*r}return t};var wn=xo;var l2t=_(T(),1);var Wee=new m,Pee=new m,vee=new m;function dZe(e,t,n,i,o){l(o)||(o=new m);let r,s,a,c,d,u,h,p;if(l(t.z)){if(m.equalsEpsilon(e,t,X.EPSILON14))return m.clone(m.UNIT_X,o);if(m.equalsEpsilon(e,n,X.EPSILON14))return m.clone(m.UNIT_Y,o);if(m.equalsEpsilon(e,i,X.EPSILON14))return m.clone(m.UNIT_Z,o);r=m.subtract(n,t,Wee),s=m.subtract(i,t,Pee),a=m.subtract(e,t,vee),c=m.dot(r,r),d=m.dot(r,s),u=m.dot(r,a),h=m.dot(s,s),p=m.dot(s,a)}else{if(U.equalsEpsilon(e,t,X.EPSILON14))return m.clone(m.UNIT_X,o);if(U.equalsEpsilon(e,n,X.EPSILON14))return m.clone(m.UNIT_Y,o);if(U.equalsEpsilon(e,i,X.EPSILON14))return m.clone(m.UNIT_Z,o);r=U.subtract(n,t,Wee),s=U.subtract(i,t,Pee),a=U.subtract(e,t,vee),c=U.dot(r,r),d=U.dot(r,s),u=U.dot(r,a),h=U.dot(s,s),p=U.dot(s,a)}o.y=h*u-d*p,o.z=c*p-d*u;let g=c*h-d*d;if(g!==0)return o.y/=g,o.z/=g,o.x=1-o.y-o.z,o}var hx=dZe;var h2t=_(T(),1);function cf(){this.high=m.clone(m.ZERO),this.low=m.clone(m.ZERO)}cf.encode=function(e,t){l(t)||(t={high:0,low:0});let n;return e>=0?(n=Math.floor(e/65536)*65536,t.high=n,t.low=e-n):(n=Math.floor(-e/65536)*65536,t.high=-n,t.low=e+n),t};var Gp={high:0,low:0};cf.fromCartesian=function(e,t){l(t)||(t=new cf);let n=t.high,i=t.low;return cf.encode(e.x,Gp),n.x=Gp.high,i.x=Gp.low,cf.encode(e.y,Gp),n.y=Gp.high,i.y=Gp.low,cf.encode(e.z,Gp),n.z=Gp.high,i.z=Gp.low,t};var $O=new cf;cf.writeElements=function(e,t,n){cf.fromCartesian(e,$O);let i=$O.high,o=$O.low;t[n]=i.x,t[n+1]=i.y,t[n+2]=i.z,t[n+3]=o.x,t[n+4]=o.y,t[n+5]=o.z};var On=cf;var N2t=_(T(),1);var b2t=_(T(),1);var eY={};eY.computeDiscriminant=function(e,t,n){return t*t-4*e*n};function wee(e,t,n){let i=e+t;return X.sign(e)!==X.sign(t)&&Math.abs(i/Math.max(Math.abs(e),Math.abs(t)))<n?0:i}eY.computeRealRoots=function(e,t,n){let i;if(e===0)return t===0?[]:[-n/t];if(t===0){if(n===0)return[0,0];let c=Math.abs(n),d=Math.abs(e);if(c<d&&c/d<X.EPSILON14)return[0,0];if(c>d&&d/c<X.EPSILON14)return[];if(i=-n/e,i<0)return[];let u=Math.sqrt(i);return[-u,u]}else if(n===0)return i=-t/e,i<0?[i,0]:[0,i];let o=t*t,r=4*e*n,s=wee(o,-r,X.EPSILON14);if(s<0)return[];let a=-.5*wee(t,X.sign(t)*Math.sqrt(s),X.EPSILON14);return t>0?[a/e,n/a]:[n/a,a/e]};var Ac=eY;var V2t=_(T(),1);var x2t=_(T(),1);var nY={};nY.computeDiscriminant=function(e,t,n,i){let o=e*e,r=t*t,s=n*n,a=i*i;return 18*e*t*n*i+r*s-27*o*a-4*(e*s*n+r*t*i)};function tY(e,t,n,i){let o=e,r=t/3,s=n/3,a=i,c=o*s,d=r*a,u=r*r,h=s*s,p=o*s-u,g=o*a-r*s,f=r*a-h,y=4*p*f-g*g,x,S;if(y<0){let z,K,te;u*d>=c*h?(z=o,K=p,te=-2*r*p+o*g):(z=a,K=f,te=-a*g+2*s*f);let j=-(te<0?-1:1)*Math.abs(z)*Math.sqrt(-y);S=-te+j;let ee=S/2,fe=ee<0?-Math.pow(-ee,1/3):Math.pow(ee,1/3),Te=S===j?-fe:-K/fe;return x=K<=0?fe+Te:-te/(fe*fe+Te*Te+K),u*d>=c*h?[(x-r)/o]:[-a/(x+s)]}let C=p,V=-2*r*p+o*g,L=f,Z=-a*g+2*s*f,E=Math.sqrt(y),P=Math.sqrt(3)/2,W=Math.abs(Math.atan2(o*E,-V)/3);x=2*Math.sqrt(-C);let v=Math.cos(W);S=x*v;let A=x*(-v/2-P*Math.sin(W)),b=S+A>2*r?S-r:A-r,R=o,G=b/R;W=Math.abs(Math.atan2(a*E,-Z)/3),x=2*Math.sqrt(-L),v=Math.cos(W),S=x*v,A=x*(-v/2-P*Math.sin(W));let I=-a,w=S+A<2*s?S+s:A+s,M=I/w,B=R*w,k=-b*w-R*I,O=b*I,N=(s*k-r*O)/(-r*k+s*B);return G<=N?G<=M?N<=M?[G,N,M]:[G,M,N]:[M,G,N]:G<=M?[N,G,M]:N<=M?[N,M,G]:[M,N,G]}nY.computeRealRoots=function(e,t,n,i){let o,r;if(e===0)return Ac.computeRealRoots(t,n,i);if(t===0){if(n===0){if(i===0)return[0,0,0];r=-i/e;let s=r<0?-Math.pow(-r,1/3):Math.pow(r,1/3);return[s,s,s]}else if(i===0)return o=Ac.computeRealRoots(e,0,n),o.Length===0?[0]:[o[0],0,o[1]];return tY(e,0,n,i)}else{if(n===0)return i===0?(r=-t/e,r<0?[r,0,0]:[0,0,r]):tY(e,t,0,i);if(i===0)return o=Ac.computeRealRoots(e,t,n),o.length===0?[0]:o[1]<=0?[o[0],o[1],0]:o[0]>=0?[0,o[0],o[1]]:[o[0],0,o[1]]}return tY(e,t,n,i)};var fx=nY;var iY={};iY.computeDiscriminant=function(e,t,n,i,o){let r=e*e,s=r*e,a=t*t,c=a*t,d=n*n,u=d*n,h=i*i,p=h*i,g=o*o,f=g*o;return a*d*h-4*c*p-4*e*u*h+18*e*t*n*p-27*r*h*h+256*s*f+o*(18*c*n*i-4*a*u+16*e*d*d-80*e*t*d*i-6*e*a*h+144*r*n*h)+g*(144*e*a*n-27*a*a-128*r*d-192*r*t*i)};function Im(e,t,n,i){let o=e*e,r=t-3*o/8,s=n-t*e/2+o*e/8,a=i-n*e/4+t*o/16-3*o*o/256,c=fx.computeRealRoots(1,2*r,r*r-4*a,-s*s);if(c.length>0){let d=-e/4,u=c[c.length-1];if(Math.abs(u)<X.EPSILON14){let h=Ac.computeRealRoots(1,r,a);if(h.length===2){let p=h[0],g=h[1],f;if(p>=0&&g>=0){let y=Math.sqrt(p),x=Math.sqrt(g);return[d-x,d-y,d+y,d+x]}else{if(p>=0&&g<0)return f=Math.sqrt(p),[d-f,d+f];if(p<0&&g>=0)return f=Math.sqrt(g),[d-f,d+f]}}return[]}else if(u>0){let h=Math.sqrt(u),p=(r+u-s/h)/2,g=(r+u+s/h)/2,f=Ac.computeRealRoots(1,h,p),y=Ac.computeRealRoots(1,-h,g);return f.length!==0?(f[0]+=d,f[1]+=d,y.length!==0?(y[0]+=d,y[1]+=d,f[1]<=y[0]?[f[0],f[1],y[0],y[1]]:y[1]<=f[0]?[y[0],y[1],f[0],f[1]]:f[0]>=y[0]&&f[1]<=y[1]?[y[0],f[0],f[1],y[1]]:y[0]>=f[0]&&y[1]<=f[1]?[f[0],y[0],y[1],f[1]]:f[0]>y[0]&&f[0]<y[1]?[y[0],f[0],y[1],f[1]]:[f[0],y[0],f[1],y[1]]):f):y.length!==0?(y[0]+=d,y[1]+=d,y):[]}}return[]}function pR(e,t,n,i){let o=n*n,r=t*t,s=e*e,a=-2*t,c=n*e+r-4*i,d=s*i-n*t*e+o,u=fx.computeRealRoots(1,a,c,d);if(u.length>0){let h=u[0],p=t-h,g=p*p,f=e/2,y=p/2,x=g-4*i,S=g+4*Math.abs(i),C=s-4*h,V=s+4*Math.abs(h),L,Z;if(h<0||x*V<C*S){let R=Math.sqrt(C);L=R/2,Z=R===0?0:(e*y-n)/R}else{let R=Math.sqrt(x);L=R===0?0:(e*y-n)/R,Z=R/2}let E,P;f===0&&L===0?(E=0,P=0):X.sign(f)===X.sign(L)?(E=f+L,P=h/E):(P=f-L,E=h/P);let W,v;y===0&&Z===0?(W=0,v=0):X.sign(y)===X.sign(Z)?(W=y+Z,v=i/W):(v=y-Z,W=i/v);let A=Ac.computeRealRoots(1,E,W),b=Ac.computeRealRoots(1,P,v);if(A.length!==0)return b.length!==0?A[1]<=b[0]?[A[0],A[1],b[0],b[1]]:b[1]<=A[0]?[b[0],b[1],A[0],A[1]]:A[0]>=b[0]&&A[1]<=b[1]?[b[0],A[0],A[1],b[1]]:b[0]>=A[0]&&b[1]<=A[1]?[A[0],b[0],b[1],A[1]]:A[0]>b[0]&&A[0]<b[1]?[b[0],A[0],b[1],A[1]]:[A[0],b[0],A[1],b[1]]:A;if(b.length!==0)return b}return[]}iY.computeRealRoots=function(e,t,n,i,o){if(Math.abs(e)<X.EPSILON15)return fx.computeRealRoots(t,n,i,o);let r=t/e,s=n/e,a=i/e,c=o/e,d=r<0?1:0;switch(d+=s<0?d+1:d,d+=a<0?d+1:d,d+=c<0?d+1:d,d){case 0:return Im(r,s,a,c);case 1:return pR(r,s,a,c);case 2:return pR(r,s,a,c);case 3:return Im(r,s,a,c);case 4:return Im(r,s,a,c);case 5:return pR(r,s,a,c);case 6:return Im(r,s,a,c);case 7:return Im(r,s,a,c);case 8:return pR(r,s,a,c);case 9:return Im(r,s,a,c);case 10:return Im(r,s,a,c);case 11:return pR(r,s,a,c);case 12:return Im(r,s,a,c);case 13:return Im(r,s,a,c);case 14:return Im(r,s,a,c);case 15:return Im(r,s,a,c);default:return}};var bR=iY;var G2t=_(T(),1);function NN(e,t){t=m.clone(t??m.ZERO),m.equals(t,m.ZERO)||m.normalize(t,t),this.origin=m.clone(e??m.ZERO),this.direction=t}NN.clone=function(e,t){if(l(e))return l(t)?(t.origin=m.clone(e.origin),t.direction=m.clone(e.direction),t):new NN(e.origin,e.direction)};NN.getPoint=function(e,t,n){return l(n)||(n=new m),n=m.multiplyByScalar(e.direction,t,n),m.add(e.origin,n,n)};var pn=NN;var Mo={};Mo.rayPlane=function(e,t,n){l(n)||(n=new m);let i=e.origin,o=e.direction,r=t.normal,s=m.dot(r,o);if(Math.abs(s)<X.EPSILON15)return;let a=(-t.distance-m.dot(r,i))/s;if(!(a<0))return n=m.multiplyByScalar(o,a,n),m.add(i,n,n)};var uZe=new m,mZe=new m,Bee=new m,Fee=new m,Aee=new m;Mo.rayTriangleParametric=function(e,t,n,i,o){o=o??!1;let r=e.origin,s=e.direction,a=m.subtract(n,t,uZe),c=m.subtract(i,t,mZe),d=m.cross(s,c,Bee),u=m.dot(a,d),h,p,g,f,y;if(o){if(u<X.EPSILON6||(h=m.subtract(r,t,Fee),g=m.dot(h,d),g<0||g>u)||(p=m.cross(h,a,Aee),f=m.dot(s,p),f<0||g+f>u))return;y=m.dot(c,p)/u}else{if(Math.abs(u)<X.EPSILON6)return;let x=1/u;if(h=m.subtract(r,t,Fee),g=m.dot(h,d)*x,g<0||g>1||(p=m.cross(h,a,Aee),f=m.dot(s,p)*x,f<0||g+f>1))return;y=m.dot(c,p)*x}return y};Mo.rayTriangle=function(e,t,n,i,o,r){let s=Mo.rayTriangleParametric(e,t,n,i,o);if(!(!l(s)||s<0))return l(r)||(r=new m),m.multiplyByScalar(e.direction,s,r),m.add(e.origin,r,r)};var hZe=new pn;Mo.lineSegmentTriangle=function(e,t,n,i,o,r,s){let a=hZe;m.clone(e,a.origin),m.subtract(t,e,a.direction),m.normalize(a.direction,a.direction);let c=Mo.rayTriangleParametric(a,n,i,o,r);if(!(!l(c)||c<0||c>m.distance(e,t)))return l(s)||(s=new m),m.multiplyByScalar(a.direction,c,s),m.add(a.origin,s,s)};function fZe(e,t,n,i){let o=t*t-4*e*n;if(o<0)return;if(o>0){let s=1/(2*e),a=Math.sqrt(o),c=(-t+a)*s,d=(-t-a)*s;return c<d?(i.root0=c,i.root1=d):(i.root0=d,i.root1=c),i}let r=-t/(2*e);if(r!==0)return i.root0=i.root1=r,i}var pZe={root0:0,root1:0};function Oee(e,t,n){l(n)||(n=new Xa);let i=e.origin,o=e.direction,r=t.center,s=t.radius*t.radius,a=m.subtract(i,r,Bee),c=m.dot(o,o),d=2*m.dot(o,a),u=m.magnitudeSquared(a)-s,h=fZe(c,d,u,pZe);if(l(h))return n.start=h.root0,n.stop=h.root1,n}Mo.raySphere=function(e,t,n){if(n=Oee(e,t,n),!(!l(n)||n.stop<0))return n.start=Math.max(n.start,0),n};var bZe=new pn;Mo.lineSegmentSphere=function(e,t,n,i){let o=bZe;m.clone(e,o.origin);let r=m.subtract(t,e,o.direction),s=m.magnitude(r);if(m.normalize(r,r),i=Oee(o,n,i),!(!l(i)||i.stop<0||i.start>s))return i.start=Math.max(i.start,0),i.stop=Math.min(i.stop,s),i};var gZe=new m,yZe=new m;Mo.rayEllipsoid=function(e,t){let n=t.oneOverRadii,i=m.multiplyComponents(n,e.origin,gZe),o=m.multiplyComponents(n,e.direction,yZe),r=m.magnitudeSquared(i),s=m.dot(i,o),a,c,d,u,h;if(r>1){if(s>=0)return;let p=s*s;if(a=r-1,c=m.magnitudeSquared(o),d=c*a,p<d)return;if(p>d){u=s*s-d,h=-s+Math.sqrt(u);let f=h/c,y=a/h;return f<y?new Xa(f,y):{start:y,stop:f}}let g=Math.sqrt(a/c);return new Xa(g,g)}else if(r<1)return a=r-1,c=m.magnitudeSquared(o),d=c*a,u=s*s-d,h=-s+Math.sqrt(u),new Xa(0,h/c);if(s<0)return c=m.magnitudeSquared(o),new Xa(0,-s/c)};function px(e,t,n){let i=e+t;return X.sign(e)!==X.sign(t)&&Math.abs(i/Math.max(Math.abs(e),Math.abs(t)))<n?0:i}Mo.quadraticVectorExpression=function(e,t,n,i,o){let r=i*i,s=o*o,a=(e[$.COLUMN1ROW1]-e[$.COLUMN2ROW2])*s,c=o*(i*px(e[$.COLUMN1ROW0],e[$.COLUMN0ROW1],X.EPSILON15)+t.y),d=e[$.COLUMN0ROW0]*r+e[$.COLUMN2ROW2]*s+i*t.x+n,u=s*px(e[$.COLUMN2ROW1],e[$.COLUMN1ROW2],X.EPSILON15),h=o*(i*px(e[$.COLUMN2ROW0],e[$.COLUMN0ROW2])+t.z),p,g=[];if(h===0&&u===0){if(p=Ac.computeRealRoots(a,c,d),p.length===0)return g;let W=p[0],v=Math.sqrt(Math.max(1-W*W,0));if(g.push(new m(i,o*W,o*-v)),g.push(new m(i,o*W,o*v)),p.length===2){let A=p[1],b=Math.sqrt(Math.max(1-A*A,0));g.push(new m(i,o*A,o*-b)),g.push(new m(i,o*A,o*b))}return g}let f=h*h,y=u*u,x=a*a,S=h*u,C=x+y,V=2*(c*a+S),L=2*d*a+c*c-y+f,Z=2*(d*c-S),E=d*d-f;if(C===0&&V===0&&L===0&&Z===0)return g;p=bR.computeRealRoots(C,V,L,Z,E);let P=p.length;if(P===0)return g;for(let W=0;W<P;++W){let v=p[W],A=v*v,b=Math.max(1-A,0),R=Math.sqrt(b),G;X.sign(a)===X.sign(d)?G=px(a*A+d,c*v,X.EPSILON12):X.sign(d)===X.sign(c*v)?G=px(a*A,c*v+d,X.EPSILON12):G=px(a*A+c*v,d,X.EPSILON12);let I=px(u*v,h,X.EPSILON15),w=G*I;w<0?g.push(new m(i,o*v,o*R)):w>0?g.push(new m(i,o*v,o*-R)):R!==0?(g.push(new m(i,o*v,o*-R)),g.push(new m(i,o*v,o*R)),++W):g.push(new m(i,o*v,o*R))}return g};var oY=new m,Mee=new m,Nee=new m,kN=new m,xZe=new m,_Ze=new $,TZe=new $,SZe=new $,CZe=new $,VZe=new $,kee=new $,Uee=new $,Dee=new m,LZe=new m,RZe=new he;Mo.grazingAltitudeLocation=function(e,t){let n=e.origin,i=e.direction;if(!m.equals(n,m.ZERO)){let E=t.geodeticSurfaceNormal(n,oY);if(m.dot(i,E)>=0)return n}let o=l(this.rayEllipsoid(e,t)),r=t.transformPositionToScaledSpace(i,oY),s=m.normalize(r,r),a=m.mostOrthogonalAxis(r,kN),c=m.normalize(m.cross(a,s,Mee),Mee),d=m.normalize(m.cross(s,c,Nee),Nee),u=_Ze;u[0]=s.x,u[1]=s.y,u[2]=s.z,u[3]=c.x,u[4]=c.y,u[5]=c.z,u[6]=d.x,u[7]=d.y,u[8]=d.z;let h=$.transpose(u,TZe),p=$.fromScale(t.radii,SZe),g=$.fromScale(t.oneOverRadii,CZe),f=VZe;f[0]=0,f[1]=-i.z,f[2]=i.y,f[3]=i.z,f[4]=0,f[5]=-i.x,f[6]=-i.y,f[7]=i.x,f[8]=0;let y=$.multiply($.multiply(h,g,kee),f,kee),x=$.multiply($.multiply(y,p,Uee),u,Uee),S=$.multiplyByVector(y,n,xZe),C=Mo.quadraticVectorExpression(x,m.negate(S,oY),0,0,1),V,L,Z=C.length;if(Z>0){let E=m.clone(m.ZERO,LZe),P=Number.NEGATIVE_INFINITY;for(let v=0;v<Z;++v){V=$.multiplyByVector(p,$.multiplyByVector(u,C[v],Dee),Dee);let A=m.normalize(m.subtract(V,n,kN),kN),b=m.dot(A,i);b>P&&(P=b,E=m.clone(V,E))}let W=t.cartesianToCartographic(E,RZe);return P=X.clamp(P,0,1),L=m.magnitude(m.subtract(E,n,kN))*Math.sqrt(1-P*P),L=o?-L:L,W.height=L,t.cartographicToCartesian(W,new m)}};var ZZe=new m;Mo.lineSegmentPlane=function(e,t,n,i){l(i)||(i=new m);let o=m.subtract(t,e,ZZe),r=n.normal,s=m.dot(r,o);if(Math.abs(s)<X.EPSILON6)return;let a=m.dot(r,e),c=-(n.distance+a)/s;if(!(c<0||c>1))return m.multiplyByScalar(o,c,i),m.add(e,i,i),i};Mo.trianglePlaneIntersection=function(e,t,n,i){let o=i.normal,r=i.distance,s=m.dot(o,e)+r<0,a=m.dot(o,t)+r<0,c=m.dot(o,n)+r<0,d=0;d+=s?1:0,d+=a?1:0,d+=c?1:0;let u,h;if((d===1||d===2)&&(u=new m,h=new m),d===1){if(s)return Mo.lineSegmentPlane(e,t,i,u),Mo.lineSegmentPlane(e,n,i,h),{positions:[e,t,n,u,h],indices:[0,3,4,1,2,4,1,4,3]};if(a)return Mo.lineSegmentPlane(t,n,i,u),Mo.lineSegmentPlane(t,e,i,h),{positions:[e,t,n,u,h],indices:[1,3,4,2,0,4,2,4,3]};if(c)return Mo.lineSegmentPlane(n,e,i,u),Mo.lineSegmentPlane(n,t,i,h),{positions:[e,t,n,u,h],indices:[2,3,4,0,1,4,0,4,3]}}else if(d===2)if(s)if(a){if(!c)return Mo.lineSegmentPlane(e,n,i,u),Mo.lineSegmentPlane(t,n,i,h),{positions:[e,t,n,u,h],indices:[0,1,4,0,4,3,2,3,4]}}else return Mo.lineSegmentPlane(n,t,i,u),Mo.lineSegmentPlane(e,t,i,h),{positions:[e,t,n,u,h],indices:[2,0,4,2,4,3,1,3,4]};else return Mo.lineSegmentPlane(t,e,i,u),Mo.lineSegmentPlane(n,e,i,h),{positions:[e,t,n,u,h],indices:[1,2,4,1,4,3,0,3,4]}};var qn=Mo;var Y2t=_(T(),1);function Ns(e,t){this.normal=m.clone(e),this.distance=t}Ns.fromPointNormal=function(e,t,n){let i=-m.dot(t,e);return l(n)?(m.clone(t,n.normal),n.distance=i,n):new Ns(t,i)};var GZe=new m;Ns.fromCartesian4=function(e,t){let n=m.fromCartesian4(e,GZe),i=e.w;return l(t)?(m.clone(n,t.normal),t.distance=i,t):new Ns(n,i)};Ns.getPointDistance=function(e,t){return m.dot(e.normal,t)+e.distance};var EZe=new m;Ns.projectPointOntoPlane=function(e,t,n){l(n)||(n=new m);let i=Ns.getPointDistance(e,t),o=m.multiplyByScalar(e.normal,i,EZe);return m.subtract(t,o,n)};var IZe=new F,XZe=new se,WZe=new m;Ns.transform=function(e,t,n){let i=e.normal,o=e.distance,r=F.inverseTranspose(t,IZe),s=se.fromElements(i.x,i.y,i.z,o,XZe);s=F.multiplyByVector(r,s,s);let a=m.fromCartesian4(s,WZe);return s=se.divideByScalar(s,m.magnitude(a),s),Ns.fromCartesian4(s,n)};Ns.clone=function(e,t){return l(t)?(m.clone(e.normal,t.normal),t.distance=e.distance,t):new Ns(e.normal,e.distance)};Ns.equals=function(e,t){return e.distance===t.distance&&m.equals(e.normal,t.normal)};Ns.ORIGIN_XY_PLANE=Object.freeze(new Ns(m.UNIT_Z,0));Ns.ORIGIN_YZ_PLANE=Object.freeze(new Ns(m.UNIT_X,0));Ns.ORIGIN_ZX_PLANE=Object.freeze(new Ns(m.UNIT_Y,0));var sn=Ns;var J2t=_(T(),1);var rY={};rY.calculateACMR=function(e){e=e??Y.EMPTY_OBJECT;let t=e.indices,n=e.maximumIndex,i=e.cacheSize??24,o=t.length;if(!l(n)){n=0;let a=0,c=t[a];for(;a<o;)c>n&&(n=c),++a,c=t[a]}let r=[];for(let a=0;a<n+1;a++)r[a]=0;let s=i+1;for(let a=0;a<o;++a)s-r[t[a]]>i&&(r[t[a]]=s,++s);return(s-i+1)/(o/3)};rY.tipsify=function(e){e=e??Y.EMPTY_OBJECT;let t=e.indices,n=e.maximumIndex,i=e.cacheSize??24,o;function r(b,R,G,I){for(;R.length>=1;){let w=R[R.length-1];if(R.splice(R.length-1,1),b[w].numLiveTriangles>0)return w}for(;o<I;){if(b[o].numLiveTriangles>0)return++o,o-1;++o}return-1}function s(b,R,G,I,w,M,B){let k=-1,O,N=-1,z=0;for(;z<G.length;){let K=G[z];I[K].numLiveTriangles&&(O=0,w-I[K].timeStamp+2*I[K].numLiveTriangles<=R&&(O=w-I[K].timeStamp),(O>N||N===-1)&&(N=O,k=K)),++z}return k===-1?r(I,M,b,B):k}let a=t.length,c=0,d=0,u=t[d],h=a;if(l(n))c=n+1;else{for(;d<h;)u>c&&(c=u),++d,u=t[d];if(c===-1)return 0;++c}let p=[],g;for(g=0;g<c;g++)p[g]={numLiveTriangles:0,timeStamp:0,vertexTriangles:[]};d=0;let f=0;for(;d<h;)p[t[d]].vertexTriangles.push(f),++p[t[d]].numLiveTriangles,p[t[d+1]].vertexTriangles.push(f),++p[t[d+1]].numLiveTriangles,p[t[d+2]].vertexTriangles.push(f),++p[t[d+2]].numLiveTriangles,++f,d+=3;let y=0,x=i+1;o=1;let S=[],C=[],V,L,Z=0,E=[],P=a/3,W=[];for(g=0;g<P;g++)W[g]=!1;let v,A;for(;y!==-1;){S=[],L=p[y],A=L.vertexTriangles.length;for(let b=0;b<A;++b)if(f=L.vertexTriangles[b],!W[f]){W[f]=!0,d=f+f+f;for(let R=0;R<3;++R)v=t[d],S.push(v),C.push(v),E[Z]=v,++Z,V=p[v],--V.numLiveTriangles,x-V.timeStamp>i&&(V.timeStamp=x,++x),++d}y=s(t,i,S,p,x,C,c)}return E};var gR=rY;var Mc={};function HN(e,t,n,i,o){e[t++]=n,e[t++]=i,e[t++]=i,e[t++]=o,e[t++]=o,e[t]=n}function PZe(e){let t=e.length,n=t/3*6,i=Ae.createTypedArray(t,n),o=0;for(let r=0;r<t;r+=3,o+=6)HN(i,o,e[r],e[r+1],e[r+2]);return i}function vZe(e){let t=e.length;if(t>=3){let n=(t-2)*6,i=Ae.createTypedArray(t,n);HN(i,0,e[0],e[1],e[2]);let o=6;for(let r=3;r<t;++r,o+=6)HN(i,o,e[r-1],e[r],e[r-2]);return i}return new Uint16Array}function wZe(e){if(e.length>0){let t=e.length-1,n=(t-1)*6,i=Ae.createTypedArray(t,n),o=e[0],r=0;for(let s=1;s<t;++s,r+=6)HN(i,r,o,e[s],e[s+1]);return i}return new Uint16Array}Mc.toWireframe=function(e){let t=e.indices;if(l(t)){switch(e.primitiveType){case we.TRIANGLES:e.indices=PZe(t);break;case we.TRIANGLE_STRIP:e.indices=vZe(t);break;case we.TRIANGLE_FAN:e.indices=wZe(t);break}e.primitiveType=we.LINES}return e};Mc.createLineSegmentsForVectors=function(e,t,n){t=t??"normal",n=n??1e4;let i=e.attributes.position.values,o=e.attributes[t].values,r=i.length,s=new Float64Array(2*r),a=0;for(let u=0;u<r;u+=3)s[a++]=i[u],s[a++]=i[u+1],s[a++]=i[u+2],s[a++]=i[u]+o[u]*n,s[a++]=i[u+1]+o[u+1]*n,s[a++]=i[u+2]+o[u+2]*n;let c,d=e.boundingSphere;return l(d)&&(c=new le(d.center,d.radius+n)),new lt({attributes:{position:new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:s})},primitiveType:we.LINES,boundingSphere:c})};Mc.createAttributeLocations=function(e){let t=["position","positionHigh","positionLow","position3DHigh","position3DLow","position2DHigh","position2DLow","pickColor","normal","st","tangent","bitangent","extrudeDirection","compressedAttributes"],n=e.attributes,i={},o=0,r,s=t.length;for(r=0;r<s;++r){let a=t[r];l(n[a])&&(i[a]=o++)}for(let a in n)n.hasOwnProperty(a)&&!l(i[a])&&(i[a]=o++);return i};Mc.reorderForPreVertexCache=function(e){let t=lt.computeNumberOfVertices(e),n=e.indices;if(l(n)){let i=new Int32Array(t);for(let p=0;p<t;p++)i[p]=-1;let o=n,r=o.length,s=Ae.createTypedArray(t,r),a=0,c=0,d=0,u;for(;a<r;)u=i[o[a]],u!==-1?s[c]=u:(u=o[a],i[u]=d,s[c]=d,++d),++a,++c;e.indices=s;let h=e.attributes;for(let p in h)if(h.hasOwnProperty(p)&&l(h[p])&&l(h[p].values)){let g=h[p],f=g.values,y=0,x=g.componentsPerAttribute,S=Q.createTypedArray(g.componentDatatype,d*x);for(;y<t;){let C=i[y];if(C!==-1)for(let V=0;V<x;V++)S[x*C+V]=f[x*y+V];++y}g.values=S}}return e};Mc.reorderForPostVertexCache=function(e,t){let n=e.indices;if(e.primitiveType===we.TRIANGLES&&l(n)){let i=n.length,o=0;for(let r=0;r<i;r++)n[r]>o&&(o=n[r]);e.indices=gR.tipsify({indices:n,maximumIndex:o,cacheSize:t})}return e};function Yee(e){let t={};for(let n in e)if(e.hasOwnProperty(n)&&l(e[n])&&l(e[n].values)){let i=e[n];t[n]=new Ge({componentDatatype:i.componentDatatype,componentsPerAttribute:i.componentsPerAttribute,normalize:i.normalize,values:[]})}return t}function FZe(e,t,n){for(let i in t)if(t.hasOwnProperty(i)&&l(t[i])&&l(t[i].values)){let o=t[i];for(let r=0;r<o.componentsPerAttribute;++r)e[i].values.push(o.values[n*o.componentsPerAttribute+r])}}Mc.fitToUnsignedShortIndices=function(e){let t=[],n=lt.computeNumberOfVertices(e);if(l(e.indices)&&n>=X.SIXTY_FOUR_KILOBYTES){let i=[],o=[],r=0,s=Yee(e.attributes),a=e.indices,c=a.length,d;e.primitiveType===we.TRIANGLES?d=3:e.primitiveType===we.LINES?d=2:e.primitiveType===we.POINTS&&(d=1);for(let u=0;u<c;u+=d){for(let h=0;h<d;++h){let p=a[u+h],g=i[p];l(g)||(g=r++,i[p]=g,FZe(s,e.attributes,p)),o.push(g)}r+d>=X.SIXTY_FOUR_KILOBYTES&&(t.push(new lt({attributes:s,indices:o,primitiveType:e.primitiveType,boundingSphere:e.boundingSphere,boundingSphereCV:e.boundingSphereCV})),i=[],o=[],r=0,s=Yee(e.attributes))}o.length!==0&&t.push(new lt({attributes:s,indices:o,primitiveType:e.primitiveType,boundingSphere:e.boundingSphere,boundingSphereCV:e.boundingSphereCV}))}else t.push(e);return t};var zee=new m,AZe=new he;Mc.projectTo2D=function(e,t,n,i,o){let r=e.attributes[t];o=l(o)?o:new Ei;let s=o.ellipsoid,a=r.values,c=new Float64Array(a.length),d=0;for(let u=0;u<a.length;u+=3){let h=m.fromArray(a,u,zee),p=s.cartesianToCartographic(h,AZe),g=o.project(p,zee);c[d++]=g.x,c[d++]=g.y,c[d++]=g.z}return e.attributes[n]=r,e.attributes[i]=new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:c}),delete e.attributes[t],e};var sY={high:0,low:0};Mc.encodeAttribute=function(e,t,n,i){let o=e.attributes[t],r=o.values,s=r.length,a=new Float32Array(s),c=new Float32Array(s);for(let u=0;u<s;++u)On.encode(r[u],sY),a[u]=sY.high,c[u]=sY.low;let d=o.componentsPerAttribute;return e.attributes[n]=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:d,values:a}),e.attributes[i]=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:d,values:c}),delete e.attributes[t],e};var Wm=new m;function aY(e,t){if(l(t)){let n=t.values,i=n.length;for(let o=0;o<i;o+=3)m.unpack(n,o,Wm),F.multiplyByPoint(e,Wm,Wm),m.pack(Wm,n,o)}}function cY(e,t){if(l(t)){let n=t.values,i=n.length;for(let o=0;o<i;o+=3)m.unpack(n,o,Wm),$.multiplyByVector(e,Wm,Wm),Wm=m.normalize(Wm,Wm),m.pack(Wm,n,o)}}var UN=new F,DN=new $;Mc.transformToWorldCoordinates=function(e){let t=e.modelMatrix;if(F.equals(t,F.IDENTITY))return e;let n=e.geometry.attributes;aY(t,n.position),aY(t,n.prevPosition),aY(t,n.nextPosition),(l(n.normal)||l(n.tangent)||l(n.bitangent))&&(F.inverse(t,UN),F.transpose(UN,UN),F.getMatrix3(UN,DN),cY(DN,n.normal),cY(DN,n.tangent),cY(DN,n.bitangent));let i=e.geometry.boundingSphere;return l(i)&&(e.geometry.boundingSphere=le.transform(i,t,i)),e.modelMatrix=F.clone(F.IDENTITY),e};function MZe(e,t){let n=e.length,i={},o=e[0][t].attributes,r;for(r in o)if(o.hasOwnProperty(r)&&l(o[r])&&l(o[r].values)){let s=o[r],a=s.values.length,c=!0;for(let d=1;d<n;++d){let u=e[d][t].attributes[r];if(!l(u)||s.componentDatatype!==u.componentDatatype||s.componentsPerAttribute!==u.componentsPerAttribute||s.normalize!==u.normalize){c=!1;break}a+=u.values.length}c&&(i[r]=new Ge({componentDatatype:s.componentDatatype,componentsPerAttribute:s.componentsPerAttribute,normalize:s.normalize,values:Q.createTypedArray(s.componentDatatype,a)}))}return i}var NZe=new m;function lY(e,t){let n=e.length,i,o,r,s,a=e[0].modelMatrix,c=l(e[0][t].indices),d=e[0][t].primitiveType,u=MZe(e,t),h,p,g;for(i in u)if(u.hasOwnProperty(i))for(h=u[i].values,s=0,o=0;o<n;++o)for(p=e[o][t].attributes[i].values,g=p.length,r=0;r<g;++r)h[s++]=p[r];let f;if(c){let C=0;for(o=0;o<n;++o)C+=e[o][t].indices.length;let V=lt.computeNumberOfVertices(new lt({attributes:u,primitiveType:we.POINTS})),L=Ae.createTypedArray(V,C),Z=0,E=0;for(o=0;o<n;++o){let P=e[o][t].indices,W=P.length;for(s=0;s<W;++s)L[Z++]=E+P[s];E+=lt.computeNumberOfVertices(e[o][t])}f=L}let y=new m,x=0,S;for(o=0;o<n;++o){if(S=e[o][t].boundingSphere,!l(S)){y=void 0;break}m.add(S.center,y,y)}if(l(y))for(m.divideByScalar(y,n,y),o=0;o<n;++o){S=e[o][t].boundingSphere;let C=m.magnitude(m.subtract(S.center,y,NZe))+S.radius;C>x&&(x=C)}return new lt({attributes:u,indices:f,primitiveType:d,boundingSphere:l(y)?new le(y,x):void 0})}Mc.combineInstances=function(e){let t=[],n=[],i=e.length;for(let r=0;r<i;++r){let s=e[r];l(s.geometry)?t.push(s):l(s.westHemisphereGeometry)&&l(s.eastHemisphereGeometry)&&n.push(s)}let o=[];return t.length>0&&o.push(lY(t,"geometry")),n.length>0&&(o.push(lY(n,"westHemisphereGeometry")),o.push(lY(n,"eastHemisphereGeometry"))),o};var _u=new m,yR=new m,qS=new m,$S=new m;Mc.computeNormal=function(e){let t=e.indices,n=e.attributes,i=n.position.values,o=n.position.values.length/3,r=t.length,s=new Array(o),a=new Array(r/3),c=new Array(r),d;for(d=0;d<o;d++)s[d]={indexOffset:0,count:0,currentCount:0};let u=0;for(d=0;d<r;d+=3){let f=t[d],y=t[d+1],x=t[d+2],S=f*3,C=y*3,V=x*3;yR.x=i[S],yR.y=i[S+1],yR.z=i[S+2],qS.x=i[C],qS.y=i[C+1],qS.z=i[C+2],$S.x=i[V],$S.y=i[V+1],$S.z=i[V+2],s[f].count++,s[y].count++,s[x].count++,m.subtract(qS,yR,qS),m.subtract($S,yR,$S),a[u]=m.cross(qS,$S,new m),u++}let h=0;for(d=0;d<o;d++)s[d].indexOffset+=h,h+=s[d].count;u=0;let p;for(d=0;d<r;d+=3){p=s[t[d]];let f=p.indexOffset+p.currentCount;c[f]=u,p.currentCount++,p=s[t[d+1]],f=p.indexOffset+p.currentCount,c[f]=u,p.currentCount++,p=s[t[d+2]],f=p.indexOffset+p.currentCount,c[f]=u,p.currentCount++,u++}let g=new Float32Array(o*3);for(d=0;d<o;d++){let f=d*3;if(p=s[d],m.clone(m.ZERO,_u),p.count>0){for(u=0;u<p.count;u++)m.add(_u,a[c[p.indexOffset+u]],_u);m.equalsEpsilon(m.ZERO,_u,X.EPSILON10)&&m.clone(a[c[p.indexOffset]],_u)}m.equalsEpsilon(m.ZERO,_u,X.EPSILON10)&&(_u.z=1),m.normalize(_u,_u),g[f]=_u.x,g[f+1]=_u.y,g[f+2]=_u.z}return e.attributes.normal=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:g}),e};var kZe=new m,Hee=new m,UZe=new m;Mc.computeTangentAndBitangent=function(e){let t=e.attributes,n=e.indices,i=e.attributes.position.values,o=e.attributes.normal.values,r=e.attributes.st.values,s=e.attributes.position.values.length/3,a=n.length,c=new Array(s*3),d;for(d=0;d<c.length;d++)c[d]=0;let u,h,p;for(d=0;d<a;d+=3){let y=n[d],x=n[d+1],S=n[d+2];u=y*3,h=x*3,p=S*3;let C=y*2,V=x*2,L=S*2,Z=i[u],E=i[u+1],P=i[u+2],W=r[C],v=r[C+1],A=r[V+1]-v,b=r[L+1]-v,R=1/((r[V]-W)*b-(r[L]-W)*A),G=(b*(i[h]-Z)-A*(i[p]-Z))*R,I=(b*(i[h+1]-E)-A*(i[p+1]-E))*R,w=(b*(i[h+2]-P)-A*(i[p+2]-P))*R;c[u]+=G,c[u+1]+=I,c[u+2]+=w,c[h]+=G,c[h+1]+=I,c[h+2]+=w,c[p]+=G,c[p+1]+=I,c[p+2]+=w}let g=new Float32Array(s*3),f=new Float32Array(s*3);for(d=0;d<s;d++){u=d*3,h=u+1,p=u+2;let y=m.fromArray(o,u,kZe),x=m.fromArray(c,u,UZe),S=m.dot(y,x);m.multiplyByScalar(y,S,Hee),m.normalize(m.subtract(x,Hee,x),x),g[u]=x.x,g[h]=x.y,g[p]=x.z,m.normalize(m.cross(y,x,x),x),f[u]=x.x,f[h]=x.y,f[p]=x.z}return e.attributes.tangent=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:g}),e.attributes.bitangent=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:f}),e};var xR=new U,Xm=new m,Kee=new m,Jee=new m,BN=new U;Mc.compressVertices=function(e){let t=e.attributes.extrudeDirection,n,i;if(l(t)){let E=t.values;i=E.length/3;let P=new Float32Array(i*2),W=0;for(n=0;n<i;++n){if(m.fromArray(E,n*3,Xm),m.equals(Xm,m.ZERO)){W+=2;continue}BN=wn.octEncodeInRange(Xm,65535,BN),P[W++]=BN.x,P[W++]=BN.y}return e.attributes.compressedAttributes=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:P}),delete e.attributes.extrudeDirection,e}let o=e.attributes.normal,r=e.attributes.st,s=l(o),a=l(r);if(!s&&!a)return e;let c=e.attributes.tangent,d=e.attributes.bitangent,u=l(c),h=l(d),p,g,f,y;s&&(p=o.values),a&&(g=r.values),u&&(f=c.values),h&&(y=d.values),i=(s?p.length:g.length)/(s?3:2);let C=i,V=a&&s?2:1;V+=u||h?1:0,C*=V;let L=new Float32Array(C),Z=0;for(n=0;n<i;++n){a&&(U.fromArray(g,n*2,xR),L[Z++]=wn.compressTextureCoordinates(xR));let E=n*3;s&&l(f)&&l(y)?(m.fromArray(p,E,Xm),m.fromArray(f,E,Kee),m.fromArray(y,E,Jee),wn.octPack(Xm,Kee,Jee,xR),L[Z++]=xR.x,L[Z++]=xR.y):(s&&(m.fromArray(p,E,Xm),L[Z++]=wn.octEncodeFloat(Xm)),u&&(m.fromArray(f,E,Xm),L[Z++]=wn.octEncodeFloat(Xm)),h&&(m.fromArray(y,E,Xm),L[Z++]=wn.octEncodeFloat(Xm)))}return e.attributes.compressedAttributes=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:V,values:L}),s&&delete e.attributes.normal,a&&delete e.attributes.st,h&&delete e.attributes.bitangent,u&&delete e.attributes.tangent,e};function DZe(e){if(l(e.indices))return e;let t=lt.computeNumberOfVertices(e),n=Ae.createTypedArray(t,t);for(let i=0;i<t;++i)n[i]=i;return e.indices=n,e}function BZe(e){let t=lt.computeNumberOfVertices(e),n=Ae.createTypedArray(t,(t-2)*3);n[0]=1,n[1]=0,n[2]=2;let i=3;for(let o=3;o<t;++o)n[i++]=o-1,n[i++]=0,n[i++]=o;return e.indices=n,e.primitiveType=we.TRIANGLES,e}function OZe(e){let t=lt.computeNumberOfVertices(e),n=Ae.createTypedArray(t,(t-2)*3);n[0]=0,n[1]=1,n[2]=2,t>3&&(n[3]=0,n[4]=2,n[5]=3);let i=6;for(let o=3;o<t-1;o+=2)n[i++]=o,n[i++]=o-1,n[i++]=o+1,o+2<t&&(n[i++]=o,n[i++]=o+1,n[i++]=o+2);return e.indices=n,e.primitiveType=we.TRIANGLES,e}function YZe(e){if(l(e.indices))return e;let t=lt.computeNumberOfVertices(e),n=Ae.createTypedArray(t,t);for(let i=0;i<t;++i)n[i]=i;return e.indices=n,e}function zZe(e){let t=lt.computeNumberOfVertices(e),n=Ae.createTypedArray(t,(t-1)*2);n[0]=0,n[1]=1;let i=2;for(let o=2;o<t;++o)n[i++]=o-1,n[i++]=o;return e.indices=n,e.primitiveType=we.LINES,e}function HZe(e){let t=lt.computeNumberOfVertices(e),n=Ae.createTypedArray(t,t*2);n[0]=0,n[1]=1;let i=2;for(let o=2;o<t;++o)n[i++]=o-1,n[i++]=o;return n[i++]=t-1,n[i]=0,e.indices=n,e.primitiveType=we.LINES,e}function KZe(e){switch(e.primitiveType){case we.TRIANGLE_FAN:return BZe(e);case we.TRIANGLE_STRIP:return OZe(e);case we.TRIANGLES:return DZe(e);case we.LINE_STRIP:return zZe(e);case we.LINE_LOOP:return HZe(e);case we.LINES:return YZe(e)}return e}function k0(e,t){Math.abs(e.y)<X.EPSILON6&&(t?e.y=-X.EPSILON6:e.y=X.EPSILON6)}function JZe(e,t,n){if(e.y!==0&&t.y!==0&&n.y!==0){k0(e,e.y<0),k0(t,t.y<0),k0(n,n.y<0);return}let i=Math.abs(e.y),o=Math.abs(t.y),r=Math.abs(n.y),s;i>o?i>r?s=X.sign(e.y):s=X.sign(n.y):o>r?s=X.sign(t.y):s=X.sign(n.y);let a=s<0;k0(e,a),k0(t,a),k0(n,a)}var Qee=new m;function Tu(e,t,n,i){m.add(e,m.multiplyByScalar(m.subtract(t,e,Qee),e.y/(e.y-t.y),Qee),n),m.clone(n,i),k0(n,!0),k0(i,!1)}var bx=new m,gx=new m,yx=new m,xx=new m,dY={positions:new Array(7),indices:new Array(3*3)};function QZe(e,t,n){if(e.x>=0||t.x>=0||n.x>=0)return;JZe(e,t,n);let i=e.y<0,o=t.y<0,r=n.y<0,s=0;s+=i?1:0,s+=o?1:0,s+=r?1:0;let a=dY.indices;s===1?(a[1]=3,a[2]=4,a[5]=6,a[7]=6,a[8]=5,i?(Tu(e,t,bx,yx),Tu(e,n,gx,xx),a[0]=0,a[3]=1,a[4]=2,a[6]=1):o?(Tu(t,n,bx,yx),Tu(t,e,gx,xx),a[0]=1,a[3]=2,a[4]=0,a[6]=2):r&&(Tu(n,e,bx,yx),Tu(n,t,gx,xx),a[0]=2,a[3]=0,a[4]=1,a[6]=0)):s===2&&(a[2]=4,a[4]=4,a[5]=3,a[7]=5,a[8]=6,i?o?r||(Tu(n,e,bx,yx),Tu(n,t,gx,xx),a[0]=0,a[1]=1,a[3]=0,a[6]=2):(Tu(t,n,bx,yx),Tu(t,e,gx,xx),a[0]=2,a[1]=0,a[3]=2,a[6]=1):(Tu(e,t,bx,yx),Tu(e,n,gx,xx),a[0]=1,a[1]=2,a[3]=1,a[6]=0));let c=dY.positions;return c[0]=e,c[1]=t,c[2]=n,c.length=3,(s===1||s===2)&&(c[3]=bx,c[4]=gx,c[5]=yx,c[6]=xx,c.length=7),dY}function jee(e,t){let n=e.attributes;if(n.position.values.length===0)return;for(let o in n)if(n.hasOwnProperty(o)&&l(n[o])&&l(n[o].values)){let r=n[o];r.values=Q.createTypedArray(r.componentDatatype,r.values)}let i=lt.computeNumberOfVertices(e);return e.indices=Ae.createTypedArray(i,e.indices),t&&(e.boundingSphere=le.fromVertices(n.position.values)),e}function tC(e){let t=e.attributes,n={};for(let i in t)if(t.hasOwnProperty(i)&&l(t[i])&&l(t[i].values)){let o=t[i];n[i]=new Ge({componentDatatype:o.componentDatatype,componentsPerAttribute:o.componentsPerAttribute,normalize:o.normalize,values:[]})}return new lt({attributes:n,indices:[],primitiveType:e.primitiveType})}function fY(e,t,n){let i=l(e.geometry.boundingSphere);t=jee(t,i),n=jee(n,i),l(n)&&!l(t)?e.geometry=n:!l(n)&&l(t)?e.geometry=t:(e.westHemisphereGeometry=t,e.eastHemisphereGeometry=n,e.geometry=void 0)}function pY(e,t){let n=new e,i=new e,o=new e;return function(r,s,a,c,d,u,h,p){let g=e.fromArray(d,r*t,n),f=e.fromArray(d,s*t,i),y=e.fromArray(d,a*t,o);e.multiplyByScalar(g,c.x,g),e.multiplyByScalar(f,c.y,f),e.multiplyByScalar(y,c.z,y);let x=e.add(g,f,g);e.add(x,y,x),p&&e.normalize(x,x),e.pack(x,u,h*t)}}var jZe=pY(se,4),zN=pY(m,3),ite=pY(U,2),qZe=function(e,t,n,i,o,r,s){let a=o[e]*i.x,c=o[t]*i.y,d=o[n]*i.z;r[s]=a+c+d>X.EPSILON6?1:0},_R=new m,uY=new m,mY=new m,$Ze=new m;function ON(e,t,n,i,o,r,s,a,c,d,u,h,p,g,f,y){if(!l(r)&&!l(s)&&!l(a)&&!l(c)&&!l(d)&&g===0)return;let x=m.fromArray(o,e*3,_R),S=m.fromArray(o,t*3,uY),C=m.fromArray(o,n*3,mY),V=hx(i,x,S,C,$Ze);if(l(V)){if(l(r)&&zN(e,t,n,V,r,h.normal.values,y,!0),l(d)){let L=m.fromArray(d,e*3,_R),Z=m.fromArray(d,t*3,uY),E=m.fromArray(d,n*3,mY);m.multiplyByScalar(L,V.x,L),m.multiplyByScalar(Z,V.y,Z),m.multiplyByScalar(E,V.z,E);let P;!m.equals(L,m.ZERO)||!m.equals(Z,m.ZERO)||!m.equals(E,m.ZERO)?(P=m.add(L,Z,L),m.add(P,E,P),m.normalize(P,P)):(P=_R,P.x=0,P.y=0,P.z=0),m.pack(P,h.extrudeDirection.values,y*3)}if(l(u)&&qZe(e,t,n,V,u,h.applyOffset.values,y),l(s)&&zN(e,t,n,V,s,h.tangent.values,y,!0),l(a)&&zN(e,t,n,V,a,h.bitangent.values,y,!0),l(c)&&ite(e,t,n,V,c,h.st.values,y),g>0)for(let L=0;L<g;L++){let Z=p[L];eGe(e,t,n,V,y,f[Z],h[Z])}}}function eGe(e,t,n,i,o,r,s){let a=r.componentsPerAttribute,c=r.values,d=s.values;switch(a){case 4:jZe(e,t,n,i,c,d,o,!1);break;case 3:zN(e,t,n,i,c,d,o,!1);break;case 2:ite(e,t,n,i,c,d,o,!1);break;default:d[o]=c[e]*i.x+c[t]*i.y+c[n]*i.z}}function lf(e,t,n,i,o,r){let s=e.position.values.length/3;if(o!==-1){let a=i[o],c=n[a];return c===-1?(n[a]=s,e.position.values.push(r.x,r.y,r.z),t.push(s),s):(t.push(c),c)}return e.position.values.push(r.x,r.y,r.z),t.push(s),s}var tGe={position:!0,normal:!0,bitangent:!0,tangent:!0,st:!0,extrudeDirection:!0,applyOffset:!0};function qee(e){let t=e.geometry,n=t.attributes,i=n.position.values,o=l(n.normal)?n.normal.values:void 0,r=l(n.bitangent)?n.bitangent.values:void 0,s=l(n.tangent)?n.tangent.values:void 0,a=l(n.st)?n.st.values:void 0,c=l(n.extrudeDirection)?n.extrudeDirection.values:void 0,d=l(n.applyOffset)?n.applyOffset.values:void 0,u=t.indices,h=[];for(let P in n)n.hasOwnProperty(P)&&!tGe[P]&&l(n[P])&&h.push(P);let p=h.length,g=tC(t),f=tC(t),y,x,S,C,V,L=[];L.length=i.length/3;let Z=[];for(Z.length=i.length/3,V=0;V<L.length;++V)L[V]=-1,Z[V]=-1;let E=u.length;for(V=0;V<E;V+=3){let P=u[V],W=u[V+1],v=u[V+2],A=m.fromArray(i,P*3),b=m.fromArray(i,W*3),R=m.fromArray(i,v*3),G=QZe(A,b,R);if(l(G)&&G.positions.length>3){let I=G.positions,w=G.indices,M=w.length;for(let B=0;B<M;++B){let k=w[B],O=I[k];O.y<0?(y=f.attributes,x=f.indices,S=L):(y=g.attributes,x=g.indices,S=Z),C=lf(y,x,S,u,k<3?V+k:-1,O),ON(P,W,v,O,i,o,s,r,a,c,d,y,h,p,n,C)}}else l(G)&&(A=G.positions[0],b=G.positions[1],R=G.positions[2]),A.y<0?(y=f.attributes,x=f.indices,S=L):(y=g.attributes,x=g.indices,S=Z),C=lf(y,x,S,u,V,A),ON(P,W,v,A,i,o,s,r,a,c,d,y,h,p,n,C),C=lf(y,x,S,u,V+1,b),ON(P,W,v,b,i,o,s,r,a,c,d,y,h,p,n,C),C=lf(y,x,S,u,V+2,R),ON(P,W,v,R,i,o,s,r,a,c,d,y,h,p,n,C)}fY(e,f,g)}var ote=sn.fromPointNormal(m.ZERO,m.UNIT_Y),nGe=new m,iGe=new m;function eC(e,t,n,i,o,r,s){if(!l(s))return;let a=m.fromArray(i,e*3,_R);m.equalsEpsilon(a,n,X.EPSILON10)?r.applyOffset.values[o]=s[e]:r.applyOffset.values[o]=s[t]}function $ee(e){let t=e.geometry,n=t.attributes,i=n.position.values,o=l(n.applyOffset)?n.applyOffset.values:void 0,r=t.indices,s=tC(t),a=tC(t),c,d=r.length,u=[];u.length=i.length/3;let h=[];for(h.length=i.length/3,c=0;c<u.length;++c)u[c]=-1,h[c]=-1;for(c=0;c<d;c+=2){let p=r[c],g=r[c+1],f=m.fromArray(i,p*3,_R),y=m.fromArray(i,g*3,uY),x;Math.abs(f.y)<X.EPSILON6&&(f.y<0?f.y=-X.EPSILON6:f.y=X.EPSILON6),Math.abs(y.y)<X.EPSILON6&&(y.y<0?y.y=-X.EPSILON6:y.y=X.EPSILON6);let S=s.attributes,C=s.indices,V=h,L=a.attributes,Z=a.indices,E=u,P=qn.lineSegmentPlane(f,y,ote,mY);if(l(P)){let W=m.multiplyByScalar(m.UNIT_Y,5*X.EPSILON9,nGe);f.y<0&&(m.negate(W,W),S=a.attributes,C=a.indices,V=u,L=s.attributes,Z=s.indices,E=h);let v=m.add(P,W,iGe);x=lf(S,C,V,r,c,f),eC(p,g,f,i,x,S,o),x=lf(S,C,V,r,-1,v),eC(p,g,v,i,x,S,o),m.negate(W,W),m.add(P,W,v),x=lf(L,Z,E,r,-1,v),eC(p,g,v,i,x,L,o),x=lf(L,Z,E,r,c+1,y),eC(p,g,y,i,x,L,o)}else{let W,v,A;f.y<0?(W=a.attributes,v=a.indices,A=u):(W=s.attributes,v=s.indices,A=h),x=lf(W,v,A,r,c,f),eC(p,g,f,i,x,W,o),x=lf(W,v,A,r,c+1,y),eC(p,g,y,i,x,W,o)}}fY(e,a,s)}var ete=new U,oGe=new U,rte=new m,ste=new m,hY=new m,rGe=new m,sGe=new m,aGe=new m,tte=new se;function nte(e){let t=e.attributes,n=t.position.values,i=t.prevPosition.values,o=t.nextPosition.values,r=n.length;for(let s=0;s<r;s+=3){let a=m.unpack(n,s,rte);if(a.x>0)continue;let c=m.unpack(i,s,ste);(a.y<0&&c.y>0||a.y>0&&c.y<0)&&(s-3>0?(i[s]=n[s-3],i[s+1]=n[s-2],i[s+2]=n[s-1]):m.pack(a,i,s));let d=m.unpack(o,s,hY);(a.y<0&&d.y>0||a.y>0&&d.y<0)&&(s+3<r?(o[s]=n[s+3],o[s+1]=n[s+4],o[s+2]=n[s+5]):m.pack(a,o,s))}}var cGe=5*X.EPSILON9,YN=X.EPSILON6;function lGe(e){let t=e.geometry,n=t.attributes,i=n.position.values,o=n.prevPosition.values,r=n.nextPosition.values,s=n.expandAndWidth.values,a=l(n.st)?n.st.values:void 0,c=l(n.color)?n.color.values:void 0,d=tC(t),u=tC(t),h,p,g,f=!1,y=i.length/3;for(h=0;h<y;h+=4){let x=h,S=h+2,C=m.fromArray(i,x*3,rte),V=m.fromArray(i,S*3,ste);if(Math.abs(C.y)<YN)for(C.y=YN*(V.y<0?-1:1),i[h*3+1]=C.y,i[(h+1)*3+1]=C.y,p=x*3;p<x*3+4*3;p+=3)o[p]=i[h*3],o[p+1]=i[h*3+1],o[p+2]=i[h*3+2];if(Math.abs(V.y)<YN)for(V.y=YN*(C.y<0?-1:1),i[(h+2)*3+1]=V.y,i[(h+3)*3+1]=V.y,p=x*3;p<x*3+4*3;p+=3)r[p]=i[(h+2)*3],r[p+1]=i[(h+2)*3+1],r[p+2]=i[(h+2)*3+2];let L=d.attributes,Z=d.indices,E=u.attributes,P=u.indices,W=qn.lineSegmentPlane(C,V,ote,rGe);if(l(W)){f=!0;let v=m.multiplyByScalar(m.UNIT_Y,cGe,sGe);C.y<0&&(m.negate(v,v),L=u.attributes,Z=u.indices,E=d.attributes,P=d.indices);let A=m.add(W,v,aGe);L.position.values.push(C.x,C.y,C.z,C.x,C.y,C.z),L.position.values.push(A.x,A.y,A.z),L.position.values.push(A.x,A.y,A.z),L.prevPosition.values.push(o[x*3],o[x*3+1],o[x*3+2]),L.prevPosition.values.push(o[x*3+3],o[x*3+4],o[x*3+5]),L.prevPosition.values.push(C.x,C.y,C.z,C.x,C.y,C.z),L.nextPosition.values.push(A.x,A.y,A.z),L.nextPosition.values.push(A.x,A.y,A.z),L.nextPosition.values.push(A.x,A.y,A.z),L.nextPosition.values.push(A.x,A.y,A.z),m.negate(v,v),m.add(W,v,A),E.position.values.push(A.x,A.y,A.z),E.position.values.push(A.x,A.y,A.z),E.position.values.push(V.x,V.y,V.z,V.x,V.y,V.z),E.prevPosition.values.push(A.x,A.y,A.z),E.prevPosition.values.push(A.x,A.y,A.z),E.prevPosition.values.push(A.x,A.y,A.z),E.prevPosition.values.push(A.x,A.y,A.z),E.nextPosition.values.push(V.x,V.y,V.z,V.x,V.y,V.z),E.nextPosition.values.push(r[S*3],r[S*3+1],r[S*3+2]),E.nextPosition.values.push(r[S*3+3],r[S*3+4],r[S*3+5]);let b=U.fromArray(s,x*2,ete),R=Math.abs(b.y);L.expandAndWidth.values.push(-1,R,1,R),L.expandAndWidth.values.push(-1,-R,1,-R),E.expandAndWidth.values.push(-1,R,1,R),E.expandAndWidth.values.push(-1,-R,1,-R);let G=m.magnitudeSquared(m.subtract(W,C,hY));if(G/=m.magnitudeSquared(m.subtract(V,C,hY)),l(c)){let I=se.fromArray(c,x*4,tte),w=se.fromArray(c,S*4,tte),M=X.lerp(I.x,w.x,G),B=X.lerp(I.y,w.y,G),k=X.lerp(I.z,w.z,G),O=X.lerp(I.w,w.w,G);for(p=x*4;p<x*4+2*4;++p)L.color.values.push(c[p]);for(L.color.values.push(M,B,k,O),L.color.values.push(M,B,k,O),E.color.values.push(M,B,k,O),E.color.values.push(M,B,k,O),p=S*4;p<S*4+2*4;++p)E.color.values.push(c[p])}if(l(a)){let I=U.fromArray(a,x*2,ete),w=U.fromArray(a,(h+3)*2,oGe),M=X.lerp(I.x,w.x,G);for(p=x*2;p<x*2+2*2;++p)L.st.values.push(a[p]);for(L.st.values.push(M,I.y),L.st.values.push(M,w.y),E.st.values.push(M,I.y),E.st.values.push(M,w.y),p=S*2;p<S*2+2*2;++p)E.st.values.push(a[p])}g=L.position.values.length/3-4,Z.push(g,g+2,g+1),Z.push(g+1,g+2,g+3),g=E.position.values.length/3-4,P.push(g,g+2,g+1),P.push(g+1,g+2,g+3)}else{let v,A;for(C.y<0?(v=u.attributes,A=u.indices):(v=d.attributes,A=d.indices),v.position.values.push(C.x,C.y,C.z),v.position.values.push(C.x,C.y,C.z),v.position.values.push(V.x,V.y,V.z),v.position.values.push(V.x,V.y,V.z),p=h*3;p<h*3+4*3;++p)v.prevPosition.values.push(o[p]),v.nextPosition.values.push(r[p]);for(p=h*2;p<h*2+4*2;++p)v.expandAndWidth.values.push(s[p]),l(a)&&v.st.values.push(a[p]);if(l(c))for(p=h*4;p<h*4+4*4;++p)v.color.values.push(c[p]);g=v.position.values.length/3-4,A.push(g,g+2,g+1),A.push(g+1,g+2,g+3)}}f&&(nte(u),nte(d)),fY(e,u,d)}Mc.splitLongitude=function(e){let t=e.geometry,n=t.boundingSphere;if(l(n)&&(n.center.x-n.radius>0||le.intersectPlane(n,sn.ORIGIN_ZX_PLANE)!==zt.INTERSECTING))return e;if(t.geometryType!==xu.NONE)switch(t.geometryType){case xu.POLYLINES:lGe(e);break;case xu.TRIANGLES:qee(e);break;case xu.LINES:$ee(e);break}else KZe(t),t.primitiveType===we.TRIANGLES?qee(e):t.primitiveType===we.LINES&&$ee(e);return e};var Fn=Mc;var Lvt=_(T(),1);function TR(e,t,n,i,o,r,s,a,c,d,u){this._context=e,this._texture=t,this._textureTarget=n,this._targetFace=i,this._pixelDatatype=s,this._internalFormat=o,this._pixelFormat=r,this._size=a,this._preMultiplyAlpha=c,this._flipY=d,this._initialized=u}Object.defineProperties(TR.prototype,{pixelFormat:{get:function(){return this._pixelFormat}},pixelDatatype:{get:function(){return this._pixelDatatype}},_target:{get:function(){return this._targetFace}}});TR.prototype.copyFrom=function(e){let{xOffset:t=0,yOffset:n=0,source:i,skipColorSpaceConversion:o=!1}=e,{width:r,height:s}=i,a=this._context._gl,c=this._textureTarget,d=this._targetFace;a.activeTexture(a.TEXTURE0),a.bindTexture(c,this._texture);let u=i.arrayBufferView,h=this._size,p=this._pixelFormat,g=this._internalFormat,f=this._pixelDatatype,y=this._preMultiplyAlpha,x=this._flipY,S=4;l(u)&&(S=it.alignmentInBytes(p,f,r)),a.pixelStorei(a.UNPACK_ALIGNMENT,S),o?a.pixelStorei(a.UNPACK_COLORSPACE_CONVERSION_WEBGL,a.NONE):a.pixelStorei(a.UNPACK_COLORSPACE_CONVERSION_WEBGL,a.BROWSER_DEFAULT_WEBGL);let C=!1;if(!this._initialized){let V;t===0&&n===0&&r===h&&s===h?(l(u)?(a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,!1),x&&(u=it.flipY(u,p,f,h,h)),V=u):(a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,y),a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,x),V=i),C=!0):(a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,!1),V=it.createTypedArray(p,f,h,h)),a.texImage2D(d,0,g,h,h,0,p,je.toWebGLConstant(f,this._context),V),this._initialized=!0}C||(l(u)?(a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,!1),x&&(u=it.flipY(u,p,f,r,s)),a.texSubImage2D(d,0,t,n,r,s,p,je.toWebGLConstant(f,this._context),u)):(a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,y),a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,x),a.texSubImage2D(d,0,t,n,p,je.toWebGLConstant(f,this._context),i))),a.bindTexture(c,null)};TR.prototype.copyFromFramebuffer=function(e,t,n,i,o,r){e=e??0,t=t??0,n=n??0,i=i??0,o=o??this._size,r=r??this._size;let s=this._context._gl,a=this._textureTarget;s.activeTexture(s.TEXTURE0),s.bindTexture(a,this._texture),s.copyTexSubImage2D(this._targetFace,0,e,t,n,i,o,r),s.bindTexture(a,null),this._initialized=!0};TR.prototype.copyMipmapFromFramebuffer=function(e,t,n,i,o){e=e??0,t=t??0,n=n??this._size,i=i??this._size,o=o??0;let r=this._context._gl,s=this._textureTarget;r.activeTexture(r.TEXTURE0),r.bindTexture(s,this._texture),r.copyTexImage2D(this._targetFace,o,this._internalFormat,e,t,n,i,0),r.bindTexture(s,null),this._initialized=!0};var SR=TR;var Gvt=_(T(),1);var KN={DONT_CARE:ie.DONT_CARE,FASTEST:ie.FASTEST,NICEST:ie.NICEST,validate:function(e){return e===KN.DONT_CARE||e===KN.FASTEST||e===KN.NICEST}},df=Object.freeze(KN);var Ovt=_(T(),1);var Xvt=_(T(),1);var JN={NEAREST:ie.NEAREST,LINEAR:ie.LINEAR};JN.validate=function(e){return e===JN.NEAREST||e===JN.LINEAR};var hi=Object.freeze(JN);var vvt=_(T(),1);var U0={NEAREST:ie.NEAREST,LINEAR:ie.LINEAR,NEAREST_MIPMAP_NEAREST:ie.NEAREST_MIPMAP_NEAREST,LINEAR_MIPMAP_NEAREST:ie.LINEAR_MIPMAP_NEAREST,NEAREST_MIPMAP_LINEAR:ie.NEAREST_MIPMAP_LINEAR,LINEAR_MIPMAP_LINEAR:ie.LINEAR_MIPMAP_LINEAR};U0.validate=function(e){return e===U0.NEAREST||e===U0.LINEAR||e===U0.NEAREST_MIPMAP_NEAREST||e===U0.LINEAR_MIPMAP_NEAREST||e===U0.NEAREST_MIPMAP_LINEAR||e===U0.LINEAR_MIPMAP_LINEAR};var jt=Object.freeze(U0);var Avt=_(T(),1);var QN={CLAMP_TO_EDGE:ie.CLAMP_TO_EDGE,REPEAT:ie.REPEAT,MIRRORED_REPEAT:ie.MIRRORED_REPEAT,validate:function(e){return e===QN.CLAMP_TO_EDGE||e===QN.REPEAT||e===QN.MIRRORED_REPEAT}},Vn=Object.freeze(QN);function CR(e){e=e??Y.EMPTY_OBJECT;let{wrapS:t=Vn.CLAMP_TO_EDGE,wrapT:n=Vn.CLAMP_TO_EDGE,minificationFilter:i=jt.LINEAR,magnificationFilter:o=hi.LINEAR,maximumAnisotropy:r=1}=e;this._wrapS=t,this._wrapT=n,this._minificationFilter=i,this._magnificationFilter=o,this._maximumAnisotropy=r}Object.defineProperties(CR.prototype,{wrapS:{get:function(){return this._wrapS}},wrapT:{get:function(){return this._wrapT}},minificationFilter:{get:function(){return this._minificationFilter}},magnificationFilter:{get:function(){return this._magnificationFilter}},maximumAnisotropy:{get:function(){return this._maximumAnisotropy}}});CR.equals=function(e,t){return e===t||l(e)&&l(t)&&e._wrapS===t._wrapS&&e._wrapT===t._wrapT&&e._minificationFilter===t._minificationFilter&&e._magnificationFilter===t._magnificationFilter&&e._maximumAnisotropy===t._maximumAnisotropy};CR.NEAREST=Object.freeze(new CR({wrapS:Vn.CLAMP_TO_EDGE,wrapT:Vn.CLAMP_TO_EDGE,minificationFilter:jt.NEAREST,magnificationFilter:hi.NEAREST}));var qt=CR;var iwt=_(T(),1);function dGe(e,t,n,i){let o=l(t.vertexBuffer),r=l(t.value),s=t.value?t.value.length:t.componentsPerAttribute,a={index:t.index??n,enabled:t.enabled??!0,vertexBuffer:t.vertexBuffer,value:r?t.value.slice(0):void 0,componentsPerAttribute:s,componentDatatype:t.componentDatatype??Q.FLOAT,normalize:t.normalize??!1,offsetInBytes:t.offsetInBytes??0,strideInBytes:t.strideInBytes??0,instanceDivisor:t.instanceDivisor??0};if(o)a.vertexAttrib=function(c){let d=this.index;c.bindBuffer(c.ARRAY_BUFFER,this.vertexBuffer._getBuffer()),c.vertexAttribPointer(d,this.componentsPerAttribute,this.componentDatatype,this.normalize,this.strideInBytes,this.offsetInBytes),c.enableVertexAttribArray(d),this.instanceDivisor>0&&(i.glVertexAttribDivisor(d,this.instanceDivisor),i._vertexAttribDivisors[d]=this.instanceDivisor,i._previousDrawInstanced=!0)},a.disableVertexAttribArray=function(c){c.disableVertexAttribArray(this.index),this.instanceDivisor>0&&i.glVertexAttribDivisor(n,0)};else{switch(a.componentsPerAttribute){case 1:a.vertexAttrib=function(c){c.vertexAttrib1fv(this.index,this.value)};break;case 2:a.vertexAttrib=function(c){c.vertexAttrib2fv(this.index,this.value)};break;case 3:a.vertexAttrib=function(c){c.vertexAttrib3fv(this.index,this.value)};break;case 4:a.vertexAttrib=function(c){c.vertexAttrib4fv(this.index,this.value)};break}a.disableVertexAttribArray=function(c){}}e.push(a)}function cte(e,t,n){for(let i=0;i<t.length;++i){let o=t[i];o.enabled&&o.vertexAttrib(e)}l(n)&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,n._getBuffer())}function Ep(e){e=e??Y.EMPTY_OBJECT;let t=e.context,n=t._gl,i=e.attributes,o=e.indexBuffer,r,s=[],a=1,c=!1,d=!1,u=i.length;for(r=0;r<u;++r)dGe(s,i[r],r,t);for(u=s.length,r=0;r<u;++r){let p=s[r];if(l(p.vertexBuffer)&&p.instanceDivisor===0){let g=p.strideInBytes||p.componentsPerAttribute*Q.getSizeInBytes(p.componentDatatype);a=p.vertexBuffer.sizeInBytes/g;break}}for(r=0;r<u;++r)s[r].instanceDivisor>0&&(c=!0),l(s[r].value)&&(d=!0);let h;t.vertexArrayObject&&(h=t.glCreateVertexArray(),t.glBindVertexArray(h),cte(n,s,o),t.glBindVertexArray(null)),this._numberOfVertices=a,this._hasInstancedAttributes=c,this._hasConstantAttributes=d,this._context=t,this._gl=n,this._vao=h,this._attributes=s,this._indexBuffer=o}function ate(e){return e.values.length/e.componentsPerAttribute}function uGe(e){return Q.getSizeInBytes(e.componentDatatype)*e.componentsPerAttribute}function mGe(e){let t,n,i,o=[];for(n in e)e.hasOwnProperty(n)&&l(e[n])&&l(e[n].values)&&(o.push(n),e[n].componentDatatype===Q.DOUBLE&&(e[n].componentDatatype=Q.FLOAT,e[n].values=Q.createTypedArray(Q.FLOAT,e[n].values)));let r,s=o.length;if(s>0)for(r=ate(e[o[0]]),t=1;t<s;++t){let d=ate(e[o[t]]);if(d!==r)throw new ae(`Each attribute list must have the same number of vertices. Attribute ${o[t]} has a different number of vertices (${d.toString()}) than attribute ${o[0]} (${r.toString()}).`)}o.sort(function(d,u){return Q.getSizeInBytes(e[u].componentDatatype)-Q.getSizeInBytes(e[d].componentDatatype)});let a=0,c={};for(t=0;t<s;++t)n=o[t],i=e[n],c[n]=a,a+=uGe(i);if(a>0){let d=Q.getSizeInBytes(e[o[0]].componentDatatype),u=a%d;u!==0&&(a+=d-u);let h=r*a,p=new ArrayBuffer(h),g={};for(t=0;t<s;++t){n=o[t];let f=Q.getSizeInBytes(e[n].componentDatatype);g[n]={pointer:Q.createTypedArray(e[n].componentDatatype,p),index:c[n]/f,strideInComponentType:a/f}}for(t=0;t<r;++t)for(let f=0;f<s;++f){n=o[f],i=e[n];let y=i.values,x=g[n],S=x.pointer,C=i.componentsPerAttribute;for(let V=0;V<C;++V)S[x.index+V]=y[t*C+V];x.index+=x.strideInComponentType}return{buffer:p,offsetsInBytes:c,vertexSizeInBytes:a}}}Ep.fromGeometry=function(e){e=e??Y.EMPTY_OBJECT;let t=e.context,n=e.geometry??Y.EMPTY_OBJECT,i=e.bufferUsage??Me.DYNAMIC_DRAW,o=e.attributeLocations??Y.EMPTY_OBJECT,r=e.interleave??!1,s=e.vertexArrayAttributes,a,c,d,u=l(s)?s:[],h=n.attributes;if(r){let f=mGe(h);if(l(f)){d=xt.createVertexBuffer({context:t,typedArray:f.buffer,usage:i});let y=f.offsetsInBytes,x=f.vertexSizeInBytes;for(a in h)h.hasOwnProperty(a)&&l(h[a])&&(c=h[a],l(c.values)?u.push({index:o[a],vertexBuffer:d,componentDatatype:c.componentDatatype,componentsPerAttribute:c.componentsPerAttribute,normalize:c.normalize,offsetInBytes:y[a],strideInBytes:x}):u.push({index:o[a],value:c.value,componentDatatype:c.componentDatatype,normalize:c.normalize}))}}else for(a in h)if(h.hasOwnProperty(a)&&l(h[a])){c=h[a];let f=c.componentDatatype;f===Q.DOUBLE&&(f=Q.FLOAT),d=void 0,l(c.values)&&(d=xt.createVertexBuffer({context:t,typedArray:Q.createTypedArray(f,c.values),usage:i})),u.push({index:o[a],vertexBuffer:d,value:c.value,componentDatatype:f,componentsPerAttribute:c.componentsPerAttribute,normalize:c.normalize})}let p,g=n.indices;return l(g)&&(lt.computeNumberOfVertices(n)>=X.SIXTY_FOUR_KILOBYTES&&t.elementIndexUint?p=xt.createIndexBuffer({context:t,typedArray:new Uint32Array(g),usage:i,indexDatatype:Ae.UNSIGNED_INT}):p=xt.createIndexBuffer({context:t,typedArray:new Uint16Array(g),usage:i,indexDatatype:Ae.UNSIGNED_SHORT})),new Ep({context:t,attributes:u,indexBuffer:p})};Object.defineProperties(Ep.prototype,{numberOfAttributes:{get:function(){return this._attributes.length}},numberOfVertices:{get:function(){return this._numberOfVertices}},indexBuffer:{get:function(){return this._indexBuffer}}});Ep.prototype.getAttribute=function(e){return this._attributes[e]};function hGe(e){let t=e._context,n=e._hasInstancedAttributes;if(!n&&!t._previousDrawInstanced)return;t._previousDrawInstanced=n;let i=t._vertexAttribDivisors,o=e._attributes,r=Nt.maximumVertexAttributes,s;if(n){let a=o.length;for(s=0;s<a;++s){let c=o[s];if(c.enabled){let d=c.instanceDivisor,u=c.index;d!==i[u]&&(t.glVertexAttribDivisor(u,d),i[u]=d)}}}else for(s=0;s<r;++s)i[s]>0&&(t.glVertexAttribDivisor(s,0),i[s]=0)}function fGe(e,t){let n=e._attributes,i=n.length;for(let o=0;o<i;++o){let r=n[o];r.enabled&&l(r.value)&&r.vertexAttrib(t)}}Ep.prototype._bind=function(){l(this._vao)?(this._context.glBindVertexArray(this._vao),this._context.instancedArrays&&hGe(this),this._hasConstantAttributes&&fGe(this,this._gl)):cte(this._gl,this._attributes,this._indexBuffer)};Ep.prototype._unBind=function(){if(l(this._vao))this._context.glBindVertexArray(null);else{let e=this._attributes,t=this._gl;for(let n=0;n<e.length;++n){let i=e[n];i.enabled&&i.disableVertexAttribArray(t)}this._indexBuffer&&t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null)}};Ep.prototype.isDestroyed=function(){return!1};Ep.prototype.destroy=function(){let e=this._attributes;for(let n=0;n<e.length;++n){let i=e[n].vertexBuffer;l(i)&&!i.isDestroyed()&&i.vertexArrayDestroyable&&i.destroy()}let t=this._indexBuffer;return l(t)&&!t.isDestroyed()&&t.vertexArrayDestroyable&&t.destroy(),l(this._vao)&&this._context.glDeleteVertexArray(this._vao),me(this)};var ni=Ep;function Ko(e){e=e??Y.EMPTY_OBJECT;let{context:t,source:n,pixelFormat:i=it.RGBA,pixelDatatype:o=je.UNSIGNED_BYTE,flipY:r=!0,skipColorSpaceConversion:s=!1,sampler:a=new qt}=e,c=e.preMultiplyAlpha||i===it.RGB||i===it.LUMINANCE,{width:d,height:u}=e;l(n)&&({width:d,height:u}=n.positiveX);let h=d,p=it.textureSizeInBytes(i,o,h,h)*6,g=it.toInternalFormat(i,o,t),f=t._gl,y=f.TEXTURE_CUBE_MAP,x=f.createTexture();this._context=t,this._textureFilterAnisotropic=t._textureFilterAnisotropic,this._textureTarget=y,this._texture=x,this._pixelFormat=i,this._pixelDatatype=o,this._size=h,this._hasMipmap=!1,this._sizeInBytes=p,this._preMultiplyAlpha=c,this._flipY=r;let S=l(n);function C(V){return new SR(t,x,y,V,g,i,o,h,c,r,S)}this._positiveX=C(f.TEXTURE_CUBE_MAP_POSITIVE_X),this._negativeX=C(f.TEXTURE_CUBE_MAP_NEGATIVE_X),this._positiveY=C(f.TEXTURE_CUBE_MAP_POSITIVE_Y),this._negativeY=C(f.TEXTURE_CUBE_MAP_NEGATIVE_Y),this._positiveZ=C(f.TEXTURE_CUBE_MAP_POSITIVE_Z),this._negativeZ=C(f.TEXTURE_CUBE_MAP_NEGATIVE_Z),this._sampler=a,lte(this,a),f.activeTexture(f.TEXTURE0),f.bindTexture(y,x),s?f.pixelStorei(f.UNPACK_COLORSPACE_CONVERSION_WEBGL,f.NONE):f.pixelStorei(f.UNPACK_COLORSPACE_CONVERSION_WEBGL,f.BROWSER_DEFAULT_WEBGL);for(let V of Ko.faceNames())bY(this[V],n?.[V],0);f.bindTexture(y,null)}Ko.prototype.copyFace=function(e,t,n,i){let o=e.context,r=new Wr({context:o,colorTextures:[t],destroyAttachments:!1});r._bind(),this[n].copyMipmapFromFramebuffer(0,0,t.width,t.height,i??0),r._unBind(),r.destroy()};Ko.FaceName=Object.freeze({POSITIVEX:"positiveX",NEGATIVEX:"negativeX",POSITIVEY:"positiveY",NEGATIVEY:"negativeY",POSITIVEZ:"positiveZ",NEGATIVEZ:"negativeZ"});function*pGe(){yield Ko.FaceName.POSITIVEX,yield Ko.FaceName.NEGATIVEX,yield Ko.FaceName.POSITIVEY,yield Ko.FaceName.NEGATIVEY,yield Ko.FaceName.POSITIVEZ,yield Ko.FaceName.NEGATIVEZ}Ko.faceNames=function(){return pGe()};function bY(e,t,n){n=n??0;let i=e._targetFace,o=Math.max(Math.floor(e._size/2**n),1),r=e._pixelFormat,s=e._pixelDatatype,a=e._internalFormat,c=e._flipY,d=e._preMultiplyAlpha,u=e._context,h=u._gl;if(!l(t)){h.texImage2D(i,n,a,o,o,0,r,je.toWebGLConstant(s,u),null);return}let{arrayBufferView:p}=t,g=4;l(p)&&(g=it.alignmentInBytes(r,s,o)),h.pixelStorei(h.UNPACK_ALIGNMENT,g),l(p)?(h.pixelStorei(h.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),h.pixelStorei(h.UNPACK_FLIP_Y_WEBGL,!1),c&&(p=it.flipY(p,r,s,o,o)),h.texImage2D(i,n,a,o,o,0,r,je.toWebGLConstant(s,u),p)):(h.pixelStorei(h.UNPACK_PREMULTIPLY_ALPHA_WEBGL,d),h.pixelStorei(h.UNPACK_FLIP_Y_WEBGL,c),h.texImage2D(i,n,a,r,je.toWebGLConstant(s,u),t))}Ko.loadFace=bY;Object.defineProperties(Ko.prototype,{positiveX:{get:function(){return this._positiveX}},negativeX:{get:function(){return this._negativeX}},positiveY:{get:function(){return this._positiveY}},negativeY:{get:function(){return this._negativeY}},positiveZ:{get:function(){return this._positiveZ}},negativeZ:{get:function(){return this._negativeZ}},sampler:{get:function(){return this._sampler},set:function(e){lte(this,e),this._sampler=e}},pixelFormat:{get:function(){return this._pixelFormat}},pixelDatatype:{get:function(){return this._pixelDatatype}},width:{get:function(){return this._size}},height:{get:function(){return this._size}},sizeInBytes:{get:function(){return this._hasMipmap?Math.floor(this._sizeInBytes*4/3):this._sizeInBytes}},preMultiplyAlpha:{get:function(){return this._preMultiplyAlpha}},flipY:{get:function(){return this._flipY}},_target:{get:function(){return this._textureTarget}}});Ko.getDirection=function(e,t){switch(e){case Ko.FaceName.POSITIVEX:return m.clone(m.UNIT_X,t);case Ko.FaceName.NEGATIVEX:return m.negate(m.UNIT_X,t);case Ko.FaceName.POSITIVEY:return m.clone(m.UNIT_Y,t);case Ko.FaceName.NEGATIVEY:return m.negate(m.UNIT_Y,t);case Ko.FaceName.POSITIVEZ:return m.clone(m.UNIT_Z,t);case Ko.FaceName.NEGATIVEZ:return m.negate(m.UNIT_Z,t)}};function lte(e,t){let{minificationFilter:n,magnificationFilter:i}=t,o=[jt.NEAREST_MIPMAP_NEAREST,jt.NEAREST_MIPMAP_LINEAR,jt.LINEAR_MIPMAP_NEAREST,jt.LINEAR_MIPMAP_LINEAR].includes(n),r=e._context,s=e._pixelDatatype;(s===je.FLOAT&&!r.textureFloatLinear||s===je.HALF_FLOAT&&!r.textureHalfFloatLinear)&&(n=o?jt.NEAREST_MIPMAP_NEAREST:jt.NEAREST,i=hi.NEAREST);let a=r._gl,c=e._textureTarget;a.activeTexture(a.TEXTURE0),a.bindTexture(c,e._texture),a.texParameteri(c,a.TEXTURE_MIN_FILTER,n),a.texParameteri(c,a.TEXTURE_MAG_FILTER,i),a.texParameteri(c,a.TEXTURE_WRAP_S,t.wrapS),a.texParameteri(c,a.TEXTURE_WRAP_T,t.wrapT),l(e._textureFilterAnisotropic)&&a.texParameteri(c,e._textureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,t.maximumAnisotropy),a.bindTexture(c,null)}Ko.prototype.loadMipmaps=function(e,t){t=t??!1;let n=this._context._gl,i=this._texture,o=this._textureTarget;n.activeTexture(n.TEXTURE0),n.bindTexture(o,i),t?n.pixelStorei(n.UNPACK_COLORSPACE_CONVERSION_WEBGL,n.NONE):n.pixelStorei(n.UNPACK_COLORSPACE_CONVERSION_WEBGL,n.BROWSER_DEFAULT_WEBGL);for(let r=0;r<e.length;r++){let s=e[r],a=r+1;for(let c of Ko.faceNames())bY(this[c],s[c],a)}n.bindTexture(o,null),this._hasMipmap=!0};Ko.prototype.generateMipmap=function(e){e=e??df.DONT_CARE,this._hasMipmap=!0;let t=this._context._gl,n=this._textureTarget;t.hint(t.GENERATE_MIPMAP_HINT,e),t.activeTexture(t.TEXTURE0),t.bindTexture(n,this._texture),t.generateMipmap(n),t.bindTexture(n,null)};Ko.createVertexArray=function(e){let t=Wa.createGeometry(Wa.fromDimensions({dimensions:new m(2,2,2),vertexFormat:Xe.POSITION_ONLY})),n=this._attributeLocations=Fn.createAttributeLocations(t);return ni.fromGeometry({context:e,geometry:t,attributeLocations:n,bufferUsage:Me.STATIC_DRAW})};Ko.prototype.isDestroyed=function(){return!1};Ko.prototype.destroy=function(){return this._context._gl.deleteTexture(this._texture),this._positiveX=me(this._positiveX),this._negativeX=me(this._negativeX),this._positiveY=me(this._positiveY),this._negativeY=me(this._negativeY),this._positiveZ=me(this._positiveZ),this._negativeZ=me(this._negativeZ),me(this)};var xr=Ko;var Vwt=_(T(),1);function bGe(e){this.context=e,this.framebuffer=void 0,this.blendingEnabled=void 0,this.scissorTest=void 0,this.viewport=void 0}var sc=bGe;var gUt=_(T(),1);var uUt=_(T(),1);var nUt=_(T(),1);var Rwt=_(T(),1),VR=`/** * A built-in GLSL floating-point constant for converting radians to degrees. * * @alias czm_degreesPerRadian * @glslConstant * * @see CesiumMath.DEGREES_PER_RADIAN * * @example * // GLSL declaration * const float czm_degreesPerRadian = ...; * * // Example * float deg = czm_degreesPerRadian * rad; */ const float czm_degreesPerRadian = 57.29577951308232; `;var Gwt=_(T(),1),LR=`/** * A built-in GLSL vec2 constant for defining the depth range. * This is a workaround to a bug where IE11 does not implement gl_DepthRange. * * @alias czm_depthRange * @glslConstant * * @example * // GLSL declaration * float depthRangeNear = czm_depthRange.near; * float depthRangeFar = czm_depthRange.far; * */ const czm_depthRangeStruct czm_depthRange = czm_depthRangeStruct(0.0, 1.0); `;var Iwt=_(T(),1),RR=`/** * 0.1 * * @name czm_epsilon1 * @glslConstant */ const float czm_epsilon1 = 0.1; `;var Wwt=_(T(),1),ZR=`/** * 0.01 * * @name czm_epsilon2 * @glslConstant */ const float czm_epsilon2 = 0.01; `;var vwt=_(T(),1),GR=`/** * 0.001 * * @name czm_epsilon3 * @glslConstant */ const float czm_epsilon3 = 0.001; `;var Fwt=_(T(),1),ER=`/** * 0.0001 * * @name czm_epsilon4 * @glslConstant */ const float czm_epsilon4 = 0.0001; `;var Mwt=_(T(),1),IR=`/** * 0.00001 * * @name czm_epsilon5 * @glslConstant */ const float czm_epsilon5 = 0.00001; `;var kwt=_(T(),1),XR=`/** * 0.000001 * * @name czm_epsilon6 * @glslConstant */ const float czm_epsilon6 = 0.000001; `;var Dwt=_(T(),1),WR=`/** * 0.0000001 * * @name czm_epsilon7 * @glslConstant */ const float czm_epsilon7 = 0.0000001; `;var Owt=_(T(),1),PR=`/** * DOC_TBA * * @name czm_infinity * @glslConstant */ const float czm_infinity = 5906376272000.0; // Distance from the Sun to Pluto in meters. TODO: What is best given lowp, mediump, and highp? `;var zwt=_(T(),1),vR=`/** * A built-in GLSL floating-point constant for <code>1/pi</code>. * * @alias czm_oneOverPi * @glslConstant * * @see CesiumMath.ONE_OVER_PI * * @example * // GLSL declaration * const float czm_oneOverPi = ...; * * // Example * float pi = 1.0 / czm_oneOverPi; */ const float czm_oneOverPi = 0.3183098861837907; `;var Kwt=_(T(),1),wR=`/** * A built-in GLSL floating-point constant for <code>1/2pi</code>. * * @alias czm_oneOverTwoPi * @glslConstant * * @see CesiumMath.ONE_OVER_TWO_PI * * @example * // GLSL declaration * const float czm_oneOverTwoPi = ...; * * // Example * float pi = 2.0 * czm_oneOverTwoPi; */ const float czm_oneOverTwoPi = 0.15915494309189535; `;var Qwt=_(T(),1),FR=`/** * The automatic GLSL constant for {@link Pass#CESIUM_3D_TILE} * * @name czm_passCesium3DTile * @glslConstant * * @see czm_pass */ const float czm_passCesium3DTile = 4.0; `;var qwt=_(T(),1),AR=`/** * The automatic GLSL constant for {@link Pass#CESIUM_3D_TILE_CLASSIFICATION} * * @name czm_passCesium3DTileClassification * @glslConstant * * @see czm_pass */ const float czm_passCesium3DTileClassification = 5.0; `;var eFt=_(T(),1),MR=`/** * The automatic GLSL constant for {@link Pass#CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW} * * @name czm_passCesium3DTileClassificationIgnoreShow * @glslConstant * * @see czm_pass */ const float czm_passCesium3DTileClassificationIgnoreShow = 6.0; `;var nFt=_(T(),1),NR=`/** * The automatic GLSL constant for {@link Pass#CLASSIFICATION} * * @name czm_passClassification * @glslConstant * * @see czm_pass */ const float czm_passClassification = 7.0; `;var oFt=_(T(),1),kR=`/** * The automatic GLSL constant for {@link Pass#COMPUTE} * * @name czm_passCompute * @glslConstant * * @see czm_pass */ const float czm_passCompute = 1.0; `;var sFt=_(T(),1),UR=`/** * The automatic GLSL constant for {@link Pass#ENVIRONMENT} * * @name czm_passEnvironment * @glslConstant * * @see czm_pass */ const float czm_passEnvironment = 0.0; `;var cFt=_(T(),1),DR=`/** * The automatic GLSL constant for {@link Pass#GLOBE} * * @name czm_passGlobe * @glslConstant * * @see czm_pass */ const float czm_passGlobe = 2.0; `;var dFt=_(T(),1),BR=`/** * The automatic GLSL constant for {@link Pass#OPAQUE} * * @name czm_passOpaque * @glslConstant * * @see czm_pass */ const float czm_passOpaque = 7.0; `;var mFt=_(T(),1),OR=`/** * The automatic GLSL constant for {@link Pass#OVERLAY} * * @name czm_passOverlay * @glslConstant * * @see czm_pass */ const float czm_passOverlay = 10.0; `;var fFt=_(T(),1),YR=`/** * The automatic GLSL constant for {@link Pass#TERRAIN_CLASSIFICATION} * * @name czm_passTerrainClassification * @glslConstant * * @see czm_pass */ const float czm_passTerrainClassification = 3.0; `;var bFt=_(T(),1),zR=`/** * The automatic GLSL constant for {@link Pass#TRANSLUCENT} * * @name czm_passTranslucent * @glslConstant * * @see czm_pass */ const float czm_passTranslucent = 8.0; `;var yFt=_(T(),1),HR=`/** * The automatic GLSL constant for {@link Pass#VOXELS} * * @name czm_passVoxels * @glslConstant * * @see czm_pass */ const float czm_passVoxels = 9.0; `;var _Ft=_(T(),1),KR=`/** * A built-in GLSL floating-point constant for <code>Math.PI</code>. * * @alias czm_pi * @glslConstant * * @see CesiumMath.PI * * @example * // GLSL declaration * const float czm_pi = ...; * * // Example * float twoPi = 2.0 * czm_pi; */ const float czm_pi = 3.141592653589793; `;var SFt=_(T(),1),JR=`/** * A built-in GLSL floating-point constant for <code>pi/4</code>. * * @alias czm_piOverFour * @glslConstant * * @see CesiumMath.PI_OVER_FOUR * * @example * // GLSL declaration * const float czm_piOverFour = ...; * * // Example * float pi = 4.0 * czm_piOverFour; */ const float czm_piOverFour = 0.7853981633974483; `;var VFt=_(T(),1),QR=`/** * A built-in GLSL floating-point constant for <code>pi/6</code>. * * @alias czm_piOverSix * @glslConstant * * @see CesiumMath.PI_OVER_SIX * * @example * // GLSL declaration * const float czm_piOverSix = ...; * * // Example * float pi = 6.0 * czm_piOverSix; */ const float czm_piOverSix = 0.5235987755982988; `;var RFt=_(T(),1),jR=`/** * A built-in GLSL floating-point constant for <code>pi/3</code>. * * @alias czm_piOverThree * @glslConstant * * @see CesiumMath.PI_OVER_THREE * * @example * // GLSL declaration * const float czm_piOverThree = ...; * * // Example * float pi = 3.0 * czm_piOverThree; */ const float czm_piOverThree = 1.0471975511965976; `;var GFt=_(T(),1),qR=`/** * A built-in GLSL floating-point constant for <code>pi/2</code>. * * @alias czm_piOverTwo * @glslConstant * * @see CesiumMath.PI_OVER_TWO * * @example * // GLSL declaration * const float czm_piOverTwo = ...; * * // Example * float pi = 2.0 * czm_piOverTwo; */ const float czm_piOverTwo = 1.5707963267948966; `;var IFt=_(T(),1),$R=`/** * A built-in GLSL floating-point constant for converting degrees to radians. * * @alias czm_radiansPerDegree * @glslConstant * * @see CesiumMath.RADIANS_PER_DEGREE * * @example * // GLSL declaration * const float czm_radiansPerDegree = ...; * * // Example * float rad = czm_radiansPerDegree * deg; */ const float czm_radiansPerDegree = 0.017453292519943295; `;var WFt=_(T(),1),eZ=`/** * The constant identifier for the 2D {@link SceneMode} * * @name czm_sceneMode2D * @glslConstant * @see czm_sceneMode * @see czm_sceneModeColumbusView * @see czm_sceneMode3D * @see czm_sceneModeMorphing */ const float czm_sceneMode2D = 2.0; `;var vFt=_(T(),1),tZ=`/** * The constant identifier for the 3D {@link SceneMode} * * @name czm_sceneMode3D * @glslConstant * @see czm_sceneMode * @see czm_sceneMode2D * @see czm_sceneModeColumbusView * @see czm_sceneModeMorphing */ const float czm_sceneMode3D = 3.0; `;var FFt=_(T(),1),nZ=`/** * The constant identifier for the Columbus View {@link SceneMode} * * @name czm_sceneModeColumbusView * @glslConstant * @see czm_sceneMode * @see czm_sceneMode2D * @see czm_sceneMode3D * @see czm_sceneModeMorphing */ const float czm_sceneModeColumbusView = 1.0; `;var MFt=_(T(),1),iZ=`/** * The constant identifier for the Morphing {@link SceneMode} * * @name czm_sceneModeMorphing * @glslConstant * @see czm_sceneMode * @see czm_sceneMode2D * @see czm_sceneModeColumbusView * @see czm_sceneMode3D */ const float czm_sceneModeMorphing = 0.0; `;var kFt=_(T(),1),oZ=`/** * A built-in GLSL floating-point constant for one solar radius. * * @alias czm_solarRadius * @glslConstant * * @see CesiumMath.SOLAR_RADIUS * * @example * // GLSL declaration * const float czm_solarRadius = ...; */ const float czm_solarRadius = 695500000.0; `;var DFt=_(T(),1),rZ=`/** * A built-in GLSL floating-point constant for <code>3pi/2</code>. * * @alias czm_threePiOver2 * @glslConstant * * @see CesiumMath.THREE_PI_OVER_TWO * * @example * // GLSL declaration * const float czm_threePiOver2 = ...; * * // Example * float pi = (2.0 / 3.0) * czm_threePiOver2; */ const float czm_threePiOver2 = 4.71238898038469; `;var OFt=_(T(),1),sZ=`/** * A built-in GLSL floating-point constant for <code>2pi</code>. * * @alias czm_twoPi * @glslConstant * * @see CesiumMath.TWO_PI * * @example * // GLSL declaration * const float czm_twoPi = ...; * * // Example * float pi = czm_twoPi / 2.0; */ const float czm_twoPi = 6.283185307179586; `;var zFt=_(T(),1),aZ=`/** * The maximum latitude, in radians, both North and South, supported by a Web Mercator * (EPSG:3857) projection. Technically, the Mercator projection is defined * for any latitude up to (but not including) 90 degrees, but it makes sense * to cut it off sooner because it grows exponentially with increasing latitude. * The logic behind this particular cutoff value, which is the one used by * Google Maps, Bing Maps, and Esri, is that it makes the projection * square. That is, the rectangle is equal in the X and Y directions. * * The constant value is computed as follows: * czm_pi * 0.5 - (2.0 * atan(exp(-czm_pi))) * * @name czm_webMercatorMaxLatitude * @glslConstant */ const float czm_webMercatorMaxLatitude = 1.4844222297453324; `;var KFt=_(T(),1),cZ=`/** * @name czm_depthRangeStruct * @glslStruct */ struct czm_depthRangeStruct { float near; float far; }; `;var QFt=_(T(),1),lZ=`/** * Holds material information that can be used for lighting. Returned by all czm_getMaterial functions. * * @name czm_material * @glslStruct * * @property {vec3} diffuse Incoming light that scatters evenly in all directions. * @property {float} specular Intensity of incoming light reflecting in a single direction. * @property {float} shininess The sharpness of the specular reflection. Higher values create a smaller, more focused specular highlight. * @property {vec3} normal Surface's normal in eye coordinates. It is used for effects such as normal mapping. The default is the surface's unmodified normal. * @property {vec3} emission Light emitted by the material equally in all directions. The default is vec3(0.0), which emits no light. * @property {float} alpha Alpha of this material. 0.0 is completely transparent; 1.0 is completely opaque. */ struct czm_material { vec3 diffuse; float specular; float shininess; vec3 normal; vec3 emission; float alpha; }; `;var qFt=_(T(),1),dZ=`/** * Used as input to every material's czm_getMaterial function. * * @name czm_materialInput * @glslStruct * * @property {float} s 1D texture coordinates. * @property {vec2} st 2D texture coordinates. * @property {vec3} str 3D texture coordinates. * @property {vec3} normalEC Unperturbed surface normal in eye coordinates. * @property {mat3} tangentToEyeMatrix Matrix for converting a tangent space normal to eye space. * @property {vec3} positionToEyeEC Vector from the fragment to the eye in eye coordinates. The magnitude is the distance in meters from the fragment to the eye. * @property {float} height The height of the terrain in meters above or below the ellipsoid. Only available for globe materials. * @property {float} slope The slope of the terrain in radians. 0 is flat; pi/2 is vertical. Only available for globe materials. * @property {float} aspect The aspect of the terrain in radians. 0 is East, pi/2 is North, pi is West, 3pi/2 is South. Only available for globe materials. * @property {float} waterMask The value of the water mask. 0 is land, 1 is water. Only available for globe materials. */ struct czm_materialInput { float s; vec2 st; vec3 str; vec3 normalEC; mat3 tangentToEyeMatrix; vec3 positionToEyeEC; float height; float slope; float aspect; float waterMask; }; `;var e9t=_(T(),1),uZ=`/** * Struct for representing a material for a {@link Model}. The model * rendering pipeline will pass this struct between material, custom shaders, * and lighting stages. This is not to be confused with {@link czm_material} * which is used by the older Fabric materials system, although they are similar. * <p> * All color values (diffuse, specular, emissive) are in linear color space. * </p> * * @name czm_modelMaterial * @glslStruct * * @property {vec4} baseColor The base color of the material. * @property {vec3} diffuse Incoming light that scatters evenly in all directions. * @property {float} alpha Alpha of this material. 0.0 is completely transparent; 1.0 is completely opaque. * @property {vec3} specular Color of reflected light at normal incidence in PBR materials. This is sometimes referred to as f0 in the literature. * @property {float} roughness A number from 0.0 to 1.0 representing how rough the surface is. Values near 0.0 produce glossy surfaces, while values near 1.0 produce rough surfaces. * @property {vec3} normalEC Surface's normal in eye coordinates. It is used for effects such as normal mapping. The default is the surface's unmodified normal. * @property {float} occlusion Ambient occlusion recieved at this point on the material. 1.0 means fully lit, 0.0 means fully occluded. * @property {vec3} emissive Light emitted by the material equally in all directions. The default is vec3(0.0), which emits no light. */ struct czm_modelMaterial { vec4 baseColor; vec3 diffuse; float alpha; vec3 specular; float roughness; vec3 normalEC; float occlusion; vec3 emissive; #ifdef USE_SPECULAR float specularWeight; #endif #ifdef USE_ANISOTROPY vec3 anisotropicT; vec3 anisotropicB; float anisotropyStrength; #endif #ifdef USE_CLEARCOAT float clearcoatFactor; float clearcoatRoughness; vec3 clearcoatNormal; // Add clearcoatF0 when KHR_materials_ior is implemented #endif }; `;var n9t=_(T(),1),mZ=`/** * Struct for representing the output of a custom vertex shader. * * @name czm_modelVertexOutput * @glslStruct * * @see {@link CustomShader} * @see {@link Model} * * @property {vec3} positionMC The position of the vertex in model coordinates * @property {float} pointSize A custom value for gl_PointSize. This is only used for point primitives. */ struct czm_modelVertexOutput { vec3 positionMC; float pointSize; }; `;var o9t=_(T(),1),hZ=`/** * DOC_TBA * * @name czm_ray * @glslStruct */ struct czm_ray { vec3 origin; vec3 direction; }; `;var s9t=_(T(),1),fZ=`/** * DOC_TBA * * @name czm_raySegment * @glslStruct */ struct czm_raySegment { float start; float stop; }; /** * DOC_TBA * * @name czm_emptyRaySegment * @glslConstant */ const czm_raySegment czm_emptyRaySegment = czm_raySegment(-czm_infinity, -czm_infinity); /** * DOC_TBA * * @name czm_fullRaySegment * @glslConstant */ const czm_raySegment czm_fullRaySegment = czm_raySegment(0.0, czm_infinity); `;var c9t=_(T(),1),pZ=`struct czm_shadowParameters { #ifdef USE_CUBE_MAP_SHADOW vec3 texCoords; #else vec2 texCoords; #endif float depthBias; float depth; float nDotL; vec2 texelStepSize; float normalShadingSmooth; float darkness; }; `;var d9t=_(T(),1),bZ=`/** * Converts an HSB color (hue, saturation, brightness) to RGB * HSB <-> RGB conversion with minimal branching: {@link http://lolengine.net/blog/2013/07/27/rgb-to-hsv-in-glsl} * * @name czm_HSBToRGB * @glslFunction * * @param {vec3} hsb The color in HSB. * * @returns {vec3} The color in RGB. * * @example * vec3 hsb = czm_RGBToHSB(rgb); * hsb.z *= 0.1; * rgb = czm_HSBToRGB(hsb); */ const vec4 K_HSB2RGB = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); vec3 czm_HSBToRGB(vec3 hsb) { vec3 p = abs(fract(hsb.xxx + K_HSB2RGB.xyz) * 6.0 - K_HSB2RGB.www); return hsb.z * mix(K_HSB2RGB.xxx, clamp(p - K_HSB2RGB.xxx, 0.0, 1.0), hsb.y); } `;var m9t=_(T(),1),gZ=`/** * Converts an HSL color (hue, saturation, lightness) to RGB * HSL <-> RGB conversion: {@link http://www.chilliant.com/rgb2hsv.html} * * @name czm_HSLToRGB * @glslFunction * * @param {vec3} rgb The color in HSL. * * @returns {vec3} The color in RGB. * * @example * vec3 hsl = czm_RGBToHSL(rgb); * hsl.z *= 0.1; * rgb = czm_HSLToRGB(hsl); */ vec3 hueToRGB(float hue) { float r = abs(hue * 6.0 - 3.0) - 1.0; float g = 2.0 - abs(hue * 6.0 - 2.0); float b = 2.0 - abs(hue * 6.0 - 4.0); return clamp(vec3(r, g, b), 0.0, 1.0); } vec3 czm_HSLToRGB(vec3 hsl) { vec3 rgb = hueToRGB(hsl.x); float c = (1.0 - abs(2.0 * hsl.z - 1.0)) * hsl.y; return (rgb - 0.5) * c + hsl.z; } `;var f9t=_(T(),1),yZ=`/** * Converts an RGB color to HSB (hue, saturation, brightness) * HSB <-> RGB conversion with minimal branching: {@link http://lolengine.net/blog/2013/07/27/rgb-to-hsv-in-glsl} * * @name czm_RGBToHSB * @glslFunction * * @param {vec3} rgb The color in RGB. * * @returns {vec3} The color in HSB. * * @example * vec3 hsb = czm_RGBToHSB(rgb); * hsb.z *= 0.1; * rgb = czm_HSBToRGB(hsb); */ const vec4 K_RGB2HSB = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); vec3 czm_RGBToHSB(vec3 rgb) { vec4 p = mix(vec4(rgb.bg, K_RGB2HSB.wz), vec4(rgb.gb, K_RGB2HSB.xy), step(rgb.b, rgb.g)); vec4 q = mix(vec4(p.xyw, rgb.r), vec4(rgb.r, p.yzx), step(p.x, rgb.r)); float d = q.x - min(q.w, q.y); return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + czm_epsilon7)), d / (q.x + czm_epsilon7), q.x); } `;var b9t=_(T(),1),xZ=`/** * Converts an RGB color to HSL (hue, saturation, lightness) * HSL <-> RGB conversion: {@link http://www.chilliant.com/rgb2hsv.html} * * @name czm_RGBToHSL * @glslFunction * * @param {vec3} rgb The color in RGB. * * @returns {vec3} The color in HSL. * * @example * vec3 hsl = czm_RGBToHSL(rgb); * hsl.z *= 0.1; * rgb = czm_HSLToRGB(hsl); */ vec3 RGBtoHCV(vec3 rgb) { // Based on work by Sam Hocevar and Emil Persson vec4 p = (rgb.g < rgb.b) ? vec4(rgb.bg, -1.0, 2.0 / 3.0) : vec4(rgb.gb, 0.0, -1.0 / 3.0); vec4 q = (rgb.r < p.x) ? vec4(p.xyw, rgb.r) : vec4(rgb.r, p.yzx); float c = q.x - min(q.w, q.y); float h = abs((q.w - q.y) / (6.0 * c + czm_epsilon7) + q.z); return vec3(h, c, q.x); } vec3 czm_RGBToHSL(vec3 rgb) { vec3 hcv = RGBtoHCV(rgb); float l = hcv.z - hcv.y * 0.5; float s = hcv.y / (1.0 - abs(l * 2.0 - 1.0) + czm_epsilon7); return vec3(hcv.x, s, l); } `;var y9t=_(T(),1),_Z=`/** * Converts an RGB color to CIE Yxy. * <p>The conversion is described in * {@link http://content.gpwiki.org/index.php/D3DBook:High-Dynamic_Range_Rendering#Luminance_Transform|Luminance Transform} * </p> * * @name czm_RGBToXYZ * @glslFunction * * @param {vec3} rgb The color in RGB. * * @returns {vec3} The color in CIE Yxy. * * @example * vec3 xyz = czm_RGBToXYZ(rgb); * xyz.x = max(xyz.x - luminanceThreshold, 0.0); * rgb = czm_XYZToRGB(xyz); */ vec3 czm_RGBToXYZ(vec3 rgb) { const mat3 RGB2XYZ = mat3(0.4124, 0.2126, 0.0193, 0.3576, 0.7152, 0.1192, 0.1805, 0.0722, 0.9505); vec3 xyz = RGB2XYZ * rgb; vec3 Yxy; Yxy.r = xyz.g; float temp = dot(vec3(1.0), xyz); Yxy.gb = xyz.rg / temp; return Yxy; } `;var _9t=_(T(),1),TZ=`/** * Converts a CIE Yxy color to RGB. * <p>The conversion is described in * {@link http://content.gpwiki.org/index.php/D3DBook:High-Dynamic_Range_Rendering#Luminance_Transform|Luminance Transform} * </p> * * @name czm_XYZToRGB * @glslFunction * * @param {vec3} Yxy The color in CIE Yxy. * * @returns {vec3} The color in RGB. * * @example * vec3 xyz = czm_RGBToXYZ(rgb); * xyz.x = max(xyz.x - luminanceThreshold, 0.0); * rgb = czm_XYZToRGB(xyz); */ vec3 czm_XYZToRGB(vec3 Yxy) { const mat3 XYZ2RGB = mat3( 3.2405, -0.9693, 0.0556, -1.5371, 1.8760, -0.2040, -0.4985, 0.0416, 1.0572); vec3 xyz; xyz.r = Yxy.r * Yxy.g / Yxy.b; xyz.g = Yxy.r; xyz.b = Yxy.r * (1.0 - Yxy.g - Yxy.b) / Yxy.b; return XYZ2RGB * xyz; } `;var S9t=_(T(),1),SZ=`// See: // https://knarkowicz.wordpress.com/2016/01/06/aces-filmic-tone-mapping-curve/ vec3 czm_acesTonemapping(vec3 color) { float g = 0.985; float a = 0.065; float b = 0.0001; float c = 0.433; float d = 0.238; color = (color * (color + a) - b) / (color * (g * color + c) + d); color = clamp(color, 0.0, 1.0); return color; } `;var V9t=_(T(),1),CZ=`/** * @private */ float czm_alphaWeight(float a) { float z = (gl_FragCoord.z - czm_viewportTransformation[3][2]) / czm_viewportTransformation[2][2]; // See Weighted Blended Order-Independent Transparency for examples of different weighting functions: // http://jcgt.org/published/0002/02/09/ return pow(a + 0.01, 4.0) + max(1e-2, min(3.0 * 1e3, 0.003 / (1e-5 + pow(abs(z) / 200.0, 4.0)))); } `;var R9t=_(T(),1),VZ=`/** * Procedural anti-aliasing by blurring two colors that meet at a sharp edge. * * @name czm_antialias * @glslFunction * * @param {vec4} color1 The color on one side of the edge. * @param {vec4} color2 The color on the other side of the edge. * @param {vec4} currentcolor The current color, either <code>color1</code> or <code>color2</code>. * @param {float} dist The distance to the edge in texture coordinates. * @param {float} [fuzzFactor=0.1] Controls the blurriness between the two colors. * @returns {vec4} The anti-aliased color. * * @example * // GLSL declarations * vec4 czm_antialias(vec4 color1, vec4 color2, vec4 currentColor, float dist, float fuzzFactor); * vec4 czm_antialias(vec4 color1, vec4 color2, vec4 currentColor, float dist); * * // get the color for a material that has a sharp edge at the line y = 0.5 in texture space * float dist = abs(textureCoordinates.t - 0.5); * vec4 currentColor = mix(bottomColor, topColor, step(0.5, textureCoordinates.t)); * vec4 color = czm_antialias(bottomColor, topColor, currentColor, dist, 0.1); */ vec4 czm_antialias(vec4 color1, vec4 color2, vec4 currentColor, float dist, float fuzzFactor) { float val1 = clamp(dist / fuzzFactor, 0.0, 1.0); float val2 = clamp((dist - 0.5) / fuzzFactor, 0.0, 1.0); val1 = val1 * (1.0 - val2); val1 = val1 * val1 * (3.0 - (2.0 * val1)); val1 = pow(val1, 0.5); //makes the transition nicer vec4 midColor = (color1 + color2) * 0.5; return mix(midColor, currentColor, val1); } vec4 czm_antialias(vec4 color1, vec4 color2, vec4 currentColor, float dist) { return czm_antialias(color1, color2, currentColor, dist, 0.1); } `;var G9t=_(T(),1),LZ=`/** * Apply a HSB color shift to an RGB color. * * @param {vec3} rgb The color in RGB space. * @param {vec3} hsbShift The amount to shift each component. The xyz components correspond to hue, saturation, and brightness. Shifting the hue by +/- 1.0 corresponds to shifting the hue by a full cycle. Saturation and brightness are clamped between 0 and 1 after the adjustment * @param {bool} ignoreBlackPixels If true, black pixels will be unchanged. This is necessary in some shaders such as atmosphere-related effects. * * @return {vec3} The RGB color after shifting in HSB space and clamping saturation and brightness to a valid range. */ vec3 czm_applyHSBShift(vec3 rgb, vec3 hsbShift, bool ignoreBlackPixels) { // Convert rgb color to hsb vec3 hsb = czm_RGBToHSB(rgb); // Perform hsb shift // Hue cycles around so no clamp is needed. hsb.x += hsbShift.x; // hue hsb.y = clamp(hsb.y + hsbShift.y, 0.0, 1.0); // saturation // brightness // // Some shaders such as atmosphere-related effects need to leave black // pixels unchanged if (ignoreBlackPixels) { hsb.z = hsb.z > czm_epsilon7 ? hsb.z + hsbShift.z : 0.0; } else { hsb.z = hsb.z + hsbShift.z; } hsb.z = clamp(hsb.z, 0.0, 1.0); // Convert shifted hsb back to rgb return czm_HSBToRGB(hsb); } `;var I9t=_(T(),1),RZ=`/** * Approximately computes spherical coordinates given a normal. * Uses approximate inverse trigonometry for speed and consistency, * since inverse trigonometry can differ from vendor-to-vendor and when compared with the CPU. * * @name czm_approximateSphericalCoordinates * @glslFunction * * @param {vec3} normal arbitrary-length normal. * * @returns {vec2} Approximate latitude and longitude spherical coordinates. */ vec2 czm_approximateSphericalCoordinates(vec3 normal) { // Project into plane with vertical for latitude float latitudeApproximation = czm_fastApproximateAtan(sqrt(normal.x * normal.x + normal.y * normal.y), normal.z); float longitudeApproximation = czm_fastApproximateAtan(normal.x, normal.y); return vec2(latitudeApproximation, longitudeApproximation); } `;var W9t=_(T(),1),ZZ=`/** * Compute a rational approximation to tanh(x) * * @param {float} x A real number input * @returns {float} An approximation for tanh(x) */ float czm_approximateTanh(float x) { float x2 = x * x; return max(-1.0, min(1.0, x * (27.0 + x2) / (27.0 + 9.0 * x2))); } `;var v9t=_(T(),1),GZ=`/** * Determines if the fragment is back facing * * @name czm_backFacing * @glslFunction * * @returns {bool} <code>true</code> if the fragment is back facing; otherwise, <code>false</code>. */ bool czm_backFacing() { // !gl_FrontFacing doesn't work as expected on Mac/Intel so use the more verbose form instead. See https://github.com/CesiumGS/cesium/pull/8494. return gl_FrontFacing == false; } `;var F9t=_(T(),1),EZ=`/** * Branchless ternary operator to be used when it's inexpensive to explicitly * evaluate both possibilities for a float expression. * * @name czm_branchFreeTernary * @glslFunction * * @param {bool} comparison A comparison statement * @param {float} a Value to return if the comparison is true. * @param {float} b Value to return if the comparison is false. * * @returns {float} equivalent of comparison ? a : b */ float czm_branchFreeTernary(bool comparison, float a, float b) { float useA = float(comparison); return a * useA + b * (1.0 - useA); } /** * Branchless ternary operator to be used when it's inexpensive to explicitly * evaluate both possibilities for a vec2 expression. * * @name czm_branchFreeTernary * @glslFunction * * @param {bool} comparison A comparison statement * @param {vec2} a Value to return if the comparison is true. * @param {vec2} b Value to return if the comparison is false. * * @returns {vec2} equivalent of comparison ? a : b */ vec2 czm_branchFreeTernary(bool comparison, vec2 a, vec2 b) { float useA = float(comparison); return a * useA + b * (1.0 - useA); } /** * Branchless ternary operator to be used when it's inexpensive to explicitly * evaluate both possibilities for a vec3 expression. * * @name czm_branchFreeTernary * @glslFunction * * @param {bool} comparison A comparison statement * @param {vec3} a Value to return if the comparison is true. * @param {vec3} b Value to return if the comparison is false. * * @returns {vec3} equivalent of comparison ? a : b */ vec3 czm_branchFreeTernary(bool comparison, vec3 a, vec3 b) { float useA = float(comparison); return a * useA + b * (1.0 - useA); } /** * Branchless ternary operator to be used when it's inexpensive to explicitly * evaluate both possibilities for a vec4 expression. * * @name czm_branchFreeTernary * @glslFunction * * @param {bool} comparison A comparison statement * @param {vec3} a Value to return if the comparison is true. * @param {vec3} b Value to return if the comparison is false. * * @returns {vec3} equivalent of comparison ? a : b */ vec4 czm_branchFreeTernary(bool comparison, vec4 a, vec4 b) { float useA = float(comparison); return a * useA + b * (1.0 - useA); } `;var M9t=_(T(),1),IZ=` vec4 czm_cascadeColor(vec4 weights) { return vec4(1.0, 0.0, 0.0, 1.0) * weights.x + vec4(0.0, 1.0, 0.0, 1.0) * weights.y + vec4(0.0, 0.0, 1.0, 1.0) * weights.z + vec4(1.0, 0.0, 1.0, 1.0) * weights.w; } `;var k9t=_(T(),1),XZ=` uniform vec4 shadowMap_cascadeDistances; float czm_cascadeDistance(vec4 weights) { return dot(shadowMap_cascadeDistances, weights); } `;var D9t=_(T(),1),WZ=` uniform mat4 shadowMap_cascadeMatrices[4]; mat4 czm_cascadeMatrix(vec4 weights) { return shadowMap_cascadeMatrices[0] * weights.x + shadowMap_cascadeMatrices[1] * weights.y + shadowMap_cascadeMatrices[2] * weights.z + shadowMap_cascadeMatrices[3] * weights.w; } `;var O9t=_(T(),1),PZ=` uniform vec4 shadowMap_cascadeSplits[2]; vec4 czm_cascadeWeights(float depthEye) { // One component is set to 1.0 and all others set to 0.0. vec4 near = step(shadowMap_cascadeSplits[0], vec4(depthEye)); vec4 far = step(depthEye, shadowMap_cascadeSplits[1]); return near * far; } `;var z9t=_(T(),1),vZ=`float getSignedDistance(vec2 uv, highp sampler2D clippingDistance) { float signedDistance = texture(clippingDistance, uv).r; return (signedDistance - 0.5) * 2.0; } void czm_clipPolygons(highp sampler2D clippingDistance, int extentsLength, vec2 clippingPosition, int regionIndex) { // Position is completely outside of polygons bounds vec2 rectUv = clippingPosition; if (regionIndex < 0 || rectUv.x <= 0.0 || rectUv.y <= 0.0 || rectUv.x >= 1.0 || rectUv.y >= 1.0) { #ifdef CLIPPING_INVERSE discard; #endif return; } vec2 clippingDistanceTextureDimensions = vec2(textureSize(clippingDistance, 0)); vec2 sampleOffset = max(1.0 / clippingDistanceTextureDimensions, vec2(0.005)); float dimension = float(extentsLength); if (extentsLength > 2) { dimension = ceil(log2(float(extentsLength))); } vec2 textureOffset = vec2(mod(float(regionIndex), dimension), floor(float(regionIndex) / dimension)) / dimension; vec2 uv = textureOffset + rectUv / dimension; float signedDistance = getSignedDistance(uv, clippingDistance); #ifdef CLIPPING_INVERSE if (signedDistance > 0.0) { discard; } #else if (signedDistance < 0.0) { discard; } #endif } `;var K9t=_(T(),1),wZ=`/** * DOC_TBA * * @name czm_columbusViewMorph * @glslFunction */ vec4 czm_columbusViewMorph(vec4 position2D, vec4 position3D, float time) { // Just linear for now. vec3 p = mix(position2D.xyz, position3D.xyz, time); return vec4(p, 1.0); } `;var Q9t=_(T(),1),FZ=`/** * Compute the atmosphere color, applying Rayleigh and Mie scattering. This * builtin uses automatic uniforms so the atmophere settings are synced with the * state of the Scene, even in other contexts like Model. * * @name czm_computeAtmosphereColor * @glslFunction * * @param {vec3} positionWC Position of the fragment in world coords (low precision) * @param {vec3} lightDirection Light direction from the sun or other light source. * @param {vec3} rayleighColor The Rayleigh scattering color computed by a scattering function * @param {vec3} mieColor The Mie scattering color computed by a scattering function * @param {float} opacity The opacity computed by a scattering function. */ vec4 czm_computeAtmosphereColor( vec3 positionWC, vec3 lightDirection, vec3 rayleighColor, vec3 mieColor, float opacity ) { // Setup the primary ray: from the camera position to the vertex position. vec3 cameraToPositionWC = positionWC - czm_viewerPositionWC; vec3 cameraToPositionWCDirection = normalize(cameraToPositionWC); float cosAngle = dot(cameraToPositionWCDirection, lightDirection); float cosAngleSq = cosAngle * cosAngle; float G = czm_atmosphereMieAnisotropy; float GSq = G * G; // The Rayleigh phase function. float rayleighPhase = 3.0 / (50.2654824574) * (1.0 + cosAngleSq); // The Mie phase function. float miePhase = 3.0 / (25.1327412287) * ((1.0 - GSq) * (cosAngleSq + 1.0)) / (pow(1.0 + GSq - 2.0 * cosAngle * G, 1.5) * (2.0 + GSq)); // The final color is generated by combining the effects of the Rayleigh and Mie scattering. vec3 rayleigh = rayleighPhase * rayleighColor; vec3 mie = miePhase * mieColor; vec3 color = (rayleigh + mie) * czm_atmosphereLightIntensity; return vec4(color, opacity); } /** * Compute the atmosphere color, applying Rayleigh and Mie scattering. This * builtin uses automatic uniforms so the atmophere settings are synced with the * state of the Scene, even in other contexts like Model. * * @name czm_computeAtmosphereColor * @glslFunction * * @param {czm_ray} primaryRay Ray from the origin to sky fragment to in world coords (low precision) * @param {vec3} lightDirection Light direction from the sun or other light source. * @param {vec3} rayleighColor The Rayleigh scattering color computed by a scattering function * @param {vec3} mieColor The Mie scattering color computed by a scattering function * @param {float} opacity The opacity computed by a scattering function. */ vec4 czm_computeAtmosphereColor( czm_ray primaryRay, vec3 lightDirection, vec3 rayleighColor, vec3 mieColor, float opacity ) { vec3 direction = normalize(primaryRay.direction); float cosAngle = dot(direction, lightDirection); float cosAngleSq = cosAngle * cosAngle; float G = czm_atmosphereMieAnisotropy; float GSq = G * G; // The Rayleigh phase function. float rayleighPhase = 3.0 / (50.2654824574) * (1.0 + cosAngleSq); // The Mie phase function. float miePhase = 3.0 / (25.1327412287) * ((1.0 - GSq) * (cosAngleSq + 1.0)) / (pow(1.0 + GSq - 2.0 * cosAngle * G, 1.5) * (2.0 + GSq)); // The final color is generated by combining the effects of the Rayleigh and Mie scattering. vec3 rayleigh = rayleighPhase * rayleighColor; vec3 mie = miePhase * mieColor; vec3 color = (rayleigh + mie) * czm_atmosphereLightIntensity; return vec4(color, opacity); } `;var q9t=_(T(),1),AZ=`/** * Compute atmosphere scattering for the ground atmosphere and fog. This method * uses automatic uniforms so it is always synced with the scene settings. * * @name czm_computeGroundAtmosphereScattering * @glslfunction * * @param {vec3} positionWC The position of the fragment in world coordinates. * @param {vec3} lightDirection The direction of the light to calculate the scattering from. * @param {vec3} rayleighColor The variable the Rayleigh scattering will be written to. * @param {vec3} mieColor The variable the Mie scattering will be written to. * @param {float} opacity The variable the transmittance will be written to. */ void czm_computeGroundAtmosphereScattering(vec3 positionWC, vec3 lightDirection, out vec3 rayleighColor, out vec3 mieColor, out float opacity) { vec3 cameraToPositionWC = positionWC - czm_viewerPositionWC; vec3 cameraToPositionWCDirection = normalize(cameraToPositionWC); czm_ray primaryRay = czm_ray(czm_viewerPositionWC, cameraToPositionWCDirection); float atmosphereInnerRadius = length(positionWC); czm_computeScattering( primaryRay, length(cameraToPositionWC), lightDirection, atmosphereInnerRadius, rayleighColor, mieColor, opacity ); } `;var eAt=_(T(),1),MZ=`/** * Returns a position in model coordinates relative to eye taking into * account the current scene mode: 3D, 2D, or Columbus view. * <p> * This uses standard position attributes, <code>position3DHigh</code>, * <code>position3DLow</code>, <code>position2DHigh</code>, and <code>position2DLow</code>, * and should be used when writing a vertex shader for an {@link Appearance}. * </p> * * @name czm_computePosition * @glslFunction * * @returns {vec4} The position relative to eye. * * @example * vec4 p = czm_computePosition(); * v_positionEC = (czm_modelViewRelativeToEye * p).xyz; * gl_Position = czm_modelViewProjectionRelativeToEye * p; * * @see czm_translateRelativeToEye */ vec4 czm_computePosition(); `;var nAt=_(T(),1),NZ=`/** * This function computes the colors contributed by Rayliegh and Mie scattering on a given ray, as well as * the transmittance value for the ray. This function uses automatic uniforms * so the atmosphere settings are always synced with the current scene. * * @name czm_computeScattering * @glslfunction * * @param {czm_ray} primaryRay The ray from the camera to the position. * @param {float} primaryRayLength The length of the primary ray. * @param {vec3} lightDirection The direction of the light to calculate the scattering from. * @param {vec3} rayleighColor The variable the Rayleigh scattering will be written to. * @param {vec3} mieColor The variable the Mie scattering will be written to. * @param {float} opacity The variable the transmittance will be written to. */ void czm_computeScattering( czm_ray primaryRay, float primaryRayLength, vec3 lightDirection, float atmosphereInnerRadius, out vec3 rayleighColor, out vec3 mieColor, out float opacity ) { const float ATMOSPHERE_THICKNESS = 111e3; // The thickness of the atmosphere in meters. const int PRIMARY_STEPS_MAX = 16; // Maximum number of times the ray from the camera to the world position (primary ray) is sampled. const int LIGHT_STEPS_MAX = 4; // Maximum number of times the light is sampled from the light source's intersection with the atmosphere to a sample position on the primary ray. // Initialize the default scattering amounts to 0. rayleighColor = vec3(0.0); mieColor = vec3(0.0); opacity = 0.0; float atmosphereOuterRadius = atmosphereInnerRadius + ATMOSPHERE_THICKNESS; vec3 origin = vec3(0.0); // Calculate intersection from the camera to the outer ring of the atmosphere. czm_raySegment primaryRayAtmosphereIntersect = czm_raySphereIntersectionInterval(primaryRay, origin, atmosphereOuterRadius); // Return empty colors if no intersection with the atmosphere geometry. if (primaryRayAtmosphereIntersect == czm_emptyRaySegment) { return; } // To deal with smaller values of PRIMARY_STEPS (e.g. 4) // we implement a split strategy: sky or horizon. // For performance reasons, instead of a if/else branch // a soft choice is implemented through a weight 0.0 <= w_stop_gt_lprl <= 1.0 float x = 1e-7 * primaryRayAtmosphereIntersect.stop / length(primaryRayLength); // Value close to 0.0: close to the horizon // Value close to 1.0: above in the sky float w_stop_gt_lprl = 0.5 * (1.0 + czm_approximateTanh(x)); // The ray should start from the first intersection with the outer atmopshere, or from the camera position, if it is inside the atmosphere. float start_0 = primaryRayAtmosphereIntersect.start; primaryRayAtmosphereIntersect.start = max(primaryRayAtmosphereIntersect.start, 0.0); // The ray should end at the exit from the atmosphere or at the distance to the vertex, whichever is smaller. primaryRayAtmosphereIntersect.stop = min(primaryRayAtmosphereIntersect.stop, length(primaryRayLength)); // For the number of ray steps, distinguish inside or outside atmosphere (outer space) // (1) from outer space we have to use more ray steps to get a realistic rendering // (2) within atmosphere we need fewer steps for faster rendering float x_o_a = start_0 - ATMOSPHERE_THICKNESS; // ATMOSPHERE_THICKNESS used as an ad-hoc constant, no precise meaning here, only the order of magnitude matters float w_inside_atmosphere = 1.0 - 0.5 * (1.0 + czm_approximateTanh(x_o_a)); int PRIMARY_STEPS = PRIMARY_STEPS_MAX - int(w_inside_atmosphere * 12.0); // Number of times the ray from the camera to the world position (primary ray) is sampled. int LIGHT_STEPS = LIGHT_STEPS_MAX - int(w_inside_atmosphere * 2.0); // Number of times the light is sampled from the light source's intersection with the atmosphere to a sample position on the primary ray. // Setup for sampling positions along the ray - starting from the intersection with the outer ring of the atmosphere. float rayPositionLength = primaryRayAtmosphereIntersect.start; // (1) Outside the atmosphere: constant rayStepLength // (2) Inside atmosphere: variable rayStepLength to compensate the rough rendering of the smaller number of ray steps float totalRayLength = primaryRayAtmosphereIntersect.stop - rayPositionLength; float rayStepLengthIncrease = w_inside_atmosphere * ((1.0 - w_stop_gt_lprl) * totalRayLength / (float(PRIMARY_STEPS * (PRIMARY_STEPS + 1)) / 2.0)); float rayStepLength = max(1.0 - w_inside_atmosphere, w_stop_gt_lprl) * totalRayLength / max(7.0 * w_inside_atmosphere, float(PRIMARY_STEPS)); vec3 rayleighAccumulation = vec3(0.0); vec3 mieAccumulation = vec3(0.0); vec2 opticalDepth = vec2(0.0); vec2 heightScale = vec2(czm_atmosphereRayleighScaleHeight, czm_atmosphereMieScaleHeight); // Sample positions on the primary ray. for (int i = 0; i < PRIMARY_STEPS_MAX; ++i) { // The loop should be: for (int i = 0; i < PRIMARY_STEPS; ++i) {...} but WebGL1 cannot // loop with non-constant condition, so it has to break early instead if (i >= PRIMARY_STEPS) { break; } // Calculate sample position along viewpoint ray. vec3 samplePosition = primaryRay.origin + primaryRay.direction * (rayPositionLength + rayStepLength); // Calculate height of sample position above ellipsoid. float sampleHeight = length(samplePosition) - atmosphereInnerRadius; // Calculate and accumulate density of particles at the sample position. vec2 sampleDensity = exp(-sampleHeight / heightScale) * rayStepLength; opticalDepth += sampleDensity; // Generate ray from the sample position segment to the light source, up to the outer ring of the atmosphere. czm_ray lightRay = czm_ray(samplePosition, lightDirection); czm_raySegment lightRayAtmosphereIntersect = czm_raySphereIntersectionInterval(lightRay, origin, atmosphereOuterRadius); float lightStepLength = lightRayAtmosphereIntersect.stop / float(LIGHT_STEPS); float lightPositionLength = 0.0; vec2 lightOpticalDepth = vec2(0.0); // Sample positions along the light ray, to accumulate incidence of light on the latest sample segment. for (int j = 0; j < LIGHT_STEPS_MAX; ++j) { // The loop should be: for (int j = 0; i < LIGHT_STEPS; ++j) {...} but WebGL1 cannot // loop with non-constant condition, so it has to break early instead if (j >= LIGHT_STEPS) { break; } // Calculate sample position along light ray. vec3 lightPosition = samplePosition + lightDirection * (lightPositionLength + lightStepLength * 0.5); // Calculate height of the light sample position above ellipsoid. float lightHeight = length(lightPosition) - atmosphereInnerRadius; // Calculate density of photons at the light sample position. lightOpticalDepth += exp(-lightHeight / heightScale) * lightStepLength; // Increment distance on light ray. lightPositionLength += lightStepLength; } // Compute attenuation via the primary ray and the light ray. vec3 attenuation = exp(-((czm_atmosphereMieCoefficient * (opticalDepth.y + lightOpticalDepth.y)) + (czm_atmosphereRayleighCoefficient * (opticalDepth.x + lightOpticalDepth.x)))); // Accumulate the scattering. rayleighAccumulation += sampleDensity.x * attenuation; mieAccumulation += sampleDensity.y * attenuation; // Increment distance on primary ray. rayPositionLength += (rayStepLength += rayStepLengthIncrease); } // Compute the scattering amount. rayleighColor = czm_atmosphereRayleighCoefficient * rayleighAccumulation; mieColor = czm_atmosphereMieCoefficient * mieAccumulation; // Compute the transmittance i.e. how much light is passing through the atmosphere. opacity = length(exp(-((czm_atmosphereMieCoefficient * opticalDepth.y) + (czm_atmosphereRayleighCoefficient * opticalDepth.x)))); } `;var oAt=_(T(),1),kZ=`/** * @private */ vec2 cordic(float angle) { // Scale the vector by the appropriate factor for the 24 iterations to follow. vec2 vector = vec2(6.0725293500888267e-1, 0.0); // Iteration 1 float sense = (angle < 0.0) ? -1.0 : 1.0; // float factor = sense * 1.0; // 2^-0 mat2 rotation = mat2(1.0, sense, -sense, 1.0); vector = rotation * vector; angle -= sense * 7.8539816339744828e-1; // atan(2^-0) // Iteration 2 sense = (angle < 0.0) ? -1.0 : 1.0; float factor = sense * 5.0e-1; // 2^-1 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 4.6364760900080609e-1; // atan(2^-1) // Iteration 3 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 2.5e-1; // 2^-2 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 2.4497866312686414e-1; // atan(2^-2) // Iteration 4 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 1.25e-1; // 2^-3 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 1.2435499454676144e-1; // atan(2^-3) // Iteration 5 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 6.25e-2; // 2^-4 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 6.2418809995957350e-2; // atan(2^-4) // Iteration 6 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 3.125e-2; // 2^-5 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 3.1239833430268277e-2; // atan(2^-5) // Iteration 7 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 1.5625e-2; // 2^-6 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 1.5623728620476831e-2; // atan(2^-6) // Iteration 8 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 7.8125e-3; // 2^-7 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 7.8123410601011111e-3; // atan(2^-7) // Iteration 9 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 3.90625e-3; // 2^-8 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 3.9062301319669718e-3; // atan(2^-8) // Iteration 10 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 1.953125e-3; // 2^-9 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 1.9531225164788188e-3; // atan(2^-9) // Iteration 11 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 9.765625e-4; // 2^-10 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 9.7656218955931946e-4; // atan(2^-10) // Iteration 12 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 4.8828125e-4; // 2^-11 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 4.8828121119489829e-4; // atan(2^-11) // Iteration 13 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 2.44140625e-4; // 2^-12 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 2.4414062014936177e-4; // atan(2^-12) // Iteration 14 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 1.220703125e-4; // 2^-13 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 1.2207031189367021e-4; // atan(2^-13) // Iteration 15 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 6.103515625e-5; // 2^-14 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 6.1035156174208773e-5; // atan(2^-14) // Iteration 16 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 3.0517578125e-5; // 2^-15 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 3.0517578115526096e-5; // atan(2^-15) // Iteration 17 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 1.52587890625e-5; // 2^-16 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 1.5258789061315762e-5; // atan(2^-16) // Iteration 18 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 7.62939453125e-6; // 2^-17 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 7.6293945311019700e-6; // atan(2^-17) // Iteration 19 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 3.814697265625e-6; // 2^-18 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 3.8146972656064961e-6; // atan(2^-18) // Iteration 20 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 1.9073486328125e-6; // 2^-19 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 1.9073486328101870e-6; // atan(2^-19) // Iteration 21 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 9.5367431640625e-7; // 2^-20 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 9.5367431640596084e-7; // atan(2^-20) // Iteration 22 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 4.76837158203125e-7; // 2^-21 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 4.7683715820308884e-7; // atan(2^-21) // Iteration 23 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 2.384185791015625e-7; // 2^-22 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; angle -= sense * 2.3841857910155797e-7; // atan(2^-22) // Iteration 24 sense = (angle < 0.0) ? -1.0 : 1.0; factor = sense * 1.1920928955078125e-7; // 2^-23 rotation[0][1] = factor; rotation[1][0] = -factor; vector = rotation * vector; // angle -= sense * 1.1920928955078068e-7; // atan(2^-23) return vector; } /** * Computes the cosine and sine of the provided angle using the CORDIC algorithm. * * @name czm_cosineAndSine * @glslFunction * * @param {float} angle The angle in radians. * * @returns {vec2} The resulting cosine of the angle (as the x coordinate) and sine of the angle (as the y coordinate). * * @example * vec2 v = czm_cosineAndSine(czm_piOverSix); * float cosine = v.x; * float sine = v.y; */ vec2 czm_cosineAndSine(float angle) { if (angle < -czm_piOverTwo || angle > czm_piOverTwo) { if (angle < 0.0) { return -cordic(angle + czm_pi); } else { return -cordic(angle - czm_pi); } } else { return cordic(angle); } } `;var sAt=_(T(),1),UZ=`/** * Decompresses texture coordinates that were packed into a single float. * * @name czm_decompressTextureCoordinates * @glslFunction * * @param {float} encoded The compressed texture coordinates. * @returns {vec2} The decompressed texture coordinates. */ vec2 czm_decompressTextureCoordinates(float encoded) { float temp = encoded / 4096.0; float xZeroTo4095 = floor(temp); float stx = xZeroTo4095 / 4095.0; float sty = (encoded - xZeroTo4095 * 4096.0) / 4095.0; return vec2(stx, sty); } `;var cAt=_(T(),1),DZ=`// emulated noperspective #if (__VERSION__ == 300 || defined(GL_EXT_frag_depth)) && !defined(LOG_DEPTH) out float v_WindowZ; #endif /** * Emulates GL_DEPTH_CLAMP, which is not available in WebGL 1 or 2. * GL_DEPTH_CLAMP clamps geometry that is outside the near and far planes, * capping the shadow volume. More information here: * https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_depth_clamp.txt. * * When GL_EXT_frag_depth is available we emulate GL_DEPTH_CLAMP by ensuring * no geometry gets clipped by setting the clip space z value to 0.0 and then * sending the unaltered screen space z value (using emulated noperspective * interpolation) to the frag shader where it is clamped to [0,1] and then * written with gl_FragDepth (see czm_writeDepthClamp). This technique is based on: * https://stackoverflow.com/questions/5960757/how-to-emulate-gl-depth-clamp-nv. * * When GL_EXT_frag_depth is not available, which is the case on some mobile * devices, we must attempt to fix this only in the vertex shader. * The approach is to clamp the z value to the far plane, which closes the * shadow volume but also distorts the geometry, so there can still be artifacts * on frustum seams. * * @name czm_depthClamp * @glslFunction * * @param {vec4} coords The vertex in clip coordinates. * @returns {vec4} The modified vertex. * * @example * gl_Position = czm_depthClamp(czm_modelViewProjection * vec4(position, 1.0)); * * @see czm_writeDepthClamp */ vec4 czm_depthClamp(vec4 coords) { #ifndef LOG_DEPTH #if __VERSION__ == 300 || defined(GL_EXT_frag_depth) v_WindowZ = (0.5 * (coords.z / coords.w) + 0.5) * coords.w; coords.z = 0.0; #else coords.z = min(coords.z, coords.w); #endif #endif return coords; } `;var dAt=_(T(),1),BZ=`/** * Computes a 3x3 rotation matrix that transforms vectors from an ellipsoid's east-north-up coordinate system * to eye coordinates. In east-north-up coordinates, x points east, y points north, and z points along the * surface normal. East-north-up can be used as an ellipsoid's tangent space for operations such as bump mapping. * <br /><br /> * The ellipsoid is assumed to be centered at the model coordinate's origin. * * @name czm_eastNorthUpToEyeCoordinates * @glslFunction * * @param {vec3} positionMC The position on the ellipsoid in model coordinates. * @param {vec3} normalEC The normalized ellipsoid surface normal, at <code>positionMC</code>, in eye coordinates. * * @returns {mat3} A 3x3 rotation matrix that transforms vectors from the east-north-up coordinate system to eye coordinates. * * @example * // Transform a vector defined in the east-north-up coordinate * // system, (0, 0, 1) which is the surface normal, to eye * // coordinates. * mat3 m = czm_eastNorthUpToEyeCoordinates(positionMC, normalEC); * vec3 normalEC = m * vec3(0.0, 0.0, 1.0); */ mat3 czm_eastNorthUpToEyeCoordinates(vec3 positionMC, vec3 normalEC) { vec3 tangentMC = normalize(vec3(-positionMC.y, positionMC.x, 0.0)); // normalized surface tangent in model coordinates vec3 tangentEC = normalize(czm_normal3D * tangentMC); // normalized surface tangent in eye coordinates vec3 bitangentEC = normalize(cross(normalEC, tangentEC)); // normalized surface bitangent in eye coordinates return mat3( tangentEC.x, tangentEC.y, tangentEC.z, bitangentEC.x, bitangentEC.y, bitangentEC.z, normalEC.x, normalEC.y, normalEC.z); } `;var mAt=_(T(),1),OZ=`/** * DOC_TBA * * @name czm_ellipsoidContainsPoint * @glslFunction * */ bool czm_ellipsoidContainsPoint(vec3 ellipsoid_inverseRadii, vec3 point) { vec3 scaled = ellipsoid_inverseRadii * (czm_inverseModelView * vec4(point, 1.0)).xyz; return (dot(scaled, scaled) <= 1.0); } `;var fAt=_(T(),1),YZ=`/** * Approximate uv coordinates based on the ellipsoid normal. * * @name czm_ellipsoidTextureCoordinates * @glslFunction */ vec2 czm_ellipsoidTextureCoordinates(vec3 normal) { return vec2(atan(normal.y, normal.x) * czm_oneOverTwoPi + 0.5, asin(normal.z) * czm_oneOverPi + 0.5); } `;var bAt=_(T(),1),zZ=`/** * Compares <code>left</code> and <code>right</code> componentwise. Returns <code>true</code> * if they are within <code>epsilon</code> and <code>false</code> otherwise. The inputs * <code>left</code> and <code>right</code> can be <code>float</code>s, <code>vec2</code>s, * <code>vec3</code>s, or <code>vec4</code>s. * * @name czm_equalsEpsilon * @glslFunction * * @param {} left The first vector. * @param {} right The second vector. * @param {float} epsilon The epsilon to use for equality testing. * @returns {bool} <code>true</code> if the components are within <code>epsilon</code> and <code>false</code> otherwise. * * @example * // GLSL declarations * bool czm_equalsEpsilon(float left, float right, float epsilon); * bool czm_equalsEpsilon(vec2 left, vec2 right, float epsilon); * bool czm_equalsEpsilon(vec3 left, vec3 right, float epsilon); * bool czm_equalsEpsilon(vec4 left, vec4 right, float epsilon); */ bool czm_equalsEpsilon(vec4 left, vec4 right, float epsilon) { return all(lessThanEqual(abs(left - right), vec4(epsilon))); } bool czm_equalsEpsilon(vec3 left, vec3 right, float epsilon) { return all(lessThanEqual(abs(left - right), vec3(epsilon))); } bool czm_equalsEpsilon(vec2 left, vec2 right, float epsilon) { return all(lessThanEqual(abs(left - right), vec2(epsilon))); } bool czm_equalsEpsilon(float left, float right, float epsilon) { return (abs(left - right) <= epsilon); } `;var yAt=_(T(),1),HZ=`/** * DOC_TBA * * @name czm_eyeOffset * @glslFunction * * @param {vec4} positionEC DOC_TBA. * @param {vec3} eyeOffset DOC_TBA. * * @returns {vec4} DOC_TBA. */ vec4 czm_eyeOffset(vec4 positionEC, vec3 eyeOffset) { // This equation is approximate in x and y. vec4 p = positionEC; vec4 zEyeOffset = normalize(p) * eyeOffset.z; p.xy += eyeOffset.xy + zEyeOffset.xy; p.z += zEyeOffset.z; return p; } `;var _At=_(T(),1),KZ=`/** * Transforms a position from eye to window coordinates. The transformation * from eye to clip coordinates is done using {@link czm_projection}. * The transform from normalized device coordinates to window coordinates is * done using {@link czm_viewportTransformation}, which assumes a depth range * of <code>near = 0</code> and <code>far = 1</code>. * <br /><br /> * This transform is useful when there is a need to manipulate window coordinates * in a vertex shader as done by {@link BillboardCollection}. * * @name czm_eyeToWindowCoordinates * @glslFunction * * @param {vec4} position The position in eye coordinates to transform. * * @returns {vec4} The transformed position in window coordinates. * * @see czm_modelToWindowCoordinates * @see czm_projection * @see czm_viewportTransformation * @see BillboardCollection * * @example * vec4 positionWC = czm_eyeToWindowCoordinates(positionEC); */ vec4 czm_eyeToWindowCoordinates(vec4 positionEC) { vec4 q = czm_projection * positionEC; // clip coordinates q.xyz /= q.w; // normalized device coordinates q.xyz = (czm_viewportTransformation * vec4(q.xyz, 1.0)).xyz; // window coordinates return q; } `;var SAt=_(T(),1),JZ=`/** * Approxiamtes atan over the range [0, 1]. Safe to flip output for negative input. * * Based on Michal Drobot's approximation from ShaderFastLibs, which in turn is based on * "Efficient approximations for the arctangent function," Rajan, S. Sichun Wang Inkol, R. Joyal, A., May 2006. * Adapted from ShaderFastLibs under MIT License. * * Chosen for the following characteristics over range [0, 1]: * - basically no error at 0 and 1, important for getting around range limit (naive atan2 via atan requires infinite range atan) * - no visible artifacts from first-derivative discontinuities, unlike latitude via range-reduced sqrt asin approximations (at equator) * * The original code is x * (-0.1784 * abs(x) - 0.0663 * x * x + 1.0301); * Removed the abs() in here because it isn't needed, the input range is guaranteed as [0, 1] by how we're approximating atan2. * * @name czm_fastApproximateAtan * @glslFunction * * @param {float} x Value between 0 and 1 inclusive. * * @returns {float} Approximation of atan(x) */ float czm_fastApproximateAtan(float x) { return x * (-0.1784 * x - 0.0663 * x * x + 1.0301); } /** * Approximation of atan2. * * Range reduction math based on nvidia's cg reference implementation for atan2: http://developer.download.nvidia.com/cg/atan2.html * However, we replaced their atan curve with Michael Drobot's (see above). * * @name czm_fastApproximateAtan * @glslFunction * * @param {float} x Value between -1 and 1 inclusive. * @param {float} y Value between -1 and 1 inclusive. * * @returns {float} Approximation of atan2(x, y) */ float czm_fastApproximateAtan(float x, float y) { // atan approximations are usually only reliable over [-1, 1], or, in our case, [0, 1] due to modifications. // So range-reduce using abs and by flipping whether x or y is on top. float t = abs(x); // t used as swap and atan result. float opposite = abs(y); float adjacent = max(t, opposite); opposite = min(t, opposite); t = czm_fastApproximateAtan(opposite / adjacent); // Undo range reduction t = czm_branchFreeTernary(abs(y) > abs(x), czm_piOverTwo - t, t); t = czm_branchFreeTernary(x < 0.0, czm_pi - t, t); t = czm_branchFreeTernary(y < 0.0, -t, t); return t; } `;var VAt=_(T(),1),QZ=`/** * Gets the color with fog at a distance from the camera. * * @name czm_fog * @glslFunction * * @param {float} distanceToCamera The distance to the camera in meters. * @param {vec3} color The original color. * @param {vec3} fogColor The color of the fog. * * @returns {vec3} The color adjusted for fog at the distance from the camera. */ vec3 czm_fog(float distanceToCamera, vec3 color, vec3 fogColor) { float scalar = distanceToCamera * czm_fogDensity; float fog = 1.0 - exp(-(scalar * scalar)); return mix(color, fogColor, fog); } /** * Gets the color with fog at a distance from the camera. * * @name czm_fog * @glslFunction * * @param {float} distanceToCamera The distance to the camera in meters. * @param {vec3} color The original color. * @param {vec3} fogColor The color of the fog. * @param {float} fogModifierConstant A constant to modify the appearance of fog. * * @returns {vec3} The color adjusted for fog at the distance from the camera. */ vec3 czm_fog(float distanceToCamera, vec3 color, vec3 fogColor, float fogModifierConstant) { float scalar = distanceToCamera * czm_fogDensity; float fog = 1.0 - exp(-((fogModifierConstant * scalar + fogModifierConstant) * (scalar * (1.0 + fogModifierConstant)))); return mix(color, fogColor, fog); } `;var RAt=_(T(),1),jZ=`/** * Converts a color from RGB space to linear space. * * @name czm_gammaCorrect * @glslFunction * * @param {vec3} color The color in RGB space. * @returns {vec3} The color in linear space. */ vec3 czm_gammaCorrect(vec3 color) { #ifdef HDR color = pow(color, vec3(czm_gamma)); #endif return color; } vec4 czm_gammaCorrect(vec4 color) { #ifdef HDR color.rgb = pow(color.rgb, vec3(czm_gamma)); #endif return color; } `;var GAt=_(T(),1),qZ=`/** * DOC_TBA * * @name czm_geodeticSurfaceNormal * @glslFunction * * @param {vec3} positionOnEllipsoid DOC_TBA * @param {vec3} ellipsoidCenter DOC_TBA * @param {vec3} oneOverEllipsoidRadiiSquared DOC_TBA * * @returns {vec3} DOC_TBA. */ vec3 czm_geodeticSurfaceNormal(vec3 positionOnEllipsoid, vec3 ellipsoidCenter, vec3 oneOverEllipsoidRadiiSquared) { return normalize((positionOnEllipsoid - ellipsoidCenter) * oneOverEllipsoidRadiiSquared); } `;var IAt=_(T(),1),$Z=`/** * An czm_material with default values. Every material's czm_getMaterial * should use this default material as a base for the material it returns. * The default normal value is given by materialInput.normalEC. * * @name czm_getDefaultMaterial * @glslFunction * * @param {czm_materialInput} input The input used to construct the default material. * * @returns {czm_material} The default material. * * @see czm_materialInput * @see czm_material * @see czm_getMaterial */ czm_material czm_getDefaultMaterial(czm_materialInput materialInput) { czm_material material; material.diffuse = vec3(0.0); material.specular = 0.0; material.shininess = 1.0; material.normal = materialInput.normalEC; material.emission = vec3(0.0); material.alpha = 1.0; return material; } `;var WAt=_(T(),1),eG=`/** * Select which direction vector to use for dynamic atmosphere lighting based on an enum value * * @name czm_getDynamicAtmosphereLightDirection * @glslfunction * @see DynamicAtmosphereLightingType.js * * @param {vec3} positionWC the position of the vertex/fragment in world coordinates. This is normalized and returned when dynamic lighting is turned off. * @param {float} lightEnum The enum value for selecting between light sources. * @return {vec3} The normalized light direction vector. Depending on the enum value, it is either positionWC, czm_lightDirectionWC or czm_sunDirectionWC */ vec3 czm_getDynamicAtmosphereLightDirection(vec3 positionWC, float lightEnum) { const float NONE = 0.0; const float SCENE_LIGHT = 1.0; const float SUNLIGHT = 2.0; vec3 lightDirection = positionWC * float(lightEnum == NONE) + czm_lightDirectionWC * float(lightEnum == SCENE_LIGHT) + czm_sunDirectionWC * float(lightEnum == SUNLIGHT); return normalize(lightDirection); } `;var vAt=_(T(),1),tG=`/** * Calculates the intensity of diffusely reflected light. * * @name czm_getLambertDiffuse * @glslFunction * * @param {vec3} lightDirectionEC Unit vector pointing to the light source in eye coordinates. * @param {vec3} normalEC The surface normal in eye coordinates. * * @returns {float} The intensity of the diffuse reflection. * * @see czm_phong * * @example * float diffuseIntensity = czm_getLambertDiffuse(lightDirectionEC, normalEC); * float specularIntensity = czm_getSpecular(lightDirectionEC, toEyeEC, normalEC, 200); * vec3 color = (diffuseColor * diffuseIntensity) + (specularColor * specularIntensity); */ float czm_getLambertDiffuse(vec3 lightDirectionEC, vec3 normalEC) { return max(dot(lightDirectionEC, normalEC), 0.0); } `;var FAt=_(T(),1),nG=`/** * Calculates the specular intensity of reflected light. * * @name czm_getSpecular * @glslFunction * * @param {vec3} lightDirectionEC Unit vector pointing to the light source in eye coordinates. * @param {vec3} toEyeEC Unit vector pointing to the eye position in eye coordinates. * @param {vec3} normalEC The surface normal in eye coordinates. * @param {float} shininess The sharpness of the specular reflection. Higher values create a smaller, more focused specular highlight. * * @returns {float} The intensity of the specular highlight. * * @see czm_phong * * @example * float diffuseIntensity = czm_getLambertDiffuse(lightDirectionEC, normalEC); * float specularIntensity = czm_getSpecular(lightDirectionEC, toEyeEC, normalEC, 200); * vec3 color = (diffuseColor * diffuseIntensity) + (specularColor * specularIntensity); */ float czm_getSpecular(vec3 lightDirectionEC, vec3 toEyeEC, vec3 normalEC, float shininess) { vec3 toReflectedLight = reflect(-lightDirectionEC, normalEC); float specular = max(dot(toReflectedLight, toEyeEC), 0.0); // pow has undefined behavior if both parameters <= 0. // Prevent this by making sure shininess is at least czm_epsilon2. return pow(specular, max(shininess, czm_epsilon2)); } `;var MAt=_(T(),1),iG=`/** * @private */ vec4 czm_getWaterNoise(sampler2D normalMap, vec2 uv, float time, float angleInRadians) { float cosAngle = cos(angleInRadians); float sinAngle = sin(angleInRadians); // time dependent sampling directions vec2 s0 = vec2(1.0/17.0, 0.0); vec2 s1 = vec2(-1.0/29.0, 0.0); vec2 s2 = vec2(1.0/101.0, 1.0/59.0); vec2 s3 = vec2(-1.0/109.0, -1.0/57.0); // rotate sampling direction by specified angle s0 = vec2((cosAngle * s0.x) - (sinAngle * s0.y), (sinAngle * s0.x) + (cosAngle * s0.y)); s1 = vec2((cosAngle * s1.x) - (sinAngle * s1.y), (sinAngle * s1.x) + (cosAngle * s1.y)); s2 = vec2((cosAngle * s2.x) - (sinAngle * s2.y), (sinAngle * s2.x) + (cosAngle * s2.y)); s3 = vec2((cosAngle * s3.x) - (sinAngle * s3.y), (sinAngle * s3.x) + (cosAngle * s3.y)); vec2 uv0 = (uv/103.0) + (time * s0); vec2 uv1 = uv/107.0 + (time * s1) + vec2(0.23); vec2 uv2 = uv/vec2(897.0, 983.0) + (time * s2) + vec2(0.51); vec2 uv3 = uv/vec2(991.0, 877.0) + (time * s3) + vec2(0.71); uv0 = fract(uv0); uv1 = fract(uv1); uv2 = fract(uv2); uv3 = fract(uv3); vec4 noise = (texture(normalMap, uv0)) + (texture(normalMap, uv1)) + (texture(normalMap, uv2)) + (texture(normalMap, uv3)); // average and scale to between -1 and 1 return ((noise / 4.0) - 0.5) * 2.0; } `;var kAt=_(T(),1),oG=`/** * Adjusts the hue of a color. * * @name czm_hue * @glslFunction * * @param {vec3} rgb The color. * @param {float} adjustment The amount to adjust the hue of the color in radians. * * @returns {float} The color with the hue adjusted. * * @example * vec3 adjustHue = czm_hue(color, czm_pi); // The same as czm_hue(color, -czm_pi) */ vec3 czm_hue(vec3 rgb, float adjustment) { const mat3 toYIQ = mat3(0.299, 0.587, 0.114, 0.595716, -0.274453, -0.321263, 0.211456, -0.522591, 0.311135); const mat3 toRGB = mat3(1.0, 0.9563, 0.6210, 1.0, -0.2721, -0.6474, 1.0, -1.107, 1.7046); vec3 yiq = toYIQ * rgb; float hue = atan(yiq.z, yiq.y) + adjustment; float chroma = sqrt(yiq.z * yiq.z + yiq.y * yiq.y); vec3 color = vec3(yiq.x, chroma * cos(hue), chroma * sin(hue)); return toRGB * color; } `;var DAt=_(T(),1),rG=`/** * Converts a color in linear space to RGB space. * * @name czm_inverseGamma * @glslFunction * * @param {vec3} color The color in linear space. * @returns {vec3} The color in RGB space. */ vec3 czm_inverseGamma(vec3 color) { return pow(color, vec3(1.0 / czm_gamma)); } `;var OAt=_(T(),1),sG=`/** * Determines if a time interval is empty. * * @name czm_isEmpty * @glslFunction * * @param {czm_raySegment} interval The interval to test. * * @returns {bool} <code>true</code> if the time interval is empty; otherwise, <code>false</code>. * * @example * bool b0 = czm_isEmpty(czm_emptyRaySegment); // true * bool b1 = czm_isEmpty(czm_raySegment(0.0, 1.0)); // false * bool b2 = czm_isEmpty(czm_raySegment(1.0, 1.0)); // false, contains 1.0. */ bool czm_isEmpty(czm_raySegment interval) { return (interval.stop < 0.0); } `;var zAt=_(T(),1),aG=`/** * Determines if a time interval is empty. * * @name czm_isFull * @glslFunction * * @param {czm_raySegment} interval The interval to test. * * @returns {bool} <code>true</code> if the time interval is empty; otherwise, <code>false</code>. * * @example * bool b0 = czm_isEmpty(czm_emptyRaySegment); // true * bool b1 = czm_isEmpty(czm_raySegment(0.0, 1.0)); // false * bool b2 = czm_isEmpty(czm_raySegment(1.0, 1.0)); // false, contains 1.0. */ bool czm_isFull(czm_raySegment interval) { return (interval.start == 0.0 && interval.stop == czm_infinity); } `;var KAt=_(T(),1),cG=`/** * Computes the fraction of a Web Wercator rectangle at which a given geodetic latitude is located. * * @name czm_latitudeToWebMercatorFraction * @glslFunction * * @param {float} latitude The geodetic latitude, in radians. * @param {float} southMercatorY The Web Mercator coordinate of the southern boundary of the rectangle. * @param {float} oneOverMercatorHeight The total height of the rectangle in Web Mercator coordinates. * * @returns {float} The fraction of the rectangle at which the latitude occurs. If the latitude is the southern * boundary of the rectangle, the return value will be zero. If it is the northern boundary, the return * value will be 1.0. Latitudes in between are mapped according to the Web Mercator projection. */ float czm_latitudeToWebMercatorFraction(float latitude, float southMercatorY, float oneOverMercatorHeight) { float sinLatitude = sin(latitude); float mercatorY = 0.5 * log((1.0 + sinLatitude) / (1.0 - sinLatitude)); return (mercatorY - southMercatorY) * oneOverMercatorHeight; } `;var QAt=_(T(),1),lG=`/** * Computes distance from an point in 2D to a line in 2D. * * @name czm_lineDistance * @glslFunction * * param {vec2} point1 A point along the line. * param {vec2} point2 A point along the line. * param {vec2} point A point that may or may not be on the line. * returns {float} The distance from the point to the line. */ float czm_lineDistance(vec2 point1, vec2 point2, vec2 point) { return abs((point2.y - point1.y) * point.x - (point2.x - point1.x) * point.y + point2.x * point1.y - point2.y * point1.x) / distance(point2, point1); } `;var qAt=_(T(),1),dG=`/** * Converts a linear RGB color to an sRGB color. * * @param {vec3|vec4} linearIn The color in linear color space. * @returns {vec3|vec4} The color in sRGB color space. The vector type matches the input. */ vec3 czm_linearToSrgb(vec3 linearIn) { return pow(linearIn, vec3(1.0/2.2)); } vec4 czm_linearToSrgb(vec4 linearIn) { vec3 srgbOut = pow(linearIn.rgb, vec3(1.0/2.2)); return vec4(srgbOut, linearIn.a); } `;var eMt=_(T(),1),uG=`/** * Computes the luminance of a color. * * @name czm_luminance * @glslFunction * * @param {vec3} rgb The color. * * @returns {float} The luminance. * * @example * float light = czm_luminance(vec3(0.0)); // 0.0 * float dark = czm_luminance(vec3(1.0)); // ~1.0 */ float czm_luminance(vec3 rgb) { // Algorithm from Chapter 10 of Graphics Shaders. const vec3 W = vec3(0.2125, 0.7154, 0.0721); return dot(rgb, W); } `;var nMt=_(T(),1),mG=`/** * Find the maximum component of a vector. * * @name czm_maximumComponent * @glslFunction * * @param {vec2|vec3|vec4} v The input vector. * @returns {float} The value of the largest component. */ float czm_maximumComponent(vec2 v) { return max(v.x, v.y); } float czm_maximumComponent(vec3 v) { return max(max(v.x, v.y), v.z); } float czm_maximumComponent(vec4 v) { return max(max(max(v.x, v.y), v.z), v.w); } `;var oMt=_(T(),1),hG=`/** * Computes the size of a pixel in meters at a distance from the eye. * <p> * Use this version when passing in a custom pixel ratio. For example, passing in 1.0 will return meters per native device pixel. * </p> * @name czm_metersPerPixel * @glslFunction * * @param {vec3} positionEC The position to get the meters per pixel in eye coordinates. * @param {float} pixelRatio The scaling factor from pixel space to coordinate space * * @returns {float} The meters per pixel at positionEC. */ float czm_metersPerPixel(vec4 positionEC, float pixelRatio) { float width = czm_viewport.z; float height = czm_viewport.w; float pixelWidth; float pixelHeight; float top = czm_frustumPlanes.x; float bottom = czm_frustumPlanes.y; float left = czm_frustumPlanes.z; float right = czm_frustumPlanes.w; if (czm_sceneMode == czm_sceneMode2D || czm_orthographicIn3D == 1.0) { float frustumWidth = right - left; float frustumHeight = top - bottom; pixelWidth = frustumWidth / width; pixelHeight = frustumHeight / height; } else { float distanceToPixel = -positionEC.z; float inverseNear = 1.0 / czm_currentFrustum.x; float tanTheta = top * inverseNear; pixelHeight = 2.0 * distanceToPixel * tanTheta / height; tanTheta = right * inverseNear; pixelWidth = 2.0 * distanceToPixel * tanTheta / width; } return max(pixelWidth, pixelHeight) * pixelRatio; } /** * Computes the size of a pixel in meters at a distance from the eye. * <p> * Use this version when scaling by pixel ratio. * </p> * @name czm_metersPerPixel * @glslFunction * * @param {vec3} positionEC The position to get the meters per pixel in eye coordinates. * * @returns {float} The meters per pixel at positionEC. */ float czm_metersPerPixel(vec4 positionEC) { return czm_metersPerPixel(positionEC, czm_pixelRatio); } `;var sMt=_(T(),1),fG=`/** * Transforms a position from model to window coordinates. The transformation * from model to clip coordinates is done using {@link czm_modelViewProjection}. * The transform from normalized device coordinates to window coordinates is * done using {@link czm_viewportTransformation}, which assumes a depth range * of <code>near = 0</code> and <code>far = 1</code>. * <br /><br /> * This transform is useful when there is a need to manipulate window coordinates * in a vertex shader as done by {@link BillboardCollection}. * <br /><br /> * This function should not be confused with {@link czm_viewportOrthographic}, * which is an orthographic projection matrix that transforms from window * coordinates to clip coordinates. * * @name czm_modelToWindowCoordinates * @glslFunction * * @param {vec4} position The position in model coordinates to transform. * * @returns {vec4} The transformed position in window coordinates. * * @see czm_eyeToWindowCoordinates * @see czm_modelViewProjection * @see czm_viewportTransformation * @see czm_viewportOrthographic * @see BillboardCollection * * @example * vec4 positionWC = czm_modelToWindowCoordinates(positionMC); */ vec4 czm_modelToWindowCoordinates(vec4 position) { vec4 q = czm_modelViewProjection * position; // clip coordinates q.xyz /= q.w; // normalized device coordinates q.xyz = (czm_viewportTransformation * vec4(q.xyz, 1.0)).xyz; // window coordinates return q; } `;var cMt=_(T(),1),pG=`/** * DOC_TBA * * @name czm_multiplyWithColorBalance * @glslFunction */ vec3 czm_multiplyWithColorBalance(vec3 left, vec3 right) { // Algorithm from Chapter 10 of Graphics Shaders. const vec3 W = vec3(0.2125, 0.7154, 0.0721); vec3 target = left * right; float leftLuminance = dot(left, W); float rightLuminance = dot(right, W); float targetLuminance = dot(target, W); return ((leftLuminance + rightLuminance) / (2.0 * targetLuminance)) * target; } `;var dMt=_(T(),1),bG=`/** * Computes a value that scales with distance. The scaling is clamped at the near and * far distances, and does not extrapolate. This function works with the * {@link NearFarScalar} JavaScript class. * * @name czm_nearFarScalar * @glslFunction * * @param {vec4} nearFarScalar A vector with 4 components: Near distance (x), Near value (y), Far distance (z), Far value (w). * @param {float} cameraDistSq The square of the current distance from the camera. * * @returns {float} The value at this distance. */ float czm_nearFarScalar(vec4 nearFarScalar, float cameraDistSq) { float valueAtMin = nearFarScalar.y; float valueAtMax = nearFarScalar.w; float nearDistanceSq = nearFarScalar.x * nearFarScalar.x; float farDistanceSq = nearFarScalar.z * nearFarScalar.z; float t = (cameraDistSq - nearDistanceSq) / (farDistanceSq - nearDistanceSq); t = pow(clamp(t, 0.0, 1.0), 0.2); return mix(valueAtMin, valueAtMax, t); } `;var mMt=_(T(),1),gG=` /** * Decodes a unit-length vector in 'oct' encoding to a normalized 3-component Cartesian vector. * The 'oct' encoding is described in "A Survey of Efficient Representations of Independent Unit Vectors", * Cigolle et al 2014: http://jcgt.org/published/0003/02/01/ * * @name czm_octDecode * @param {vec2} encoded The oct-encoded, unit-length vector * @param {float} range The maximum value of the SNORM range. The encoded vector is stored in log2(rangeMax+1) bits. * @returns {vec3} The decoded and normalized vector */ vec3 czm_octDecode(vec2 encoded, float range) { if (encoded.x == 0.0 && encoded.y == 0.0) { return vec3(0.0, 0.0, 0.0); } encoded = encoded / range * 2.0 - 1.0; vec3 v = vec3(encoded.x, encoded.y, 1.0 - abs(encoded.x) - abs(encoded.y)); if (v.z < 0.0) { v.xy = (1.0 - abs(v.yx)) * czm_signNotZero(v.xy); } return normalize(v); } /** * Decodes a unit-length vector in 'oct' encoding to a normalized 3-component Cartesian vector. * The 'oct' encoding is described in "A Survey of Efficient Representations of Independent Unit Vectors", * Cigolle et al 2014: http://jcgt.org/published/0003/02/01/ * * @name czm_octDecode * @param {vec2} encoded The oct-encoded, unit-length vector * @returns {vec3} The decoded and normalized vector */ vec3 czm_octDecode(vec2 encoded) { return czm_octDecode(encoded, 255.0); } /** * Decodes a unit-length vector in 'oct' encoding packed into a floating-point number to a normalized 3-component Cartesian vector. * The 'oct' encoding is described in "A Survey of Efficient Representations of Independent Unit Vectors", * Cigolle et al 2014: http://jcgt.org/published/0003/02/01/ * * @name czm_octDecode * @param {float} encoded The oct-encoded, unit-length vector * @returns {vec3} The decoded and normalized vector */ vec3 czm_octDecode(float encoded) { float temp = encoded / 256.0; float x = floor(temp); float y = (temp - x) * 256.0; return czm_octDecode(vec2(x, y)); } /** * Decodes three unit-length vectors in 'oct' encoding packed into two floating-point numbers to normalized 3-component Cartesian vectors. * The 'oct' encoding is described in "A Survey of Efficient Representations of Independent Unit Vectors", * Cigolle et al 2014: http://jcgt.org/published/0003/02/01/ * * @name czm_octDecode * @param {vec2} encoded The packed oct-encoded, unit-length vectors. * @param {vec3} vector1 One decoded and normalized vector. * @param {vec3} vector2 One decoded and normalized vector. * @param {vec3} vector3 One decoded and normalized vector. */ void czm_octDecode(vec2 encoded, out vec3 vector1, out vec3 vector2, out vec3 vector3) { float temp = encoded.x / 65536.0; float x = floor(temp); float encodedFloat1 = (temp - x) * 65536.0; temp = encoded.y / 65536.0; float y = floor(temp); float encodedFloat2 = (temp - y) * 65536.0; vector1 = czm_octDecode(encodedFloat1); vector2 = czm_octDecode(encodedFloat2); vector3 = czm_octDecode(vec2(x, y)); } `;var fMt=_(T(),1),yG=`/** * Packs a depth value into a vec4 that can be represented by unsigned bytes. * * @name czm_packDepth * @glslFunction * * @param {float} depth The floating-point depth. * @returns {vec4} The packed depth. */ vec4 czm_packDepth(float depth) { // See Aras Pranckevi\u010Dius' post Encoding Floats to RGBA // http://aras-p.info/blog/2009/07/30/encoding-floats-to-rgba-the-final/ vec4 enc = vec4(1.0, 255.0, 65025.0, 16581375.0) * depth; enc = fract(enc); enc -= enc.yzww * vec4(1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0, 0.0); return enc; } `;var bMt=_(T(),1),xG=`vec3 lambertianDiffuse(vec3 diffuseColor) { return diffuseColor / czm_pi; } vec3 fresnelSchlick2(vec3 f0, vec3 f90, float VdotH) { float versine = 1.0 - VdotH; // pow(versine, 5.0) is slow. See https://stackoverflow.com/a/68793086/10082269 float versineSquared = versine * versine; return f0 + (f90 - f0) * versineSquared * versineSquared * versine; } #ifdef USE_ANISOTROPY /** * @param {float} bitangentRoughness Material roughness (along the anisotropy bitangent) * @param {float} tangentialRoughness Anisotropic roughness (along the anisotropy tangent) * @param {vec3} lightDirection The direction from the fragment to the light source, transformed to tangent-bitangent-normal coordinates * @param {vec3} viewDirection The direction from the fragment to the camera, transformed to tangent-bitangent-normal coordinates */ float smithVisibilityGGX_anisotropic(float bitangentRoughness, float tangentialRoughness, vec3 lightDirection, vec3 viewDirection) { vec3 roughnessScale = vec3(tangentialRoughness, bitangentRoughness, 1.0); float GGXV = lightDirection.z * length(roughnessScale * viewDirection); float GGXL = viewDirection.z * length(roughnessScale * lightDirection); float v = 0.5 / (GGXV + GGXL); return clamp(v, 0.0, 1.0); } /** * @param {float} bitangentRoughness Material roughness (along the anisotropy bitangent) * @param {float} tangentialRoughness Anisotropic roughness (along the anisotropy tangent) * @param {vec3} halfwayDirection The unit vector halfway between light and view directions, transformed to tangent-bitangent-normal coordinates */ float GGX_anisotropic(float bitangentRoughness, float tangentialRoughness, vec3 halfwayDirection) { float roughnessSquared = bitangentRoughness * tangentialRoughness; vec3 f = halfwayDirection * vec3(bitangentRoughness, tangentialRoughness, roughnessSquared); float w2 = roughnessSquared / dot(f, f); return roughnessSquared * w2 * w2 / czm_pi; } #endif /** * Estimate the geometric self-shadowing of the microfacets in a surface, * using the Smith Joint GGX visibility function. * Note: Vis = G / (4 * NdotL * NdotV) * see Eric Heitz. 2014. Understanding the Masking-Shadowing Function in Microfacet-Based BRDFs. Journal of Computer Graphics Techniques, 3 * see Real-Time Rendering. Page 331 to 336. * see https://google.github.io/filament/Filament.md.html#materialsystem/specularbrdf/geometricshadowing(specularg) * * @param {float} alphaRoughness The roughness of the material, expressed as the square of perceptual roughness. * @param {float} NdotL The cosine of the angle between the surface normal and the direction to the light source. * @param {float} NdotV The cosine of the angle between the surface normal and the direction to the camera. */ float smithVisibilityGGX(float alphaRoughness, float NdotL, float NdotV) { float alphaRoughnessSq = alphaRoughness * alphaRoughness; float GGXV = NdotL * sqrt(NdotV * NdotV * (1.0 - alphaRoughnessSq) + alphaRoughnessSq); float GGXL = NdotV * sqrt(NdotL * NdotL * (1.0 - alphaRoughnessSq) + alphaRoughnessSq); float GGX = GGXV + GGXL; if (GGX > 0.0) { return 0.5 / GGX; } return 0.0; } /** * Estimate the fraction of the microfacets in a surface that are aligned with * the halfway vector, which is aligned halfway between the directions from * the fragment to the camera and from the fragment to the light source. * * @param {float} alphaRoughness The roughness of the material, expressed as the square of perceptual roughness. * @param {float} NdotH The cosine of the angle between the surface normal and the halfway vector. * @return {float} The fraction of microfacets aligned to the halfway vector. */ float GGX(float alphaRoughness, float NdotH) { float alphaRoughnessSquared = alphaRoughness * alphaRoughness; float f = (NdotH * alphaRoughnessSquared - NdotH) * NdotH + 1.0; return alphaRoughnessSquared / (czm_pi * f * f); } /** * Compute the strength of the specular reflection due to direct lighting. * * @param {vec3} normal The surface normal. * @param {vec3} lightDirection The unit vector pointing from the fragment to the light source. * @param {vec3} viewDirection The unit vector pointing from the fragment to the camera. * @param {vec3} halfwayDirection The unit vector pointing from the fragment to halfway between the light source and the camera. * @param {float} alphaRoughness The roughness of the material, expressed as the square of perceptual roughness. * @return {float} The strength of the specular reflection. */ float computeDirectSpecularStrength(vec3 normal, vec3 lightDirection, vec3 viewDirection, vec3 halfwayDirection, float alphaRoughness) { float NdotL = clamp(dot(normal, lightDirection), 0.0, 1.0); float NdotV = clamp(dot(normal, viewDirection), 0.0, 1.0); float G = smithVisibilityGGX(alphaRoughness, NdotL, NdotV); float NdotH = clamp(dot(normal, halfwayDirection), 0.0, 1.0); float D = GGX(alphaRoughness, NdotH); return G * D; } /** * Compute the diffuse and specular contributions using physically based * rendering. This function only handles direct lighting. * <p> * This function only handles the lighting calculations. Metallic/roughness * and specular/glossy must be handled separately. See {@MaterialStageFS} * </p> * * @name czm_pbrLighting * @glslFunction * * @param {vec3} viewDirectionEC Unit vector pointing from the fragment to the eye position * @param {vec3} normalEC The surface normal in eye coordinates * @param {vec3} lightDirectionEC Unit vector pointing to the light source in eye coordinates. * @param {czm_modelMaterial} The material properties. * @return {vec3} The computed HDR color */ vec3 czm_pbrLighting(vec3 viewDirectionEC, vec3 normalEC, vec3 lightDirectionEC, czm_modelMaterial material) { vec3 halfwayDirectionEC = normalize(viewDirectionEC + lightDirectionEC); float VdotH = clamp(dot(viewDirectionEC, halfwayDirectionEC), 0.0, 1.0); float NdotL = clamp(dot(normalEC, lightDirectionEC), 0.001, 1.0); vec3 f0 = material.specular; float reflectance = czm_maximumComponent(f0); // Typical dielectrics will have reflectance 0.04, so f90 will be 1.0. // In this case, at grazing angle, all incident energy is reflected. vec3 f90 = vec3(clamp(reflectance * 25.0, 0.0, 1.0)); vec3 F = fresnelSchlick2(f0, f90, VdotH); #if defined(USE_SPECULAR) F *= material.specularWeight; #endif float alphaRoughness = material.roughness * material.roughness; #ifdef USE_ANISOTROPY mat3 tbn = mat3(material.anisotropicT, material.anisotropicB, normalEC); vec3 lightDirection = lightDirectionEC * tbn; vec3 viewDirection = viewDirectionEC * tbn; vec3 halfwayDirection = halfwayDirectionEC * tbn; float anisotropyStrength = material.anisotropyStrength; float tangentialRoughness = mix(alphaRoughness, 1.0, anisotropyStrength * anisotropyStrength); float bitangentRoughness = clamp(alphaRoughness, 0.001, 1.0); float G = smithVisibilityGGX_anisotropic(bitangentRoughness, tangentialRoughness, lightDirection, viewDirection); float D = GGX_anisotropic(bitangentRoughness, tangentialRoughness, halfwayDirection); vec3 specularContribution = F * G * D; #else float specularStrength = computeDirectSpecularStrength(normalEC, lightDirectionEC, viewDirectionEC, halfwayDirectionEC, alphaRoughness); vec3 specularContribution = F * specularStrength; #endif vec3 diffuseColor = material.diffuse; // F here represents the specular contribution vec3 diffuseContribution = (1.0 - F) * lambertianDiffuse(diffuseColor); // Lo = (diffuse + specular) * Li * NdotL return (diffuseContribution + specularContribution) * NdotL; } `;var yMt=_(T(),1),_G=`// KhronosGroup https://github.com/KhronosGroup/ToneMapping/tree/main/PBR_Neutral // Input color is non-negative and resides in the Linear Rec. 709 color space. // Output color is also Linear Rec. 709, but in the [0, 1] range. vec3 czm_pbrNeutralTonemapping(vec3 color) { const float startCompression = 0.8 - 0.04; const float desaturation = 0.15; float x = min(color.r, min(color.g, color.b)); float offset = czm_branchFreeTernary(x < 0.08, x - 6.25 * x * x, 0.04); color -= offset; float peak = max(color.r, max(color.g, color.b)); if (peak < startCompression) return color; const float d = 1.0 - startCompression; float newPeak = 1.0 - d * d / (peak + d - startCompression); color *= newPeak / peak; float g = 1.0 - 1.0 / (desaturation * (peak - newPeak) + 1.0); return mix(color, newPeak * vec3(1.0, 1.0, 1.0), g); } `;var _Mt=_(T(),1),TG=`float czm_private_getLambertDiffuseOfMaterial(vec3 lightDirectionEC, czm_material material) { return czm_getLambertDiffuse(lightDirectionEC, material.normal); } float czm_private_getSpecularOfMaterial(vec3 lightDirectionEC, vec3 toEyeEC, czm_material material) { return czm_getSpecular(lightDirectionEC, toEyeEC, material.normal, material.shininess); } /** * Computes a color using the Phong lighting model. * * @name czm_phong * @glslFunction * * @param {vec3} toEye A normalized vector from the fragment to the eye in eye coordinates. * @param {czm_material} material The fragment's material. * * @returns {vec4} The computed color. * * @example * vec3 positionToEyeEC = // ... * czm_material material = // ... * vec3 lightDirectionEC = // ... * out_FragColor = czm_phong(normalize(positionToEyeEC), material, lightDirectionEC); * * @see czm_getMaterial */ vec4 czm_phong(vec3 toEye, czm_material material, vec3 lightDirectionEC) { // Diffuse from directional light sources at eye (for top-down) float diffuse = czm_private_getLambertDiffuseOfMaterial(vec3(0.0, 0.0, 1.0), material); if (czm_sceneMode == czm_sceneMode3D) { // (and horizon views in 3D) diffuse += czm_private_getLambertDiffuseOfMaterial(vec3(0.0, 1.0, 0.0), material); } float specular = czm_private_getSpecularOfMaterial(lightDirectionEC, toEye, material); // Temporary workaround for adding ambient. vec3 materialDiffuse = material.diffuse * 0.5; vec3 ambient = materialDiffuse; vec3 color = ambient + material.emission; color += materialDiffuse * diffuse * czm_lightColor; color += material.specular * specular * czm_lightColor; return vec4(color, material.alpha); } vec4 czm_private_phong(vec3 toEye, czm_material material, vec3 lightDirectionEC) { float diffuse = czm_private_getLambertDiffuseOfMaterial(lightDirectionEC, material); float specular = czm_private_getSpecularOfMaterial(lightDirectionEC, toEye, material); vec3 ambient = vec3(0.0); vec3 color = ambient + material.emission; color += material.diffuse * diffuse * czm_lightColor; color += material.specular * specular * czm_lightColor; return vec4(color, material.alpha); } `;var SMt=_(T(),1),SG=`/** * Computes distance from a point to a plane. * * @name czm_planeDistance * @glslFunction * * param {vec4} plane A Plane in Hessian Normal Form. See Plane.js * param {vec3} point A point in the same space as the plane. * returns {float} The distance from the point to the plane. */ float czm_planeDistance(vec4 plane, vec3 point) { return (dot(plane.xyz, point) + plane.w); } /** * Computes distance from a point to a plane. * * @name czm_planeDistance * @glslFunction * * param {vec3} planeNormal Normal for a plane in Hessian Normal Form. See Plane.js * param {float} planeDistance Distance for a plane in Hessian Normal form. See Plane.js * param {vec3} point A point in the same space as the plane. * returns {float} The distance from the point to the plane. */ float czm_planeDistance(vec3 planeNormal, float planeDistance, vec3 point) { return (dot(planeNormal, point) + planeDistance); } `;var VMt=_(T(),1),CG=`/** * Computes the point along a ray at the given time. <code>time</code> can be positive, negative, or zero. * * @name czm_pointAlongRay * @glslFunction * * @param {czm_ray} ray The ray to compute the point along. * @param {float} time The time along the ray. * * @returns {vec3} The point along the ray at the given time. * * @example * czm_ray ray = czm_ray(vec3(0.0), vec3(1.0, 0.0, 0.0)); // origin, direction * vec3 v = czm_pointAlongRay(ray, 2.0); // (2.0, 0.0, 0.0) */ vec3 czm_pointAlongRay(czm_ray ray, float time) { return ray.origin + (time * ray.direction); } `;var RMt=_(T(),1),VG=`/** * DOC_TBA * * @name czm_rayEllipsoidIntersectionInterval * @glslFunction */ czm_raySegment czm_rayEllipsoidIntersectionInterval(czm_ray ray, vec3 ellipsoid_center, vec3 ellipsoid_inverseRadii) { // ray and ellipsoid center in eye coordinates. radii in model coordinates. vec3 q = ellipsoid_inverseRadii * (czm_inverseModelView * vec4(ray.origin, 1.0)).xyz; vec3 w = ellipsoid_inverseRadii * (czm_inverseModelView * vec4(ray.direction, 0.0)).xyz; q = q - ellipsoid_inverseRadii * (czm_inverseModelView * vec4(ellipsoid_center, 1.0)).xyz; float q2 = dot(q, q); float qw = dot(q, w); if (q2 > 1.0) // Outside ellipsoid. { if (qw >= 0.0) // Looking outward or tangent (0 intersections). { return czm_emptyRaySegment; } else // qw < 0.0. { float qw2 = qw * qw; float difference = q2 - 1.0; // Positively valued. float w2 = dot(w, w); float product = w2 * difference; if (qw2 < product) // Imaginary roots (0 intersections). { return czm_emptyRaySegment; } else if (qw2 > product) // Distinct roots (2 intersections). { float discriminant = qw * qw - product; float temp = -qw + sqrt(discriminant); // Avoid cancellation. float root0 = temp / w2; float root1 = difference / temp; if (root0 < root1) { czm_raySegment i = czm_raySegment(root0, root1); return i; } else { czm_raySegment i = czm_raySegment(root1, root0); return i; } } else // qw2 == product. Repeated roots (2 intersections). { float root = sqrt(difference / w2); czm_raySegment i = czm_raySegment(root, root); return i; } } } else if (q2 < 1.0) // Inside ellipsoid (2 intersections). { float difference = q2 - 1.0; // Negatively valued. float w2 = dot(w, w); float product = w2 * difference; // Negatively valued. float discriminant = qw * qw - product; float temp = -qw + sqrt(discriminant); // Positively valued. czm_raySegment i = czm_raySegment(0.0, temp / w2); return i; } else // q2 == 1.0. On ellipsoid. { if (qw < 0.0) // Looking inward. { float w2 = dot(w, w); czm_raySegment i = czm_raySegment(0.0, -qw / w2); return i; } else // qw >= 0.0. Looking outward or tangent. { return czm_emptyRaySegment; } } } `;var GMt=_(T(),1),LG=`/** * Compute the intersection interval of a ray with a sphere. * * @name czm_raySphereIntersectionInterval * @glslFunction * * @param {czm_ray} ray The ray. * @param {vec3} center The center of the sphere. * @param {float} radius The radius of the sphere. * @return {czm_raySegment} The intersection interval of the ray with the sphere. */ czm_raySegment czm_raySphereIntersectionInterval(czm_ray ray, vec3 center, float radius) { vec3 o = ray.origin; vec3 d = ray.direction; vec3 oc = o - center; float a = dot(d, d); float b = 2.0 * dot(d, oc); float c = dot(oc, oc) - (radius * radius); float det = (b * b) - (4.0 * a * c); if (det < 0.0) { return czm_emptyRaySegment; } float sqrtDet = sqrt(det); float t0 = (-b - sqrtDet) / (2.0 * a); float t1 = (-b + sqrtDet) / (2.0 * a); czm_raySegment result = czm_raySegment(t0, t1); return result; } `;var IMt=_(T(),1),RG=`float czm_readDepth(sampler2D depthTexture, vec2 texCoords) { return czm_reverseLogDepth(texture(depthTexture, texCoords).r); } `;var WMt=_(T(),1),ZG=`/** * Reads a value previously transformed with {@link czm_writeNonPerspective} * by dividing it by \`w\`, the value used in the perspective divide. * This function is intended to be called in a fragment shader to access a * \`varying\` that should not be subject to perspective interpolation. * For example, screen-space texture coordinates. The value should have been * previously written in the vertex shader with a call to * {@link czm_writeNonPerspective}. * * @name czm_readNonPerspective * @glslFunction * * @param {float|vec2|vec3|vec4} value The non-perspective value to be read. * @param {float} oneOverW One over the perspective divide value, \`w\`. Usually this is simply \`gl_FragCoord.w\`. * @returns {float|vec2|vec3|vec4} The usable value. */ float czm_readNonPerspective(float value, float oneOverW) { return value * oneOverW; } vec2 czm_readNonPerspective(vec2 value, float oneOverW) { return value * oneOverW; } vec3 czm_readNonPerspective(vec3 value, float oneOverW) { return value * oneOverW; } vec4 czm_readNonPerspective(vec4 value, float oneOverW) { return value * oneOverW; } `;var vMt=_(T(),1),GG=`float czm_reverseLogDepth(float logZ) { #ifdef LOG_DEPTH float near = czm_currentFrustum.x; float far = czm_currentFrustum.y; float log2Depth = logZ * czm_log2FarDepthFromNearPlusOne; float depthFromNear = exp2(log2Depth) - 1.0; return far * (1.0 - near / (depthFromNear + near)) / (far - near); #endif return logZ; } `;var FMt=_(T(),1),EG=`/** * Round a floating point value. This function exists because round() doesn't * exist in GLSL 1.00. * * @param {float|vec2|vec3|vec4} value The value to round * @param {float|vec2|vec3|vec3} The rounded value. The type matches the input. */ float czm_round(float value) { return floor(value + 0.5); } vec2 czm_round(vec2 value) { return floor(value + 0.5); } vec3 czm_round(vec3 value) { return floor(value + 0.5); } vec4 czm_round(vec4 value) { return floor(value + 0.5); } `;var MMt=_(T(),1),IG=`/** * Adjusts the saturation of a color. * * @name czm_saturation * @glslFunction * * @param {vec3} rgb The color. * @param {float} adjustment The amount to adjust the saturation of the color. * * @returns {float} The color with the saturation adjusted. * * @example * vec3 greyScale = czm_saturation(color, 0.0); * vec3 doubleSaturation = czm_saturation(color, 2.0); */ vec3 czm_saturation(vec3 rgb, float adjustment) { // Algorithm from Chapter 16 of OpenGL Shading Language const vec3 W = vec3(0.2125, 0.7154, 0.0721); vec3 intensity = vec3(dot(rgb, W)); return mix(intensity, rgb, adjustment); } `;var kMt=_(T(),1),XG=` float czm_sampleShadowMap(highp samplerCube shadowMap, vec3 d) { return czm_unpackDepth(czm_textureCube(shadowMap, d)); } float czm_sampleShadowMap(highp sampler2D shadowMap, vec2 uv) { #ifdef USE_SHADOW_DEPTH_TEXTURE return texture(shadowMap, uv).r; #else return czm_unpackDepth(texture(shadowMap, uv)); #endif } float czm_shadowDepthCompare(samplerCube shadowMap, vec3 uv, float depth) { return step(depth, czm_sampleShadowMap(shadowMap, uv)); } float czm_shadowDepthCompare(sampler2D shadowMap, vec2 uv, float depth) { return step(depth, czm_sampleShadowMap(shadowMap, uv)); } `;var DMt=_(T(),1),WG=` float czm_private_shadowVisibility(float visibility, float nDotL, float normalShadingSmooth, float darkness) { #ifdef USE_NORMAL_SHADING #ifdef USE_NORMAL_SHADING_SMOOTH float strength = clamp(nDotL / normalShadingSmooth, 0.0, 1.0); #else float strength = step(0.0, nDotL); #endif visibility *= strength; #endif visibility = max(visibility, darkness); return visibility; } #ifdef USE_CUBE_MAP_SHADOW float czm_shadowVisibility(samplerCube shadowMap, czm_shadowParameters shadowParameters) { float depthBias = shadowParameters.depthBias; float depth = shadowParameters.depth; float nDotL = shadowParameters.nDotL; float normalShadingSmooth = shadowParameters.normalShadingSmooth; float darkness = shadowParameters.darkness; vec3 uvw = shadowParameters.texCoords; depth -= depthBias; float visibility = czm_shadowDepthCompare(shadowMap, uvw, depth); return czm_private_shadowVisibility(visibility, nDotL, normalShadingSmooth, darkness); } #else float czm_shadowVisibility(sampler2D shadowMap, czm_shadowParameters shadowParameters) { float depthBias = shadowParameters.depthBias; float depth = shadowParameters.depth; float nDotL = shadowParameters.nDotL; float normalShadingSmooth = shadowParameters.normalShadingSmooth; float darkness = shadowParameters.darkness; vec2 uv = shadowParameters.texCoords; depth -= depthBias; #ifdef USE_SOFT_SHADOWS vec2 texelStepSize = shadowParameters.texelStepSize; float radius = 1.0; float dx0 = -texelStepSize.x * radius; float dy0 = -texelStepSize.y * radius; float dx1 = texelStepSize.x * radius; float dy1 = texelStepSize.y * radius; float visibility = ( czm_shadowDepthCompare(shadowMap, uv, depth) + czm_shadowDepthCompare(shadowMap, uv + vec2(dx0, dy0), depth) + czm_shadowDepthCompare(shadowMap, uv + vec2(0.0, dy0), depth) + czm_shadowDepthCompare(shadowMap, uv + vec2(dx1, dy0), depth) + czm_shadowDepthCompare(shadowMap, uv + vec2(dx0, 0.0), depth) + czm_shadowDepthCompare(shadowMap, uv + vec2(dx1, 0.0), depth) + czm_shadowDepthCompare(shadowMap, uv + vec2(dx0, dy1), depth) + czm_shadowDepthCompare(shadowMap, uv + vec2(0.0, dy1), depth) + czm_shadowDepthCompare(shadowMap, uv + vec2(dx1, dy1), depth) ) * (1.0 / 9.0); #else float visibility = czm_shadowDepthCompare(shadowMap, uv, depth); #endif return czm_private_shadowVisibility(visibility, nDotL, normalShadingSmooth, darkness); } #endif `;var OMt=_(T(),1),PG=`/** * Returns 1.0 if the given value is positive or zero, and -1.0 if it is negative. This is similar to the GLSL * built-in function <code>sign</code> except that returns 1.0 instead of 0.0 when the input value is 0.0. * * @name czm_signNotZero * @glslFunction * * @param {} value The value for which to determine the sign. * @returns {} 1.0 if the value is positive or zero, -1.0 if the value is negative. */ float czm_signNotZero(float value) { return value >= 0.0 ? 1.0 : -1.0; } vec2 czm_signNotZero(vec2 value) { return vec2(czm_signNotZero(value.x), czm_signNotZero(value.y)); } vec3 czm_signNotZero(vec3 value) { return vec3(czm_signNotZero(value.x), czm_signNotZero(value.y), czm_signNotZero(value.z)); } vec4 czm_signNotZero(vec4 value) { return vec4(czm_signNotZero(value.x), czm_signNotZero(value.y), czm_signNotZero(value.z), czm_signNotZero(value.w)); } `;var zMt=_(T(),1),vG=`/** * Computes a color from the third order spherical harmonic coefficients and a normalized direction vector. * <p> * The order of the coefficients is [L00, L1_1, L10, L11, L2_2, L2_1, L20, L21, L22]. * </p> * * @name czm_sphericalHarmonics * @glslFunction * * @param {vec3} normal The normalized direction. * @param {vec3[9]} coefficients The third order spherical harmonic coefficients. * @returns {vec3} The color at the direction. * * @see https://graphics.stanford.edu/papers/envmap/envmap.pdf */ vec3 czm_sphericalHarmonics(vec3 normal, vec3 coefficients[9]) { vec3 L00 = coefficients[0]; vec3 L1_1 = coefficients[1]; vec3 L10 = coefficients[2]; vec3 L11 = coefficients[3]; vec3 L2_2 = coefficients[4]; vec3 L2_1 = coefficients[5]; vec3 L20 = coefficients[6]; vec3 L21 = coefficients[7]; vec3 L22 = coefficients[8]; float x = normal.x; float y = normal.y; float z = normal.z; vec3 L = L00 + L1_1 * y + L10 * z + L11 * x + L2_2 * (y * x) + L2_1 * (y * z) + L20 * (3.0 * z * z - 1.0) + L21 * (z * x) + L22 * (x * x - y * y); return max(L, vec3(0.0)); } `;var KMt=_(T(),1),wG=`/** * Converts an sRGB color to a linear RGB color. * * @param {vec3|vec4} srgbIn The color in sRGB space * @returns {vec3|vec4} The color in linear color space. The vector type matches the input. */ vec3 czm_srgbToLinear(vec3 srgbIn) { return pow(srgbIn, vec3(2.2)); } vec4 czm_srgbToLinear(vec4 srgbIn) { vec3 linearOut = pow(srgbIn.rgb, vec3(2.2)); return vec4(linearOut, srgbIn.a); } `;var QMt=_(T(),1),FG=`/** * Creates a matrix that transforms vectors from tangent space to eye space. * * @name czm_tangentToEyeSpaceMatrix * @glslFunction * * @param {vec3} normalEC The normal vector in eye coordinates. * @param {vec3} tangentEC The tangent vector in eye coordinates. * @param {vec3} bitangentEC The bitangent vector in eye coordinates. * * @returns {mat3} The matrix that transforms from tangent space to eye space. * * @example * mat3 tangentToEye = czm_tangentToEyeSpaceMatrix(normalEC, tangentEC, bitangentEC); * vec3 normal = tangentToEye * texture(normalMap, st).xyz; */ mat3 czm_tangentToEyeSpaceMatrix(vec3 normalEC, vec3 tangentEC, vec3 bitangentEC) { vec3 normal = normalize(normalEC); vec3 tangent = normalize(tangentEC); vec3 bitangent = normalize(bitangentEC); return mat3(tangent.x , tangent.y , tangent.z, bitangent.x, bitangent.y, bitangent.z, normal.x , normal.y , normal.z); } `;var qMt=_(T(),1),AG=`/** * A wrapper around the texture (WebGL2) / textureCube (WebGL1) * function to allow for WebGL 1 support. * * @name czm_textureCube * @glslFunction * * @param {samplerCube} sampler The sampler. * @param {vec3} p The coordinate at which to sample the texture. */ vec4 czm_textureCube(samplerCube sampler, vec3 p) { #if __VERSION__ == 300 return texture(sampler, p); #else return textureCube(sampler, p); #endif } /** * A wrapper around the textureLod (WebGL2) / textureCube (WebGL1) * function to allow for WebGL 1 support in fragment shaders. * * @name czm_textureCubeLod * @glslFunction * * @param {samplerCube} sampler The sampler. * @param {vec3} p The coordinate at which to sample the texture. * @param {float} lod The mipmap level from which to sample. */ vec4 czm_textureCube(samplerCube sampler, vec3 p, float lod) { #if __VERSION__ == 300 return textureLod(sampler, p, lod); #elif defined(GL_EXT_shader_texture_lod) return textureCubeLodEXT(sampler, p, lod); #endif }`;var eNt=_(T(),1),MG=`/** * Transforms a plane. * * @name czm_transformPlane * @glslFunction * * @param {vec4} plane The plane in Hessian Normal Form. * @param {mat4} transform The inverse-transpose of a transformation matrix. */ vec4 czm_transformPlane(vec4 plane, mat4 transform) { vec4 transformedPlane = transform * plane; // Convert the transformed plane to Hessian Normal Form float normalMagnitude = length(transformedPlane.xyz); return transformedPlane / normalMagnitude; } `;var nNt=_(T(),1),NG=`/** * Translates a position (or any <code>vec3</code>) that was encoded with {@link EncodedCartesian3}, * and then provided to the shader as separate <code>high</code> and <code>low</code> bits to * be relative to the eye. As shown in the example, the position can then be transformed in eye * or clip coordinates using {@link czm_modelViewRelativeToEye} or {@link czm_modelViewProjectionRelativeToEye}, * respectively. * <p> * This technique, called GPU RTE, eliminates jittering artifacts when using large coordinates as * described in {@link http://help.agi.com/AGIComponents/html/BlogPrecisionsPrecisions.htm|Precisions, Precisions}. * </p> * * @name czm_translateRelativeToEye * @glslFunction * * @param {vec3} high The position's high bits. * @param {vec3} low The position's low bits. * @returns {vec3} The position translated to be relative to the camera's position. * * @example * in vec3 positionHigh; * in vec3 positionLow; * * void main() * { * vec4 p = czm_translateRelativeToEye(positionHigh, positionLow); * gl_Position = czm_modelViewProjectionRelativeToEye * p; * } * * @see czm_modelViewRelativeToEye * @see czm_modelViewProjectionRelativeToEye * @see czm_computePosition * @see EncodedCartesian3 */ vec4 czm_translateRelativeToEye(vec3 high, vec3 low) { vec3 highDifference = high - czm_encodedCameraPositionMCHigh; // This check handles the case when NaN values have gotten into \`highDifference\`. // Such a thing could happen on devices running iOS. if (length(highDifference) == 0.0) { highDifference = vec3(0); } vec3 lowDifference = low - czm_encodedCameraPositionMCLow; return vec4(highDifference + lowDifference, 1.0); } `;var oNt=_(T(),1),kG=`/** * @private */ vec4 czm_translucentPhong(vec3 toEye, czm_material material, vec3 lightDirectionEC) { // Diffuse from directional light sources at eye (for top-down and horizon views) float diffuse = czm_getLambertDiffuse(vec3(0.0, 0.0, 1.0), material.normal); if (czm_sceneMode == czm_sceneMode3D) { // (and horizon views in 3D) diffuse += czm_getLambertDiffuse(vec3(0.0, 1.0, 0.0), material.normal); } diffuse = clamp(diffuse, 0.0, 1.0); float specular = czm_getSpecular(lightDirectionEC, toEye, material.normal, material.shininess); // Temporary workaround for adding ambient. vec3 materialDiffuse = material.diffuse * 0.5; vec3 ambient = materialDiffuse; vec3 color = ambient + material.emission; color += materialDiffuse * diffuse * czm_lightColor; color += material.specular * specular * czm_lightColor; return vec4(color, material.alpha); } `;var sNt=_(T(),1),UG=`/** * Returns the transpose of the matrix. The input <code>matrix</code> can be * a <code>mat2</code>, <code>mat3</code>, or <code>mat4</code>. * * @name czm_transpose * @glslFunction * * @param {} matrix The matrix to transpose. * * @returns {} The transposed matrix. * * @example * // GLSL declarations * mat2 czm_transpose(mat2 matrix); * mat3 czm_transpose(mat3 matrix); * mat4 czm_transpose(mat4 matrix); * * // Transpose a 3x3 rotation matrix to find its inverse. * mat3 eastNorthUpToEye = czm_eastNorthUpToEyeCoordinates( * positionMC, normalEC); * mat3 eyeToEastNorthUp = czm_transpose(eastNorthUpToEye); */ mat2 czm_transpose(mat2 matrix) { return mat2( matrix[0][0], matrix[1][0], matrix[0][1], matrix[1][1]); } mat3 czm_transpose(mat3 matrix) { return mat3( matrix[0][0], matrix[1][0], matrix[2][0], matrix[0][1], matrix[1][1], matrix[2][1], matrix[0][2], matrix[1][2], matrix[2][2]); } mat4 czm_transpose(mat4 matrix) { return mat4( matrix[0][0], matrix[1][0], matrix[2][0], matrix[3][0], matrix[0][1], matrix[1][1], matrix[2][1], matrix[3][1], matrix[0][2], matrix[1][2], matrix[2][2], matrix[3][2], matrix[0][3], matrix[1][3], matrix[2][3], matrix[3][3]); } `;var cNt=_(T(),1),DG=`vec2 getLookupUv(vec2 dimensions, int i) { int pixY = i / int(dimensions.x); int pixX = i - (pixY * int(dimensions.x)); float pixelWidth = 1.0 / dimensions.x; float pixelHeight = 1.0 / dimensions.y; float u = (float(pixX) + 0.5) * pixelWidth; // sample from center of pixel float v = (float(pixY) + 0.5) * pixelHeight; return vec2(u, v); } vec4 czm_unpackClippingExtents(highp sampler2D extentsTexture, int index) { vec2 textureDimensions = vec2(textureSize(extentsTexture, 0)); return texture(extentsTexture, getLookupUv(textureDimensions, index)); }`;var dNt=_(T(),1),BG=`/** * Unpacks a vec4 depth value to a float in [0, 1) range. * * @name czm_unpackDepth * @glslFunction * * @param {vec4} packedDepth The packed depth. * * @returns {float} The floating-point depth in [0, 1) range. */ float czm_unpackDepth(vec4 packedDepth) { // See Aras Pranckevi\u010Dius' post Encoding Floats to RGBA // http://aras-p.info/blog/2009/07/30/encoding-floats-to-rgba-the-final/ return dot(packedDepth, vec4(1.0, 1.0 / 255.0, 1.0 / 65025.0, 1.0 / 16581375.0)); } `;var mNt=_(T(),1),OG=`/** * Unpack an IEEE 754 single-precision float that is packed as a little-endian unsigned normalized vec4. * * @name czm_unpackFloat * @glslFunction * * @param {vec4} packedFloat The packed float. * * @returns {float} The floating-point depth in arbitrary range. */ float czm_unpackFloat(vec4 packedFloat) { // Convert to [0.0, 255.0] and round to integer packedFloat = floor(packedFloat * 255.0 + 0.5); float sign = 1.0 - step(128.0, packedFloat[3]) * 2.0; float exponent = 2.0 * mod(packedFloat[3], 128.0) + step(128.0, packedFloat[2]) - 127.0; if (exponent == -127.0) { return 0.0; } float mantissa = mod(packedFloat[2], 128.0) * 65536.0 + packedFloat[1] * 256.0 + packedFloat[0] + float(0x800000); float result = sign * exp2(exponent - 23.0) * mantissa; return result; } `;var fNt=_(T(),1),YG=`/** * Unpack unsigned integers of 1-4 bytes. in WebGL 1, there is no uint type, * so the return value is an int. * <p> * There are also precision limitations in WebGL 1. highp int is still limited * to 24 bits. Above the value of 2^24 = 16777216, precision loss may occur. * </p> * * @param {float|vec2|vec3|vec4} packed The packed value. For vectors, the components are listed in little-endian order. * * @return {int} The unpacked value. */ int czm_unpackUint(float packedValue) { float rounded = czm_round(packedValue * 255.0); return int(rounded); } int czm_unpackUint(vec2 packedValue) { vec2 rounded = czm_round(packedValue * 255.0); return int(dot(rounded, vec2(1.0, 256.0))); } int czm_unpackUint(vec3 packedValue) { vec3 rounded = czm_round(packedValue * 255.0); return int(dot(rounded, vec3(1.0, 256.0, 65536.0))); } int czm_unpackUint(vec4 packedValue) { vec4 rounded = czm_round(packedValue * 255.0); return int(dot(rounded, vec4(1.0, 256.0, 65536.0, 16777216.0))); } `;var bNt=_(T(),1),zG=`/** * Transform metadata values following the EXT_structural_metadata spec * by multiplying by scale and adding the offset. Operations are always * performed component-wise, even for matrices. * * @param {float|vec2|vec3|vec4|mat2|mat3|mat4} offset The offset to add * @param {float|vec2|vec3|vec4|mat2|mat3|mat4} scale The scale factor to multiply * @param {float|vec2|vec3|vec4|mat2|mat3|mat4} value The original value. * * @return {float|vec2|vec3|vec4|mat2|mat3|mat4} The transformed value of the same scalar/vector/matrix type as the input. */ float czm_valueTransform(float offset, float scale, float value) { return scale * value + offset; } vec2 czm_valueTransform(vec2 offset, vec2 scale, vec2 value) { return scale * value + offset; } vec3 czm_valueTransform(vec3 offset, vec3 scale, vec3 value) { return scale * value + offset; } vec4 czm_valueTransform(vec4 offset, vec4 scale, vec4 value) { return scale * value + offset; } mat2 czm_valueTransform(mat2 offset, mat2 scale, mat2 value) { return matrixCompMult(scale, value) + offset; } mat3 czm_valueTransform(mat3 offset, mat3 scale, mat3 value) { return matrixCompMult(scale, value) + offset; } mat4 czm_valueTransform(mat4 offset, mat4 scale, mat4 value) { return matrixCompMult(scale, value) + offset; } `;var yNt=_(T(),1),HG=`#ifdef LOG_DEPTH // 1.0 at the near plane, increasing linearly from there. out float v_depthFromNearPlusOne; #ifdef SHADOW_MAP out vec3 v_logPositionEC; #endif #endif vec4 czm_updatePositionDepth(vec4 coords) { #if defined(LOG_DEPTH) #ifdef SHADOW_MAP vec3 logPositionEC = (czm_inverseProjection * coords).xyz; v_logPositionEC = logPositionEC; #endif // With the very high far/near ratios used with the logarithmic depth // buffer, floating point rounding errors can cause linear depth values // to end up on the wrong side of the far plane, even for vertices that // are really nowhere near it. Since we always write a correct logarithmic // depth value in the fragment shader anyway, we just need to make sure // such errors don't cause the primitive to be clipped entirely before // we even get to the fragment shader. coords.z = clamp(coords.z / coords.w, -1.0, 1.0) * coords.w; #endif return coords; } /** * Writes the logarithmic depth to gl_Position using the already computed gl_Position. * * @name czm_vertexLogDepth * @glslFunction */ void czm_vertexLogDepth() { #ifdef LOG_DEPTH v_depthFromNearPlusOne = (gl_Position.w - czm_currentFrustum.x) + 1.0; gl_Position = czm_updatePositionDepth(gl_Position); #endif } /** * Writes the logarithmic depth to gl_Position using the provided clip coordinates. * <p> * An example use case for this function would be moving the vertex in window coordinates * before converting back to clip coordinates. Use the original vertex clip coordinates. * </p> * @name czm_vertexLogDepth * @glslFunction * * @param {vec4} clipCoords The vertex in clip coordinates. * * @example * czm_vertexLogDepth(czm_projection * vec4(positionEyeCoordinates, 1.0)); */ void czm_vertexLogDepth(vec4 clipCoords) { #ifdef LOG_DEPTH v_depthFromNearPlusOne = (clipCoords.w - czm_currentFrustum.x) + 1.0; czm_updatePositionDepth(clipCoords); #endif } `;var _Nt=_(T(),1),KG=`vec4 czm_screenToEyeCoordinates(vec4 screenCoordinate) { // Reconstruct NDC coordinates float x = 2.0 * screenCoordinate.x - 1.0; float y = 2.0 * screenCoordinate.y - 1.0; float z = (screenCoordinate.z - czm_viewportTransformation[3][2]) / czm_viewportTransformation[2][2]; vec4 q = vec4(x, y, z, 1.0); // Reverse the perspective division to obtain clip coordinates. q /= screenCoordinate.w; // Reverse the projection transformation to obtain eye coordinates. if (!(czm_inverseProjection == mat4(0.0))) // IE and Edge sometimes do something weird with != between mat4s { q = czm_inverseProjection * q; } else { float top = czm_frustumPlanes.x; float bottom = czm_frustumPlanes.y; float left = czm_frustumPlanes.z; float right = czm_frustumPlanes.w; float near = czm_currentFrustum.x; float far = czm_currentFrustum.y; q.x = (q.x * (right - left) + left + right) * 0.5; q.y = (q.y * (top - bottom) + bottom + top) * 0.5; q.z = (q.z * (near - far) - near - far) * 0.5; q.w = 1.0; } return q; } /** * Transforms a position from window to eye coordinates. * The transform from window to normalized device coordinates is done using components * of (@link czm_viewport} and {@link czm_viewportTransformation} instead of calculating * the inverse of <code>czm_viewportTransformation</code>. The transformation from * normalized device coordinates to clip coordinates is done using <code>fragmentCoordinate.w</code>, * which is expected to be the scalar used in the perspective divide. The transformation * from clip to eye coordinates is done using {@link czm_inverseProjection}. * * @name czm_windowToEyeCoordinates * @glslFunction * * @param {vec4} fragmentCoordinate The position in window coordinates to transform. * * @returns {vec4} The transformed position in eye coordinates. * * @see czm_modelToWindowCoordinates * @see czm_eyeToWindowCoordinates * @see czm_inverseProjection * @see czm_viewport * @see czm_viewportTransformation * * @example * vec4 positionEC = czm_windowToEyeCoordinates(gl_FragCoord); */ vec4 czm_windowToEyeCoordinates(vec4 fragmentCoordinate) { vec2 screenCoordXY = (fragmentCoordinate.xy - czm_viewport.xy) / czm_viewport.zw; return czm_screenToEyeCoordinates(vec4(screenCoordXY, fragmentCoordinate.zw)); } vec4 czm_screenToEyeCoordinates(vec2 screenCoordinateXY, float depthOrLogDepth) { // See reverseLogDepth.glsl. This is separate to re-use the pow. #if defined(LOG_DEPTH) || defined(LOG_DEPTH_READ_ONLY) float near = czm_currentFrustum.x; float far = czm_currentFrustum.y; float log2Depth = depthOrLogDepth * czm_log2FarDepthFromNearPlusOne; float depthFromNear = exp2(log2Depth) - 1.0; float depthFromCamera = depthFromNear + near; vec4 screenCoord = vec4(screenCoordinateXY, far * (1.0 - near / depthFromCamera) / (far - near), 1.0); vec4 eyeCoordinate = czm_screenToEyeCoordinates(screenCoord); eyeCoordinate.w = 1.0 / depthFromCamera; // Better precision return eyeCoordinate; #else vec4 screenCoord = vec4(screenCoordinateXY, depthOrLogDepth, 1.0); vec4 eyeCoordinate = czm_screenToEyeCoordinates(screenCoord); #endif return eyeCoordinate; } /** * Transforms a position given as window x/y and a depth or a log depth from window to eye coordinates. * This function produces more accurate results for window positions with log depth than * conventionally unpacking the log depth using czm_reverseLogDepth and using the standard version * of czm_windowToEyeCoordinates. * * @name czm_windowToEyeCoordinates * @glslFunction * * @param {vec2} fragmentCoordinateXY The XY position in window coordinates to transform. * @param {float} depthOrLogDepth A depth or log depth for the fragment. * * @see czm_modelToWindowCoordinates * @see czm_eyeToWindowCoordinates * @see czm_inverseProjection * @see czm_viewport * @see czm_viewportTransformation * * @returns {vec4} The transformed position in eye coordinates. */ vec4 czm_windowToEyeCoordinates(vec2 fragmentCoordinateXY, float depthOrLogDepth) { vec2 screenCoordXY = (fragmentCoordinateXY.xy - czm_viewport.xy) / czm_viewport.zw; return czm_screenToEyeCoordinates(screenCoordXY, depthOrLogDepth); } `;var SNt=_(T(),1),JG=`// emulated noperspective #if !defined(LOG_DEPTH) in float v_WindowZ; #endif /** * Emulates GL_DEPTH_CLAMP. Clamps a fragment to the near and far plane * by writing the fragment's depth. See czm_depthClamp for more details. * * @name czm_writeDepthClamp * @glslFunction * * @example * out_FragColor = color; * czm_writeDepthClamp(); * * @see czm_depthClamp */ void czm_writeDepthClamp() { #if (!defined(LOG_DEPTH) && (__VERSION__ == 300 || defined(GL_EXT_frag_depth))) gl_FragDepth = clamp(v_WindowZ * gl_FragCoord.w, 0.0, 1.0); #endif } `;var VNt=_(T(),1),QG=`#ifdef LOG_DEPTH in float v_depthFromNearPlusOne; #ifdef POLYGON_OFFSET uniform vec2 u_polygonOffset; #endif #endif /** * Writes the fragment depth to the logarithmic depth buffer. * <p> * Use this when the vertex shader does not call {@link czm_vertexLogDepth}, for example, when * ray-casting geometry using a full screen quad. * </p> * @name czm_writeLogDepth * @glslFunction * * @param {float} depth The depth coordinate, where 1.0 is on the near plane and * depth increases in eye-space units from there * * @example * czm_writeLogDepth((czm_projection * v_positionEyeCoordinates).w + 1.0); */ void czm_writeLogDepth(float depth) { #if (defined(LOG_DEPTH) && (__VERSION__ == 300 || defined(GL_EXT_frag_depth))) // Discard the vertex if it's not between the near and far planes. // We allow a bit of epsilon on the near plane comparison because a 1.0 // from the vertex shader (indicating the vertex should be _on_ the near // plane) will not necessarily come here as exactly 1.0. if (depth <= 0.9999999 || depth > czm_farDepthFromNearPlusOne) { discard; } #ifdef POLYGON_OFFSET // Polygon offset: m * factor + r * units float factor = u_polygonOffset[0]; float units = u_polygonOffset[1]; #if (__VERSION__ == 300 || defined(GL_OES_standard_derivatives)) // This factor doesn't work in IE 10 if (factor != 0.0) { // m = sqrt(dZdX^2 + dZdY^2); float x = dFdx(depth); float y = dFdy(depth); float m = sqrt(x * x + y * y); // Apply the factor before computing the log depth. depth += m * factor; } #endif #endif gl_FragDepth = log2(depth) * czm_oneOverLog2FarDepthFromNearPlusOne; #ifdef POLYGON_OFFSET // Apply the units after the log depth. gl_FragDepth += czm_epsilon7 * units; #endif #endif } /** * Writes the fragment depth to the logarithmic depth buffer. * <p> * Use this when the vertex shader calls {@link czm_vertexLogDepth}. * </p> * * @name czm_writeLogDepth * @glslFunction */ void czm_writeLogDepth() { #ifdef LOG_DEPTH czm_writeLogDepth(v_depthFromNearPlusOne); #endif } `;var RNt=_(T(),1),jG=`/** * Transforms a value for non-perspective interpolation by multiplying * it by w, the value used in the perspective divide. This function is * intended to be called in a vertex shader to compute the value of a * \`varying\` that should not be subject to perspective interpolation. * For example, screen-space texture coordinates. The fragment shader * must call {@link czm_readNonPerspective} to retrieve the final * non-perspective value. * * @name czm_writeNonPerspective * @glslFunction * * @param {float|vec2|vec3|vec4} value The value to be interpolated without accounting for perspective. * @param {float} w The perspective divide value. Usually this is the computed \`gl_Position.w\`. * @returns {float|vec2|vec3|vec4} The transformed value, intended to be stored in a \`varying\` and read in the * fragment shader with {@link czm_readNonPerspective}. */ float czm_writeNonPerspective(float value, float w) { return value * w; } vec2 czm_writeNonPerspective(vec2 value, float w) { return value * w; } vec3 czm_writeNonPerspective(vec3 value, float w) { return value * w; } vec4 czm_writeNonPerspective(vec4 value, float w) { return value * w; } `;var _x={czm_degreesPerRadian:VR,czm_depthRange:LR,czm_epsilon1:RR,czm_epsilon2:ZR,czm_epsilon3:GR,czm_epsilon4:ER,czm_epsilon5:IR,czm_epsilon6:XR,czm_epsilon7:WR,czm_infinity:PR,czm_oneOverPi:vR,czm_oneOverTwoPi:wR,czm_passCesium3DTile:FR,czm_passCesium3DTileClassification:AR,czm_passCesium3DTileClassificationIgnoreShow:MR,czm_passClassification:NR,czm_passCompute:kR,czm_passEnvironment:UR,czm_passGlobe:DR,czm_passOpaque:BR,czm_passOverlay:OR,czm_passTerrainClassification:YR,czm_passTranslucent:zR,czm_passVoxels:HR,czm_pi:KR,czm_piOverFour:JR,czm_piOverSix:QR,czm_piOverThree:jR,czm_piOverTwo:qR,czm_radiansPerDegree:$R,czm_sceneMode2D:eZ,czm_sceneMode3D:tZ,czm_sceneModeColumbusView:nZ,czm_sceneModeMorphing:iZ,czm_solarRadius:oZ,czm_threePiOver2:rZ,czm_twoPi:sZ,czm_webMercatorMaxLatitude:aZ,czm_depthRangeStruct:cZ,czm_material:lZ,czm_materialInput:dZ,czm_modelMaterial:uZ,czm_modelVertexOutput:mZ,czm_ray:hZ,czm_raySegment:fZ,czm_shadowParameters:pZ,czm_HSBToRGB:bZ,czm_HSLToRGB:gZ,czm_RGBToHSB:yZ,czm_RGBToHSL:xZ,czm_RGBToXYZ:_Z,czm_XYZToRGB:TZ,czm_acesTonemapping:SZ,czm_alphaWeight:CZ,czm_antialias:VZ,czm_applyHSBShift:LZ,czm_approximateSphericalCoordinates:RZ,czm_approximateTanh:ZZ,czm_backFacing:GZ,czm_branchFreeTernary:EZ,czm_cascadeColor:IZ,czm_cascadeDistance:XZ,czm_cascadeMatrix:WZ,czm_cascadeWeights:PZ,czm_clipPolygons:vZ,czm_columbusViewMorph:wZ,czm_computeAtmosphereColor:FZ,czm_computeGroundAtmosphereScattering:AZ,czm_computePosition:MZ,czm_computeScattering:NZ,czm_cosineAndSine:kZ,czm_decompressTextureCoordinates:UZ,czm_depthClamp:DZ,czm_eastNorthUpToEyeCoordinates:BZ,czm_ellipsoidContainsPoint:OZ,czm_ellipsoidTextureCoordinates:YZ,czm_equalsEpsilon:zZ,czm_eyeOffset:HZ,czm_eyeToWindowCoordinates:KZ,czm_fastApproximateAtan:JZ,czm_fog:QZ,czm_gammaCorrect:jZ,czm_geodeticSurfaceNormal:qZ,czm_getDefaultMaterial:$Z,czm_getDynamicAtmosphereLightDirection:eG,czm_getLambertDiffuse:tG,czm_getSpecular:nG,czm_getWaterNoise:iG,czm_hue:oG,czm_inverseGamma:rG,czm_isEmpty:sG,czm_isFull:aG,czm_latitudeToWebMercatorFraction:cG,czm_lineDistance:lG,czm_linearToSrgb:dG,czm_luminance:uG,czm_maximumComponent:mG,czm_metersPerPixel:hG,czm_modelToWindowCoordinates:fG,czm_multiplyWithColorBalance:pG,czm_nearFarScalar:bG,czm_octDecode:gG,czm_packDepth:yG,czm_pbrLighting:xG,czm_pbrNeutralTonemapping:_G,czm_phong:TG,czm_planeDistance:SG,czm_pointAlongRay:CG,czm_rayEllipsoidIntersectionInterval:VG,czm_raySphereIntersectionInterval:LG,czm_readDepth:RG,czm_readNonPerspective:ZG,czm_reverseLogDepth:GG,czm_round:EG,czm_saturation:IG,czm_shadowDepthCompare:XG,czm_shadowVisibility:WG,czm_signNotZero:PG,czm_sphericalHarmonics:vG,czm_srgbToLinear:wG,czm_tangentToEyeSpaceMatrix:FG,czm_textureCube:AG,czm_transformPlane:MG,czm_translateRelativeToEye:NG,czm_translucentPhong:kG,czm_transpose:UG,czm_unpackClippingExtents:DG,czm_unpackDepth:BG,czm_unpackFloat:OG,czm_unpackUint:YG,czm_valueTransform:zG,czm_vertexLogDepth:HG,czm_windowToEyeCoordinates:KG,czm_writeDepthClamp:JG,czm_writeLogDepth:QG,czm_writeNonPerspective:jG};var oUt=_(T(),1);function gGe(e,t){let n=e;return n=n.replaceAll("version 300 es",""),n=n.replaceAll(/(texture\()/g,"texture2D("),t?(n=n.replaceAll(/\n\s*(in)\s+(vec\d|mat\d|float)/g,` varying $2`),/out_FragData_(\d+)/.test(n)&&(n=`#extension GL_EXT_draw_buffers : enable ${n}`,n=n.replaceAll(/layout\s+\(location\s*=\s*\d+\)\s*out\s+vec4\s+out_FragData_\d+;/g,""),n=n.replaceAll(/out_FragData_(\d+)/g,"gl_FragData[$1]")),n=n.replaceAll(/layout\s+\(location\s*=\s*0\)\s*out\s+vec4\s+out_FragColor;/g,""),n=n.replaceAll(/out_FragColor/g,"gl_FragColor"),n=n.replaceAll(/out_FragColor\[(\d+)\]/g,"gl_FragColor[$1]"),/gl_FragDepth/.test(n)&&(n=`#extension GL_EXT_frag_depth : enable ${n}`,n=n.replaceAll(/gl_FragDepth/g,"gl_FragDepthEXT")),n=`#ifdef GL_EXT_shader_texture_lod #extension GL_EXT_shader_texture_lod : enable #endif ${n}`,n=`#ifdef GL_OES_standard_derivatives #extension GL_OES_standard_derivatives : enable #endif ${n}`):(n=n.replaceAll(/(in)\s+(vec\d|mat\d|float)/g,"attribute $2"),n=n.replaceAll(/(out)\s+(vec\d|mat\d|float)\s+([\w]+);/g,"varying $2 $3;")),n=`#version 100 ${n}`,n}var qG=gGe;function dte(e){return e=e.replace(/\/\/.*/g,""),e.replace(/\/\*\*[\s\S]*?\*\//gm,function(t){let n=t.match(/\n/gm).length,i="";for(let o=0;o<n;++o)i+=` `;return i})}function ute(e,t,n){let i;for(let o=0;o<n.length;++o)n[o].name===e&&(i=n[o]);return l(i)||(t=dte(t),i={name:e,glslSource:t,dependsOn:[],requiredBy:[],evaluated:!1},n.push(i)),i}function mte(e,t){if(e.evaluated)return;e.evaluated=!0;let n=e.glslSource.match(/\bczm_[a-zA-Z0-9_]*/g);l(n)&&n!==null&&(n=n.filter(function(i,o){return n.indexOf(i)===o}),n.forEach(function(i){if(i!==e.name&&ks._czmBuiltinsAndUniforms.hasOwnProperty(i)){let o=ute(i,ks._czmBuiltinsAndUniforms[i],t);e.dependsOn.push(o),o.requiredBy.push(e),mte(o,t)}}))}function yGe(e){let t=[],n=[];for(;e.length>0;){let o=e.pop();n.push(o),o.requiredBy.length===0&&t.push(o)}for(;t.length>0;){let o=t.shift();e.push(o);for(let r=0;r<o.dependsOn.length;++r){let s=o.dependsOn[r],a=s.requiredBy.indexOf(o);s.requiredBy.splice(a,1),s.requiredBy.length===0&&t.push(s)}}let i=[];for(let o=0;o<n.length;++o)n[o].requiredBy.length!==0&&i.push(n[o])}function xGe(e){let t=[],n=ute("main",e,t);mte(n,t),yGe(t);let i="";for(let o=t.length-1;o>=0;--o)i=`${i+t[o].glslSource} `;return i.replace(n.glslSource,"")}function hte(e,t,n){let i,o,r="",s=e.sources;if(l(s))for(i=0,o=s.length;i<o;++i)r+=` #line 0 ${s[i]}`;r=dte(r);let a;r=r.replace(/#version\s+(.*?)\n/gm,function(y,x){return a=x,` `});let c=[];r=r.replace(/#extension.*\n/gm,function(y){return c.push(y),` `}),r=r.replace(/precision\s(lowp|mediump|highp)\s(float|int);/,"");let d=e.pickColorQualifier;l(d)&&(r=ks.createPickFragmentShaderSource(r,d));let u="",h=c.length;for(i=0;i<h;i++)u+=c[i];t&&(u+=`#ifdef GL_FRAGMENT_PRECISION_HIGH precision highp float; precision highp int; #else precision mediump float; precision mediump int; #define highp mediump #endif `);let p=e.defines;if(l(p))for(i=0,o=p.length;i<o;++i){let y=p[i];y.length!==0&&(u+=`#define ${y} `)}n.textureFloatLinear&&(u+=`#define OES_texture_float_linear `),n.floatingPointTexture&&(u+=`#define OES_texture_float `);let g="";e.includeBuiltIns&&(g=xGe(r)),u+=` #line 0 `;let f=g+r;return n.webgl2&&t&&!/layout\s*\(location\s*=\s*0\)\s*out\s+vec4\s+out_FragColor;/g.test(f)&&!/czm_out_FragColor/g.test(f)&&/out_FragColor/g.test(f)&&(u+=`layout(location = 0) out vec4 out_FragColor; `),u+=g,u+=r,n.webgl2?u=`#version 300 es ${u}`:u=qG(u,t),u}function ks(e){e=e??Y.EMPTY_OBJECT;let t=e.pickColorQualifier;this.defines=l(e.defines)?e.defines.slice(0):[],this.sources=l(e.sources)?e.sources.slice(0):[],this.pickColorQualifier=t,this.includeBuiltIns=e.includeBuiltIns??!0}ks.prototype.clone=function(){return new ks({sources:this.sources,defines:this.defines,pickColorQualifier:this.pickColorQualifier,includeBuiltIns:this.includeBuiltIns})};ks.replaceMain=function(e,t){return t=`void ${t}()`,e.replace(/void\s+main\s*\(\s*(?:void)?\s*\)/g,t)};ks.prototype.getCacheKey=function(){let t=this.defines.slice().sort().join(","),n=this.pickColorQualifier,i=this.includeBuiltIns,o=this.sources.join(` `);return`${t}:${n}:${i}:${o}`};ks.prototype.createCombinedVertexShader=function(e){return hte(this,!1,e)};ks.prototype.createCombinedFragmentShader=function(e){return hte(this,!0,e)};ks._czmBuiltinsAndUniforms={};for(let e in _x)_x.hasOwnProperty(e)&&(ks._czmBuiltinsAndUniforms[e]=_x[e]);for(let e in xp)if(xp.hasOwnProperty(e)){let t=xp[e];typeof t.getDeclaration=="function"&&(ks._czmBuiltinsAndUniforms[e]=t.getDeclaration(e))}ks.createPickVertexShaderSource=function(e){return`${ks.replaceMain(e,"czm_old_main")} in vec4 pickColor; out vec4 czm_pickColor; void main() { czm_old_main(); czm_pickColor = pickColor; }`};ks.createPickFragmentShaderSource=function(e,t){let n=ks.replaceMain(e,"czm_old_main"),i=`${t} vec4 czm_pickColor; void main() { czm_old_main(); if (out_FragColor.a == 0.0) { discard; } out_FragColor = czm_pickColor; }`;return`${n} ${i}`};function _Ge(e,t){let n=e.defines,i=n.length;for(let o=0;o<i;++o)if(n[o]===t)return!0;return!1}function fte(e,t){let n=e.sources,i=n.length;for(let o=0;o<i;++o)if(n[o].indexOf(t)!==-1)return!0;return!1}function pte(e,t){let n=t.length;for(let i=0;i<n;++i){let o=t[i];if(fte(e,o))return o}}var TGe=["v_normalEC","v_normal"];ks.findNormalVarying=function(e){return fte(e,"#ifdef HAS_NORMALS")?_Ge(e,"HAS_NORMALS")?"v_normalEC":void 0:pte(e,TGe)};var SGe=["v_positionEC"];ks.findPositionVarying=function(e){return pte(e,SGe)};var De=ks;function Pm(e){this._context=e,this._shaders={},this._numberOfShaders=0,this._shadersToRelease={}}Object.defineProperties(Pm.prototype,{numberOfShaders:{get:function(){return this._numberOfShaders}}});Pm.prototype.replaceShaderProgram=function(e){return l(e.shaderProgram)&&e.shaderProgram.destroy(),this.getShaderProgram(e)};function CGe(e){let t=Object.keys(e).sort();return JSON.stringify(e,t)}Pm.prototype.getShaderProgram=function(e){let t=e.vertexShaderSource,n=e.fragmentShaderSource,i=e.attributeLocations;typeof t=="string"&&(t=new De({sources:[t]})),typeof n=="string"&&(n=new De({sources:[n]}));let o=t.getCacheKey(),r=n.getCacheKey(),s=l(i)?CGe(i):"",a=`${o}:${r}:${s}`,c;if(l(this._shaders[a]))c=this._shaders[a],delete this._shadersToRelease[a];else{let d=this._context,u=t.createCombinedVertexShader(d),h=n.createCombinedFragmentShader(d),p=new $t({gl:d._gl,logShaderCompilation:d.logShaderCompilation,debugShaders:d.debugShaders,vertexShaderSource:t,vertexShaderText:u,fragmentShaderSource:n,fragmentShaderText:h,attributeLocations:i});c={cache:this,shaderProgram:p,keyword:a,derivedKeywords:[],count:0},p._cachedShader=c,this._shaders[a]=c,++this._numberOfShaders}return++c.count,c.shaderProgram};Pm.prototype.replaceDerivedShaderProgram=function(e,t,n){let i=e._cachedShader,o=t+i.keyword,r=this._shaders[o];if(l(r)){gY(this,r);let s=i.derivedKeywords.indexOf(t);s>-1&&i.derivedKeywords.splice(s,1)}return this.createDerivedShaderProgram(e,t,n)};Pm.prototype.getDerivedShaderProgram=function(e,t){let n=e._cachedShader,i=t+n.keyword,o=this._shaders[i];if(l(o))return o.shaderProgram};Pm.prototype.createDerivedShaderProgram=function(e,t,n){let i=e._cachedShader,o=t+i.keyword,r=n.vertexShaderSource,s=n.fragmentShaderSource,a=n.attributeLocations;typeof r=="string"&&(r=new De({sources:[r]})),typeof s=="string"&&(s=new De({sources:[s]}));let c=this._context,d=r.createCombinedVertexShader(c),u=s.createCombinedFragmentShader(c),h=new $t({gl:c._gl,logShaderCompilation:c.logShaderCompilation,debugShaders:c.debugShaders,vertexShaderSource:r,vertexShaderText:d,fragmentShaderSource:s,fragmentShaderText:u,attributeLocations:a}),p={cache:this,shaderProgram:h,keyword:o,derivedKeywords:[],count:0};return i.derivedKeywords.push(t),h._cachedShader=p,this._shaders[o]=p,h};function gY(e,t){let n=t.derivedKeywords,i=n.length;for(let o=0;o<i;++o){let r=n[o]+t.keyword,s=e._shaders[r];gY(e,s)}delete e._shaders[t.keyword],t.shaderProgram.finalDestroy()}Pm.prototype.destroyReleasedShaderPrograms=function(){let e=this._shadersToRelease;for(let t in e)if(e.hasOwnProperty(t)){let n=e[t];gY(this,n),--this._numberOfShaders}this._shadersToRelease={}};Pm.prototype.releaseShaderProgram=function(e){if(l(e)){let t=e._cachedShader;t&&--t.count===0&&(this._shadersToRelease[t.keyword]=t)}};Pm.prototype.isDestroyed=function(){return!1};Pm.prototype.destroy=function(){let e=this._shaders;for(let t in e)e.hasOwnProperty(t)&&e[t].shaderProgram.finalDestroy();return me(this)};var $G=Pm;var IUt=_(T(),1);function vm(e){e=e??Y.EMPTY_OBJECT;let{context:t,source:n,pixelFormat:i=it.RGBA,pixelDatatype:o=je.UNSIGNED_BYTE,flipY:r=!0,skipColorSpaceConversion:s=!1,sampler:a=new qt}=e,{width:c,height:d}=e;l(n)&&(l(c)||(c=n.videoWidth??n.naturalWidth??n.width),l(d)||(d=n.videoHeight??n.naturalHeight??n.height));let u=e.preMultiplyAlpha||i===it.RGB||i===it.LUMINANCE,h=it.toInternalFormat(i,o,t),p=it.isCompressedFormat(h),g=t._gl,f=p?it.compressedTextureSizeInBytes(i,c,d):it.textureSizeInBytes(i,o,c,d);this._id=e.id??zn(),this._context=t,this._textureFilterAnisotropic=t._textureFilterAnisotropic,this._textureTarget=g.TEXTURE_2D,this._texture=g.createTexture(),this._internalFormat=h,this._pixelFormat=i,this._pixelDatatype=o,this._width=c,this._height=d,this._dimensions=new U(c,d),this._hasMipmap=!1,this._sizeInBytes=f,this._preMultiplyAlpha=u,this._flipY=r,this._initialized=!1,this._sampler=void 0,this._sampler=a,xte(this,a),g.activeTexture(g.TEXTURE0),g.bindTexture(this._textureTarget,this._texture),l(n)?(s?g.pixelStorei(g.UNPACK_COLORSPACE_CONVERSION_WEBGL,g.NONE):g.pixelStorei(g.UNPACK_COLORSPACE_CONVERSION_WEBGL,g.BROWSER_DEFAULT_WEBGL),l(n.arrayBufferView)?it.isCompressedFormat(h)?VGe(this,n):bte(this,n):l(n.framebuffer)?RGe(this,n):gte(this,n),this._initialized=!0):yte(this),g.bindTexture(this._textureTarget,null)}function VGe(e,t){let i=e._context._gl,o=e._textureTarget,r=e._internalFormat,{width:s,height:a}=e;if(i.pixelStorei(i.UNPACK_ALIGNMENT,4),i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL,!1),i.compressedTexImage2D(o,0,r,s,a,0,t.arrayBufferView),l(t.mipLevels)){let c=s,d=a;for(let u=0;u<t.mipLevels.length;++u)c=jN(c),d=jN(d),i.compressedTexImage2D(o,u+1,r,c,d,0,t.mipLevels[u])}}function bte(e,t){let n=e._context,i=n._gl,o=e._textureTarget,r=e._internalFormat,{width:s,height:a,pixelFormat:c,pixelDatatype:d,flipY:u}=e,h=it.alignmentInBytes(c,d,s);i.pixelStorei(i.UNPACK_ALIGNMENT,h),i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL,!1);let{arrayBufferView:p}=t;if(u&&(p=it.flipY(p,c,d,s,a)),i.texImage2D(o,0,r,s,a,0,c,je.toWebGLConstant(d,n),p),l(t.mipLevels)){let g=s,f=a;for(let y=0;y<t.mipLevels.length;++y)g=jN(g),f=jN(f),i.texImage2D(o,y+1,r,g,f,0,c,je.toWebGLConstant(d,n),t.mipLevels[y])}}function LGe(e,t,n,i,o,r){let s=e._context,a=s._gl,{pixelFormat:c,pixelDatatype:d}=e,u=it.alignmentInBytes(c,d,o);a.pixelStorei(a.UNPACK_ALIGNMENT,u),a.pixelStorei(a.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),a.pixelStorei(a.UNPACK_FLIP_Y_WEBGL,!1),e.flipY&&(t=it.flipY(t,c,d,o,r)),a.texSubImage2D(e._textureTarget,0,n,i,o,r,c,je.toWebGLConstant(d,s),t)}function RGe(e,t){let n=e._context,i=n._gl;i.pixelStorei(i.UNPACK_ALIGNMENT,4),i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL,!1),t.framebuffer!==n.defaultFramebuffer&&t.framebuffer._bind(),i.copyTexImage2D(e._textureTarget,0,e._internalFormat,t.xOffset,t.yOffset,e.width,e.height,0),t.framebuffer!==n.defaultFramebuffer&&t.framebuffer._unBind()}function gte(e,t){let n=e._context,i=n._gl;i.pixelStorei(i.UNPACK_ALIGNMENT,4),i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,e.preMultiplyAlpha),i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL,e.flipY),i.texImage2D(e._textureTarget,0,e._internalFormat,e.pixelFormat,je.toWebGLConstant(e.pixelDatatype,n),t)}function ZGe(e,t,n,i){let o=e._context,r=o._gl;r.pixelStorei(r.UNPACK_ALIGNMENT,4),r.pixelStorei(r.UNPACK_PREMULTIPLY_ALPHA_WEBGL,e.preMultiplyAlpha),r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,e.flipY),r.texSubImage2D(e._textureTarget,0,n,i,e.pixelFormat,je.toWebGLConstant(e.pixelDatatype,o),t)}function jN(e){let t=Math.floor(e/2)|0;return Math.max(t,1)}function yte(e){let t=e._context;t._gl.texImage2D(e._textureTarget,0,e._internalFormat,e._width,e._height,0,e._pixelFormat,je.toWebGLConstant(e._pixelDatatype,t),null)}vm.create=function(e){return new vm(e)};vm.fromFramebuffer=function(e){e=e??Y.EMPTY_OBJECT;let t=e.context,n=t._gl,{pixelFormat:i=it.RGB,framebufferXOffset:o=0,framebufferYOffset:r=0,width:s=n.drawingBufferWidth,height:a=n.drawingBufferHeight,framebuffer:c}=e;return new vm({context:t,width:s,height:a,pixelFormat:i,source:{framebuffer:l(c)?c:t.defaultFramebuffer,xOffset:o,yOffset:r,width:s,height:a}})};Object.defineProperties(vm.prototype,{id:{get:function(){return this._id}},sampler:{get:function(){return this._sampler},set:function(e){xte(this,e),this._sampler=e}},pixelFormat:{get:function(){return this._pixelFormat}},pixelDatatype:{get:function(){return this._pixelDatatype}},dimensions:{get:function(){return this._dimensions}},preMultiplyAlpha:{get:function(){return this._preMultiplyAlpha}},flipY:{get:function(){return this._flipY}},width:{get:function(){return this._width}},height:{get:function(){return this._height}},sizeInBytes:{get:function(){return this._hasMipmap?Math.floor(this._sizeInBytes*4/3):this._sizeInBytes}},_target:{get:function(){return this._textureTarget}}});function xte(e,t){let{minificationFilter:n,magnificationFilter:i}=t,o=[jt.NEAREST_MIPMAP_NEAREST,jt.NEAREST_MIPMAP_LINEAR,jt.LINEAR_MIPMAP_NEAREST,jt.LINEAR_MIPMAP_LINEAR].includes(n),r=e._context,s=e._pixelFormat,a=e._pixelDatatype;(a===je.FLOAT&&!r.textureFloatLinear||a===je.HALF_FLOAT&&!r.textureHalfFloatLinear)&&(n=o?jt.NEAREST_MIPMAP_NEAREST:jt.NEAREST,i=hi.NEAREST),r.webgl2&&it.isDepthFormat(s)&&(n=jt.NEAREST,i=hi.NEAREST);let c=r._gl,d=e._textureTarget;c.activeTexture(c.TEXTURE0),c.bindTexture(d,e._texture),c.texParameteri(d,c.TEXTURE_MIN_FILTER,n),c.texParameteri(d,c.TEXTURE_MAG_FILTER,i),c.texParameteri(d,c.TEXTURE_WRAP_S,t.wrapS),c.texParameteri(d,c.TEXTURE_WRAP_T,t.wrapT),l(e._textureFilterAnisotropic)&&c.texParameteri(d,e._textureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,t.maximumAnisotropy),c.bindTexture(d,null)}vm.prototype.copyFrom=function(e){let{xOffset:t=0,yOffset:n=0,source:i,skipColorSpaceConversion:o=!1}=e,s=this._context._gl,a=this._textureTarget;s.activeTexture(s.TEXTURE0),s.bindTexture(a,this._texture);let{width:c,height:d}=i;l(i.videoWidth)&&l(i.videoHeight)?(c=i.videoWidth,d=i.videoHeight):l(i.naturalWidth)&&l(i.naturalHeight)&&(c=i.naturalWidth,d=i.naturalHeight),o?s.pixelStorei(s.UNPACK_COLORSPACE_CONVERSION_WEBGL,s.NONE):s.pixelStorei(s.UNPACK_COLORSPACE_CONVERSION_WEBGL,s.BROWSER_DEFAULT_WEBGL);let u=!1;this._initialized||(t===0&&n===0&&c===this._width&&d===this._height?(l(i.arrayBufferView)?bte(this,i):gte(this,i),u=!0):(s.pixelStorei(s.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),s.pixelStorei(s.UNPACK_FLIP_Y_WEBGL,!1),yte(this)),this._initialized=!0),u||(l(i.arrayBufferView)?LGe(this,i.arrayBufferView,t,n,c,d):ZGe(this,i,t,n)),s.bindTexture(a,null)};vm.prototype.copyFromFramebuffer=function(e,t,n,i,o,r){e=e??0,t=t??0,n=n??0,i=i??0,o=o??this._width,r=r??this._height;let s=this._context._gl,a=this._textureTarget;s.activeTexture(s.TEXTURE0),s.bindTexture(a,this._texture),s.copyTexSubImage2D(a,0,e,t,n,i,o,r),s.bindTexture(a,null),this._initialized=!0};vm.prototype.generateMipmap=function(e){e=e??df.DONT_CARE,this._hasMipmap=!0;let t=this._context._gl,n=this._textureTarget;t.hint(t.GENERATE_MIPMAP_HINT,e),t.activeTexture(t.TEXTURE0),t.bindTexture(n,this._texture),t.generateMipmap(n),t.bindTexture(n,null)};vm.prototype.isDestroyed=function(){return!1};vm.prototype.destroy=function(){return this._context._gl.deleteTexture(this._texture),me(this)};var vt=vm;var vUt=_(T(),1);function Tx(){this._textures={},this._numberOfTextures=0,this._texturesToRelease={}}Object.defineProperties(Tx.prototype,{numberOfTextures:{get:function(){return this._numberOfTextures}}});Tx.prototype.getTexture=function(e){let t=this._textures[e];if(l(t))return delete this._texturesToRelease[e],++t.count,t.texture};Tx.prototype.addTexture=function(e,t){let n={texture:t,count:1};t.finalDestroy=t.destroy;let i=this;t.destroy=function(){--n.count===0&&(i._texturesToRelease[e]=n)},this._textures[e]=n,++this._numberOfTextures};Tx.prototype.destroyReleasedTextures=function(){let e=this._texturesToRelease;for(let t in e)if(e.hasOwnProperty(t)){let n=e[t];delete this._textures[t],n.texture.finalDestroy(),--this._numberOfTextures}this._texturesToRelease={}};Tx.prototype.isDestroyed=function(){return!1};Tx.prototype.destroy=function(){let e=this._textures;for(let t in e)e.hasOwnProperty(t)&&e[t].texture.finalDestroy();return me(this)};var eE=Tx;var FDt=_(T(),1);var nDt=_(T(),1);var QUt=_(T(),1);var UUt=_(T(),1);function Su(e){this.planes=e??[]}var tE=[new m,new m,new m];m.clone(m.UNIT_X,tE[0]);m.clone(m.UNIT_Y,tE[1]);m.clone(m.UNIT_Z,tE[2]);var D0=new m,GGe=new m,_te=new sn(new m(1,0,0),0);Su.fromBoundingSphere=function(e,t){l(t)||(t=new Su);let n=tE.length,i=t.planes;i.length=2*n;let o=e.center,r=e.radius,s=0;for(let a=0;a<n;++a){let c=tE[a],d=i[s],u=i[s+1];l(d)||(d=i[s]=new se),l(u)||(u=i[s+1]=new se),m.multiplyByScalar(c,-r,D0),m.add(o,D0,D0),d.x=c.x,d.y=c.y,d.z=c.z,d.w=-m.dot(c,D0),m.multiplyByScalar(c,r,D0),m.add(o,D0,D0),u.x=-c.x,u.y=-c.y,u.z=-c.z,u.w=-m.dot(m.negate(c,GGe),D0),s+=2}return t};Su.prototype.computeVisibility=function(e){let t=this.planes,n=!1;for(let i=0,o=t.length;i<o;++i){let r=e.intersectPlane(sn.fromCartesian4(t[i],_te));if(r===zt.OUTSIDE)return zt.OUTSIDE;r===zt.INTERSECTING&&(n=!0)}return n?zt.INTERSECTING:zt.INSIDE};Su.prototype.computeVisibilityWithPlaneMask=function(e,t){if(t===Su.MASK_OUTSIDE||t===Su.MASK_INSIDE)return t;let n=Su.MASK_INSIDE,i=this.planes;for(let o=0,r=i.length;o<r;++o){let s=o<31?1<<o:0;if(o<31&&(t&s)===0)continue;let a=e.intersectPlane(sn.fromCartesian4(i[o],_te));if(a===zt.OUTSIDE)return Su.MASK_OUTSIDE;a===zt.INTERSECTING&&(n|=s)}return n};Su.MASK_OUTSIDE=4294967295;Su.MASK_INSIDE=0;Su.MASK_INDETERMINATE=2147483647;var hs=Su;function uf(e){e=e??Y.EMPTY_OBJECT,this.left=e.left,this._left=void 0,this.right=e.right,this._right=void 0,this.top=e.top,this._top=void 0,this.bottom=e.bottom,this._bottom=void 0,this.near=e.near??1,this._near=this.near,this.far=e.far??5e8,this._far=this.far,this._cullingVolume=new hs,this._orthographicMatrix=new F}function Tte(e){(e.top!==e._top||e.bottom!==e._bottom||e.left!==e._left||e.right!==e._right||e.near!==e._near||e.far!==e._far)&&(e._left=e.left,e._right=e.right,e._top=e.top,e._bottom=e.bottom,e._near=e.near,e._far=e.far,e._orthographicMatrix=F.computeOrthographicOffCenter(e.left,e.right,e.bottom,e.top,e.near,e.far,e._orthographicMatrix))}Object.defineProperties(uf.prototype,{projectionMatrix:{get:function(){return Tte(this),this._orthographicMatrix}}});var EGe=new m,IGe=new m,XGe=new m,yY=new m;uf.prototype.computeCullingVolume=function(e,t,n){let i=this._cullingVolume.planes,o=this.top,r=this.bottom,s=this.right,a=this.left,c=this.near,d=this.far,u=m.cross(t,n,EGe);m.normalize(u,u);let h=IGe;m.multiplyByScalar(t,c,h),m.add(e,h,h);let p=XGe;m.multiplyByScalar(u,a,p),m.add(h,p,p);let g=i[0];return l(g)||(g=i[0]=new se),g.x=u.x,g.y=u.y,g.z=u.z,g.w=-m.dot(u,p),m.multiplyByScalar(u,s,p),m.add(h,p,p),g=i[1],l(g)||(g=i[1]=new se),g.x=-u.x,g.y=-u.y,g.z=-u.z,g.w=-m.dot(m.negate(u,yY),p),m.multiplyByScalar(n,r,p),m.add(h,p,p),g=i[2],l(g)||(g=i[2]=new se),g.x=n.x,g.y=n.y,g.z=n.z,g.w=-m.dot(n,p),m.multiplyByScalar(n,o,p),m.add(h,p,p),g=i[3],l(g)||(g=i[3]=new se),g.x=-n.x,g.y=-n.y,g.z=-n.z,g.w=-m.dot(m.negate(n,yY),p),g=i[4],l(g)||(g=i[4]=new se),g.x=t.x,g.y=t.y,g.z=t.z,g.w=-m.dot(t,h),m.multiplyByScalar(t,d,p),m.add(e,p,p),g=i[5],l(g)||(g=i[5]=new se),g.x=-t.x,g.y=-t.y,g.z=-t.z,g.w=-m.dot(m.negate(t,yY),p),this._cullingVolume};uf.prototype.getPixelDimensions=function(e,t,n,i,o){Tte(this);let r=this.right-this.left,s=this.top-this.bottom,a=i*r/e,c=i*s/t;return o.x=a,o.y=c,o};uf.prototype.clone=function(e){return l(e)||(e=new uf),e.left=this.left,e.right=this.right,e.top=this.top,e.bottom=this.bottom,e.near=this.near,e.far=this.far,e._left=void 0,e._right=void 0,e._top=void 0,e._bottom=void 0,e._near=void 0,e._far=void 0,e};uf.prototype.equals=function(e){return l(e)&&e instanceof uf&&this.right===e.right&&this.left===e.left&&this.top===e.top&&this.bottom===e.bottom&&this.near===e.near&&this.far===e.far};uf.prototype.equalsEpsilon=function(e,t,n){return e===this||l(e)&&e instanceof uf&&X.equalsEpsilon(this.right,e.right,t,n)&&X.equalsEpsilon(this.left,e.left,t,n)&&X.equalsEpsilon(this.top,e.top,t,n)&&X.equalsEpsilon(this.bottom,e.bottom,t,n)&&X.equalsEpsilon(this.near,e.near,t,n)&&X.equalsEpsilon(this.far,e.far,t,n)};var Pr=uf;function Gl(e){e=e??Y.EMPTY_OBJECT,this._offCenterFrustum=new Pr,this.width=e.width,this._width=void 0,this.aspectRatio=e.aspectRatio,this._aspectRatio=void 0,this.near=e.near??1,this._near=this.near,this.far=e.far??5e8,this._far=this.far}Gl.packedLength=4;Gl.pack=function(e,t,n){return n=n??0,t[n++]=e.width,t[n++]=e.aspectRatio,t[n++]=e.near,t[n]=e.far,t};Gl.unpack=function(e,t,n){return t=t??0,l(n)||(n=new Gl),n.width=e[t++],n.aspectRatio=e[t++],n.near=e[t++],n.far=e[t],n};function B0(e){let t=e._offCenterFrustum;if(e.width!==e._width||e.aspectRatio!==e._aspectRatio||e.near!==e._near||e.far!==e._far){e._aspectRatio=e.aspectRatio,e._width=e.width,e._near=e.near,e._far=e.far;let n=1/e.aspectRatio;t.right=e.width*.5,t.left=-t.right,t.top=n*t.right,t.bottom=-t.top,t.near=e.near,t.far=e.far}}Object.defineProperties(Gl.prototype,{projectionMatrix:{get:function(){return B0(this),this._offCenterFrustum.projectionMatrix}},offCenterFrustum:{get:function(){return B0(this),this._offCenterFrustum}}});Gl.prototype.computeCullingVolume=function(e,t,n){return B0(this),this._offCenterFrustum.computeCullingVolume(e,t,n)};Gl.prototype.getPixelDimensions=function(e,t,n,i,o){return B0(this),this._offCenterFrustum.getPixelDimensions(e,t,n,i,o)};Gl.prototype.clone=function(e){return l(e)||(e=new Gl),e.aspectRatio=this.aspectRatio,e.width=this.width,e.near=this.near,e.far=this.far,e._aspectRatio=void 0,e._width=void 0,e._near=void 0,e._far=void 0,this._offCenterFrustum.clone(e._offCenterFrustum),e};Gl.prototype.equals=function(e){return!l(e)||!(e instanceof Gl)?!1:(B0(this),B0(e),this.width===e.width&&this.aspectRatio===e.aspectRatio&&this._offCenterFrustum.equals(e._offCenterFrustum))};Gl.prototype.equalsEpsilon=function(e,t,n){return!l(e)||!(e instanceof Gl)?!1:(B0(this),B0(e),X.equalsEpsilon(this.width,e.width,t,n)&&X.equalsEpsilon(this.aspectRatio,e.aspectRatio,t,n)&&this._offCenterFrustum.equalsEpsilon(e._offCenterFrustum,t,n))};var an=Gl;var uDt=_(T(),1);var xY={};function WGe(e){let t=6.239996+.0172019696544*e;return .001657*Math.sin(t+.01671*Math.sin(t))}var PGe=32.184,vGe=2451545;function kte(e,t){t=q.addSeconds(e,PGe,t);let n=q.totalDays(t)-vGe;return t=q.addSeconds(t,WGe(n),t),t}var qN=new q(2451545,0,Hn.TAI),wGe=1e3,Cu=X.RADIANS_PER_DEGREE,hd=X.RADIANS_PER_ARCSECOND,Pa=14959787e4,Ste=new $;function Ute(e,t,n,i,o,r,s){n<0&&(n=-n,o+=X.PI);let a=e*(1-t),c=i-o,d=o,u=AGe(r-i,t),h=FGe(t,0);DGe(c,n,d,Ste);let p=a*(1+t),g=Math.cos(u),f=Math.sin(u),y=1+t*g,x=p/y;return l(s)?(s.x=x*g,s.y=x*f,s.z=0):s=new m(x*g,x*f,0),$.multiplyByVector(Ste,s,s)}function FGe(e,t){return e<=t?"Circular":e<1-t?"Elliptical":e<=1+t?"Parabolic":"Hyperbolic"}function AGe(e,t){let n=kGe(e,t);return UGe(n,t)}var MGe=50,NGe=X.EPSILON8;function kGe(e,t){let n=Math.floor(e/X.TWO_PI);e-=n*X.TWO_PI;let i=e+t*Math.sin(e)/(1-Math.sin(e+t)+Math.sin(e)),o=Number.MAX_VALUE,r;for(r=0;r<MGe&&Math.abs(o-i)>NGe;++r){o=i;let s=o-t*Math.sin(o)-e,a=1-t*Math.cos(o);i=o-s/a}return o=i+n*X.TWO_PI,o}function UGe(e,t){let n=Math.floor(e/X.TWO_PI);e-=n*X.TWO_PI;let i=Math.cos(e)-t,o=Math.sin(e)*Math.sqrt(1-t*t),r=Math.atan2(o,i);return r=X.zeroToTwoPi(r),e<0&&(r-=X.TWO_PI),r+=n*X.TWO_PI,r}function DGe(e,t,n,i){let o=Math.cos(e),r=Math.sin(e),s=Math.cos(t),a=Math.sin(t),c=Math.cos(n),d=Math.sin(n);return l(i)?(i[0]=c*o-d*r*s,i[1]=d*o+c*r*s,i[2]=r*a,i[3]=-c*r-d*o*s,i[4]=-d*r+c*o*s,i[5]=o*a,i[6]=d*a,i[7]=-c*a,i[8]=s):i=new $(c*o-d*r*s,-c*r-d*o*s,d*a,d*o+c*r*s,-d*r+c*o*s,-c*a,r*a,o*a,s),i}var BGe=1.0000010178*Pa,OGe=100.46645683*Cu,YGe=129597742283429e-5*hd,Cte=16002,Vte=21863,Lte=32004,Rte=10931,Zte=14529,Gte=16368,Ete=15318,Ite=32794,zGe=64*1e-7*Pa,HGe=-152*1e-7*Pa,KGe=62*1e-7*Pa,JGe=-8*1e-7*Pa,QGe=32*1e-7*Pa,jGe=-41*1e-7*Pa,qGe=19*1e-7*Pa,$Ge=-11*1e-7*Pa,eEe=-150*1e-7*Pa,tEe=-46*1e-7*Pa,nEe=68*1e-7*Pa,iEe=54*1e-7*Pa,oEe=14*1e-7*Pa,rEe=24*1e-7*Pa,sEe=-28*1e-7*Pa,aEe=22*1e-7*Pa,Xte=10,Wte=16002,Pte=21863,vte=10931,wte=1473,Fte=32004,Ate=4387,Mte=73,cEe=-325*1e-7,lEe=-322*1e-7,dEe=-79*1e-7,uEe=232*1e-7,mEe=-52*1e-7,hEe=97*1e-7,fEe=55*1e-7,pEe=-41*1e-7,bEe=-105*1e-7,gEe=-137*1e-7,yEe=258*1e-7,xEe=35*1e-7,_Ee=-116*1e-7,TEe=-88*1e-7,SEe=-112*1e-7,CEe=-80*1e-7,nC=new q(0,0,Hn.TAI);function VEe(e,t){kte(e,nC);let i=(nC.dayNumber-qN.dayNumber+(nC.secondsOfDay-qN.secondsOfDay)/Kn.SECONDS_PER_DAY)/(Kn.DAYS_PER_JULIAN_CENTURY*10),o=.3595362*i,r=BGe+zGe*Math.cos(Cte*o)+eEe*Math.sin(Cte*o)+HGe*Math.cos(Vte*o)+tEe*Math.sin(Vte*o)+KGe*Math.cos(Lte*o)+nEe*Math.sin(Lte*o)+JGe*Math.cos(Rte*o)+iEe*Math.sin(Rte*o)+QGe*Math.cos(Zte*o)+oEe*Math.sin(Zte*o)+jGe*Math.cos(Gte*o)+rEe*Math.sin(Gte*o)+qGe*Math.cos(Ete*o)+sEe*Math.sin(Ete*o)+$Ge*Math.cos(Ite*o)+aEe*Math.sin(Ite*o),s=OGe+YGe*i+cEe*Math.cos(Xte*o)+bEe*Math.sin(Xte*o)+lEe*Math.cos(Wte*o)+gEe*Math.sin(Wte*o)+dEe*Math.cos(Pte*o)+yEe*Math.sin(Pte*o)+uEe*Math.cos(vte*o)+xEe*Math.sin(vte*o)+mEe*Math.cos(wte*o)+_Ee*Math.sin(wte*o)+hEe*Math.cos(Fte*o)+TEe*Math.sin(Fte*o)+fEe*Math.cos(Ate*o)+SEe*Math.sin(Ate*o)+pEe*Math.cos(Mte*o)+CEe*Math.sin(Mte*o),a=.0167086342-.0004203654*i,c=102.93734808*Cu+11612.3529*hd*i,d=469.97289*hd*i,u=174.87317577*Cu-8679.27034*hd*i;return Ute(r,a,d,c,u,s,t)}function Dte(e,t){kte(e,nC);let i=(nC.dayNumber-qN.dayNumber+(nC.secondsOfDay-qN.secondsOfDay)/Kn.SECONDS_PER_DAY)/Kn.DAYS_PER_JULIAN_CENTURY,o=i*i,r=o*i,s=r*i,a=383397.7725+.004*i,c=.055545526-16e-9*i,d=5.15668983*Cu,u=-8e-5*i+.02966*o-42e-6*r-13e-8*s,h=83.35324312*Cu,p=146434202669e-4*i-38.2702*o-.045047*r+21301e-8*s,g=125.04455501*Cu,f=-69679193631e-4*i+6.3602*o+.007625*r-3586e-8*s,y=218.31664563*Cu,x=17325593434847e-4*i-6.391*o+.006588*r-3169e-8*s,S=297.85019547*Cu+hd*(1602961601209e-3*i-6.3706*o+.006593*r-3169e-8*s),C=93.27209062*Cu+hd*(17395272628478e-4*i-12.7512*o-.001037*r+417e-8*s),V=134.96340251*Cu+hd*(17179159232178e-4*i+31.8792*o+.051635*r-2447e-7*s),L=357.52910918*Cu+hd*(1295965810481e-4*i-.5532*o+136e-6*r-1149e-8*s),Z=310.17137918*Cu-hd*(6967051436e-3*i+6.2068*o+.007618*r-3219e-8*s),E=2*S,P=4*S,W=6*S,v=2*V,A=3*V,b=4*V,R=2*C;a+=3400.4*Math.cos(E)-635.6*Math.cos(E-V)-235.6*Math.cos(V)+218.1*Math.cos(E-L)+181*Math.cos(E+V),c+=.014216*Math.cos(E-V)+.008551*Math.cos(E-v)-.001383*Math.cos(V)+.001356*Math.cos(E+V)-.001147*Math.cos(P-A)-914e-6*Math.cos(P-v)+869e-6*Math.cos(E-L-V)-627e-6*Math.cos(E)-394e-6*Math.cos(P-b)+282e-6*Math.cos(E-L-v)-279e-6*Math.cos(S-V)-236e-6*Math.cos(v)+231e-6*Math.cos(P)+229e-6*Math.cos(W-b)-201e-6*Math.cos(v-R),u+=486.26*Math.cos(E-R)-40.13*Math.cos(E)+37.51*Math.cos(R)+25.73*Math.cos(v-R)+19.97*Math.cos(E-L-R),p+=-55609*Math.sin(E-V)-34711*Math.sin(E-v)-9792*Math.sin(V)+9385*Math.sin(P-A)+7505*Math.sin(P-v)+5318*Math.sin(E+V)+3484*Math.sin(P-b)-3417*Math.sin(E-L-V)-2530*Math.sin(W-b)-2376*Math.sin(E)-2075*Math.sin(E-A)-1883*Math.sin(v)-1736*Math.sin(W-5*V)+1626*Math.sin(L)-1370*Math.sin(W-A),f+=-5392*Math.sin(E-R)-540*Math.sin(L)-441*Math.sin(E)+423*Math.sin(R)-288*Math.sin(v-R),x+=-3332.9*Math.sin(E)+1197.4*Math.sin(E-V)-662.5*Math.sin(L)+396.3*Math.sin(V)-218*Math.sin(E-L);let G=2*Z,I=3*Z;u+=46.997*Math.cos(Z)*i-.614*Math.cos(E-R+Z)*i+.614*Math.cos(E-R-Z)*i-.0297*Math.cos(G)*o-.0335*Math.cos(Z)*o+.0012*Math.cos(E-R+G)*o-16e-5*Math.cos(Z)*r+4e-5*Math.cos(I)*r+4e-5*Math.cos(G)*r;let w=2.116*Math.sin(Z)*i-.111*Math.sin(E-R-Z)*i-.0015*Math.sin(Z)*o;p+=w,x+=w,f+=-520.77*Math.sin(Z)*i+13.66*Math.sin(E-R+Z)*i+1.12*Math.sin(E-Z)*i-1.06*Math.sin(R-Z)*i+.66*Math.sin(G)*o+.371*Math.sin(Z)*o-.035*Math.sin(E-R+G)*o-.015*Math.sin(E-R+Z)*o+.0014*Math.sin(Z)*r-.0011*Math.sin(I)*r-9e-4*Math.sin(G)*r,a*=wGe;let M=d+u*hd,B=h+p*hd,k=y+x*hd,O=g+f*hd;return Ute(a,c,M,B,O,k,t)}var Nte=.012300034,LEe=Nte/(Nte+1)*-1;function REe(e,t){return t=Dte(e,t),m.multiplyByScalar(t,LEe,t)}var Bte=new $(1.0000000000000002,5619723173785822e-31,4690511510146299e-34,-5154129427414611e-31,.9174820620691819,-.39777715593191376,-223970096136568e-30,.39777715593191376,.9174820620691819),nE=new m;xY.computeSunPositionInEarthInertialFrame=function(e,t){return l(e)||(e=q.now()),l(t)||(t=new m),nE=VEe(e,nE),t=m.negate(nE,t),REe(e,nE),m.subtract(t,nE,t),$.multiplyByVector(Bte,t,t),t};xY.computeMoonPositionInEarthInertialFrame=function(e,t){return l(e)||(e=q.now()),t=Dte(e,t),$.multiplyByVector(Bte,t,t),t};var O0=xY;var hDt=_(T(),1),$N={MORPHING:0,COLUMBUS_VIEW:1,SCENE2D:2,SCENE3D:3};$N.getMorphTime=function(e){return e===$N.SCENE3D?1:e===$N.MORPHING?void 0:0};var oe=Object.freeze($N);var gDt=_(T(),1);function ZEe(e){e=e??Y.EMPTY_OBJECT,this.color=D.clone(e.color??D.WHITE),this.intensity=e.intensity??2}var Ip=ZEe;function iC(){this.globeDepthTexture=void 0,this.gamma=void 0,this._viewport=new Ke,this._viewportCartesian4=new se,this._viewportDirty=!1,this._viewportOrthographicMatrix=F.clone(F.IDENTITY),this._viewportTransformation=F.clone(F.IDENTITY),this._model=F.clone(F.IDENTITY),this._view=F.clone(F.IDENTITY),this._inverseView=F.clone(F.IDENTITY),this._projection=F.clone(F.IDENTITY),this._infiniteProjection=F.clone(F.IDENTITY),this._entireFrustum=new U,this._currentFrustum=new U,this._frustumPlanes=new se,this._farDepthFromNearPlusOne=void 0,this._log2FarDepthFromNearPlusOne=void 0,this._oneOverLog2FarDepthFromNearPlusOne=void 0,this._frameState=void 0,this._temeToPseudoFixed=$.clone(F.IDENTITY),this._view3DDirty=!0,this._view3D=new F,this._inverseView3DDirty=!0,this._inverseView3D=new F,this._inverseModelDirty=!0,this._inverseModel=new F,this._inverseTransposeModelDirty=!0,this._inverseTransposeModel=new $,this._viewRotation=new $,this._inverseViewRotation=new $,this._viewRotation3D=new $,this._inverseViewRotation3D=new $,this._inverseProjectionDirty=!0,this._inverseProjection=new F,this._modelViewDirty=!0,this._modelView=new F,this._modelView3DDirty=!0,this._modelView3D=new F,this._modelViewRelativeToEyeDirty=!0,this._modelViewRelativeToEye=new F,this._inverseModelViewDirty=!0,this._inverseModelView=new F,this._inverseModelView3DDirty=!0,this._inverseModelView3D=new F,this._viewProjectionDirty=!0,this._viewProjection=new F,this._inverseViewProjectionDirty=!0,this._inverseViewProjection=new F,this._modelViewProjectionDirty=!0,this._modelViewProjection=new F,this._inverseModelViewProjectionDirty=!0,this._inverseModelViewProjection=new F,this._modelViewProjectionRelativeToEyeDirty=!0,this._modelViewProjectionRelativeToEye=new F,this._modelViewInfiniteProjectionDirty=!0,this._modelViewInfiniteProjection=new F,this._normalDirty=!0,this._normal=new $,this._normal3DDirty=!0,this._normal3D=new $,this._inverseNormalDirty=!0,this._inverseNormal=new $,this._inverseNormal3DDirty=!0,this._inverseNormal3D=new $,this._encodedCameraPositionMCDirty=!0,this._encodedCameraPositionMC=new On,this._cameraPosition=new m,this._sunPositionWC=new m,this._sunPositionColumbusView=new m,this._sunDirectionWC=new m,this._sunDirectionEC=new m,this._moonDirectionEC=new m,this._lightDirectionWC=new m,this._lightDirectionEC=new m,this._lightColor=new m,this._lightColorHdr=new m,this._pass=void 0,this._mode=void 0,this._mapProjection=void 0,this._ellipsoid=void 0,this._cameraDirection=new m,this._cameraRight=new m,this._cameraUp=new m,this._frustum2DWidth=0,this._eyeHeight=0,this._eyeHeight2D=new U,this._eyeEllipsoidNormalEC=new m,this._eyeEllipsoidCurvature=new U,this._modelToEnu=new F,this._enuToModel=new F,this._pixelRatio=1,this._orthographicIn3D=!1,this._backgroundColor=new D,this._brdfLut=void 0,this._environmentMap=void 0,this._sphericalHarmonicCoefficients=void 0,this._specularEnvironmentMaps=void 0,this._specularEnvironmentMapsMaximumLOD=void 0,this._fogDensity=void 0,this._fogVisualDensityScalar=void 0,this._fogMinimumBrightness=void 0,this._atmosphereHsbShift=void 0,this._atmosphereLightIntensity=void 0,this._atmosphereRayleighCoefficient=new m,this._atmosphereRayleighScaleHeight=new m,this._atmosphereMieCoefficient=new m,this._atmosphereMieScaleHeight=void 0,this._atmosphereMieAnisotropy=void 0,this._atmosphereDynamicLighting=void 0,this._invertClassificationColor=void 0,this._splitPosition=0,this._pixelSizePerMeter=void 0,this._geometricToleranceOverMeter=void 0,this._minimumDisableDepthTestDistance=void 0}Object.defineProperties(iC.prototype,{frameState:{get:function(){return this._frameState}},viewport:{get:function(){return this._viewport},set:function(e){if(!Ke.equals(e,this._viewport)){Ke.clone(e,this._viewport);let t=this._viewport,n=this._viewportCartesian4;n.x=t.x,n.y=t.y,n.z=t.width,n.w=t.height,this._viewportDirty=!0}}},viewportCartesian4:{get:function(){return this._viewportCartesian4}},viewportOrthographic:{get:function(){return Yte(this),this._viewportOrthographicMatrix}},viewportTransformation:{get:function(){return Yte(this),this._viewportTransformation}},model:{get:function(){return this._model},set:function(e){F.clone(e,this._model),this._modelView3DDirty=!0,this._inverseModelView3DDirty=!0,this._inverseModelDirty=!0,this._inverseTransposeModelDirty=!0,this._modelViewDirty=!0,this._inverseModelViewDirty=!0,this._modelViewRelativeToEyeDirty=!0,this._inverseModelViewDirty=!0,this._modelViewProjectionDirty=!0,this._inverseModelViewProjectionDirty=!0,this._modelViewProjectionRelativeToEyeDirty=!0,this._modelViewInfiniteProjectionDirty=!0,this._normalDirty=!0,this._inverseNormalDirty=!0,this._normal3DDirty=!0,this._inverseNormal3DDirty=!0,this._encodedCameraPositionMCDirty=!0}},inverseModel:{get:function(){return this._inverseModelDirty&&(this._inverseModelDirty=!1,F.inverse(this._model,this._inverseModel)),this._inverseModel}},inverseTransposeModel:{get:function(){let e=this._inverseTransposeModel;return this._inverseTransposeModelDirty&&(this._inverseTransposeModelDirty=!1,F.getMatrix3(this.inverseModel,e),$.transpose(e,e)),e}},view:{get:function(){return this._view}},view3D:{get:function(){return TY(this),this._view3D}},viewRotation:{get:function(){return TY(this),this._viewRotation}},viewRotation3D:{get:function(){return TY(this),this._viewRotation3D}},inverseView:{get:function(){return this._inverseView}},inverseView3D:{get:function(){return Kte(this),this._inverseView3D}},inverseViewRotation:{get:function(){return this._inverseViewRotation}},inverseViewRotation3D:{get:function(){return Kte(this),this._inverseViewRotation3D}},projection:{get:function(){return this._projection}},inverseProjection:{get:function(){return MEe(this),this._inverseProjection}},infiniteProjection:{get:function(){return this._infiniteProjection}},modelView:{get:function(){return NEe(this),this._modelView}},modelView3D:{get:function(){return kEe(this),this._modelView3D}},modelViewRelativeToEye:{get:function(){return zEe(this),this._modelViewRelativeToEye}},inverseModelView:{get:function(){return UEe(this),this._inverseModelView}},inverseModelView3D:{get:function(){return DEe(this),this._inverseModelView3D}},viewProjection:{get:function(){return BEe(this),this._viewProjection}},inverseViewProjection:{get:function(){return OEe(this),this._inverseViewProjection}},modelViewProjection:{get:function(){return YEe(this),this._modelViewProjection}},inverseModelViewProjection:{get:function(){return HEe(this),this._inverseModelViewProjection}},modelViewProjectionRelativeToEye:{get:function(){return KEe(this),this._modelViewProjectionRelativeToEye}},modelViewInfiniteProjection:{get:function(){return JEe(this),this._modelViewInfiniteProjection}},normal:{get:function(){return QEe(this),this._normal}},normal3D:{get:function(){return jEe(this),this._normal3D}},inverseNormal:{get:function(){return qEe(this),this._inverseNormal}},inverseNormal3D:{get:function(){return $Ee(this),this._inverseNormal3D}},entireFrustum:{get:function(){return this._entireFrustum}},currentFrustum:{get:function(){return this._currentFrustum}},frustumPlanes:{get:function(){return this._frustumPlanes}},farDepthFromNearPlusOne:{get:function(){return this._farDepthFromNearPlusOne}},log2FarDepthFromNearPlusOne:{get:function(){return this._log2FarDepthFromNearPlusOne}},oneOverLog2FarDepthFromNearPlusOne:{get:function(){return this._oneOverLog2FarDepthFromNearPlusOne}},eyeHeight:{get:function(){return this._eyeHeight}},eyeHeight2D:{get:function(){return this._eyeHeight2D}},eyeEllipsoidNormalEC:{get:function(){return this._eyeEllipsoidNormalEC}},eyeEllipsoidCurvature:{get:function(){return this._eyeEllipsoidCurvature}},modelToEnu:{get:function(){return this._modelToEnu}},enuToModel:{get:function(){return this._enuToModel}},sunPositionWC:{get:function(){return this._sunPositionWC}},sunPositionColumbusView:{get:function(){return this._sunPositionColumbusView}},sunDirectionWC:{get:function(){return this._sunDirectionWC}},sunDirectionEC:{get:function(){return this._sunDirectionEC}},moonDirectionEC:{get:function(){return this._moonDirectionEC}},lightDirectionWC:{get:function(){return this._lightDirectionWC}},lightDirectionEC:{get:function(){return this._lightDirectionEC}},lightColor:{get:function(){return this._lightColor}},lightColorHdr:{get:function(){return this._lightColorHdr}},encodedCameraPositionMCHigh:{get:function(){return Hte(this),this._encodedCameraPositionMC.high}},encodedCameraPositionMCLow:{get:function(){return Hte(this),this._encodedCameraPositionMC.low}},temeToPseudoFixedMatrix:{get:function(){return this._temeToPseudoFixed}},pixelRatio:{get:function(){return this._pixelRatio}},fogDensity:{get:function(){return this._fogDensity}},fogVisualDensityScalar:{get:function(){return this._fogVisualDensityScalar}},fogMinimumBrightness:{get:function(){return this._fogMinimumBrightness}},atmosphereHsbShift:{get:function(){return this._atmosphereHsbShift}},atmosphereLightIntensity:{get:function(){return this._atmosphereLightIntensity}},atmosphereRayleighCoefficient:{get:function(){return this._atmosphereRayleighCoefficient}},atmosphereRayleighScaleHeight:{get:function(){return this._atmosphereRayleighScaleHeight}},atmosphereMieCoefficient:{get:function(){return this._atmosphereMieCoefficient}},atmosphereMieScaleHeight:{get:function(){return this._atmosphereMieScaleHeight}},atmosphereMieAnisotropy:{get:function(){return this._atmosphereMieAnisotropy}},atmosphereDynamicLighting:{get:function(){return this._atmosphereDynamicLighting}},geometricToleranceOverMeter:{get:function(){return this._geometricToleranceOverMeter}},pass:{get:function(){return this._pass}},backgroundColor:{get:function(){return this._backgroundColor}},brdfLut:{get:function(){return this._brdfLut}},environmentMap:{get:function(){return this._environmentMap}},sphericalHarmonicCoefficients:{get:function(){return this._sphericalHarmonicCoefficients}},specularEnvironmentMaps:{get:function(){return this._specularEnvironmentMaps}},specularEnvironmentMapsMaximumLOD:{get:function(){return this._specularEnvironmentMapsMaximumLOD}},splitPosition:{get:function(){return this._splitPosition}},minimumDisableDepthTestDistance:{get:function(){return this._minimumDisableDepthTestDistance}},invertClassificationColor:{get:function(){return this._invertClassificationColor}},orthographicIn3D:{get:function(){return this._orthographicIn3D}},ellipsoid:{get:function(){return this._ellipsoid??ne.default}}});function GEe(e,t){F.clone(t,e._view),F.getMatrix3(t,e._viewRotation),e._view3DDirty=!0,e._inverseView3DDirty=!0,e._modelViewDirty=!0,e._modelView3DDirty=!0,e._modelViewRelativeToEyeDirty=!0,e._inverseModelViewDirty=!0,e._inverseModelView3DDirty=!0,e._viewProjectionDirty=!0,e._inverseViewProjectionDirty=!0,e._modelViewProjectionDirty=!0,e._modelViewProjectionRelativeToEyeDirty=!0,e._modelViewInfiniteProjectionDirty=!0,e._normalDirty=!0,e._inverseNormalDirty=!0,e._normal3DDirty=!0,e._inverseNormal3DDirty=!0}function EEe(e,t){F.clone(t,e._inverseView),F.getMatrix3(t,e._inverseViewRotation)}function IEe(e,t){F.clone(t,e._projection),e._inverseProjectionDirty=!0,e._viewProjectionDirty=!0,e._inverseViewProjectionDirty=!0,e._modelViewProjectionDirty=!0,e._modelViewProjectionRelativeToEyeDirty=!0}function XEe(e,t){F.clone(t,e._infiniteProjection),e._modelViewInfiniteProjectionDirty=!0}var Ote=new m,WEe=new F;function PEe(e,t){m.clone(t.positionWC,e._cameraPosition),m.clone(t.directionWC,e._cameraDirection),m.clone(t.rightWC,e._cameraRight),m.clone(t.upWC,e._cameraUp);let n=e._ellipsoid,i,o=t.positionCartographic;if(l(o)?(e._eyeHeight=o.height,e._eyeEllipsoidNormalEC=n.geodeticSurfaceNormalCartographic(o,e._eyeEllipsoidNormalEC),i=m.fromRadians(o.longitude,o.latitude,0,n,Ote)):(e._eyeHeight=-n.maximumRadius,m.magnitude(t.positionWC)>0&&(e._eyeEllipsoidNormalEC=m.normalize(t.positionWC,e._eyeEllipsoidNormalEC)),i=n.scaleToGeodeticSurface(t.positionWC,Ote)),e._encodedCameraPositionMCDirty=!0,!l(i))return;e._eyeEllipsoidNormalEC=$.multiplyByVector(e._viewRotation,e._eyeEllipsoidNormalEC,e._eyeEllipsoidNormalEC);let r=Pt.eastNorthUpToFixedFrame(i,n,WEe);e._enuToModel=F.multiplyTransformation(e.inverseModel,r,e._enuToModel),e._modelToEnu=F.inverseTransformation(e._enuToModel,e._modelToEnu),X.equalsEpsilon(n._radii.x,n._radii.y,X.EPSILON15)&&(e._eyeEllipsoidCurvature=n.getLocalCurvature(i,e._eyeEllipsoidCurvature))}var _Y=new $,vEe=new he;function wEe(e,t){Pt.computeIcrfToCentralBodyFixedMatrix(t.time,_Y);let n=O0.computeSunPositionInEarthInertialFrame(t.time,e._sunPositionWC);$.multiplyByVector(_Y,n,n),m.normalize(n,e._sunDirectionWC),n=$.multiplyByVector(e.viewRotation3D,n,e._sunDirectionEC),m.normalize(n,n),n=O0.computeMoonPositionInEarthInertialFrame(t.time,e._moonDirectionEC),$.multiplyByVector(_Y,n,n),$.multiplyByVector(e.viewRotation3D,n,n),m.normalize(n,n);let i=t.mapProjection,r=i.ellipsoid.cartesianToCartographic(e._sunPositionWC,vEe);i.project(r,e._sunPositionColumbusView)}iC.prototype.updateCamera=function(e){GEe(this,e.viewMatrix),EEe(this,e.inverseViewMatrix),PEe(this,e),this._entireFrustum.x=e.frustum.near,this._entireFrustum.y=e.frustum.far,this.updateFrustum(e.frustum),this._orthographicIn3D=this._mode!==oe.SCENE2D&&e.frustum instanceof an};iC.prototype.updateFrustum=function(e){IEe(this,e.projectionMatrix),l(e.infiniteProjectionMatrix)&&XEe(this,e.infiniteProjectionMatrix),this._currentFrustum.x=e.near,this._currentFrustum.y=e.far,this._farDepthFromNearPlusOne=e.far-e.near+1,this._log2FarDepthFromNearPlusOne=X.log2(this._farDepthFromNearPlusOne),this._oneOverLog2FarDepthFromNearPlusOne=1/this._log2FarDepthFromNearPlusOne;let t=e.offCenterFrustum;l(t)&&(e=t),this._frustumPlanes.x=e.top,this._frustumPlanes.y=e.bottom,this._frustumPlanes.z=e.left,this._frustumPlanes.w=e.right};iC.prototype.updatePass=function(e){this._pass=e};var FEe=[],AEe=new Ip;iC.prototype.update=function(e){this._mode=e.mode,this._mapProjection=e.mapProjection,this._ellipsoid=e.mapProjection.ellipsoid,this._pixelRatio=e.pixelRatio;let t=e.camera;this.updateCamera(t),e.mode===oe.SCENE2D?(this._frustum2DWidth=t.frustum.right-t.frustum.left,this._eyeHeight2D.x=this._frustum2DWidth*.5,this._eyeHeight2D.y=this._eyeHeight2D.x*this._eyeHeight2D.x):(this._frustum2DWidth=0,this._eyeHeight2D.x=0,this._eyeHeight2D.y=0),wEe(this,e);let n=e.light??AEe;n instanceof Ip?(this._lightDirectionWC=m.clone(this._sunDirectionWC,this._lightDirectionWC),this._lightDirectionEC=m.clone(this._sunDirectionEC,this._lightDirectionEC)):(this._lightDirectionWC=m.normalize(m.negate(n.direction,this._lightDirectionWC),this._lightDirectionWC),this._lightDirectionEC=$.multiplyByVector(this.viewRotation3D,this._lightDirectionWC,this._lightDirectionEC));let i=n.color,o=m.fromElements(i.red,i.green,i.blue,this._lightColorHdr);o=m.multiplyByScalar(o,n.intensity,o);let r=m.maximumComponent(o);r>1?m.divideByScalar(o,r,this._lightColor):m.clone(o,this._lightColor);let s=e.brdfLutGenerator,a=l(s)?s.colorTexture:void 0;this._brdfLut=a,this._environmentMap=e.environmentMap??e.context.defaultCubeMap,this._sphericalHarmonicCoefficients=e.sphericalHarmonicCoefficients??FEe,this._specularEnvironmentMaps=e.specularEnvironmentMaps,this._specularEnvironmentMapsMaximumLOD=e.specularEnvironmentMapsMaximumLOD,this._fogDensity=e.fog.density,this._fogVisualDensityScalar=e.fog.visualDensityScalar,this._fogMinimumBrightness=e.fog.minimumBrightness;let c=e.atmosphere;l(c)&&(this._atmosphereHsbShift=m.fromElements(c.hueShift,c.saturationShift,c.brightnessShift,this._atmosphereHsbShift),this._atmosphereLightIntensity=c.lightIntensity,this._atmosphereRayleighCoefficient=m.clone(c.rayleighCoefficient,this._atmosphereRayleighCoefficient),this._atmosphereRayleighScaleHeight=c.rayleighScaleHeight,this._atmosphereMieCoefficient=m.clone(c.mieCoefficient,this._atmosphereMieCoefficient),this._atmosphereMieScaleHeight=c.mieScaleHeight,this._atmosphereMieAnisotropy=c.mieAnisotropy,this._atmosphereDynamicLighting=c.dynamicLighting),this._invertClassificationColor=e.invertClassificationColor,this._frameState=e,this._temeToPseudoFixed=Pt.computeTemeToPseudoFixedMatrix(e.time,this._temeToPseudoFixed),this._splitPosition=e.splitPosition*e.context.drawingBufferWidth;let d=t.frustum.fov,u=this._viewport,h;l(d)?u.height>u.width?h=Math.tan(.5*d)*2/u.height:h=Math.tan(.5*d)*2/u.width:h=1/Math.max(u.width,u.height),this._geometricToleranceOverMeter=h*e.maximumScreenSpaceError,D.clone(e.backgroundColor,this._backgroundColor),this._minimumDisableDepthTestDistance=e.minimumDisableDepthTestDistance,this._minimumDisableDepthTestDistance*=this._minimumDisableDepthTestDistance,this._minimumDisableDepthTestDistance===Number.POSITIVE_INFINITY&&(this._minimumDisableDepthTestDistance=-1)};function Yte(e){if(e._viewportDirty){let t=e._viewport;F.computeOrthographicOffCenter(t.x,t.x+t.width,t.y,t.y+t.height,0,1,e._viewportOrthographicMatrix),F.computeViewportTransformation(t,0,1,e._viewportTransformation),e._viewportDirty=!1}}function MEe(e){e._inverseProjectionDirty&&(e._inverseProjectionDirty=!1,e._mode!==oe.SCENE2D&&e._mode!==oe.MORPHING&&!e._orthographicIn3D?F.inverse(e._projection,e._inverseProjection):F.clone(F.ZERO,e._inverseProjection))}function NEe(e){e._modelViewDirty&&(e._modelViewDirty=!1,F.multiplyTransformation(e._view,e._model,e._modelView))}function kEe(e){e._modelView3DDirty&&(e._modelView3DDirty=!1,F.multiplyTransformation(e.view3D,e._model,e._modelView3D))}function UEe(e){e._inverseModelViewDirty&&(e._inverseModelViewDirty=!1,F.inverse(e.modelView,e._inverseModelView))}function DEe(e){e._inverseModelView3DDirty&&(e._inverseModelView3DDirty=!1,F.inverse(e.modelView3D,e._inverseModelView3D))}function BEe(e){e._viewProjectionDirty&&(e._viewProjectionDirty=!1,F.multiply(e._projection,e._view,e._viewProjection))}function OEe(e){e._inverseViewProjectionDirty&&(e._inverseViewProjectionDirty=!1,F.inverse(e.viewProjection,e._inverseViewProjection))}function YEe(e){e._modelViewProjectionDirty&&(e._modelViewProjectionDirty=!1,F.multiply(e._projection,e.modelView,e._modelViewProjection))}function zEe(e){if(e._modelViewRelativeToEyeDirty){e._modelViewRelativeToEyeDirty=!1;let t=e.modelView,n=e._modelViewRelativeToEye;n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=t[3],n[4]=t[4],n[5]=t[5],n[6]=t[6],n[7]=t[7],n[8]=t[8],n[9]=t[9],n[10]=t[10],n[11]=t[11],n[12]=0,n[13]=0,n[14]=0,n[15]=t[15]}}function HEe(e){e._inverseModelViewProjectionDirty&&(e._inverseModelViewProjectionDirty=!1,F.inverse(e.modelViewProjection,e._inverseModelViewProjection))}function KEe(e){e._modelViewProjectionRelativeToEyeDirty&&(e._modelViewProjectionRelativeToEyeDirty=!1,F.multiply(e._projection,e.modelViewRelativeToEye,e._modelViewProjectionRelativeToEye))}function JEe(e){e._modelViewInfiniteProjectionDirty&&(e._modelViewInfiniteProjectionDirty=!1,F.multiply(e._infiniteProjection,e.modelView,e._modelViewInfiniteProjection))}function QEe(e){if(e._normalDirty){e._normalDirty=!1;let t=e._normal;F.getMatrix3(e.inverseModelView,t),$.transpose(t,t)}}function jEe(e){if(e._normal3DDirty){e._normal3DDirty=!1;let t=e._normal3D;F.getMatrix3(e.inverseModelView3D,t),$.transpose(t,t)}}function qEe(e){if(e._inverseNormalDirty){e._inverseNormalDirty=!1;let t=e._inverseNormal;F.getMatrix3(e.modelView,t),$.transpose(t,t)}}function $Ee(e){if(e._inverseNormal3DDirty){e._inverseNormal3DDirty=!1;let t=e._inverseNormal3D;F.getMatrix3(e.modelView3D,t),$.transpose(t,t)}}var zte=new m;function Hte(e){e._encodedCameraPositionMCDirty&&(e._encodedCameraPositionMCDirty=!1,F.multiplyByPoint(e.inverseModel,e._cameraPosition,zte),On.fromCartesian(zte,e._encodedCameraPositionMC))}var eIe=new m,tIe=new m,nIe=new m,iIe=new m,oIe=new he,rIe=new m,sIe=new F;function aIe(e,t,n,i,o,r,s,a){let c=eIe;c.x=e.y,c.y=e.z,c.z=e.x;let d=tIe;d.x=n.y,d.y=n.z,d.z=n.x;let u=nIe;u.x=i.y,u.y=i.z,u.z=i.x;let h=iIe;h.x=t.y,h.y=t.z,h.z=t.x,r===oe.SCENE2D&&(c.z=o*.5);let p=s.unproject(c,oIe);p.longitude=X.clamp(p.longitude,-Math.PI,Math.PI),p.latitude=X.clamp(p.latitude,-X.PI_OVER_TWO,X.PI_OVER_TWO);let g=s.ellipsoid,f=g.cartographicToCartesian(p,rIe),y=Pt.eastNorthUpToFixedFrame(f,g,sIe);return F.multiplyByPointAsVector(y,d,d),F.multiplyByPointAsVector(y,u,u),F.multiplyByPointAsVector(y,h,h),l(a)||(a=new F),a[0]=d.x,a[1]=u.x,a[2]=-h.x,a[3]=0,a[4]=d.y,a[5]=u.y,a[6]=-h.y,a[7]=0,a[8]=d.z,a[9]=u.z,a[10]=-h.z,a[11]=0,a[12]=-m.dot(d,f),a[13]=-m.dot(u,f),a[14]=m.dot(h,f),a[15]=1,a}function TY(e){e._view3DDirty&&(e._mode===oe.SCENE3D?F.clone(e._view,e._view3D):aIe(e._cameraPosition,e._cameraDirection,e._cameraRight,e._cameraUp,e._frustum2DWidth,e._mode,e._mapProjection,e._view3D),F.getMatrix3(e._view3D,e._viewRotation3D),e._view3DDirty=!1)}function Kte(e){e._inverseView3DDirty&&(F.inverseTransformation(e.view3D,e._inverseView3D),F.getMatrix3(e._inverseView3D,e._inverseViewRotation3D),e._inverseView3DDirty=!1)}var iE=iC;function Vu(e,t){let{getWebGLStub:n,requestWebgl1:i,webgl:o={},allowTextureFilterAnisotropic:r=!0}=t??{};o.alpha=o.alpha??!1,o.stencil=o.stencil??!0,o.powerPreference=o.powerPreference??"high-performance";let s=l(n)?n(e,o):cIe(e,o,i),c=typeof WebGL2RenderingContext<"u"&&s instanceof WebGL2RenderingContext;this._canvas=e,this._originalGLContext=s,this._gl=s,this._webgl2=c,this._id=zn(),this.validateFramebuffer=!1,this.validateShaderProgram=!1,this.logShaderCompilation=!1,this._throwOnWebGLError=!1,this._shaderCache=new $G(this),this._textureCache=new eE;let d=s;this._stencilBits=d.getParameter(d.STENCIL_BITS),Nt._maximumCombinedTextureImageUnits=d.getParameter(d.MAX_COMBINED_TEXTURE_IMAGE_UNITS),Nt._maximumCubeMapSize=d.getParameter(d.MAX_CUBE_MAP_TEXTURE_SIZE),Nt._maximumFragmentUniformVectors=d.getParameter(d.MAX_FRAGMENT_UNIFORM_VECTORS),Nt._maximumTextureImageUnits=d.getParameter(d.MAX_TEXTURE_IMAGE_UNITS),Nt._maximumRenderbufferSize=d.getParameter(d.MAX_RENDERBUFFER_SIZE),Nt._maximumTextureSize=d.getParameter(d.MAX_TEXTURE_SIZE),Nt._maximumVaryingVectors=d.getParameter(d.MAX_VARYING_VECTORS),Nt._maximumVertexAttributes=d.getParameter(d.MAX_VERTEX_ATTRIBS),Nt._maximumVertexTextureImageUnits=d.getParameter(d.MAX_VERTEX_TEXTURE_IMAGE_UNITS),Nt._maximumVertexUniformVectors=d.getParameter(d.MAX_VERTEX_UNIFORM_VECTORS),Nt._maximumSamples=this._webgl2?d.getParameter(d.MAX_SAMPLES):0;let u=d.getParameter(d.ALIASED_LINE_WIDTH_RANGE);Nt._minimumAliasedLineWidth=u[0],Nt._maximumAliasedLineWidth=u[1];let h=d.getParameter(d.ALIASED_POINT_SIZE_RANGE);Nt._minimumAliasedPointSize=h[0],Nt._maximumAliasedPointSize=h[1];let p=d.getParameter(d.MAX_VIEWPORT_DIMS);Nt._maximumViewportWidth=p[0],Nt._maximumViewportHeight=p[1];let g=d.getShaderPrecisionFormat(d.FRAGMENT_SHADER,d.HIGH_FLOAT);Nt._highpFloatSupported=g.precision!==0;let f=d.getShaderPrecisionFormat(d.FRAGMENT_SHADER,d.HIGH_INT);Nt._highpIntSupported=f.rangeMax!==0,this._antialias=d.getContextAttributes().antialias,this._standardDerivatives=!!_r(d,["OES_standard_derivatives"]),this._blendMinmax=!!_r(d,["EXT_blend_minmax"]),this._elementIndexUint=!!_r(d,["OES_element_index_uint"]),this._depthTexture=!!_r(d,["WEBGL_depth_texture","WEBKIT_WEBGL_depth_texture"]),this._fragDepth=!!_r(d,["EXT_frag_depth"]),this._debugShaders=_r(d,["WEBGL_debug_shaders"]),this._textureFloat=!!_r(d,["OES_texture_float"]),this._textureHalfFloat=!!_r(d,["OES_texture_half_float"]),this._textureFloatLinear=!!_r(d,["OES_texture_float_linear"]),this._textureHalfFloatLinear=!!_r(d,["OES_texture_half_float_linear"]),this._supportsTextureLod=!!_r(d,["EXT_shader_texture_lod"]),this._colorBufferFloat=!!_r(d,["EXT_color_buffer_float","WEBGL_color_buffer_float"]),this._floatBlend=!!_r(d,["EXT_float_blend"]),this._colorBufferHalfFloat=!!_r(d,["EXT_color_buffer_half_float"]),this._s3tc=!!_r(d,["WEBGL_compressed_texture_s3tc","MOZ_WEBGL_compressed_texture_s3tc","WEBKIT_WEBGL_compressed_texture_s3tc"]),this._pvrtc=!!_r(d,["WEBGL_compressed_texture_pvrtc","WEBKIT_WEBGL_compressed_texture_pvrtc"]),this._astc=!!_r(d,["WEBGL_compressed_texture_astc"]),this._etc=!!_r(d,["WEBG_compressed_texture_etc"]),this._etc1=!!_r(d,["WEBGL_compressed_texture_etc1"]),this._bc7=!!_r(d,["EXT_texture_compression_bptc"]),Zl.setKTX2SupportedFormats(this._s3tc,this._pvrtc,this._astc,this._etc,this._etc1,this._bc7);let y=r?_r(d,["EXT_texture_filter_anisotropic","WEBKIT_EXT_texture_filter_anisotropic"]):void 0;this._textureFilterAnisotropic=y,Nt._maximumTextureFilterAnisotropy=l(y)?d.getParameter(y.MAX_TEXTURE_MAX_ANISOTROPY_EXT):1;let x,S,C,V,L,Z,E,P,W,v;if(c){let G=this;x=function(){return G._gl.createVertexArray()},S=function(I){G._gl.bindVertexArray(I)},C=function(I){G._gl.deleteVertexArray(I)},V=function(I,w,M,B,k){d.drawElementsInstanced(I,w,M,B,k)},L=function(I,w,M,B){d.drawArraysInstanced(I,w,M,B)},Z=function(I,w){d.vertexAttribDivisor(I,w)},E=function(I){d.drawBuffers(I)}}else P=_r(d,["OES_vertex_array_object"]),l(P)&&(x=function(){return P.createVertexArrayOES()},S=function(G){P.bindVertexArrayOES(G)},C=function(G){P.deleteVertexArrayOES(G)}),W=_r(d,["ANGLE_instanced_arrays"]),l(W)&&(V=function(G,I,w,M,B){W.drawElementsInstancedANGLE(G,I,w,M,B)},L=function(G,I,w,M){W.drawArraysInstancedANGLE(G,I,w,M)},Z=function(G,I){W.vertexAttribDivisorANGLE(G,I)}),v=_r(d,["WEBGL_draw_buffers"]),l(v)&&(E=function(G){v.drawBuffersWEBGL(G)});this.glCreateVertexArray=x,this.glBindVertexArray=S,this.glDeleteVertexArray=C,this.glDrawElementsInstanced=V,this.glDrawArraysInstanced=L,this.glVertexAttribDivisor=Z,this.glDrawBuffers=E,this._vertexArrayObject=!!P,this._instancedArrays=!!W,this._drawBuffers=!!v,Nt._maximumDrawBuffers=this.drawBuffers?d.getParameter(ie.MAX_DRAW_BUFFERS):1,Nt._maximumColorAttachments=this.drawBuffers?d.getParameter(ie.MAX_COLOR_ATTACHMENTS):1,this._clearColor=new D(0,0,0,0),this._clearDepth=1,this._clearStencil=0;let A=new iE,b=new sc(this),R=Ue.fromCache();this._defaultPassState=b,this._defaultRenderState=R,this._defaultTexture=void 0,this._defaultEmissiveTexture=void 0,this._defaultNormalTexture=void 0,this._defaultCubeMap=void 0,this._us=A,this._currentRenderState=R,this._currentPassState=b,this._currentFramebuffer=void 0,this._maxFrameTextureUnitIndex=0,this._vertexAttribDivisors=[],this._previousDrawInstanced=!1;for(let G=0;G<Nt._maximumVertexAttributes;G++)this._vertexAttribDivisors.push(0);this._pickObjects={},this._nextPickColor=new Uint32Array(1),this.options={getWebGLStub:n,requestWebgl1:i,webgl:o,allowTextureFilterAnisotropic:r},this.cache={},Ue.apply(d,R,b)}function cIe(e,t,n){if(typeof WebGLRenderingContext>"u")throw new ae("The browser does not support WebGL. Visit http://get.webgl.org.");!n&&!(typeof WebGL2RenderingContext<"u")&&(n=!0);let o=n?"webgl":"webgl2",r=e.getContext(o,t);if(!l(r))throw new ae("The browser supports WebGL, but initialization failed.");return r}function lIe(e,t){let n="WebGL Error: ";switch(t){case e.INVALID_ENUM:n+="INVALID_ENUM";break;case e.INVALID_VALUE:n+="INVALID_VALUE";break;case e.INVALID_OPERATION:n+="INVALID_OPERATION";break;case e.OUT_OF_MEMORY:n+="OUT_OF_MEMORY";break;case e.CONTEXT_LOST_WEBGL:n+="CONTEXT_LOST_WEBGL lost";break;default:n+=`Unknown (${t})`}return n}function dIe(e,t,n,i){let o=`${lIe(e,i)}: ${t.name}(`;for(let r=0;r<n.length;++r)r!==0&&(o+=", "),o+=n[r];return o+=");",o}function uIe(e,t,n){let i=e.getError();if(i!==e.NO_ERROR)throw new ae(dIe(e,t,n,i))}function mIe(e,t,n){return{get:function(){let i=e[t];return n(e,`get: ${t}`,i),e[t]},set:function(i){e[t]=i,n(e,`set: ${t}`,i)}}}function hIe(e,t){if(!l(t))return e;function n(o){return function(){let r=o.apply(e,arguments);return t(e,o,arguments),r}}let i={};for(let o in e){let r=e[o];r instanceof Function?i[o]=n(r):Object.defineProperty(i,o,mIe(e,o,t))}return i}function _r(e,t){let n=t.length;for(let i=0;i<n;++i){let o=e.getExtension(t[i]);if(o)return o}}var fIe={};Object.defineProperties(Vu.prototype,{id:{get:function(){return this._id}},webgl2:{get:function(){return this._webgl2}},canvas:{get:function(){return this._canvas}},shaderCache:{get:function(){return this._shaderCache}},textureCache:{get:function(){return this._textureCache}},uniformState:{get:function(){return this._us}},stencilBits:{get:function(){return this._stencilBits}},stencilBuffer:{get:function(){return this._stencilBits>=8}},antialias:{get:function(){return this._antialias}},msaa:{get:function(){return this._webgl2}},standardDerivatives:{get:function(){return this._standardDerivatives||this._webgl2}},floatBlend:{get:function(){return this._floatBlend}},blendMinmax:{get:function(){return this._blendMinmax||this._webgl2}},elementIndexUint:{get:function(){return this._elementIndexUint||this._webgl2}},depthTexture:{get:function(){return this._depthTexture||this._webgl2}},floatingPointTexture:{get:function(){return this._webgl2||this._textureFloat}},halfFloatingPointTexture:{get:function(){return this._webgl2||this._textureHalfFloat}},textureFloatLinear:{get:function(){return this._textureFloatLinear}},textureHalfFloatLinear:{get:function(){return this._webgl2&&this._textureFloatLinear||!this._webgl2&&this._textureHalfFloatLinear}},supportsTextureLod:{get:function(){return this._webgl2||this._supportsTextureLod}},textureFilterAnisotropic:{get:function(){return!!this._textureFilterAnisotropic}},s3tc:{get:function(){return this._s3tc}},pvrtc:{get:function(){return this._pvrtc}},astc:{get:function(){return this._astc}},etc:{get:function(){return this._etc}},etc1:{get:function(){return this._etc1}},bc7:{get:function(){return this._bc7}},supportsBasis:{get:function(){return this._s3tc||this._pvrtc||this._astc||this._etc||this._etc1||this._bc7}},vertexArrayObject:{get:function(){return this._vertexArrayObject||this._webgl2}},fragmentDepth:{get:function(){return this._fragDepth||this._webgl2}},instancedArrays:{get:function(){return this._instancedArrays||this._webgl2}},colorBufferFloat:{get:function(){return this._colorBufferFloat}},colorBufferHalfFloat:{get:function(){return this._webgl2&&this._colorBufferFloat||!this._webgl2&&this._colorBufferHalfFloat}},drawBuffers:{get:function(){return this._drawBuffers||this._webgl2}},debugShaders:{get:function(){return this._debugShaders}},throwOnWebGLError:{get:function(){return this._throwOnWebGLError},set:function(e){this._throwOnWebGLError=e,this._gl=hIe(this._originalGLContext,e?uIe:void 0)}},defaultTexture:{get:function(){return this._defaultTexture===void 0&&(this._defaultTexture=new vt({context:this,source:{width:1,height:1,arrayBufferView:new Uint8Array([255,255,255,255])},flipY:!1})),this._defaultTexture}},defaultEmissiveTexture:{get:function(){return this._defaultEmissiveTexture===void 0&&(this._defaultEmissiveTexture=new vt({context:this,pixelFormat:it.RGB,source:{width:1,height:1,arrayBufferView:new Uint8Array([0,0,0])},flipY:!1})),this._defaultEmissiveTexture}},defaultNormalTexture:{get:function(){return this._defaultNormalTexture===void 0&&(this._defaultNormalTexture=new vt({context:this,pixelFormat:it.RGB,source:{width:1,height:1,arrayBufferView:new Uint8Array([128,128,255])},flipY:!1})),this._defaultNormalTexture}},defaultCubeMap:{get:function(){if(this._defaultCubeMap===void 0){let e={width:1,height:1,arrayBufferView:new Uint8Array([255,255,255,255])};this._defaultCubeMap=new xr({context:this,source:{positiveX:e,negativeX:e,positiveY:e,negativeY:e,positiveZ:e,negativeZ:e},flipY:!1})}return this._defaultCubeMap}},drawingBufferHeight:{get:function(){return this._gl.drawingBufferHeight}},drawingBufferWidth:{get:function(){return this._gl.drawingBufferWidth}},defaultFramebuffer:{get:function(){return fIe}}});function Jte(e,t,n,i){let o=e._currentRenderState,r=e._currentPassState;e._currentRenderState=t,e._currentPassState=n,Ue.partialApply(e._gl,o,t,r,n,i)}var SY;typeof WebGLRenderingContext<"u"&&(SY=[ie.BACK]);function CY(e,t){if(t!==e._currentFramebuffer){e._currentFramebuffer=t;let n=SY;if(l(t))t._bind(),n=t._getActiveColorAttachments();else{let i=e._gl;i.bindFramebuffer(i.FRAMEBUFFER,null)}e.drawBuffers&&e.glDrawBuffers(n)}}var pIe=new ti;Vu.prototype.clear=function(e,t){e=e??pIe,t=t??this._defaultPassState;let n=this._gl,i=0,o=e.color,r=e.depth,s=e.stencil;l(o)&&(D.equals(this._clearColor,o)||(D.clone(o,this._clearColor),n.clearColor(o.red,o.green,o.blue,o.alpha)),i|=n.COLOR_BUFFER_BIT),l(r)&&(r!==this._clearDepth&&(this._clearDepth=r,n.clearDepth(r)),i|=n.DEPTH_BUFFER_BIT),l(s)&&(s!==this._clearStencil&&(this._clearStencil=s,n.clearStencil(s)),i|=n.STENCIL_BUFFER_BIT);let a=e.renderState??this._defaultRenderState;Jte(this,a,t,!0);let c=e.framebuffer??t.framebuffer;CY(this,c),n.clear(i)};function bIe(e,t,n,i,o){CY(e,t),Jte(e,o,n,!1),i._bind(),e._maxFrameTextureUnitIndex=Math.max(e._maxFrameTextureUnitIndex,i.maximumTextureUnitIndex)}function gIe(e,t,n,i){let o=t._primitiveType,r=t._vertexArray,s=t._offset,a=t._count,c=t.instanceCount;e._us.model=t._modelMatrix??F.IDENTITY,n._setUniforms(i,e._us,e.validateShaderProgram),r._bind();let d=r.indexBuffer;l(d)?(s=s*d.bytesPerIndex,l(a)?a=Math.min(a,d.numberOfIndices):a=d.numberOfIndices,c===0?e._gl.drawElements(o,a,d.indexDatatype,s):e.glDrawElementsInstanced(o,a,d.indexDatatype,s,c)):(l(a)?a=Math.min(a,r.numberOfVertices):a=r.numberOfVertices,c===0?e._gl.drawArrays(o,s,a):e.glDrawArraysInstanced(o,s,a,c)),r._unBind()}Vu.prototype.draw=function(e,t,n,i){t=t??this._defaultPassState;let o=e._framebuffer??t.framebuffer,r=e._renderState??this._defaultRenderState;n=n??e._shaderProgram,i=i??e._uniformMap,bIe(this,o,t,n,r),gIe(this,e,n,i)};Vu.prototype.endFrame=function(){let e=this._gl;e.useProgram(null),this._currentFramebuffer=void 0,e.bindFramebuffer(e.FRAMEBUFFER,null);let t=SY;this.drawBuffers&&this.glDrawBuffers(t);let n=this._maxFrameTextureUnitIndex;this._maxFrameTextureUnitIndex=0;for(let i=0;i<n;++i)e.activeTexture(e.TEXTURE0+i),e.bindTexture(e.TEXTURE_2D,null),e.bindTexture(e.TEXTURE_CUBE_MAP,null)};Vu.prototype.readPixels=function(e){let t=this._gl;e=e??Y.EMPTY_OBJECT;let n=Math.max(e.x??0,0),i=Math.max(e.y??0,0),o=e.width??t.drawingBufferWidth,r=e.height??t.drawingBufferHeight,s=e.framebuffer,a=je.UNSIGNED_BYTE;l(s)&&s.numberOfColorAttachments>0&&(a=s.getColorTexture(0).pixelDatatype);let c=it.createTypedArray(it.RGBA,a,o,r);return CY(this,s),t.readPixels(n,i,o,r,it.RGBA,je.toWebGLConstant(a,this),c),c};var Qte={position:0,textureCoordinates:1};Vu.prototype.getViewportQuadVertexArray=function(){let e=this.cache.viewportQuad_vertexArray;if(!l(e)){let t=new lt({attributes:{position:new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:[-1,-1,1,-1,1,1,-1,1]}),textureCoordinates:new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:[0,0,1,0,1,1,0,1]})},indices:new Uint16Array([0,1,2,0,2,3]),primitiveType:we.TRIANGLES});e=ni.fromGeometry({context:this,geometry:t,attributeLocations:Qte,bufferUsage:Me.STATIC_DRAW,interleave:!0}),this.cache.viewportQuad_vertexArray=e}return e};Vu.prototype.createViewportQuadCommand=function(e,t){return t=t??Y.EMPTY_OBJECT,new $e({vertexArray:this.getViewportQuadVertexArray(),primitiveType:we.TRIANGLES,renderState:t.renderState,shaderProgram:$t.fromCache({context:this,vertexShaderSource:ux,fragmentShaderSource:e,attributeLocations:Qte}),uniformMap:t.uniformMap,owner:t.owner,framebuffer:t.framebuffer,pass:t.pass})};Vu.prototype.getObjectByPickColor=function(e){return this._pickObjects[e.toRgba()]};function VY(e,t,n){this._pickObjects=e,this.key=t,this.color=n}Object.defineProperties(VY.prototype,{object:{get:function(){return this._pickObjects[this.key]},set:function(e){this._pickObjects[this.key]=e}}});VY.prototype.destroy=function(){delete this._pickObjects[this.key]};Vu.prototype.createPickId=function(e){++this._nextPickColor[0];let t=this._nextPickColor[0];if(t===0)throw new ae("Out of unique Pick IDs.");return this._pickObjects[t]=e,new VY(this._pickObjects,t,D.fromRgba(t))};Vu.prototype.isDestroyed=function(){return!1};Vu.prototype.destroy=function(){let e=this.cache;for(let t in e)if(e.hasOwnProperty(t)){let n=e[t];l(n.destroy)&&n.destroy()}return this._shaderCache=this._shaderCache.destroy(),this._textureCache=this._textureCache.destroy(),this._defaultTexture=this._defaultTexture&&this._defaultTexture.destroy(),this._defaultEmissiveTexture=this._defaultEmissiveTexture&&this._defaultEmissiveTexture.destroy(),this._defaultNormalTexture=this._defaultNormalTexture&&this._defaultNormalTexture.destroy(),this._defaultCubeMap=this._defaultCubeMap&&this._defaultCubeMap.destroy(),me(this)};var oE=Vu;var D3t=_(T(),1);var _3t=_(T(),1);function oC(e){e=e??Y.EMPTY_OBJECT;let{context:t,width:n,height:i,colorRenderbuffers:o,colorTextures:r,depthStencilRenderbuffer:s,depthStencilTexture:a,destroyAttachments:c}=e;if(this._width=n,this._height=i,l(o)!==l(r))throw new pe("Both color renderbuffer and texture attachments must be provided.");if(l(s)!==l(a))throw new pe("Both depth-stencil renderbuffer and texture attachments must be provided.");this._renderFramebuffer=new Wr({context:t,colorRenderbuffers:o,depthStencilRenderbuffer:s,destroyAttachments:c}),this._colorFramebuffer=new Wr({context:t,colorTextures:r,depthStencilTexture:a,destroyAttachments:c})}oC.prototype.getRenderFramebuffer=function(){return this._renderFramebuffer};oC.prototype.getColorFramebuffer=function(){return this._colorFramebuffer};oC.prototype.blitFramebuffers=function(e,t){this._renderFramebuffer.bindRead(),this._colorFramebuffer.bindDraw();let n=e._gl,i=0;this._colorFramebuffer._colorTextures.length>0&&(i|=n.COLOR_BUFFER_BIT),l(this._colorFramebuffer.depthStencilTexture)&&(i|=n.DEPTH_BUFFER_BIT|(t?n.STENCIL_BUFFER_BIT:0)),n.blitFramebuffer(0,0,this._width,this._height,0,0,this._width,this._height,i,n.NEAREST),n.bindFramebuffer(n.READ_FRAMEBUFFER,null),n.bindFramebuffer(n.DRAW_FRAMEBUFFER,null)};oC.prototype.isDestroyed=function(){return!1};oC.prototype.destroy=function(){return this._renderFramebuffer.destroy(),this._colorFramebuffer.destroy(),me(this)};var rE=oC;var I3t=_(T(),1);var C3t=_(T(),1);var El={RGBA4:ie.RGBA4,RGBA8:ie.RGBA8,RGBA16F:ie.RGBA16F,RGBA32F:ie.RGBA32F,RGB5_A1:ie.RGB5_A1,RGB565:ie.RGB565,DEPTH_COMPONENT16:ie.DEPTH_COMPONENT16,STENCIL_INDEX8:ie.STENCIL_INDEX8,DEPTH_STENCIL:ie.DEPTH_STENCIL,DEPTH24_STENCIL8:ie.DEPTH24_STENCIL8,validate:function(e){return e===El.RGBA4||e===El.RGBA8||e===El.RGBA16F||e===El.RGBA32F||e===El.RGB5_A1||e===El.RGB565||e===El.DEPTH_COMPONENT16||e===El.STENCIL_INDEX8||e===El.DEPTH_STENCIL||e===El.DEPTH24_STENCIL8},getColorFormat:function(e){return e===ie.FLOAT?El.RGBA32F:e===ie.HALF_FLOAT_OES?El.RGBA16F:El.RGBA8}},Nc=Object.freeze(El);function sE(e){e=e??Y.EMPTY_OBJECT;let n=e.context._gl,i=Nt.maximumRenderbufferSize,o=e.format??Nc.RGBA4,r=l(e.width)?e.width:n.drawingBufferWidth,s=l(e.height)?e.height:n.drawingBufferHeight,a=e.numSamples??1;this._gl=n,this._format=o,this._width=r,this._height=s,this._renderbuffer=this._gl.createRenderbuffer(),n.bindRenderbuffer(n.RENDERBUFFER,this._renderbuffer),a>1?n.renderbufferStorageMultisample(n.RENDERBUFFER,a,o,r,s):n.renderbufferStorage(n.RENDERBUFFER,o,r,s),n.bindRenderbuffer(n.RENDERBUFFER,null)}Object.defineProperties(sE.prototype,{format:{get:function(){return this._format}},width:{get:function(){return this._width}},height:{get:function(){return this._height}}});sE.prototype._getRenderbuffer=function(){return this._renderbuffer};sE.prototype.isDestroyed=function(){return!1};sE.prototype.destroy=function(){return this._gl.deleteRenderbuffer(this._renderbuffer),me(this)};var fd=sE;function Cs(e){e=e??Y.EMPTY_OBJECT,this._numSamples=e.numSamples??1,this._colorAttachmentsLength=e.colorAttachmentsLength??1,this._color=e.color??!0,this._depth=e.depth??!1,this._depthStencil=e.depthStencil??!1,this._supportsDepthTexture=e.supportsDepthTexture??!1,this._createColorAttachments=e.createColorAttachments??!0,this._createDepthAttachments=e.createDepthAttachments??!0,this._pixelDatatype=e.pixelDatatype,this._pixelFormat=e.pixelFormat,this._width=void 0,this._height=void 0,this._framebuffer=void 0,this._multisampleFramebuffer=void 0,this._colorTextures=void 0,this._color&&(this._colorTextures=new Array(this._colorAttachmentsLength),this._colorRenderbuffers=new Array(this._colorAttachmentsLength)),this._colorRenderbuffer=void 0,this._depthStencilRenderbuffer=void 0,this._depthStencilTexture=void 0,this._depthRenderbuffer=void 0,this._depthTexture=void 0,this._attachmentsDirty=!1}Object.defineProperties(Cs.prototype,{framebuffer:{get:function(){return this._numSamples>1?this._multisampleFramebuffer.getRenderFramebuffer():this._framebuffer}},numSamples:{get:function(){return this._numSamples}},status:{get:function(){return this.framebuffer.status}}});Cs.prototype.isDirty=function(e,t,n,i,o){n=n??1;let r=this._width!==e||this._height!==t,s=this._numSamples!==n,a=l(i)&&this._pixelDatatype!==i||l(o)&&this._pixelFormat!==o,c=n===1?l(this._framebuffer):l(this._multisampleFramebuffer);return this._attachmentsDirty||r||s||a||!c||this._color&&!l(this._colorTextures[0])};Cs.prototype.update=function(e,t,n,i,o,r){if(i=e.msaa?i??1:1,o=o??(this._color?this._pixelDatatype??je.UNSIGNED_BYTE:void 0),r=r??(this._color?this._pixelFormat??it.RGBA:void 0),this.isDirty(t,n,i,o,r)){if(this.destroy(),this._width=t,this._height=n,this._numSamples=i,this._pixelDatatype=o,this._pixelFormat=r,this._attachmentsDirty=!1,this._color&&this._createColorAttachments){for(let s=0;s<this._colorAttachmentsLength;++s)if(this._colorTextures[s]=new vt({context:e,width:t,height:n,pixelFormat:r,pixelDatatype:o,sampler:qt.NEAREST}),this._numSamples>1){let a=Nc.getColorFormat(o);this._colorRenderbuffers[s]=new fd({context:e,width:t,height:n,format:a,numSamples:this._numSamples})}}this._depthStencil&&this._createDepthAttachments&&(this._supportsDepthTexture&&e.depthTexture?(this._depthStencilTexture=new vt({context:e,width:t,height:n,pixelFormat:it.DEPTH_STENCIL,pixelDatatype:je.UNSIGNED_INT_24_8,sampler:qt.NEAREST}),this._numSamples>1&&(this._depthStencilRenderbuffer=new fd({context:e,width:t,height:n,format:Nc.DEPTH24_STENCIL8,numSamples:this._numSamples}))):this._depthStencilRenderbuffer=new fd({context:e,width:t,height:n,format:Nc.DEPTH_STENCIL})),this._depth&&this._createDepthAttachments&&(this._supportsDepthTexture&&e.depthTexture?this._depthTexture=new vt({context:e,width:t,height:n,pixelFormat:it.DEPTH_COMPONENT,pixelDatatype:je.UNSIGNED_INT,sampler:qt.NEAREST}):this._depthRenderbuffer=new fd({context:e,width:t,height:n,format:Nc.DEPTH_COMPONENT16})),this._numSamples>1?this._multisampleFramebuffer=new rE({context:e,width:this._width,height:this._height,colorTextures:this._colorTextures,colorRenderbuffers:this._colorRenderbuffers,depthStencilTexture:this._depthStencilTexture,depthStencilRenderbuffer:this._depthStencilRenderbuffer,destroyAttachments:!1}):this._framebuffer=new Wr({context:e,colorTextures:this._colorTextures,depthTexture:this._depthTexture,depthRenderbuffer:this._depthRenderbuffer,depthStencilTexture:this._depthStencilTexture,depthStencilRenderbuffer:this._depthStencilRenderbuffer,destroyAttachments:!1})}};Cs.prototype.getColorTexture=function(e){return e=e??0,this._colorTextures[e]};Cs.prototype.setColorTexture=function(e,t){t=t??0,this._attachmentsDirty=e!==this._colorTextures[t],this._colorTextures[t]=e};Cs.prototype.getColorRenderbuffer=function(e){return e=e??0,this._colorRenderbuffers[e]};Cs.prototype.setColorRenderbuffer=function(e,t){t=t??0,this._attachmentsDirty=e!==this._colorRenderbuffers[t],this._colorRenderbuffers[t]=e};Cs.prototype.getDepthRenderbuffer=function(){return this._depthRenderbuffer};Cs.prototype.setDepthRenderbuffer=function(e){this._attachmentsDirty=e!==this._depthRenderbuffer,this._depthRenderbuffer=e};Cs.prototype.getDepthTexture=function(){return this._depthTexture};Cs.prototype.setDepthTexture=function(e){this._attachmentsDirty=e!==this._depthTexture,this._depthTexture=e};Cs.prototype.getDepthStencilRenderbuffer=function(){return this._depthStencilRenderbuffer};Cs.prototype.setDepthStencilRenderbuffer=function(e){this._attachmentsDirty=e!==this._depthStencilRenderbuffer,this._depthStencilRenderbuffer=e};Cs.prototype.getDepthStencilTexture=function(){return this._depthStencilTexture};Cs.prototype.setDepthStencilTexture=function(e){this._attachmentsDirty=e!==this._depthStencilTexture,this._depthStencilTexture=e};Cs.prototype.prepareTextures=function(e,t){this._numSamples>1&&this._multisampleFramebuffer.blitFramebuffers(e,t)};Cs.prototype.clear=function(e,t,n){let i=t.framebuffer;t.framebuffer=this.framebuffer,t.execute(e,n),t.framebuffer=i};Cs.prototype.destroyFramebuffer=function(){this._framebuffer=this._framebuffer&&this._framebuffer.destroy(),this._multisampleFramebuffer=this._multisampleFramebuffer&&this._multisampleFramebuffer.destroy()};Cs.prototype.destroy=function(){if(this._color){let e=this._colorTextures,t=this._colorRenderbuffers;for(let n=0;n<e.length;++n){let i=e[n];this._createColorAttachments&&l(i)&&!i.isDestroyed()&&i.destroy(),l(i)&&i.isDestroyed()&&(e[n]=void 0);let o=t[n];this._createColorAttachments&&l(o)&&!o.isDestroyed()&&o.destroy(),l(o)&&o.isDestroyed()&&(t[n]=void 0)}}this._depthStencil&&(this._createDepthAttachments&&(this._depthStencilTexture=this._depthStencilTexture&&this._depthStencilTexture.destroy(),this._depthStencilRenderbuffer=this._depthStencilRenderbuffer&&this._depthStencilRenderbuffer.destroy()),l(this._depthStencilTexture)&&this._depthStencilTexture.isDestroyed()&&(this._depthStencilTexture=void 0),l(this._depthStencilRenderbuffer)&&this._depthStencilRenderbuffer.isDestroyed()&&(this._depthStencilRenderbuffer=void 0)),this._depth&&(this._createDepthAttachments&&(this._depthTexture=this._depthTexture&&this._depthTexture.destroy(),this._depthRenderbuffer=this._depthRenderbuffer&&this._depthRenderbuffer.destroy()),l(this._depthTexture)&&this._depthTexture.isDestroyed()&&(this._depthTexture=void 0),l(this._depthRenderbuffer)&&this._depthRenderbuffer.isDestroyed()&&(this._depthRenderbuffer=void 0)),this.destroyFramebuffer()};var fi=Cs;var iBt=_(T(),1);var O3t=_(T(),1);var Sx={VERTEX:0,FRAGMENT:1,BOTH:2};Sx.includesVertexShader=function(e){return e===Sx.VERTEX||e===Sx.BOTH};Sx.includesFragmentShader=function(e){return e===Sx.FRAGMENT||e===Sx.BOTH};var ye=Object.freeze(Sx);var z3t=_(T(),1);function LY(e){this.name=e,this.fields=[]}LY.prototype.addField=function(e,t){let n=` ${e} ${t};`;this.fields.push(n)};LY.prototype.generateGlslLines=function(){let e=this.fields;return e.length===0&&(e=[" float _empty;"]),[].concat(`struct ${this.name}`,"{",e,"};")};var aE=LY;var K3t=_(T(),1);function RY(e){this.signature=e,this.body=[]}RY.prototype.addLines=function(e){let t=this.body;if(Array.isArray(e)){let n=e.length;for(let i=0;i<n;i++)t.push(` ${e[i]}`)}else t.push(` ${e}`)};RY.prototype.generateGlslLines=function(){return[].concat(this.signature,"{",this.body,"}")};var cE=RY;function kc(){this._positionAttributeLine=void 0,this._nextAttributeLocation=1,this._attributeLocations={},this._attributeLines=[],this._structs={},this._functions={},this._vertexShaderParts={defineLines:[],uniformLines:[],shaderLines:[],varyingLines:[],structIds:[],functionIds:[]},this._fragmentShaderParts={defineLines:[],uniformLines:[],shaderLines:[],varyingLines:[],structIds:[],functionIds:[]}}Object.defineProperties(kc.prototype,{attributeLocations:{get:function(){return this._attributeLocations}}});kc.prototype.addDefine=function(e,t,n){n=n??ye.BOTH;let i=e;l(t)&&(i+=` ${t.toString()}`),ye.includesVertexShader(n)&&this._vertexShaderParts.defineLines.push(i),ye.includesFragmentShader(n)&&this._fragmentShaderParts.defineLines.push(i)};kc.prototype.addStruct=function(e,t,n){this._structs[e]=new aE(t),ye.includesVertexShader(n)&&this._vertexShaderParts.structIds.push(e),ye.includesFragmentShader(n)&&this._fragmentShaderParts.structIds.push(e)};kc.prototype.addStructField=function(e,t,n){this._structs[e].addField(t,n)};kc.prototype.addFunction=function(e,t,n){this._functions[e]=new cE(t),ye.includesVertexShader(n)&&this._vertexShaderParts.functionIds.push(e),ye.includesFragmentShader(n)&&this._fragmentShaderParts.functionIds.push(e)};kc.prototype.addFunctionLines=function(e,t){this._functions[e].addLines(t)};kc.prototype.addUniform=function(e,t,n){n=n??ye.BOTH;let i=`uniform ${e} ${t};`;ye.includesVertexShader(n)&&this._vertexShaderParts.uniformLines.push(i),ye.includesFragmentShader(n)&&this._fragmentShaderParts.uniformLines.push(i)};kc.prototype.setPositionAttribute=function(e,t){return this._positionAttributeLine=`in ${e} ${t};`,this._attributeLocations[t]=0,0};kc.prototype.addAttribute=function(e,t){let n=`in ${e} ${t};`;this._attributeLines.push(n);let i=this._nextAttributeLocation;return this._attributeLocations[t]=i,this._nextAttributeLocation+=xIe(e),i};kc.prototype.addVarying=function(e,t,n){n=l(n)?`${n} `:"";let i=`${e} ${t};`;this._vertexShaderParts.varyingLines.push(`${n}out ${i}`),this._fragmentShaderParts.varyingLines.push(`${n}in ${i}`)};kc.prototype.addVertexLines=function(e){let t=this._vertexShaderParts.shaderLines;Array.isArray(e)?t.push.apply(t,e):t.push(e)};kc.prototype.addFragmentLines=function(e){let t=this._fragmentShaderParts.shaderLines;Array.isArray(e)?t.push.apply(t,e):t.push(e)};kc.prototype.buildShaderProgram=function(e){let t=l(this._positionAttributeLine)?[this._positionAttributeLine]:[],n=yIe(this),i=_Ie(this),o=t.concat(this._attributeLines,this._vertexShaderParts.uniformLines,this._vertexShaderParts.varyingLines,n.vertexLines,i.vertexLines,this._vertexShaderParts.shaderLines).join(` `),r=new De({defines:this._vertexShaderParts.defineLines,sources:[o]}),s=this._fragmentShaderParts.uniformLines.concat(this._fragmentShaderParts.varyingLines,n.fragmentLines,i.fragmentLines,this._fragmentShaderParts.shaderLines).join(` `),a=new De({defines:this._fragmentShaderParts.defineLines,sources:[s]});return $t.fromCache({context:e,vertexShaderSource:r,fragmentShaderSource:a,attributeLocations:this._attributeLocations})};kc.prototype.clone=function(){return Ye(this,!0)};function yIe(e){let t=[],n=[],i,o=e._vertexShaderParts.structIds,r,s,a;for(i=0;i<o.length;i++)r=o[i],s=e._structs[r],a=s.generateGlslLines(),t.push.apply(t,a);for(o=e._fragmentShaderParts.structIds,i=0;i<o.length;i++)r=o[i],s=e._structs[r],a=s.generateGlslLines(),n.push.apply(n,a);return{vertexLines:t,fragmentLines:n}}function xIe(e){switch(e){case"mat2":return 2;case"mat3":return 3;case"mat4":return 4;default:return 1}}function _Ie(e){let t=[],n=[],i,o=e._vertexShaderParts.functionIds,r,s,a;for(i=0;i<o.length;i++)r=o[i],s=e._functions[r],a=s.generateGlslLines(),t.push.apply(t,a);for(o=e._fragmentShaderParts.functionIds,i=0;i<o.length;i++)r=o[i],s=e._functions[r],a=s.generateGlslLines(),n.push.apply(n,a);return{vertexLines:t,fragmentLines:n}}var Cx=kc;var SBt=_(T(),1);var aBt=_(T(),1);function lE({x:e,y:t,width:n,height:i}){this.rectangle=new Ke(e,t,n,i),this.childNode1=void 0,this.childNode2=void 0,this.index=void 0}function ZY({width:e,height:t,borderPadding:n}){this._width=e,this._height=t,this._borderPadding=n,this._root=new lE({x:n,y:n,width:e-2*n,height:t-2*n})}ZY.prototype.pack=function(e,{width:t,height:n}){let i=this._findNode(this._root,{width:t,height:n});if(l(i))return i.index=e,i};ZY.prototype._findNode=function(e,{width:t,height:n}){if(l(e)){if(!l(e.childNode1)&&!l(e.childNode2)){if(l(e.index))return;let{rectangle:i}=e,o=i.width,r=i.height,s=o-t,a=r-n;return s<0||a<0?void 0:s===0&&a===0?e:s>a?(e.childNode1=new lE({x:i.x,y:i.y,width:t,height:r}),e.childNode2=new lE({x:i.x+t,y:i.y,width:s,height:r}),this._findNode(e.childNode1,{width:t,height:n})):(e.childNode1=new lE({x:i.x,y:i.y,width:o,height:n}),e.childNode2=new lE({x:i.x,y:i.y+n,width:o,height:a}),this._findNode(e.childNode1,{width:t,height:n}))}return this._findNode(e.childNode1,{width:t,height:n})||this._findNode(e.childNode2,{width:t,height:n})}};var rC=ZY;var jte=16;function Il(e){e=e??Y.EMPTY_OBJECT;let t=e.borderWidthInPixels??1,n=e.initialSize??new U(jte,jte);this._pixelFormat=e.pixelFormat??it.RGBA,this._sampler=e.sampler,this._borderWidthInPixels=t,this._initialSize=n,this._texturePacker=void 0,this._rectangles=[],this._subRegions=new Map,this._guid=zn(),this._imagesToAddQueue=[],this._indexById=new Map,this._indexPromiseById=new Map,this._nextIndex=0}Object.defineProperties(Il.prototype,{borderWidthInPixels:{get:function(){return this._borderWidthInPixels}},rectangles:{get:function(){return this._rectangles}},texture:{get:function(){return this._texture}},pixelFormat:{get:function(){return this._pixelFormat}},sampler:{get:function(){return this._sampler}},numberOfImages:{get:function(){return this._nextIndex}},guid:{get:function(){return this._guid}},sizeInBytes:{get:function(){return l(this._texture)?this._texture.sizeInBytes:0}}});Il.prototype.computeTextureCoordinates=function(e,t){let n=this._texture,i=this._rectangles[e];if(l(t)||(t=new Ke),!l(i))return t.x=0,t.y=0,t.width=0,t.height=0,t;let o=n.width,r=n.height,s=i.width,a=i.height,c=i.x,d=i.y,u=this._subRegions.get(e);if(l(u)){let h=this._rectangles[u];c+=h.x,d+=h.y}return t.x=c/o,t.y=d/r,t.width=s/o,t.height=a/r,t};Il.prototype._copyFromTexture=function(e,t,n,i){let o=this._pixelFormat,r=this._sampler,s=new vt({context:e,height:n,width:t,pixelFormat:o,sampler:r}),a=e._gl,c=s._textureTarget,d=this._texture,u=new Wr({context:e,colorTextures:[d],destroyAttachments:!1});a.activeTexture(a.TEXTURE0),a.bindTexture(c,s._texture),u._bind();let h=this.rectangles,p=this._subRegions;for(let g=0;g<h.length;++g){let f=i[g],y=h[g];if(!l(f)||!l(y)||l(p.get(g)))continue;let{x,y:S,width:C,height:V}=f;a.copyTexSubImage2D(c,0,x,S,y.x,y.y,C,V)}return a.bindTexture(c,null),s._initialized=!0,u._unBind(),u.destroy(),s};Il.prototype._resize=function(e,t=0){let n=this._borderWidthInPixels,i=this._rectangles,o=this._imagesToAddQueue,r=this._texture,s=r.width,a=r.height,c=this._subRegions,d=i.map((C,V)=>new qte({index:V,image:C})).filter((C,V)=>l(C.image)&&!l(c.get(V))),u=0,h=0,p=0;for(let C=t;C<o.length;++C){let{width:V,height:L}=o[C].image;u=Math.max(u,V),h=Math.max(h,L),p+=V*L,d.push(o[C])}s=Math.max(u,s),a=Math.max(h,a),e.webgl2||(s=X.nextPowerOfTwo(s),a=X.nextPowerOfTwo(a));let g=p,f=1;for(;g/s/a>=1;)f*=2,s>a?a*=f:s*=f;d.sort(({image:C},{image:V})=>V.height*V.width-C.height*C.width);let y=new Array(this._nextIndex);for(let C of this._subRegions.keys())l(c.get(C))&&(y[C]=i[C]);let x,S=!1;for(;!S;){x=new rC({height:a,width:s,borderPadding:n});let C;for(C=0;C<d.length;++C){let{index:V,image:L}=d[C];if(!l(L))continue;let Z=x.pack(V,L);if(!l(Z)){s>a?a*=2:s*=2;break}y[V]=Z.rectangle}S=C===d.length}this._texturePacker=x,this._texture=this._copyFromTexture(e,s,a,y),r.destroy(),this._rectangles=y,this._guid=zn()};Il.prototype.getImageIndex=function(e){return this._indexById.get(e)};Il.prototype._copyImageToTexture=function({index:e,image:t,resolve:n,reject:i}){let o=this._texture,r=this._rectangles[e];try{o.copyFrom({source:t,xOffset:r.x,yOffset:r.y}),l(n)&&n(e)}catch(s){if(l(i)){i(s);return}}};function qte({index:e,image:t,resolve:n,reject:i}){this.index=e,this.image=t,this.resolve=n,this.reject=i,this.rectangle=void 0}Il.prototype._addImage=function(e,t){return new Promise((n,i)=>{this._imagesToAddQueue.push(new qte({index:e,image:t,resolve:n,reject:i})),this._imagesToAddQueue.sort(({image:o},{image:r})=>r.height*r.width-o.height*o.width)})};Il.prototype._processImageQueue=function(e){let t=this._imagesToAddQueue;if(t.length===0)return!1;this._rectangles.length=this._nextIndex;let n,i;for(n=0;n<t.length;++n){let o=t[n],{image:r,index:s}=o,a=this._texturePacker.pack(s,r);if(!l(a)){try{this._resize(e,n)}catch(c){i=c,l(o.reject)&&o.reject(i)}break}this._rectangles[s]=a.rectangle}if(l(i)){for(n=n+1;n<t.length;++n){let{resolve:o}=t[n];l(o)&&o(-1)}return t.length=0,!1}for(let o=0;o<t.length;++o)this._copyImageToTexture(t[o]);return t.length=0,!0};Il.prototype.update=function(e){if(!l(this._texture)){let t=this._initialSize.x,n=this._initialSize.y,i=this._pixelFormat,o=this._sampler,r=this._borderWidthInPixels;this._texture=new vt({context:e,width:t,height:n,pixelFormat:i,sampler:o}),this._texturePacker=new rC({height:n,width:t,borderPadding:r})}return this._processImageQueue(e)};async function TIe(e,t){return typeof e=="function"&&(e=e(t)),(typeof e=="string"||e instanceof Ze)&&(e=Ze.createIfNeeded(e).fetchImage()),e}Il.prototype.addImage=function(e,t){let n=this._indexPromiseById.get(e);if(l(n))return n;let i=this._nextIndex++;return this._indexById.set(e,i),n=(async()=>(t=await TIe(t,e),this.isDestroyed()||!l(t)?-1:this._addImage(i,t)))(),this._indexPromiseById.set(e,n),n};Il.prototype.addImageSubRegion=function(e,t){let n=this._indexById.get(e);if(!l(n))throw new ae(`image with id "${e}" not found in the atlas.`);let i=this._indexPromiseById.get(e);for(let[r,s]of this._subRegions.entries())if(n===s&&this._rectangles[r].equals(t))return i.then(c=>c===-1?-1:r);let o=this._nextIndex++;return this._subRegions.set(o,n),this._rectangles[o]=t.clone(),i.then(r=>{if(r===-1)return-1;let s=this._rectangles[r];return o})};Il.prototype.isDestroyed=function(){return!1};Il.prototype.destroy=function(){return this._texture=this._texture&&this._texture.destroy(),this._imagesToAddQueue.forEach(({resolve:e})=>{l(e)&&e(-1)}),me(this)};var Vx=Il;var XBt=_(T(),1);function Us(e,t,n,i){let o=Us._verifyAttributes(t);n=n??0;let r=[],s={},a,c,d=o.length;for(let h=0;h<d;++h){let p=o[h];if(p.vertexBuffer){r.push(p);continue}c=p.usage,a=s[c],l(a)||(a=s[c]=[]),a.push(p)}function u(h,p){return Q.getSizeInBytes(p.componentDatatype)-Q.getSizeInBytes(h.componentDatatype)}this._allBuffers=[];for(c in s)if(s.hasOwnProperty(c)){a=s[c],a.sort(u);let h=Us._vertexSizeInBytes(a),p=a[0].usage,g={vertexSizeInBytes:h,vertexBuffer:void 0,usage:p,needsCommit:!1,arrayBuffer:void 0,arrayViews:Us._createArrayViews(a,h)};this._allBuffers.push(g)}this._size=0,this._instanced=i??!1,this._precreated=r,this._context=e,this.writers=void 0,this.va=void 0,this.resize(n)}Us._verifyAttributes=function(e){let t=[];for(let i=0;i<e.length;++i){let o=e[i],r={index:o.index??i,enabled:o.enabled??!0,componentsPerAttribute:o.componentsPerAttribute,componentDatatype:o.componentDatatype??Q.FLOAT,normalize:o.normalize??!1,vertexBuffer:o.vertexBuffer,usage:o.usage??Me.STATIC_DRAW};t.push(r)}let n=new Array(t.length);for(let i=0;i<t.length;++i){let r=t[i].index;n[r]=!0}return t};Us._vertexSizeInBytes=function(e){let t=0,n=e.length;for(let s=0;s<n;++s){let a=e[s];t+=a.componentsPerAttribute*Q.getSizeInBytes(a.componentDatatype)}let i=n>0?Q.getSizeInBytes(e[0].componentDatatype):0,o=i>0?t%i:0,r=o===0?0:i-o;return t+=r,t};Us._createArrayViews=function(e,t){let n=[],i=0,o=e.length;for(let r=0;r<o;++r){let s=e[r],a=s.componentDatatype;n.push({index:s.index,enabled:s.enabled,componentsPerAttribute:s.componentsPerAttribute,componentDatatype:a,normalize:s.normalize,offsetInBytes:i,vertexSizeInComponentType:t/Q.getSizeInBytes(a),view:void 0}),i+=s.componentsPerAttribute*Q.getSizeInBytes(a)}return n};Us.prototype.resize=function(e){this._size=e;let t=this._allBuffers;this.writers=[];for(let n=0,i=t.length;n<i;++n){let o=t[n];Us._resize(o,this._size),Us._appendWriters(this.writers,o)}GY(this)};Us._resize=function(e,t){if(e.vertexSizeInBytes>0){let n=new ArrayBuffer(t*e.vertexSizeInBytes);if(l(e.arrayBuffer)){let r=new Uint8Array(n),s=new Uint8Array(e.arrayBuffer),a=s.length;for(let c=0;c<a;++c)r[c]=s[c]}let i=e.arrayViews,o=i.length;for(let r=0;r<o;++r){let s=i[r];s.view=Q.createArrayBufferView(s.componentDatatype,n,s.offsetInBytes)}e.arrayBuffer=n}};var SIe=[function(e,t,n){return function(i,o){t[i*n]=o,e.needsCommit=!0}},function(e,t,n){return function(i,o,r){let s=i*n;t[s]=o,t[s+1]=r,e.needsCommit=!0}},function(e,t,n){return function(i,o,r,s){let a=i*n;t[a]=o,t[a+1]=r,t[a+2]=s,e.needsCommit=!0}},function(e,t,n){return function(i,o,r,s,a){let c=i*n;t[c]=o,t[c+1]=r,t[c+2]=s,t[c+3]=a,e.needsCommit=!0}}];Us._appendWriters=function(e,t){let n=t.arrayViews,i=n.length;for(let o=0;o<i;++o){let r=n[o];e[r.index]=SIe[r.componentsPerAttribute-1](t,r.view,r.vertexSizeInComponentType)}};Us.prototype.commit=function(e){let t=!1,n=this._allBuffers,i,o,r;for(o=0,r=n.length;o<r;++o)i=n[o],t=CIe(this,i)||t;if(t||!l(this.va)){GY(this);let s=this.va=[],a=X.SIXTY_FOUR_KILOBYTES-4,c=l(e)&&!this._instanced?Math.ceil(this._size/a):1;for(let d=0;d<c;++d){let u=[];for(o=0,r=n.length;o<r;++o){i=n[o];let h=d*(i.vertexSizeInBytes*a);Us._appendAttributes(u,i,h,this._instanced)}u=u.concat(this._precreated),s.push({va:new ni({context:this._context,attributes:u,indexBuffer:e}),indicesCount:1.5*(d!==c-1?a:this._size%a)})}}};function CIe(e,t){if(t.needsCommit&&t.vertexSizeInBytes>0){t.needsCommit=!1;let n=t.vertexBuffer,i=e._size*t.vertexSizeInBytes,o=l(n);if(!o||n.sizeInBytes<i)return o&&n.destroy(),t.vertexBuffer=xt.createVertexBuffer({context:e._context,typedArray:t.arrayBuffer,usage:t.usage}),t.vertexBuffer.vertexArrayDestroyable=!1,!0;t.vertexBuffer.copyFromArrayView(t.arrayBuffer)}return!1}Us._appendAttributes=function(e,t,n,i){let o=t.arrayViews,r=o.length;for(let s=0;s<r;++s){let a=o[s];e.push({index:a.index,enabled:a.enabled,componentsPerAttribute:a.componentsPerAttribute,componentDatatype:a.componentDatatype,normalize:a.normalize,vertexBuffer:t.vertexBuffer,offsetInBytes:n+a.offsetInBytes,strideInBytes:t.vertexSizeInBytes,instanceDivisor:i?1:0})}};Us.prototype.subCommit=function(e,t){let n=this._allBuffers;for(let i=0,o=n.length;i<o;++i)VIe(n[i],e,t)};function VIe(e,t,n){if(e.needsCommit&&e.vertexSizeInBytes>0){let i=e.vertexSizeInBytes*t,o=e.vertexSizeInBytes*n;e.vertexBuffer.copyFromArrayView(new Uint8Array(e.arrayBuffer,i,o),i)}}Us.prototype.endSubCommits=function(){let e=this._allBuffers;for(let t=0,n=e.length;t<n;++t)e[t].needsCommit=!1};function GY(e){let t=e.va;if(!l(t))return;let n=t.length;for(let i=0;i<n;++i)t[i].va.destroy();e.va=void 0}Us.prototype.isDestroyed=function(){return!1};Us.prototype.destroy=function(){let e=this._allBuffers;for(let t=0,n=e.length;t<n;++t){let i=e[t];i.vertexBuffer=i.vertexBuffer&&i.vertexBuffer.destroy()}return GY(this),me(this)};var Xp=Us;var wBt=_(T(),1);function LIe(e,t,n){let i={flipY:!0,skipColorSpaceConversion:n,preferImageBitmap:!0},o=[Ze.createIfNeeded(t.positiveX).fetchImage(i),Ze.createIfNeeded(t.negativeX).fetchImage(i),Ze.createIfNeeded(t.positiveY).fetchImage(i),Ze.createIfNeeded(t.negativeY).fetchImage(i),Ze.createIfNeeded(t.positiveZ).fetchImage(i),Ze.createIfNeeded(t.negativeZ).fetchImage(i)];return Promise.all(o).then(function(r){return new xr({context:e,source:{positiveX:r[0],negativeX:r[1],positiveY:r[2],negativeY:r[3],positiveZ:r[4],negativeZ:r[5]}})})}var dE=LIe;var JBt=_(T(),1);var BBt=_(T(),1);var NBt=_(T(),1);function Y0(e){this._value=void 0,this._hasClone=!1,this._hasEquals=!1,this._definitionChanged=new be,this.setValue(e)}Object.defineProperties(Y0.prototype,{isConstant:{value:!0},definitionChanged:{get:function(){return this._definitionChanged}}});Y0.prototype.getValue=function(e,t){return this._hasClone?this._value.clone(t):this._value};Y0.prototype.setValue=function(e){let t=this._value;if(t!==e){let n=l(e),i=n&&typeof e.clone=="function",o=n&&typeof e.equals=="function";(!o||!e.equals(t))&&(this._hasClone=i,this._hasEquals=o,this._value=i?e.clone(this._value):e,this._definitionChanged.raiseEvent(this))}};Y0.prototype.equals=function(e){return this===e||e instanceof Y0&&(!this._hasEquals&&this._value===e._value||this._hasEquals&&this._value.equals(e._value))};Y0.prototype.valueOf=function(){return this._value};Y0.prototype.toString=function(){return String(this._value)};var Qn=Y0;function RIe(e,t,n,i,o){return{configurable:i,get:function(){return this[t]},set:function(r){let s=this[t],a=this[n];l(a)&&(a(),this[n]=void 0),r!==void 0&&(!l(r)||!l(r.getValue))&&l(o)&&(r=o(r)),s!==r&&(this[t]=r,this._definitionChanged.raiseEvent(this,e,r,s)),l(r)&&l(r.definitionChanged)&&(this[n]=r.definitionChanged.addEventListener(function(){this._definitionChanged.raiseEvent(this,e,r,r)},this))}}}function ZIe(e){return new Qn(e)}function GIe(e,t,n){return RIe(e,`_${e.toString()}`,`_${e.toString()}Subscription`,t??!1,n??ZIe)}var ue=GIe;function uE(e){this._definitionChanged=new be,this._show=void 0,this._showSubscription=void 0,this._image=void 0,this._imageSubscription=void 0,this._scale=void 0,this._scaleSubscription=void 0,this._pixelOffset=void 0,this._pixelOffsetSubscription=void 0,this._eyeOffset=void 0,this._eyeOffsetSubscription=void 0,this._horizontalOrigin=void 0,this._horizontalOriginSubscription=void 0,this._verticalOrigin=void 0,this._verticalOriginSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._color=void 0,this._colorSubscription=void 0,this._rotation=void 0,this._rotationSubscription=void 0,this._alignedAxis=void 0,this._alignedAxisSubscription=void 0,this._sizeInMeters=void 0,this._sizeInMetersSubscription=void 0,this._width=void 0,this._widthSubscription=void 0,this._height=void 0,this._heightSubscription=void 0,this._scaleByDistance=void 0,this._scaleByDistanceSubscription=void 0,this._translucencyByDistance=void 0,this._translucencyByDistanceSubscription=void 0,this._pixelOffsetScaleByDistance=void 0,this._pixelOffsetScaleByDistanceSubscription=void 0,this._imageSubRegion=void 0,this._imageSubRegionSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._disableDepthTestDistance=void 0,this._disableDepthTestDistanceSubscription=void 0,this._splitDirection=void 0,this._splitDirectionSubscription=void 0,this.merge(e??Y.EMPTY_OBJECT)}Object.defineProperties(uE.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:ue("show"),image:ue("image"),scale:ue("scale"),pixelOffset:ue("pixelOffset"),eyeOffset:ue("eyeOffset"),horizontalOrigin:ue("horizontalOrigin"),verticalOrigin:ue("verticalOrigin"),heightReference:ue("heightReference"),color:ue("color"),rotation:ue("rotation"),alignedAxis:ue("alignedAxis"),sizeInMeters:ue("sizeInMeters"),width:ue("width"),height:ue("height"),scaleByDistance:ue("scaleByDistance"),translucencyByDistance:ue("translucencyByDistance"),pixelOffsetScaleByDistance:ue("pixelOffsetScaleByDistance"),imageSubRegion:ue("imageSubRegion"),distanceDisplayCondition:ue("distanceDisplayCondition"),disableDepthTestDistance:ue("disableDepthTestDistance"),splitDirection:ue("splitDirection")});uE.prototype.clone=function(e){return l(e)?(e.show=this._show,e.image=this._image,e.scale=this._scale,e.pixelOffset=this._pixelOffset,e.eyeOffset=this._eyeOffset,e.horizontalOrigin=this._horizontalOrigin,e.verticalOrigin=this._verticalOrigin,e.heightReference=this._heightReference,e.color=this._color,e.rotation=this._rotation,e.alignedAxis=this._alignedAxis,e.sizeInMeters=this._sizeInMeters,e.width=this._width,e.height=this._height,e.scaleByDistance=this._scaleByDistance,e.translucencyByDistance=this._translucencyByDistance,e.pixelOffsetScaleByDistance=this._pixelOffsetScaleByDistance,e.imageSubRegion=this._imageSubRegion,e.distanceDisplayCondition=this._distanceDisplayCondition,e.disableDepthTestDistance=this._disableDepthTestDistance,e.splitDirection=this._splitDirection,e):new uE(this)};uE.prototype.merge=function(e){this.show=this._show??e.show,this.image=this._image??e.image,this.scale=this._scale??e.scale,this.pixelOffset=this._pixelOffset??e.pixelOffset,this.eyeOffset=this._eyeOffset??e.eyeOffset,this.horizontalOrigin=this._horizontalOrigin??e.horizontalOrigin,this.verticalOrigin=this._verticalOrigin??e.verticalOrigin,this.heightReference=this._heightReference??e.heightReference,this.color=this._color??e.color,this.rotation=this._rotation??e.rotation,this.alignedAxis=this._alignedAxis??e.alignedAxis,this.sizeInMeters=this._sizeInMeters??e.sizeInMeters,this.width=this._width??e.width,this.height=this._height??e.height,this.scaleByDistance=this._scaleByDistance??e.scaleByDistance,this.translucencyByDistance=this._translucencyByDistance??e.translucencyByDistance,this.pixelOffsetScaleByDistance=this._pixelOffsetScaleByDistance??e.pixelOffsetScaleByDistance,this.imageSubRegion=this._imageSubRegion??e.imageSubRegion,this.distanceDisplayCondition=this._distanceDisplayCondition??e.distanceDisplayCondition,this.disableDepthTestDistance=this._disableDepthTestDistance??e.disableDepthTestDistance,this.splitDirection=this.splitDirection??e.splitDirection};var ac=uE;var wOt=_(T(),1);var qBt=_(T(),1);function Lx(){this._array=[],this._hash={}}Object.defineProperties(Lx.prototype,{length:{get:function(){return this._array.length}},values:{get:function(){return this._array}}});Lx.prototype.contains=function(e){return l(this._hash[e])};Lx.prototype.set=function(e,t){let n=this._hash[e];t!==n&&(this.remove(e),this._hash[e]=t,this._array.push(t))};Lx.prototype.get=function(e){return this._hash[e]};Lx.prototype.remove=function(e){let t=this._hash[e],n=l(t);if(n){let i=this._array;i.splice(i.indexOf(t),1),delete this._hash[e]}return n};Lx.prototype.removeAll=function(){let e=this._array;e.length>0&&(this._hash={},e.length=0)};var Gt=Lx;var tOt=_(T(),1);function pd(e,t){e=e??0,this._near=e,t=t??Number.MAX_VALUE,this._far=t}Object.defineProperties(pd.prototype,{near:{get:function(){return this._near},set:function(e){this._near=e}},far:{get:function(){return this._far},set:function(e){this._far=e}}});pd.packedLength=2;pd.pack=function(e,t,n){return n=n??0,t[n++]=e.near,t[n]=e.far,t};pd.unpack=function(e,t,n){return t=t??0,l(n)||(n=new pd),n.near=e[t++],n.far=e[t],n};pd.equals=function(e,t){return e===t||l(e)&&l(t)&&e.near===t.near&&e.far===t.far};pd.clone=function(e,t){if(l(e))return l(t)||(t=new pd),t.near=e.near,t.far=e.far,t};pd.prototype.clone=function(e){return pd.clone(this,e)};pd.prototype.equals=function(e){return pd.equals(this,e)};var wt=pd;var oOt=_(T(),1);function Lu(e,t,n,i){this.near=e??0,this.nearValue=t??0,this.far=n??1,this.farValue=i??0}Lu.clone=function(e,t){if(l(e))return l(t)?(t.near=e.near,t.nearValue=e.nearValue,t.far=e.far,t.farValue=e.farValue,t):new Lu(e.near,e.nearValue,e.far,e.farValue)};Lu.packedLength=4;Lu.pack=function(e,t,n){return n=n??0,t[n++]=e.near,t[n++]=e.nearValue,t[n++]=e.far,t[n]=e.farValue,t};Lu.unpack=function(e,t,n){return t=t??0,l(n)||(n=new Lu),n.near=e[t++],n.nearValue=e[t++],n.far=e[t++],n.farValue=e[t],n};Lu.equals=function(e,t){return e===t||l(e)&&l(t)&&e.near===t.near&&e.nearValue===t.nearValue&&e.far===t.far&&e.farValue===t.farValue};Lu.prototype.clone=function(e){return Lu.clone(this,e)};Lu.prototype.equals=function(e){return Lu.equals(this,e)};var kt=Lu;var sOt=_(T(),1),Rx={NONE:0,CLAMP_TO_GROUND:1,RELATIVE_TO_GROUND:2,CLAMP_TO_TERRAIN:3,RELATIVE_TO_TERRAIN:4,CLAMP_TO_3D_TILE:5,RELATIVE_TO_3D_TILE:6},Je=Object.freeze(Rx);function Ru(e){return e===Rx.CLAMP_TO_GROUND||e===Rx.CLAMP_TO_3D_TILE||e===Rx.CLAMP_TO_TERRAIN}function sC(e){return e===Rx.RELATIVE_TO_GROUND||e===Rx.RELATIVE_TO_3D_TILE||e===Rx.RELATIVE_TO_TERRAIN}var cOt=_(T(),1),EIe={CENTER:0,LEFT:1,RIGHT:-1},_i=Object.freeze(EIe);var dOt=_(T(),1),IIe={CENTER:0,BOTTOM:1,BASELINE:2,TOP:-1},An=Object.freeze(IIe);var mOt=_(T(),1),XIe=Object.freeze({DONE:0,PENDING:1,FAILED:2}),dt=XIe;var bOt=_(T(),1);function wm(){pe.throwInstantiationError()}Object.defineProperties(wm.prototype,{isConstant:{get:pe.throwInstantiationError},definitionChanged:{get:pe.throwInstantiationError}});wm.prototype.getValue=pe.throwInstantiationError;wm.prototype.equals=pe.throwInstantiationError;wm.equals=function(e,t){return e===t||l(e)&&e.equals(t)};wm.arrayEquals=function(e,t){if(e===t)return!0;if(!l(e)||!l(t)||e.length!==t.length)return!1;let n=e.length;for(let i=0;i<n;i++)if(!wm.equals(e[i],t[i]))return!1;return!0};wm.isConstant=function(e){return!l(e)||e.isConstant};wm.getValueOrUndefined=function(e,t,n){return l(e)?e.getValue(t,n):void 0};wm.getValueOrDefault=function(e,t,n,i){return l(e)?e.getValue(t,i)??n:n};wm.getValueOrClonedDefault=function(e,t,n,i){let o;return l(e)&&(o=e.getValue(t,i)),l(o)||(o=n.clone(o)),o};var J=wm;var yOt=_(T(),1),WIe={LEFT:-1,NONE:0,RIGHT:1},vr=Object.freeze(WIe);var PIe=D.WHITE,vIe=m.ZERO,wIe=Je.NONE,FIe=U.ZERO,AIe=1,MIe=0,NIe=m.ZERO,kIe=_i.CENTER,UIe=An.CENTER,DIe=!1,BIe=vr.NONE,OIe=new m,YIe=new D,zIe=new m,HIe=new U,KIe=new kt,JIe=new kt,QIe=new kt,jIe=new Ke,qIe=new wt;function $te(e){this.entity=e,this.billboard=void 0,this.textureValue=void 0}function z0(e,t){t.collectionChanged.addEventListener(z0.prototype._onCollectionChanged,this),this._cluster=e,this._entityCollection=t,this._items=new Gt,this._onCollectionChanged(t,t.values,[],[])}z0.prototype.update=function(e){let t=this._items.values,n=this._cluster;for(let i=0,o=t.length;i<o;i++){let r=t[i],s=r.entity,a=s._billboard,c,d=r.billboard,u=s.isShowing&&s.isAvailable(e)&&J.getValueOrDefault(a._show,e,!0),h;if(u&&(h=J.getValueOrUndefined(s._position,e,OIe),c=J.getValueOrUndefined(a._image,e),u=l(h)&&l(c)),!u){EY(r,s,n);continue}J.isConstant(s._position)||(n._clusterDirty=!0),l(d)||(d=n.getBillboard(s),d.id=s,r.billboard=d,r.textureValue=void 0),d.show=u,r.textureValue!==c&&(d.image=c,r.textureValue=c),d.position=h,d.color=J.getValueOrDefault(a._color,e,PIe,YIe),d.eyeOffset=J.getValueOrDefault(a._eyeOffset,e,vIe,zIe),d.heightReference=J.getValueOrDefault(a._heightReference,e,wIe),d.pixelOffset=J.getValueOrDefault(a._pixelOffset,e,FIe,HIe),d.scale=J.getValueOrDefault(a._scale,e,AIe),d.rotation=J.getValueOrDefault(a._rotation,e,MIe),d.alignedAxis=J.getValueOrDefault(a._alignedAxis,e,NIe),d.horizontalOrigin=J.getValueOrDefault(a._horizontalOrigin,e,kIe),d.verticalOrigin=J.getValueOrDefault(a._verticalOrigin,e,UIe),d.width=J.getValueOrUndefined(a._width,e),d.height=J.getValueOrUndefined(a._height,e),d.scaleByDistance=J.getValueOrUndefined(a._scaleByDistance,e,KIe),d.translucencyByDistance=J.getValueOrUndefined(a._translucencyByDistance,e,JIe),d.pixelOffsetScaleByDistance=J.getValueOrUndefined(a._pixelOffsetScaleByDistance,e,QIe),d.sizeInMeters=J.getValueOrDefault(a._sizeInMeters,e,DIe),d.distanceDisplayCondition=J.getValueOrUndefined(a._distanceDisplayCondition,e,qIe),d.disableDepthTestDistance=J.getValueOrUndefined(a._disableDepthTestDistance,e),d.splitDirection=J.getValueOrDefault(a._splitDirection,e,BIe);let p=J.getValueOrUndefined(a._imageSubRegion,e,jIe);l(p)&&d.setImageSubRegion(d.image,p)}return!0};z0.prototype.getBoundingSphere=function(e,t){let n=this._items.get(e.id);if(!l(n)||!l(n.billboard))return dt.FAILED;let i=n.billboard;if(i.heightReference===Je.NONE)t.center=m.clone(i.position,t.center);else{if(!l(i._clampedPosition))return dt.PENDING;t.center=m.clone(i._clampedPosition,t.center)}return t.radius=0,dt.DONE};z0.prototype.isDestroyed=function(){return!1};z0.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(z0.prototype._onCollectionChanged,this);let e=this._entityCollection.values;for(let t=0;t<e.length;t++)this._cluster.removeBillboard(e[t]);return me(this)};z0.prototype._onCollectionChanged=function(e,t,n,i){let o,r,s=this._items,a=this._cluster;for(o=t.length-1;o>-1;o--)r=t[o],l(r._billboard)&&l(r._position)&&s.set(r.id,new $te(r));for(o=i.length-1;o>-1;o--)r=i[o],l(r._billboard)&&l(r._position)?s.contains(r.id)||s.set(r.id,new $te(r)):(EY(s.get(r.id),r,a),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],EY(s.get(r.id),r,a),s.remove(r.id)};function EY(e,t,n){l(e)&&(e.billboard=void 0,n.removeBillboard(t))}var mE=z0;var tnn=_(T(),1);var HOt=_(T(),1);var $Ie=new m;function mf(e){e=e??Y.EMPTY_OBJECT;let t=e.minimum,n=e.maximum;this._min=m.clone(t),this._max=m.clone(n),this._offsetAttribute=e.offsetAttribute,this._workerName="createBoxOutlineGeometry"}mf.fromDimensions=function(e){e=e??Y.EMPTY_OBJECT;let t=e.dimensions,n=m.multiplyByScalar(t,.5,new m);return new mf({minimum:m.negate(n,new m),maximum:n,offsetAttribute:e.offsetAttribute})};mf.fromAxisAlignedBoundingBox=function(e){return new mf({minimum:e.minimum,maximum:e.maximum})};mf.packedLength=2*m.packedLength+1;mf.pack=function(e,t,n){return n=n??0,m.pack(e._min,t,n),m.pack(e._max,t,n+m.packedLength),t[n+m.packedLength*2]=e._offsetAttribute??-1,t};var tne=new m,nne=new m,ene={minimum:tne,maximum:nne,offsetAttribute:void 0};mf.unpack=function(e,t,n){t=t??0;let i=m.unpack(e,t,tne),o=m.unpack(e,t+m.packedLength,nne),r=e[t+m.packedLength*2];return l(n)?(n._min=m.clone(i,n._min),n._max=m.clone(o,n._max),n._offsetAttribute=r===-1?void 0:r,n):(ene.offsetAttribute=r===-1?void 0:r,new mf(ene))};mf.createGeometry=function(e){let t=e._min,n=e._max;if(m.equals(t,n))return;let i=new mn,o=new Uint16Array(12*2),r=new Float64Array(8*3);r[0]=t.x,r[1]=t.y,r[2]=t.z,r[3]=n.x,r[4]=t.y,r[5]=t.z,r[6]=n.x,r[7]=n.y,r[8]=t.z,r[9]=t.x,r[10]=n.y,r[11]=t.z,r[12]=t.x,r[13]=t.y,r[14]=n.z,r[15]=n.x,r[16]=t.y,r[17]=n.z,r[18]=n.x,r[19]=n.y,r[20]=n.z,r[21]=t.x,r[22]=n.y,r[23]=n.z,i.position=new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:r}),o[0]=4,o[1]=5,o[2]=5,o[3]=6,o[4]=6,o[5]=7,o[6]=7,o[7]=4,o[8]=0,o[9]=1,o[10]=1,o[11]=2,o[12]=2,o[13]=3,o[14]=3,o[15]=0,o[16]=0,o[17]=4,o[18]=1,o[19]=5,o[20]=2,o[21]=6,o[22]=3,o[23]=7;let s=m.subtract(n,t,$Ie),a=m.magnitude(s)*.5;if(l(e._offsetAttribute)){let c=r.length,d=e._offsetAttribute===rn.NONE?0:1,u=new Uint8Array(c/3).fill(d);i.applyOffset=new Ge({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:u})}return new lt({attributes:i,indices:o,primitiveType:we.LINES,boundingSphere:new le(m.ZERO,a),offsetAttribute:e._offsetAttribute})};var Fm=mf;var qOt=_(T(),1);function aC(e,t,n,i){e=e??1,t=t??1,n=n??1,i=i??1,this.value=new Uint8Array([D.floatToByte(e),D.floatToByte(t),D.floatToByte(n),D.floatToByte(i)])}Object.defineProperties(aC.prototype,{componentDatatype:{get:function(){return Q.UNSIGNED_BYTE}},componentsPerAttribute:{get:function(){return 4}},normalize:{get:function(){return!0}}});aC.fromColor=function(e){return new aC(e.red,e.green,e.blue,e.alpha)};aC.toValue=function(e,t){return l(t)?e.toBytes(t):new Uint8Array(e.toBytes())};aC.equals=function(e,t){return e===t||l(e)&&l(t)&&e.value[0]===t.value[0]&&e.value[1]===t.value[1]&&e.value[2]===t.value[2]&&e.value[3]===t.value[3]};var Yt=aC;var nYt=_(T(),1);function hE(e,t){e=e??0,t=t??Number.MAX_VALUE,this.value=new Float32Array([e,t])}Object.defineProperties(hE.prototype,{componentDatatype:{get:function(){return Q.FLOAT}},componentsPerAttribute:{get:function(){return 2}},normalize:{get:function(){return!1}}});hE.fromDistanceDisplayCondition=function(e){return new hE(e.near,e.far)};hE.toValue=function(e,t){return l(t)?(t[0]=e.near,t[1]=e.far,t):new Float32Array([e.near,e.far])};var kn=hE;var sYt=_(T(),1);function eXe(e){e=e??Y.EMPTY_OBJECT,this.geometry=e.geometry,this.modelMatrix=F.clone(e.modelMatrix??F.IDENTITY),this.id=e.id,this.pickPrimitive=e.pickPrimitive,this.attributes=e.attributes??{},this.westHemisphereGeometry=void 0,this.eastHemisphereGeometry=void 0}var Et=eXe;var bYt=_(T(),1);var mYt=_(T(),1);function Jo(e){e=e??Y.EMPTY_OBJECT,this.start=l(e.start)?q.clone(e.start):new q,this.stop=l(e.stop)?q.clone(e.stop):new q,this.data=e.data,this.isStartIncluded=e.isStartIncluded??!0,this.isStopIncluded=e.isStopIncluded??!0}Object.defineProperties(Jo.prototype,{isEmpty:{get:function(){let e=q.compare(this.stop,this.start);return e<0||e===0&&(!this.isStartIncluded||!this.isStopIncluded)}}});var cC={start:void 0,stop:void 0,isStartIncluded:void 0,isStopIncluded:void 0,data:void 0};Jo.fromIso8601=function(e,t){let n=e.iso8601.split("/");if(n.length!==2)throw new pe("options.iso8601 is an invalid ISO 8601 interval.");let i=q.fromIso8601(n[0]),o=q.fromIso8601(n[1]),r=e.isStartIncluded??!0,s=e.isStopIncluded??!0,a=e.data;return l(t)?(t.start=i,t.stop=o,t.isStartIncluded=r,t.isStopIncluded=s,t.data=a,t):(cC.start=i,cC.stop=o,cC.isStartIncluded=r,cC.isStopIncluded=s,cC.data=a,new Jo(cC))};Jo.toIso8601=function(e,t){return`${q.toIso8601(e.start,t)}/${q.toIso8601(e.stop,t)}`};Jo.clone=function(e,t){if(l(e))return l(t)?(t.start=e.start,t.stop=e.stop,t.isStartIncluded=e.isStartIncluded,t.isStopIncluded=e.isStopIncluded,t.data=e.data,t):new Jo(e)};Jo.equals=function(e,t,n){return e===t||l(e)&&l(t)&&(e.isEmpty&&t.isEmpty||e.isStartIncluded===t.isStartIncluded&&e.isStopIncluded===t.isStopIncluded&&q.equals(e.start,t.start)&&q.equals(e.stop,t.stop)&&(e.data===t.data||l(n)&&n(e.data,t.data)))};Jo.equalsEpsilon=function(e,t,n,i){return n=n??0,e===t||l(e)&&l(t)&&(e.isEmpty&&t.isEmpty||e.isStartIncluded===t.isStartIncluded&&e.isStopIncluded===t.isStopIncluded&&q.equalsEpsilon(e.start,t.start,n)&&q.equalsEpsilon(e.stop,t.stop,n)&&(e.data===t.data||l(i)&&i(e.data,t.data)))};Jo.intersect=function(e,t,n,i){if(!l(t))return Jo.clone(Jo.EMPTY,n);let o=e.start,r=e.stop,s=t.start,a=t.stop,c=q.greaterThanOrEquals(s,o)&&q.greaterThanOrEquals(r,s),d=!c&&q.lessThanOrEquals(s,o)&&q.lessThanOrEquals(o,a);if(!c&&!d)return Jo.clone(Jo.EMPTY,n);let u=e.isStartIncluded,h=e.isStopIncluded,p=t.isStartIncluded,g=t.isStopIncluded,f=q.lessThan(r,a);return l(n)||(n=new Jo),n.start=c?s:o,n.isStartIncluded=u&&p||!q.equals(s,o)&&(c&&p||d&&u),n.stop=f?r:a,n.isStopIncluded=f?h:h&&g||!q.equals(a,r)&&g,n.data=l(i)?i(e.data,t.data):e.data,n};Jo.contains=function(e,t){if(e.isEmpty)return!1;let n=q.compare(e.start,t);if(n===0)return e.isStartIncluded;let i=q.compare(t,e.stop);return i===0?e.isStopIncluded:n<0&&i<0};Jo.prototype.clone=function(e){return Jo.clone(this,e)};Jo.prototype.equals=function(e,t){return Jo.equals(this,e,t)};Jo.prototype.equalsEpsilon=function(e,t,n){return Jo.equalsEpsilon(this,e,t,n)};Jo.prototype.toString=function(){return Jo.toIso8601(this)};Jo.EMPTY=Object.freeze(new Jo({start:new q,stop:new q,isStartIncluded:!1,isStopIncluded:!1}));var Ln=Jo;var ine=Object.freeze(q.fromIso8601("0000-01-01T00:00:00Z")),one=Object.freeze(q.fromIso8601("9999-12-31T24:00:00Z")),tXe=Object.freeze(new Ln({start:ine,stop:one})),nXe={MINIMUM_VALUE:ine,MAXIMUM_VALUE:one,MAXIMUM_INTERVAL:tXe},Be=nXe;var _Yt=_(T(),1);function fE(e,t,n){e=e??0,t=t??0,n=n??0,this.value=new Float32Array([e,t,n])}Object.defineProperties(fE.prototype,{componentDatatype:{get:function(){return Q.FLOAT}},componentsPerAttribute:{get:function(){return 3}},normalize:{get:function(){return!1}}});fE.fromCartesian3=function(e){return new fE(e.x,e.y,e.z)};fE.toValue=function(e,t){return l(t)||(t=new Float32Array([e.x,e.y,e.z])),t[0]=e.x,t[1]=e.y,t[2]=e.z,t};var $i=fE;var VYt=_(T(),1);function e5(e){e=e??!0,this.value=e5.toValue(e)}Object.defineProperties(e5.prototype,{componentDatatype:{get:function(){return Q.UNSIGNED_BYTE}},componentsPerAttribute:{get:function(){return 1}},normalize:{get:function(){return!1}}});e5.toValue=function(e,t){return l(t)?(t[0]=e,t):new Uint8Array([e])};var xn=e5;var NHt=_(T(),1);var RYt=_(T(),1),pE=`in vec3 v_positionEC; in vec3 v_normalEC; in vec3 v_tangentEC; in vec3 v_bitangentEC; in vec2 v_st; void main() { vec3 positionToEyeEC = -v_positionEC; mat3 tangentToEyeMatrix = czm_tangentToEyeSpaceMatrix(v_normalEC, v_tangentEC, v_bitangentEC); vec3 normalEC = normalize(v_normalEC); #ifdef FACE_FORWARD normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC); #endif czm_materialInput materialInput; materialInput.normalEC = normalEC; materialInput.tangentToEyeMatrix = tangentToEyeMatrix; materialInput.positionToEyeEC = positionToEyeEC; materialInput.st = v_st; czm_material material = czm_getMaterial(materialInput); #ifdef FLAT out_FragColor = vec4(material.diffuse + material.emission, material.alpha); #else out_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC); #endif } `;var GYt=_(T(),1),bE=`in vec3 position3DHigh; in vec3 position3DLow; in vec3 normal; in vec3 tangent; in vec3 bitangent; in vec2 st; in float batchId; out vec3 v_positionEC; out vec3 v_normalEC; out vec3 v_tangentEC; out vec3 v_bitangentEC; out vec2 v_st; void main() { vec4 p = czm_computePosition(); v_positionEC = (czm_modelViewRelativeToEye * p).xyz; // position in eye coordinates v_normalEC = czm_normal * normal; // normal in eye coordinates v_tangentEC = czm_normal * tangent; // tangent in eye coordinates v_bitangentEC = czm_normal * bitangent; // bitangent in eye coordinates v_st = st; gl_Position = czm_modelViewProjectionRelativeToEye * p; } `;var IYt=_(T(),1),gE=`in vec3 v_positionEC; in vec3 v_normalEC; void main() { vec3 positionToEyeEC = -v_positionEC; vec3 normalEC = normalize(v_normalEC); #ifdef FACE_FORWARD normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC); #endif czm_materialInput materialInput; materialInput.normalEC = normalEC; materialInput.positionToEyeEC = positionToEyeEC; czm_material material = czm_getMaterial(materialInput); #ifdef FLAT out_FragColor = vec4(material.diffuse + material.emission, material.alpha); #else out_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC); #endif } `;var WYt=_(T(),1),yE=`in vec3 position3DHigh; in vec3 position3DLow; in vec3 normal; in float batchId; out vec3 v_positionEC; out vec3 v_normalEC; void main() { vec4 p = czm_computePosition(); v_positionEC = (czm_modelViewRelativeToEye * p).xyz; // position in eye coordinates v_normalEC = czm_normal * normal; // normal in eye coordinates gl_Position = czm_modelViewProjectionRelativeToEye * p; } `;var vYt=_(T(),1),xE=`in vec3 v_positionEC; in vec3 v_normalEC; in vec2 v_st; void main() { vec3 positionToEyeEC = -v_positionEC; vec3 normalEC = normalize(v_normalEC); #ifdef FACE_FORWARD normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC); #endif czm_materialInput materialInput; materialInput.normalEC = normalEC; materialInput.positionToEyeEC = positionToEyeEC; materialInput.st = v_st; czm_material material = czm_getMaterial(materialInput); #ifdef FLAT out_FragColor = vec4(material.diffuse + material.emission, material.alpha); #else out_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC); #endif } `;var FYt=_(T(),1),_E=`in vec3 position3DHigh; in vec3 position3DLow; in vec3 normal; in vec2 st; in float batchId; out vec3 v_positionEC; out vec3 v_normalEC; out vec2 v_st; void main() { vec4 p = czm_computePosition(); v_positionEC = (czm_modelViewRelativeToEye * p).xyz; // position in eye coordinates v_normalEC = czm_normal * normal; // normal in eye coordinates v_st = st; gl_Position = czm_modelViewProjectionRelativeToEye * p; } `;var izt=_(T(),1);var zYt=_(T(),1);var NYt=_(T(),1);var iXe={ADD:ie.FUNC_ADD,SUBTRACT:ie.FUNC_SUBTRACT,REVERSE_SUBTRACT:ie.FUNC_REVERSE_SUBTRACT,MIN:ie.MIN,MAX:ie.MAX},va=Object.freeze(iXe);var DYt=_(T(),1);var oXe={ZERO:ie.ZERO,ONE:ie.ONE,SOURCE_COLOR:ie.SRC_COLOR,ONE_MINUS_SOURCE_COLOR:ie.ONE_MINUS_SRC_COLOR,DESTINATION_COLOR:ie.DST_COLOR,ONE_MINUS_DESTINATION_COLOR:ie.ONE_MINUS_DST_COLOR,SOURCE_ALPHA:ie.SRC_ALPHA,ONE_MINUS_SOURCE_ALPHA:ie.ONE_MINUS_SRC_ALPHA,DESTINATION_ALPHA:ie.DST_ALPHA,ONE_MINUS_DESTINATION_ALPHA:ie.ONE_MINUS_DST_ALPHA,CONSTANT_COLOR:ie.CONSTANT_COLOR,ONE_MINUS_CONSTANT_COLOR:ie.ONE_MINUS_CONSTANT_COLOR,CONSTANT_ALPHA:ie.CONSTANT_ALPHA,ONE_MINUS_CONSTANT_ALPHA:ie.ONE_MINUS_CONSTANT_ALPHA,SOURCE_ALPHA_SATURATE:ie.SRC_ALPHA_SATURATE},Co=Object.freeze(oXe);var rXe={DISABLED:Object.freeze({enabled:!1}),ALPHA_BLEND:Object.freeze({enabled:!0,equationRgb:va.ADD,equationAlpha:va.ADD,functionSourceRgb:Co.SOURCE_ALPHA,functionSourceAlpha:Co.ONE,functionDestinationRgb:Co.ONE_MINUS_SOURCE_ALPHA,functionDestinationAlpha:Co.ONE_MINUS_SOURCE_ALPHA}),PRE_MULTIPLIED_ALPHA_BLEND:Object.freeze({enabled:!0,equationRgb:va.ADD,equationAlpha:va.ADD,functionSourceRgb:Co.ONE,functionSourceAlpha:Co.ONE,functionDestinationRgb:Co.ONE_MINUS_SOURCE_ALPHA,functionDestinationAlpha:Co.ONE_MINUS_SOURCE_ALPHA}),ADDITIVE_BLEND:Object.freeze({enabled:!0,equationRgb:va.ADD,equationAlpha:va.ADD,functionSourceRgb:Co.SOURCE_ALPHA,functionSourceAlpha:Co.ONE,functionDestinationRgb:Co.ONE,functionDestinationAlpha:Co.ONE})},un=Object.freeze(rXe);var JYt=_(T(),1);var sXe={FRONT:ie.FRONT,BACK:ie.BACK,FRONT_AND_BACK:ie.FRONT_AND_BACK},Ti=Object.freeze(sXe);function lC(e){e=e??Y.EMPTY_OBJECT,this.material=e.material,this.translucent=e.translucent??!0,this._vertexShaderSource=e.vertexShaderSource,this._fragmentShaderSource=e.fragmentShaderSource,this._renderState=e.renderState,this._closed=e.closed??!1}Object.defineProperties(lC.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}}});lC.prototype.getFragmentShaderSource=function(){let e=[];return this.flat&&e.push("#define FLAT"),this.faceForward&&e.push("#define FACE_FORWARD"),l(this.material)&&e.push(this.material.shaderSource),e.push(this.fragmentShaderSource),e.join(` `)};lC.prototype.isTranslucent=function(){return l(this.material)&&this.material.isTranslucent()||!l(this.material)&&this.translucent};lC.prototype.getRenderState=function(){let e=this.isTranslucent(),t=Ye(this.renderState,!1);return e?(t.depthMask=!1,t.blending=un.ALPHA_BLEND):t.depthMask=!0,t};lC.getDefaultRenderState=function(e,t,n){let i={depthTest:{enabled:!0}};return e&&(i.depthMask=!1,i.blending=un.ALPHA_BLEND),t&&(i.cull={enabled:!0,face:Ti.BACK}),l(n)&&(i=St(n,i,!0)),i};var no=lC;var RHt=_(T(),1);var rzt=_(T(),1),TE=`uniform sampler2D image; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); vec4 rampColor = texture(image, vec2(materialInput.aspect / (2.0 * czm_pi), 0.5)); rampColor = czm_gammaCorrect(rampColor); material.diffuse = rampColor.rgb; material.alpha = rampColor.a; return material; } `;var azt=_(T(),1),SE=`uniform sampler2D image; uniform float strength; uniform vec2 repeat; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); vec2 st = materialInput.st; vec2 centerPixel = fract(repeat * st); float centerBump = texture(image, centerPixel).channel; float imageWidth = float(imageDimensions.x); vec2 rightPixel = fract(repeat * (st + vec2(1.0 / imageWidth, 0.0))); float rightBump = texture(image, rightPixel).channel; float imageHeight = float(imageDimensions.y); vec2 leftPixel = fract(repeat * (st + vec2(0.0, 1.0 / imageHeight))); float topBump = texture(image, leftPixel).channel; vec3 normalTangentSpace = normalize(vec3(centerBump - rightBump, centerBump - topBump, clamp(1.0 - strength, 0.1, 1.0))); vec3 normalEC = materialInput.tangentToEyeMatrix * normalTangentSpace; material.normal = normalEC; material.diffuse = vec3(0.01); return material; } `;var lzt=_(T(),1),CE=`uniform vec4 lightColor; uniform vec4 darkColor; uniform vec2 repeat; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); vec2 st = materialInput.st; // From Stefan Gustavson's Procedural Textures in GLSL in OpenGL Insights float b = mod(floor(repeat.s * st.s) + floor(repeat.t * st.t), 2.0); // 0.0 or 1.0 // Find the distance from the closest separator (region between two colors) float scaledWidth = fract(repeat.s * st.s); scaledWidth = abs(scaledWidth - floor(scaledWidth + 0.5)); float scaledHeight = fract(repeat.t * st.t); scaledHeight = abs(scaledHeight - floor(scaledHeight + 0.5)); float value = min(scaledWidth, scaledHeight); vec4 currentColor = mix(lightColor, darkColor, b); vec4 color = czm_antialias(lightColor, darkColor, currentColor, value, 0.03); color = czm_gammaCorrect(color); material.diffuse = color.rgb; material.alpha = color.a; return material; } `;var uzt=_(T(),1),VE=`uniform vec4 lightColor; uniform vec4 darkColor; uniform vec2 repeat; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); // From Stefan Gustavson's Procedural Textures in GLSL in OpenGL Insights float b = smoothstep(0.3, 0.32, length(fract(repeat * materialInput.st) - 0.5)); // 0.0 or 1.0 vec4 color = mix(lightColor, darkColor, b); color = czm_gammaCorrect(color); material.diffuse = color.rgb; material.alpha = color.a; return material; } `;var hzt=_(T(),1),LE=`uniform sampler2D heights; uniform sampler2D colors; // This material expects heights to be sorted from lowest to highest. float getHeight(int idx, float invTexSize) { vec2 uv = vec2((float(idx) + 0.5) * invTexSize, 0.5); #ifdef OES_texture_float return texture(heights, uv).x; #else return czm_unpackFloat(texture(heights, uv)); #endif } czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); float height = materialInput.height; float invTexSize = 1.0 / float(heightsDimensions.x); float minHeight = getHeight(0, invTexSize); float maxHeight = getHeight(heightsDimensions.x - 1, invTexSize); // early-out when outside the height range if (height < minHeight || height > maxHeight) { material.diffuse = vec3(0.0); material.alpha = 0.0; return material; } // Binary search to find heights above and below. int idxBelow = 0; int idxAbove = heightsDimensions.x; float heightBelow = minHeight; float heightAbove = maxHeight; // while loop not allowed, so use for loop with max iterations. // maxIterations of 16 supports a texture size up to 65536 (2^16). const int maxIterations = 16; for (int i = 0; i < maxIterations; i++) { if (idxBelow >= idxAbove - 1) { break; } int idxMid = (idxBelow + idxAbove) / 2; float heightTex = getHeight(idxMid, invTexSize); if (height > heightTex) { idxBelow = idxMid; heightBelow = heightTex; } else { idxAbove = idxMid; heightAbove = heightTex; } } float lerper = heightBelow == heightAbove ? 1.0 : (height - heightBelow) / (heightAbove - heightBelow); vec2 colorUv = vec2(invTexSize * (float(idxBelow) + 0.5 + lerper), 0.5); vec4 color = texture(colors, colorUv); // undo preumultiplied alpha if (color.a > 0.0) { color.rgb /= color.a; } color.rgb = czm_gammaCorrect(color.rgb); material.diffuse = color.rgb; material.alpha = color.a; return material; } `;var pzt=_(T(),1),RE=`uniform vec4 color; uniform float spacing; uniform float width; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); float distanceToContour = mod(materialInput.height, spacing); #if (__VERSION__ == 300 || defined(GL_OES_standard_derivatives)) float dxc = abs(dFdx(materialInput.height)); float dyc = abs(dFdy(materialInput.height)); float dF = max(dxc, dyc) * czm_pixelRatio * width; float alpha = (distanceToContour < dF) ? 1.0 : 0.0; #else // If no derivatives available (IE 10?), use pixel ratio float alpha = (distanceToContour < (czm_pixelRatio * width)) ? 1.0 : 0.0; #endif vec4 outColor = czm_gammaCorrect(vec4(color.rgb, alpha * color.a)); material.diffuse = outColor.rgb; material.alpha = outColor.a; return material; } `;var gzt=_(T(),1),ZE=`uniform sampler2D image; uniform float minimumHeight; uniform float maximumHeight; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); float scaledHeight = clamp((materialInput.height - minimumHeight) / (maximumHeight - minimumHeight), 0.0, 1.0); vec4 rampColor = texture(image, vec2(scaledHeight, 0.5)); rampColor = czm_gammaCorrect(rampColor); material.diffuse = rampColor.rgb; material.alpha = rampColor.a; return material; } `;var xzt=_(T(),1),GE=`uniform vec4 fadeInColor; uniform vec4 fadeOutColor; uniform float maximumDistance; uniform bool repeat; uniform vec2 fadeDirection; uniform vec2 time; float getTime(float t, float coord) { float scalar = 1.0 / maximumDistance; float q = distance(t, coord) * scalar; if (repeat) { float r = distance(t, coord + 1.0) * scalar; float s = distance(t, coord - 1.0) * scalar; q = min(min(r, s), q); } return clamp(q, 0.0, 1.0); } czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); vec2 st = materialInput.st; float s = getTime(time.x, st.s) * fadeDirection.s; float t = getTime(time.y, st.t) * fadeDirection.t; float u = length(vec2(s, t)); vec4 color = mix(fadeInColor, fadeOutColor, u); color = czm_gammaCorrect(color); material.emission = color.rgb; material.alpha = color.a; return material; } `;var Tzt=_(T(),1),EE=`uniform vec4 color; uniform float cellAlpha; uniform vec2 lineCount; uniform vec2 lineThickness; uniform vec2 lineOffset; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); vec2 st = materialInput.st; float scaledWidth = fract(lineCount.s * st.s - lineOffset.s); scaledWidth = abs(scaledWidth - floor(scaledWidth + 0.5)); float scaledHeight = fract(lineCount.t * st.t - lineOffset.t); scaledHeight = abs(scaledHeight - floor(scaledHeight + 0.5)); float value; // Fuzz Factor - Controls blurriness of lines #if (__VERSION__ == 300 || defined(GL_OES_standard_derivatives)) const float fuzz = 1.2; vec2 thickness = (lineThickness * czm_pixelRatio) - 1.0; // From "3D Engine Design for Virtual Globes" by Cozzi and Ring, Listing 4.13. vec2 dx = abs(dFdx(st)); vec2 dy = abs(dFdy(st)); vec2 dF = vec2(max(dx.s, dy.s), max(dx.t, dy.t)) * lineCount; value = min( smoothstep(dF.s * thickness.s, dF.s * (fuzz + thickness.s), scaledWidth), smoothstep(dF.t * thickness.t, dF.t * (fuzz + thickness.t), scaledHeight)); #else // If no derivatives available (IE 10?), revert to view-dependent fuzz const float fuzz = 0.05; vec2 range = 0.5 - (lineThickness * 0.05); value = min( 1.0 - smoothstep(range.s, range.s + fuzz, scaledWidth), 1.0 - smoothstep(range.t, range.t + fuzz, scaledHeight)); #endif // Edges taken from RimLightingMaterial.glsl // See http://www.fundza.com/rman_shaders/surface/fake_rim/fake_rim1.html float dRim = 1.0 - abs(dot(materialInput.normalEC, normalize(materialInput.positionToEyeEC))); float sRim = smoothstep(0.8, 1.0, dRim); value *= (1.0 - sRim); vec4 halfColor; halfColor.rgb = color.rgb * 0.5; halfColor.a = color.a * (1.0 - ((1.0 - cellAlpha) * value)); halfColor = czm_gammaCorrect(halfColor); material.diffuse = halfColor.rgb; material.emission = halfColor.rgb; material.alpha = halfColor.a; return material; } `;var Czt=_(T(),1),IE=`uniform sampler2D image; uniform float strength; uniform vec2 repeat; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); vec4 textureValue = texture(image, fract(repeat * materialInput.st)); vec3 normalTangentSpace = textureValue.channels; normalTangentSpace.xy = normalTangentSpace.xy * 2.0 - 1.0; normalTangentSpace.z = clamp(1.0 - strength, 0.1, 1.0); normalTangentSpace = normalize(normalTangentSpace); vec3 normalEC = materialInput.tangentToEyeMatrix * normalTangentSpace; material.normal = normalEC; return material; } `;var Lzt=_(T(),1),XE=`uniform vec4 color; float getPointOnLine(vec2 p0, vec2 p1, float x) { float slope = (p0.y - p1.y) / (p0.x - p1.x); return slope * (x - p0.x) + p0.y; } czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); vec2 st = materialInput.st; #if (__VERSION__ == 300 || defined(GL_OES_standard_derivatives)) float base = 1.0 - abs(fwidth(st.s)) * 10.0 * czm_pixelRatio; #else // If no derivatives available (IE 10?), 2.5% of the line will be the arrow head float base = 0.975; #endif vec2 center = vec2(1.0, 0.5); float ptOnUpperLine = getPointOnLine(vec2(base, 1.0), center, st.s); float ptOnLowerLine = getPointOnLine(vec2(base, 0.0), center, st.s); float halfWidth = 0.15; float s = step(0.5 - halfWidth, st.t); s *= 1.0 - step(0.5 + halfWidth, st.t); s *= 1.0 - step(base, st.s); float t = step(base, materialInput.st.s); t *= 1.0 - step(ptOnUpperLine, st.t); t *= step(ptOnLowerLine, st.t); // Find the distance from the closest separator (region between two colors) float dist; if (st.s < base) { float d1 = abs(st.t - (0.5 - halfWidth)); float d2 = abs(st.t - (0.5 + halfWidth)); dist = min(d1, d2); } else { float d1 = czm_infinity; if (st.t < 0.5 - halfWidth && st.t > 0.5 + halfWidth) { d1 = abs(st.s - base); } float d2 = abs(st.t - ptOnUpperLine); float d3 = abs(st.t - ptOnLowerLine); dist = min(min(d1, d2), d3); } vec4 outsideColor = vec4(0.0); vec4 currentColor = mix(outsideColor, color, clamp(s + t, 0.0, 1.0)); vec4 outColor = czm_antialias(outsideColor, color, currentColor, dist); outColor = czm_gammaCorrect(outColor); material.diffuse = outColor.rgb; material.alpha = outColor.a; return material; } `;var Zzt=_(T(),1),WE=`uniform vec4 color; uniform vec4 gapColor; uniform float dashLength; uniform float dashPattern; in float v_polylineAngle; const float maskLength = 16.0; mat2 rotate(float rad) { float c = cos(rad); float s = sin(rad); return mat2( c, s, -s, c ); } czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); vec2 pos = rotate(v_polylineAngle) * gl_FragCoord.xy; // Get the relative position within the dash from 0 to 1 float dashPosition = fract(pos.x / (dashLength * czm_pixelRatio)); // Figure out the mask index. float maskIndex = floor(dashPosition * maskLength); // Test the bit mask. float maskTest = floor(dashPattern / pow(2.0, maskIndex)); vec4 fragColor = (mod(maskTest, 2.0) < 1.0) ? gapColor : color; if (fragColor.a < 0.005) { // matches 0/255 and 1/255 discard; } fragColor = czm_gammaCorrect(fragColor); material.emission = fragColor.rgb; material.alpha = fragColor.a; return material; } `;var Ezt=_(T(),1),PE=`uniform vec4 color; uniform float glowPower; uniform float taperPower; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); vec2 st = materialInput.st; float glow = glowPower / abs(st.t - 0.5) - (glowPower / 0.5); if (taperPower <= 0.99999) { glow *= min(1.0, taperPower / (0.5 - st.s * 0.5) - (taperPower / 0.5)); } vec4 fragColor; fragColor.rgb = max(vec3(glow - 1.0 + color.rgb), color.rgb); fragColor.a = clamp(0.0, 1.0, glow) * color.a; fragColor = czm_gammaCorrect(fragColor); material.emission = fragColor.rgb; material.alpha = fragColor.a; return material; } `;var Xzt=_(T(),1),vE=`uniform vec4 color; uniform vec4 outlineColor; uniform float outlineWidth; in float v_width; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); vec2 st = materialInput.st; float halfInteriorWidth = 0.5 * (v_width - outlineWidth) / v_width; float b = step(0.5 - halfInteriorWidth, st.t); b *= 1.0 - step(0.5 + halfInteriorWidth, st.t); // Find the distance from the closest separator (region between two colors) float d1 = abs(st.t - (0.5 - halfInteriorWidth)); float d2 = abs(st.t - (0.5 + halfInteriorWidth)); float dist = min(d1, d2); vec4 currentColor = mix(outlineColor, color, b); vec4 outColor = czm_antialias(outlineColor, color, currentColor, dist); outColor = czm_gammaCorrect(outColor); material.diffuse = outColor.rgb; material.alpha = outColor.a; return material; } `;var Pzt=_(T(),1),wE=`uniform vec4 color; uniform vec4 rimColor; uniform float width; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); // See http://www.fundza.com/rman_shaders/surface/fake_rim/fake_rim1.html float d = 1.0 - dot(materialInput.normalEC, normalize(materialInput.positionToEyeEC)); float s = smoothstep(1.0 - width, 1.0, d); vec4 outColor = czm_gammaCorrect(color); vec4 outRimColor = czm_gammaCorrect(rimColor); material.diffuse = outColor.rgb; material.emission = outRimColor.rgb * s; material.alpha = mix(outColor.a, outRimColor.a, s); return material; } `;var wzt=_(T(),1),FE=`uniform sampler2D image; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); vec4 rampColor = texture(image, vec2(materialInput.slope / (czm_pi / 2.0), 0.5)); rampColor = czm_gammaCorrect(rampColor); material.diffuse = rampColor.rgb; material.alpha = rampColor.a; return material; } `;var Azt=_(T(),1),AE=`uniform vec4 evenColor; uniform vec4 oddColor; uniform float offset; uniform float repeat; uniform bool horizontal; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); // Based on the Stripes Fragment Shader in the Orange Book (11.1.2) float coord = mix(materialInput.st.s, materialInput.st.t, float(horizontal)); float value = fract((coord - offset) * (repeat * 0.5)); float dist = min(value, min(abs(value - 0.5), 1.0 - value)); vec4 currentColor = mix(evenColor, oddColor, step(0.5, value)); vec4 color = czm_antialias(evenColor, oddColor, currentColor, dist); color = czm_gammaCorrect(color); material.diffuse = color.rgb; material.alpha = color.a; return material; } `;var Nzt=_(T(),1),ME=`uniform vec4 waterColor; uniform vec4 landColor; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); vec4 outColor = mix(landColor, waterColor, materialInput.waterMask); outColor = czm_gammaCorrect(outColor); material.diffuse = outColor.rgb; material.alpha = outColor.a; return material; } `;var Uzt=_(T(),1),NE=`// Thanks for the contribution Jonas // http://29a.ch/2012/7/19/webgl-terrain-rendering-water-fog uniform sampler2D specularMap; uniform sampler2D normalMap; uniform vec4 baseWaterColor; uniform vec4 blendColor; uniform float frequency; uniform float animationSpeed; uniform float amplitude; uniform float specularIntensity; uniform float fadeFactor; czm_material czm_getMaterial(czm_materialInput materialInput) { czm_material material = czm_getDefaultMaterial(materialInput); float time = czm_frameNumber * animationSpeed; // fade is a function of the distance from the fragment and the frequency of the waves float fade = max(1.0, (length(materialInput.positionToEyeEC) / 10000000000.0) * frequency * fadeFactor); float specularMapValue = texture(specularMap, materialInput.st).r; // note: not using directional motion at this time, just set the angle to 0.0; vec4 noise = czm_getWaterNoise(normalMap, materialInput.st * frequency, time, 0.0); vec3 normalTangentSpace = noise.xyz * vec3(1.0, 1.0, (1.0 / amplitude)); // fade out the normal perturbation as we move further from the water surface normalTangentSpace.xy /= fade; // attempt to fade out the normal perturbation as we approach non water areas (low specular map value) normalTangentSpace = mix(vec3(0.0, 0.0, 50.0), normalTangentSpace, specularMapValue); normalTangentSpace = normalize(normalTangentSpace); // get ratios for alignment of the new normal vector with a vector perpendicular to the tangent plane float tsPerturbationRatio = clamp(dot(normalTangentSpace, vec3(0.0, 0.0, 1.0)), 0.0, 1.0); // fade out water effect as specular map value decreases material.alpha = mix(blendColor.a, baseWaterColor.a, specularMapValue) * specularMapValue; // base color is a blend of the water and non-water color based on the value from the specular map // may need a uniform blend factor to better control this material.diffuse = mix(blendColor.rgb, baseWaterColor.rgb, specularMapValue); // diffuse highlights are based on how perturbed the normal is material.diffuse += (0.1 * tsPerturbationRatio); material.diffuse = material.diffuse; material.normal = normalize(materialInput.tangentToEyeMatrix * normalTangentSpace); material.specular = specularIntensity; material.shininess = 10.0; return material; } `;function ze(e){this.type=void 0,this.shaderSource=void 0,this.materials=void 0,this.uniforms=void 0,this._uniforms=void 0,this.translucent=void 0,this._minificationFilter=e.minificationFilter??jt.LINEAR,this._magnificationFilter=e.magnificationFilter??hi.LINEAR,this._strict=void 0,this._template=void 0,this._count=void 0,this._texturePaths={},this._loadedImages=[],this._loadedCubeMaps=[],this._textures={},this._updateFunctions=[],this._defaultTexture=void 0,aXe(e,this),Object.defineProperties(this,{type:{value:this.type,writable:!1}}),l(ze._uniformList[this.type])||(ze._uniformList[this.type]=Object.keys(this._uniforms))}ze._uniformList={};ze.fromType=function(e,t){let n=new ze({fabric:{type:e}});if(l(t))for(let i in t)t.hasOwnProperty(i)&&(n.uniforms[i]=t[i]);return n};ze.prototype.isTranslucent=function(){if(l(this.translucent))return typeof this.translucent=="function"?this.translucent():this.translucent;let e=!0,t=this._translucentFunctions,n=t.length;for(let i=0;i<n;++i){let o=t[i];if(typeof o=="function"?e=e&&o():e=e&&o,!e)break}return e};ze.prototype.update=function(e){this._defaultTexture=e.defaultTexture;let t,n,i=this._loadedImages,o=i.length;for(t=0;t<o;++t){let c=i[t];n=c.id;let d=c.image,u;Array.isArray(d)&&(u=d.slice(1,d.length).map(function(y){return y.bufferView}),d=d[0]);let h=new qt({minificationFilter:this._minificationFilter,magnificationFilter:this._magnificationFilter}),p;l(d.internalFormat)?p=new vt({context:e,pixelFormat:d.internalFormat,width:d.width,height:d.height,source:{arrayBufferView:d.bufferView,mipLevels:u},sampler:h}):p=new vt({context:e,source:d,sampler:h});let g=this._textures[n];l(g)&&g!==this._defaultTexture&&g.destroy(),this._textures[n]=p;let f=`${n}Dimensions`;if(this.uniforms.hasOwnProperty(f)){let y=this.uniforms[f];y.x=p._width,y.y=p._height}}i.length=0;let r=this._loadedCubeMaps;for(o=r.length,t=0;t<o;++t){let c=r[t];n=c.id;let d=c.images,u=new xr({context:e,source:{positiveX:d[0],negativeX:d[1],positiveY:d[2],negativeY:d[3],positiveZ:d[4],negativeZ:d[5]},sampler:new qt({minificationFilter:this._minificationFilter,magnificationFilter:this._magnificationFilter})});this._textures[n]=u}r.length=0;let s=this._updateFunctions;for(o=s.length,t=0;t<o;++t)s[t](this,e);let a=this.materials;for(let c in a)a.hasOwnProperty(c)&&a[c].update(e)};ze.prototype.isDestroyed=function(){return!1};ze.prototype.destroy=function(){let e=this._textures;for(let n in e)if(e.hasOwnProperty(n)){let i=e[n];i!==this._defaultTexture&&i.destroy()}let t=this.materials;for(let n in t)t.hasOwnProperty(n)&&t[n].destroy();return me(this)};function aXe(e,t){e=e??Y.EMPTY_OBJECT,t._strict=e.strict??!1,t._count=e.count??0,t._template=Ye(e.fabric??Y.EMPTY_OBJECT),t._template.uniforms=Ye(t._template.uniforms??Y.EMPTY_OBJECT),t._template.materials=Ye(t._template.materials??Y.EMPTY_OBJECT),t.type=l(t._template.type)?t._template.type:zn(),t.shaderSource="",t.materials={},t.uniforms={},t._uniforms={},t._translucentFunctions=[];let n,i=ze._materialCache.getMaterial(t.type);if(l(i)){let r=Ye(i.fabric,!0);t._template=St(t._template,r,!0),n=i.translucent}uXe(t),l(i)||ze._materialCache.addMaterial(t.type,t),hXe(t),gXe(t),xXe(t);let o=t._translucentFunctions.length===0?!0:void 0;if(n=n??o,n=e.translucent??n,l(n))if(typeof n=="function"){let r=function(){return n(t)};t._translucentFunctions.push(r)}else t._translucentFunctions.push(n)}function IY(e,t,n,i){if(l(e)){for(let o in e)if(e.hasOwnProperty(o)){let r=t.indexOf(o)!==-1;(i&&!r||!i&&r)&&n(o,t)}}}function rne(e,t){}function cXe(e,t){}var lXe=["type","materials","uniforms","components","source"],dXe=["diffuse","specular","shininess","normal","emission","alpha"];function uXe(e){let t=e._template,n=t.uniforms,i=t.materials,o=t.components;IY(t,lXe,rne,!0),IY(o,dXe,rne,!0);let r=[];for(let s in i)i.hasOwnProperty(s)&&r.push(s);IY(n,r,cXe,!1)}function mXe(e,t){let n=t._template.materials;for(let i in n)if(n.hasOwnProperty(i)&&e.indexOf(i)>-1)return!0;return!1}function hXe(e){let t=e._template.components,n=e._template.source;if(l(n))e.shaderSource+=`${n} `;else{if(e.shaderSource+=`czm_material czm_getMaterial(czm_materialInput materialInput) { `,e.shaderSource+=`czm_material material = czm_getDefaultMaterial(materialInput); `,l(t)){let i=Object.keys(e._template.materials).length>0;for(let o in t)if(t.hasOwnProperty(o))if(o==="diffuse"||o==="emission"){let s=i&&mXe(t[o],e)?t[o]:`czm_gammaCorrect(${t[o]})`;e.shaderSource+=`material.${o} = ${s}; `}else o==="alpha"?e.shaderSource+=`material.alpha = ${t.alpha}; `:e.shaderSource+=`material.${o} = ${t[o]}; `}e.shaderSource+=`return material; } `}}var sne={mat2:Ii,mat3:$,mat4:F},fXe=/\.ktx2$/i;function pXe(e){let t;return function(n,i){let o=n.uniforms,r=o[e],s=t!==r,a=!l(r)||r===ze.DefaultImageId;t=r;let c=n._textures[e],d,u;if(r instanceof HTMLVideoElement){if(r.readyState>=2){if(s&&l(c)&&(c!==i.defaultTexture&&c.destroy(),c=void 0),!l(c)||c===i.defaultTexture){let p=new qt({minificationFilter:n._minificationFilter,magnificationFilter:n._magnificationFilter});c=new vt({context:i,source:r,sampler:p}),n._textures[e]=c;return}c.copyFrom({source:r})}else l(c)||(n._textures[e]=i.defaultTexture);return}if(r instanceof vt&&r!==c){n._texturePaths[e]=void 0;let p=n._textures[e];l(p)&&p!==n._defaultTexture&&p.destroy(),n._textures[e]=r,d=`${e}Dimensions`,o.hasOwnProperty(d)&&(u=o[d],u.x=r._width,u.y=r._height);return}if(s&&l(c)&&a&&(c!==n._defaultTexture&&c.destroy(),c=void 0),l(c)||(n._texturePaths[e]=void 0,c=n._textures[e]=n._defaultTexture,d=`${e}Dimensions`,o.hasOwnProperty(d)&&(u=o[d],u.x=c._width,u.y=c._height)),a)return;let h=r instanceof Ze;if(!l(n._texturePaths[e])||h&&r.url!==n._texturePaths[e].url||!h&&r!==n._texturePaths[e]){if(typeof r=="string"||h){let p=h?r:Ze.createIfNeeded(r),g;fXe.test(p.url)?g=Zl(p.url):g=p.fetchImage(),Promise.resolve(g).then(function(f){n._loadedImages.push({id:e,image:f})}).catch(function(){l(c)&&c!==n._defaultTexture&&c.destroy(),n._textures[e]=n._defaultTexture})}else(r instanceof HTMLCanvasElement||r instanceof HTMLImageElement)&&n._loadedImages.push({id:e,image:r});n._texturePaths[e]=r}}}function bXe(e){return function(t,n){let i=t.uniforms[e];if(i instanceof xr){let r=t._textures[e];r!==t._defaultTexture&&r.destroy(),t._texturePaths[e]=void 0,t._textures[e]=i;return}if(l(t._textures[e])||(t._texturePaths[e]=void 0,t._textures[e]=n.defaultCubeMap),i===ze.DefaultCubeMapId)return;let o=i.positiveX+i.negativeX+i.positiveY+i.negativeY+i.positiveZ+i.negativeZ;if(o!==t._texturePaths[e]){let r=[Ze.createIfNeeded(i.positiveX).fetchImage(),Ze.createIfNeeded(i.negativeX).fetchImage(),Ze.createIfNeeded(i.positiveY).fetchImage(),Ze.createIfNeeded(i.negativeY).fetchImage(),Ze.createIfNeeded(i.positiveZ).fetchImage(),Ze.createIfNeeded(i.negativeZ).fetchImage()];Promise.all(r).then(function(s){t._loadedCubeMaps.push({id:e,images:s})}),t._texturePaths[e]=o}}}function gXe(e){let t=e._template.uniforms;for(let n in t)t.hasOwnProperty(n)&&ane(e,n)}function ane(e,t){let n=e._strict,i=e._template.uniforms,o=i[t],r=yXe(o),s;if(r==="channels")s=kE(e,t,o,!1);else{if(r==="sampler2D"){let d=`${t}Dimensions`;_Xe(e,d)>0&&(i[d]={type:"ivec3",x:1,y:1},ane(e,d))}if(!new RegExp(`uniform\\s+${r}\\s+${t}\\s*;`).test(e.shaderSource)){let d=`uniform ${r} ${t};`;e.shaderSource=d+e.shaderSource}let c=`${t}_${e._count++}`;if(s=kE(e,t,c),e.uniforms[t]=o,r==="sampler2D")e._uniforms[c]=function(){return e._textures[t]},e._updateFunctions.push(pXe(t));else if(r==="samplerCube")e._uniforms[c]=function(){return e._textures[t]},e._updateFunctions.push(bXe(t));else if(r.indexOf("mat")!==-1){let d=new sne[r];e._uniforms[c]=function(){return sne[r].fromColumnMajorArray(e.uniforms[t],d)}}else e._uniforms[c]=function(){return e.uniforms[t]}}}function yXe(e){let t=e.type;if(!l(t)){let n=typeof e;if(n==="number")t="float";else if(n==="boolean")t="bool";else if(n==="string"||e instanceof Ze||e instanceof HTMLCanvasElement||e instanceof HTMLImageElement)/^([rgba]){1,4}$/i.test(e)?t="channels":e===ze.DefaultCubeMapId?t="samplerCube":t="sampler2D";else if(n==="object")if(Array.isArray(e))(e.length===4||e.length===9||e.length===16)&&(t=`mat${Math.sqrt(e.length)}`);else{let i=0;for(let o in e)e.hasOwnProperty(o)&&(i+=1);i>=2&&i<=4?t=`vec${i}`:i===6&&(t="samplerCube")}}return t}function xXe(e){let t=e._strict,n=e._template.materials;for(let i in n)if(n.hasOwnProperty(i)){let o=new ze({strict:t,fabric:n[i],count:e._count});e._count=o._count,e._uniforms=St(e._uniforms,o._uniforms,!0),e.materials[i]=o,e._translucentFunctions=e._translucentFunctions.concat(o._translucentFunctions);let r="czm_getMaterial",s=`${r}_${e._count++}`;kE(o,r,s),e.shaderSource=o.shaderSource+e.shaderSource;let a=`${s}(materialInput)`,c=kE(e,i,a)}}function kE(e,t,n,i){i=i??!0;let o=0,r="([\\w])?",s=`([\\w${i?".":""}])?`,a=new RegExp(s+t+r,"g");return e.shaderSource=e.shaderSource.replace(a,function(c,d,u){return d||u?c:(o+=1,n)}),o}function _Xe(e,t,n){return kE(e,t,t,n)}ze._materialCache={_materials:{},addMaterial:function(e,t){this._materials[e]=t},getMaterial:function(e){return this._materials[e]}};ze.DefaultImageId="czm_defaultImage";ze.DefaultCubeMapId="czm_defaultCubeMap";ze.ColorType="Color";ze._materialCache.addMaterial(ze.ColorType,{fabric:{type:ze.ColorType,uniforms:{color:new D(1,0,0,.5)},components:{diffuse:"color.rgb",alpha:"color.a"}},translucent:function(e){return e.uniforms.color.alpha<1}});ze.ImageType="Image";ze._materialCache.addMaterial(ze.ImageType,{fabric:{type:ze.ImageType,uniforms:{image:ze.DefaultImageId,repeat:new U(1,1),color:new D(1,1,1,1)},components:{diffuse:"texture(image, fract(repeat * materialInput.st)).rgb * color.rgb",alpha:"texture(image, fract(repeat * materialInput.st)).a * color.a"}},translucent:function(e){return e.uniforms.color.alpha<1}});ze.DiffuseMapType="DiffuseMap";ze._materialCache.addMaterial(ze.DiffuseMapType,{fabric:{type:ze.DiffuseMapType,uniforms:{image:ze.DefaultImageId,channels:"rgb",repeat:new U(1,1)},components:{diffuse:"texture(image, fract(repeat * materialInput.st)).channels"}},translucent:!1});ze.AlphaMapType="AlphaMap";ze._materialCache.addMaterial(ze.AlphaMapType,{fabric:{type:ze.AlphaMapType,uniforms:{image:ze.DefaultImageId,channel:"a",repeat:new U(1,1)},components:{alpha:"texture(image, fract(repeat * materialInput.st)).channel"}},translucent:!0});ze.SpecularMapType="SpecularMap";ze._materialCache.addMaterial(ze.SpecularMapType,{fabric:{type:ze.SpecularMapType,uniforms:{image:ze.DefaultImageId,channel:"r",repeat:new U(1,1)},components:{specular:"texture(image, fract(repeat * materialInput.st)).channel"}},translucent:!1});ze.EmissionMapType="EmissionMap";ze._materialCache.addMaterial(ze.EmissionMapType,{fabric:{type:ze.EmissionMapType,uniforms:{image:ze.DefaultImageId,channels:"rgb",repeat:new U(1,1)},components:{emission:"texture(image, fract(repeat * materialInput.st)).channels"}},translucent:!1});ze.BumpMapType="BumpMap";ze._materialCache.addMaterial(ze.BumpMapType,{fabric:{type:ze.BumpMapType,uniforms:{image:ze.DefaultImageId,channel:"r",strength:.8,repeat:new U(1,1)},source:SE},translucent:!1});ze.NormalMapType="NormalMap";ze._materialCache.addMaterial(ze.NormalMapType,{fabric:{type:ze.NormalMapType,uniforms:{image:ze.DefaultImageId,channels:"rgb",strength:.8,repeat:new U(1,1)},source:IE},translucent:!1});ze.GridType="Grid";ze._materialCache.addMaterial(ze.GridType,{fabric:{type:ze.GridType,uniforms:{color:new D(0,1,0,1),cellAlpha:.1,lineCount:new U(8,8),lineThickness:new U(1,1),lineOffset:new U(0,0)},source:EE},translucent:function(e){let t=e.uniforms;return t.color.alpha<1||t.cellAlpha<1}});ze.StripeType="Stripe";ze._materialCache.addMaterial(ze.StripeType,{fabric:{type:ze.StripeType,uniforms:{horizontal:!0,evenColor:new D(1,1,1,.5),oddColor:new D(0,0,1,.5),offset:0,repeat:5},source:AE},translucent:function(e){let t=e.uniforms;return t.evenColor.alpha<1||t.oddColor.alpha<1}});ze.CheckerboardType="Checkerboard";ze._materialCache.addMaterial(ze.CheckerboardType,{fabric:{type:ze.CheckerboardType,uniforms:{lightColor:new D(1,1,1,.5),darkColor:new D(0,0,0,.5),repeat:new U(5,5)},source:CE},translucent:function(e){let t=e.uniforms;return t.lightColor.alpha<1||t.darkColor.alpha<1}});ze.DotType="Dot";ze._materialCache.addMaterial(ze.DotType,{fabric:{type:ze.DotType,uniforms:{lightColor:new D(1,1,0,.75),darkColor:new D(0,1,1,.75),repeat:new U(5,5)},source:VE},translucent:function(e){let t=e.uniforms;return t.lightColor.alpha<1||t.darkColor.alpha<1}});ze.WaterType="Water";ze._materialCache.addMaterial(ze.WaterType,{fabric:{type:ze.WaterType,uniforms:{baseWaterColor:new D(.2,.3,.6,1),blendColor:new D(0,1,.699,1),specularMap:ze.DefaultImageId,normalMap:ze.DefaultImageId,frequency:10,animationSpeed:.01,amplitude:1,specularIntensity:.5,fadeFactor:1},source:NE},translucent:function(e){let t=e.uniforms;return t.baseWaterColor.alpha<1||t.blendColor.alpha<1}});ze.RimLightingType="RimLighting";ze._materialCache.addMaterial(ze.RimLightingType,{fabric:{type:ze.RimLightingType,uniforms:{color:new D(1,0,0,.7),rimColor:new D(1,1,1,.4),width:.3},source:wE},translucent:function(e){let t=e.uniforms;return t.color.alpha<1||t.rimColor.alpha<1}});ze.FadeType="Fade";ze._materialCache.addMaterial(ze.FadeType,{fabric:{type:ze.FadeType,uniforms:{fadeInColor:new D(1,0,0,1),fadeOutColor:new D(0,0,0,0),maximumDistance:.5,repeat:!0,fadeDirection:{x:!0,y:!0},time:new U(.5,.5)},source:GE},translucent:function(e){let t=e.uniforms;return t.fadeInColor.alpha<1||t.fadeOutColor.alpha<1}});ze.PolylineArrowType="PolylineArrow";ze._materialCache.addMaterial(ze.PolylineArrowType,{fabric:{type:ze.PolylineArrowType,uniforms:{color:new D(1,1,1,1)},source:XE},translucent:!0});ze.PolylineDashType="PolylineDash";ze._materialCache.addMaterial(ze.PolylineDashType,{fabric:{type:ze.PolylineDashType,uniforms:{color:new D(1,0,1,1),gapColor:new D(0,0,0,0),dashLength:16,dashPattern:255},source:WE},translucent:!0});ze.PolylineGlowType="PolylineGlow";ze._materialCache.addMaterial(ze.PolylineGlowType,{fabric:{type:ze.PolylineGlowType,uniforms:{color:new D(0,.5,1,1),glowPower:.25,taperPower:1},source:PE},translucent:!0});ze.PolylineOutlineType="PolylineOutline";ze._materialCache.addMaterial(ze.PolylineOutlineType,{fabric:{type:ze.PolylineOutlineType,uniforms:{color:new D(1,1,1,1),outlineColor:new D(1,0,0,1),outlineWidth:1},source:vE},translucent:function(e){let t=e.uniforms;return t.color.alpha<1||t.outlineColor.alpha<1}});ze.ElevationContourType="ElevationContour";ze._materialCache.addMaterial(ze.ElevationContourType,{fabric:{type:ze.ElevationContourType,uniforms:{spacing:100,color:new D(1,0,0,1),width:1},source:RE},translucent:!1});ze.ElevationRampType="ElevationRamp";ze._materialCache.addMaterial(ze.ElevationRampType,{fabric:{type:ze.ElevationRampType,uniforms:{image:ze.DefaultImageId,minimumHeight:0,maximumHeight:1e4},source:ZE},translucent:!1});ze.SlopeRampMaterialType="SlopeRamp";ze._materialCache.addMaterial(ze.SlopeRampMaterialType,{fabric:{type:ze.SlopeRampMaterialType,uniforms:{image:ze.DefaultImageId},source:FE},translucent:!1});ze.AspectRampMaterialType="AspectRamp";ze._materialCache.addMaterial(ze.AspectRampMaterialType,{fabric:{type:ze.AspectRampMaterialType,uniforms:{image:ze.DefaultImageId},source:TE},translucent:!1});ze.ElevationBandType="ElevationBand";ze._materialCache.addMaterial(ze.ElevationBandType,{fabric:{type:ze.ElevationBandType,uniforms:{heights:ze.DefaultImageId,colors:ze.DefaultImageId},source:LE},translucent:!0});ze.WaterMaskType="WaterMask";ze._materialCache.addMaterial(ze.WaterMaskType,{fabric:{type:ze.WaterMaskType,source:ME,uniforms:{waterColor:new D(1,1,1,1),landColor:new D(0,0,0,0)}},translucent:!1});var zi=ze;function Zx(e){e=e??Y.EMPTY_OBJECT;let t=e.translucent??!0,n=e.closed??!1,i=e.materialSupport??Zx.MaterialSupport.TEXTURED;this.material=l(e.material)?e.material:zi.fromType(zi.ColorType),this.translucent=t,this._vertexShaderSource=e.vertexShaderSource??i.vertexShaderSource,this._fragmentShaderSource=e.fragmentShaderSource??i.fragmentShaderSource,this._renderState=no.getDefaultRenderState(t,n,e.renderState),this._closed=n,this._materialSupport=i,this._vertexFormat=i.vertexFormat,this._flat=e.flat??!1,this._faceForward=e.faceForward??!n}Object.defineProperties(Zx.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}},materialSupport:{get:function(){return this._materialSupport}},vertexFormat:{get:function(){return this._vertexFormat}},flat:{get:function(){return this._flat}},faceForward:{get:function(){return this._faceForward}}});Zx.prototype.getFragmentShaderSource=no.prototype.getFragmentShaderSource;Zx.prototype.isTranslucent=no.prototype.isTranslucent;Zx.prototype.getRenderState=no.prototype.getRenderState;Zx.MaterialSupport={BASIC:Object.freeze({vertexFormat:Xe.POSITION_AND_NORMAL,vertexShaderSource:yE,fragmentShaderSource:gE}),TEXTURED:Object.freeze({vertexFormat:Xe.POSITION_NORMAL_AND_ST,vertexShaderSource:_E,fragmentShaderSource:xE}),ALL:Object.freeze({vertexFormat:Xe.ALL,vertexShaderSource:bE,fragmentShaderSource:pE})};var ao=Zx;var nKt=_(T(),1);var UHt=_(T(),1),UE=`in vec3 v_positionEC; in vec3 v_normalEC; in vec4 v_color; void main() { vec3 positionToEyeEC = -v_positionEC; vec3 normalEC = normalize(v_normalEC); #ifdef FACE_FORWARD normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC); #endif vec4 color = czm_gammaCorrect(v_color); czm_materialInput materialInput; materialInput.normalEC = normalEC; materialInput.positionToEyeEC = positionToEyeEC; czm_material material = czm_getDefaultMaterial(materialInput); material.diffuse = color.rgb; material.alpha = color.a; out_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC); } `;var BHt=_(T(),1),DE=`in vec3 position3DHigh; in vec3 position3DLow; in vec3 normal; in vec4 color; in float batchId; out vec3 v_positionEC; out vec3 v_normalEC; out vec4 v_color; void main() { vec4 p = czm_computePosition(); v_positionEC = (czm_modelViewRelativeToEye * p).xyz; // position in eye coordinates v_normalEC = czm_normal * normal; // normal in eye coordinates v_color = color; gl_Position = czm_modelViewProjectionRelativeToEye * p; } `;var YHt=_(T(),1),Gx=`in vec4 v_color; void main() { out_FragColor = czm_gammaCorrect(v_color); } `;var HHt=_(T(),1),BE=`in vec3 position3DHigh; in vec3 position3DLow; in vec4 color; in float batchId; out vec4 v_color; void main() { vec4 p = czm_computePosition(); v_color = color; gl_Position = czm_modelViewProjectionRelativeToEye * p; } `;function Wp(e){e=e??Y.EMPTY_OBJECT;let t=e.translucent??!0,n=e.closed??!1,i=e.flat??!1,o=i?BE:DE,r=i?Gx:UE,s=i?Wp.FLAT_VERTEX_FORMAT:Wp.VERTEX_FORMAT;this.material=void 0,this.translucent=t,this._vertexShaderSource=e.vertexShaderSource??o,this._fragmentShaderSource=e.fragmentShaderSource??r,this._renderState=no.getDefaultRenderState(t,n,e.renderState),this._closed=n,this._vertexFormat=s,this._flat=i,this._faceForward=e.faceForward??!n}Object.defineProperties(Wp.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}},vertexFormat:{get:function(){return this._vertexFormat}},flat:{get:function(){return this._flat}},faceForward:{get:function(){return this._faceForward}}});Wp.VERTEX_FORMAT=Xe.POSITION_AND_NORMAL;Wp.FLAT_VERTEX_FORMAT=Xe.POSITION_ONLY;Wp.prototype.getFragmentShaderSource=no.prototype.getFragmentShaderSource;Wp.prototype.isTranslucent=no.prototype.isTranslucent;Wp.prototype.getRenderState=no.prototype.getRenderState;var dn=Wp;var dKt=_(T(),1);function dC(e){this._definitionChanged=new be,this._color=void 0,this._colorSubscription=void 0,this.color=e}Object.defineProperties(dC.prototype,{isConstant:{get:function(){return J.isConstant(this._color)}},definitionChanged:{get:function(){return this._definitionChanged}},color:ue("color")});dC.prototype.getType=function(e){return"Color"};var TXe=new q;dC.prototype.getValue=function(e,t){return l(e)||(e=q.now(TXe)),l(t)||(t={}),t.color=J.getValueOrClonedDefault(this._color,e,D.WHITE,t.color),t};dC.prototype.equals=function(e){return this===e||e instanceof dC&&J.equals(this._color,e._color)};var Dt=dC;var Djt=_(T(),1);var Tjt=_(T(),1);var XKt=_(T(),1);var xKt=_(T(),1);function H0(e){e=e??Y.EMPTY_OBJECT,this._ellipsoid=e.ellipsoid??ne.default,this._rectangle=e.rectangle??ce.MAX_VALUE,this._projection=new Ei(this._ellipsoid),this._numberOfLevelZeroTilesX=e.numberOfLevelZeroTilesX??2,this._numberOfLevelZeroTilesY=e.numberOfLevelZeroTilesY??1}Object.defineProperties(H0.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},rectangle:{get:function(){return this._rectangle}},projection:{get:function(){return this._projection}}});H0.prototype.getNumberOfXTilesAtLevel=function(e){return this._numberOfLevelZeroTilesX<<e};H0.prototype.getNumberOfYTilesAtLevel=function(e){return this._numberOfLevelZeroTilesY<<e};H0.prototype.rectangleToNativeRectangle=function(e,t){let n=X.toDegrees(e.west),i=X.toDegrees(e.south),o=X.toDegrees(e.east),r=X.toDegrees(e.north);return l(t)?(t.west=n,t.south=i,t.east=o,t.north=r,t):new ce(n,i,o,r)};H0.prototype.tileXYToNativeRectangle=function(e,t,n,i){let o=this.tileXYToRectangle(e,t,n,i);return o.west=X.toDegrees(o.west),o.south=X.toDegrees(o.south),o.east=X.toDegrees(o.east),o.north=X.toDegrees(o.north),o};H0.prototype.tileXYToRectangle=function(e,t,n,i){let o=this._rectangle,r=this.getNumberOfXTilesAtLevel(n),s=this.getNumberOfYTilesAtLevel(n),a=o.width/r,c=e*a+o.west,d=(e+1)*a+o.west,u=o.height/s,h=o.north-t*u,p=o.north-(t+1)*u;return l(i)||(i=new ce(c,p,d,h)),i.west=c,i.south=p,i.east=d,i.north=h,i};H0.prototype.positionToTileXY=function(e,t,n){let i=this._rectangle;if(!ce.contains(i,e))return;let o=this.getNumberOfXTilesAtLevel(t),r=this.getNumberOfYTilesAtLevel(t),s=i.width/o,a=i.height/r,c=e.longitude;i.east<i.west&&(c+=X.TWO_PI);let d=(c-i.west)/s|0;d>=o&&(d=o-1);let u=(i.north-e.latitude)/a|0;return u>=r&&(u=r-1),l(n)?(n.x=d,n.y=u,n):new U(d,u)};var Hi=H0;var cne=new m,lne=new m,dne=new he,XY=new m,SXe=new m,une=new le,CXe=new Hi,OE=[new he,new he,new he,new he],YE=new U,Jr={};Jr.initialize=function(){let e=Jr._initPromise;return l(e)||(e=Ze.fetchJson(nn("Assets/approximateTerrainHeights.json")).then(function(t){Jr._terrainHeights=t}),Jr._initPromise=e),e};Jr.getMinimumMaximumHeights=function(e,t){t=t??ne.default;let n=mne(e),i=Jr._defaultMinTerrainHeight,o=Jr._defaultMaxTerrainHeight;if(l(n)){let r=`${n.level}-${n.x}-${n.y}`,s=Jr._terrainHeights[r];l(s)&&(i=s[0],o=s[1]),t.cartographicToCartesian(ce.northeast(e,dne),cne),t.cartographicToCartesian(ce.southwest(e,dne),lne),m.midpoint(lne,cne,XY);let a=t.scaleToGeodeticSurface(XY,SXe);if(l(a)){let c=m.distance(XY,a);i=Math.min(i,-c)}else i=Jr._defaultMinTerrainHeight}return i=Math.max(Jr._defaultMinTerrainHeight,i),{minimumTerrainHeight:i,maximumTerrainHeight:o}};Jr.getBoundingSphere=function(e,t){t=t??ne.default;let n=mne(e),i=Jr._defaultMaxTerrainHeight;if(l(n)){let r=`${n.level}-${n.x}-${n.y}`,s=Jr._terrainHeights[r];l(s)&&(i=s[1])}let o=le.fromRectangle3D(e,t,0);return le.fromRectangle3D(e,t,i,une),le.union(o,une,o)};function mne(e){he.fromRadians(e.east,e.north,0,OE[0]),he.fromRadians(e.west,e.north,0,OE[1]),he.fromRadians(e.east,e.south,0,OE[2]),he.fromRadians(e.west,e.south,0,OE[3]);let t=0,n=0,i=0,o=0,r=Jr._terrainHeightsMaxLevel,s;for(s=0;s<=r;++s){let a=!1;for(let c=0;c<4;++c){let d=OE[c];if(CXe.positionToTileXY(d,s,YE),c===0)i=YE.x,o=YE.y;else if(i!==YE.x||o!==YE.y){a=!0;break}}if(a)break;t=i,n=o}if(s!==0)return{x:t,y:n,level:s>r?r:s-1}}Jr._terrainHeightsMaxLevel=6;Jr._defaultMaxTerrainHeight=9e3;Jr._defaultMinTerrainHeight=-1e5;Jr._terrainHeights=void 0;Jr._initPromise=void 0;Object.defineProperties(Jr,{initialized:{get:function(){return l(Jr._terrainHeights)}}});var di=Jr;var uJt=_(T(),1);var JKt=_(T(),1);var FKt=_(T(),1);function Uc(e,t,n){this.minimum=m.clone(e??m.ZERO),this.maximum=m.clone(t??m.ZERO),l(n)?n=m.clone(n):n=m.midpoint(this.minimum,this.maximum,new m),this.center=n}Uc.fromCorners=function(e,t,n){return l(n)||(n=new Uc),n.minimum=m.clone(e,n.minimum),n.maximum=m.clone(t,n.maximum),n.center=m.midpoint(e,t,n.center),n};Uc.fromPoints=function(e,t){if(l(t)||(t=new Uc),!l(e)||e.length===0)return t.minimum=m.clone(m.ZERO,t.minimum),t.maximum=m.clone(m.ZERO,t.maximum),t.center=m.clone(m.ZERO,t.center),t;let n=e[0].x,i=e[0].y,o=e[0].z,r=e[0].x,s=e[0].y,a=e[0].z,c=e.length;for(let h=1;h<c;h++){let p=e[h],g=p.x,f=p.y,y=p.z;n=Math.min(g,n),r=Math.max(g,r),i=Math.min(f,i),s=Math.max(f,s),o=Math.min(y,o),a=Math.max(y,a)}let d=t.minimum;d.x=n,d.y=i,d.z=o;let u=t.maximum;return u.x=r,u.y=s,u.z=a,t.center=m.midpoint(d,u,t.center),t};Uc.clone=function(e,t){if(l(e))return l(t)?(t.minimum=m.clone(e.minimum,t.minimum),t.maximum=m.clone(e.maximum,t.maximum),t.center=m.clone(e.center,t.center),t):new Uc(e.minimum,e.maximum,e.center)};Uc.equals=function(e,t){return e===t||l(e)&&l(t)&&m.equals(e.center,t.center)&&m.equals(e.minimum,t.minimum)&&m.equals(e.maximum,t.maximum)};var t5=new m;Uc.intersectPlane=function(e,t){t5=m.subtract(e.maximum,e.minimum,t5);let n=m.multiplyByScalar(t5,.5,t5),i=t.normal,o=n.x*Math.abs(i.x)+n.y*Math.abs(i.y)+n.z*Math.abs(i.z),r=m.dot(e.center,i)+t.distance;return r-o>0?zt.INSIDE:r+o<0?zt.OUTSIDE:zt.INTERSECTING};Uc.prototype.clone=function(e){return Uc.clone(this,e)};Uc.prototype.intersectPlane=function(e){return Uc.intersectPlane(this,e)};Uc.prototype.equals=function(e){return Uc.equals(this,e)};var K0=Uc;var WY=new se;function hf(e,t){t=t??ne.default,e=t.scaleToGeodeticSurface(e);let n=Pt.eastNorthUpToFixedFrame(e,t);this._ellipsoid=t,this._origin=e,this._xAxis=m.fromCartesian4(F.getColumn(n,0,WY)),this._yAxis=m.fromCartesian4(F.getColumn(n,1,WY));let i=m.fromCartesian4(F.getColumn(n,2,WY));this._plane=sn.fromPointNormal(e,i)}Object.defineProperties(hf.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},origin:{get:function(){return this._origin}},plane:{get:function(){return this._plane}},xAxis:{get:function(){return this._xAxis}},yAxis:{get:function(){return this._yAxis}},zAxis:{get:function(){return this._plane.normal}}});var VXe=new K0;hf.fromPoints=function(e,t){let n=K0.fromPoints(e,VXe);return new hf(n.center,t)};var hne=new pn,n5=new m;hf.prototype.projectPointOntoPlane=function(e,t){let n=hne;n.origin=e,m.normalize(e,n.direction);let i=qn.rayPlane(n,this._plane,n5);if(l(i)||(m.negate(n.direction,n.direction),i=qn.rayPlane(n,this._plane,n5)),l(i)){let o=m.subtract(i,this._origin,i),r=m.dot(this._xAxis,o),s=m.dot(this._yAxis,o);return l(t)?(t.x=r,t.y=s,t):new U(r,s)}};hf.prototype.projectPointsOntoPlane=function(e,t){l(t)||(t=[]);let n=0,i=e.length;for(let o=0;o<i;o++){let r=this.projectPointOntoPlane(e[o],t[n]);l(r)&&(t[n]=r,n++)}return t.length=n,t};hf.prototype.projectPointToNearestOnPlane=function(e,t){l(t)||(t=new U);let n=hne;n.origin=e,m.clone(this._plane.normal,n.direction);let i=qn.rayPlane(n,this._plane,n5);l(i)||(m.negate(n.direction,n.direction),i=qn.rayPlane(n,this._plane,n5));let o=m.subtract(i,this._origin,i),r=m.dot(this._xAxis,o),s=m.dot(this._yAxis,o);return t.x=r,t.y=s,t};hf.prototype.projectPointsToNearestOnPlane=function(e,t){l(t)||(t=[]);let n=e.length;t.length=n;for(let i=0;i<n;i++)t[i]=this.projectPointToNearestOnPlane(e[i],t[i]);return t};var LXe=new m;hf.prototype.projectPointOntoEllipsoid=function(e,t){l(t)||(t=new m);let n=this._ellipsoid,i=this._origin,o=this._xAxis,r=this._yAxis,s=LXe;return m.multiplyByScalar(o,e.x,s),t=m.add(i,s,t),m.multiplyByScalar(r,e.y,s),m.add(t,s,t),n.scaleToGeocentricSurface(t,t),t};hf.prototype.projectPointsOntoEllipsoid=function(e,t){let n=e.length;l(t)?t.length=n:t=new Array(n);for(let i=0;i<n;++i)t[i]=this.projectPointOntoEllipsoid(e[i],t[i]);return t};var Qr=hf;function Ni(e,t){this.center=m.clone(e??m.ZERO),this.halfAxes=$.clone(t??$.ZERO)}Ni.packedLength=m.packedLength+$.packedLength;Ni.pack=function(e,t,n){return n=n??0,m.pack(e.center,t,n),$.pack(e.halfAxes,t,n+m.packedLength),t};Ni.unpack=function(e,t,n){return t=t??0,l(n)||(n=new Ni),m.unpack(e,t,n.center),$.unpack(e,t+m.packedLength,n.halfAxes),n};var RXe=new m,ZXe=new m,GXe=new m,EXe=new m,IXe=new m,XXe=new m,WXe=new $,PXe={unitary:new $,diagonal:new $};Ni.fromPoints=function(e,t){if(l(t)||(t=new Ni),!l(e)||e.length===0)return t.halfAxes=$.ZERO,t.center=m.ZERO,t;let n,i=e.length,o=m.clone(e[0],RXe);for(n=1;n<i;n++)m.add(o,e[n],o);let r=1/i;m.multiplyByScalar(o,r,o);let s=0,a=0,c=0,d=0,u=0,h=0,p;for(n=0;n<i;n++)p=m.subtract(e[n],o,ZXe),s+=p.x*p.x,a+=p.x*p.y,c+=p.x*p.z,d+=p.y*p.y,u+=p.y*p.z,h+=p.z*p.z;s*=r,a*=r,c*=r,d*=r,u*=r,h*=r;let g=WXe;g[0]=s,g[1]=a,g[2]=c,g[3]=a,g[4]=d,g[5]=u,g[6]=c,g[7]=u,g[8]=h;let f=$.computeEigenDecomposition(g,PXe),y=$.clone(f.unitary,t.halfAxes),x=$.getColumn(y,0,EXe),S=$.getColumn(y,1,IXe),C=$.getColumn(y,2,XXe),V=-Number.MAX_VALUE,L=-Number.MAX_VALUE,Z=-Number.MAX_VALUE,E=Number.MAX_VALUE,P=Number.MAX_VALUE,W=Number.MAX_VALUE;for(n=0;n<i;n++)p=e[n],V=Math.max(m.dot(x,p),V),L=Math.max(m.dot(S,p),L),Z=Math.max(m.dot(C,p),Z),E=Math.min(m.dot(x,p),E),P=Math.min(m.dot(S,p),P),W=Math.min(m.dot(C,p),W);x=m.multiplyByScalar(x,.5*(E+V),x),S=m.multiplyByScalar(S,.5*(P+L),S),C=m.multiplyByScalar(C,.5*(W+Z),C);let v=m.add(x,S,t.center);m.add(v,C,v);let A=GXe;return A.x=V-E,A.y=L-P,A.z=Z-W,m.multiplyByScalar(A,.5,A),$.multiplyByScale(t.halfAxes,A,t.halfAxes),t};var xne=new m,vXe=new m;function fne(e,t,n,i,o,r,s,a,c,d,u){l(u)||(u=new Ni);let h=u.halfAxes;$.setColumn(h,0,t,h),$.setColumn(h,1,n,h),$.setColumn(h,2,i,h);let p=xne;p.x=(o+r)/2,p.y=(s+a)/2,p.z=(c+d)/2;let g=vXe;g.x=(r-o)/2,g.y=(a-s)/2,g.z=(d-c)/2;let f=u.center;return p=$.multiplyByVector(h,p,p),m.add(e,p,f),$.multiplyByScale(h,g,h),u}var pne=new he,wXe=new m,FXe=new he,AXe=new he,MXe=new he,NXe=new he,kXe=new he,UXe=new m,bne=new m,DXe=new m,gne=new m,BXe=new m,OXe=new U,YXe=new U,zXe=new U,HXe=new U,KXe=new U,JXe=new m,QXe=new m,jXe=new m,qXe=new m,$Xe=new U,eWe=new m,tWe=new m,nWe=new m,iWe=new sn(m.UNIT_X,0);Ni.fromRectangle=function(e,t,n,i,o){t=t??0,n=n??0,i=i??ne.default;let r,s,a,c,d,u,h;if(e.width<=X.PI){let P=ce.center(e,pne),W=i.cartographicToCartesian(P,wXe),v=new Qr(W,i);h=v.plane;let A=P.longitude,b=e.south<0&&e.north>0?0:P.latitude,R=he.fromRadians(A,e.north,n,FXe),G=he.fromRadians(e.west,e.north,n,AXe),I=he.fromRadians(e.west,b,n,MXe),w=he.fromRadians(e.west,e.south,n,NXe),M=he.fromRadians(A,e.south,n,kXe),B=i.cartographicToCartesian(R,UXe),k=i.cartographicToCartesian(G,bne),O=i.cartographicToCartesian(I,DXe),N=i.cartographicToCartesian(w,gne),z=i.cartographicToCartesian(M,BXe),K=v.projectPointToNearestOnPlane(B,OXe),te=v.projectPointToNearestOnPlane(k,YXe),H=v.projectPointToNearestOnPlane(O,zXe),j=v.projectPointToNearestOnPlane(N,HXe),ee=v.projectPointToNearestOnPlane(z,KXe);return r=Math.min(te.x,H.x,j.x),s=-r,c=Math.max(te.y,K.y),a=Math.min(j.y,ee.y),G.height=w.height=t,k=i.cartographicToCartesian(G,bne),N=i.cartographicToCartesian(w,gne),d=Math.min(sn.getPointDistance(h,k),sn.getPointDistance(h,N)),u=n,fne(v.origin,v.xAxis,v.yAxis,v.zAxis,r,s,a,c,d,u,o)}let p=e.south>0,g=e.north<0,f=p?e.south:g?e.north:0,y=ce.center(e,pne).longitude,x=m.fromRadians(y,f,n,i,JXe);x.z=0;let C=Math.abs(x.x)<X.EPSILON10&&Math.abs(x.y)<X.EPSILON10?m.UNIT_X:m.normalize(x,QXe),V=m.UNIT_Z,L=m.cross(C,V,jXe);h=sn.fromPointNormal(x,C,iWe);let Z=m.fromRadians(y+X.PI_OVER_TWO,f,n,i,qXe);s=m.dot(sn.projectPointOntoPlane(h,Z,$Xe),L),r=-s,c=m.fromRadians(0,e.north,g?t:n,i,eWe).z,a=m.fromRadians(0,e.south,p?t:n,i,tWe).z;let E=m.fromRadians(e.east,f,n,i,nWe);return d=sn.getPointDistance(h,E),u=0,fne(x,L,V,C,r,s,a,c,d,u,o)};Ni.fromTransformation=function(e,t){return l(t)||(t=new Ni),t.center=F.getTranslation(e,t.center),t.halfAxes=F.getMatrix3(e,t.halfAxes),t.halfAxes=$.multiplyByScalar(t.halfAxes,.5,t.halfAxes),t};Ni.clone=function(e,t){if(l(e))return l(t)?(m.clone(e.center,t.center),$.clone(e.halfAxes,t.halfAxes),t):new Ni(e.center,e.halfAxes)};Ni.intersectPlane=function(e,t){let n=e.center,i=t.normal,o=e.halfAxes,r=i.x,s=i.y,a=i.z,c=Math.abs(r*o[$.COLUMN0ROW0]+s*o[$.COLUMN0ROW1]+a*o[$.COLUMN0ROW2])+Math.abs(r*o[$.COLUMN1ROW0]+s*o[$.COLUMN1ROW1]+a*o[$.COLUMN1ROW2])+Math.abs(r*o[$.COLUMN2ROW0]+s*o[$.COLUMN2ROW1]+a*o[$.COLUMN2ROW2]),d=m.dot(i,n)+t.distance;return d<=-c?zt.OUTSIDE:d>=c?zt.INSIDE:zt.INTERSECTING};var _ne=new m,Tne=new m,Sne=new m,oWe=new m,yne=new m,rWe=new m;Ni.distanceSquaredTo=function(e,t){let n=m.subtract(t,e.center,xne),i=e.halfAxes,o=$.getColumn(i,0,_ne),r=$.getColumn(i,1,Tne),s=$.getColumn(i,2,Sne),a=m.magnitude(o),c=m.magnitude(r),d=m.magnitude(s),u=!0,h=!0,p=!0;a>0?m.divideByScalar(o,a,o):u=!1,c>0?m.divideByScalar(r,c,r):h=!1,d>0?m.divideByScalar(s,d,s):p=!1;let g=!u+!h+!p,f,y,x;if(g===1){let L=o;f=r,y=s,h?p||(L=s,y=o):(L=r,f=o),x=m.cross(f,y,yne),L===o?o=x:L===r?r=x:L===s&&(s=x)}else if(g===2){f=o,h?f=r:p&&(f=s);let L=m.UNIT_Y;L.equalsEpsilon(f,X.EPSILON3)&&(L=m.UNIT_X),y=m.cross(f,L,oWe),m.normalize(y,y),x=m.cross(f,y,yne),m.normalize(x,x),f===o?(r=y,s=x):f===r?(s=y,o=x):f===s&&(o=y,r=x)}else g===3&&(o=m.UNIT_X,r=m.UNIT_Y,s=m.UNIT_Z);let S=rWe;S.x=m.dot(n,o),S.y=m.dot(n,r),S.z=m.dot(n,s);let C=0,V;return S.x<-a?(V=S.x+a,C+=V*V):S.x>a&&(V=S.x-a,C+=V*V),S.y<-c?(V=S.y+c,C+=V*V):S.y>c&&(V=S.y-c,C+=V*V),S.z<-d?(V=S.z+d,C+=V*V):S.z>d&&(V=S.z-d,C+=V*V),C};var sWe=new m,aWe=new m;Ni.computePlaneDistances=function(e,t,n,i){l(i)||(i=new Xa);let o=Number.POSITIVE_INFINITY,r=Number.NEGATIVE_INFINITY,s=e.center,a=e.halfAxes,c=$.getColumn(a,0,_ne),d=$.getColumn(a,1,Tne),u=$.getColumn(a,2,Sne),h=m.add(c,d,sWe);m.add(h,u,h),m.add(h,s,h);let p=m.subtract(h,t,aWe),g=m.dot(n,p);return o=Math.min(g,o),r=Math.max(g,r),m.add(s,c,h),m.add(h,d,h),m.subtract(h,u,h),m.subtract(h,t,p),g=m.dot(n,p),o=Math.min(g,o),r=Math.max(g,r),m.add(s,c,h),m.subtract(h,d,h),m.add(h,u,h),m.subtract(h,t,p),g=m.dot(n,p),o=Math.min(g,o),r=Math.max(g,r),m.add(s,c,h),m.subtract(h,d,h),m.subtract(h,u,h),m.subtract(h,t,p),g=m.dot(n,p),o=Math.min(g,o),r=Math.max(g,r),m.subtract(s,c,h),m.add(h,d,h),m.add(h,u,h),m.subtract(h,t,p),g=m.dot(n,p),o=Math.min(g,o),r=Math.max(g,r),m.subtract(s,c,h),m.add(h,d,h),m.subtract(h,u,h),m.subtract(h,t,p),g=m.dot(n,p),o=Math.min(g,o),r=Math.max(g,r),m.subtract(s,c,h),m.subtract(h,d,h),m.add(h,u,h),m.subtract(h,t,p),g=m.dot(n,p),o=Math.min(g,o),r=Math.max(g,r),m.subtract(s,c,h),m.subtract(h,d,h),m.subtract(h,u,h),m.subtract(h,t,p),g=m.dot(n,p),o=Math.min(g,o),r=Math.max(g,r),i.start=o,i.stop=r,i};var cWe=new m,lWe=new m,dWe=new m;Ni.computeCorners=function(e,t){l(t)||(t=[new m,new m,new m,new m,new m,new m,new m,new m]);let n=e.center,i=e.halfAxes,o=$.getColumn(i,0,cWe),r=$.getColumn(i,1,lWe),s=$.getColumn(i,2,dWe);return m.clone(n,t[0]),m.subtract(t[0],o,t[0]),m.subtract(t[0],r,t[0]),m.subtract(t[0],s,t[0]),m.clone(n,t[1]),m.subtract(t[1],o,t[1]),m.subtract(t[1],r,t[1]),m.add(t[1],s,t[1]),m.clone(n,t[2]),m.subtract(t[2],o,t[2]),m.add(t[2],r,t[2]),m.subtract(t[2],s,t[2]),m.clone(n,t[3]),m.subtract(t[3],o,t[3]),m.add(t[3],r,t[3]),m.add(t[3],s,t[3]),m.clone(n,t[4]),m.add(t[4],o,t[4]),m.subtract(t[4],r,t[4]),m.subtract(t[4],s,t[4]),m.clone(n,t[5]),m.add(t[5],o,t[5]),m.subtract(t[5],r,t[5]),m.add(t[5],s,t[5]),m.clone(n,t[6]),m.add(t[6],o,t[6]),m.add(t[6],r,t[6]),m.subtract(t[6],s,t[6]),m.clone(n,t[7]),m.add(t[7],o,t[7]),m.add(t[7],r,t[7]),m.add(t[7],s,t[7]),t};var uWe=new $;Ni.computeTransformation=function(e,t){l(t)||(t=new F);let n=e.center,i=$.multiplyByUniformScale(e.halfAxes,2,uWe);return F.fromRotationTranslation(i,n,t)};var mWe=new le;Ni.isOccluded=function(e,t){let n=le.fromOrientedBoundingBox(e,mWe);return!t.isBoundingSphereVisible(n)};Ni.prototype.intersectPlane=function(e){return Ni.intersectPlane(this,e)};Ni.prototype.distanceSquaredTo=function(e){return Ni.distanceSquaredTo(this,e)};Ni.prototype.computePlaneDistances=function(e,t,n){return Ni.computePlaneDistances(this,e,t,n)};Ni.prototype.computeCorners=function(e){return Ni.computeCorners(this,e)};Ni.prototype.computeTransformation=function(e){return Ni.computeTransformation(this,e)};Ni.prototype.isOccluded=function(e){return Ni.isOccluded(this,e)};Ni.equals=function(e,t){return e===t||l(e)&&l(t)&&m.equals(e.center,t.center)&&$.equals(e.halfAxes,t.halfAxes)};Ni.prototype.clone=function(e){return Ni.clone(this,e)};Ni.prototype.equals=function(e){return Ni.equals(this,e)};var En=Ni;var bJt=_(T(),1);var i5={};i5.getHeight=function(e,t,n){return(e-n)*t+n};var hWe=new he;i5.getPosition=function(e,t,n,i,o){let r=t.cartesianToCartographic(e,hWe);if(!l(r))return m.clone(e,o);let s=i5.getHeight(r.height,n,i);return m.fromRadians(r.longitude,r.latitude,s,t,o)};var Tr=i5;var ijt=_(T(),1);var yJt=_(T(),1),zE=`in vec3 position3DHigh; in vec3 position3DLow; in float batchId; #ifdef EXTRUDED_GEOMETRY in vec3 extrudeDirection; uniform float u_globeMinimumAltitude; #endif // EXTRUDED_GEOMETRY #ifdef PER_INSTANCE_COLOR out vec4 v_color; #endif // PER_INSTANCE_COLOR #ifdef TEXTURE_COORDINATES #ifdef SPHERICAL out vec4 v_sphericalExtents; #else // SPHERICAL out vec2 v_inversePlaneExtents; out vec4 v_westPlane; out vec4 v_southPlane; #endif // SPHERICAL out vec3 v_uvMinAndSphericalLongitudeRotation; out vec3 v_uMaxAndInverseDistance; out vec3 v_vMaxAndInverseDistance; #endif // TEXTURE_COORDINATES void main() { vec4 position = czm_computePosition(); #ifdef EXTRUDED_GEOMETRY float delta = min(u_globeMinimumAltitude, czm_geometricToleranceOverMeter * length(position.xyz)); delta *= czm_sceneMode == czm_sceneMode3D ? 1.0 : 0.0; //extrudeDirection is zero for the top layer position = position + vec4(extrudeDirection * delta, 0.0); #endif #ifdef TEXTURE_COORDINATES #ifdef SPHERICAL v_sphericalExtents = czm_batchTable_sphericalExtents(batchId); v_uvMinAndSphericalLongitudeRotation.z = czm_batchTable_longitudeRotation(batchId); #else // SPHERICAL #ifdef COLUMBUS_VIEW_2D vec4 planes2D_high = czm_batchTable_planes2D_HIGH(batchId); vec4 planes2D_low = czm_batchTable_planes2D_LOW(batchId); // If the primitive is split across the IDL (planes2D_high.x > planes2D_high.w): // - If this vertex is on the east side of the IDL (position3DLow.y > 0.0, comparison with position3DHigh may produce artifacts) // - existing "east" is on the wrong side of the world, far away (planes2D_high/low.w) // - so set "east" as beyond the eastmost extent of the projection (idlSplitNewPlaneHiLow) vec2 idlSplitNewPlaneHiLow = vec2(EAST_MOST_X_HIGH - (WEST_MOST_X_HIGH - planes2D_high.w), EAST_MOST_X_LOW - (WEST_MOST_X_LOW - planes2D_low.w)); bool idlSplit = planes2D_high.x > planes2D_high.w && position3DLow.y > 0.0; planes2D_high.w = czm_branchFreeTernary(idlSplit, idlSplitNewPlaneHiLow.x, planes2D_high.w); planes2D_low.w = czm_branchFreeTernary(idlSplit, idlSplitNewPlaneHiLow.y, planes2D_low.w); // - else, if this vertex is on the west side of the IDL (position3DLow.y < 0.0) // - existing "west" is on the wrong side of the world, far away (planes2D_high/low.x) // - so set "west" as beyond the westmost extent of the projection (idlSplitNewPlaneHiLow) idlSplit = planes2D_high.x > planes2D_high.w && position3DLow.y < 0.0; idlSplitNewPlaneHiLow = vec2(WEST_MOST_X_HIGH - (EAST_MOST_X_HIGH - planes2D_high.x), WEST_MOST_X_LOW - (EAST_MOST_X_LOW - planes2D_low.x)); planes2D_high.x = czm_branchFreeTernary(idlSplit, idlSplitNewPlaneHiLow.x, planes2D_high.x); planes2D_low.x = czm_branchFreeTernary(idlSplit, idlSplitNewPlaneHiLow.y, planes2D_low.x); vec3 southWestCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(vec3(0.0, planes2D_high.xy), vec3(0.0, planes2D_low.xy))).xyz; vec3 northWestCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(vec3(0.0, planes2D_high.x, planes2D_high.z), vec3(0.0, planes2D_low.x, planes2D_low.z))).xyz; vec3 southEastCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(vec3(0.0, planes2D_high.w, planes2D_high.y), vec3(0.0, planes2D_low.w, planes2D_low.y))).xyz; #else // COLUMBUS_VIEW_2D // 3D case has smaller "plane extents," so planes encoded as a 64 bit position and 2 vec3s for distances/direction vec3 southWestCorner = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(czm_batchTable_southWest_HIGH(batchId), czm_batchTable_southWest_LOW(batchId))).xyz; vec3 northWestCorner = czm_normal * czm_batchTable_northward(batchId) + southWestCorner; vec3 southEastCorner = czm_normal * czm_batchTable_eastward(batchId) + southWestCorner; #endif // COLUMBUS_VIEW_2D vec3 eastWard = southEastCorner - southWestCorner; float eastExtent = length(eastWard); eastWard /= eastExtent; vec3 northWard = northWestCorner - southWestCorner; float northExtent = length(northWard); northWard /= northExtent; v_westPlane = vec4(eastWard, -dot(eastWard, southWestCorner)); v_southPlane = vec4(northWard, -dot(northWard, southWestCorner)); v_inversePlaneExtents = vec2(1.0 / eastExtent, 1.0 / northExtent); #endif // SPHERICAL vec4 uvMinAndExtents = czm_batchTable_uvMinAndExtents(batchId); vec4 uMaxVmax = czm_batchTable_uMaxVmax(batchId); v_uMaxAndInverseDistance = vec3(uMaxVmax.xy, uvMinAndExtents.z); v_vMaxAndInverseDistance = vec3(uMaxVmax.zw, uvMinAndExtents.w); v_uvMinAndSphericalLongitudeRotation.xy = uvMinAndExtents.xy; #endif // TEXTURE_COORDINATES #ifdef PER_INSTANCE_COLOR v_color = czm_batchTable_color(batchId); #endif gl_Position = czm_depthClamp(czm_modelViewProjectionRelativeToEye * position); } `;var _Jt=_(T(),1),J0=`#ifdef VECTOR_TILE uniform vec4 u_highlightColor; #endif void main(void) { #ifdef VECTOR_TILE out_FragColor = czm_gammaCorrect(u_highlightColor); #else out_FragColor = vec4(1.0); #endif czm_writeDepthClamp(); } `;var SJt=_(T(),1),Cne={TERRAIN:0,CESIUM_3D_TILE:1,BOTH:2};Cne.NUMBER_OF_CLASSIFICATION_TYPES=3;var Un=Object.freeze(Cne);var LJt=_(T(),1);var fWe={NEVER:ie.NEVER,LESS:ie.LESS,EQUAL:ie.EQUAL,LESS_OR_EQUAL:ie.LEQUAL,GREATER:ie.GREATER,NOT_EQUAL:ie.NOTEQUAL,GREATER_OR_EQUAL:ie.GEQUAL,ALWAYS:ie.ALWAYS},cc=Object.freeze(fWe);var e4t=_(T(),1);var ZJt=_(T(),1);function pWe(e,t){let n=[],i=e.length,o=0;for(;o<i;){let r=Math.ceil((i-o)/t--);n.push(e.slice(o,o+r)),o+=r}return n}var HE=pWe;var UJt=_(T(),1);function Pp(e,t,n){if(this._attributes=t,this._numberOfInstances=n,t.length===0)return;let i=bWe(t),o=e.floatingPointTexture,r=i===je.FLOAT&&!o,s=gWe(t,r),a=yWe(s,t,r),c=Math.floor(Nt.maximumTextureSize/a),d=Math.min(n,c),u=a*d,h=Math.ceil(n/d),p=1/u,g=p*.5,f=1/h,y=f*.5;this._textureDimensions=new U(u,h),this._textureStep=new se(p,g,f,y),this._pixelDatatype=r?je.UNSIGNED_BYTE:i,this._packFloats=r,this._offsets=s,this._stride=a,this._texture=void 0;let x=4*u*h;this._batchValues=i===je.FLOAT&&!r?new Float32Array(x):new Uint8Array(x),this._batchValuesDirty=!1}Object.defineProperties(Pp.prototype,{attributes:{get:function(){return this._attributes}},numberOfInstances:{get:function(){return this._numberOfInstances}}});function bWe(e){let t=!1,n=e.length;for(let i=0;i<n;++i)if(e[i].componentDatatype!==Q.UNSIGNED_BYTE){t=!0;break}return t?je.FLOAT:je.UNSIGNED_BYTE}function Lne(e,t){let n=e[t].componentsPerAttribute;return n===2?U:n===3?m:n===4?se:Number}function gWe(e,t){let n=new Array(e.length),i=0,o=e.length;for(let r=0;r<o;++r){let a=e[r].componentDatatype;n[r]=i,a!==Q.UNSIGNED_BYTE&&t?i+=4:++i}return n}function yWe(e,t,n){let i=e.length,o=e[i-1];return t[i-1].componentDatatype!==Q.UNSIGNED_BYTE&&n?o+4:o+1}var KE=new se;function xWe(e,t,n){let i=se.unpack(e,t,KE),o=se.unpackFloat(i);i=se.unpack(e,t+4,KE);let r=se.unpackFloat(i);i=se.unpack(e,t+8,KE);let s=se.unpackFloat(i);i=se.unpack(e,t+12,KE);let a=se.unpackFloat(i);return se.fromElements(o,r,s,a,n)}function _We(e,t,n){let i=se.packFloat(e.x,KE);se.pack(i,t,n),i=se.packFloat(e.y,i),se.pack(i,t,n+4),i=se.packFloat(e.z,i),se.pack(i,t,n+8),i=se.packFloat(e.w,i),se.pack(i,t,n+12)}var Vne=new se;Pp.prototype.getBatchedAttribute=function(e,t,n){let i=this._attributes,o=this._offsets[t],s=4*this._stride*e+4*o,a;this._packFloats&&i[t].componentDatatype!==je.UNSIGNED_BYTE?a=xWe(this._batchValues,s,Vne):a=se.unpack(this._batchValues,s,Vne);let c=Lne(i,t);return l(c.fromCartesian4)?c.fromCartesian4(a,n):l(c.clone)?c.clone(a,n):a.x};var TWe=[void 0,void 0,new U,new m,new se],SWe=new se;Pp.prototype.setBatchedAttribute=function(e,t,n){let i=this._attributes,o=TWe[i[t].componentsPerAttribute],r=this.getBatchedAttribute(e,t,o),s=Lne(this._attributes,t);if(l(s.equals)?s.equals(r,n):r===n)return;let c=SWe;c.x=l(n.x)?n.x:n,c.y=l(n.y)?n.y:0,c.z=l(n.z)?n.z:0,c.w=l(n.w)?n.w:0;let d=this._offsets[t],h=4*this._stride*e+4*d;this._packFloats&&i[t].componentDatatype!==je.UNSIGNED_BYTE?_We(c,this._batchValues,h):se.pack(c,this._batchValues,h),this._batchValuesDirty=!0};function CWe(e,t){let n=e._textureDimensions;e._texture=new vt({context:t,pixelFormat:it.RGBA,pixelDatatype:e._pixelDatatype,width:n.x,height:n.y,sampler:qt.NEAREST,flipY:!1})}function VWe(e){let t=e._textureDimensions;e._texture.copyFrom({source:{width:t.x,height:t.y,arrayBufferView:e._batchValues}})}Pp.prototype.update=function(e){l(this._texture)&&!this._batchValuesDirty||this._attributes.length===0||(this._batchValuesDirty=!1,l(this._texture)||CWe(this,e.context),VWe(this))};Pp.prototype.getUniformMapCallback=function(){let e=this;return function(t){return e._attributes.length===0?t:St(t,{batchTexture:function(){return e._texture},batchTextureDimensions:function(){return e._textureDimensions},batchTextureStep:function(){return e._textureStep}})}};function LWe(e){let t=e._stride;return e._textureDimensions.y===1?`uniform vec4 batchTextureStep; vec2 computeSt(float batchId) { float stepX = batchTextureStep.x; float centerX = batchTextureStep.y; float numberOfAttributes = float(${t}); return vec2(centerX + (batchId * numberOfAttributes * stepX), 0.5); } `:`uniform vec4 batchTextureStep; uniform vec2 batchTextureDimensions; vec2 computeSt(float batchId) { float stepX = batchTextureStep.x; float centerX = batchTextureStep.y; float stepY = batchTextureStep.z; float centerY = batchTextureStep.w; float numberOfAttributes = float(${t}); float xId = mod(batchId * numberOfAttributes, batchTextureDimensions.x); float yId = floor(batchId * numberOfAttributes / batchTextureDimensions.x); return vec2(centerX + (xId * stepX), centerY + (yId * stepY)); } `}function RWe(e){return e===1?"float":`vec${e}`}function ZWe(e){return e===1?".x":e===2?".xy":e===3?".xyz":""}function GWe(e,t){let i=e._attributes[t],o=i.componentsPerAttribute,r=i.functionName,s=RWe(o),a=ZWe(o),c=e._offsets[t],d=`${s} ${r}(float batchId) { vec2 st = computeSt(batchId); st.x += batchTextureStep.x * float(${c}); `;return e._packFloats&&i.componentDatatype!==je.UNSIGNED_BYTE?d+=`vec4 textureValue; textureValue.x = czm_unpackFloat(texture(batchTexture, st)); textureValue.y = czm_unpackFloat(texture(batchTexture, st + vec2(batchTextureStep.x, 0.0))); textureValue.z = czm_unpackFloat(texture(batchTexture, st + vec2(batchTextureStep.x * 2.0, 0.0))); textureValue.w = czm_unpackFloat(texture(batchTexture, st + vec2(batchTextureStep.x * 3.0, 0.0))); `:d+=` vec4 textureValue = texture(batchTexture, st); `,d+=` ${s} value = textureValue${a}; `,e._pixelDatatype===je.UNSIGNED_BYTE&&i.componentDatatype===Q.UNSIGNED_BYTE&&!i.normalize?d+=`value *= 255.0; `:e._pixelDatatype===je.FLOAT&&i.componentDatatype===Q.UNSIGNED_BYTE&&i.normalize&&(d+=`value /= 255.0; `),d+=` return value; } `,d}Pp.prototype.getVertexShaderCallback=function(){let e=this._attributes;if(e.length===0)return function(i){return i};let t=`uniform highp sampler2D batchTexture; `;t+=`${LWe(this)} `;let n=e.length;for(let i=0;i<n;++i)t+=GWe(this,i);return function(i){let o=i.indexOf("void main"),r=i.substring(0,o),s=i.substring(o);return`${r} ${t} ${s}`}};Pp.prototype.isDestroyed=function(){return!1};Pp.prototype.destroy=function(){return this._texture=this._texture&&this._texture.destroy(),me(this)};var Ex=Pp;var lQt=_(T(),1);var KJt=_(T(),1);function Xl(e){this._ellipsoid=e??ne.WGS84,this._semimajorAxis=this._ellipsoid.maximumRadius,this._oneOverSemimajorAxis=1/this._semimajorAxis}Object.defineProperties(Xl.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}});Xl.mercatorAngleToGeodeticLatitude=function(e){return X.PI_OVER_TWO-2*Math.atan(Math.exp(-e))};Xl.geodeticLatitudeToMercatorAngle=function(e){e>Xl.MaximumLatitude?e=Xl.MaximumLatitude:e<-Xl.MaximumLatitude&&(e=-Xl.MaximumLatitude);let t=Math.sin(e);return .5*Math.log((1+t)/(1-t))};Xl.MaximumLatitude=Xl.mercatorAngleToGeodeticLatitude(Math.PI);Xl.prototype.project=function(e,t){let n=this._semimajorAxis,i=e.longitude*n,o=Xl.geodeticLatitudeToMercatorAngle(e.latitude)*n,r=e.height;return l(t)?(t.x=i,t.y=o,t.z=r,t):new m(i,o,r)};Xl.prototype.unproject=function(e,t){let n=this._oneOverSemimajorAxis,i=e.x*n,o=Xl.mercatorAngleToGeodeticLatitude(e.y*n),r=e.z;return l(t)?(t.longitude=i,t.latitude=o,t.height=r,t):new he(i,o,r)};var Xi=Xl;function EWe(e,t,n){let i=!n,o=e.length,r;if(!i&&o>1){let s=e[0].modelMatrix;for(r=1;r<o;++r)if(!F.equals(s,e[r].modelMatrix)){i=!0;break}}if(i)for(r=0;r<o;++r)l(e[r].geometry)&&Fn.transformToWorldCoordinates(e[r]);else F.multiplyTransformation(t,e[0].modelMatrix,t)}function PY(e,t){let n=e.attributes,i=n.position,o=i.values.length/i.componentsPerAttribute;n.batchId=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:1,values:new Float32Array(o)});let r=n.batchId.values;for(let s=0;s<o;++s)r[s]=t}function IWe(e){let t=e.length;for(let n=0;n<t;++n){let i=e[n];l(i.geometry)?PY(i.geometry,n):l(i.westHemisphereGeometry)&&l(i.eastHemisphereGeometry)&&(PY(i.westHemisphereGeometry,n),PY(i.eastHemisphereGeometry,n))}}function XWe(e){let t=e.instances,n=e.projection,i=e.elementIndexUintSupported,o=e.scene3DOnly,r=e.vertexCacheOptimize,s=e.compressVertices,a=e.modelMatrix,c,d,u,h=t.length;for(c=0;c<h;++c)if(l(t[c].geometry)){u=t[c].geometry.primitiveType;break}if(EWe(t,a,o),!o)for(c=0;c<h;++c)l(t[c].geometry)&&Fn.splitLongitude(t[c]);if(IWe(t),r)for(c=0;c<h;++c){let g=t[c];l(g.geometry)?(Fn.reorderForPostVertexCache(g.geometry),Fn.reorderForPreVertexCache(g.geometry)):l(g.westHemisphereGeometry)&&l(g.eastHemisphereGeometry)&&(Fn.reorderForPostVertexCache(g.westHemisphereGeometry),Fn.reorderForPreVertexCache(g.westHemisphereGeometry),Fn.reorderForPostVertexCache(g.eastHemisphereGeometry),Fn.reorderForPreVertexCache(g.eastHemisphereGeometry))}let p=Fn.combineInstances(t);for(h=p.length,c=0;c<h;++c){d=p[c];let g=d.attributes;if(o)for(let f in g)g.hasOwnProperty(f)&&g[f].componentDatatype===Q.DOUBLE&&Fn.encodeAttribute(d,f,`${f}3DHigh`,`${f}3DLow`);else for(let f in g)if(g.hasOwnProperty(f)&&g[f].componentDatatype===Q.DOUBLE){let y=`${f}3D`,x=`${f}2D`;Fn.projectTo2D(d,f,y,x,n),l(d.boundingSphere)&&f==="position"&&(d.boundingSphereCV=le.fromVertices(d.attributes.position2D.values)),Fn.encodeAttribute(d,y,`${y}High`,`${y}Low`),Fn.encodeAttribute(d,x,`${x}High`,`${x}Low`)}s&&Fn.compressVertices(d)}if(!i){let g=[];for(h=p.length,c=0;c<h;++c)d=p[c],g=g.concat(Fn.fitToUnsignedShortIndices(d));p=g}return p}function vY(e,t,n,i){let o,r,s,a=i.length-1;if(a>=0){let d=i[a];o=d.offset+d.count,s=d.index,r=n[s].indices.length}else o=0,s=0,r=n[s].indices.length;let c=e.length;for(let d=0;d<c;++d){let h=e[d][t];if(!l(h))continue;let p=h.indices.length;o+p>r&&(o=0,r=n[++s].indices.length),i.push({index:s,offset:o,count:p}),o+=p}}function WWe(e,t){let n=[];return vY(e,"geometry",t,n),vY(e,"westHemisphereGeometry",t,n),vY(e,"eastHemisphereGeometry",t,n),n}var vp={};vp.combineGeometry=function(e){let t,n,i=e.instances,o=i.length,r,s,a=!1;o>0&&(t=XWe(e),t.length>0&&(n=Fn.createAttributeLocations(t[0]),e.createPickOffsets&&(r=WWe(i,t))),l(i[0].attributes)&&l(i[0].attributes.offset)&&(s=new Array(o),a=!0));let c=new Array(o),d=new Array(o);for(let u=0;u<o;++u){let h=i[u],p=h.geometry;l(p)&&(c[u]=p.boundingSphere,d[u]=p.boundingSphereCV,a&&(s[u]=h.geometry.offsetAttribute));let g=h.eastHemisphereGeometry,f=h.westHemisphereGeometry;l(g)&&l(f)&&(l(g.boundingSphere)&&l(f.boundingSphere)&&(c[u]=le.union(g.boundingSphere,f.boundingSphere)),l(g.boundingSphereCV)&&l(f.boundingSphereCV)&&(d[u]=le.union(g.boundingSphereCV,f.boundingSphereCV)))}return{geometries:t,modelMatrix:e.modelMatrix,attributeLocations:n,pickOffsets:r,offsetInstanceExtend:s,boundingSpheres:c,boundingSpheresCV:d}};function PWe(e,t){let n=e.attributes;for(let i in n)if(n.hasOwnProperty(i)){let o=n[i];l(o)&&l(o.values)&&t.push(o.values.buffer)}l(e.indices)&&t.push(e.indices.buffer)}function vWe(e,t){let n=e.length;for(let i=0;i<n;++i)PWe(e[i],t)}function wWe(e){let t=1,n=e.length;for(let i=0;i<n;i++){let o=e[i];if(++t,!l(o))continue;let r=o.attributes;t+=7+2*le.packedLength+(l(o.indices)?o.indices.length:0);for(let s in r)if(r.hasOwnProperty(s)&&l(r[s])){let a=r[s];t+=5+a.values.length}}return t}vp.packCreateGeometryResults=function(e,t){let n=new Float64Array(wWe(e)),i=[],o={},r=e.length,s=0;n[s++]=r;for(let a=0;a<r;a++){let c=e[a],d=l(c);if(n[s++]=d?1:0,!d)continue;n[s++]=c.primitiveType,n[s++]=c.geometryType,n[s++]=c.offsetAttribute??-1;let u=l(c.boundingSphere)?1:0;n[s++]=u,u&&le.pack(c.boundingSphere,n,s),s+=le.packedLength;let h=l(c.boundingSphereCV)?1:0;n[s++]=h,h&&le.pack(c.boundingSphereCV,n,s),s+=le.packedLength;let p=c.attributes,g=[];for(let y in p)p.hasOwnProperty(y)&&l(p[y])&&(g.push(y),l(o[y])||(o[y]=i.length,i.push(y)));n[s++]=g.length;for(let y=0;y<g.length;y++){let x=g[y],S=p[x];n[s++]=o[x],n[s++]=S.componentDatatype,n[s++]=S.componentsPerAttribute,n[s++]=S.normalize?1:0,n[s++]=S.values.length,n.set(S.values,s),s+=S.values.length}let f=l(c.indices)?c.indices.length:0;n[s++]=f,f>0&&(n.set(c.indices,s),s+=f)}return t.push(n.buffer),{stringTable:i,packedData:n}};vp.unpackCreateGeometryResults=function(e){let t=e.stringTable,n=e.packedData,i,o=new Array(n[0]),r=0,s=1;for(;s<n.length;){if(!(n[s++]===1)){o[r++]=void 0;continue}let c=n[s++],d=n[s++],u=n[s++];u===-1&&(u=void 0);let h,p;n[s++]===1&&(h=le.unpack(n,s)),s+=le.packedLength,n[s++]===1&&(p=le.unpack(n,s)),s+=le.packedLength;let y,x,S,C=new mn,V=n[s++];for(i=0;i<V;i++){let Z=t[n[s++]],E=n[s++];S=n[s++];let P=n[s++]!==0;y=n[s++],x=Q.createTypedArray(E,y);for(let W=0;W<y;W++)x[W]=n[s++];C[Z]=new Ge({componentDatatype:E,componentsPerAttribute:S,normalize:P,values:x})}let L;if(y=n[s++],y>0){let Z=x.length/S;for(L=Ae.createTypedArray(Z,y),i=0;i<y;i++)L[i]=n[s++]}o[r++]=new lt({primitiveType:c,geometryType:d,boundingSphere:h,boundingSphereCV:p,indices:L,attributes:C,offsetAttribute:u})}return o};function FWe(e,t){let n=e.length,i=new Float64Array(1+n*19),o=0;i[o++]=n;for(let r=0;r<n;r++){let s=e[r];if(F.pack(s.modelMatrix,i,o),o+=F.packedLength,l(s.attributes)&&l(s.attributes.offset)){let a=s.attributes.offset.value;i[o]=a[0],i[o+1]=a[1],i[o+2]=a[2]}o+=3}return t.push(i.buffer),i}function AWe(e){let t=e,n=new Array(t[0]),i=0,o=1;for(;o<t.length;){let r=F.unpack(t,o),s;o+=F.packedLength,l(t[o])&&(s={offset:new $i(t[o],t[o+1],t[o+2])}),o+=3,n[i++]={modelMatrix:r,attributes:s}}return n}vp.packCombineGeometryParameters=function(e,t){let n=e.createGeometryResults,i=n.length;for(let o=0;o<i;o++)t.push(n[o].packedData.buffer);return{createGeometryResults:e.createGeometryResults,packedInstances:FWe(e.instances,t),ellipsoid:e.ellipsoid,isGeographic:e.projection instanceof Ei,elementIndexUintSupported:e.elementIndexUintSupported,scene3DOnly:e.scene3DOnly,vertexCacheOptimize:e.vertexCacheOptimize,compressVertices:e.compressVertices,modelMatrix:e.modelMatrix,createPickOffsets:e.createPickOffsets}};vp.unpackCombineGeometryParameters=function(e){let t=AWe(e.packedInstances),n=e.createGeometryResults,i=n.length,o=0;for(let a=0;a<i;a++){let c=vp.unpackCreateGeometryResults(n[a]),d=c.length;for(let u=0;u<d;u++){let h=c[u],p=t[o];p.geometry=h,++o}}let r=ne.clone(e.ellipsoid),s=e.isGeographic?new Ei(r):new Xi(r);return{instances:t,ellipsoid:r,projection:s,elementIndexUintSupported:e.elementIndexUintSupported,scene3DOnly:e.scene3DOnly,vertexCacheOptimize:e.vertexCacheOptimize,compressVertices:e.compressVertices,modelMatrix:F.clone(e.modelMatrix),createPickOffsets:e.createPickOffsets}};function Rne(e){let t=e.length,n=1+(le.packedLength+1)*t,i=new Float32Array(n),o=0;i[o++]=t;for(let r=0;r<t;++r){let s=e[r];l(s)?(i[o++]=1,le.pack(e[r],i,o)):i[o++]=0,o+=le.packedLength}return i}function Zne(e){let t=new Array(e[0]),n=0,i=1;for(;i<e.length;)e[i++]===1&&(t[n]=le.unpack(e,i)),++n,i+=le.packedLength;return t}vp.packCombineGeometryResults=function(e,t){l(e.geometries)&&vWe(e.geometries,t);let n=Rne(e.boundingSpheres),i=Rne(e.boundingSpheresCV);return t.push(n.buffer,i.buffer),{geometries:e.geometries,attributeLocations:e.attributeLocations,modelMatrix:e.modelMatrix,pickOffsets:e.pickOffsets,offsetInstanceExtend:e.offsetInstanceExtend,boundingSpheres:n,boundingSpheresCV:i}};vp.unpackCombineGeometryResults=function(e){return{geometries:e.geometries,attributeLocations:e.attributeLocations,modelMatrix:e.modelMatrix,pickOffsets:e.pickOffsets,offsetInstanceExtend:e.offsetInstanceExtend,boundingSpheres:Zne(e.boundingSpheres),boundingSpheresCV:Zne(e.boundingSpheresCV)}};var Ix=vp;var uQt=_(T(),1),MWe={READY:0,CREATING:1,CREATED:2,COMBINING:3,COMBINED:4,COMPLETE:5,FAILED:6},Sr=Object.freeze(MWe);var hQt=_(T(),1),bd={DISABLED:0,ENABLED:1,CAST_ONLY:2,RECEIVE_ONLY:3};bd.NUMBER_OF_SHADOW_MODES=4;bd.castShadows=function(e){return e===bd.ENABLED||e===bd.CAST_ONLY};bd.receiveShadows=function(e){return e===bd.ENABLED||e===bd.RECEIVE_ONLY};bd.fromCastReceive=function(e,t){return e&&t?bd.ENABLED:e?bd.CAST_ONLY:t?bd.RECEIVE_ONLY:bd.DISABLED};var _n=Object.freeze(bd);function Cr(e){e=e??Y.EMPTY_OBJECT,this.geometryInstances=e.geometryInstances,this.appearance=e.appearance,this._appearance=void 0,this._material=void 0,this.depthFailAppearance=e.depthFailAppearance,this._depthFailAppearance=void 0,this._depthFailMaterial=void 0,this.modelMatrix=F.clone(e.modelMatrix??F.IDENTITY),this._modelMatrix=new F,this.show=e.show??!0,this._vertexCacheOptimize=e.vertexCacheOptimize??!1,this._interleave=e.interleave??!1,this._releaseGeometryInstances=e.releaseGeometryInstances??!0,this._allowPicking=e.allowPicking??!0,this._asynchronous=e.asynchronous??!0,this._compressVertices=e.compressVertices??!0,this.cull=e.cull??!0,this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this.rtcCenter=e.rtcCenter,this.shadows=e.shadows??_n.DISABLED,this._translucent=void 0,this._state=Sr.READY,this._geometries=[],this._error=void 0,this._numberOfInstances=0,this._boundingSpheres=[],this._boundingSphereWC=[],this._boundingSphereCV=[],this._boundingSphere2D=[],this._boundingSphereMorph=[],this._perInstanceAttributeCache=new Map,this._instanceIds=[],this._lastPerInstanceAttributeIndex=0,this._va=[],this._attributeLocations=void 0,this._primitiveType=void 0,this._frontFaceRS=void 0,this._backFaceRS=void 0,this._sp=void 0,this._depthFailAppearance=void 0,this._spDepthFail=void 0,this._frontFaceDepthFailRS=void 0,this._backFaceDepthFailRS=void 0,this._pickIds=[],this._colorCommands=[],this._pickCommands=[],this._createBoundingVolumeFunction=e._createBoundingVolumeFunction,this._createRenderStatesFunction=e._createRenderStatesFunction,this._createShaderProgramFunction=e._createShaderProgramFunction,this._createCommandsFunction=e._createCommandsFunction,this._updateAndQueueCommandsFunction=e._updateAndQueueCommandsFunction,this._createPickOffsets=e._createPickOffsets,this._pickOffsets=void 0,this._createGeometryResults=void 0,this._ready=!1,this._batchTable=void 0,this._batchTableAttributeIndices=void 0,this._offsetInstanceExtend=void 0,this._batchTableOffsetAttribute2DIndex=void 0,this._batchTableOffsetsUpdated=!1,this._instanceBoundingSpheres=void 0,this._instanceBoundingSpheresCV=void 0,this._tempBoundingSpheres=void 0,this._recomputeBoundingSpheres=!1,this._batchTableBoundingSpheresUpdated=!1,this._batchTableBoundingSphereAttributeIndices=void 0}Object.defineProperties(Cr.prototype,{vertexCacheOptimize:{get:function(){return this._vertexCacheOptimize}},interleave:{get:function(){return this._interleave}},releaseGeometryInstances:{get:function(){return this._releaseGeometryInstances}},allowPicking:{get:function(){return this._allowPicking}},asynchronous:{get:function(){return this._asynchronous}},compressVertices:{get:function(){return this._compressVertices}},ready:{get:function(){return this._ready}}});function NWe(e){let t=e.length,n=[],i=e[0].attributes,o;for(o in i)if(i.hasOwnProperty(o)&&l(i[o])){let r=i[o],s=!0;for(let a=1;a<t;++a){let c=e[a].attributes[o];if(!l(c)||r.componentDatatype!==c.componentDatatype||r.componentsPerAttribute!==c.componentsPerAttribute||r.normalize!==c.normalize){s=!1;break}}s&&n.push(o)}return n}var kWe=new U,UWe=new m,Fne=new se;function Ane(e){let t=e.length;if(t===1)return e[0];if(t===2)return U.unpack(e,0,kWe);if(t===3)return m.unpack(e,0,UWe);if(t===4)return se.unpack(e,0,Fne)}function DWe(e,t){let n=e.geometryInstances,i=Array.isArray(n)?n:[n],o=i.length;if(o===0)return;let r=NWe(i),s=r.length,a=[],c={},d={},u,p=i[0].attributes,g,f,y;for(g=0;g<s;++g)f=r[g],y=p[f],c[f]=g,a.push({functionName:`czm_batchTable_${f}`,componentDatatype:y.componentDatatype,componentsPerAttribute:y.componentsPerAttribute,normalize:y.normalize});r.indexOf("distanceDisplayCondition")!==-1&&(a.push({functionName:"czm_batchTable_boundingSphereCenter3DHigh",componentDatatype:Q.FLOAT,componentsPerAttribute:3},{functionName:"czm_batchTable_boundingSphereCenter3DLow",componentDatatype:Q.FLOAT,componentsPerAttribute:3},{functionName:"czm_batchTable_boundingSphereCenter2DHigh",componentDatatype:Q.FLOAT,componentsPerAttribute:3},{functionName:"czm_batchTable_boundingSphereCenter2DLow",componentDatatype:Q.FLOAT,componentsPerAttribute:3},{functionName:"czm_batchTable_boundingSphereRadius",componentDatatype:Q.FLOAT,componentsPerAttribute:1}),d.center3DHigh=a.length-5,d.center3DLow=a.length-4,d.center2DHigh=a.length-3,d.center2DLow=a.length-2,d.radius=a.length-1),r.indexOf("offset")!==-1&&(a.push({functionName:"czm_batchTable_offset2D",componentDatatype:Q.FLOAT,componentsPerAttribute:3}),u=a.length-1),a.push({functionName:"czm_batchTable_pickColor",componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:4,normalize:!0});let x=a.length,S=new Ex(t,a,o);for(g=0;g<o;++g){let C=i[g];p=C.attributes;for(let P=0;P<s;++P){f=r[P],y=p[f];let W=Ane(y.value),v=c[f];S.setBatchedAttribute(g,v,W)}let V={primitive:C.pickPrimitive??e};l(C.id)&&(V.id=C.id);let L=t.createPickId(V);e._pickIds.push(L);let Z=L.color,E=Fne;E.x=D.floatToByte(Z.red),E.y=D.floatToByte(Z.green),E.z=D.floatToByte(Z.blue),E.w=D.floatToByte(Z.alpha),S.setBatchedAttribute(g,x-1,E)}e._batchTable=S,e._batchTableAttributeIndices=c,e._batchTableBoundingSphereAttributeIndices=d,e._batchTableOffsetAttribute2DIndex=u}function BWe(e){let t;return Array.isArray(e.values)?t=e.values.slice(0):t=new e.values.constructor(e.values),new Ge({componentDatatype:e.componentDatatype,componentsPerAttribute:e.componentsPerAttribute,normalize:e.normalize,values:t})}function OWe(e){let t=e.attributes,n=new mn;for(let o in t)t.hasOwnProperty(o)&&l(t[o])&&(n[o]=BWe(t[o]));let i;if(l(e.indices)){let o=e.indices;Array.isArray(o)?i=o.slice(0):i=new o.constructor(o)}return new lt({attributes:n,indices:i,primitiveType:e.primitiveType,boundingSphere:le.clone(e.boundingSphere)})}function YWe(e,t){return{geometry:t,attributes:e.attributes,modelMatrix:F.clone(e.modelMatrix),pickPrimitive:e.pickPrimitive,id:e.id}}var zWe=/in\s+vec(?:3|4)\s+(.*)3DHigh;/g;Cr._modifyShaderPosition=function(e,t,n){let i,o="",r="",s="";for(;(i=zWe.exec(t))!==null;){let a=i[1],c=`vec4 czm_compute${a[0].toUpperCase()}${a.substr(1)}()`;c!=="vec4 czm_computePosition()"&&(o+=`${c}; `),l(e.rtcCenter)?(t=t.replace(/in\s+vec(?:3|4)\s+position3DHigh;/g,""),t=t.replace(/in\s+vec(?:3|4)\s+position3DLow;/g,""),o+=`uniform mat4 u_modifiedModelView; `,r+=`in vec4 position; `,s+=`${c} { return u_modifiedModelView * position; } `,t=t.replace(/czm_modelViewRelativeToEye\s+\*\s+/g,""),t=t.replace(/czm_modelViewProjectionRelativeToEye/g,"czm_projection")):n?s+=`${c} { return czm_translateRelativeToEye(${a}3DHigh, ${a}3DLow); } `:(r+=`in vec3 ${a}2DHigh; in vec3 ${a}2DLow; `,s+=`${c} { vec4 p; if (czm_morphTime == 1.0) { p = czm_translateRelativeToEye(${a}3DHigh, ${a}3DLow); } else if (czm_morphTime == 0.0) { p = czm_translateRelativeToEye(${a}2DHigh.zxy, ${a}2DLow.zxy); } else { p = czm_columbusViewMorph( czm_translateRelativeToEye(${a}2DHigh.zxy, ${a}2DLow.zxy), czm_translateRelativeToEye(${a}3DHigh, ${a}3DLow), czm_morphTime); } return p; } `)}return[o,r,t,s].join(` `)};Cr._appendShowToShader=function(e,t){return l(e._batchTableAttributeIndices.show)?`${De.replaceMain(t,"czm_non_show_main")} void main() { czm_non_show_main(); gl_Position *= czm_batchTable_show(batchId); }`:t};Cr._updateColorAttribute=function(e,t,n){if(!l(e._batchTableAttributeIndices.color)&&!l(e._batchTableAttributeIndices.depthFailColor)||t.search(/in\s+vec4\s+color;/g)===-1)return t;let i=t;return i=i.replace(/in\s+vec4\s+color;/g,""),n?i=i.replace(/(\b)color(\b)/g,"$1czm_batchTable_depthFailColor(batchId)$2"):i=i.replace(/(\b)color(\b)/g,"$1czm_batchTable_color(batchId)$2"),i};function Gne(e){return`${De.replaceMain(e,"czm_non_pick_main")} out vec4 v_pickColor; void main() { czm_non_pick_main(); v_pickColor = czm_batchTable_pickColor(batchId); }`}function Ene(e){return`in vec4 v_pickColor; ${e}`}Cr._updatePickColorAttribute=function(e){let t=e.replace(/in\s+vec4\s+pickColor;/g,"");return t=t.replace(/(\b)pickColor(\b)/g,"$1czm_batchTable_pickColor(batchId)$2"),t};Cr._appendOffsetToShader=function(e,t){if(!l(e._batchTableAttributeIndices.offset))return t;let n=`in float batchId; `;n+="in float applyOffset;";let i=t.replace(/in\s+float\s+batchId;/g,n),o=`vec4 $1 = czm_computePosition(); `;return o+=` if (czm_sceneMode == czm_sceneMode3D) `,o+=` { `,o+=" $1 = $1 + vec4(czm_batchTable_offset(batchId) * applyOffset, 0.0);",o+=` } `,o+=` else `,o+=` { `,o+=" $1 = $1 + vec4(czm_batchTable_offset2D(batchId) * applyOffset, 0.0);",o+=` } `,i=i.replace(/vec4\s+([A-Za-z0-9_]+)\s+=\s+czm_computePosition\(\);/g,o),i};Cr._appendDistanceDisplayConditionToShader=function(e,t,n){if(!l(e._batchTableAttributeIndices.distanceDisplayCondition))return t;let i=De.replaceMain(t,"czm_non_distanceDisplayCondition_main"),o=`void main() { czm_non_distanceDisplayCondition_main(); vec2 distanceDisplayCondition = czm_batchTable_distanceDisplayCondition(batchId); vec3 boundingSphereCenter3DHigh = czm_batchTable_boundingSphereCenter3DHigh(batchId); vec3 boundingSphereCenter3DLow = czm_batchTable_boundingSphereCenter3DLow(batchId); float boundingSphereRadius = czm_batchTable_boundingSphereRadius(batchId); `;return n?o+=` vec4 centerRTE = czm_translateRelativeToEye(boundingSphereCenter3DHigh, boundingSphereCenter3DLow); `:o+=` vec3 boundingSphereCenter2DHigh = czm_batchTable_boundingSphereCenter2DHigh(batchId); vec3 boundingSphereCenter2DLow = czm_batchTable_boundingSphereCenter2DLow(batchId); vec4 centerRTE; if (czm_morphTime == 1.0) { centerRTE = czm_translateRelativeToEye(boundingSphereCenter3DHigh, boundingSphereCenter3DLow); } else if (czm_morphTime == 0.0) { centerRTE = czm_translateRelativeToEye(boundingSphereCenter2DHigh.zxy, boundingSphereCenter2DLow.zxy); } else { centerRTE = czm_columbusViewMorph( czm_translateRelativeToEye(boundingSphereCenter2DHigh.zxy, boundingSphereCenter2DLow.zxy), czm_translateRelativeToEye(boundingSphereCenter3DHigh, boundingSphereCenter3DLow), czm_morphTime); } `,o+=` float radiusSq = boundingSphereRadius * boundingSphereRadius; float distanceSq; if (czm_sceneMode == czm_sceneMode2D) { distanceSq = czm_eyeHeight2D.y - radiusSq; } else { distanceSq = dot(centerRTE.xyz, centerRTE.xyz) - radiusSq; } distanceSq = max(distanceSq, 0.0); float nearSq = distanceDisplayCondition.x * distanceDisplayCondition.x; float farSq = distanceDisplayCondition.y * distanceDisplayCondition.y; float show = (distanceSq >= nearSq && distanceSq <= farSq) ? 1.0 : 0.0; gl_Position *= show; }`,`${i} ${o}`};function Ine(e,t){if(!e.compressVertices)return t;let n=t.search(/in\s+vec3\s+normal;/g)!==-1,i=t.search(/in\s+vec2\s+st;/g)!==-1;if(!n&&!i)return t;let o=t.search(/in\s+vec3\s+tangent;/g)!==-1,r=t.search(/in\s+vec3\s+bitangent;/g)!==-1,s=i&&n?2:1;s+=o||r?1:0;let a=s>1?`vec${s}`:"float",c="compressedAttributes",d=`in ${a} ${c};`,u="",h="";if(i){u+=`vec2 st; `;let f=s>1?`${c}.x`:c;h+=` st = czm_decompressTextureCoordinates(${f}); `}n&&o&&r?(u+=`vec3 normal; vec3 tangent; vec3 bitangent; `,h+=` czm_octDecode(${c}.${i?"yz":"xy"}, normal, tangent, bitangent); `):(n&&(u+=`vec3 normal; `,h+=` normal = czm_octDecode(${c}${s>1?`.${i?"y":"x"}`:""}); `),o&&(u+=`vec3 tangent; `,h+=` tangent = czm_octDecode(${c}.${i&&n?"z":"y"}); `),r&&(u+=`vec3 bitangent; `,h+=` bitangent = czm_octDecode(${c}.${i&&n?"z":"y"}); `));let p=t;p=p.replace(/in\s+vec3\s+normal;/g,""),p=p.replace(/in\s+vec2\s+st;/g,""),p=p.replace(/in\s+vec3\s+tangent;/g,""),p=p.replace(/in\s+vec3\s+bitangent;/g,""),p=De.replaceMain(p,"czm_non_compressed_main");let g=`void main() { ${h} czm_non_compressed_main(); }`;return[d,u,p,g].join(` `)}function HWe(e){let t=De.replaceMain(e,"czm_non_depth_clamp_main");return t+=`void main() { czm_non_depth_clamp_main(); gl_Position = czm_depthClamp(gl_Position);} `,t}function KWe(e){let t=De.replaceMain(e,"czm_non_depth_clamp_main");return t+=`void main() { czm_non_depth_clamp_main(); #if defined(LOG_DEPTH) czm_writeLogDepth(); #else czm_writeDepthClamp(); #endif } `,t}function Xne(e,t){let n=e.vertexAttributes}function JWe(e,t){return function(){return e[t]}}var wY=Math.max(Bt.hardwareConcurrency-1,1),o5,QWe=new xi("combineGeometry");function jWe(e,t){let n,i,o,r,s=e._instanceIds;if(e._state===Sr.READY){n=Array.isArray(e.geometryInstances)?e.geometryInstances:[e.geometryInstances];let a=e._numberOfInstances=n.length,c=[],d=[];for(o=0;o<a;++o)i=n[o].geometry,s.push(n[o].id),d.push({moduleName:i._workerName,modulePath:i._workerPath,geometry:i});if(!l(o5))for(o5=new Array(wY),o=0;o<wY;o++)o5[o]=new xi("createGeometry");let u;for(d=HE(d,wY),o=0;o<d.length;o++){let h=0,p=d[o],g=p.length;for(r=0;r<g;++r)u=p[r],i=u.geometry,l(i.constructor.pack)&&(u.offset=h,h+=i.constructor.packedLength??i.packedLength);let f;if(h>0){let y=new Float64Array(h);for(f=[y.buffer],r=0;r<g;++r)u=p[r],i=u.geometry,l(i.constructor.pack)&&(i.constructor.pack(i,y,u.offset),u.geometry=y)}c.push(o5[o].scheduleTask({subTasks:d[o]},f))}e._state=Sr.CREATING,Promise.all(c).then(function(h){e._createGeometryResults=h,e._state=Sr.CREATED}).catch(function(h){QE(e,t,Sr.FAILED,h)})}else if(e._state===Sr.CREATED){let a=[];n=Array.isArray(e.geometryInstances)?e.geometryInstances:[e.geometryInstances];let c=t.scene3DOnly,d=t.mapProjection,u=QWe.scheduleTask(Ix.packCombineGeometryParameters({createGeometryResults:e._createGeometryResults,instances:n,ellipsoid:d.ellipsoid,projection:d,elementIndexUintSupported:t.context.elementIndexUint,scene3DOnly:c,vertexCacheOptimize:e.vertexCacheOptimize,compressVertices:e.compressVertices,modelMatrix:e.modelMatrix,createPickOffsets:e._createPickOffsets},a),a);e._createGeometryResults=void 0,e._state=Sr.COMBINING,Promise.resolve(u).then(function(h){let p=Ix.unpackCombineGeometryResults(h);e._geometries=p.geometries,e._attributeLocations=p.attributeLocations,e.modelMatrix=F.clone(p.modelMatrix,e.modelMatrix),e._pickOffsets=p.pickOffsets,e._offsetInstanceExtend=p.offsetInstanceExtend,e._instanceBoundingSpheres=p.boundingSpheres,e._instanceBoundingSpheresCV=p.boundingSpheresCV,l(e._geometries)&&e._geometries.length>0?(e._recomputeBoundingSpheres=!0,e._state=Sr.COMBINED):QE(e,t,Sr.FAILED,void 0)}).catch(function(h){QE(e,t,Sr.FAILED,h)})}}function qWe(e,t){let n=Array.isArray(e.geometryInstances)?e.geometryInstances:[e.geometryInstances],i=e._numberOfInstances=n.length,o=new Array(i),r=e._instanceIds,s,a,c=0;for(a=0;a<i;a++){s=n[a];let p=s.geometry,g;l(p.attributes)&&l(p.primitiveType)?g=OWe(p):g=p.constructor.createGeometry(p),o[c++]=YWe(s,g),r.push(s.id)}o.length=c;let d=t.scene3DOnly,u=t.mapProjection,h=Ix.combineGeometry({instances:o,ellipsoid:u.ellipsoid,projection:u,elementIndexUintSupported:t.context.elementIndexUint,scene3DOnly:d,vertexCacheOptimize:e.vertexCacheOptimize,compressVertices:e.compressVertices,modelMatrix:e.modelMatrix,createPickOffsets:e._createPickOffsets});e._geometries=h.geometries,e._attributeLocations=h.attributeLocations,e.modelMatrix=F.clone(h.modelMatrix,e.modelMatrix),e._pickOffsets=h.pickOffsets,e._offsetInstanceExtend=h.offsetInstanceExtend,e._instanceBoundingSpheres=h.boundingSpheres,e._instanceBoundingSpheresCV=h.boundingSpheresCV,l(e._geometries)&&e._geometries.length>0?(e._recomputeBoundingSpheres=!0,e._state=Sr.COMBINED):QE(e,t,Sr.FAILED,void 0)}function $We(e,t){let n=e._batchTableAttributeIndices.offset;if(!e._recomputeBoundingSpheres||!l(n)){e._recomputeBoundingSpheres=!1;return}let i,o=e._offsetInstanceExtend,r=e._instanceBoundingSpheres,s=r.length,a=e._tempBoundingSpheres;if(!l(a)){for(a=new Array(s),i=0;i<s;i++)a[i]=new le;e._tempBoundingSpheres=a}for(i=0;i<s;++i){let y=a[i],x=e._batchTable.getBatchedAttribute(i,n,new m);y=r[i].clone(y),Une(y,x,o[i])}let c=[],d=[],u=[];for(i=0;i<s;++i){let y=a[i];y.center.x-y.radius>0||le.intersectPlane(y,sn.ORIGIN_ZX_PLANE)!==zt.INTERSECTING?c.push(y):(d.push(y),u.push(y))}let h=c[0],p=u[0],g=d[0];for(i=1;i<c.length;i++)h=le.union(h,c[i]);for(i=1;i<u.length;i++)p=le.union(p,u[i]);for(i=1;i<d.length;i++)g=le.union(g,d[i]);let f=[];for(l(h)&&f.push(h),l(p)&&f.push(p),l(g)&&f.push(g),i=0;i<f.length;i++){let y=f[i].clone(e._boundingSpheres[i]);e._boundingSpheres[i]=y,e._boundingSphereCV[i]=le.projectTo2D(y,t.mapProjection,e._boundingSphereCV[i])}Cr._updateBoundingVolumes(e,t,e.modelMatrix,!0),e._recomputeBoundingSpheres=!1}var Wne=new On,Mne=new he,Nne=new m,kne=new le;function ePe(e,t){if(!l(e._batchTableAttributeIndices.distanceDisplayCondition)||e._batchTableBoundingSpheresUpdated)return;let i=e._batchTableBoundingSphereAttributeIndices,o=i.center3DHigh,r=i.center3DLow,s=i.center2DHigh,a=i.center2DLow,c=i.radius,d=t.mapProjection,u=d.ellipsoid,h=e._batchTable,p=e._instanceBoundingSpheres,g=p.length;for(let f=0;f<g;++f){let y=p[f];if(!l(y))continue;let x=e.modelMatrix;l(x)&&(y=le.transform(y,x,kne));let S=y.center,C=y.radius,V=On.fromCartesian(S,Wne);if(h.setBatchedAttribute(f,o,V.high),h.setBatchedAttribute(f,r,V.low),!t.scene3DOnly){let L=u.cartesianToCartographic(S,Mne),Z=d.project(L,Nne);V=On.fromCartesian(Z,Wne),h.setBatchedAttribute(f,s,V.high),h.setBatchedAttribute(f,a,V.low)}h.setBatchedAttribute(f,c,C)}e._batchTableBoundingSpheresUpdated=!0}var FY=new m,tPe=new m;function Pne(e,t){if(!l(e._batchTableAttributeIndices.offset)||e._batchTableOffsetsUpdated||t.scene3DOnly)return;let i=e._batchTableOffsetAttribute2DIndex,o=t.mapProjection,r=o.ellipsoid,s=e._batchTable,a=e._instanceBoundingSpheres,c=a.length;for(let d=0;d<c;++d){let u=a[d];if(!l(u))continue;let h=s.getBatchedAttribute(d,e._batchTableAttributeIndices.offset);if(m.equals(h,m.ZERO)){s.setBatchedAttribute(d,i,m.ZERO);continue}let p=e.modelMatrix;l(p)&&(u=le.transform(u,p,kne));let g=u.center;g=r.scaleToGeodeticSurface(g,tPe);let f=r.cartesianToCartographic(g,Mne),y=o.project(f,Nne),x=m.add(h,g,FY);f=r.cartesianToCartographic(x,f);let S=o.project(f,FY),C=m.subtract(S,y,FY),V=C.x;C.x=C.z,C.z=C.y,C.y=V,s.setBatchedAttribute(d,i,C)}e._batchTableOffsetsUpdated=!0}function nPe(e,t){let n=e._attributeLocations,i=e._geometries,o=t.scene3DOnly,r=t.context,s=[],a=i.length;for(let c=0;c<a;++c){let d=i[c];if(s.push(ni.fromGeometry({context:r,geometry:d,attributeLocations:n,bufferUsage:Me.STATIC_DRAW,interleave:e._interleave})),l(e._createBoundingVolumeFunction))e._createBoundingVolumeFunction(t,d);else if(e._boundingSpheres.push(le.clone(d.boundingSphere)),e._boundingSphereWC.push(new le),!o){let u=d.boundingSphereCV.center,h=u.x,p=u.y,g=u.z;u.x=g,u.y=h,u.z=p,e._boundingSphereCV.push(le.clone(d.boundingSphereCV)),e._boundingSphere2D.push(new le),e._boundingSphereMorph.push(new le)}}e._va=s,e._primitiveType=i[0].primitiveType,e.releaseGeometryInstances&&(e.geometryInstances=void 0),e._geometries=void 0,QE(e,t,Sr.COMPLETE,void 0)}function iPe(e,t,n,i){let o=n.getRenderState(),r;i?(r=Ye(o,!1),r.cull={enabled:!0,face:Ti.BACK},e._frontFaceRS=Ue.fromCache(r),r.cull.face=Ti.FRONT,e._backFaceRS=Ue.fromCache(r)):(e._frontFaceRS=Ue.fromCache(o),e._backFaceRS=e._frontFaceRS),r=Ye(o,!1),l(e._depthFailAppearance)&&(r.depthTest.enabled=!1),l(e._depthFailAppearance)&&(o=e._depthFailAppearance.getRenderState(),r=Ye(o,!1),r.depthTest.func=cc.GREATER,i?(r.cull={enabled:!0,face:Ti.BACK},e._frontFaceDepthFailRS=Ue.fromCache(r),r.cull.face=Ti.FRONT,e._backFaceDepthFailRS=Ue.fromCache(r)):(e._frontFaceDepthFailRS=Ue.fromCache(r),e._backFaceDepthFailRS=e._frontFaceRS))}function oPe(e,t,n){let i=t.context,o=e._attributeLocations,r=e._batchTable.getVertexShaderCallback()(n.vertexShaderSource);r=Cr._appendOffsetToShader(e,r),r=Cr._appendShowToShader(e,r),r=Cr._appendDistanceDisplayConditionToShader(e,r,t.scene3DOnly),r=Gne(r),r=Cr._updateColorAttribute(e,r,!1),r=Ine(e,r),r=Cr._modifyShaderPosition(e,r,t.scene3DOnly);let s=n.getFragmentShaderSource();s=Ene(s),e._sp=$t.replaceCache({context:i,shaderProgram:e._sp,vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:o}),Xne(e._sp,o),l(e._depthFailAppearance)&&(r=e._batchTable.getVertexShaderCallback()(e._depthFailAppearance.vertexShaderSource),r=Cr._appendShowToShader(e,r),r=Cr._appendDistanceDisplayConditionToShader(e,r,t.scene3DOnly),r=Gne(r),r=Cr._updateColorAttribute(e,r,!0),r=Ine(e,r),r=Cr._modifyShaderPosition(e,r,t.scene3DOnly),r=HWe(r),s=e._depthFailAppearance.getFragmentShaderSource(),s=Ene(s),s=KWe(s),e._spDepthFail=$t.replaceCache({context:i,shaderProgram:e._spDepthFail,vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:o}),Xne(e._spDepthFail,o))}var JE=new F,vne=new m;function wne(e,t,n,i){let o=l(n)?n._uniforms:void 0,r={},s=t.uniforms;if(l(s))for(let c in s)s.hasOwnProperty(c)&&(r[c]=JWe(s,c));let a=St(r,o);return a=e._batchTable.getUniformMapCallback()(a),l(e.rtcCenter)&&(a.u_modifiedModelView=function(){let c=i.context.uniformState.view;return F.multiply(c,e._modelMatrix,JE),F.multiplyByPoint(JE,e.rtcCenter,vne),F.setTranslation(JE,vne,JE),JE}),a}function rPe(e,t,n,i,o,r,s,a){let c=wne(e,t,n,a),d;l(e._depthFailAppearance)&&(d=wne(e,e._depthFailAppearance,e._depthFailAppearance.material,a));let u=i?Ee.TRANSLUCENT:Ee.OPAQUE,h=o?2:1;h*=l(e._depthFailAppearance)?2:1,r.length=e._va.length*h;let p=r.length,g=0;for(let f=0;f<p;++f){let y;o&&(y=r[f],l(y)||(y=r[f]=new $e({owner:e,primitiveType:e._primitiveType})),y.vertexArray=e._va[g],y.renderState=e._backFaceRS,y.shaderProgram=e._sp,y.uniformMap=c,y.pass=u,++f),y=r[f],l(y)||(y=r[f]=new $e({owner:e,primitiveType:e._primitiveType})),y.vertexArray=e._va[g],y.renderState=e._frontFaceRS,y.shaderProgram=e._sp,y.uniformMap=c,y.pass=u,l(e._depthFailAppearance)&&(o&&(++f,y=r[f],l(y)||(y=r[f]=new $e({owner:e,primitiveType:e._primitiveType})),y.vertexArray=e._va[g],y.renderState=e._backFaceDepthFailRS,y.shaderProgram=e._spDepthFail,y.uniformMap=d,y.pass=u),++f,y=r[f],l(y)||(y=r[f]=new $e({owner:e,primitiveType:e._primitiveType})),y.vertexArray=e._va[g],y.renderState=e._frontFaceDepthFailRS,y.shaderProgram=e._spDepthFail,y.uniformMap=d,y.pass=u),++g}}Cr._updateBoundingVolumes=function(e,t,n,i){let o,r,s;if(i||!F.equals(n,e._modelMatrix))for(F.clone(n,e._modelMatrix),r=e._boundingSpheres.length,o=0;o<r;++o)s=e._boundingSpheres[o],l(s)&&(e._boundingSphereWC[o]=le.transform(s,n,e._boundingSphereWC[o]),t.scene3DOnly||(e._boundingSphere2D[o]=le.clone(e._boundingSphereCV[o],e._boundingSphere2D[o]),e._boundingSphere2D[o].center.x=0,e._boundingSphereMorph[o]=le.union(e._boundingSphereWC[o],e._boundingSphereCV[o])));let a=e.appearance.pixelSize;if(l(a))for(r=e._boundingSpheres.length,o=0;o<r;++o){s=e._boundingSpheres[o];let c=e._boundingSphereWC[o],u=t.camera.getPixelSize(s,t.context.drawingBufferWidth,t.context.drawingBufferHeight)*a;c.radius=s.radius+u}};function sPe(e,t,n,i,o,r,s,a){Cr._updateBoundingVolumes(e,t,o);let c;t.mode===oe.SCENE3D?c=e._boundingSphereWC:t.mode===oe.COLUMBUS_VIEW?c=e._boundingSphereCV:t.mode===oe.SCENE2D&&l(e._boundingSphere2D)?c=e._boundingSphere2D:l(e._boundingSphereMorph)&&(c=e._boundingSphereMorph);let d=t.commandList,u=t.passes;if(u.render||u.pick){let h=e.allowPicking,p=_n.castShadows(e.shadows),g=_n.receiveShadows(e.shadows),f=n.length,y=a?2:1;y*=l(e._depthFailAppearance)?2:1;for(let x=0;x<f;++x){let S=Math.floor(x/y),C=n[x];C.modelMatrix=o,C.boundingVolume=c[S],C.cull=r,C.debugShowBoundingVolume=s,C.castShadows=p,C.receiveShadows=g,h?C.pickId="v_pickColor":C.pickId=void 0,d.push(C)}}}Cr.prototype.update=function(e){if(!l(this.geometryInstances)&&this._va.length===0||l(this.geometryInstances)&&Array.isArray(this.geometryInstances)&&this.geometryInstances.length===0||!l(this.appearance)||e.mode!==oe.SCENE3D&&e.scene3DOnly||!e.passes.render&&!e.passes.pick)return;if(l(this._error))throw this._error;if(this._state===Sr.FAILED)return;let t=e.context;if(l(this._batchTable)||DWe(this,t),this._batchTable.attributes.length>0){if(Nt.maximumVertexTextureImageUnits===0)throw new ae("Vertex texture fetch support is required to render primitives with per-instance attributes. The maximum number of vertex texture image units must be greater than zero.");this._batchTable.update(e)}if(this._state!==Sr.COMPLETE&&this._state!==Sr.COMBINED&&(this.asynchronous?jWe(this,e):qWe(this,e)),this._state===Sr.COMBINED&&(ePe(this,e),Pne(this,e),nPe(this,e)),!this.show||this._state!==Sr.COMPLETE)return;this._batchTableOffsetsUpdated||Pne(this,e),this._recomputeBoundingSpheres&&$We(this,e);let n=this.appearance,i=n.material,o=!1,r=!1;this._appearance!==n?(this._appearance=n,this._material=i,o=!0,r=!0):this._material!==i&&(this._material=i,r=!0);let s=this.depthFailAppearance,a=l(s)?s.material:void 0;this._depthFailAppearance!==s?(this._depthFailAppearance=s,this._depthFailMaterial=a,o=!0,r=!0):this._depthFailMaterial!==a&&(this._depthFailMaterial=a,r=!0);let c=this._appearance.isTranslucent();this._translucent!==c&&(this._translucent=c,o=!0),l(this._material)&&this._material.update(t);let d=n.closed&&c;o&&(this._createRenderStatesFunction??iPe)(this,t,n,d),r&&(this._createShaderProgramFunction??oPe)(this,e,n),(o||r)&&(this._createCommandsFunction??rPe)(this,n,i,c,d,this._colorCommands,this._pickCommands,e),(this._updateAndQueueCommandsFunction??sPe)(this,e,this._colorCommands,this._pickCommands,this.modelMatrix,this.cull,this.debugShowBoundingVolume,d)};var aPe=new le,cPe=new le;function Une(e,t,n){if(n===rn.TOP){let i=le.clone(e,aPe),o=le.clone(e,cPe);o.center=m.add(o.center,t,o.center),e=le.union(i,o,e)}else n===rn.ALL&&(e.center=m.add(e.center,t,e.center));return e}function lPe(e,t,n){return function(){let i=e.getBatchedAttribute(t,n),o=e.attributes[n],r=o.componentsPerAttribute,s=Q.createTypedArray(o.componentDatatype,r);return l(i.constructor.pack)?i.constructor.pack(i,s,0):s[0]=i,s}}function dPe(e,t,n,i,o){return function(r){let s=Ane(r);e.setBatchedAttribute(t,n,s),o==="offset"&&(i._recomputeBoundingSpheres=!0,i._batchTableOffsetsUpdated=!1)}}var uPe=new m;function mPe(e,t,n){t.boundingSphere={get:function(){let i=e._instanceBoundingSpheres[n];if(l(i)){i=i.clone();let o=e.modelMatrix,r=t.offset;l(r)&&Une(i,m.fromArray(r.get(),0,uPe),e._offsetInstanceExtend[n]),l(o)&&(i=le.transform(i,o))}return i}},t.boundingSphereCV={get:function(){return e._instanceBoundingSpheresCV[n]}}}function hPe(e,t,n){t.pickId={get:function(){return e._pickIds[n]}}}Cr.prototype.getGeometryInstanceAttributes=function(e){let t=this._perInstanceAttributeCache.get(e);if(l(t))return t;let n=-1,i=this._lastPerInstanceAttributeIndex,o=this._instanceIds,r=o.length;for(let d=0;d<r;++d){let u=(i+d)%r;if(e===o[u]){n=u;break}}if(n===-1)return;let s=this._batchTable,a=this._batchTableAttributeIndices;t={};let c={};for(let d in a)if(a.hasOwnProperty(d)){let u=a[d];c[d]={get:lPe(s,n,u),set:dPe(s,n,u,this,d)}}return mPe(this,c,n),hPe(this,c,n),Object.defineProperties(t,c),this._lastPerInstanceAttributeIndex=n,this._perInstanceAttributeCache.set(e,t),t};Cr.prototype.isDestroyed=function(){return!1};Cr.prototype.destroy=function(){let e,t;this._sp=this._sp&&this._sp.destroy(),this._spDepthFail=this._spDepthFail&&this._spDepthFail.destroy();let n=this._va;for(e=n.length,t=0;t<e;++t)n[t].destroy();this._va=void 0;let i=this._pickIds;for(e=i.length,t=0;t<e;++t)i[t].destroy();return this._pickIds=void 0,this._batchTable=this._batchTable&&this._batchTable.destroy(),this._instanceIds=void 0,this._perInstanceAttributeCache=void 0,this._attributeLocations=void 0,me(this)};function QE(e,t,n,i){e._error=i,e._state=n,t.afterRender.push(function(){e._ready=e._state===Sr.COMPLETE||e._state===Sr.FAILED})}var In=Cr;var T4t=_(T(),1);var i4t=_(T(),1);function fPe(e){e=e??Y.EMPTY_OBJECT,this.componentDatatype=e.componentDatatype,this.componentsPerAttribute=e.componentsPerAttribute,this.normalize=e.normalize??!1,this.value=e.value}var lc=fPe;var r4t=_(T(),1),uC=`#ifdef TEXTURE_COORDINATES #ifdef SPHERICAL in vec4 v_sphericalExtents; #else // SPHERICAL in vec2 v_inversePlaneExtents; in vec4 v_westPlane; in vec4 v_southPlane; #endif // SPHERICAL in vec3 v_uvMinAndSphericalLongitudeRotation; in vec3 v_uMaxAndInverseDistance; in vec3 v_vMaxAndInverseDistance; #endif // TEXTURE_COORDINATES #ifdef PER_INSTANCE_COLOR in vec4 v_color; #endif #ifdef NORMAL_EC vec3 getEyeCoordinate3FromWindowCoordinate(vec2 fragCoord, float logDepthOrDepth) { vec4 eyeCoordinate = czm_windowToEyeCoordinates(fragCoord, logDepthOrDepth); return eyeCoordinate.xyz / eyeCoordinate.w; } vec3 vectorFromOffset(vec4 eyeCoordinate, vec2 positiveOffset) { vec2 glFragCoordXY = gl_FragCoord.xy; // Sample depths at both offset and negative offset float upOrRightLogDepth = czm_unpackDepth(texture(czm_globeDepthTexture, (glFragCoordXY + positiveOffset) / czm_viewport.zw)); float downOrLeftLogDepth = czm_unpackDepth(texture(czm_globeDepthTexture, (glFragCoordXY - positiveOffset) / czm_viewport.zw)); // Explicitly evaluate both paths // Necessary for multifrustum and for edges of the screen bvec2 upOrRightInBounds = lessThan(glFragCoordXY + positiveOffset, czm_viewport.zw); float useUpOrRight = float(upOrRightLogDepth > 0.0 && upOrRightInBounds.x && upOrRightInBounds.y); float useDownOrLeft = float(useUpOrRight == 0.0); vec3 upOrRightEC = getEyeCoordinate3FromWindowCoordinate(glFragCoordXY + positiveOffset, upOrRightLogDepth); vec3 downOrLeftEC = getEyeCoordinate3FromWindowCoordinate(glFragCoordXY - positiveOffset, downOrLeftLogDepth); return (upOrRightEC - (eyeCoordinate.xyz / eyeCoordinate.w)) * useUpOrRight + ((eyeCoordinate.xyz / eyeCoordinate.w) - downOrLeftEC) * useDownOrLeft; } #endif // NORMAL_EC void main(void) { #ifdef REQUIRES_EC float logDepthOrDepth = czm_unpackDepth(texture(czm_globeDepthTexture, gl_FragCoord.xy / czm_viewport.zw)); vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth); #endif #ifdef REQUIRES_WC vec4 worldCoordinate4 = czm_inverseView * eyeCoordinate; vec3 worldCoordinate = worldCoordinate4.xyz / worldCoordinate4.w; #endif #ifdef TEXTURE_COORDINATES vec2 uv; #ifdef SPHERICAL // Treat world coords as a sphere normal for spherical coordinates vec2 sphericalLatLong = czm_approximateSphericalCoordinates(worldCoordinate); sphericalLatLong.y += v_uvMinAndSphericalLongitudeRotation.z; sphericalLatLong.y = czm_branchFreeTernary(sphericalLatLong.y < czm_pi, sphericalLatLong.y, sphericalLatLong.y - czm_twoPi); uv.x = (sphericalLatLong.y - v_sphericalExtents.y) * v_sphericalExtents.w; uv.y = (sphericalLatLong.x - v_sphericalExtents.x) * v_sphericalExtents.z; #else // SPHERICAL // Unpack planes and transform to eye space uv.x = czm_planeDistance(v_westPlane, eyeCoordinate.xyz / eyeCoordinate.w) * v_inversePlaneExtents.x; uv.y = czm_planeDistance(v_southPlane, eyeCoordinate.xyz / eyeCoordinate.w) * v_inversePlaneExtents.y; #endif // SPHERICAL #endif // TEXTURE_COORDINATES #ifdef PICK #ifdef CULL_FRAGMENTS // When classifying translucent geometry, logDepthOrDepth == 0.0 // indicates a region that should not be classified, possibly due to there // being opaque pixels there in another buffer. // Check for logDepthOrDepth != 0.0 to make sure this should be classified. if (0.0 <= uv.x && uv.x <= 1.0 && 0.0 <= uv.y && uv.y <= 1.0 || logDepthOrDepth != 0.0) { out_FragColor.a = 1.0; // 0.0 alpha leads to discard from ShaderSource.createPickFragmentShaderSource czm_writeDepthClamp(); } #else // CULL_FRAGMENTS out_FragColor.a = 1.0; #endif // CULL_FRAGMENTS #else // PICK #ifdef CULL_FRAGMENTS // When classifying translucent geometry, logDepthOrDepth == 0.0 // indicates a region that should not be classified, possibly due to there // being opaque pixels there in another buffer. if (uv.x <= 0.0 || 1.0 <= uv.x || uv.y <= 0.0 || 1.0 <= uv.y || logDepthOrDepth == 0.0) { discard; } #endif #ifdef NORMAL_EC // Compute normal by sampling adjacent pixels in 2x2 block in screen space vec3 downUp = vectorFromOffset(eyeCoordinate, vec2(0.0, 1.0)); vec3 leftRight = vectorFromOffset(eyeCoordinate, vec2(1.0, 0.0)); vec3 normalEC = normalize(cross(leftRight, downUp)); #endif #ifdef PER_INSTANCE_COLOR vec4 color = czm_gammaCorrect(v_color); #ifdef FLAT out_FragColor = color; #else // FLAT czm_materialInput materialInput; materialInput.normalEC = normalEC; materialInput.positionToEyeEC = -eyeCoordinate.xyz; czm_material material = czm_getDefaultMaterial(materialInput); material.diffuse = color.rgb; material.alpha = color.a; out_FragColor = czm_phong(normalize(-eyeCoordinate.xyz), material, czm_lightDirectionEC); #endif // FLAT // Premultiply alpha. Required for classification primitives on translucent globe. out_FragColor.rgb *= out_FragColor.a; #else // PER_INSTANCE_COLOR // Material support. // USES_ is distinct from REQUIRES_, because some things are dependencies of each other or // dependencies for culling but might not actually be used by the material. czm_materialInput materialInput; #ifdef USES_NORMAL_EC materialInput.normalEC = normalEC; #endif #ifdef USES_POSITION_TO_EYE_EC materialInput.positionToEyeEC = -eyeCoordinate.xyz; #endif #ifdef USES_TANGENT_TO_EYE materialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(worldCoordinate, normalEC); #endif #ifdef USES_ST // Remap texture coordinates from computed (approximately aligned with cartographic space) to the desired // texture coordinate system, which typically forms a tight oriented bounding box around the geometry. // Shader is provided a set of reference points for remapping. materialInput.st.x = czm_lineDistance(v_uvMinAndSphericalLongitudeRotation.xy, v_uMaxAndInverseDistance.xy, uv) * v_uMaxAndInverseDistance.z; materialInput.st.y = czm_lineDistance(v_uvMinAndSphericalLongitudeRotation.xy, v_vMaxAndInverseDistance.xy, uv) * v_vMaxAndInverseDistance.z; #endif czm_material material = czm_getMaterial(materialInput); #ifdef FLAT out_FragColor = vec4(material.diffuse + material.emission, material.alpha); #else // FLAT out_FragColor = czm_phong(normalize(-eyeCoordinate.xyz), material, czm_lightDirectionEC); #endif // FLAT // Premultiply alpha. Required for classification primitives on translucent globe. out_FragColor.rgb *= out_FragColor.a; #endif // PER_INSTANCE_COLOR czm_writeDepthClamp(); #endif // PICK } `;function Zu(e,t,n){this._projectionExtentDefines={eastMostYhighDefine:"",eastMostYlowDefine:"",westMostYhighDefine:"",westMostYlowDefine:""};let i=new AY;i.requiresTextureCoordinates=e,i.requiresEC=!n.flat;let o=new AY;if(o.requiresTextureCoordinates=e,n instanceof dn)i.requiresNormalEC=!n.flat;else{let r=`${n.material.shaderSource} ${n.fragmentShaderSource}`;i.normalEC=r.indexOf("materialInput.normalEC")!==-1||r.indexOf("czm_getDefaultMaterial")!==-1,i.positionToEyeEC=r.indexOf("materialInput.positionToEyeEC")!==-1,i.tangentToEyeMatrix=r.indexOf("materialInput.tangentToEyeMatrix")!==-1,i.st=r.indexOf("materialInput.st")!==-1}this._colorShaderDependencies=i,this._pickShaderDependencies=o,this._appearance=n,this._extentsCulling=e,this._planarExtents=t}Zu.prototype.createFragmentShader=function(e){let t=this._appearance,n=this._colorShaderDependencies,i=[];!e&&!this._planarExtents&&i.push("SPHERICAL"),n.requiresEC&&i.push("REQUIRES_EC"),n.requiresWC&&i.push("REQUIRES_WC"),n.requiresTextureCoordinates&&i.push("TEXTURE_COORDINATES"),this._extentsCulling&&i.push("CULL_FRAGMENTS"),n.requiresNormalEC&&i.push("NORMAL_EC"),t instanceof dn&&i.push("PER_INSTANCE_COLOR"),n.normalEC&&i.push("USES_NORMAL_EC"),n.positionToEyeEC&&i.push("USES_POSITION_TO_EYE_EC"),n.tangentToEyeMatrix&&i.push("USES_TANGENT_TO_EYE"),n.st&&i.push("USES_ST"),t.flat&&i.push("FLAT");let o="";return t instanceof dn||(o=t.material.shaderSource),new De({defines:i,sources:[o,uC]})};Zu.prototype.createPickFragmentShader=function(e){let t=this._pickShaderDependencies,n=["PICK"];return!e&&!this._planarExtents&&n.push("SPHERICAL"),t.requiresEC&&n.push("REQUIRES_EC"),t.requiresWC&&n.push("REQUIRES_WC"),t.requiresTextureCoordinates&&n.push("TEXTURE_COORDINATES"),this._extentsCulling&&n.push("CULL_FRAGMENTS"),new De({defines:n,sources:[uC],pickColorQualifier:"in"})};Zu.prototype.createVertexShader=function(e,t,n,i){return Jne(this._colorShaderDependencies,this._planarExtents,n,e,t,this._appearance,i,this._projectionExtentDefines)};Zu.prototype.createPickVertexShader=function(e,t,n,i){return Jne(this._pickShaderDependencies,this._planarExtents,n,e,t,void 0,i,this._projectionExtentDefines)};var Dne=new m,Bne=new he,One={high:0,low:0};function Jne(e,t,n,i,o,r,s,a){let c=i.slice();if(a.eastMostYhighDefine===""){let d=Bne;d.longitude=X.PI,d.latitude=0,d.height=0;let u=s.project(d,Dne),h=On.encode(u.x,One);a.eastMostYhighDefine=`EAST_MOST_X_HIGH ${h.high.toFixed(`${h.high}`.length+1)}`,a.eastMostYlowDefine=`EAST_MOST_X_LOW ${h.low.toFixed(`${h.low}`.length+1)}`;let p=Bne;p.longitude=-X.PI,p.latitude=0,p.height=0;let g=s.project(p,Dne);h=On.encode(g.x,One),a.westMostYhighDefine=`WEST_MOST_X_HIGH ${h.high.toFixed(`${h.high}`.length+1)}`,a.westMostYlowDefine=`WEST_MOST_X_LOW ${h.low.toFixed(`${h.low}`.length+1)}`}return n&&(c.push(a.eastMostYhighDefine),c.push(a.eastMostYlowDefine),c.push(a.westMostYhighDefine),c.push(a.westMostYlowDefine)),l(r)&&r instanceof dn&&c.push("PER_INSTANCE_COLOR"),e.requiresTextureCoordinates&&(c.push("TEXTURE_COORDINATES"),t||n||c.push("SPHERICAL"),n&&c.push("COLUMBUS_VIEW_2D")),new De({defines:c,sources:[o]})}function AY(){this._requiresEC=!1,this._requiresWC=!1,this._requiresNormalEC=!1,this._requiresTextureCoordinates=!1,this._usesNormalEC=!1,this._usesPositionToEyeEC=!1,this._usesTangentToEyeMat=!1,this._usesSt=!1}Object.defineProperties(AY.prototype,{requiresEC:{get:function(){return this._requiresEC},set:function(e){this._requiresEC=e||this._requiresEC}},requiresWC:{get:function(){return this._requiresWC},set:function(e){this._requiresWC=e||this._requiresWC,this.requiresEC=this._requiresWC}},requiresNormalEC:{get:function(){return this._requiresNormalEC},set:function(e){this._requiresNormalEC=e||this._requiresNormalEC,this.requiresEC=this._requiresNormalEC}},requiresTextureCoordinates:{get:function(){return this._requiresTextureCoordinates},set:function(e){this._requiresTextureCoordinates=e||this._requiresTextureCoordinates,this.requiresWC=this._requiresTextureCoordinates}},normalEC:{set:function(e){this.requiresNormalEC=e,this._usesNormalEC=e},get:function(){return this._usesNormalEC}},tangentToEyeMatrix:{set:function(e){this.requiresWC=e,this.requiresNormalEC=e,this._usesTangentToEyeMat=e},get:function(){return this._usesTangentToEyeMat}},positionToEyeEC:{set:function(e){this.requiresEC=e,this._usesPositionToEyeEC=e},get:function(){return this._usesPositionToEyeEC}},st:{set:function(e){this.requiresTextureCoordinates=e,this._usesSt=e},get:function(){return this._usesSt}}});function Yne(e,t,n){return Math.abs((t.y-e.y)*n.x-(t.x-e.x)*n.y+t.x*e.y-t.y*e.x)/U.distance(t,e)}var pPe=[new U,new U,new U,new U];function Qne(e,t){let n=pPe,i=U.unpack(t,0,n[0]),o=U.unpack(t,2,n[1]),r=U.unpack(t,4,n[2]);e.uMaxVmax=new lc({componentDatatype:Q.FLOAT,componentsPerAttribute:4,normalize:!1,value:[o.x,o.y,r.x,r.y]});let s=1/Yne(i,o,r),a=1/Yne(i,r,o);e.uvMinAndExtents=new lc({componentDatatype:Q.FLOAT,componentsPerAttribute:4,normalize:!1,value:[i.x,i.y,s,a]})}var jne=new he,qne=new m,bPe=new m,gPe=new m,r5={high:0,low:0};function $ne(e,t,n){let i=jne;i.height=0,i.longitude=e.west,i.latitude=e.south;let o=t.project(i,qne);i.latitude=e.north;let r=t.project(i,bPe);i.longitude=e.east,i.latitude=e.south;let s=t.project(i,gPe),a=[0,0,0,0],c=[0,0,0,0],d=On.encode(o.x,r5);a[0]=d.high,c[0]=d.low,d=On.encode(o.y,r5),a[1]=d.high,c[1]=d.low,d=On.encode(r.y,r5),a[2]=d.high,c[2]=d.low,d=On.encode(s.x,r5),a[3]=d.high,c[3]=d.low,n.planes2D_HIGH=new lc({componentDatatype:Q.FLOAT,componentsPerAttribute:4,normalize:!1,value:a}),n.planes2D_LOW=new lc({componentDatatype:Q.FLOAT,componentsPerAttribute:4,normalize:!1,value:c})}var yPe=new F,xPe=new F,zne=new m,_Pe=new he,TPe=[new he,new he,new he,new he,new he,new he,new he,new he];function SPe(e,t,n,i,o,r){let s=ce.center(e,_Pe);s.height=n;let a=he.toCartesian(s,t,zne),c=Pt.eastNorthUpToFixedFrame(a,t,yPe),d=F.inverse(c,xPe),u=e.west,h=e.east,p=e.north,g=e.south,f=TPe;f[0].latitude=g,f[0].longitude=u,f[1].latitude=p,f[1].longitude=u,f[2].latitude=p,f[2].longitude=h,f[3].latitude=g,f[3].longitude=h;let y=(u+h)*.5,x=(p+g)*.5;f[4].latitude=g,f[4].longitude=y,f[5].latitude=p,f[5].longitude=y,f[6].latitude=x,f[6].longitude=u,f[7].latitude=x,f[7].longitude=h;let S=Number.POSITIVE_INFINITY,C=Number.NEGATIVE_INFINITY,V=Number.POSITIVE_INFINITY,L=Number.NEGATIVE_INFINITY;for(let W=0;W<8;W++){f[W].height=n;let v=he.toCartesian(f[W],t,zne);F.multiplyByPoint(d,v,v),v.z=0,S=Math.min(S,v.x),C=Math.max(C,v.x),V=Math.min(V,v.y),L=Math.max(L,v.y)}let Z=i;Z.x=S,Z.y=V,Z.z=0,F.multiplyByPoint(c,Z,Z);let E=o;E.x=C,E.y=V,E.z=0,F.multiplyByPoint(c,E,E),m.subtract(E,Z,o);let P=r;P.x=S,P.y=L,P.z=0,F.multiplyByPoint(c,P,P),m.subtract(P,Z,r)}var CPe=new m,VPe=new m,LPe=new On;Zu.getPlanarTextureCoordinateAttributes=function(e,t,n,i,o){let r=qne,s=CPe,a=VPe;SPe(e,n,o??0,r,s,a);let c={};Qne(c,t);let d=On.fromCartesian(r,LPe);return c.southWest_HIGH=new lc({componentDatatype:Q.FLOAT,componentsPerAttribute:3,normalize:!1,value:m.pack(d.high,[0,0,0])}),c.southWest_LOW=new lc({componentDatatype:Q.FLOAT,componentsPerAttribute:3,normalize:!1,value:m.pack(d.low,[0,0,0])}),c.eastward=new lc({componentDatatype:Q.FLOAT,componentsPerAttribute:3,normalize:!1,value:m.pack(s,[0,0,0])}),c.northward=new lc({componentDatatype:Q.FLOAT,componentsPerAttribute:3,normalize:!1,value:m.pack(a,[0,0,0])}),$ne(e,i,c),c};var RPe=new m;function Hne(e,t,n,i){let o=jne;o.latitude=e,o.longitude=t,o.height=0;let r=he.toCartesian(o,n,RPe),s=Math.sqrt(r.x*r.x+r.y*r.y),a=X.fastApproximateAtan2(s,r.z),c=X.fastApproximateAtan2(r.x,r.y);return i.x=a,i.y=c,i}var Kne=new U;Zu.getSphericalExtentGeometryInstanceAttributes=function(e,t,n,i){let o=Hne(e.south,e.west,n,Kne),r=o.x,s=o.y,a=Hne(e.north,e.east,n,Kne),c=a.x,d=a.y,u=0;s>d&&(u=X.PI-s,s=-X.PI,d+=u),r-=X.EPSILON5,s-=X.EPSILON5,c+=X.EPSILON5,d+=X.EPSILON5;let h=1/(d-s),p=1/(c-r),g={sphericalExtents:new lc({componentDatatype:Q.FLOAT,componentsPerAttribute:4,normalize:!1,value:[r,s,p,h]}),longitudeRotation:new lc({componentDatatype:Q.FLOAT,componentsPerAttribute:1,normalize:!1,value:[u]})};return Qne(g,t),$ne(e,i,g),g};Zu.hasAttributesForTextureCoordinatePlanes=function(e){return l(e.southWest_HIGH)&&l(e.southWest_LOW)&&l(e.northward)&&l(e.eastward)&&l(e.planes2D_HIGH)&&l(e.planes2D_LOW)&&l(e.uMaxVmax)&&l(e.uvMinAndExtents)};Zu.hasAttributesForSphericalExtents=function(e){return l(e.sphericalExtents)&&l(e.longitudeRotation)&&l(e.planes2D_HIGH)&&l(e.planes2D_LOW)&&l(e.uMaxVmax)&&l(e.uvMinAndExtents)};function ZPe(e){return Math.max(e.width,e.height)>Zu.MAX_WIDTH_FOR_PLANAR_EXTENTS}Zu.shouldUseSphericalCoordinates=function(e){return ZPe(e)};Zu.MAX_WIDTH_FOR_PLANAR_EXTENTS=X.toRadians(1);var gd=Zu;var X4t=_(T(),1);var V4t=_(T(),1);var GPe={NEVER:ie.NEVER,LESS:ie.LESS,EQUAL:ie.EQUAL,LESS_OR_EQUAL:ie.LEQUAL,GREATER:ie.GREATER,NOT_EQUAL:ie.NOTEQUAL,GREATER_OR_EQUAL:ie.GEQUAL,ALWAYS:ie.ALWAYS},Dn=Object.freeze(GPe);var Z4t=_(T(),1);var EPe={ZERO:ie.ZERO,KEEP:ie.KEEP,REPLACE:ie.REPLACE,INCREMENT:ie.INCR,DECREMENT:ie.DECR,INVERT:ie.INVERT,INCREMENT_WRAP:ie.INCR_WRAP,DECREMENT_WRAP:ie.DECR_WRAP},ht=Object.freeze(EPe);var s5={CESIUM_3D_TILE_MASK:128,SKIP_LOD_MASK:112,SKIP_LOD_BIT_SHIFT:4,CLASSIFICATION_MASK:15};s5.setCesium3DTileBit=function(){return{enabled:!0,frontFunction:Dn.ALWAYS,frontOperation:{fail:ht.KEEP,zFail:ht.KEEP,zPass:ht.REPLACE},backFunction:Dn.ALWAYS,backOperation:{fail:ht.KEEP,zFail:ht.KEEP,zPass:ht.REPLACE},reference:s5.CESIUM_3D_TILE_MASK,mask:s5.CESIUM_3D_TILE_MASK}};var Ut=Object.freeze(s5);function Xx(e){e=e??Y.EMPTY_OBJECT;let t=e.geometryInstances;this.geometryInstances=t,this.show=e.show??!0,this.classificationType=e.classificationType??Un.BOTH,this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this.debugShowShadowVolume=e.debugShowShadowVolume??!1,this._debugShowShadowVolume=!1,this._extruded=e._extruded??!1,this._uniformMap=e._uniformMap,this._sp=void 0,this._spStencil=void 0,this._spPick=void 0,this._spColor=void 0,this._spPick2D=void 0,this._spColor2D=void 0,this._rsStencilDepthPass=void 0,this._rsStencilDepthPass3DTiles=void 0,this._rsColorPass=void 0,this._rsPickPass=void 0,this._commandsIgnoreShow=[],this._ready=!1,this._primitive=void 0,this._pickPrimitive=e._pickPrimitive,this._hasSphericalExtentsAttribute=!1,this._hasPlanarExtentsAttributes=!1,this._hasPerColorAttribute=!1,this.appearance=e.appearance,this._createBoundingVolumeFunction=e._createBoundingVolumeFunction,this._updateAndQueueCommandsFunction=e._updateAndQueueCommandsFunction,this._usePickOffsets=!1,this._primitiveOptions={geometryInstances:void 0,appearance:void 0,vertexCacheOptimize:e.vertexCacheOptimize??!1,interleave:e.interleave??!1,releaseGeometryInstances:e.releaseGeometryInstances??!0,allowPicking:e.allowPicking??!0,asynchronous:e.asynchronous??!0,compressVertices:e.compressVertices??!0,_createBoundingVolumeFunction:void 0,_createRenderStatesFunction:void 0,_createShaderProgramFunction:void 0,_createCommandsFunction:void 0,_updateAndQueueCommandsFunction:void 0,_createPickOffsets:!0}}Object.defineProperties(Xx.prototype,{vertexCacheOptimize:{get:function(){return this._primitiveOptions.vertexCacheOptimize}},interleave:{get:function(){return this._primitiveOptions.interleave}},releaseGeometryInstances:{get:function(){return this._primitiveOptions.releaseGeometryInstances}},allowPicking:{get:function(){return this._primitiveOptions.allowPicking}},asynchronous:{get:function(){return this._primitiveOptions.asynchronous}},compressVertices:{get:function(){return this._primitiveOptions.compressVertices}},ready:{get:function(){return this._ready}},_needs2DShader:{get:function(){return this._hasPlanarExtentsAttributes||this._hasSphericalExtentsAttribute}}});Xx.isSupported=function(e){return e.context.stencilBuffer};function mC(e,t){let n=t?Dn.EQUAL:Dn.ALWAYS;return{colorMask:{red:!1,green:!1,blue:!1,alpha:!1},stencilTest:{enabled:e,frontFunction:n,frontOperation:{fail:ht.KEEP,zFail:ht.DECREMENT_WRAP,zPass:ht.KEEP},backFunction:n,backOperation:{fail:ht.KEEP,zFail:ht.INCREMENT_WRAP,zPass:ht.KEEP},reference:Ut.CESIUM_3D_TILE_MASK,mask:Ut.CESIUM_3D_TILE_MASK},stencilMask:Ut.CLASSIFICATION_MASK,depthTest:{enabled:!0,func:cc.LESS_OR_EQUAL},depthMask:!1}}function NY(e){return{stencilTest:{enabled:e,frontFunction:Dn.NOT_EQUAL,frontOperation:{fail:ht.ZERO,zFail:ht.ZERO,zPass:ht.ZERO},backFunction:Dn.NOT_EQUAL,backOperation:{fail:ht.ZERO,zFail:ht.ZERO,zPass:ht.ZERO},reference:0,mask:Ut.CLASSIFICATION_MASK},stencilMask:Ut.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1,blending:un.PRE_MULTIPLIED_ALPHA_BLEND}}var IPe={stencilTest:{enabled:!0,frontFunction:Dn.NOT_EQUAL,frontOperation:{fail:ht.ZERO,zFail:ht.ZERO,zPass:ht.ZERO},backFunction:Dn.NOT_EQUAL,backOperation:{fail:ht.ZERO,zFail:ht.ZERO,zPass:ht.ZERO},reference:0,mask:Ut.CLASSIFICATION_MASK},stencilMask:Ut.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1};function XPe(e,t,n,i){if(l(e._rsStencilDepthPass))return;let o=!e.debugShowShadowVolume;e._rsStencilDepthPass=Ue.fromCache(mC(o,!1)),e._rsStencilDepthPass3DTiles=Ue.fromCache(mC(o,!0)),e._rsColorPass=Ue.fromCache(NY(o,!1)),e._rsPickPass=Ue.fromCache(IPe)}function WPe(e,t){if(!e.compressVertices)return t;if(t.search(/in\s+vec3\s+extrudeDirection;/g)!==-1){let n="compressedAttributes",i=`in vec2 ${n};`,o=`vec3 extrudeDirection; `,r=` extrudeDirection = czm_octDecode(${n}, 65535.0); `,s=t;s=s.replace(/in\s+vec3\s+extrudeDirection;/g,""),s=De.replaceMain(s,"czm_non_compressed_main");let a=`void main() { ${r} czm_non_compressed_main(); }`;return[i,o,s,a].join(` `)}}function PPe(e,t){let n=t.context,i=e._primitive,o=zE;o=e._primitive._batchTable.getVertexShaderCallback()(o),o=In._appendDistanceDisplayConditionToShader(i,o),o=In._modifyShaderPosition(e,o,t.scene3DOnly),o=In._updateColorAttribute(i,o);let r=e._hasPlanarExtentsAttributes,s=r||e._hasSphericalExtentsAttribute;e._extruded&&(o=WPe(i,o));let a=e._extruded?"EXTRUDED_GEOMETRY":"",c=new De({defines:[a],sources:[o]}),d=new De({sources:[J0]}),u=e._primitive._attributeLocations,h=new gd(s,r,e.appearance);if(e._spStencil=$t.replaceCache({context:n,shaderProgram:e._spStencil,vertexShaderSource:c,fragmentShaderSource:d,attributeLocations:u}),e._primitive.allowPicking){let f=De.createPickVertexShaderSource(o);f=In._appendShowToShader(i,f),f=In._updatePickColorAttribute(f);let y=h.createPickFragmentShader(!1),x=h.createPickVertexShader([a],f,!1,t.mapProjection);if(e._spPick=$t.replaceCache({context:n,shaderProgram:e._spPick,vertexShaderSource:x,fragmentShaderSource:y,attributeLocations:u}),s){let S=n.shaderCache.getDerivedShaderProgram(e._spPick,"2dPick");if(!l(S)){let C=h.createPickFragmentShader(!0),V=h.createPickVertexShader([a],f,!0,t.mapProjection);S=n.shaderCache.createDerivedShaderProgram(e._spPick,"2dPick",{vertexShaderSource:V,fragmentShaderSource:C,attributeLocations:u})}e._spPick2D=S}}else e._spPick=$t.fromCache({context:n,vertexShaderSource:c,fragmentShaderSource:d,attributeLocations:u});o=In._appendShowToShader(i,o),c=new De({defines:[a],sources:[o]}),e._sp=$t.replaceCache({context:n,shaderProgram:e._sp,vertexShaderSource:c,fragmentShaderSource:d,attributeLocations:u});let p=h.createFragmentShader(!1),g=h.createVertexShader([a],o,!1,t.mapProjection);if(e._spColor=$t.replaceCache({context:n,shaderProgram:e._spColor,vertexShaderSource:g,fragmentShaderSource:p,attributeLocations:u}),s){let f=n.shaderCache.getDerivedShaderProgram(e._spColor,"2dColor");if(!l(f)){let y=h.createFragmentShader(!0),x=h.createVertexShader([a],o,!0,t.mapProjection);f=n.shaderCache.createDerivedShaderProgram(e._spColor,"2dColor",{vertexShaderSource:x,fragmentShaderSource:y,attributeLocations:u})}e._spColor2D=f}}function vPe(e,t){let n=e._primitive,i=n._va.length*2;t.length=i;let o,r,s,a=0,c=n._batchTable.getUniformMapCallback()(e._uniformMap),d=e._needs2DShader;for(o=0;o<i;o+=2){let g=n._va[a++];r=t[o],l(r)||(r=t[o]=new $e({owner:e,primitiveType:n._primitiveType})),r.vertexArray=g,r.renderState=e._rsStencilDepthPass,r.shaderProgram=e._sp,r.uniformMap=c,r.pass=Ee.TERRAIN_CLASSIFICATION,s=$e.shallowClone(r,r.derivedCommands.tileset),s.renderState=e._rsStencilDepthPass3DTiles,s.pass=Ee.CESIUM_3D_TILE_CLASSIFICATION,r.derivedCommands.tileset=s,r=t[o+1],l(r)||(r=t[o+1]=new $e({owner:e,primitiveType:n._primitiveType})),r.vertexArray=g,r.renderState=e._rsColorPass,r.shaderProgram=e._spColor,r.pass=Ee.TERRAIN_CLASSIFICATION;let y=e.appearance.material;if(l(y)&&(c=St(c,y._uniforms)),r.uniformMap=c,s=$e.shallowClone(r,r.derivedCommands.tileset),s.pass=Ee.CESIUM_3D_TILE_CLASSIFICATION,r.derivedCommands.tileset=s,d){let x=$e.shallowClone(r,r.derivedCommands.appearance2D);x.shaderProgram=e._spColor2D,r.derivedCommands.appearance2D=x,x=$e.shallowClone(s,s.derivedCommands.appearance2D),x.shaderProgram=e._spColor2D,s.derivedCommands.appearance2D=x}}let u=e._commandsIgnoreShow,h=e._spStencil,p=0;i=u.length=i/2;for(let g=0;g<i;++g){let f=u[g]=$e.shallowClone(t[p],u[g]);f.shaderProgram=h,f.pass=Ee.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW,p+=2}}function wPe(e,t){let n=e._usePickOffsets,i=e._primitive,o=i._va.length*2,r,s=0,a;n&&(r=i._pickOffsets,o=r.length*2),t.length=o;let c,d,u,h=0,p=i._batchTable.getUniformMapCallback()(e._uniformMap),g=e._needs2DShader;for(c=0;c<o;c+=2){let f=i._va[h++];if(n&&(a=r[s++],f=i._va[a.index]),d=t[c],l(d)||(d=t[c]=new $e({owner:e,primitiveType:i._primitiveType,pickOnly:!0})),d.vertexArray=f,d.renderState=e._rsStencilDepthPass,d.shaderProgram=e._sp,d.uniformMap=p,d.pass=Ee.TERRAIN_CLASSIFICATION,n&&(d.offset=a.offset,d.count=a.count),u=$e.shallowClone(d,d.derivedCommands.tileset),u.renderState=e._rsStencilDepthPass3DTiles,u.pass=Ee.CESIUM_3D_TILE_CLASSIFICATION,d.derivedCommands.tileset=u,d=t[c+1],l(d)||(d=t[c+1]=new $e({owner:e,primitiveType:i._primitiveType,pickOnly:!0})),d.vertexArray=f,d.renderState=e._rsPickPass,d.shaderProgram=e._spPick,d.uniformMap=p,d.pass=Ee.TERRAIN_CLASSIFICATION,n&&(d.offset=a.offset,d.count=a.count),u=$e.shallowClone(d,d.derivedCommands.tileset),u.pass=Ee.CESIUM_3D_TILE_CLASSIFICATION,d.derivedCommands.tileset=u,g){let y=$e.shallowClone(d,d.derivedCommands.pick2D);y.shaderProgram=e._spPick2D,d.derivedCommands.pick2D=y,y=$e.shallowClone(u,u.derivedCommands.pick2D),y.shaderProgram=e._spPick2D,u.derivedCommands.pick2D=y}}}function FPe(e,t,n,i,o,r,s){vPe(e,r),wPe(e,s)}function eie(e,t){return Math.floor(e%t/2)}function MY(e,t,n,i,o,r){e.modelMatrix=n,e.boundingVolume=o,e.cull=i,e.debugShowBoundingVolume=r,t.commandList.push(e)}function tie(e,t,n,i,o){e.modelMatrix=n,e.boundingVolume=o,e.cull=i,t.commandList.push(e)}function APe(e,t,n,i,o,r,s,a){let c=e._primitive;In._updateBoundingVolumes(c,t,o);let d;t.mode===oe.SCENE3D?d=c._boundingSphereWC:t.mode===oe.COLUMBUS_VIEW?d=c._boundingSphereCV:t.mode===oe.SCENE2D&&l(c._boundingSphere2D)?d=c._boundingSphere2D:l(c._boundingSphereMorph)&&(d=c._boundingSphereMorph);let u=e.classificationType,h=u!==Un.CESIUM_3D_TILE,p=u!==Un.TERRAIN,g=t.passes,f,y,x;if(g.render){let S=n.length;for(f=0;f<S;++f)y=d[eie(f,S)],h&&(x=n[f],MY(x,t,o,r,y,s)),p&&(x=n[f].derivedCommands.tileset,MY(x,t,o,r,y,s));if(t.invertClassification){let C=e._commandsIgnoreShow,V=C.length;for(f=0;f<V;++f)y=d[f],x=C[f],MY(x,t,o,r,y,s)}}if(g.pick){let S=i.length,C=c._pickOffsets;for(f=0;f<S;++f){let V=C[eie(f,S)];y=d[V.index],h&&(x=i[f],tie(x,t,o,r,y)),p&&(x=i[f].derivedCommands.tileset,tie(x,t,o,r,y))}}}Xx.prototype.update=function(e){if(!l(this._primitive)&&!l(this.geometryInstances))return;let t=this.appearance;l(t)&&l(t.material)&&t.material.update(e.context);let n=this,i=this._primitiveOptions;if(!l(this._primitive)){let o=Array.isArray(this.geometryInstances)?this.geometryInstances:[this.geometryInstances],r=o.length,s,a,c,d=!1,u=!0,h,p=!1,g=!1;for(r>0&&(c=o[0].attributes,p=gd.hasAttributesForSphericalExtents(c),g=gd.hasAttributesForTextureCoordinatePlanes(c),h=c.color),s=0;s<r;s++){a=o[s];let y=a.attributes.color;l(y)&&(d=!0),u=u&&l(y)&&Yt.equals(h,y)}if(!u&&!p&&!g)throw new pe("All GeometryInstances must have the same color attribute except via GroundPrimitives");d&&!l(t)&&(t=new dn({flat:!0}),this.appearance=t),this._usePickOffsets=!p&&!g,this._hasSphericalExtentsAttribute=p,this._hasPlanarExtentsAttributes=g,this._hasPerColorAttribute=d;let f=new Array(r);for(s=0;s<r;++s)a=o[s],f[s]=new Et({geometry:a.geometry,attributes:a.attributes,modelMatrix:a.modelMatrix,id:a.id,pickPrimitive:this._pickPrimitive??n});i.appearance=t,i.geometryInstances=f,l(this._createBoundingVolumeFunction)&&(i._createBoundingVolumeFunction=function(y,x){n._createBoundingVolumeFunction(y,x)}),i._createRenderStatesFunction=function(y,x,S,C){XPe(n,x)},i._createShaderProgramFunction=function(y,x,S){PPe(n,x)},i._createCommandsFunction=function(y,x,S,C,V,L,Z){FPe(n,void 0,void 0,!0,!1,L,Z)},l(this._updateAndQueueCommandsFunction)?i._updateAndQueueCommandsFunction=function(y,x,S,C,V,L,Z,E){n._updateAndQueueCommandsFunction(y,x,S,C,V,L,Z,E)}:i._updateAndQueueCommandsFunction=function(y,x,S,C,V,L,Z,E){APe(n,x,S,C,V,L,Z,E)},this._primitive=new In(i)}this.debugShowShadowVolume&&!this._debugShowShadowVolume&&this._ready?(this._debugShowShadowVolume=!0,this._rsStencilDepthPass=Ue.fromCache(mC(!1,!1)),this._rsStencilDepthPass3DTiles=Ue.fromCache(mC(!1,!0)),this._rsColorPass=Ue.fromCache(NY(!1))):!this.debugShowShadowVolume&&this._debugShowShadowVolume&&(this._debugShowShadowVolume=!1,this._rsStencilDepthPass=Ue.fromCache(mC(!0,!1)),this._rsStencilDepthPass3DTiles=Ue.fromCache(mC(!0,!0)),this._rsColorPass=Ue.fromCache(NY(!0))),this._primitive.appearance!==t&&(this._primitive.appearance=t),this._primitive.show=this.show,this._primitive.debugShowBoundingVolume=this.debugShowBoundingVolume,this._primitive.update(e),e.afterRender.push(()=>{l(this._primitive)&&this._primitive.ready&&(this._ready=!0,this.releaseGeometryInstances&&(this.geometryInstances=void 0))})};Xx.prototype.getGeometryInstanceAttributes=function(e){return this._primitive.getGeometryInstanceAttributes(e)};Xx.prototype.isDestroyed=function(){return!1};Xx.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),this._sp=this._sp&&this._sp.destroy(),this._spPick=this._spPick&&this._spPick.destroy(),this._spColor=this._spColor&&this._spColor.destroy(),this._spPick2D=void 0,this._spColor2D=void 0,me(this)};var hC=Xx;var MPe={u_globeMinimumAltitude:function(){return 55e3}};function Wl(e){e=e??Y.EMPTY_OBJECT;let t=e.appearance,n=e.geometryInstances;if(!l(t)&&l(n)){let o=Array.isArray(n)?n:[n],r=o.length;for(let s=0;s<r;s++){let a=o[s].attributes;if(l(a)&&l(a.color)){t=new dn({flat:!0});break}}}this.appearance=t,this.geometryInstances=e.geometryInstances,this.show=e.show??!0,this.classificationType=e.classificationType??Un.BOTH,this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this.debugShowShadowVolume=e.debugShowShadowVolume??!1,this._boundingVolumes=[],this._boundingVolumes2D=[],this._ready=!1,this._primitive=void 0,this._maxHeight=void 0,this._minHeight=void 0,this._maxTerrainHeight=di._defaultMaxTerrainHeight,this._minTerrainHeight=di._defaultMinTerrainHeight,this._boundingSpheresKeys=[],this._boundingSpheres=[],this._useFragmentCulling=!1,this._zIndex=void 0;let i=this;this._classificationPrimitiveOptions={geometryInstances:void 0,appearance:void 0,vertexCacheOptimize:e.vertexCacheOptimize??!1,interleave:e.interleave??!1,releaseGeometryInstances:e.releaseGeometryInstances??!0,allowPicking:e.allowPicking??!0,asynchronous:e.asynchronous??!0,compressVertices:e.compressVertices??!0,_createBoundingVolumeFunction:void 0,_updateAndQueueCommandsFunction:void 0,_pickPrimitive:i,_extruded:!0,_uniformMap:MPe}}Object.defineProperties(Wl.prototype,{vertexCacheOptimize:{get:function(){return this._classificationPrimitiveOptions.vertexCacheOptimize}},interleave:{get:function(){return this._classificationPrimitiveOptions.interleave}},releaseGeometryInstances:{get:function(){return this._classificationPrimitiveOptions.releaseGeometryInstances}},allowPicking:{get:function(){return this._classificationPrimitiveOptions.allowPicking}},asynchronous:{get:function(){return this._classificationPrimitiveOptions.asynchronous}},compressVertices:{get:function(){return this._classificationPrimitiveOptions.compressVertices}},ready:{get:function(){return this._ready}}});Wl.isSupported=hC.isSupported;function nie(e){return function(t,n){let i=n.maximumRadius,o=i/Math.cos(t*.5)-i;return e._maxHeight+o}}function iie(e){return function(t,n){return e._minHeight}}var NPe=new m,kPe=new m,UPe=new m,DPe=new he,BPe=new ce;function a5(e,t){let n=e.mapProjection.ellipsoid;if(!l(t.attributes)||!l(t.attributes.position3DHigh))return l(t.rectangle)?t.rectangle:void 0;let i=t.attributes.position3DHigh.values,o=t.attributes.position3DLow.values,r=i.length,s=Number.POSITIVE_INFINITY,a=Number.POSITIVE_INFINITY,c=Number.NEGATIVE_INFINITY,d=Number.NEGATIVE_INFINITY;for(let h=0;h<r;h+=3){let p=m.unpack(i,h,NPe),g=m.unpack(o,h,kPe),f=m.add(p,g,UPe),y=n.cartesianToCartographic(f,DPe),x=y.latitude,S=y.longitude;s=Math.min(s,x),a=Math.min(a,S),c=Math.max(c,x),d=Math.max(d,S)}let u=BPe;return u.north=c,u.south=s,u.east=d,u.west=a,u}function OPe(e,t,n){let i=di.getMinimumMaximumHeights(t,n);e._minTerrainHeight=i.minimumTerrainHeight,e._maxTerrainHeight=i.maximumTerrainHeight}function YPe(e,t,n){let i=t.mapProjection.ellipsoid,o=a5(t,n),r=En.fromRectangle(o,e._minHeight,e._maxHeight,i);if(e._boundingVolumes.push(r),!t.scene3DOnly){let s=t.mapProjection,a=le.fromRectangleWithHeights2D(o,s,e._maxHeight,e._minHeight);m.fromElements(a.center.z,a.center.x,a.center.y,a.center),e._boundingVolumes2D.push(a)}}function kY(e,t){return Math.floor(e%t/2)}function UY(e,t,n,i,o,r,s){let a=e._primitive;n.mode!==oe.SCENE3D&&t.shaderProgram===a._spColor&&a._needs2DShader&&(t=t.derivedCommands.appearance2D),t.owner=e,t.modelMatrix=i,t.boundingVolume=r,t.cull=o,t.debugShowBoundingVolume=s,n.commandList.push(t)}function oie(e,t,n,i,o,r){let s=e._primitive;n.mode!==oe.SCENE3D&&t.shaderProgram===s._spPick&&s._needs2DShader&&(t=t.derivedCommands.pick2D),t.owner=e,t.modelMatrix=i,t.boundingVolume=r,t.cull=o,n.commandList.push(t)}function zPe(e,t,n,i,o,r,s,a){let c;t.mode===oe.SCENE3D?c=e._boundingVolumes:c=e._boundingVolumes2D;let d=e.classificationType,u=d!==Un.CESIUM_3D_TILE,h=d!==Un.TERRAIN,p=t.passes,g=e._primitive,f,y,x;if(p.render){let S=n.length;for(f=0;f<S;++f)y=c[kY(f,S)],u&&(x=n[f],UY(e,x,t,o,r,y,s)),h&&(x=n[f].derivedCommands.tileset,UY(e,x,t,o,r,y,s));if(t.invertClassification){let C=g._commandsIgnoreShow,V=C.length;for(f=0;f<V;++f)y=c[f],x=C[f],UY(e,x,t,o,r,y,s)}}if(p.pick){let S=i.length,C;for(e._useFragmentCulling||(C=g._primitive._pickOffsets),f=0;f<S;++f){if(y=c[kY(f,S)],!e._useFragmentCulling){let V=C[kY(f,S)];y=c[V.index]}u&&(x=i[f],oie(e,x,t,o,r,y)),h&&(x=i[f].derivedCommands.tileset,oie(e,x,t,o,r,y))}}}Wl.initializeTerrainHeights=function(){return di.initialize()};Wl.prototype.update=function(e){if(!l(this._primitive)&&!l(this.geometryInstances))return;if(!di.initialized){Wl.initializeTerrainHeights();return}let t=this,n=this._classificationPrimitiveOptions;if(!l(this._primitive)){let i=e.mapProjection.ellipsoid,o,r,s,a=Array.isArray(this.geometryInstances)?this.geometryInstances:[this.geometryInstances],c=a.length,d=new Array(c),u,h;for(u=0;u<c;++u){o=a[u],r=o.geometry;let y=a5(e,r);l(h)?l(y)&&ce.union(h,y,h):h=ce.clone(y);let x=o.id;if(l(x)&&l(y)){let S=di.getBoundingSphere(y,i);this._boundingSpheresKeys.push(x),this._boundingSpheres.push(S)}s=r.constructor,!l(s)||l(s.createShadowVolume)}OPe(this,h,i);let p=e.verticalExaggeration,g=e.verticalExaggerationRelativeHeight;this._minHeight=Tr.getHeight(this._minTerrainHeight,p,g),this._maxHeight=Tr.getHeight(this._maxTerrainHeight,p,g);let f=Wl._supportsMaterials(e.context);if(this._useFragmentCulling=f,f){let y,x=!0;for(u=0;u<c;++u)if(o=a[u],r=o.geometry,h=a5(e,r),gd.shouldUseSphericalCoordinates(h)){x=!1;break}for(u=0;u<c;++u){o=a[u],r=o.geometry,s=r.constructor;let S=a5(e,r),C=r.textureCoordinateRotationPoints;x?y=gd.getPlanarTextureCoordinateAttributes(S,C,i,e.mapProjection,this._maxHeight):y=gd.getSphericalExtentGeometryInstanceAttributes(S,C,i,e.mapProjection);let V=o.attributes;for(let L in V)V.hasOwnProperty(L)&&(y[L]=V[L]);d[u]=new Et({geometry:s.createShadowVolume(r,iie(this),nie(this)),attributes:y,id:o.id})}}else for(u=0;u<c;++u)o=a[u],r=o.geometry,s=r.constructor,d[u]=new Et({geometry:s.createShadowVolume(r,iie(this),nie(this)),attributes:o.attributes,id:o.id});n.geometryInstances=d,n.appearance=this.appearance,n._createBoundingVolumeFunction=function(y,x){YPe(t,y,x)},n._updateAndQueueCommandsFunction=function(y,x,S,C,V,L,Z,E){zPe(t,x,S,C,V,L,Z,E)},this._primitive=new hC(n)}this._primitive.appearance=this.appearance,this._primitive.show=this.show,this._primitive.debugShowShadowVolume=this.debugShowShadowVolume,this._primitive.debugShowBoundingVolume=this.debugShowBoundingVolume,this._primitive.update(e),e.afterRender.push(()=>{!this._ready&&l(this._primitive)&&this._primitive.ready&&(this._ready=!0,this.releaseGeometryInstances&&(this.geometryInstances=void 0))})};Wl.prototype.getBoundingSphere=function(e){let t=this._boundingSpheresKeys.indexOf(e);if(t!==-1)return this._boundingSpheres[t]};Wl.prototype.getGeometryInstanceAttributes=function(e){return this._primitive.getGeometryInstanceAttributes(e)};Wl.prototype.isDestroyed=function(){return!1};Wl.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),me(this)};Wl._supportsMaterials=function(e){return e.depthTexture};Wl.supportsMaterials=function(e){return Wl._supportsMaterials(e.frameState.context)};var Dc=Wl;var Gjt=_(T(),1);function fC(){pe.throwInstantiationError()}Object.defineProperties(fC.prototype,{isConstant:{get:pe.throwInstantiationError},definitionChanged:{get:pe.throwInstantiationError}});fC.prototype.getType=pe.throwInstantiationError;fC.prototype.getValue=pe.throwInstantiationError;fC.prototype.equals=pe.throwInstantiationError;var HPe=new q;fC.getValue=function(e,t,n){let i;return l(e)||(e=q.now(HPe)),l(t)&&(i=t.getType(e),l(i))?((!l(n)||n.type!==i)&&(n=zi.fromType(i)),t.getValue(e,n.uniforms),n):((!l(n)||n.type!==zi.ColorType)&&(n=zi.fromType(zi.ColorType)),D.clone(D.WHITE,n.uniforms.color),n)};var Qo=fC;function Wx(e,t,n){this._primitives=t,this._orderedGroundPrimitives=n,this._primitive=void 0,this._outlinePrimitive=void 0,this._geometryUpdater=e,this._options=e._options,this._entity=e._entity,this._material=void 0}Wx.prototype._isHidden=function(e,t,n){return!e.isShowing||!e.isAvailable(n)||!J.getValueOrDefault(t.show,n,!0)};Wx.prototype._setOptions=pe.throwInstantiationError;Wx.prototype.update=function(e){let t=this._geometryUpdater,n=t._onTerrain,i=this._primitives,o=this._orderedGroundPrimitives;n?o.remove(this._primitive):(i.removeAndDestroy(this._primitive),i.removeAndDestroy(this._outlinePrimitive),this._outlinePrimitive=void 0),this._primitive=void 0;let r=this._entity,s=r[this._geometryUpdater._geometryPropertyName];if(this._setOptions(r,s,e),this._isHidden(r,s,e))return;let a=this._geometryUpdater.shadowsProperty.getValue(e),c=this._options;if(!l(s.fill)||s.fill.getValue(e)){let d=t.fillMaterialProperty,u=d instanceof Dt,h,p=t._getIsClosed(c);if(u)h=new dn({closed:p,flat:n&&!t._supportsMaterialsforEntitiesOnTerrain});else{let g=Qo.getValue(e,d,this._material);this._material=g,h=new ao({material:g,translucent:g.isTranslucent(),closed:p})}if(n)c.vertexFormat=dn.VERTEX_FORMAT,this._primitive=o.add(new Dc({geometryInstances:this._geometryUpdater.createFillGeometryInstance(e),appearance:h,asynchronous:!1,shadows:a,classificationType:this._geometryUpdater.classificationTypeProperty.getValue(e)}),J.getValueOrUndefined(this._geometryUpdater.zIndex,e));else{c.vertexFormat=h.vertexFormat;let g=this._geometryUpdater.createFillGeometryInstance(e);u&&(h.translucent=g.attributes.color.value[3]!==255),this._primitive=i.add(new In({geometryInstances:g,appearance:h,asynchronous:!1,shadows:a}))}}if(!n&&l(s.outline)&&s.outline.getValue(e)){let d=this._geometryUpdater.createOutlineGeometryInstance(e),u=J.getValueOrDefault(s.outlineWidth,e,1);this._outlinePrimitive=i.add(new In({geometryInstances:d,appearance:new dn({flat:!0,translucent:d.attributes.color.value[3]!==255,renderState:{lineWidth:t._scene.clampLineWidth(u)}}),asynchronous:!1,shadows:a}))}};Wx.prototype.getBoundingSphere=function(e){let t=this._entity,n=this._primitive,i=this._outlinePrimitive,o;return l(n)&&n.show&&n.ready&&(o=n.getGeometryInstanceAttributes(t),l(o)&&l(o.boundingSphere))?(le.clone(o.boundingSphere,e),dt.DONE):l(i)&&i.show&&i.ready&&(o=i.getGeometryInstanceAttributes(t),l(o)&&l(o.boundingSphere))?(le.clone(o.boundingSphere,e),dt.DONE):l(n)&&!n.ready||l(i)&&!i.ready?dt.PENDING:dt.FAILED};Wx.prototype.isDestroyed=function(){return!1};Wx.prototype.destroy=function(){let e=this._primitives,t=this._orderedGroundPrimitives;this._geometryUpdater._onTerrain?t.remove(this._primitive):e.removeAndDestroy(this._primitive),e.removeAndDestroy(this._outlinePrimitive),me(this)};var ii=Wx;var dtn=_(T(),1);var Yjt=_(T(),1);var rie={};function jE(e,t){l(rie[e])||(rie[e]=!0,console.warn(t??e))}jE.geometryOutlines="Entity geometry outlines are unsupported on terrain. Outlines will be disabled. To enable outlines, disable geometry terrain clamping by explicitly setting height to 0.";jE.geometryZIndex="Entity geometry with zIndex are unsupported when height or extrudedHeight are defined. zIndex will be ignored";jE.geometryHeightReference="Entity corridor, ellipse, polygon or rectangle with heightReference must also have a defined height. heightReference will be ignored";jE.geometryExtrudedHeightReference="Entity corridor, ellipse, polygon or rectangle with extrudedHeightReference must also have a defined extrudedHeight. extrudedHeightReference will be ignored";var _t=jE;var Ken=_(T(),1);var Hjt=_(T(),1),KPe={AUTODETECT:0,ENU:1,INERTIAL:2,VELOCITY:3},wp=Object.freeze(KPe);var Q7t=_(T(),1);var M8t=_(T(),1);var Jjt=_(T(),1),JPe={NONE:0,GEODESIC:1,RHUMB:2},en=Object.freeze(JPe);var $jt=_(T(),1);var sie=X.EPSILON10;function QPe(e,t,n,i){if(!l(e))return;n=n??!1;let o=l(i),r=e.length;if(r<2)return e;let s,a=e[0],c,d,u=0,h=-1;for(s=1;s<r;++s)c=e[s],t(a,c,sie)?(l(d)||(d=e.slice(0,s),u=s-1,h=0),o&&i.push(s)):(l(d)&&(d.push(c),u=s,o&&(h=i.length)),a=c);return n&&t(e[0],e[r-1],sie)&&(o&&(l(d)?i.splice(h,0,u):i.push(r-1)),l(d)?d.length-=1:d=e.slice(0,-1)),l(d)?d:e}var _o=QPe;var s8t=_(T(),1);function jPe(e){let t=e._uSquared,n=e._ellipsoid.maximumRadius,i=e._ellipsoid.minimumRadius,o=(n-i)/n,r=Math.cos(e._startHeading),s=Math.sin(e._startHeading),a=(1-o)*Math.tan(e._start.latitude),c=1/Math.sqrt(1+a*a),d=c*a,u=Math.atan2(a,r),h=c*s,p=h*h,g=1-p,f=Math.sqrt(g),y=t/4,x=y*y,S=x*y,C=x*x,V=1+y-3*x/4+5*S/4-175*C/64,L=1-y+15*x/8-35*S/8,Z=1-3*y+35*x/4,E=1-5*y,P=V*u-L*Math.sin(2*u)*y/2-Z*Math.sin(4*u)*x/16-E*Math.sin(6*u)*S/48-Math.sin(8*u)*5*C/512,W=e._constants;W.a=n,W.b=i,W.f=o,W.cosineHeading=r,W.sineHeading=s,W.tanU=a,W.cosineU=c,W.sineU=d,W.sigma=u,W.sineAlpha=h,W.sineSquaredAlpha=p,W.cosineSquaredAlpha=g,W.cosineAlpha=f,W.u2Over4=y,W.u4Over16=x,W.u6Over64=S,W.u8Over256=C,W.a0=V,W.a1=L,W.a2=Z,W.a3=E,W.distanceRatio=P}function qPe(e,t){return e*t*(4+e*(4-3*t))/16}function aie(e,t,n,i,o,r,s){let a=qPe(e,n);return(1-a)*e*t*(i+a*o*(s+a*r*(2*s*s-1)))}function $Pe(e,t,n,i,o,r,s){let a=(t-n)/t,c=r-i,d=Math.atan((1-a)*Math.tan(o)),u=Math.atan((1-a)*Math.tan(s)),h=Math.cos(d),p=Math.sin(d),g=Math.cos(u),f=Math.sin(u),y=h*g,x=h*f,S=p*f,C=p*g,V=c,L=X.TWO_PI,Z=Math.cos(V),E=Math.sin(V),P,W,v,A,b;do{Z=Math.cos(V),E=Math.sin(V);let N=x-C*Z;v=Math.sqrt(g*g*E*E+N*N),W=S+y*Z,P=Math.atan2(v,W);let z;v===0?(z=0,A=1):(z=y*E/v,A=1-z*z),L=V,b=W-2*S/A,isFinite(b)||(b=0),V=c+aie(a,z,A,P,v,W,b)}while(Math.abs(V-L)>X.EPSILON12);let R=A*(t*t-n*n)/(n*n),G=1+R*(4096+R*(R*(320-175*R)-768))/16384,I=R*(256+R*(R*(74-47*R)-128))/1024,w=b*b,M=I*v*(b+I*(W*(2*w-1)-I*b*(4*v*v-3)*(4*w-3)/6)/4),B=n*G*(P-M),k=Math.atan2(g*E,x-C*Z),O=Math.atan2(h*E,x*Z-C);e._distance=B,e._startHeading=k,e._endHeading=O,e._uSquared=R}var e2e=new m,DY=new m;function cie(e,t,n,i){let o=m.normalize(i.cartographicToCartesian(t,DY),e2e),r=m.normalize(i.cartographicToCartesian(n,DY),DY);$Pe(e,i.maximumRadius,i.minimumRadius,t.longitude,t.latitude,n.longitude,n.latitude),e._start=he.clone(t,e._start),e._end=he.clone(n,e._end),e._start.height=0,e._end.height=0,jPe(e)}function qE(e,t,n){let i=n??ne.default;this._ellipsoid=i,this._start=new he,this._end=new he,this._constants={},this._startHeading=void 0,this._endHeading=void 0,this._distance=void 0,this._uSquared=void 0,l(e)&&l(t)&&cie(this,e,t,i)}Object.defineProperties(qE.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},surfaceDistance:{get:function(){return this._distance}},start:{get:function(){return this._start}},end:{get:function(){return this._end}},startHeading:{get:function(){return this._startHeading}},endHeading:{get:function(){return this._endHeading}}});qE.prototype.setEndPoints=function(e,t){cie(this,e,t,this._ellipsoid)};qE.prototype.interpolateUsingFraction=function(e,t){return this.interpolateUsingSurfaceDistance(this._distance*e,t)};qE.prototype.interpolateUsingSurfaceDistance=function(e,t){let n=this._constants,i=n.distanceRatio+e/n.b,o=Math.cos(2*i),r=Math.cos(4*i),s=Math.cos(6*i),a=Math.sin(2*i),c=Math.sin(4*i),d=Math.sin(6*i),u=Math.sin(8*i),h=i*i,p=i*h,g=n.u8Over256,f=n.u2Over4,y=n.u6Over64,x=n.u4Over16,S=2*p*g*o/3+i*(1-f+7*x/4-15*y/4+579*g/64-(x-15*y/4+187*g/16)*o-(5*y/4-115*g/16)*r-29*g*s/16)+(f/2-x+71*y/32-85*g/16)*a+(5*x/16-5*y/4+383*g/96)*c-h*((y-11*g/2)*a+5*g*c/2)+(29*y/96-29*g/16)*d+539*g*u/1536,C=Math.asin(Math.sin(S)*n.cosineAlpha),V=Math.atan(n.a/n.b*Math.tan(C));S=S-n.sigma;let L=Math.cos(2*n.sigma+S),Z=Math.sin(S),E=Math.cos(S),P=n.cosineU*E,W=n.sineU*Z,A=Math.atan2(Z*n.sineHeading,P-W*n.cosineHeading)-aie(n.f,n.sineAlpha,n.cosineSquaredAlpha,S,Z,E,L);return l(t)?(t.longitude=this._start.longitude+A,t.latitude=V,t.height=0,t):new he(this._start.longitude+A,V,0)};var Fp=qE;var h8t=_(T(),1);function OY(e,t,n){if(e===0)return t*n;let i=e*e,o=i*i,r=o*i,s=r*i,a=s*i,c=a*i,d=n,u=Math.sin(2*d),h=Math.sin(4*d),p=Math.sin(6*d),g=Math.sin(8*d),f=Math.sin(10*d),y=Math.sin(12*d);return t*((1-i/4-3*o/64-5*r/256-175*s/16384-441*a/65536-4851*c/1048576)*d-(3*i/8+3*o/32+45*r/1024+105*s/4096+2205*a/131072+6237*c/524288)*u+(15*o/256+45*r/1024+525*s/16384+1575*a/65536+155925*c/8388608)*h-(35*r/3072+175*s/12288+3675*a/262144+13475*c/1048576)*p+(315*s/131072+2205*a/524288+43659*c/8388608)*g-(693*a/1310720+6237*c/5242880)*f+1001*c/8388608*y)}function t2e(e,t,n){let i=e/n;if(t===0)return i;let o=i*i,r=o*i,s=r*i,a=t,c=a*a,d=c*c,u=d*c,h=u*c,p=h*c,g=p*c,f=Math.sin(2*i),y=Math.cos(2*i),x=Math.sin(4*i),S=Math.cos(4*i),C=Math.sin(6*i),V=Math.cos(6*i),L=Math.sin(8*i),Z=Math.cos(8*i),E=Math.sin(10*i),P=Math.cos(10*i),W=Math.sin(12*i);return i+i*c/4+7*i*d/64+15*i*u/256+579*i*h/16384+1515*i*p/65536+16837*i*g/1048576+(3*i*d/16+45*i*u/256-i*(32*o-561)*h/4096-i*(232*o-1677)*p/16384+i*(399985-90560*o+512*s)*g/5242880)*y+(21*i*u/256+483*i*h/4096-i*(224*o-1969)*p/16384-i*(33152*o-112599)*g/1048576)*S+(151*i*h/4096+4681*i*p/65536+1479*i*g/16384-453*r*g/32768)*V+(1097*i*p/65536+42783*i*g/1048576)*Z+8011*i*g/1048576*P+(3*c/8+3*d/16+213*u/2048-3*o*u/64+255*h/4096-33*o*h/512+20861*p/524288-33*o*p/512+s*p/1024+28273*g/1048576-471*o*g/8192+9*s*g/4096)*f+(21*d/256+21*u/256+533*h/8192-21*o*h/512+197*p/4096-315*o*p/4096+584039*g/16777216-12517*o*g/131072+7*s*g/2048)*x+(151*u/6144+151*h/4096+5019*p/131072-453*o*p/16384+26965*g/786432-8607*o*g/131072)*C+(1097*h/131072+1097*p/65536+225797*g/10485760-1097*o*g/65536)*L+(8011*p/2621440+8011*g/1048576)*E+293393*g/251658240*W}function pC(e,t){if(e===0)return Math.log(Math.tan(.5*(X.PI_OVER_TWO+t)));let n=e*Math.sin(t);return Math.log(Math.tan(.5*(X.PI_OVER_TWO+t)))-e/2*Math.log((1+n)/(1-n))}function n2e(e,t,n,i,o){let r=pC(e._ellipticity,n),s=pC(e._ellipticity,o);return Math.atan2(X.negativePiToPi(i-t),s-r)}function i2e(e,t,n,i,o,r,s){let a=e._heading,c=r-i,d=0;if(X.equalsEpsilon(Math.abs(a),X.PI_OVER_TWO,X.EPSILON8))if(t===n)d=t*Math.cos(o)*X.negativePiToPi(c);else{let u=Math.sin(o);d=t*Math.cos(o)*X.negativePiToPi(c)/Math.sqrt(1-e._ellipticitySquared*u*u)}else{let u=OY(e._ellipticity,t,o);d=(OY(e._ellipticity,t,s)-u)/Math.cos(a)}return Math.abs(d)}var o2e=new m,BY=new m;function lie(e,t,n,i){let o=m.normalize(i.cartographicToCartesian(t,BY),o2e),r=m.normalize(i.cartographicToCartesian(n,BY),BY),s=i.maximumRadius,a=i.minimumRadius,c=s*s,d=a*a;e._ellipticitySquared=(c-d)/c,e._ellipticity=Math.sqrt(e._ellipticitySquared),e._start=he.clone(t,e._start),e._start.height=0,e._end=he.clone(n,e._end),e._end.height=0,e._heading=n2e(e,t.longitude,t.latitude,n.longitude,n.latitude),e._distance=i2e(e,i.maximumRadius,i.minimumRadius,t.longitude,t.latitude,n.longitude,n.latitude)}function die(e,t,n,i,o,r){if(n===0)return he.clone(e,r);let s=o*o,a,c,d;if(Math.abs(X.PI_OVER_TWO-Math.abs(t))>X.EPSILON8){let u=OY(o,i,e.latitude),h=n*Math.cos(t),p=u+h;if(c=t2e(p,o,i),Math.abs(t)<X.EPSILON10)a=X.negativePiToPi(e.longitude);else{let g=pC(o,e.latitude),f=pC(o,c);d=Math.tan(t)*(f-g),a=X.negativePiToPi(e.longitude+d)}}else{c=e.latitude;let u;if(o===0)u=i*Math.cos(e.latitude);else{let h=Math.sin(e.latitude);u=i*Math.cos(e.latitude)/Math.sqrt(1-s*h*h)}d=n/u,t>0?a=X.negativePiToPi(e.longitude+d):a=X.negativePiToPi(e.longitude-d)}return l(r)?(r.longitude=a,r.latitude=c,r.height=0,r):new he(a,c,0)}function Ap(e,t,n){let i=n??ne.default;this._ellipsoid=i,this._start=new he,this._end=new he,this._heading=void 0,this._distance=void 0,this._ellipticity=void 0,this._ellipticitySquared=void 0,l(e)&&l(t)&&lie(this,e,t,i)}Object.defineProperties(Ap.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},surfaceDistance:{get:function(){return this._distance}},start:{get:function(){return this._start}},end:{get:function(){return this._end}},heading:{get:function(){return this._heading}}});Ap.fromStartHeadingDistance=function(e,t,n,i,o){let r=i??ne.default,s=r.maximumRadius,a=r.minimumRadius,c=s*s,d=a*a,u=Math.sqrt((c-d)/c);t=X.negativePiToPi(t);let h=die(e,t,n,r.maximumRadius,u);return!l(o)||l(i)&&!i.equals(o.ellipsoid)?new Ap(e,h,r):(o.setEndPoints(e,h),o)};Ap.prototype.setEndPoints=function(e,t){lie(this,e,t,this._ellipsoid)};Ap.prototype.interpolateUsingFraction=function(e,t){return this.interpolateUsingSurfaceDistance(e*this._distance,t)};Ap.prototype.interpolateUsingSurfaceDistance=function(e,t){return die(this._start,this._heading,e,this._ellipsoid.maximumRadius,this._ellipticity,t)};Ap.prototype.findIntersectionWithLongitude=function(e,t){let n=this._ellipticity,i=this._heading,o=Math.abs(i),r=this._start;if(e=X.negativePiToPi(e),X.equalsEpsilon(Math.abs(e),Math.PI,X.EPSILON14)&&(e=X.sign(r.longitude)*Math.PI),l(t)||(t=new he),Math.abs(X.PI_OVER_TWO-o)<=X.EPSILON8)return t.longitude=e,t.latitude=r.latitude,t.height=0,t;if(X.equalsEpsilon(Math.abs(X.PI_OVER_TWO-o),X.PI_OVER_TWO,X.EPSILON8))return X.equalsEpsilon(e,r.longitude,X.EPSILON12)?void 0:(t.longitude=e,t.latitude=X.PI_OVER_TWO*X.sign(X.PI_OVER_TWO-i),t.height=0,t);let s=r.latitude,a=n*Math.sin(s),c=Math.tan(.5*(X.PI_OVER_TWO+s))*Math.exp((e-r.longitude)/Math.tan(i)),d=(1+a)/(1-a),u=r.latitude,h;do{h=u;let p=n*Math.sin(h),g=(1+p)/(1-p);u=2*Math.atan(c*Math.pow(g/d,n/2))-X.PI_OVER_TWO}while(!X.equalsEpsilon(u,h,X.EPSILON12));return t.longitude=e,t.latitude=u,t.height=0,t};Ap.prototype.findIntersectionWithLatitude=function(e,t){let n=this._ellipticity,i=this._heading,o=this._start;if(X.equalsEpsilon(Math.abs(i),X.PI_OVER_TWO,X.EPSILON8))return;let r=pC(n,o.latitude),s=pC(n,e),a=Math.tan(i)*(s-r),c=X.negativePiToPi(o.longitude+a);return l(t)?(t.longitude=c,t.latitude=e,t.height=0,t):new he(c,e,0)};var wa=Ap;var qY=[Ei,Xi],r2e=qY.length,Iie=Math.cos(X.toRadians(30)),uie=Math.cos(X.toRadians(150)),Xie=0,Wie=1e3;function j0(e){e=e??Y.EMPTY_OBJECT;let t=e.positions;this.width=e.width??1,this._positions=t,this.granularity=e.granularity??9999,this.loop=e.loop??!1,this.arcType=e.arcType??en.GEODESIC,this._ellipsoid=ne.default,this._projectionIndex=0,this._workerName="createGroundPolylineGeometry",this._scene3DOnly=!1}Object.defineProperties(j0.prototype,{packedLength:{get:function(){return 1+this._positions.length*3+1+1+1+ne.packedLength+1+1}}});j0.setProjectionAndEllipsoid=function(e,t){let n=0;for(let i=0;i<r2e;i++)if(t instanceof qY[i]){n=i;break}e._projectionIndex=n,e._ellipsoid=t.ellipsoid};var s2e=new m,mie=new m,hie=new m;function jY(e,t,n,i,o){let r=Bc(i,e,0,s2e),s=Bc(i,e,n,mie),a=Bc(i,t,0,hie),c=Mp(s,r,mie),d=Mp(a,r,hie);return m.cross(d,c,o),m.normalize(o,o)}var a2e=new he,c2e=new m,l2e=new m,d2e=new m;function YY(e,t,n,i,o,r,s,a,c,d,u){if(o===0)return;let h;r===en.GEODESIC?h=new Fp(e,t,s):r===en.RHUMB&&(h=new wa(e,t,s));let p=h.surfaceDistance;if(p<o)return;let g=jY(e,t,i,s,d2e),f=Math.ceil(p/o),y=p/f,x=y,S=f-1,C=a.length;for(let V=0;V<S;V++){let L=h.interpolateUsingSurfaceDistance(x,a2e),Z=Bc(s,L,n,c2e),E=Bc(s,L,i,l2e);m.pack(g,a,C),m.pack(Z,c,C),m.pack(E,d,C),u.push(L.latitude),u.push(L.longitude),C+=3,x+=y}}var zY=new he;function Bc(e,t,n,i){return he.clone(t,zY),zY.height=n,he.toCartesian(zY,e,i)}j0.pack=function(e,t,n){let i=n??0,o=e._positions,r=o.length;t[i++]=r;for(let s=0;s<r;++s){let a=o[s];m.pack(a,t,i),i+=3}return t[i++]=e.granularity,t[i++]=e.loop?1:0,t[i++]=e.arcType,ne.pack(e._ellipsoid,t,i),i+=ne.packedLength,t[i++]=e._projectionIndex,t[i++]=e._scene3DOnly?1:0,t};j0.unpack=function(e,t,n){let i=t??0,o=e[i++],r=new Array(o);for(let p=0;p<o;p++)r[p]=m.unpack(e,i),i+=3;let s=e[i++],a=e[i++]===1,c=e[i++],d=ne.unpack(e,i);i+=ne.packedLength;let u=e[i++],h=e[i++]===1;return l(n)||(n=new j0({positions:r})),n._positions=r,n.granularity=s,n.loop=a,n.arcType=c,n._ellipsoid=d,n._projectionIndex=u,n._scene3DOnly=h,n};function Mp(e,t,n){return m.subtract(e,t,n),m.normalize(n,n),n}function fie(e,t,n,i){return i=Mp(e,t,i),i=m.cross(i,n,i),i=m.normalize(i,i),i=m.cross(n,i,i),i}var u2e=new m,m2e=new m,h2e=new m,Pie=new m,f2e=0,p2e=-1;function HY(e,t,n,i,o){let r=Mp(n,t,Pie),s=fie(e,t,r,u2e),a=fie(i,t,r,m2e);if(X.equalsEpsilon(m.dot(s,a),p2e,X.EPSILON5))return o=m.cross(r,s,o),o=m.normalize(o,o),o;o=m.add(a,s,o),o=m.normalize(o,o);let c=m.cross(r,o,h2e);return m.dot(a,c)<f2e&&(o=m.negate(o,o)),o}var u5=sn.fromPointNormal(m.ZERO,m.UNIT_Y),b2e=new m,g2e=new m,y2e=new m,x2e=new m,_2e=new m,c5=new m,l5=new he,pie=new he,bie=new he;j0.createGeometry=function(e){let t=!e._scene3DOnly,n=e.loop,i=e._ellipsoid,o=e.granularity,r=e.arcType,s=new qY[e._projectionIndex](i),a=Xie,c=Wie,d,u,h=e._positions,p=h.length;p===2&&(n=!1);let g,f,y,x,S=new wa(void 0,void 0,i),C,V,L,Z=[h[0]];for(u=0;u<p-1;u++)g=h[u],f=h[u+1],C=qn.lineSegmentPlane(g,f,u5,c5),l(C)&&!m.equalsEpsilon(C,g,X.EPSILON7)&&!m.equalsEpsilon(C,f,X.EPSILON7)&&(e.arcType===en.GEODESIC?Z.push(m.clone(C)):e.arcType===en.RHUMB&&(L=i.cartesianToCartographic(C,l5).longitude,y=i.cartesianToCartographic(g,l5),x=i.cartesianToCartographic(f,pie),S.setEndPoints(y,x),V=S.findIntersectionWithLongitude(L,bie),C=i.cartographicToCartesian(V,c5),l(C)&&!m.equalsEpsilon(C,g,X.EPSILON7)&&!m.equalsEpsilon(C,f,X.EPSILON7)&&Z.push(m.clone(C)))),Z.push(f);n&&(g=h[p-1],f=h[0],C=qn.lineSegmentPlane(g,f,u5,c5),l(C)&&!m.equalsEpsilon(C,g,X.EPSILON7)&&!m.equalsEpsilon(C,f,X.EPSILON7)&&(e.arcType===en.GEODESIC?Z.push(m.clone(C)):e.arcType===en.RHUMB&&(L=i.cartesianToCartographic(C,l5).longitude,y=i.cartesianToCartographic(g,l5),x=i.cartesianToCartographic(f,pie),S.setEndPoints(y,x),V=S.findIntersectionWithLongitude(L,bie),C=i.cartographicToCartesian(V,c5),l(C)&&!m.equalsEpsilon(C,g,X.EPSILON7)&&!m.equalsEpsilon(C,f,X.EPSILON7)&&Z.push(m.clone(C)))));let E=Z.length,P=new Array(E);for(u=0;u<E;u++){let K=he.fromCartesian(Z[u],i);K.height=0,P[u]=K}if(P=_o(P,he.equalsEpsilon),E=P.length,E<2)return;let W=[],v=[],A=[],b=[],R=b2e,G=g2e,I=y2e,w=x2e,M=_2e,B=P[0],k=P[1],O=P[E-1];for(R=Bc(i,O,a,R),w=Bc(i,k,a,w),G=Bc(i,B,a,G),I=Bc(i,B,c,I),n?M=HY(R,G,I,w,M):M=jY(B,k,c,i,M),m.pack(M,v,0),m.pack(G,A,0),m.pack(I,b,0),W.push(B.latitude),W.push(B.longitude),YY(B,k,a,c,o,r,i,v,A,b,W),u=1;u<E-1;++u){R=m.clone(G,R),G=m.clone(w,G);let K=P[u];Bc(i,K,c,I),Bc(i,P[u+1],a,w),HY(R,G,I,w,M),d=v.length,m.pack(M,v,d),m.pack(G,A,d),m.pack(I,b,d),W.push(K.latitude),W.push(K.longitude),YY(P[u],P[u+1],a,c,o,r,i,v,A,b,W)}let N=P[E-1],z=P[E-2];if(G=Bc(i,N,a,G),I=Bc(i,N,c,I),n){let K=P[0];R=Bc(i,z,a,R),w=Bc(i,K,a,w),M=HY(R,G,I,w,M)}else M=jY(z,N,c,i,M);if(d=v.length,m.pack(M,v,d),m.pack(G,A,d),m.pack(I,b,d),W.push(N.latitude),W.push(N.longitude),n){for(YY(N,B,a,c,o,r,i,v,A,b,W),d=v.length,u=0;u<3;++u)v[d+u]=v[u],A[d+u]=A[u],b[d+u]=b[u];W.push(B.latitude),W.push(B.longitude)}return z2e(n,s,A,b,v,W,t)};var T2e=new m,S2e=new $,C2e=new ve;function gie(e,t,n,i){let o=Mp(n,t,T2e),r=m.dot(o,e);if(r>Iie||r<uie){let s=Mp(i,n,Pie),a=r<uie?X.PI_OVER_TWO:-X.PI_OVER_TWO,c=ve.fromAxisAngle(s,a,C2e),d=$.fromQuaternion(c,S2e);return $.multiplyByVector(d,e,e),!0}return!1}var yie=new he,V2e=new m,xie=new m;function $E(e,t,n,i,o){let r=he.toCartesian(t,e._ellipsoid,V2e),s=m.add(r,n,xie),a=!1,c=e._ellipsoid,d=c.cartesianToCartographic(s,yie);Math.abs(t.longitude-d.longitude)>X.PI_OVER_TWO&&(a=!0,s=m.subtract(r,n,xie),d=c.cartesianToCartographic(s,yie)),d.height=0;let u=e.project(d,o);return o=m.subtract(u,i,o),o.z=0,o=m.normalize(o,o),a&&m.negate(o,o),o}var L2e=new m,_ie=new m;function Tie(e,t,n,i,o,r){let s=m.subtract(t,e,L2e);m.normalize(s,s);let a=n-Xie,c=m.multiplyByScalar(s,a,_ie);m.add(e,c,o);let d=i-Wie;c=m.multiplyByScalar(s,d,_ie),m.add(t,c,r)}var R2e=new m;function d5(e,t){let n=sn.getPointDistance(u5,e),i=sn.getPointDistance(u5,t),o=R2e;X.equalsEpsilon(n,0,X.EPSILON2)?(o=Mp(t,e,o),m.multiplyByScalar(o,X.EPSILON2,o),m.add(e,o,e)):X.equalsEpsilon(i,0,X.EPSILON2)&&(o=Mp(e,t,o),m.multiplyByScalar(o,X.EPSILON2,o),m.add(t,o,t))}function Z2e(e,t){let n=Math.abs(e.longitude),i=Math.abs(t.longitude);if(X.equalsEpsilon(n,X.PI,X.EPSILON11)){let o=X.sign(t.longitude);return e.longitude=o*(n-X.EPSILON11),1}else if(X.equalsEpsilon(i,X.PI,X.EPSILON11)){let o=X.sign(e.longitude);return t.longitude=o*(i-X.EPSILON11),2}return 0}var vie=new he,wie=new he,Sie=new m,KY=new m,Cie=new m,Vie=new m,G2e=new m,Lie=new m,E2e=[vie,wie],I2e=new ce,X2e=new m,W2e=new m,P2e=new m,v2e=new m,w2e=new m,F2e=new m,JY=new m,QY=new m,A2e=new m,M2e=new m,N2e=new m,Rie=new m,k2e=new m,U2e=new m,D2e=new On,B2e=new On,Zie=new m,O2e=new m,Gie=new m,Y2e=[new le,new le],Fie=[0,2,1,0,3,2,0,7,3,0,4,7,0,5,4,0,1,5,5,7,4,5,6,7,5,2,6,5,1,2,3,6,2,3,7,6],Eie=Fie.length;function z2e(e,t,n,i,o,r,s){let a,c,d=t._ellipsoid,u=n.length/3-1,h=u*8,p=h*4,g=u*36,f=h>65535?new Uint32Array(g):new Uint16Array(g),y=new Float64Array(h*3),x=new Float32Array(p),S=new Float32Array(p),C=new Float32Array(p),V=new Float32Array(p),L=new Float32Array(p),Z,E,P,W;s&&(Z=new Float32Array(p),E=new Float32Array(p),P=new Float32Array(p),W=new Float32Array(h*2));let v=r.length/2,A=0,b=vie;b.height=0;let R=wie;R.height=0;let G=Sie,I=KY;if(s)for(c=0,a=1;a<v;a++)b.latitude=r[c],b.longitude=r[c+1],R.latitude=r[c+2],R.longitude=r[c+3],G=t.project(b,G),I=t.project(R,I),A+=m.distance(G,I),c+=2;let w=i.length/3;I=m.unpack(i,0,I);let M=0;for(c=3,a=1;a<w;a++)G=m.clone(I,G),I=m.unpack(i,c,I),M+=m.distance(G,I),c+=3;let B;c=3;let k=0,O=0,N=0,z=0,K=!1,te=m.unpack(n,0,Vie),H=m.unpack(i,0,KY),j=m.unpack(o,0,Lie);if(e){let Le=m.unpack(n,n.length-6,Cie);gie(j,Le,te,H)&&(j=m.negate(j,j))}let ee=0,fe=0,Te=0;for(a=0;a<u;a++){let Le=m.clone(te,Cie),Ne=m.clone(H,Sie),Oe=m.clone(j,G2e);K&&(Oe=m.negate(Oe,Oe)),te=m.unpack(n,c,Vie),H=m.unpack(i,c,KY),j=m.unpack(o,c,Lie),K=gie(j,Le,te,H),b.latitude=r[k],b.longitude=r[k+1],R.latitude=r[k+2],R.longitude=r[k+3];let qe,Rt,Lt,ke;if(s){let gi=Z2e(b,R);qe=t.project(b,w2e),Rt=t.project(R,F2e);let ca=Mp(Rt,qe,Zie);ca.y=Math.abs(ca.y),Lt=JY,ke=QY,gi===0||m.dot(ca,m.UNIT_Y)>Iie?(Lt=$E(t,b,Oe,qe,JY),ke=$E(t,R,j,Rt,QY)):gi===1?(ke=$E(t,R,j,Rt,QY),Lt.x=0,Lt.y=X.sign(b.longitude-Math.abs(R.longitude)),Lt.z=0):(Lt=$E(t,b,Oe,qe,JY),ke.x=0,ke.y=X.sign(b.longitude-R.longitude),ke.z=0)}let Ht=m.distance(Ne,H),ut=On.fromCartesian(Le,D2e),mt=m.subtract(te,Le,A2e),Pn=m.normalize(mt,Rie),cn=m.subtract(Ne,Le,M2e);cn=m.normalize(cn,cn);let ge=m.cross(Pn,cn,Rie);ge=m.normalize(ge,ge);let Ve=m.cross(cn,Oe,k2e);Ve=m.normalize(Ve,Ve);let bn=m.subtract(H,te,N2e);bn=m.normalize(bn,bn);let pt=m.cross(j,bn,U2e);pt=m.normalize(pt,pt);let so=Ht/M,Eo=ee/M,aa=0,Gr,Ts,Fe,rt=0,He=0;if(s){aa=m.distance(qe,Rt),Gr=On.fromCartesian(qe,B2e),Ts=m.subtract(Rt,qe,Zie),Fe=m.normalize(Ts,O2e);let gi=Fe.x;Fe.x=Fe.y,Fe.y=-gi,rt=aa/A,He=fe/A}for(B=0;B<8;B++){let gi=z+B*4,ca=O+B*2,Hr=gi+3,Tl=B<4?1:-1,go=B===2||B===3||B===6||B===7?1:-1;m.pack(ut.high,x,gi),x[Hr]=mt.x,m.pack(ut.low,S,gi),S[Hr]=mt.y,m.pack(Ve,C,gi),C[Hr]=mt.z,m.pack(pt,V,gi),V[Hr]=so*Tl,m.pack(ge,L,gi);let Er=Eo*go;Er===0&&go<0&&(Er=9),L[Hr]=Er,s&&(Z[gi]=Gr.high.x,Z[gi+1]=Gr.high.y,Z[gi+2]=Gr.low.x,Z[gi+3]=Gr.low.y,P[gi]=-Lt.y,P[gi+1]=Lt.x,P[gi+2]=ke.y,P[gi+3]=-ke.x,E[gi]=Ts.x,E[gi+1]=Ts.y,E[gi+2]=Fe.x,E[gi+3]=Fe.y,W[ca]=rt*Tl,Er=He*go,Er===0&&go<0&&(Er=9),W[ca+1]=Er)}let Qe=P2e,bt=v2e,Ot=X2e,Cn=W2e,Io=ce.fromCartographicArray(E2e,I2e),So=di.getMinimumMaximumHeights(Io,d),Qa=So.minimumTerrainHeight,ja=So.maximumTerrainHeight;Te+=Math.abs(Qa),Te+=Math.abs(ja),Tie(Le,Ne,Qa,ja,Qe,Ot),Tie(te,H,Qa,ja,bt,Cn);let Vi=m.multiplyByScalar(ge,X.EPSILON5,Gie);m.add(Qe,Vi,Qe),m.add(bt,Vi,bt),m.add(Ot,Vi,Ot),m.add(Cn,Vi,Cn),d5(Qe,bt),d5(Ot,Cn),m.pack(Qe,y,N),m.pack(bt,y,N+3),m.pack(Cn,y,N+6),m.pack(Ot,y,N+9),Vi=m.multiplyByScalar(ge,-2*X.EPSILON5,Gie),m.add(Qe,Vi,Qe),m.add(bt,Vi,bt),m.add(Ot,Vi,Ot),m.add(Cn,Vi,Cn),d5(Qe,bt),d5(Ot,Cn),m.pack(Qe,y,N+12),m.pack(bt,y,N+15),m.pack(Cn,y,N+18),m.pack(Ot,y,N+21),k+=2,c+=3,O+=16,N+=24,z+=32,ee+=Ht,fe+=aa}c=0;let de=0;for(a=0;a<u;a++){for(B=0;B<Eie;B++)f[c+B]=Fie[B]+de;de+=8,c+=Eie}let xe=Y2e;le.fromVertices(n,m.ZERO,3,xe[0]),le.fromVertices(i,m.ZERO,3,xe[1]);let Ce=le.fromBoundingSpheres(xe);Ce.radius+=Te/(u*2);let Ie={position:new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,normalize:!1,values:y}),startHiAndForwardOffsetX:Q0(x),startLoAndForwardOffsetY:Q0(S),startNormalAndForwardOffsetZ:Q0(C),endNormalAndTextureCoordinateNormalizationX:Q0(V),rightNormalAndTextureCoordinateNormalizationY:Q0(L)};return s&&(Ie.startHiLo2D=Q0(Z),Ie.offsetAndRight2D=Q0(E),Ie.startEndNormals2D=Q0(P),Ie.texcoordNormalization2D=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:2,normalize:!1,values:W})),new lt({attributes:Ie,indices:f,boundingSphere:Ce})}function Q0(e){return new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:4,normalize:!1,values:e})}j0._projectNormal=$E;var Px=j0;var k8t=_(T(),1),eI=`in vec4 v_startPlaneNormalEcAndHalfWidth; in vec4 v_endPlaneNormalEcAndBatchId; in vec4 v_rightPlaneEC; // Technically can compute distance for this here in vec4 v_endEcAndStartEcX; in vec4 v_texcoordNormalizationAndStartEcYZ; #ifdef PER_INSTANCE_COLOR in vec4 v_color; #endif void main(void) { float logDepthOrDepth = czm_branchFreeTernary(czm_sceneMode == czm_sceneMode2D, gl_FragCoord.z, czm_unpackDepth(texture(czm_globeDepthTexture, gl_FragCoord.xy / czm_viewport.zw))); vec3 ecStart = vec3(v_endEcAndStartEcX.w, v_texcoordNormalizationAndStartEcYZ.zw); // Discard for sky if (logDepthOrDepth == 0.0) { #ifdef DEBUG_SHOW_VOLUME out_FragColor = vec4(1.0, 0.0, 0.0, 0.5); return; #else // DEBUG_SHOW_VOLUME discard; #endif // DEBUG_SHOW_VOLUME } vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth); eyeCoordinate /= eyeCoordinate.w; float halfMaxWidth = v_startPlaneNormalEcAndHalfWidth.w * czm_metersPerPixel(eyeCoordinate); // Check distance of the eye coordinate against the right-facing plane float widthwiseDistance = czm_planeDistance(v_rightPlaneEC, eyeCoordinate.xyz); // Check eye coordinate against the mitering planes float distanceFromStart = czm_planeDistance(v_startPlaneNormalEcAndHalfWidth.xyz, -dot(ecStart, v_startPlaneNormalEcAndHalfWidth.xyz), eyeCoordinate.xyz); float distanceFromEnd = czm_planeDistance(v_endPlaneNormalEcAndBatchId.xyz, -dot(v_endEcAndStartEcX.xyz, v_endPlaneNormalEcAndBatchId.xyz), eyeCoordinate.xyz); if (abs(widthwiseDistance) > halfMaxWidth || distanceFromStart < 0.0 || distanceFromEnd < 0.0) { #ifdef DEBUG_SHOW_VOLUME out_FragColor = vec4(1.0, 0.0, 0.0, 0.5); return; #else // DEBUG_SHOW_VOLUME discard; #endif // DEBUG_SHOW_VOLUME } // Check distance of the eye coordinate against start and end planes with normals in the right plane. // For computing unskewed lengthwise texture coordinate. // Can also be used for clipping extremely pointy miters, but in practice unnecessary because of miter breaking. // aligned plane: cross the right plane normal with miter plane normal, then cross the result with right again to point it more "forward" vec3 alignedPlaneNormal; // start aligned plane alignedPlaneNormal = cross(v_rightPlaneEC.xyz, v_startPlaneNormalEcAndHalfWidth.xyz); alignedPlaneNormal = normalize(cross(alignedPlaneNormal, v_rightPlaneEC.xyz)); distanceFromStart = czm_planeDistance(alignedPlaneNormal, -dot(alignedPlaneNormal, ecStart), eyeCoordinate.xyz); // end aligned plane alignedPlaneNormal = cross(v_rightPlaneEC.xyz, v_endPlaneNormalEcAndBatchId.xyz); alignedPlaneNormal = normalize(cross(alignedPlaneNormal, v_rightPlaneEC.xyz)); distanceFromEnd = czm_planeDistance(alignedPlaneNormal, -dot(alignedPlaneNormal, v_endEcAndStartEcX.xyz), eyeCoordinate.xyz); #ifdef PER_INSTANCE_COLOR out_FragColor = czm_gammaCorrect(v_color); #else // PER_INSTANCE_COLOR // Clamp - distance to aligned planes may be negative due to mitering, // so fragment texture coordinate might be out-of-bounds. float s = clamp(distanceFromStart / (distanceFromStart + distanceFromEnd), 0.0, 1.0); s = (s * v_texcoordNormalizationAndStartEcYZ.x) + v_texcoordNormalizationAndStartEcYZ.y; float t = (widthwiseDistance + halfMaxWidth) / (2.0 * halfMaxWidth); czm_materialInput materialInput; materialInput.s = s; materialInput.st = vec2(s, t); materialInput.str = vec3(s, t, 0.0); czm_material material = czm_getMaterial(materialInput); out_FragColor = vec4(material.diffuse + material.emission, material.alpha); #endif // PER_INSTANCE_COLOR // Premultiply alpha. Required for classification primitives on translucent globe. out_FragColor.rgb *= out_FragColor.a; czm_writeDepthClamp(); } `;var D8t=_(T(),1),tI=`in vec3 v_forwardDirectionEC; in vec3 v_texcoordNormalizationAndHalfWidth; in float v_batchId; #ifdef PER_INSTANCE_COLOR in vec4 v_color; #else in vec2 v_alignedPlaneDistances; in float v_texcoordT; #endif float rayPlaneDistanceUnsafe(vec3 origin, vec3 direction, vec3 planeNormal, float planeDistance) { // We don't expect the ray to ever be parallel to the plane return (-planeDistance - dot(planeNormal, origin)) / dot(planeNormal, direction); } void main(void) { vec4 eyeCoordinate = gl_FragCoord; eyeCoordinate /= eyeCoordinate.w; #ifdef PER_INSTANCE_COLOR out_FragColor = czm_gammaCorrect(v_color); #else // PER_INSTANCE_COLOR // Use distances for planes aligned with segment to prevent skew in dashing float distanceFromStart = rayPlaneDistanceUnsafe(eyeCoordinate.xyz, -v_forwardDirectionEC, v_forwardDirectionEC.xyz, v_alignedPlaneDistances.x); float distanceFromEnd = rayPlaneDistanceUnsafe(eyeCoordinate.xyz, v_forwardDirectionEC, -v_forwardDirectionEC.xyz, v_alignedPlaneDistances.y); // Clamp - distance to aligned planes may be negative due to mitering distanceFromStart = max(0.0, distanceFromStart); distanceFromEnd = max(0.0, distanceFromEnd); float s = distanceFromStart / (distanceFromStart + distanceFromEnd); s = (s * v_texcoordNormalizationAndHalfWidth.x) + v_texcoordNormalizationAndHalfWidth.y; czm_materialInput materialInput; materialInput.s = s; materialInput.st = vec2(s, v_texcoordT); materialInput.str = vec3(s, v_texcoordT, 0.0); czm_material material = czm_getMaterial(materialInput); out_FragColor = vec4(material.diffuse + material.emission, material.alpha); #endif // PER_INSTANCE_COLOR } `;var O8t=_(T(),1),nI=`in vec3 position3DHigh; in vec3 position3DLow; in vec4 startHiAndForwardOffsetX; in vec4 startLoAndForwardOffsetY; in vec4 startNormalAndForwardOffsetZ; in vec4 endNormalAndTextureCoordinateNormalizationX; in vec4 rightNormalAndTextureCoordinateNormalizationY; in vec4 startHiLo2D; in vec4 offsetAndRight2D; in vec4 startEndNormals2D; in vec2 texcoordNormalization2D; in float batchId; out vec3 v_forwardDirectionEC; out vec3 v_texcoordNormalizationAndHalfWidth; out float v_batchId; // For materials #ifdef WIDTH_VARYING out float v_width; #endif #ifdef ANGLE_VARYING out float v_polylineAngle; #endif #ifdef PER_INSTANCE_COLOR out vec4 v_color; #else out vec2 v_alignedPlaneDistances; out float v_texcoordT; #endif // Morphing planes using SLERP or NLERP doesn't seem to work, so instead draw the material directly on the shadow volume. // Morph views are from very far away and aren't meant to be used precisely, so this should be sufficient. void main() { v_batchId = batchId; // Start position vec4 posRelativeToEye2D = czm_translateRelativeToEye(vec3(0.0, startHiLo2D.xy), vec3(0.0, startHiLo2D.zw)); vec4 posRelativeToEye3D = czm_translateRelativeToEye(startHiAndForwardOffsetX.xyz, startLoAndForwardOffsetY.xyz); vec4 posRelativeToEye = czm_columbusViewMorph(posRelativeToEye2D, posRelativeToEye3D, czm_morphTime); vec3 posEc2D = (czm_modelViewRelativeToEye * posRelativeToEye2D).xyz; vec3 posEc3D = (czm_modelViewRelativeToEye * posRelativeToEye3D).xyz; vec3 startEC = (czm_modelViewRelativeToEye * posRelativeToEye).xyz; // Start plane vec4 startPlane2D; vec4 startPlane3D; startPlane2D.xyz = czm_normal * vec3(0.0, startEndNormals2D.xy); startPlane3D.xyz = czm_normal * startNormalAndForwardOffsetZ.xyz; startPlane2D.w = -dot(startPlane2D.xyz, posEc2D); startPlane3D.w = -dot(startPlane3D.xyz, posEc3D); // Right plane vec4 rightPlane2D; vec4 rightPlane3D; rightPlane2D.xyz = czm_normal * vec3(0.0, offsetAndRight2D.zw); rightPlane3D.xyz = czm_normal * rightNormalAndTextureCoordinateNormalizationY.xyz; rightPlane2D.w = -dot(rightPlane2D.xyz, posEc2D); rightPlane3D.w = -dot(rightPlane3D.xyz, posEc3D); // End position posRelativeToEye2D = posRelativeToEye2D + vec4(0.0, offsetAndRight2D.xy, 0.0); posRelativeToEye3D = posRelativeToEye3D + vec4(startHiAndForwardOffsetX.w, startLoAndForwardOffsetY.w, startNormalAndForwardOffsetZ.w, 0.0); posRelativeToEye = czm_columbusViewMorph(posRelativeToEye2D, posRelativeToEye3D, czm_morphTime); posEc2D = (czm_modelViewRelativeToEye * posRelativeToEye2D).xyz; posEc3D = (czm_modelViewRelativeToEye * posRelativeToEye3D).xyz; vec3 endEC = (czm_modelViewRelativeToEye * posRelativeToEye).xyz; vec3 forwardEc3D = czm_normal * normalize(vec3(startHiAndForwardOffsetX.w, startLoAndForwardOffsetY.w, startNormalAndForwardOffsetZ.w)); vec3 forwardEc2D = czm_normal * normalize(vec3(0.0, offsetAndRight2D.xy)); // End plane vec4 endPlane2D; vec4 endPlane3D; endPlane2D.xyz = czm_normal * vec3(0.0, startEndNormals2D.zw); endPlane3D.xyz = czm_normal * endNormalAndTextureCoordinateNormalizationX.xyz; endPlane2D.w = -dot(endPlane2D.xyz, posEc2D); endPlane3D.w = -dot(endPlane3D.xyz, posEc3D); // Forward direction v_forwardDirectionEC = normalize(endEC - startEC); vec2 cleanTexcoordNormalization2D; cleanTexcoordNormalization2D.x = abs(texcoordNormalization2D.x); cleanTexcoordNormalization2D.y = czm_branchFreeTernary(texcoordNormalization2D.y > 1.0, 0.0, abs(texcoordNormalization2D.y)); vec2 cleanTexcoordNormalization3D; cleanTexcoordNormalization3D.x = abs(endNormalAndTextureCoordinateNormalizationX.w); cleanTexcoordNormalization3D.y = rightNormalAndTextureCoordinateNormalizationY.w; cleanTexcoordNormalization3D.y = czm_branchFreeTernary(cleanTexcoordNormalization3D.y > 1.0, 0.0, abs(cleanTexcoordNormalization3D.y)); v_texcoordNormalizationAndHalfWidth.xy = mix(cleanTexcoordNormalization2D, cleanTexcoordNormalization3D, czm_morphTime); #ifdef PER_INSTANCE_COLOR v_color = czm_batchTable_color(batchId); #else // PER_INSTANCE_COLOR // For computing texture coordinates v_alignedPlaneDistances.x = -dot(v_forwardDirectionEC, startEC); v_alignedPlaneDistances.y = -dot(-v_forwardDirectionEC, endEC); #endif // PER_INSTANCE_COLOR #ifdef WIDTH_VARYING float width = czm_batchTable_width(batchId); float halfWidth = width * 0.5; v_width = width; v_texcoordNormalizationAndHalfWidth.z = halfWidth; #else float halfWidth = 0.5 * czm_batchTable_width(batchId); v_texcoordNormalizationAndHalfWidth.z = halfWidth; #endif // Compute a normal along which to "push" the position out, extending the miter depending on view distance. // Position has already been "pushed" by unit length along miter normal, and miter normals are encoded in the planes. // Decode the normal to use at this specific vertex, push the position back, and then push to where it needs to be. // Since this is morphing, compute both 3D and 2D positions and then blend. // ****** 3D ****** // Check distance to the end plane and start plane, pick the plane that is closer vec4 positionEc3D = czm_modelViewRelativeToEye * czm_translateRelativeToEye(position3DHigh, position3DLow); // w = 1.0, see czm_computePosition float absStartPlaneDistance = abs(czm_planeDistance(startPlane3D, positionEc3D.xyz)); float absEndPlaneDistance = abs(czm_planeDistance(endPlane3D, positionEc3D.xyz)); vec3 planeDirection = czm_branchFreeTernary(absStartPlaneDistance < absEndPlaneDistance, startPlane3D.xyz, endPlane3D.xyz); vec3 upOrDown = normalize(cross(rightPlane3D.xyz, planeDirection)); // Points "up" for start plane, "down" at end plane. vec3 normalEC = normalize(cross(planeDirection, upOrDown)); // In practice, the opposite seems to work too. // Nudge the top vertex upwards to prevent flickering vec3 geodeticSurfaceNormal = normalize(cross(normalEC, forwardEc3D)); geodeticSurfaceNormal *= float(0.0 <= rightNormalAndTextureCoordinateNormalizationY.w && rightNormalAndTextureCoordinateNormalizationY.w <= 1.0); geodeticSurfaceNormal *= MAX_TERRAIN_HEIGHT; positionEc3D.xyz += geodeticSurfaceNormal; // Determine if this vertex is on the "left" or "right" normalEC *= sign(endNormalAndTextureCoordinateNormalizationX.w); // A "perfect" implementation would push along normals according to the angle against forward. // In practice, just pushing the normal out by halfWidth is sufficient for morph views. positionEc3D.xyz += halfWidth * max(0.0, czm_metersPerPixel(positionEc3D)) * normalEC; // prevent artifacts when czm_metersPerPixel is negative (behind camera) // ****** 2D ****** // Check distance to the end plane and start plane, pick the plane that is closer vec4 positionEc2D = czm_modelViewRelativeToEye * czm_translateRelativeToEye(position2DHigh.zxy, position2DLow.zxy); // w = 1.0, see czm_computePosition absStartPlaneDistance = abs(czm_planeDistance(startPlane2D, positionEc2D.xyz)); absEndPlaneDistance = abs(czm_planeDistance(endPlane2D, positionEc2D.xyz)); planeDirection = czm_branchFreeTernary(absStartPlaneDistance < absEndPlaneDistance, startPlane2D.xyz, endPlane2D.xyz); upOrDown = normalize(cross(rightPlane2D.xyz, planeDirection)); // Points "up" for start plane, "down" at end plane. normalEC = normalize(cross(planeDirection, upOrDown)); // In practice, the opposite seems to work too. // Nudge the top vertex upwards to prevent flickering geodeticSurfaceNormal = normalize(cross(normalEC, forwardEc2D)); geodeticSurfaceNormal *= float(0.0 <= texcoordNormalization2D.y && texcoordNormalization2D.y <= 1.0); geodeticSurfaceNormal *= MAX_TERRAIN_HEIGHT; positionEc2D.xyz += geodeticSurfaceNormal; // Determine if this vertex is on the "left" or "right" normalEC *= sign(texcoordNormalization2D.x); #ifndef PER_INSTANCE_COLOR // Use vertex's sidedness to compute its texture coordinate. v_texcoordT = clamp(sign(texcoordNormalization2D.x), 0.0, 1.0); #endif // A "perfect" implementation would push along normals according to the angle against forward. // In practice, just pushing the normal out by halfWidth is sufficient for morph views. positionEc2D.xyz += halfWidth * max(0.0, czm_metersPerPixel(positionEc2D)) * normalEC; // prevent artifacts when czm_metersPerPixel is negative (behind camera) // Blend for actual position gl_Position = czm_projection * mix(positionEc2D, positionEc3D, czm_morphTime); #ifdef ANGLE_VARYING // Approximate relative screen space direction of the line. vec2 approxLineDirection = normalize(vec2(v_forwardDirectionEC.x, -v_forwardDirectionEC.y)); approxLineDirection.y = czm_branchFreeTernary(approxLineDirection.x == 0.0 && approxLineDirection.y == 0.0, -1.0, approxLineDirection.y); v_polylineAngle = czm_fastApproximateAtan(approxLineDirection.x, approxLineDirection.y); #endif } `;var z8t=_(T(),1),iI=`in vec3 position3DHigh; in vec3 position3DLow; // In 2D and in 3D, texture coordinate normalization component signs encodes: // * X sign - sidedness relative to right plane // * Y sign - is negative OR magnitude is greater than 1.0 if vertex is on bottom of volume #ifndef COLUMBUS_VIEW_2D in vec4 startHiAndForwardOffsetX; in vec4 startLoAndForwardOffsetY; in vec4 startNormalAndForwardOffsetZ; in vec4 endNormalAndTextureCoordinateNormalizationX; in vec4 rightNormalAndTextureCoordinateNormalizationY; #else in vec4 startHiLo2D; in vec4 offsetAndRight2D; in vec4 startEndNormals2D; in vec2 texcoordNormalization2D; #endif in float batchId; out vec4 v_startPlaneNormalEcAndHalfWidth; out vec4 v_endPlaneNormalEcAndBatchId; out vec4 v_rightPlaneEC; out vec4 v_endEcAndStartEcX; out vec4 v_texcoordNormalizationAndStartEcYZ; // For materials #ifdef WIDTH_VARYING out float v_width; #endif #ifdef ANGLE_VARYING out float v_polylineAngle; #endif #ifdef PER_INSTANCE_COLOR out vec4 v_color; #endif void main() { #ifdef COLUMBUS_VIEW_2D vec3 ecStart = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(vec3(0.0, startHiLo2D.xy), vec3(0.0, startHiLo2D.zw))).xyz; vec3 forwardDirectionEC = czm_normal * vec3(0.0, offsetAndRight2D.xy); vec3 ecEnd = forwardDirectionEC + ecStart; forwardDirectionEC = normalize(forwardDirectionEC); // Right plane v_rightPlaneEC.xyz = czm_normal * vec3(0.0, offsetAndRight2D.zw); v_rightPlaneEC.w = -dot(v_rightPlaneEC.xyz, ecStart); // start plane vec4 startPlaneEC; startPlaneEC.xyz = czm_normal * vec3(0.0, startEndNormals2D.xy); startPlaneEC.w = -dot(startPlaneEC.xyz, ecStart); // end plane vec4 endPlaneEC; endPlaneEC.xyz = czm_normal * vec3(0.0, startEndNormals2D.zw); endPlaneEC.w = -dot(endPlaneEC.xyz, ecEnd); v_texcoordNormalizationAndStartEcYZ.x = abs(texcoordNormalization2D.x); v_texcoordNormalizationAndStartEcYZ.y = texcoordNormalization2D.y; #else // COLUMBUS_VIEW_2D vec3 ecStart = (czm_modelViewRelativeToEye * czm_translateRelativeToEye(startHiAndForwardOffsetX.xyz, startLoAndForwardOffsetY.xyz)).xyz; vec3 offset = czm_normal * vec3(startHiAndForwardOffsetX.w, startLoAndForwardOffsetY.w, startNormalAndForwardOffsetZ.w); vec3 ecEnd = ecStart + offset; vec3 forwardDirectionEC = normalize(offset); // start plane vec4 startPlaneEC; startPlaneEC.xyz = czm_normal * startNormalAndForwardOffsetZ.xyz; startPlaneEC.w = -dot(startPlaneEC.xyz, ecStart); // end plane vec4 endPlaneEC; endPlaneEC.xyz = czm_normal * endNormalAndTextureCoordinateNormalizationX.xyz; endPlaneEC.w = -dot(endPlaneEC.xyz, ecEnd); // Right plane v_rightPlaneEC.xyz = czm_normal * rightNormalAndTextureCoordinateNormalizationY.xyz; v_rightPlaneEC.w = -dot(v_rightPlaneEC.xyz, ecStart); v_texcoordNormalizationAndStartEcYZ.x = abs(endNormalAndTextureCoordinateNormalizationX.w); v_texcoordNormalizationAndStartEcYZ.y = rightNormalAndTextureCoordinateNormalizationY.w; #endif // COLUMBUS_VIEW_2D v_endEcAndStartEcX.xyz = ecEnd; v_endEcAndStartEcX.w = ecStart.x; v_texcoordNormalizationAndStartEcYZ.zw = ecStart.yz; #ifdef PER_INSTANCE_COLOR v_color = czm_batchTable_color(batchId); #endif // PER_INSTANCE_COLOR // Compute a normal along which to "push" the position out, extending the miter depending on view distance. // Position has already been "pushed" by unit length along miter normal, and miter normals are encoded in the planes. // Decode the normal to use at this specific vertex, push the position back, and then push to where it needs to be. vec4 positionRelativeToEye = czm_computePosition(); // Check distance to the end plane and start plane, pick the plane that is closer vec4 positionEC = czm_modelViewRelativeToEye * positionRelativeToEye; // w = 1.0, see czm_computePosition float absStartPlaneDistance = abs(czm_planeDistance(startPlaneEC, positionEC.xyz)); float absEndPlaneDistance = abs(czm_planeDistance(endPlaneEC, positionEC.xyz)); vec3 planeDirection = czm_branchFreeTernary(absStartPlaneDistance < absEndPlaneDistance, startPlaneEC.xyz, endPlaneEC.xyz); vec3 upOrDown = normalize(cross(v_rightPlaneEC.xyz, planeDirection)); // Points "up" for start plane, "down" at end plane. vec3 normalEC = normalize(cross(planeDirection, upOrDown)); // In practice, the opposite seems to work too. // Extrude bottom vertices downward for far view distances, like for GroundPrimitives upOrDown = cross(forwardDirectionEC, normalEC); upOrDown = float(czm_sceneMode == czm_sceneMode3D) * upOrDown; upOrDown = float(v_texcoordNormalizationAndStartEcYZ.y > 1.0 || v_texcoordNormalizationAndStartEcYZ.y < 0.0) * upOrDown; upOrDown = min(GLOBE_MINIMUM_ALTITUDE, czm_geometricToleranceOverMeter * length(positionRelativeToEye.xyz)) * upOrDown; positionEC.xyz += upOrDown; v_texcoordNormalizationAndStartEcYZ.y = czm_branchFreeTernary(v_texcoordNormalizationAndStartEcYZ.y > 1.0, 0.0, abs(v_texcoordNormalizationAndStartEcYZ.y)); // Determine distance along normalEC to push for a volume of appropriate width. // Make volumes about double pixel width for a conservative fit - in practice the // extra cost here is minimal compared to the loose volume heights. // // N = normalEC (guaranteed "right-facing") // R = rightEC // p = angle between N and R // w = distance to push along R if R == N // d = distance to push along N // // N R // { p| } * cos(p) = dot(N, R) = w / d // d | |w * d = w / dot(N, R) // { | } // o---------- polyline segment ----> // float width = czm_batchTable_width(batchId); #ifdef WIDTH_VARYING v_width = width; #endif v_startPlaneNormalEcAndHalfWidth.xyz = startPlaneEC.xyz; v_startPlaneNormalEcAndHalfWidth.w = width * 0.5; v_endPlaneNormalEcAndBatchId.xyz = endPlaneEC.xyz; v_endPlaneNormalEcAndBatchId.w = batchId; width = width * max(0.0, czm_metersPerPixel(positionEC)); // width = distance to push along R width = width / dot(normalEC, v_rightPlaneEC.xyz); // width = distance to push along N // Determine if this vertex is on the "left" or "right" #ifdef COLUMBUS_VIEW_2D normalEC *= sign(texcoordNormalization2D.x); #else normalEC *= sign(endNormalAndTextureCoordinateNormalizationX.w); #endif positionEC.xyz += width * normalEC; gl_Position = czm_depthClamp(czm_projection * positionEC); #ifdef ANGLE_VARYING // Approximate relative screen space direction of the line. vec2 approxLineDirection = normalize(vec2(forwardDirectionEC.x, -forwardDirectionEC.y)); approxLineDirection.y = czm_branchFreeTernary(approxLineDirection.x == 0.0 && approxLineDirection.y == 0.0, -1.0, approxLineDirection.y); v_polylineAngle = czm_fastApproximateAtan(approxLineDirection.x, approxLineDirection.y); #endif } `;var r7t=_(T(),1);var K8t=_(T(),1),oI=`in vec3 position3DHigh; in vec3 position3DLow; in vec3 prevPosition3DHigh; in vec3 prevPosition3DLow; in vec3 nextPosition3DHigh; in vec3 nextPosition3DLow; in vec2 expandAndWidth; in vec4 color; in float batchId; out vec4 v_color; void main() { float expandDir = expandAndWidth.x; float width = abs(expandAndWidth.y) + 0.5; bool usePrev = expandAndWidth.y < 0.0; vec4 p = czm_computePosition(); vec4 prev = czm_computePrevPosition(); vec4 next = czm_computeNextPosition(); float angle; vec4 positionWC = getPolylineWindowCoordinates(p, prev, next, expandDir, width, usePrev, angle); gl_Position = czm_viewportOrthographic * positionWC; v_color = color; } `;var Q8t=_(T(),1),yd=`void clipLineSegmentToNearPlane( vec3 p0, vec3 p1, out vec4 positionWC, out bool clipped, out bool culledByNearPlane, out vec4 clippedPositionEC) { culledByNearPlane = false; clipped = false; vec3 p0ToP1 = p1 - p0; float magnitude = length(p0ToP1); vec3 direction = normalize(p0ToP1); // Distance that p0 is behind the near plane. Negative means p0 is // in front of the near plane. float endPoint0Distance = czm_currentFrustum.x + p0.z; // Camera looks down -Z. // When moving a point along +Z: LESS VISIBLE // * Points in front of the camera move closer to the camera. // * Points behind the camrea move farther away from the camera. // When moving a point along -Z: MORE VISIBLE // * Points in front of the camera move farther away from the camera. // * Points behind the camera move closer to the camera. // Positive denominator: -Z, becoming more visible // Negative denominator: +Z, becoming less visible // Nearly zero: parallel to near plane float denominator = -direction.z; if (endPoint0Distance > 0.0 && abs(denominator) < czm_epsilon7) { // p0 is behind the near plane and the line to p1 is nearly parallel to // the near plane, so cull the segment completely. culledByNearPlane = true; } else if (endPoint0Distance > 0.0) { // p0 is behind the near plane, and the line to p1 is moving distinctly // toward or away from it. // t = (-plane distance - dot(plane normal, ray origin)) / dot(plane normal, ray direction) float t = endPoint0Distance / denominator; if (t < 0.0 || t > magnitude) { // Near plane intersection is not between the two points. // We already confirmed p0 is behind the naer plane, so now // we know the entire segment is behind it. culledByNearPlane = true; } else { // Segment crosses the near plane, update p0 to lie exactly on it. p0 = p0 + t * direction; // Numerical noise might put us a bit on the wrong side of the near plane. // Don't let that happen. p0.z = min(p0.z, -czm_currentFrustum.x); clipped = true; } } clippedPositionEC = vec4(p0, 1.0); positionWC = czm_eyeToWindowCoordinates(clippedPositionEC); } vec4 getPolylineWindowCoordinatesEC(vec4 positionEC, vec4 prevEC, vec4 nextEC, float expandDirection, float width, bool usePrevious, out float angle) { // expandDirection +1 is to the _left_ when looking from positionEC toward nextEC. #ifdef POLYLINE_DASH // Compute the window coordinates of the points. vec4 positionWindow = czm_eyeToWindowCoordinates(positionEC); vec4 previousWindow = czm_eyeToWindowCoordinates(prevEC); vec4 nextWindow = czm_eyeToWindowCoordinates(nextEC); // Determine the relative screen space direction of the line. vec2 lineDir; if (usePrevious) { lineDir = normalize(positionWindow.xy - previousWindow.xy); } else { lineDir = normalize(nextWindow.xy - positionWindow.xy); } angle = atan(lineDir.x, lineDir.y) - 1.570796327; // precomputed atan(1,0) // Quantize the angle so it doesn't change rapidly between segments. angle = floor(angle / czm_piOverFour + 0.5) * czm_piOverFour; #endif vec4 clippedPrevWC, clippedPrevEC; bool prevSegmentClipped, prevSegmentCulled; clipLineSegmentToNearPlane(prevEC.xyz, positionEC.xyz, clippedPrevWC, prevSegmentClipped, prevSegmentCulled, clippedPrevEC); vec4 clippedNextWC, clippedNextEC; bool nextSegmentClipped, nextSegmentCulled; clipLineSegmentToNearPlane(nextEC.xyz, positionEC.xyz, clippedNextWC, nextSegmentClipped, nextSegmentCulled, clippedNextEC); bool segmentClipped, segmentCulled; vec4 clippedPositionWC, clippedPositionEC; clipLineSegmentToNearPlane(positionEC.xyz, usePrevious ? prevEC.xyz : nextEC.xyz, clippedPositionWC, segmentClipped, segmentCulled, clippedPositionEC); if (segmentCulled) { return vec4(0.0, 0.0, 0.0, 1.0); } vec2 directionToPrevWC = normalize(clippedPrevWC.xy - clippedPositionWC.xy); vec2 directionToNextWC = normalize(clippedNextWC.xy - clippedPositionWC.xy); // If a segment was culled, we can't use the corresponding direction // computed above. We should never see both of these be true without // \`segmentCulled\` above also being true. if (prevSegmentCulled) { directionToPrevWC = -directionToNextWC; } else if (nextSegmentCulled) { directionToNextWC = -directionToPrevWC; } vec2 thisSegmentForwardWC, otherSegmentForwardWC; if (usePrevious) { thisSegmentForwardWC = -directionToPrevWC; otherSegmentForwardWC = directionToNextWC; } else { thisSegmentForwardWC = directionToNextWC; otherSegmentForwardWC = -directionToPrevWC; } vec2 thisSegmentLeftWC = vec2(-thisSegmentForwardWC.y, thisSegmentForwardWC.x); vec2 leftWC = thisSegmentLeftWC; float expandWidth = width * 0.5; // When lines are split at the anti-meridian, the position may be at the // same location as the next or previous position, and we need to handle // that to avoid producing NaNs. if (!czm_equalsEpsilon(prevEC.xyz - positionEC.xyz, vec3(0.0), czm_epsilon1) && !czm_equalsEpsilon(nextEC.xyz - positionEC.xyz, vec3(0.0), czm_epsilon1)) { vec2 otherSegmentLeftWC = vec2(-otherSegmentForwardWC.y, otherSegmentForwardWC.x); vec2 leftSumWC = thisSegmentLeftWC + otherSegmentLeftWC; float leftSumLength = length(leftSumWC); leftWC = leftSumLength < czm_epsilon6 ? thisSegmentLeftWC : (leftSumWC / leftSumLength); // The sine of the angle between the two vectors is given by the formula // |a x b| = |a||b|sin(theta) // which is // float sinAngle = length(cross(vec3(leftWC, 0.0), vec3(-thisSegmentForwardWC, 0.0))); // Because the z components of both vectors are zero, the x and y coordinate will be zero. // Therefore, the sine of the angle is just the z component of the cross product. vec2 u = -thisSegmentForwardWC; vec2 v = leftWC; float sinAngle = abs(u.x * v.y - u.y * v.x); expandWidth = clamp(expandWidth / sinAngle, 0.0, width * 0.5); } vec2 offset = leftWC * expandDirection * expandWidth * czm_pixelRatio; return vec4(clippedPositionWC.xy + offset, -clippedPositionWC.z, 1.0) * (czm_projection * clippedPositionEC).w; } vec4 getPolylineWindowCoordinates(vec4 position, vec4 previous, vec4 next, float expandDirection, float width, bool usePrevious, out float angle) { vec4 positionEC = czm_modelViewRelativeToEye * position; vec4 prevEC = czm_modelViewRelativeToEye * previous; vec4 nextEC = czm_modelViewRelativeToEye * next; return getPolylineWindowCoordinatesEC(positionEC, prevEC, nextEC, expandDirection, width, usePrevious, angle); } `;var $Y=`${yd} ${oI}`,H2e=Gx;Bt.isInternetExplorer()||($Y=`#define CLIP_POLYLINE ${$Y}`);function vx(e){e=e??Y.EMPTY_OBJECT;let t=e.translucent??!0,n=!1,i=vx.VERTEX_FORMAT;this.material=void 0,this.translucent=t,this._vertexShaderSource=e.vertexShaderSource??$Y,this._fragmentShaderSource=e.fragmentShaderSource??H2e,this._renderState=no.getDefaultRenderState(t,n,e.renderState),this._closed=n,this._vertexFormat=i}Object.defineProperties(vx.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}},vertexFormat:{get:function(){return this._vertexFormat}}});vx.VERTEX_FORMAT=Xe.POSITION_ONLY;vx.prototype.getFragmentShaderSource=no.prototype.getFragmentShaderSource;vx.prototype.isTranslucent=no.prototype.isTranslucent;vx.prototype.getRenderState=no.prototype.getRenderState;var jr=vx;var _7t=_(T(),1);var a7t=_(T(),1),rI=`in vec3 position3DHigh; in vec3 position3DLow; in vec3 prevPosition3DHigh; in vec3 prevPosition3DLow; in vec3 nextPosition3DHigh; in vec3 nextPosition3DLow; in vec2 expandAndWidth; in vec2 st; in float batchId; out float v_width; out vec2 v_st; out float v_polylineAngle; void main() { float expandDir = expandAndWidth.x; float width = abs(expandAndWidth.y) + 0.5; bool usePrev = expandAndWidth.y < 0.0; vec4 p = czm_computePosition(); vec4 prev = czm_computePrevPosition(); vec4 next = czm_computeNextPosition(); float angle; vec4 positionWC = getPolylineWindowCoordinates(p, prev, next, expandDir, width, usePrev, angle); gl_Position = czm_viewportOrthographic * positionWC; v_width = width; v_st.s = st.s; v_st.t = czm_writeNonPerspective(st.t, gl_Position.w); v_polylineAngle = angle; } `;var l7t=_(T(),1),wx=`#ifdef VECTOR_TILE uniform vec4 u_highlightColor; #endif in vec2 v_st; void main() { czm_materialInput materialInput; vec2 st = v_st; st.t = czm_readNonPerspective(st.t, gl_FragCoord.w); materialInput.s = st.s; materialInput.st = st; materialInput.str = vec3(st, 0.0); czm_material material = czm_getMaterial(materialInput); out_FragColor = vec4(material.diffuse + material.emission, material.alpha); #ifdef VECTOR_TILE out_FragColor *= u_highlightColor; #endif czm_writeLogDepth(); } `;var ez=`${yd} ${rI}`,K2e=wx;Bt.isInternetExplorer()||(ez=`#define CLIP_POLYLINE ${ez}`);function Fx(e){e=e??Y.EMPTY_OBJECT;let t=e.translucent??!0,n=!1,i=Fx.VERTEX_FORMAT;this.material=l(e.material)?e.material:zi.fromType(zi.ColorType),this.translucent=t,this._vertexShaderSource=e.vertexShaderSource??ez,this._fragmentShaderSource=e.fragmentShaderSource??K2e,this._renderState=no.getDefaultRenderState(t,n,e.renderState),this._closed=n,this._vertexFormat=i}Object.defineProperties(Fx.prototype,{vertexShaderSource:{get:function(){let e=this._vertexShaderSource;return this.material.shaderSource.search(/in\s+float\s+v_polylineAngle;/g)!==-1&&(e=`#define POLYLINE_DASH ${e}`),e}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}},vertexFormat:{get:function(){return this._vertexFormat}}});Fx.VERTEX_FORMAT=Xe.POSITION_AND_ST;Fx.prototype.getFragmentShaderSource=no.prototype.getFragmentShaderSource;Fx.prototype.isTranslucent=no.prototype.isTranslucent;Fx.prototype.getRenderState=no.prototype.getRenderState;var ha=Fx;function Np(e){e=e??Y.EMPTY_OBJECT,this.geometryInstances=e.geometryInstances,this._hasPerInstanceColors=!0;let t=e.appearance;l(t)||(t=new ha),this.appearance=t,this.show=e.show??!0,this.classificationType=e.classificationType??Un.BOTH,this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this._debugShowShadowVolume=e.debugShowShadowVolume??!1,this._primitiveOptions={geometryInstances:void 0,appearance:void 0,vertexCacheOptimize:!1,interleave:e.interleave??!1,releaseGeometryInstances:e.releaseGeometryInstances??!0,allowPicking:e.allowPicking??!0,asynchronous:e.asynchronous??!0,compressVertices:!1,_createShaderProgramFunction:void 0,_createCommandsFunction:void 0,_updateAndQueueCommandsFunction:void 0},this._zIndex=void 0,this._ready=!1,this._primitive=void 0,this._sp=void 0,this._sp2D=void 0,this._spMorph=void 0,this._renderState=Aie(!1),this._renderState3DTiles=Aie(!0),this._renderStateMorph=Ue.fromCache({cull:{enabled:!0,face:Ti.FRONT},depthTest:{enabled:!0},blending:un.PRE_MULTIPLIED_ALPHA_BLEND,depthMask:!1})}Object.defineProperties(Np.prototype,{interleave:{get:function(){return this._primitiveOptions.interleave}},releaseGeometryInstances:{get:function(){return this._primitiveOptions.releaseGeometryInstances}},allowPicking:{get:function(){return this._primitiveOptions.allowPicking}},asynchronous:{get:function(){return this._primitiveOptions.asynchronous}},ready:{get:function(){return this._ready}},debugShowShadowVolume:{get:function(){return this._debugShowShadowVolume}}});Np.initializeTerrainHeights=function(){return di.initialize()};function J2e(e,t,n){let i=t.context,o=e._primitive,r=o._attributeLocations,s=o._batchTable.getVertexShaderCallback()(iI);s=In._appendShowToShader(o,s),s=In._appendDistanceDisplayConditionToShader(o,s),s=In._modifyShaderPosition(e,s,t.scene3DOnly);let a=o._batchTable.getVertexShaderCallback()(nI);a=In._appendShowToShader(o,a),a=In._appendDistanceDisplayConditionToShader(o,a),a=In._modifyShaderPosition(e,a,t.scene3DOnly);let c=o._batchTable.getVertexShaderCallback()(eI),d=[`GLOBE_MINIMUM_ALTITUDE ${t.mapProjection.ellipsoid.minimumRadius.toFixed(1)}`],u="",h="";l(n.material)?(h=l(n.material)?n.material.shaderSource:"",h.search(/in\s+float\s+v_polylineAngle;/g)!==-1&&d.push("ANGLE_VARYING"),h.search(/in\s+float\s+v_width;/g)!==-1&&d.push("WIDTH_VARYING")):u="PER_INSTANCE_COLOR",d.push(u);let p=e.debugShowShadowVolume?["DEBUG_SHOW_VOLUME",u]:[u],g=new De({defines:d,sources:[s]}),f=new De({defines:p,sources:[h,c]});e._sp=$t.replaceCache({context:i,shaderProgram:o._sp,vertexShaderSource:g,fragmentShaderSource:f,attributeLocations:r});let y=i.shaderCache.getDerivedShaderProgram(e._sp,"2dColor");if(!l(y)){let S=new De({defines:d.concat(["COLUMBUS_VIEW_2D"]),sources:[s]});y=i.shaderCache.createDerivedShaderProgram(e._sp,"2dColor",{context:i,shaderProgram:e._sp2D,vertexShaderSource:S,fragmentShaderSource:f,attributeLocations:r})}e._sp2D=y;let x=i.shaderCache.getDerivedShaderProgram(e._sp,"MorphColor");if(!l(x)){let S=new De({defines:d.concat([`MAX_TERRAIN_HEIGHT ${di._defaultMaxTerrainHeight.toFixed(1)}`]),sources:[a]});c=o._batchTable.getVertexShaderCallback()(tI);let C=new De({defines:p,sources:[h,c]});x=i.shaderCache.createDerivedShaderProgram(e._sp,"MorphColor",{context:i,shaderProgram:e._spMorph,vertexShaderSource:S,fragmentShaderSource:C,attributeLocations:r})}e._spMorph=x}function Aie(e){return Ue.fromCache({cull:{enabled:!0},blending:un.PRE_MULTIPLIED_ALPHA_BLEND,depthMask:!1,stencilTest:{enabled:e,frontFunction:Dn.EQUAL,frontOperation:{fail:ht.KEEP,zFail:ht.KEEP,zPass:ht.KEEP},backFunction:Dn.EQUAL,backOperation:{fail:ht.KEEP,zFail:ht.KEEP,zPass:ht.KEEP},reference:Ut.CESIUM_3D_TILE_MASK,mask:Ut.CESIUM_3D_TILE_MASK}})}function Q2e(e,t,n,i,o,r){let s=e._primitive,a=s._va.length;o.length=a,r.length=a;let d=t instanceof jr?{}:n._uniforms,u=s._batchTable.getUniformMapCallback()(d);for(let h=0;h<a;h++){let p=s._va[h],g=o[h];l(g)||(g=o[h]=new $e({owner:e,primitiveType:s._primitiveType})),g.vertexArray=p,g.renderState=e._renderState,g.shaderProgram=e._sp,g.uniformMap=u,g.pass=Ee.TERRAIN_CLASSIFICATION,g.pickId="czm_batchTable_pickColor(v_endPlaneNormalEcAndBatchId.w)";let f=$e.shallowClone(g,g.derivedCommands.tileset);f.renderState=e._renderState3DTiles,f.pass=Ee.CESIUM_3D_TILE_CLASSIFICATION,g.derivedCommands.tileset=f;let y=$e.shallowClone(g,g.derivedCommands.color2D);y.shaderProgram=e._sp2D,g.derivedCommands.color2D=y;let x=$e.shallowClone(f,f.derivedCommands.color2D);x.shaderProgram=e._sp2D,f.derivedCommands.color2D=x;let S=$e.shallowClone(g,g.derivedCommands.colorMorph);S.renderState=e._renderStateMorph,S.shaderProgram=e._spMorph,S.pickId="czm_batchTable_pickColor(v_batchId)",g.derivedCommands.colorMorph=S}}function Mie(e,t,n,i,o,r,s){n.mode===oe.MORPHING?t=t.derivedCommands.colorMorph:n.mode!==oe.SCENE3D&&(t=t.derivedCommands.color2D),t.modelMatrix=i,t.boundingVolume=r,t.cull=o,t.debugShowBoundingVolume=s,n.commandList.push(t)}function j2e(e,t,n,i,o,r,s){let a=e._primitive;In._updateBoundingVolumes(a,t,o);let c;t.mode===oe.SCENE3D?c=a._boundingSphereWC:t.mode===oe.COLUMBUS_VIEW?c=a._boundingSphereCV:t.mode===oe.SCENE2D&&l(a._boundingSphere2D)?c=a._boundingSphere2D:l(a._boundingSphereMorph)&&(c=a._boundingSphereMorph);let d=t.mode===oe.MORPHING,u=e.classificationType,h=u!==Un.CESIUM_3D_TILE,p=u!==Un.TERRAIN&&!d,g,f=t.passes;if(f.render||f.pick&&a.allowPicking){let y=n.length;for(let x=0;x<y;++x){let S=c[x];h&&(g=n[x],Mie(e,g,t,o,r,S,s)),p&&(g=n[x].derivedCommands.tileset,Mie(e,g,t,o,r,S,s))}}}Np.prototype.update=function(e){if(!l(this._primitive)&&!l(this.geometryInstances))return;if(!di.initialized){Np.initializeTerrainHeights();return}let t,n=this,i=this._primitiveOptions;if(!l(this._primitive)){let o=Array.isArray(this.geometryInstances)?this.geometryInstances:[this.geometryInstances],r=o.length,s=new Array(r),a;for(t=0;t<r;++t)if(a=o[t].attributes,!l(a)||!l(a.color)){this._hasPerInstanceColors=!1;break}for(t=0;t<r;++t){let c=o[t];a={};let d=c.attributes;for(let u in d)d.hasOwnProperty(u)&&(a[u]=d[u]);l(a.width)||(a.width=new lc({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,value:[c.geometry.width]})),c.geometry._scene3DOnly=e.scene3DOnly,Px.setProjectionAndEllipsoid(c.geometry,e.mapProjection),s[t]=new Et({geometry:c.geometry,attributes:a,id:c.id,pickPrimitive:n})}i.geometryInstances=s,i.appearance=this.appearance,i._createShaderProgramFunction=function(c,d,u){J2e(n,d,u)},i._createCommandsFunction=function(c,d,u,h,p,g,f){Q2e(n,d,u,h,g,f)},i._updateAndQueueCommandsFunction=function(c,d,u,h,p,g,f,y){j2e(n,d,u,h,p,g,f)},this._primitive=new In(i)}if(this.appearance instanceof jr&&!this._hasPerInstanceColors)throw new pe("All GeometryInstances must have color attributes to use PolylineColorAppearance with GroundPolylinePrimitive.");this._primitive.appearance=this.appearance,this._primitive.show=this.show,this._primitive.debugShowBoundingVolume=this.debugShowBoundingVolume,this._primitive.update(e),e.afterRender.push(()=>{!this._ready&&l(this._primitive)&&this._primitive.ready&&(this._ready=!0,this.releaseGeometryInstances&&(this.geometryInstances=void 0))})};Np.prototype.getGeometryInstanceAttributes=function(e){return this._primitive.getGeometryInstanceAttributes(e)};Np.isSupported=function(e){return e.frameState.context.depthTexture};Np.prototype.isDestroyed=function(){return!1};Np.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),this._sp=this._sp&&this._sp.destroy(),this._sp2D=void 0,this._spMorph=void 0,me(this)};var Am=Np;var _6t=_(T(),1);var h6t=_(T(),1);var s6t=_(T(),1);var q2e=new U(1,1),$2e=!1,eve=D.WHITE;function bC(e){e=e??Y.EMPTY_OBJECT,this._definitionChanged=new be,this._image=void 0,this._imageSubscription=void 0,this._repeat=void 0,this._repeatSubscription=void 0,this._color=void 0,this._colorSubscription=void 0,this._transparent=void 0,this._transparentSubscription=void 0,this.image=e.image,this.repeat=e.repeat,this.color=e.color,this.transparent=e.transparent}Object.defineProperties(bC.prototype,{isConstant:{get:function(){return J.isConstant(this._image)&&J.isConstant(this._repeat)}},definitionChanged:{get:function(){return this._definitionChanged}},image:ue("image"),repeat:ue("repeat"),color:ue("color"),transparent:ue("transparent")});bC.prototype.getType=function(e){return"Image"};var tve=new q;bC.prototype.getValue=function(e,t){return l(e)||(e=q.now(tve)),l(t)||(t={}),t.image=J.getValueOrUndefined(this._image,e),t.repeat=J.getValueOrClonedDefault(this._repeat,e,q2e,t.repeat),t.color=J.getValueOrClonedDefault(this._color,e,eve,t.color),J.getValueOrDefault(this._transparent,e,$2e)&&(t.color.alpha=Math.min(.99,t.color.alpha)),t};bC.prototype.equals=function(e){return this===e||e instanceof bC&&J.equals(this._image,e._image)&&J.equals(this._repeat,e._repeat)&&J.equals(this._color,e._color)&&J.equals(this._transparent,e._transparent)};var q0=bC;function nve(e){if(e instanceof D)return new Dt(e);if(typeof e=="string"||e instanceof Ze||e instanceof HTMLCanvasElement||e instanceof HTMLVideoElement){let t=new q0;return t.image=e,t}}function ive(e,t){return ue(e,t,nve)}var Wo=ive;function sI(e){this._definitionChanged=new be,this._show=void 0,this._showSubscription=void 0,this._dimensions=void 0,this._dimensionsSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this.merge(e??Y.EMPTY_OBJECT)}Object.defineProperties(sI.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:ue("show"),dimensions:ue("dimensions"),heightReference:ue("heightReference"),fill:ue("fill"),material:Wo("material"),outline:ue("outline"),outlineColor:ue("outlineColor"),outlineWidth:ue("outlineWidth"),shadows:ue("shadows"),distanceDisplayCondition:ue("distanceDisplayCondition")});sI.prototype.clone=function(e){return l(e)?(e.show=this.show,e.dimensions=this.dimensions,e.heightReference=this.heightReference,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e):new sI(this)};sI.prototype.merge=function(e){this.show=this.show??e.show,this.dimensions=this.dimensions??e.dimensions,this.heightReference=this.heightReference??e.heightReference,this.fill=this.fill??e.fill,this.material=this.material??e.material,this.outline=this.outline??e.outline,this.outlineColor=this.outlineColor??e.outlineColor,this.outlineWidth=this.outlineWidth??e.outlineWidth,this.shadows=this.shadows??e.shadows,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition};var Ax=sI;var M6t=_(T(),1);var S6t=_(T(),1),ove={FIXED:0,INERTIAL:1},ki=Object.freeze(ove);var I6t=_(T(),1);function gC(){pe.throwInstantiationError()}Object.defineProperties(gC.prototype,{isConstant:{get:pe.throwInstantiationError},definitionChanged:{get:pe.throwInstantiationError},referenceFrame:{get:pe.throwInstantiationError}});gC.prototype.getValue=pe.throwInstantiationError;gC.prototype.getValueInReferenceFrame=pe.throwInstantiationError;gC.prototype.equals=pe.throwInstantiationError;var Nie=new $;gC.convertToReferenceFrame=function(e,t,n,i,o){if(!l(t))return t;if(l(o)||(o=new m),n===i)return m.clone(t,o);let r=Pt.computeIcrfToCentralBodyFixedMatrix(e,Nie);if(n===ki.INERTIAL)return $.multiplyByVector(r,t,o);if(n===ki.FIXED)return $.multiplyByVector($.transpose(r,Nie),t,o)};var Mm=gC;function Mx(e,t){this._definitionChanged=new be,this._value=m.clone(e),this._referenceFrame=t??ki.FIXED}Object.defineProperties(Mx.prototype,{isConstant:{get:function(){return!l(this._value)||this._referenceFrame===ki.FIXED}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return this._referenceFrame}}});var rve=new q;Mx.prototype.getValue=function(e,t){return l(e)||(e=q.now(rve)),this.getValueInReferenceFrame(e,ki.FIXED,t)};Mx.prototype.setValue=function(e,t){let n=!1;m.equals(this._value,e)||(n=!0,this._value=m.clone(e)),l(t)&&this._referenceFrame!==t&&(n=!0,this._referenceFrame=t),n&&this._definitionChanged.raiseEvent(this)};Mx.prototype.getValueInReferenceFrame=function(e,t,n){return Mm.convertToReferenceFrame(e,this._value,this._referenceFrame,t,n)};Mx.prototype.equals=function(e){return this===e||e instanceof Mx&&m.equals(this._value,e._value)&&this._referenceFrame===e._referenceFrame};var Oc=Mx;var Y6t=_(T(),1);function aI(e){this._definitionChanged=new be,this._show=void 0,this._showSubscription=void 0,this._positions=void 0,this._positionsSubscription=void 0,this._width=void 0,this._widthSubscription=void 0,this._height=void 0,this._heightSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._extrudedHeight=void 0,this._extrudedHeightSubscription=void 0,this._extrudedHeightReference=void 0,this._extrudedHeightReferenceSubscription=void 0,this._cornerType=void 0,this._cornerTypeSubscription=void 0,this._granularity=void 0,this._granularitySubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._classificationType=void 0,this._classificationTypeSubscription=void 0,this._zIndex=void 0,this._zIndexSubscription=void 0,this.merge(e??Y.EMPTY_OBJECT)}Object.defineProperties(aI.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:ue("show"),positions:ue("positions"),width:ue("width"),height:ue("height"),heightReference:ue("heightReference"),extrudedHeight:ue("extrudedHeight"),extrudedHeightReference:ue("extrudedHeightReference"),cornerType:ue("cornerType"),granularity:ue("granularity"),fill:ue("fill"),material:Wo("material"),outline:ue("outline"),outlineColor:ue("outlineColor"),outlineWidth:ue("outlineWidth"),shadows:ue("shadows"),distanceDisplayCondition:ue("distanceDisplayCondition"),classificationType:ue("classificationType"),zIndex:ue("zIndex")});aI.prototype.clone=function(e){return l(e)?(e.show=this.show,e.positions=this.positions,e.width=this.width,e.height=this.height,e.heightReference=this.heightReference,e.extrudedHeight=this.extrudedHeight,e.extrudedHeightReference=this.extrudedHeightReference,e.cornerType=this.cornerType,e.granularity=this.granularity,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e.classificationType=this.classificationType,e.zIndex=this.zIndex,e):new aI(this)};aI.prototype.merge=function(e){this.show=this.show??e.show,this.positions=this.positions??e.positions,this.width=this.width??e.width,this.height=this.height??e.height,this.heightReference=this.heightReference??e.heightReference,this.extrudedHeight=this.extrudedHeight??e.extrudedHeight,this.extrudedHeightReference=this.extrudedHeightReference??e.extrudedHeightReference,this.cornerType=this.cornerType??e.cornerType,this.granularity=this.granularity??e.granularity,this.fill=this.fill??e.fill,this.material=this.material??e.material,this.outline=this.outline??e.outline,this.outlineColor=this.outlineColor??e.outlineColor,this.outlineWidth=this.outlineWidth??e.outlineWidth,this.shadows=this.shadows??e.shadows,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition,this.classificationType=this.classificationType??e.classificationType,this.zIndex=this.zIndex??e.zIndex};var Nx=aI;var K6t=_(T(),1);function sve(e){return e}function ave(e,t){return ue(e,t,sve)}var Yc=ave;var tqt=_(T(),1);function cI(e){this._definitionChanged=new be,this._show=void 0,this._showSubscription=void 0,this._length=void 0,this._lengthSubscription=void 0,this._topRadius=void 0,this._topRadiusSubscription=void 0,this._bottomRadius=void 0,this._bottomRadiusSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._numberOfVerticalLines=void 0,this._numberOfVerticalLinesSubscription=void 0,this._slices=void 0,this._slicesSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this.merge(e??Y.EMPTY_OBJECT)}Object.defineProperties(cI.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:ue("show"),length:ue("length"),topRadius:ue("topRadius"),bottomRadius:ue("bottomRadius"),heightReference:ue("heightReference"),fill:ue("fill"),material:Wo("material"),outline:ue("outline"),outlineColor:ue("outlineColor"),outlineWidth:ue("outlineWidth"),numberOfVerticalLines:ue("numberOfVerticalLines"),slices:ue("slices"),shadows:ue("shadows"),distanceDisplayCondition:ue("distanceDisplayCondition")});cI.prototype.clone=function(e){return l(e)?(e.show=this.show,e.length=this.length,e.topRadius=this.topRadius,e.bottomRadius=this.bottomRadius,e.heightReference=this.heightReference,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.numberOfVerticalLines=this.numberOfVerticalLines,e.slices=this.slices,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e):new cI(this)};cI.prototype.merge=function(e){this.show=this.show??e.show,this.length=this.length??e.length,this.topRadius=this.topRadius??e.topRadius,this.bottomRadius=this.bottomRadius??e.bottomRadius,this.heightReference=this.heightReference??e.heightReference,this.fill=this.fill??e.fill,this.material=this.material??e.material,this.outline=this.outline??e.outline,this.outlineColor=this.outlineColor??e.outlineColor,this.outlineWidth=this.outlineWidth??e.outlineWidth,this.numberOfVerticalLines=this.numberOfVerticalLines??e.numberOfVerticalLines,this.slices=this.slices??e.slices,this.shadows=this.shadows??e.shadows,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition};var kx=cI;var cqt=_(T(),1);function lI(e){this._definitionChanged=new be,this._show=void 0,this._showSubscription=void 0,this._semiMajorAxis=void 0,this._semiMajorAxisSubscription=void 0,this._semiMinorAxis=void 0,this._semiMinorAxisSubscription=void 0,this._height=void 0,this._heightSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._extrudedHeight=void 0,this._extrudedHeightSubscription=void 0,this._extrudedHeightReference=void 0,this._extrudedHeightReferenceSubscription=void 0,this._rotation=void 0,this._rotationSubscription=void 0,this._stRotation=void 0,this._stRotationSubscription=void 0,this._granularity=void 0,this._granularitySubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._numberOfVerticalLines=void 0,this._numberOfVerticalLinesSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._classificationType=void 0,this._classificationTypeSubscription=void 0,this._zIndex=void 0,this._zIndexSubscription=void 0,this.merge(e??Y.EMPTY_OBJECT)}Object.defineProperties(lI.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:ue("show"),semiMajorAxis:ue("semiMajorAxis"),semiMinorAxis:ue("semiMinorAxis"),height:ue("height"),heightReference:ue("heightReference"),extrudedHeight:ue("extrudedHeight"),extrudedHeightReference:ue("extrudedHeightReference"),rotation:ue("rotation"),stRotation:ue("stRotation"),granularity:ue("granularity"),fill:ue("fill"),material:Wo("material"),outline:ue("outline"),outlineColor:ue("outlineColor"),outlineWidth:ue("outlineWidth"),numberOfVerticalLines:ue("numberOfVerticalLines"),shadows:ue("shadows"),distanceDisplayCondition:ue("distanceDisplayCondition"),classificationType:ue("classificationType"),zIndex:ue("zIndex")});lI.prototype.clone=function(e){return l(e)?(e.show=this.show,e.semiMajorAxis=this.semiMajorAxis,e.semiMinorAxis=this.semiMinorAxis,e.height=this.height,e.heightReference=this.heightReference,e.extrudedHeight=this.extrudedHeight,e.extrudedHeightReference=this.extrudedHeightReference,e.rotation=this.rotation,e.stRotation=this.stRotation,e.granularity=this.granularity,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.numberOfVerticalLines=this.numberOfVerticalLines,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e.classificationType=this.classificationType,e.zIndex=this.zIndex,e):new lI(this)};lI.prototype.merge=function(e){this.show=this.show??e.show,this.semiMajorAxis=this.semiMajorAxis??e.semiMajorAxis,this.semiMinorAxis=this.semiMinorAxis??e.semiMinorAxis,this.height=this.height??e.height,this.heightReference=this.heightReference??e.heightReference,this.extrudedHeight=this.extrudedHeight??e.extrudedHeight,this.extrudedHeightReference=this.extrudedHeightReference??e.extrudedHeightReference,this.rotation=this.rotation??e.rotation,this.stRotation=this.stRotation??e.stRotation,this.granularity=this.granularity??e.granularity,this.fill=this.fill??e.fill,this.material=this.material??e.material,this.outline=this.outline??e.outline,this.outlineColor=this.outlineColor??e.outlineColor,this.outlineWidth=this.outlineWidth??e.outlineWidth,this.numberOfVerticalLines=this.numberOfVerticalLines??e.numberOfVerticalLines,this.shadows=this.shadows??e.shadows,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition,this.classificationType=this.classificationType??e.classificationType,this.zIndex=this.zIndex??e.zIndex};var Ux=lI;var pqt=_(T(),1);function dI(e){this._definitionChanged=new be,this._show=void 0,this._showSubscription=void 0,this._radii=void 0,this._radiiSubscription=void 0,this._innerRadii=void 0,this._innerRadiiSubscription=void 0,this._minimumClock=void 0,this._minimumClockSubscription=void 0,this._maximumClock=void 0,this._maximumClockSubscription=void 0,this._minimumCone=void 0,this._minimumConeSubscription=void 0,this._maximumCone=void 0,this._maximumConeSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._stackPartitions=void 0,this._stackPartitionsSubscription=void 0,this._slicePartitions=void 0,this._slicePartitionsSubscription=void 0,this._subdivisions=void 0,this._subdivisionsSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this.merge(e??Y.EMPTY_OBJECT)}Object.defineProperties(dI.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:ue("show"),radii:ue("radii"),innerRadii:ue("innerRadii"),minimumClock:ue("minimumClock"),maximumClock:ue("maximumClock"),minimumCone:ue("minimumCone"),maximumCone:ue("maximumCone"),heightReference:ue("heightReference"),fill:ue("fill"),material:Wo("material"),outline:ue("outline"),outlineColor:ue("outlineColor"),outlineWidth:ue("outlineWidth"),stackPartitions:ue("stackPartitions"),slicePartitions:ue("slicePartitions"),subdivisions:ue("subdivisions"),shadows:ue("shadows"),distanceDisplayCondition:ue("distanceDisplayCondition")});dI.prototype.clone=function(e){return l(e)?(e.show=this.show,e.radii=this.radii,e.innerRadii=this.innerRadii,e.minimumClock=this.minimumClock,e.maximumClock=this.maximumClock,e.minimumCone=this.minimumCone,e.maximumCone=this.maximumCone,e.heightReference=this.heightReference,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.stackPartitions=this.stackPartitions,e.slicePartitions=this.slicePartitions,e.subdivisions=this.subdivisions,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e):new dI(this)};dI.prototype.merge=function(e){this.show=this.show??e.show,this.radii=this.radii??e.radii,this.innerRadii=this.innerRadii??e.innerRadii,this.minimumClock=this.minimumClock??e.minimumClock,this.maximumClock=this.maximumClock??e.maximumClock,this.minimumCone=this.minimumCone??e.minimumCone,this.maximumCone=this.maximumCone??e.maximumCone,this.heightReference=this.heightReference??e.heightReference,this.fill=this.fill??e.fill,this.material=this.material??e.material,this.outline=this.outline??e.outline,this.outlineColor=this.outlineColor??e.outlineColor,this.outlineWidth=this.outlineWidth??e.outlineWidth,this.stackPartitions=this.stackPartitions??e.stackPartitions,this.slicePartitions=this.slicePartitions??e.slicePartitions,this.subdivisions=this.subdivisions??e.subdivisions,this.shadows=this.shadows??e.shadows,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition};var Dx=dI;var Tqt=_(T(),1);function uI(e){this._definitionChanged=new be,this._show=void 0,this._showSubscription=void 0,this._text=void 0,this._textSubscription=void 0,this._font=void 0,this._fontSubscription=void 0,this._style=void 0,this._styleSubscription=void 0,this._scale=void 0,this._scaleSubscription=void 0,this._showBackground=void 0,this._showBackgroundSubscription=void 0,this._backgroundColor=void 0,this._backgroundColorSubscription=void 0,this._backgroundPadding=void 0,this._backgroundPaddingSubscription=void 0,this._pixelOffset=void 0,this._pixelOffsetSubscription=void 0,this._eyeOffset=void 0,this._eyeOffsetSubscription=void 0,this._horizontalOrigin=void 0,this._horizontalOriginSubscription=void 0,this._verticalOrigin=void 0,this._verticalOriginSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._fillColor=void 0,this._fillColorSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._translucencyByDistance=void 0,this._translucencyByDistanceSubscription=void 0,this._pixelOffsetScaleByDistance=void 0,this._pixelOffsetScaleByDistanceSubscription=void 0,this._scaleByDistance=void 0,this._scaleByDistanceSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._disableDepthTestDistance=void 0,this._disableDepthTestDistanceSubscription=void 0,this.merge(e??Y.EMPTY_OBJECT)}Object.defineProperties(uI.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:ue("show"),text:ue("text"),font:ue("font"),style:ue("style"),scale:ue("scale"),showBackground:ue("showBackground"),backgroundColor:ue("backgroundColor"),backgroundPadding:ue("backgroundPadding"),pixelOffset:ue("pixelOffset"),eyeOffset:ue("eyeOffset"),horizontalOrigin:ue("horizontalOrigin"),verticalOrigin:ue("verticalOrigin"),heightReference:ue("heightReference"),fillColor:ue("fillColor"),outlineColor:ue("outlineColor"),outlineWidth:ue("outlineWidth"),translucencyByDistance:ue("translucencyByDistance"),pixelOffsetScaleByDistance:ue("pixelOffsetScaleByDistance"),scaleByDistance:ue("scaleByDistance"),distanceDisplayCondition:ue("distanceDisplayCondition"),disableDepthTestDistance:ue("disableDepthTestDistance")});uI.prototype.clone=function(e){return l(e)?(e.show=this.show,e.text=this.text,e.font=this.font,e.style=this.style,e.scale=this.scale,e.showBackground=this.showBackground,e.backgroundColor=this.backgroundColor,e.backgroundPadding=this.backgroundPadding,e.pixelOffset=this.pixelOffset,e.eyeOffset=this.eyeOffset,e.horizontalOrigin=this.horizontalOrigin,e.verticalOrigin=this.verticalOrigin,e.heightReference=this.heightReference,e.fillColor=this.fillColor,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.translucencyByDistance=this.translucencyByDistance,e.pixelOffsetScaleByDistance=this.pixelOffsetScaleByDistance,e.scaleByDistance=this.scaleByDistance,e.distanceDisplayCondition=this.distanceDisplayCondition,e.disableDepthTestDistance=this.disableDepthTestDistance,e):new uI(this)};uI.prototype.merge=function(e){this.show=this.show??e.show,this.text=this.text??e.text,this.font=this.font??e.font,this.style=this.style??e.style,this.scale=this.scale??e.scale,this.showBackground=this.showBackground??e.showBackground,this.backgroundColor=this.backgroundColor??e.backgroundColor,this.backgroundPadding=this.backgroundPadding??e.backgroundPadding,this.pixelOffset=this.pixelOffset??e.pixelOffset,this.eyeOffset=this.eyeOffset??e.eyeOffset,this.horizontalOrigin=this.horizontalOrigin??e.horizontalOrigin,this.verticalOrigin=this.verticalOrigin??e.verticalOrigin,this.heightReference=this.heightReference??e.heightReference,this.fillColor=this.fillColor??e.fillColor,this.outlineColor=this.outlineColor??e.outlineColor,this.outlineWidth=this.outlineWidth??e.outlineWidth,this.translucencyByDistance=this.translucencyByDistance??e.translucencyByDistance,this.pixelOffsetScaleByDistance=this.pixelOffsetScaleByDistance??e.pixelOffsetScaleByDistance,this.scaleByDistance=this.scaleByDistance??e.scaleByDistance,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition,this.disableDepthTestDistance=this.disableDepthTestDistance??e.disableDepthTestDistance};var Nm=uI;var jqt=_(T(),1);var wqt=_(T(),1);var Rqt=_(T(),1);var cve=new m(1,1,1),lve=m.ZERO,dve=ve.IDENTITY;function kie(e,t,n){this.translation=m.clone(e??lve),this.rotation=ve.clone(t??dve),this.scale=m.clone(n??cve)}kie.prototype.equals=function(e){return this===e||l(e)&&m.equals(this.translation,e.translation)&&ve.equals(this.rotation,e.rotation)&&m.equals(this.scale,e.scale)};var $0=kie;var tz=new $0;function mI(e){e=e??Y.EMPTY_OBJECT,this._definitionChanged=new be,this._translation=void 0,this._translationSubscription=void 0,this._rotation=void 0,this._rotationSubscription=void 0,this._scale=void 0,this._scaleSubscription=void 0,this.translation=e.translation,this.rotation=e.rotation,this.scale=e.scale}Object.defineProperties(mI.prototype,{isConstant:{get:function(){return J.isConstant(this._translation)&&J.isConstant(this._rotation)&&J.isConstant(this._scale)}},definitionChanged:{get:function(){return this._definitionChanged}},translation:ue("translation"),rotation:ue("rotation"),scale:ue("scale")});var uve=new q;mI.prototype.getValue=function(e,t){return l(e)||(e=q.now(uve)),l(t)||(t=new $0),t.translation=J.getValueOrClonedDefault(this._translation,e,tz.translation,t.translation),t.rotation=J.getValueOrClonedDefault(this._rotation,e,tz.rotation,t.rotation),t.scale=J.getValueOrClonedDefault(this._scale,e,tz.scale,t.scale),t};mI.prototype.equals=function(e){return this===e||e instanceof mI&&J.equals(this._translation,e._translation)&&J.equals(this._rotation,e._rotation)&&J.equals(this._scale,e._scale)};var Bx=mI;var Bqt=_(T(),1);function kp(e,t){this._propertyNames=[],this._definitionChanged=new be,l(e)&&this.merge(e,t)}Object.defineProperties(kp.prototype,{propertyNames:{get:function(){return this._propertyNames}},isConstant:{get:function(){let e=this._propertyNames;for(let t=0,n=e.length;t<n;t++)if(!J.isConstant(this[e[t]]))return!1;return!0}},definitionChanged:{get:function(){return this._definitionChanged}}});kp.prototype.hasProperty=function(e){return this._propertyNames.indexOf(e)!==-1};function mve(e){return new Qn(e)}kp.prototype.addProperty=function(e,t,n){this._propertyNames.push(e),Object.defineProperty(this,e,ue(e,!0,n??mve)),l(t)&&(this[e]=t),this._definitionChanged.raiseEvent(this)};kp.prototype.removeProperty=function(e){let n=this._propertyNames.indexOf(e);this._propertyNames.splice(n,1),delete this[e],this._definitionChanged.raiseEvent(this)};var hve=new q;kp.prototype.getValue=function(e,t){l(e)||(e=q.now(hve)),l(t)||(t={});let n=this._propertyNames;for(let i=0,o=n.length;i<o;i++){let r=n[i];t[r]=J.getValueOrUndefined(this[r],e,t[r])}return t};kp.prototype.merge=function(e,t){let n=this._propertyNames,i=l(e._propertyNames)?e._propertyNames:Object.keys(e);for(let o=0,r=i.length;o<r;o++){let s=i[o],a=this[s],c=e[s];a===void 0&&n.indexOf(s)===-1&&this.addProperty(s,void 0,t),c!==void 0&&(a!==void 0?l(a)&&l(a.merge)&&a.merge(c):l(c)&&l(c.merge)&&l(c.clone)?this[s]=c.clone():this[s]=c)}};function fve(e,t){let n=e._propertyNames,i=t._propertyNames,o=n.length;if(o!==i.length)return!1;for(let r=0;r<o;++r){let s=n[r];if(i.indexOf(s)===-1||!J.equals(e[s],t[s]))return!1}return!0}kp.prototype.equals=function(e){return this===e||e instanceof kp&&fve(this,e)};var zc=kp;function Uie(e){return new Bx(e)}function pve(e){return new zc(e,Uie)}function bve(e){return new zc(e)}function gve(e){return new zc(e)}function hI(e){this._definitionChanged=new be,this._show=void 0,this._showSubscription=void 0,this._uri=void 0,this._uriSubscription=void 0,this._scale=void 0,this._scaleSubscription=void 0,this._hasVerticalExaggeration=void 0,this._hasVerticalExaggerationSubscription=void 0,this._enableVerticalExaggeration=void 0,this._enableVerticalExaggerationSubscription=void 0,this._minimumPixelSize=void 0,this._minimumPixelSizeSubscription=void 0,this._maximumScale=void 0,this._maximumScaleSubscription=void 0,this._incrementallyLoadTextures=void 0,this._incrementallyLoadTexturesSubscription=void 0,this._runAnimations=void 0,this._runAnimationsSubscription=void 0,this._clampAnimations=void 0,this._clampAnimationsSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._silhouetteColor=void 0,this._silhouetteColorSubscription=void 0,this._silhouetteSize=void 0,this._silhouetteSizeSubscription=void 0,this._color=void 0,this._colorSubscription=void 0,this._colorBlendMode=void 0,this._colorBlendModeSubscription=void 0,this._colorBlendAmount=void 0,this._colorBlendAmountSubscription=void 0,this._imageBasedLightingFactor=void 0,this._imageBasedLightingFactorSubscription=void 0,this._environmentMapOptions=void 0,this._environmentMapOptionsSubscription=void 0,this._lightColor=void 0,this._lightColorSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._nodeTransformations=void 0,this._nodeTransformationsSubscription=void 0,this._articulations=void 0,this._articulationsSubscription=void 0,this._clippingPlanes=void 0,this._clippingPlanesSubscription=void 0,this._customShader=void 0,this._customShaderSubscription=void 0,this.merge(e??Y.EMPTY_OBJECT)}Object.defineProperties(hI.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:ue("show"),uri:ue("uri"),scale:ue("scale"),enableVerticalExaggeration:ue("enableVerticalExaggeration"),minimumPixelSize:ue("minimumPixelSize"),maximumScale:ue("maximumScale"),incrementallyLoadTextures:ue("incrementallyLoadTextures"),runAnimations:ue("runAnimations"),clampAnimations:ue("clampAnimations"),shadows:ue("shadows"),heightReference:ue("heightReference"),silhouetteColor:ue("silhouetteColor"),silhouetteSize:ue("silhouetteSize"),color:ue("color"),colorBlendMode:ue("colorBlendMode"),colorBlendAmount:ue("colorBlendAmount"),imageBasedLightingFactor:ue("imageBasedLightingFactor"),environmentMapOptions:ue("environmentMapOptions",void 0,gve),lightColor:ue("lightColor"),distanceDisplayCondition:ue("distanceDisplayCondition"),nodeTransformations:ue("nodeTransformations",void 0,pve),articulations:ue("articulations",void 0,bve),clippingPlanes:ue("clippingPlanes"),customShader:ue("customShader")});hI.prototype.clone=function(e){return l(e)?(e.show=this.show,e.uri=this.uri,e.scale=this.scale,e.enableVerticalExaggeration=this.enableVerticalExaggeration,e.minimumPixelSize=this.minimumPixelSize,e.maximumScale=this.maximumScale,e.incrementallyLoadTextures=this.incrementallyLoadTextures,e.runAnimations=this.runAnimations,e.clampAnimations=this.clampAnimations,e.heightReference=this._heightReference,e.silhouetteColor=this.silhouetteColor,e.silhouetteSize=this.silhouetteSize,e.color=this.color,e.colorBlendMode=this.colorBlendMode,e.colorBlendAmount=this.colorBlendAmount,e.imageBasedLightingFactor=this.imageBasedLightingFactor,e.environmentMapOptions=this.environmentMapOptions,e.lightColor=this.lightColor,e.distanceDisplayCondition=this.distanceDisplayCondition,e.nodeTransformations=this.nodeTransformations,e.articulations=this.articulations,e.clippingPlanes=this.clippingPlanes,e.customShader=this.customShader,e):new hI(this)};hI.prototype.merge=function(e){this.show=this.show??e.show,this.uri=this.uri??e.uri,this.scale=this.scale??e.scale,this.enableVerticalExaggeration=this.enableVerticalExaggeration??e.enableVerticalExaggeration,this.minimumPixelSize=this.minimumPixelSize??e.minimumPixelSize,this.maximumScale=this.maximumScale??e.maximumScale,this.incrementallyLoadTextures=this.incrementallyLoadTextures??e.incrementallyLoadTextures,this.runAnimations=this.runAnimations??e.runAnimations,this.clampAnimations=this.clampAnimations??e.clampAnimations,this.shadows=this.shadows??e.shadows,this.heightReference=this.heightReference??e.heightReference,this.silhouetteColor=this.silhouetteColor??e.silhouetteColor,this.silhouetteSize=this.silhouetteSize??e.silhouetteSize,this.color=this.color??e.color,this.colorBlendMode=this.colorBlendMode??e.colorBlendMode,this.colorBlendAmount=this.colorBlendAmount??e.colorBlendAmount,this.imageBasedLightingFactor=this.imageBasedLightingFactor??e.imageBasedLightingFactor,this.environmentMapOptions=this.environmentMapOptions??e.environmentMapOptions,this.lightColor=this.lightColor??e.lightColor,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition,this.clippingPlanes=this.clippingPlanes??e.clippingPlanes,this.customShader=this.customShader??e.customShader;let t=e.nodeTransformations;if(l(t)){let i=this.nodeTransformations;l(i)?i.merge(t):this.nodeTransformations=new zc(t,Uie)}let n=e.articulations;if(l(n)){let i=this.articulations;l(i)?i.merge(n):this.articulations=new zc(n)}};var Up=hI;var i$t=_(T(),1);function fI(e){this._definitionChanged=new be,this._show=void 0,this._showSubscription=void 0,this._uri=void 0,this._uriSubscription=void 0,this._maximumScreenSpaceError=void 0,this._maximumScreenSpaceErrorSubscription=void 0,this.merge(e??Y.EMPTY_OBJECT)}Object.defineProperties(fI.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:ue("show"),uri:ue("uri"),maximumScreenSpaceError:ue("maximumScreenSpaceError")});fI.prototype.clone=function(e){return l(e)?(e.show=this.show,e.uri=this.uri,e.maximumScreenSpaceError=this.maximumScreenSpaceError,e):new fI(this)};fI.prototype.merge=function(e){this.show=this.show??e.show,this.uri=this.uri??e.uri,this.maximumScreenSpaceError=this.maximumScreenSpaceError??e.maximumScreenSpaceError};var Ox=fI;var d$t=_(T(),1);function pI(e){this._definitionChanged=new be,this._show=void 0,this._showSubscription=void 0,this._leadTime=void 0,this._leadTimeSubscription=void 0,this._trailTime=void 0,this._trailTimeSubscription=void 0,this._width=void 0,this._widthSubscription=void 0,this._resolution=void 0,this._resolutionSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this.merge(e??Y.EMPTY_OBJECT)}Object.defineProperties(pI.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:ue("show"),leadTime:ue("leadTime"),trailTime:ue("trailTime"),width:ue("width"),resolution:ue("resolution"),material:Wo("material"),distanceDisplayCondition:ue("distanceDisplayCondition")});pI.prototype.clone=function(e){return l(e)?(e.show=this.show,e.leadTime=this.leadTime,e.trailTime=this.trailTime,e.width=this.width,e.resolution=this.resolution,e.material=this.material,e.distanceDisplayCondition=this.distanceDisplayCondition,e):new pI(this)};pI.prototype.merge=function(e){this.show=this.show??e.show,this.leadTime=this.leadTime??e.leadTime,this.trailTime=this.trailTime??e.trailTime,this.width=this.width??e.width,this.resolution=this.resolution??e.resolution,this.material=this.material??e.material,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition};var Dp=pI;var g$t=_(T(),1);function bI(e){this._definitionChanged=new be,this._show=void 0,this._showSubscription=void 0,this._plane=void 0,this._planeSubscription=void 0,this._dimensions=void 0,this._dimensionsSubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this.merge(e??Y.EMPTY_OBJECT)}Object.defineProperties(bI.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:ue("show"),plane:ue("plane"),dimensions:ue("dimensions"),fill:ue("fill"),material:Wo("material"),outline:ue("outline"),outlineColor:ue("outlineColor"),outlineWidth:ue("outlineWidth"),shadows:ue("shadows"),distanceDisplayCondition:ue("distanceDisplayCondition")});bI.prototype.clone=function(e){return l(e)?(e.show=this.show,e.plane=this.plane,e.dimensions=this.dimensions,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e):new bI(this)};bI.prototype.merge=function(e){this.show=this.show??e.show,this.plane=this.plane??e.plane,this.dimensions=this.dimensions??e.dimensions,this.fill=this.fill??e.fill,this.material=this.material??e.material,this.outline=this.outline??e.outline,this.outlineColor=this.outlineColor??e.outlineColor,this.outlineWidth=this.outlineWidth??e.outlineWidth,this.shadows=this.shadows??e.shadows,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition};var gI=bI;var C$t=_(T(),1);function yI(e){this._definitionChanged=new be,this._show=void 0,this._showSubscription=void 0,this._pixelSize=void 0,this._pixelSizeSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._color=void 0,this._colorSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._scaleByDistance=void 0,this._scaleByDistanceSubscription=void 0,this._translucencyByDistance=void 0,this._translucencyByDistanceSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._disableDepthTestDistance=void 0,this._disableDepthTestDistanceSubscription=void 0,this._splitDirection=void 0,this._splitDirectionSubscription=void 0,this.merge(e??Y.EMPTY_OBJECT)}Object.defineProperties(yI.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:ue("show"),pixelSize:ue("pixelSize"),heightReference:ue("heightReference"),color:ue("color"),outlineColor:ue("outlineColor"),outlineWidth:ue("outlineWidth"),scaleByDistance:ue("scaleByDistance"),translucencyByDistance:ue("translucencyByDistance"),distanceDisplayCondition:ue("distanceDisplayCondition"),disableDepthTestDistance:ue("disableDepthTestDistance"),splitDirection:ue("splitDirection")});yI.prototype.clone=function(e){return l(e)?(e.show=this.show,e.pixelSize=this.pixelSize,e.heightReference=this.heightReference,e.color=this.color,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.scaleByDistance=this.scaleByDistance,e.translucencyByDistance=this._translucencyByDistance,e.distanceDisplayCondition=this.distanceDisplayCondition,e.disableDepthTestDistance=this.disableDepthTestDistance,e.splitDirection=this.splitDirection,e):new yI(this)};yI.prototype.merge=function(e){this.show=this.show??e.show,this.pixelSize=this.pixelSize??e.pixelSize,this.heightReference=this.heightReference??e.heightReference,this.color=this.color??e.color,this.outlineColor=this.outlineColor??e.outlineColor,this.outlineWidth=this.outlineWidth??e.outlineWidth,this.scaleByDistance=this.scaleByDistance??e.scaleByDistance,this.translucencyByDistance=this._translucencyByDistance??e.translucencyByDistance,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition,this.disableDepthTestDistance=this.disableDepthTestDistance??e.disableDepthTestDistance,this.splitDirection=this.splitDirection??e.splitDirection};var Yx=yI;var w$t=_(T(),1);var R$t=_(T(),1);function yve(e,t){this.positions=l(e)?e:[],this.holes=l(t)?t:[]}var Fa=yve;function xve(e){return Array.isArray(e)&&(e=new Fa(e)),new Qn(e)}function xI(e){this._definitionChanged=new be,this._show=void 0,this._showSubscription=void 0,this._hierarchy=void 0,this._hierarchySubscription=void 0,this._height=void 0,this._heightSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._extrudedHeight=void 0,this._extrudedHeightSubscription=void 0,this._extrudedHeightReference=void 0,this._extrudedHeightReferenceSubscription=void 0,this._stRotation=void 0,this._stRotationSubscription=void 0,this._granularity=void 0,this._granularitySubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._perPositionHeight=void 0,this._perPositionHeightSubscription=void 0,this._closeTop=void 0,this._closeTopSubscription=void 0,this._closeBottom=void 0,this._closeBottomSubscription=void 0,this._arcType=void 0,this._arcTypeSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._classificationType=void 0,this._classificationTypeSubscription=void 0,this._zIndex=void 0,this._zIndexSubscription=void 0,this._textureCoordinates=void 0,this._textureCoordinatesSubscription=void 0,this.merge(e??Y.EMPTY_OBJECT)}Object.defineProperties(xI.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:ue("show"),hierarchy:ue("hierarchy",void 0,xve),height:ue("height"),heightReference:ue("heightReference"),extrudedHeight:ue("extrudedHeight"),extrudedHeightReference:ue("extrudedHeightReference"),stRotation:ue("stRotation"),granularity:ue("granularity"),fill:ue("fill"),material:Wo("material"),outline:ue("outline"),outlineColor:ue("outlineColor"),outlineWidth:ue("outlineWidth"),perPositionHeight:ue("perPositionHeight"),closeTop:ue("closeTop"),closeBottom:ue("closeBottom"),arcType:ue("arcType"),shadows:ue("shadows"),distanceDisplayCondition:ue("distanceDisplayCondition"),classificationType:ue("classificationType"),zIndex:ue("zIndex"),textureCoordinates:ue("textureCoordinates")});xI.prototype.clone=function(e){return l(e)?(e.show=this.show,e.hierarchy=this.hierarchy,e.height=this.height,e.heightReference=this.heightReference,e.extrudedHeight=this.extrudedHeight,e.extrudedHeightReference=this.extrudedHeightReference,e.stRotation=this.stRotation,e.granularity=this.granularity,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.perPositionHeight=this.perPositionHeight,e.closeTop=this.closeTop,e.closeBottom=this.closeBottom,e.arcType=this.arcType,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e.classificationType=this.classificationType,e.zIndex=this.zIndex,e.textureCoordinates=this.textureCoordinates,e):new xI(this)};xI.prototype.merge=function(e){this.show=this.show??e.show,this.hierarchy=this.hierarchy??e.hierarchy,this.height=this.height??e.height,this.heightReference=this.heightReference??e.heightReference,this.extrudedHeight=this.extrudedHeight??e.extrudedHeight,this.extrudedHeightReference=this.extrudedHeightReference??e.extrudedHeightReference,this.stRotation=this.stRotation??e.stRotation,this.granularity=this.granularity??e.granularity,this.fill=this.fill??e.fill,this.material=this.material??e.material,this.outline=this.outline??e.outline,this.outlineColor=this.outlineColor??e.outlineColor,this.outlineWidth=this.outlineWidth??e.outlineWidth,this.perPositionHeight=this.perPositionHeight??e.perPositionHeight,this.closeTop=this.closeTop??e.closeTop,this.closeBottom=this.closeBottom??e.closeBottom,this.arcType=this.arcType??e.arcType,this.shadows=this.shadows??e.shadows,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition,this.classificationType=this.classificationType??e.classificationType,this.zIndex=this.zIndex??e.zIndex,this.textureCoordinates=this.textureCoordinates??e.textureCoordinates};var km=xI;var D$t=_(T(),1);function _I(e){this._definitionChanged=new be,this._show=void 0,this._showSubscription=void 0,this._positions=void 0,this._positionsSubscription=void 0,this._width=void 0,this._widthSubscription=void 0,this._granularity=void 0,this._granularitySubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._depthFailMaterial=void 0,this._depthFailMaterialSubscription=void 0,this._arcType=void 0,this._arcTypeSubscription=void 0,this._clampToGround=void 0,this._clampToGroundSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this._classificationType=void 0,this._classificationTypeSubscription=void 0,this._zIndex=void 0,this._zIndexSubscription=void 0,this.merge(e??Y.EMPTY_OBJECT)}Object.defineProperties(_I.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:ue("show"),positions:ue("positions"),width:ue("width"),granularity:ue("granularity"),material:Wo("material"),depthFailMaterial:Wo("depthFailMaterial"),arcType:ue("arcType"),clampToGround:ue("clampToGround"),shadows:ue("shadows"),distanceDisplayCondition:ue("distanceDisplayCondition"),classificationType:ue("classificationType"),zIndex:ue("zIndex")});_I.prototype.clone=function(e){return l(e)?(e.show=this.show,e.positions=this.positions,e.width=this.width,e.granularity=this.granularity,e.material=this.material,e.depthFailMaterial=this.depthFailMaterial,e.arcType=this.arcType,e.clampToGround=this.clampToGround,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e.classificationType=this.classificationType,e.zIndex=this.zIndex,e):new _I(this)};_I.prototype.merge=function(e){this.show=this.show??e.show,this.positions=this.positions??e.positions,this.width=this.width??e.width,this.granularity=this.granularity??e.granularity,this.material=this.material??e.material,this.depthFailMaterial=this.depthFailMaterial??e.depthFailMaterial,this.arcType=this.arcType??e.arcType,this.clampToGround=this.clampToGround??e.clampToGround,this.shadows=this.shadows??e.shadows,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition,this.classificationType=this.classificationType??e.classificationType,this.zIndex=this.zIndex??e.zIndex};var dc=_I;var J$t=_(T(),1);function TI(e){this._definitionChanged=new be,this._show=void 0,this._showSubscription=void 0,this._positions=void 0,this._positionsSubscription=void 0,this._shape=void 0,this._shapeSubscription=void 0,this._cornerType=void 0,this._cornerTypeSubscription=void 0,this._granularity=void 0,this._granularitySubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubsription=void 0,this.merge(e??Y.EMPTY_OBJECT)}Object.defineProperties(TI.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:ue("show"),positions:ue("positions"),shape:ue("shape"),cornerType:ue("cornerType"),granularity:ue("granularity"),fill:ue("fill"),material:Wo("material"),outline:ue("outline"),outlineColor:ue("outlineColor"),outlineWidth:ue("outlineWidth"),shadows:ue("shadows"),distanceDisplayCondition:ue("distanceDisplayCondition")});TI.prototype.clone=function(e){return l(e)?(e.show=this.show,e.positions=this.positions,e.shape=this.shape,e.cornerType=this.cornerType,e.granularity=this.granularity,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e):new TI(this)};TI.prototype.merge=function(e){this.show=this.show??e.show,this.positions=this.positions??e.positions,this.shape=this.shape??e.shape,this.cornerType=this.cornerType??e.cornerType,this.granularity=this.granularity??e.granularity,this.fill=this.fill??e.fill,this.material=this.material??e.material,this.outline=this.outline??e.outline,this.outlineColor=this.outlineColor??e.outlineColor,this.outlineWidth=this.outlineWidth??e.outlineWidth,this.shadows=this.shadows??e.shadows,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition};var zx=TI;var nen=_(T(),1);function SI(e){this._definitionChanged=new be,this._show=void 0,this._showSubscription=void 0,this._coordinates=void 0,this._coordinatesSubscription=void 0,this._height=void 0,this._heightSubscription=void 0,this._heightReference=void 0,this._heightReferenceSubscription=void 0,this._extrudedHeight=void 0,this._extrudedHeightSubscription=void 0,this._extrudedHeightReference=void 0,this._extrudedHeightReferenceSubscription=void 0,this._rotation=void 0,this._rotationSubscription=void 0,this._stRotation=void 0,this._stRotationSubscription=void 0,this._granularity=void 0,this._granularitySubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distancedisplayConditionSubscription=void 0,this._classificationType=void 0,this._classificationTypeSubscription=void 0,this._zIndex=void 0,this._zIndexSubscription=void 0,this.merge(e??Y.EMPTY_OBJECT)}Object.defineProperties(SI.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:ue("show"),coordinates:ue("coordinates"),height:ue("height"),heightReference:ue("heightReference"),extrudedHeight:ue("extrudedHeight"),extrudedHeightReference:ue("extrudedHeightReference"),rotation:ue("rotation"),stRotation:ue("stRotation"),granularity:ue("granularity"),fill:ue("fill"),material:Wo("material"),outline:ue("outline"),outlineColor:ue("outlineColor"),outlineWidth:ue("outlineWidth"),shadows:ue("shadows"),distanceDisplayCondition:ue("distanceDisplayCondition"),classificationType:ue("classificationType"),zIndex:ue("zIndex")});SI.prototype.clone=function(e){return l(e)?(e.show=this.show,e.coordinates=this.coordinates,e.height=this.height,e.heightReference=this.heightReference,e.extrudedHeight=this.extrudedHeight,e.extrudedHeightReference=this.extrudedHeightReference,e.rotation=this.rotation,e.stRotation=this.stRotation,e.granularity=this.granularity,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e.classificationType=this.classificationType,e.zIndex=this.zIndex,e):new SI(this)};SI.prototype.merge=function(e){this.show=this.show??e.show,this.coordinates=this.coordinates??e.coordinates,this.height=this.height??e.height,this.heightReference=this.heightReference??e.heightReference,this.extrudedHeight=this.extrudedHeight??e.extrudedHeight,this.extrudedHeightReference=this.extrudedHeightReference??e.extrudedHeightReference,this.rotation=this.rotation??e.rotation,this.stRotation=this.stRotation??e.stRotation,this.granularity=this.granularity??e.granularity,this.fill=this.fill??e.fill,this.material=this.material??e.material,this.outline=this.outline??e.outline,this.outlineColor=this.outlineColor??e.outlineColor,this.outlineWidth=this.outlineWidth??e.outlineWidth,this.shadows=this.shadows??e.shadows,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition,this.classificationType=this.classificationType??e.classificationType,this.zIndex=this.zIndex??e.zIndex};var Um=SI;var len=_(T(),1);function CI(e){this._definitionChanged=new be,this._show=void 0,this._showSubscription=void 0,this._positions=void 0,this._positionsSubscription=void 0,this._minimumHeights=void 0,this._minimumHeightsSubscription=void 0,this._maximumHeights=void 0,this._maximumHeightsSubscription=void 0,this._granularity=void 0,this._granularitySubscription=void 0,this._fill=void 0,this._fillSubscription=void 0,this._material=void 0,this._materialSubscription=void 0,this._outline=void 0,this._outlineSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this._shadows=void 0,this._shadowsSubscription=void 0,this._distanceDisplayCondition=void 0,this._distanceDisplayConditionSubscription=void 0,this.merge(e??Y.EMPTY_OBJECT)}Object.defineProperties(CI.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},show:ue("show"),positions:ue("positions"),minimumHeights:ue("minimumHeights"),maximumHeights:ue("maximumHeights"),granularity:ue("granularity"),fill:ue("fill"),material:Wo("material"),outline:ue("outline"),outlineColor:ue("outlineColor"),outlineWidth:ue("outlineWidth"),shadows:ue("shadows"),distanceDisplayCondition:ue("distanceDisplayCondition")});CI.prototype.clone=function(e){return l(e)?(e.show=this.show,e.positions=this.positions,e.minimumHeights=this.minimumHeights,e.maximumHeights=this.maximumHeights,e.granularity=this.granularity,e.fill=this.fill,e.material=this.material,e.outline=this.outline,e.outlineColor=this.outlineColor,e.outlineWidth=this.outlineWidth,e.shadows=this.shadows,e.distanceDisplayCondition=this.distanceDisplayCondition,e):new CI(this)};CI.prototype.merge=function(e){this.show=this.show??e.show,this.positions=this.positions??e.positions,this.minimumHeights=this.minimumHeights??e.minimumHeights,this.maximumHeights=this.maximumHeights??e.maximumHeights,this.granularity=this.granularity??e.granularity,this.fill=this.fill??e.fill,this.material=this.material??e.material,this.outline=this.outline??e.outline,this.outlineColor=this.outlineColor??e.outlineColor,this.outlineWidth=this.outlineWidth??e.outlineWidth,this.shadows=this.shadows??e.shadows,this.distanceDisplayCondition=this.distanceDisplayCondition??e.distanceDisplayCondition};var Bp=CI;var _ve=new he,nz=[];function Tve(e){return new Oc(e)}function Sve(e){return ue(e,void 0,Tve)}function Ds(e,t){return ue(e,void 0,function(n){return n instanceof t?n:new t(n)})}function Gu(e){e=e??Y.EMPTY_OBJECT;let t=e.id;l(t)||(t=zn()),this._availability=void 0,this._id=t,this._definitionChanged=new be,this._name=e.name,this._show=e.show??!0,this._trackingReferenceFrame=e.trackingReferenceFrame??wp.AUTODETECT,this._parent=void 0,this._propertyNames=["billboard","box","corridor","cylinder","description","ellipse","ellipsoid","label","model","tileset","orientation","path","plane","point","polygon","polyline","polylineVolume","position","properties","rectangle","viewFrom","wall",...nz],this._billboard=void 0,this._billboardSubscription=void 0,this._box=void 0,this._boxSubscription=void 0,this._corridor=void 0,this._corridorSubscription=void 0,this._cylinder=void 0,this._cylinderSubscription=void 0,this._description=void 0,this._descriptionSubscription=void 0,this._ellipse=void 0,this._ellipseSubscription=void 0,this._ellipsoid=void 0,this._ellipsoidSubscription=void 0,this._label=void 0,this._labelSubscription=void 0,this._model=void 0,this._modelSubscription=void 0,this._tileset=void 0,this._tilesetSubscription=void 0,this._orientation=void 0,this._orientationSubscription=void 0,this._path=void 0,this._pathSubscription=void 0,this._plane=void 0,this._planeSubscription=void 0,this._point=void 0,this._pointSubscription=void 0,this._polygon=void 0,this._polygonSubscription=void 0,this._polyline=void 0,this._polylineSubscription=void 0,this._polylineVolume=void 0,this._polylineVolumeSubscription=void 0,this._position=void 0,this._positionSubscription=void 0,this._properties=void 0,this._propertiesSubscription=void 0,this._rectangle=void 0,this._rectangleSubscription=void 0,this._viewFrom=void 0,this._viewFromSubscription=void 0,this._wall=void 0,this._wallSubscription=void 0,this._children=[],this.entityCollection=void 0,this.parent=e.parent,this.merge(e)}function iz(e,t,n){let i=t.length;for(let o=0;o<i;o++){let r=t[o],s=r._show;(!n&&s)!==(n&&s)&&iz(r,r._children,n)}e._definitionChanged.raiseEvent(e,"isShowing",n,!n)}Object.defineProperties(Gu.prototype,{availability:Yc("availability"),id:{get:function(){return this._id}},definitionChanged:{get:function(){return this._definitionChanged}},name:Yc("name"),show:{get:function(){return this._show},set:function(e){if(e===this._show)return;let t=this.isShowing;this._show=e;let n=this.isShowing;t!==n&&iz(this,this._children,n),this._definitionChanged.raiseEvent(this,"show",e,!e)}},trackingReferenceFrame:Yc("trackingReferenceFrame"),isShowing:{get:function(){return this._show&&(!l(this.entityCollection)||this.entityCollection.show)&&(!l(this._parent)||this._parent.isShowing)}},parent:{get:function(){return this._parent},set:function(e){let t=this._parent;if(t===e)return;let n=this.isShowing;if(l(t)){let o=t._children.indexOf(this);t._children.splice(o,1)}this._parent=e,l(e)&&e._children.push(this);let i=this.isShowing;n!==i&&iz(this,this._children,i),this._definitionChanged.raiseEvent(this,"parent",e,t)}},propertyNames:{get:function(){return this._propertyNames}},billboard:Ds("billboard",ac),box:Ds("box",Ax),corridor:Ds("corridor",Nx),cylinder:Ds("cylinder",kx),description:ue("description"),ellipse:Ds("ellipse",Ux),ellipsoid:Ds("ellipsoid",Dx),label:Ds("label",Nm),model:Ds("model",Up),tileset:Ds("tileset",Ox),orientation:ue("orientation"),path:Ds("path",Dp),plane:Ds("plane",gI),point:Ds("point",Yx),polygon:Ds("polygon",km),polyline:Ds("polyline",dc),polylineVolume:Ds("polylineVolume",zx),properties:Ds("properties",zc),position:Sve("position"),rectangle:Ds("rectangle",Um),viewFrom:ue("viewFrom"),wall:Ds("wall",Bp)});Gu.registerEntityType=function(e,t){Object.defineProperties(Gu.prototype,{[e]:Ds(e,t)}),nz.includes(e)||nz.push(e)};Gu.prototype.isAvailable=function(e){let t=this._availability;return!l(t)||t.contains(e)};Gu.prototype.addProperty=function(e){this._propertyNames.push(e),Object.defineProperty(this,e,Yc(e,!0))};Gu.prototype.removeProperty=function(e){let n=this._propertyNames.indexOf(e);this._propertyNames.splice(n,1),delete this[e]};Gu.prototype.merge=function(e){this.name=this.name??e.name,this.availability=this.availability??e.availability;let t=this._propertyNames,n=l(e._propertyNames)?e._propertyNames:Object.keys(e),i=n.length;for(let o=0;o<i;o++){let r=n[o];if(r==="parent"||r==="name"||r==="availability"||r==="children")continue;let s=this[r],a=e[r];!l(s)&&t.indexOf(r)===-1&&this.addProperty(r),l(a)&&(l(s)?l(s.merge)&&s.merge(a):l(a.merge)&&l(a.clone)?this[r]=a.clone():this[r]=a)}};var Die=new $,Bie=new m,Oie=new ve;Gu.prototype.computeModelMatrix=function(e,t){let n=J.getValueOrUndefined(this._position,e,Bie);if(!l(n))return;let i=J.getValueOrUndefined(this._orientation,e,Oie);return l(i)?t=F.fromRotationTranslation($.fromQuaternion(i,Die),n,t):t=Pt.eastNorthUpToFixedFrame(n,void 0,t),t};Gu.prototype.computeModelMatrixForHeightReference=function(e,t,n,i,o){let r=J.getValueOrDefault(t,e,Je.NONE),s=J.getValueOrUndefined(this._position,e,Bie);if(r===Je.NONE||!l(s)||m.equalsEpsilon(s,m.ZERO,X.EPSILON8))return this.computeModelMatrix(e,o);let a=i.cartesianToCartographic(s,_ve);Ru(r)?a.height=n:a.height+=n,s=i.cartographicToCartesian(a,s);let c=J.getValueOrUndefined(this._orientation,e,Oie);return l(c)?o=F.fromRotationTranslation($.fromQuaternion(c,Die),s,o):o=Pt.eastNorthUpToFixedFrame(s,void 0,o),o};Gu.supportsMaterialsforEntitiesOnTerrain=function(e){return Dc.supportsMaterials(e)};Gu.supportsPolylinesOnTerrain=function(e){return Am.isSupported(e)};var jo=Gu;var Cve=new Dt(D.WHITE),Vve=new Qn(!0),Lve=new Qn(!0),Rve=new Qn(!1),Zve=new Qn(D.BLACK),Gve=new Qn(_n.DISABLED),Eve=new Qn(new wt),Ive=new Qn(Un.BOTH);function Hc(e){let t=e.entity,n=e.geometryPropertyName;this._entity=t,this._scene=e.scene,this._fillEnabled=!1,this._isClosed=!1,this._onTerrain=!1,this._dynamic=!1,this._outlineEnabled=!1,this._geometryChanged=new be,this._showProperty=void 0,this._materialProperty=void 0,this._showOutlineProperty=void 0,this._outlineColorProperty=void 0,this._outlineWidth=1,this._shadowsProperty=void 0,this._distanceDisplayConditionProperty=void 0,this._classificationTypeProperty=void 0,this._options=e.geometryOptions,this._geometryPropertyName=n,this._id=`${n}-${t.id}`,this._observedPropertyNames=e.observedPropertyNames,this._supportsMaterialsforEntitiesOnTerrain=jo.supportsMaterialsforEntitiesOnTerrain(e.scene)}Object.defineProperties(Hc.prototype,{id:{get:function(){return this._id}},entity:{get:function(){return this._entity}},fillEnabled:{get:function(){return this._fillEnabled}},hasConstantFill:{get:function(){return!this._fillEnabled||!l(this._entity.availability)&&J.isConstant(this._showProperty)&&J.isConstant(this._fillProperty)}},fillMaterialProperty:{get:function(){return this._materialProperty}},outlineEnabled:{get:function(){return this._outlineEnabled}},hasConstantOutline:{get:function(){return!this._outlineEnabled||!l(this._entity.availability)&&J.isConstant(this._showProperty)&&J.isConstant(this._showOutlineProperty)}},outlineColorProperty:{get:function(){return this._outlineColorProperty}},outlineWidth:{get:function(){return this._outlineWidth}},shadowsProperty:{get:function(){return this._shadowsProperty}},distanceDisplayConditionProperty:{get:function(){return this._distanceDisplayConditionProperty}},classificationTypeProperty:{get:function(){return this._classificationTypeProperty}},isDynamic:{get:function(){return this._dynamic}},isClosed:{get:function(){return this._isClosed}},onTerrain:{get:function(){return this._onTerrain}},geometryChanged:{get:function(){return this._geometryChanged}}});Hc.prototype.isOutlineVisible=function(e){let t=this._entity;return(this._outlineEnabled&&t.isAvailable(e)&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e))??!1};Hc.prototype.isFilled=function(e){let t=this._entity;return(this._fillEnabled&&t.isAvailable(e)&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e))??!1};Hc.prototype.createFillGeometryInstance=pe.throwInstantiationError;Hc.prototype.createOutlineGeometryInstance=pe.throwInstantiationError;Hc.prototype.isDestroyed=function(){return!1};Hc.prototype.destroy=function(){me(this)};Hc.prototype._isHidden=function(e,t){let n=t.show;return l(n)&&n.isConstant&&!n.getValue(Be.MINIMUM_VALUE)};Hc.prototype._isOnTerrain=function(e,t){return!1};Hc.prototype._getIsClosed=function(e){return!0};Hc.prototype._isDynamic=pe.throwInstantiationError;Hc.prototype._setStaticOptions=pe.throwInstantiationError;Hc.prototype._onEntityPropertyChanged=function(e,t,n,i){if(this._observedPropertyNames.indexOf(t)===-1)return;let o=this._entity[this._geometryPropertyName];if(!l(o)){(this._fillEnabled||this._outlineEnabled)&&(this._fillEnabled=!1,this._outlineEnabled=!1,this._geometryChanged.raiseEvent(this));return}let r=o.fill,s=l(r)&&r.isConstant?r.getValue(Be.MINIMUM_VALUE):!0,a=o.outline,c=l(a);if(c&&a.isConstant&&(c=a.getValue(Be.MINIMUM_VALUE)),!s&&!c){(this._fillEnabled||this._outlineEnabled)&&(this._fillEnabled=!1,this._outlineEnabled=!1,this._geometryChanged.raiseEvent(this));return}let d=o.show;if(this._isHidden(e,o)){(this._fillEnabled||this._outlineEnabled)&&(this._fillEnabled=!1,this._outlineEnabled=!1,this._geometryChanged.raiseEvent(this));return}this._materialProperty=o.material??Cve,this._fillProperty=r??Lve,this._showProperty=d??Vve,this._showOutlineProperty=o.outline??Rve,this._outlineColorProperty=c?o.outlineColor??Zve:void 0,this._shadowsProperty=o.shadows??Gve,this._distanceDisplayConditionProperty=o.distanceDisplayCondition??Eve,this._classificationTypeProperty=o.classificationType??Ive,this._fillEnabled=s;let u=this._isOnTerrain(e,o)&&(this._supportsMaterialsforEntitiesOnTerrain||this._materialProperty instanceof Dt);if(c&&u&&(_t(_t.geometryOutlines),c=!1),this._onTerrain=u,this._outlineEnabled=c,this._isDynamic(e,o))this._dynamic||(this._dynamic=!0,this._geometryChanged.raiseEvent(this));else{this._setStaticOptions(e,o),this._isClosed=this._getIsClosed(this._options);let h=o.outlineWidth;this._outlineWidth=l(h)?h.getValue(Be.MINIMUM_VALUE):1,this._dynamic=!1,this._geometryChanged.raiseEvent(this)}};Hc.prototype.createDynamicUpdater=function(e,t){return new this.constructor.DynamicGeometryUpdater(this,e,t)};var oi=Hc;var Ptn=_(T(),1);var ptn=_(T(),1);function yC(e,t){this._callback=void 0,this._isConstant=void 0,this._definitionChanged=new be,this.setCallback(e,t)}Object.defineProperties(yC.prototype,{isConstant:{get:function(){return this._isConstant}},definitionChanged:{get:function(){return this._definitionChanged}}});var Xve=new q;yC.prototype.getValue=function(e,t){return l(e)||(e=q.now(Xve)),this._callback(e,t)};yC.prototype.setCallback=function(e,t){let n=this._callback!==e||this._isConstant!==t;this._callback=e,this._isConstant=t,n&&this._definitionChanged.raiseEvent(this)};yC.prototype.equals=function(e){return this===e||e instanceof yC&&this._callback===e._callback&&this._isConstant===e._isConstant};var Dm=yC;var Ztn=_(T(),1);var Yie=new m;function xC(e,t,n,i){this._scene=e,this._heightReference=n,this._extrudedHeightReference=i,this._positionProperty=t,this._position=new m,this._cartographicPosition=new he,this._normal=new m,this._definitionChanged=new be,this._terrainHeight=0,this._removeCallbackFunc=void 0,this._removeEventListener=void 0,this._removeModeListener=void 0;let o=this;if(l(e.globe)&&(this._removeEventListener=e.terrainProviderChanged.addEventListener(function(){o._updateClamping()}),this._removeModeListener=e.morphComplete.addEventListener(function(){o._updateClamping()})),t.isConstant){let r=t.getValue(Be.MINIMUM_VALUE,Yie);if(!l(r)||m.equals(r,m.ZERO)||!l(e.globe))return;this._position=m.clone(r,this._position),this._updateClamping(),this._normal=e.ellipsoid.geodeticSurfaceNormal(r,this._normal)}}Object.defineProperties(xC.prototype,{isConstant:{get:function(){return!1}},definitionChanged:{get:function(){return this._definitionChanged}}});xC.prototype._updateClamping=function(){l(this._removeCallbackFunc)&&this._removeCallbackFunc();let e=this._scene,t=this._position;if(m.equals(t,m.ZERO)){this._terrainHeight=0;return}let i=e.ellipsoid.cartesianToCartographic(t,this._cartographicPosition),o=e.getHeight(i,this._heightReference);l(o)?this._terrainHeight=o:this._terrainHeight=0;let r=s=>{this._terrainHeight=s.height,this.definitionChanged.raiseEvent()};this._removeCallbackFunc=e.updateHeight(i,r,this._heightReference)};var Wve=new q;xC.prototype.getValue=function(e,t){l(e)||(e=q.now(Wve));let n=J.getValueOrDefault(this._heightReference,e,Je.NONE),i=J.getValueOrDefault(this._extrudedHeightReference,e,Je.NONE);if(n===Je.NONE&&!sC(i))return this._position=m.clone(m.ZERO,this._position),m.clone(m.ZERO,t);if(this._positionProperty.isConstant)return m.multiplyByScalar(this._normal,this._terrainHeight,t);let o=this._scene,r=this._positionProperty.getValue(e,Yie);if(!l(r)||m.equals(r,m.ZERO)||!l(o.globe))return m.clone(m.ZERO,t);if(m.equalsEpsilon(this._position,r,X.EPSILON10))return m.multiplyByScalar(this._normal,this._terrainHeight,t);this._position=m.clone(r,this._position),this._updateClamping();let s=o.ellipsoid.geodeticSurfaceNormal(r,this._normal);return m.multiplyByScalar(s,this._terrainHeight,t)};xC.prototype.isDestroyed=function(){return!1};xC.prototype.destroy=function(){return l(this._removeEventListener)&&this._removeEventListener(),l(this._removeModeListener)&&this._removeModeListener(),l(this._removeCallbackFunc)&&this._removeCallbackFunc(),me(this)};var Hx=xC;function Pve(e,t,n,i){if(oi.prototype._onEntityPropertyChanged.call(this,e,t,n,i),this._observedPropertyNames.indexOf(t)===-1)return;let o=this._entity[this._geometryPropertyName];if(!l(o))return;l(this._terrainOffsetProperty)&&(this._terrainOffsetProperty.destroy(),this._terrainOffsetProperty=void 0);let r=o.heightReference;if(l(r)){let s=new Dm(this._computeCenter.bind(this),!this._dynamic);this._terrainOffsetProperty=new Hx(this._scene,s,r)}}var Op=Pve;var zie=m.ZERO,Hie=new m,vve=new m,Kie=new D;function wve(e){this.id=e,this.vertexFormat=void 0,this.dimensions=void 0,this.offsetAttribute=void 0}function xd(e,t){oi.call(this,{entity:e,scene:t,geometryOptions:new wve(e),geometryPropertyName:"box",observedPropertyNames:["availability","position","orientation","box"]}),this._onEntityPropertyChanged(e,"box",e.box,void 0)}l(Object.create)&&(xd.prototype=Object.create(oi.prototype),xd.prototype.constructor=xd);Object.defineProperties(xd.prototype,{terrainOffsetProperty:{get:function(){return this._terrainOffsetProperty}}});xd.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=new xn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),o=this._distanceDisplayConditionProperty.getValue(e),r=kn.fromDistanceDisplayCondition(o),s={show:i,distanceDisplayCondition:r,color:void 0,offset:void 0};if(this._materialProperty instanceof Dt){let a;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(a=this._materialProperty.color.getValue(e,Kie)),l(a)||(a=D.WHITE),s.color=Yt.fromColor(a)}return l(this._options.offsetAttribute)&&(s.offset=$i.fromCartesian3(J.getValueOrDefault(this._terrainOffsetProperty,e,zie,Hie))),new Et({id:t,geometry:Wa.fromDimensions(this._options),modelMatrix:t.computeModelMatrixForHeightReference(e,t.box.heightReference,this._options.dimensions.z*.5,this._scene.ellipsoid),attributes:s})};xd.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=J.getValueOrDefault(this._outlineColorProperty,e,D.BLACK,Kie),o=this._distanceDisplayConditionProperty.getValue(e),r={show:new xn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Yt.fromColor(i),distanceDisplayCondition:kn.fromDistanceDisplayCondition(o),offset:void 0};return l(this._options.offsetAttribute)&&(r.offset=$i.fromCartesian3(J.getValueOrDefault(this._terrainOffsetProperty,e,zie,Hie))),new Et({id:t,geometry:Fm.fromDimensions(this._options),modelMatrix:t.computeModelMatrixForHeightReference(e,t.box.heightReference,this._options.dimensions.z*.5,this._scene.ellipsoid),attributes:r})};xd.prototype._computeCenter=function(e,t){return J.getValueOrUndefined(this._entity.position,e,t)};xd.prototype._isHidden=function(e,t){return!l(t.dimensions)||!l(e.position)||oi.prototype._isHidden.call(this,e,t)};xd.prototype._isDynamic=function(e,t){return!e.position.isConstant||!J.isConstant(e.orientation)||!t.dimensions.isConstant||!J.isConstant(t.outlineWidth)};xd.prototype._setStaticOptions=function(e,t){let n=J.getValueOrDefault(t.heightReference,Be.MINIMUM_VALUE,Je.NONE),i=this._options;i.vertexFormat=this._materialProperty instanceof Dt?dn.VERTEX_FORMAT:ao.MaterialSupport.TEXTURED.vertexFormat,i.dimensions=t.dimensions.getValue(Be.MINIMUM_VALUE,i.dimensions),i.offsetAttribute=n!==Je.NONE?rn.ALL:void 0};xd.prototype._onEntityPropertyChanged=Op;xd.DynamicGeometryUpdater=_C;function _C(e,t,n){ii.call(this,e,t,n)}l(Object.create)&&(_C.prototype=Object.create(ii.prototype),_C.prototype.constructor=_C);_C.prototype._isHidden=function(e,t,n){let i=J.getValueOrUndefined(e.position,n,vve),o=this._options.dimensions;return!l(i)||!l(o)||ii.prototype._isHidden.call(this,e,t,n)};_C.prototype._setOptions=function(e,t,n){let i=J.getValueOrDefault(t.heightReference,n,Je.NONE),o=this._options;o.dimensions=J.getValueOrUndefined(t.dimensions,n,o.dimensions),o.offsetAttribute=i!==Je.NONE?rn.ALL:void 0};var VI=xd;var cnn=_(T(),1);function Kx(e,t,n){this._callback=void 0,this._isConstant=void 0,this._referenceFrame=n??ki.FIXED,this._definitionChanged=new be,this.setCallback(e,t)}Object.defineProperties(Kx.prototype,{isConstant:{get:function(){return this._isConstant}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return this._referenceFrame}}});var Fve=new q;Kx.prototype.getValue=function(e,t){return l(e)||(e=q.now(Fve)),this.getValueInReferenceFrame(e,ki.FIXED,t)};Kx.prototype.setCallback=function(e,t){let n=this._callback!==e||this._isConstant!==t;this._callback=e,this._isConstant=t,n&&this._definitionChanged.raiseEvent(this)};Kx.prototype.getValueInReferenceFrame=function(e,t,n){let i=this._callback(e,n);return Mm.convertToReferenceFrame(e,i,this._referenceFrame,t,n)};Kx.prototype.equals=function(e){return this===e||e instanceof Kx&&this._callback===e._callback&&this._isConstant===e._isConstant&&this._referenceFrame===e._referenceFrame};var LI=Kx;var AOn=_(T(),1);var ROn=_(T(),1);var fnn=_(T(),1);var dnn=_(T(),1);/*! @license DOMPurify 3.2.4 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.4/LICENSE */var{entries:ooe,setPrototypeOf:Jie,isFrozen:Ave,getPrototypeOf:Mve,getOwnPropertyDescriptor:Nve}=Object,{freeze:Jc,seal:Eu,create:roe}=Object,{apply:lz,construct:dz}=typeof Reflect<"u"&&Reflect;Jc||(Jc=function(t){return t});Eu||(Eu=function(t){return t});lz||(lz=function(t,n,i){return t.apply(n,i)});dz||(dz=function(t,n){return new t(...n)});var m5=Qc(Array.prototype.forEach),kve=Qc(Array.prototype.lastIndexOf),Qie=Qc(Array.prototype.pop),RI=Qc(Array.prototype.push),Uve=Qc(Array.prototype.splice),f5=Qc(String.prototype.toLowerCase),oz=Qc(String.prototype.toString),jie=Qc(String.prototype.match),ZI=Qc(String.prototype.replace),Dve=Qc(String.prototype.indexOf),Bve=Qc(String.prototype.trim),Bm=Qc(Object.prototype.hasOwnProperty),Kc=Qc(RegExp.prototype.test),GI=Ove(TypeError);function Qc(e){return function(t){for(var n=arguments.length,i=new Array(n>1?n-1:0),o=1;o<n;o++)i[o-1]=arguments[o];return lz(e,t,i)}}function Ove(e){return function(){for(var t=arguments.length,n=new Array(t),i=0;i<t;i++)n[i]=arguments[i];return dz(e,n)}}function Wi(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:f5;Jie&&Jie(e,null);let i=t.length;for(;i--;){let o=t[i];if(typeof o=="string"){let r=n(o);r!==o&&(Ave(t)||(t[i]=r),o=r)}e[o]=!0}return e}function Yve(e){for(let t=0;t<e.length;t++)Bm(e,t)||(e[t]=null);return e}function Jx(e){let t=roe(null);for(let[n,i]of ooe(e))Bm(e,n)&&(Array.isArray(i)?t[n]=Yve(i):i&&typeof i=="object"&&i.constructor===Object?t[n]=Jx(i):t[n]=i);return t}function EI(e,t){for(;e!==null;){let i=Nve(e,t);if(i){if(i.get)return Qc(i.get);if(typeof i.value=="function")return Qc(i.value)}e=Mve(e)}function n(){return null}return n}var qie=Jc(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","section","select","shadow","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),rz=Jc(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","filter","font","g","glyph","glyphref","hkern","image","line","lineargradient","marker","mask","metadata","mpath","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),sz=Jc(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),zve=Jc(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),az=Jc(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),Hve=Jc(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),$ie=Jc(["#text"]),eoe=Jc(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","face","for","headers","height","hidden","high","href","hreflang","id","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","pattern","placeholder","playsinline","popover","popovertarget","popovertargetaction","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","wrap","xmlns","slot"]),cz=Jc(["accent-height","accumulate","additive","alignment-baseline","amplitude","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","exponent","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","intercept","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","slope","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","tablevalues","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),toe=Jc(["accent","accentunder","align","bevelled","close","columnsalign","columnlines","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lspace","lquote","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),h5=Jc(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),Kve=Eu(/\{\{[\w\W]*|[\w\W]*\}\}/gm),Jve=Eu(/<%[\w\W]*|[\w\W]*%>/gm),Qve=Eu(/\$\{[\w\W]*/gm),jve=Eu(/^data-[\-\w.\u00B7-\uFFFF]+$/),qve=Eu(/^aria-[\-\w]+$/),soe=Eu(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),$ve=Eu(/^(?:\w+script|data):/i),ewe=Eu(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),aoe=Eu(/^html$/i),twe=Eu(/^[a-z][.\w]*(-[.\w]+)+$/i),noe=Object.freeze({__proto__:null,ARIA_ATTR:qve,ATTR_WHITESPACE:ewe,CUSTOM_ELEMENT:twe,DATA_ATTR:jve,DOCTYPE_NAME:aoe,ERB_EXPR:Jve,IS_ALLOWED_URI:soe,IS_SCRIPT_OR_DATA:$ve,MUSTACHE_EXPR:Kve,TMPLIT_EXPR:Qve}),II={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,progressingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},nwe=function(){return typeof window>"u"?null:window},iwe=function(t,n){if(typeof t!="object"||typeof t.createPolicy!="function")return null;let i=null,o="data-tt-policy-suffix";n&&n.hasAttribute(o)&&(i=n.getAttribute(o));let r="dompurify"+(i?"#"+i:"");try{return t.createPolicy(r,{createHTML(s){return s},createScriptURL(s){return s}})}catch{return console.warn("TrustedTypes policy "+r+" could not be created."),null}},ioe=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function coe(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:nwe(),t=ln=>coe(ln);if(t.version="3.2.4",t.removed=[],!e||!e.document||e.document.nodeType!==II.document||!e.Element)return t.isSupported=!1,t;let{document:n}=e,i=n,o=i.currentScript,{DocumentFragment:r,HTMLTemplateElement:s,Node:a,Element:c,NodeFilter:d,NamedNodeMap:u=e.NamedNodeMap||e.MozNamedAttrMap,HTMLFormElement:h,DOMParser:p,trustedTypes:g}=e,f=c.prototype,y=EI(f,"cloneNode"),x=EI(f,"remove"),S=EI(f,"nextSibling"),C=EI(f,"childNodes"),V=EI(f,"parentNode");if(typeof s=="function"){let ln=n.createElement("template");ln.content&&ln.content.ownerDocument&&(n=ln.content.ownerDocument)}let L,Z="",{implementation:E,createNodeIterator:P,createDocumentFragment:W,getElementsByTagName:v}=n,{importNode:A}=i,b=ioe();t.isSupported=typeof ooe=="function"&&typeof V=="function"&&E&&E.createHTMLDocument!==void 0;let{MUSTACHE_EXPR:R,ERB_EXPR:G,TMPLIT_EXPR:I,DATA_ATTR:w,ARIA_ATTR:M,IS_SCRIPT_OR_DATA:B,ATTR_WHITESPACE:k,CUSTOM_ELEMENT:O}=noe,{IS_ALLOWED_URI:N}=noe,z=null,K=Wi({},[...qie,...rz,...sz,...az,...$ie]),te=null,H=Wi({},[...eoe,...cz,...toe,...h5]),j=Object.seal(roe(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),ee=null,fe=null,Te=!0,de=!0,xe=!1,Ce=!0,Ie=!1,Le=!0,Ne=!1,Oe=!1,qe=!1,Rt=!1,Lt=!1,ke=!1,Ht=!0,ut=!1,mt="user-content-",Pn=!0,cn=!1,ge={},Ve=null,bn=Wi({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]),pt=null,so=Wi({},["audio","video","img","source","image","track"]),Eo=null,aa=Wi({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Gr="http://www.w3.org/1998/Math/MathML",Ts="http://www.w3.org/2000/svg",Fe="http://www.w3.org/1999/xhtml",rt=Fe,He=!1,Qe=null,bt=Wi({},[Gr,Ts,Fe],oz),Ot=Wi({},["mi","mo","mn","ms","mtext"]),Cn=Wi({},["annotation-xml"]),Io=Wi({},["title","style","font","a","script"]),So=null,Qa=["application/xhtml+xml","text/html"],ja="text/html",Vi=null,gi=null,ca=n.createElement("form"),Hr=function(Re){return Re instanceof RegExp||Re instanceof Function},Tl=function(){let Re=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(gi&&gi===Re)){if((!Re||typeof Re!="object")&&(Re={}),Re=Jx(Re),So=Qa.indexOf(Re.PARSER_MEDIA_TYPE)===-1?ja:Re.PARSER_MEDIA_TYPE,Vi=So==="application/xhtml+xml"?oz:f5,z=Bm(Re,"ALLOWED_TAGS")?Wi({},Re.ALLOWED_TAGS,Vi):K,te=Bm(Re,"ALLOWED_ATTR")?Wi({},Re.ALLOWED_ATTR,Vi):H,Qe=Bm(Re,"ALLOWED_NAMESPACES")?Wi({},Re.ALLOWED_NAMESPACES,oz):bt,Eo=Bm(Re,"ADD_URI_SAFE_ATTR")?Wi(Jx(aa),Re.ADD_URI_SAFE_ATTR,Vi):aa,pt=Bm(Re,"ADD_DATA_URI_TAGS")?Wi(Jx(so),Re.ADD_DATA_URI_TAGS,Vi):so,Ve=Bm(Re,"FORBID_CONTENTS")?Wi({},Re.FORBID_CONTENTS,Vi):bn,ee=Bm(Re,"FORBID_TAGS")?Wi({},Re.FORBID_TAGS,Vi):{},fe=Bm(Re,"FORBID_ATTR")?Wi({},Re.FORBID_ATTR,Vi):{},ge=Bm(Re,"USE_PROFILES")?Re.USE_PROFILES:!1,Te=Re.ALLOW_ARIA_ATTR!==!1,de=Re.ALLOW_DATA_ATTR!==!1,xe=Re.ALLOW_UNKNOWN_PROTOCOLS||!1,Ce=Re.ALLOW_SELF_CLOSE_IN_ATTR!==!1,Ie=Re.SAFE_FOR_TEMPLATES||!1,Le=Re.SAFE_FOR_XML!==!1,Ne=Re.WHOLE_DOCUMENT||!1,Rt=Re.RETURN_DOM||!1,Lt=Re.RETURN_DOM_FRAGMENT||!1,ke=Re.RETURN_TRUSTED_TYPE||!1,qe=Re.FORCE_BODY||!1,Ht=Re.SANITIZE_DOM!==!1,ut=Re.SANITIZE_NAMED_PROPS||!1,Pn=Re.KEEP_CONTENT!==!1,cn=Re.IN_PLACE||!1,N=Re.ALLOWED_URI_REGEXP||soe,rt=Re.NAMESPACE||Fe,Ot=Re.MATHML_TEXT_INTEGRATION_POINTS||Ot,Cn=Re.HTML_INTEGRATION_POINTS||Cn,j=Re.CUSTOM_ELEMENT_HANDLING||{},Re.CUSTOM_ELEMENT_HANDLING&&Hr(Re.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(j.tagNameCheck=Re.CUSTOM_ELEMENT_HANDLING.tagNameCheck),Re.CUSTOM_ELEMENT_HANDLING&&Hr(Re.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(j.attributeNameCheck=Re.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),Re.CUSTOM_ELEMENT_HANDLING&&typeof Re.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(j.allowCustomizedBuiltInElements=Re.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),Ie&&(de=!1),Lt&&(Rt=!0),ge&&(z=Wi({},$ie),te=[],ge.html===!0&&(Wi(z,qie),Wi(te,eoe)),ge.svg===!0&&(Wi(z,rz),Wi(te,cz),Wi(te,h5)),ge.svgFilters===!0&&(Wi(z,sz),Wi(te,cz),Wi(te,h5)),ge.mathMl===!0&&(Wi(z,az),Wi(te,toe),Wi(te,h5))),Re.ADD_TAGS&&(z===K&&(z=Jx(z)),Wi(z,Re.ADD_TAGS,Vi)),Re.ADD_ATTR&&(te===H&&(te=Jx(te)),Wi(te,Re.ADD_ATTR,Vi)),Re.ADD_URI_SAFE_ATTR&&Wi(Eo,Re.ADD_URI_SAFE_ATTR,Vi),Re.FORBID_CONTENTS&&(Ve===bn&&(Ve=Jx(Ve)),Wi(Ve,Re.FORBID_CONTENTS,Vi)),Pn&&(z["#text"]=!0),Ne&&Wi(z,["html","head","body"]),z.table&&(Wi(z,["tbody"]),delete ee.tbody),Re.TRUSTED_TYPES_POLICY){if(typeof Re.TRUSTED_TYPES_POLICY.createHTML!="function")throw GI('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof Re.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw GI('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');L=Re.TRUSTED_TYPES_POLICY,Z=L.createHTML("")}else L===void 0&&(L=iwe(g,o)),L!==null&&typeof Z=="string"&&(Z=L.createHTML(""));Jc&&Jc(Re),gi=Re}},go=Wi({},[...rz,...sz,...zve]),Er=Wi({},[...az,...Hve]),gp=function(Re){let Zt=V(Re);(!Zt||!Zt.tagName)&&(Zt={namespaceURI:rt,tagName:"template"});let gn=f5(Re.tagName),pr=f5(Zt.tagName);return Qe[Re.namespaceURI]?Re.namespaceURI===Ts?Zt.namespaceURI===Fe?gn==="svg":Zt.namespaceURI===Gr?gn==="svg"&&(pr==="annotation-xml"||Ot[pr]):!!go[gn]:Re.namespaceURI===Gr?Zt.namespaceURI===Fe?gn==="math":Zt.namespaceURI===Ts?gn==="math"&&Cn[pr]:!!Er[gn]:Re.namespaceURI===Fe?Zt.namespaceURI===Ts&&!Cn[pr]||Zt.namespaceURI===Gr&&!Ot[pr]?!1:!Er[gn]&&(Io[gn]||!go[gn]):!!(So==="application/xhtml+xml"&&Qe[Re.namespaceURI]):!1},Kr=function(Re){RI(t.removed,{element:Re});try{V(Re).removeChild(Re)}catch{x(Re)}},mu=function(Re,Zt){try{RI(t.removed,{attribute:Zt.getAttributeNode(Re),from:Zt})}catch{RI(t.removed,{attribute:null,from:Zt})}if(Zt.removeAttribute(Re),Re==="is")if(Rt||Lt)try{Kr(Zt)}catch{}else try{Zt.setAttribute(Re,"")}catch{}},qa=function(Re){let Zt=null,gn=null;if(qe)Re="<remove></remove>"+Re;else{let Ga=jie(Re,/^[\r\n\t ]+/);gn=Ga&&Ga[0]}So==="application/xhtml+xml"&&rt===Fe&&(Re='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+Re+"</body></html>");let pr=L?L.createHTML(Re):Re;if(rt===Fe)try{Zt=new p().parseFromString(pr,So)}catch{}if(!Zt||!Zt.documentElement){Zt=E.createDocument(rt,"template",null);try{Zt.documentElement.innerHTML=He?Z:pr}catch{}}let $a=Zt.body||Zt.documentElement;return Re&&gn&&$a.insertBefore(n.createTextNode(gn),$a.childNodes[0]||null),rt===Fe?v.call(Zt,Ne?"html":"body")[0]:Ne?Zt.documentElement:$a},qy=function(Re){return P.call(Re.ownerDocument||Re,Re,d.SHOW_ELEMENT|d.SHOW_COMMENT|d.SHOW_TEXT|d.SHOW_PROCESSING_INSTRUCTION|d.SHOW_CDATA_SECTION,null)},la=function(Re){return Re instanceof h&&(typeof Re.nodeName!="string"||typeof Re.textContent!="string"||typeof Re.removeChild!="function"||!(Re.attributes instanceof u)||typeof Re.removeAttribute!="function"||typeof Re.setAttribute!="function"||typeof Re.namespaceURI!="string"||typeof Re.insertBefore!="function"||typeof Re.hasChildNodes!="function")},Sl=function(Re){return typeof a=="function"&&Re instanceof a};function Pc(ln,Re,Zt){m5(ln,gn=>{gn.call(t,Re,Zt,gi)})}let ls=function(Re){let Zt=null;if(Pc(b.beforeSanitizeElements,Re,null),la(Re))return Kr(Re),!0;let gn=Vi(Re.nodeName);if(Pc(b.uponSanitizeElement,Re,{tagName:gn,allowedTags:z}),Re.hasChildNodes()&&!Sl(Re.firstElementChild)&&Kc(/<[/\w]/g,Re.innerHTML)&&Kc(/<[/\w]/g,Re.textContent)||Re.nodeType===II.progressingInstruction||Le&&Re.nodeType===II.comment&&Kc(/<[/\w]/g,Re.data))return Kr(Re),!0;if(!z[gn]||ee[gn]){if(!ee[gn]&&fu(gn)&&(j.tagNameCheck instanceof RegExp&&Kc(j.tagNameCheck,gn)||j.tagNameCheck instanceof Function&&j.tagNameCheck(gn)))return!1;if(Pn&&!Ve[gn]){let pr=V(Re)||Re.parentNode,$a=C(Re)||Re.childNodes;if($a&&pr){let Ga=$a.length;for(let Cl=Ga-1;Cl>=0;--Cl){let qh=y($a[Cl],!0);qh.__removalCount=(Re.__removalCount||0)+1,pr.insertBefore(qh,S(Re))}}}return Kr(Re),!0}return Re instanceof c&&!gp(Re)||(gn==="noscript"||gn==="noembed"||gn==="noframes")&&Kc(/<\/no(script|embed|frames)/i,Re.innerHTML)?(Kr(Re),!0):(Ie&&Re.nodeType===II.text&&(Zt=Re.textContent,m5([R,G,I],pr=>{Zt=ZI(Zt,pr," ")}),Re.textContent!==Zt&&(RI(t.removed,{element:Re.cloneNode()}),Re.textContent=Zt)),Pc(b.afterSanitizeElements,Re,null),!1)},hu=function(Re,Zt,gn){if(Ht&&(Zt==="id"||Zt==="name")&&(gn in n||gn in ca))return!1;if(!(de&&!fe[Zt]&&Kc(w,Zt))){if(!(Te&&Kc(M,Zt))){if(!te[Zt]||fe[Zt]){if(!(fu(Re)&&(j.tagNameCheck instanceof RegExp&&Kc(j.tagNameCheck,Re)||j.tagNameCheck instanceof Function&&j.tagNameCheck(Re))&&(j.attributeNameCheck instanceof RegExp&&Kc(j.attributeNameCheck,Zt)||j.attributeNameCheck instanceof Function&&j.attributeNameCheck(Zt))||Zt==="is"&&j.allowCustomizedBuiltInElements&&(j.tagNameCheck instanceof RegExp&&Kc(j.tagNameCheck,gn)||j.tagNameCheck instanceof Function&&j.tagNameCheck(gn))))return!1}else if(!Eo[Zt]){if(!Kc(N,ZI(gn,k,""))){if(!((Zt==="src"||Zt==="xlink:href"||Zt==="href")&&Re!=="script"&&Dve(gn,"data:")===0&&pt[Re])){if(!(xe&&!Kc(B,ZI(gn,k,"")))){if(gn)return!1}}}}}}return!0},fu=function(Re){return Re!=="annotation-xml"&&jie(Re,O)},pu=function(Re){Pc(b.beforeSanitizeAttributes,Re,null);let{attributes:Zt}=Re;if(!Zt||la(Re))return;let gn={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:te,forceKeepAttr:void 0},pr=Zt.length;for(;pr--;){let $a=Zt[pr],{name:Ga,namespaceURI:Cl,value:qh}=$a,YL=Vi(Ga),vc=Ga==="value"?qh:Bve(qh);if(gn.attrName=YL,gn.attrValue=vc,gn.keepAttr=!0,gn.forceKeepAttr=void 0,Pc(b.uponSanitizeAttribute,Re,gn),vc=gn.attrValue,ut&&(YL==="id"||YL==="name")&&(mu(Ga,Re),vc=mt+vc),Le&&Kc(/((--!?|])>)|<\/(style|title)/i,vc)){mu(Ga,Re);continue}if(gn.forceKeepAttr||(mu(Ga,Re),!gn.keepAttr))continue;if(!Ce&&Kc(/\/>/i,vc)){mu(Ga,Re);continue}Ie&&m5([R,G,I],bq=>{vc=ZI(vc,bq," ")});let pq=Vi(Re.nodeName);if(hu(pq,YL,vc)){if(L&&typeof g=="object"&&typeof g.getAttributeType=="function"&&!Cl)switch(g.getAttributeType(pq,YL)){case"TrustedHTML":{vc=L.createHTML(vc);break}case"TrustedScriptURL":{vc=L.createScriptURL(vc);break}}try{Cl?Re.setAttributeNS(Cl,Ga,vc):Re.setAttribute(Ga,vc),la(Re)?Kr(Re):Qie(t.removed)}catch{}}}Pc(b.afterSanitizeAttributes,Re,null)},Fo=function ln(Re){let Zt=null,gn=qy(Re);for(Pc(b.beforeSanitizeShadowDOM,Re,null);Zt=gn.nextNode();)Pc(b.uponSanitizeShadowNode,Zt,null),ls(Zt),pu(Zt),Zt.content instanceof r&&ln(Zt.content);Pc(b.afterSanitizeShadowDOM,Re,null)};return t.sanitize=function(ln){let Re=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},Zt=null,gn=null,pr=null,$a=null;if(He=!ln,He&&(ln="<!-->"),typeof ln!="string"&&!Sl(ln))if(typeof ln.toString=="function"){if(ln=ln.toString(),typeof ln!="string")throw GI("dirty is not a string, aborting")}else throw GI("toString is not a function");if(!t.isSupported)return ln;if(Oe||Tl(Re),t.removed=[],typeof ln=="string"&&(cn=!1),cn){if(ln.nodeName){let qh=Vi(ln.nodeName);if(!z[qh]||ee[qh])throw GI("root node is forbidden and cannot be sanitized in-place")}}else if(ln instanceof a)Zt=qa("<!---->"),gn=Zt.ownerDocument.importNode(ln,!0),gn.nodeType===II.element&&gn.nodeName==="BODY"||gn.nodeName==="HTML"?Zt=gn:Zt.appendChild(gn);else{if(!Rt&&!Ie&&!Ne&&ln.indexOf("<")===-1)return L&&ke?L.createHTML(ln):ln;if(Zt=qa(ln),!Zt)return Rt?null:ke?Z:""}Zt&&qe&&Kr(Zt.firstChild);let Ga=qy(cn?ln:Zt);for(;pr=Ga.nextNode();)ls(pr),pu(pr),pr.content instanceof r&&Fo(pr.content);if(cn)return ln;if(Rt){if(Lt)for($a=W.call(Zt.ownerDocument);Zt.firstChild;)$a.appendChild(Zt.firstChild);else $a=Zt;return(te.shadowroot||te.shadowrootmode)&&($a=A.call(i,$a,!0)),$a}let Cl=Ne?Zt.outerHTML:Zt.innerHTML;return Ne&&z["!doctype"]&&Zt.ownerDocument&&Zt.ownerDocument.doctype&&Zt.ownerDocument.doctype.name&&Kc(aoe,Zt.ownerDocument.doctype.name)&&(Cl="<!DOCTYPE "+Zt.ownerDocument.doctype.name+`> `+Cl),Ie&&m5([R,G,I],qh=>{Cl=ZI(Cl,qh," ")}),L&&ke?L.createHTML(Cl):Cl},t.setConfig=function(){let ln=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};Tl(ln),Oe=!0},t.clearConfig=function(){gi=null,Oe=!1},t.isValidAttribute=function(ln,Re,Zt){gi||Tl({});let gn=Vi(ln),pr=Vi(Re);return hu(gn,pr,Zt)},t.addHook=function(ln,Re){typeof Re=="function"&&RI(b[ln],Re)},t.removeHook=function(ln,Re){if(Re!==void 0){let Zt=kve(b[ln],Re);return Zt===-1?void 0:Uve(b[ln],Zt,1)[0]}return Qie(b[ln])},t.removeHooks=function(ln){b[ln]=[]},t.removeAllHooks=function(){b=ioe()},t}var loe=coe();var owe=0,uz={};function ff(e,t){let n,i=e;l(uz[i])?n=uz[i]:(n=owe++,uz[i]=n),t=t??!1,this._id=n,this._html=e,this._showOnScreen=t,this._element=void 0}Object.defineProperties(ff.prototype,{html:{get:function(){return this._html}},id:{get:function(){return this._id}},showOnScreen:{get:function(){return this._showOnScreen},set:function(e){this._showOnScreen=e}},element:{get:function(){if(!l(this._element)){let e=loe.sanitize(this._html),t=document.createElement("div");t.className="cesium-credit-wrapper",t._creditId=this._id,t.style.display="inline",t.innerHTML=e;let n=t.querySelectorAll("a");for(let i=0;i<n.length;i++)n[i].setAttribute("target","_blank");this._element=t}return this._element}}});ff.equals=function(e,t){return e===t||l(e)&&l(t)&&e._id===t._id&&e._showOnScreen===t._showOnScreen};ff.prototype.equals=function(e){return ff.equals(this,e)};ff.prototype.isIon=function(){return this.html.indexOf("ion-credit.png")!==-1};ff.getIonCredit=function(e){let t=l(e.collapsible)&&!e.collapsible;return new ff(e.html,t)};ff.clone=function(e){if(l(e))return new ff(e.html,e.showOnScreen)};var Ct=ff;var gnn=_(T(),1);function rwe(e,t){_t(e,t)}var Vs=rwe;var wnn=_(T(),1);var Gnn=_(T(),1);function Qx(e){this._url=e,this._cubeMapBuffers=void 0,this._texture=void 0,this._maximumMipmapLevel=void 0,this._loading=!1,this._ready=!1,this._errorEvent=new be}Object.defineProperties(Qx.prototype,{url:{get:function(){return this._url}},errorEvent:{get:function(){return this._errorEvent}},texture:{get:function(){return this._texture}},maximumMipmapLevel:{get:function(){return this._maximumMipmapLevel}},ready:{get:function(){return this._ready}}});Qx.isSupported=function(e){return(e.colorBufferHalfFloat&&e.halfFloatingPointTexture||e.floatingPointTexture&&e.colorBufferFloat)&&e.supportsTextureLod};function mz(e){e._cubeMapBuffers=void 0}Qx.prototype.update=function(e){let{context:t}=e;if(!Qx.isSupported(t))return;if(l(this._texture)){mz(this);return}if(!l(this._texture)&&!this._loading){let u=t.textureCache.getTexture(this._url);l(u)&&(mz(this),this._texture=u,this._maximumMipmapLevel=this._texture.maximumMipmapLevel,this._ready=!0)}let n=this._cubeMapBuffers;if(!l(n)&&!this._loading){let u=this;Zl(this._url).then(function(h){u._cubeMapBuffers=h,u._loading=!1}).catch(function(h){u.isDestroyed()||u._errorEvent.raiseEvent(h)}),this._loading=!0}if(!l(this._cubeMapBuffers))return;let{pixelDatatype:i}=n[0].positiveX;l(i)||(i=t.halfFloatingPointTexture?je.HALF_FLOAT:je.FLOAT);let o=it.RGBA,r=n.length;this._maximumMipmapLevel=r-1;let s=n[0].positiveX.width,a=Math.log2(s)+1;if(r!==a){let u={};Object.values(xr.FaceName).forEach(h=>{u[h]=void 0});for(let h=r;h<a;h++)n.push(u)}let c=new qt({minificationFilter:jt.LINEAR_MIPMAP_LINEAR}),d=new xr({context:t,source:n[0],flipY:!1,pixelDatatype:i,pixelFormat:o,sampler:c});d.loadMipmaps(n.slice(1)),this._texture=d,this._texture.maximumMipmapLevel=this._maximumMipmapLevel,t.textureCache.addTexture(this._url,this._texture),this._ready=!0};Qx.prototype.isDestroyed=function(){return!1};Qx.prototype.destroy=function(){return mz(this),this._texture=this._texture&&this._texture.destroy(),me(this)};var Om=Qx;function XI(e){e=e??Y.EMPTY_OBJECT;let t=l(e.imageBasedLightingFactor)?U.clone(e.imageBasedLightingFactor):new U(1,1);this._imageBasedLightingFactor=t;let n=e.sphericalHarmonicCoefficients;this._sphericalHarmonicCoefficients=n,this._specularEnvironmentMaps=e.specularEnvironmentMaps,this._specularEnvironmentCubeMap=void 0,this._specularEnvironmentCubeMapDirty=!0,this._specularEnvironmentMapLoaded=!1,this._previousSpecularEnvironmentMapLoaded=!1,this._useDefaultSpecularMaps=!1,this._useDefaultSphericalHarmonics=!1,this._shouldRegenerateShaders=!1,this._previousFrameNumber=void 0,this._previousImageBasedLightingFactor=U.clone(t),this._previousSphericalHarmonicCoefficients=n,this._removeErrorListener=void 0}Object.defineProperties(XI.prototype,{imageBasedLightingFactor:{get:function(){return this._imageBasedLightingFactor},set:function(e){this._previousImageBasedLightingFactor=U.clone(this._imageBasedLightingFactor,this._previousImageBasedLightingFactor),this._imageBasedLightingFactor=U.clone(e,this._imageBasedLightingFactor)}},sphericalHarmonicCoefficients:{get:function(){return this._sphericalHarmonicCoefficients},set:function(e){this._previousSphericalHarmonicCoefficients=this._sphericalHarmonicCoefficients,this._sphericalHarmonicCoefficients=e}},specularEnvironmentMaps:{get:function(){return this._specularEnvironmentMaps},set:function(e){e!==this._specularEnvironmentMaps&&(this._specularEnvironmentCubeMapDirty=this._specularEnvironmentCubeMapDirty||e!==this._specularEnvironmentMaps,this._specularEnvironmentMapLoaded=!1),this._specularEnvironmentMaps=e}},enabled:{get:function(){return this._imageBasedLightingFactor.x>0||this._imageBasedLightingFactor.y>0}},shouldRegenerateShaders:{get:function(){return this._shouldRegenerateShaders}},specularEnvironmentCubeMap:{get:function(){return this._specularEnvironmentCubeMap}},useDefaultSphericalHarmonics:{get:function(){return this._useDefaultSphericalHarmonics}},useDefaultSpecularMaps:{get:function(){return this._useDefaultSpecularMaps}},useSpecularEnvironmentMaps:{get:function(){return l(this._specularEnvironmentCubeMap)&&this._specularEnvironmentCubeMap.ready||this._useDefaultSpecularMaps}}});function swe(e,t){if(Om.isSupported(t)){if(e._specularEnvironmentCubeMap=e._specularEnvironmentCubeMap&&e._specularEnvironmentCubeMap.destroy(),l(e._specularEnvironmentMaps)){let n=new Om(e._specularEnvironmentMaps);e._specularEnvironmentCubeMap=n,e._removeErrorListener=n.errorEvent.addEventListener(i=>{console.error(`Error loading specularEnvironmentMaps: ${i}`)})}e._shouldRegenerateShaders=!0}}XI.prototype.update=function(e){if(e.frameNumber===this._previousFrameNumber)return;this._previousFrameNumber=e.frameNumber;let t=e.context;e.brdfLutGenerator.update(e),this._shouldRegenerateShaders=!1;let n=this._imageBasedLightingFactor,i=this._previousImageBasedLightingFactor;U.equals(n,i)||(this._shouldRegenerateShaders=n.x>0&&i.x===0||n.x===0&&i.x>0,this._shouldRegenerateShaders=this._shouldRegenerateShaders||n.y>0&&i.y===0||n.y===0&&i.y>0,this._previousImageBasedLightingFactor=U.clone(this._imageBasedLightingFactor,this._previousImageBasedLightingFactor)),this._previousSphericalHarmonicCoefficients!==this._sphericalHarmonicCoefficients&&(this._shouldRegenerateShaders=this._shouldRegenerateShaders||l(this._previousSphericalHarmonicCoefficients)!==l(this._sphericalHarmonicCoefficients),this._previousSphericalHarmonicCoefficients=this._sphericalHarmonicCoefficients),this._shouldRegenerateShaders=this._shouldRegenerateShaders||this._previousSpecularEnvironmentMapLoaded!==this._specularEnvironmentMapLoaded,this._previousSpecularEnvironmentMapLoaded=this._specularEnvironmentMapLoaded,this._specularEnvironmentCubeMapDirty&&(swe(this,t),this._specularEnvironmentCubeMapDirty=!1),l(this._specularEnvironmentCubeMap)&&(this._specularEnvironmentCubeMap.update(e),this._specularEnvironmentCubeMap.ready&&(this._specularEnvironmentMapLoaded=!0));let o=!l(this._specularEnvironmentCubeMap)&&l(e.specularEnvironmentMaps)&&!this._useDefaultSpecularMaps,r=!l(e.specularEnvironmentMaps)&&this._useDefaultSpecularMaps,s=!l(this._sphericalHarmonicCoefficients)&&l(e.sphericalHarmonicCoefficients)&&!this._useDefaultSphericalHarmonics,a=!l(e.sphericalHarmonicCoefficients)&&this._useDefaultSphericalHarmonics;this._shouldRegenerateShaders=this._shouldRegenerateShaders||o||r||s||a,this._useDefaultSpecularMaps=!l(this._specularEnvironmentCubeMap)&&l(e.specularEnvironmentMaps),this._useDefaultSphericalHarmonics=!l(this._sphericalHarmonicCoefficients)&&l(e.sphericalHarmonicCoefficients)};XI.prototype.isDestroyed=function(){return!1};XI.prototype.destroy=function(){return this._specularEnvironmentCubeMap=this._specularEnvironmentCubeMap&&this._specularEnvironmentCubeMap.destroy(),this._removeErrorListener=this._removeErrorListener&&this._removeErrorListener(),me(this)};var jx=XI;var Knn=_(T(),1),fz=_(dd(),1);var knn=_(T(),1);var hz,doe="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiIyNTM5MmUwMy0zM2M2LTQxODAtODA0Yy0xNzg4MTZlYzc1ZmUiLCJpZCI6MjU5LCJpYXQiOjE3NDM1MjIzOTN9.nRQlDkn6eRcBJ_SbJNFii4uikmlbeHZgqzQNiyah2EY",p5={};p5.defaultAccessToken=doe;p5.defaultServer=new Ze({url:"https://api.cesium.com/"});p5.getDefaultTokenCredit=function(e){if(e===doe){if(!l(hz)){let t=`<b> This application is using Cesium's default ion access token. Please assign <i>Cesium.Ion.defaultAccessToken</i> with an access token from your ion account before making any Cesium API calls. You can sign up for a free ion account at <a href="https://cesium.com">https://cesium.com</a>.</b>`;hz=new Ct(t,!0)}return hz}};var Ym=p5;function jc(e,t){let n,i=e.externalType,o=l(i);if(!o)n={url:e.url,retryAttempts:1,retryCallback:awe};else if(i==="3DTILES"||i==="STK_TERRAIN_SERVER")n={url:e.options.url};else throw new ae("Ion.createResource does not support external imagery assets; use IonImageryProvider instead.");Ze.call(this,n),this._ionEndpoint=e,this._ionEndpointDomain=o?void 0:new fz.default(e.url).authority(),this._ionEndpointResource=t,this._ionRoot=void 0,this._pendingPromise=void 0,this._credits=void 0,this._isExternal=o}l(Object.create)&&(jc.prototype=Object.create(Ze.prototype),jc.prototype.constructor=jc);jc.fromAssetId=function(e,t){let n=jc._createEndpointResource(e,t);return n.fetchJson().then(function(i){return new jc(i,n)})};Object.defineProperties(jc.prototype,{credits:{get:function(){return l(this._ionRoot)?this._ionRoot.credits:l(this._credits)?this._credits:(this._credits=jc.getCreditsFromEndpoint(this._ionEndpoint,this._ionEndpointResource),this._credits)}}});jc.getCreditsFromEndpoint=function(e,t){let n=e.attributions.map(Ct.getIonCredit),i=Ym.getDefaultTokenCredit(t.queryParameters.access_token);return l(i)&&n.push(Ct.clone(i)),n};jc.prototype.clone=function(e){let t=this._ionRoot??this;return l(e)||(e=new jc(t._ionEndpoint,t._ionEndpointResource)),e=Ze.prototype.clone.call(this,e),e._ionRoot=t,e._isExternal=this._isExternal,e};jc.prototype.fetchImage=function(e){if(!this._isExternal){let t=e;e={preferBlob:!0},l(t)&&(e.flipY=t.flipY,e.preferImageBitmap=t.preferImageBitmap)}return Ze.prototype.fetchImage.call(this,e)};jc.prototype._makeRequest=function(e){return this._isExternal||new fz.default(this.url).authority()!==this._ionEndpointDomain?Ze.prototype._makeRequest.call(this,e):(l(e.headers)||(e.headers={}),e.headers.Authorization=`Bearer ${this._ionEndpoint.accessToken}`,e.headers["X-Cesium-Client"]="CesiumJS",typeof CESIUM_VERSION<"u"&&(e.headers["X-Cesium-Client-Version"]=CESIUM_VERSION),Ze.prototype._makeRequest.call(this,e))};jc._createEndpointResource=function(e,t){t=t??Y.EMPTY_OBJECT;let n=t.server??Ym.defaultServer,i=t.accessToken??Ym.defaultAccessToken;n=Ze.createIfNeeded(n);let o={url:`v1/assets/${e}/endpoint`};return l(i)&&(o.queryParameters={access_token:i}),n.getDerivedResource(o)};function awe(e,t){let n=e._ionRoot??e,i=n._ionEndpointResource,o=typeof Image<"u";return!l(t)||t.statusCode!==401&&!(o&&t.target instanceof Image)?Promise.resolve(!1):(l(n._pendingPromise)||(n._pendingPromise=i.fetchJson().then(function(r){return n._ionEndpoint=r,r}).finally(function(r){return n._pendingPromise=void 0,r})),n._pendingPromise.then(function(r){return e._ionEndpoint=r,!0}))}var _d=jc;var Qnn=_(T(),1);function pf(e){e=e??0,this._array=new Array(e),this._length=e}Object.defineProperties(pf.prototype,{length:{get:function(){return this._length},set:function(e){let t=this._array,n=this._length;if(e<n)for(let i=e;i<n;++i)t[i]=void 0;else e>t.length&&(t.length=e);this._length=e}},values:{get:function(){return this._array}}});pf.prototype.get=function(e){return this._array[e]};pf.prototype.set=function(e,t){e>=this._length&&(this.length=e+1),this._array[e]=t};pf.prototype.peek=function(){return this._array[this._length-1]};pf.prototype.push=function(e){let t=this.length++;this._array[t]=e};pf.prototype.pop=function(){if(this._length===0)return;let e=this._array[this._length-1];return--this.length,e};pf.prototype.reserve=function(e){e>this._array.length&&(this._array.length=e)};pf.prototype.resize=function(e){this.length=e};pf.prototype.trim=function(e){e=e??this._length,this._array.length=e};var qc=pf;var ein=_(T(),1);var Yp={X:0,Y:1,Z:2};Yp.Y_UP_TO_Z_UP=F.fromRotationTranslation($.fromArray([1,0,0,0,0,1,0,-1,0]));Yp.Z_UP_TO_Y_UP=F.fromRotationTranslation($.fromArray([1,0,0,0,0,-1,0,1,0]));Yp.X_UP_TO_Z_UP=F.fromRotationTranslation($.fromArray([0,0,1,0,1,0,-1,0,0]));Yp.Z_UP_TO_X_UP=F.fromRotationTranslation($.fromArray([0,0,-1,0,1,0,1,0,0]));Yp.X_UP_TO_Y_UP=F.fromRotationTranslation($.fromArray([0,1,0,-1,0,0,0,0,1]));Yp.Y_UP_TO_X_UP=F.fromRotationTranslation($.fromArray([0,-1,0,1,0,0,0,0,1]));Yp.fromName=function(e){return Yp[e]};var Po=Object.freeze(Yp);var kDn=_(T(),1);var iin=_(T(),1);function uoe(e){e=e??Y.EMPTY_OBJECT,this._metadata=e.metadata}Object.defineProperties(uoe.prototype,{metadata:{get:function(){return this._metadata}}});var qx=uoe;var yNn=_(T(),1);var bin=_(T(),1);var lin=_(T(),1);var sin=_(T(),1);function eg(e,t,n){return t=t??0,n=n??e.byteLength-t,e=e.subarray(t,t+n),eg.decode(e)}eg.decodeWithTextDecoder=function(e){return new TextDecoder("utf-8").decode(e)};eg.decodeWithFromCharCode=function(e){let t="",n=cwe(e),i=n.length;for(let o=0;o<i;++o){let r=n[o];r<=65535?t+=String.fromCharCode(r):(r-=65536,t+=String.fromCharCode((r>>10)+55296,(r&1023)+56320))}return t};function WI(e,t,n){return t<=e&&e<=n}function cwe(e){let t=0,n=0,i=0,o=128,r=191,s=[],a=e.length;for(let c=0;c<a;++c){let d=e[c];if(i===0){if(WI(d,0,127)){s.push(d);continue}if(WI(d,194,223)){i=1,t=d&31;continue}if(WI(d,224,239)){d===224&&(o=160),d===237&&(r=159),i=2,t=d&15;continue}if(WI(d,240,244)){d===240&&(o=144),d===244&&(r=143),i=3,t=d&7;continue}throw new ae("String decoding failed.")}if(!WI(d,o,r)){t=i=n=0,o=128,r=191,--c;continue}o=128,r=191,t=t<<6|d&63,++n,n===i&&(s.push(t),t=i=n=0)}return s}typeof TextDecoder<"u"?eg.decode=eg.decodeWithTextDecoder:eg.decode=eg.decodeWithFromCharCode;var Pl=eg;function lwe(e,t){return t=t??0,Pl(e,t,Math.min(4,e.length))}var zm=lwe;function Iu(e,t,n,i){this._tileset=e,this._tile=t,this._resource=n,l(i)||(i=[]),this._contents=i,this._metadata=void 0,this._group=void 0,this._ready=!1}Object.defineProperties(Iu.prototype,{featurePropertiesDirty:{get:function(){let e=this._contents,t=e.length;for(let n=0;n<t;++n)if(e[n].featurePropertiesDirty)return!0;return!1},set:function(e){let t=this._contents,n=t.length;for(let i=0;i<n;++i)t[i].featurePropertiesDirty=e}},featuresLength:{get:function(){return 0}},pointsLength:{get:function(){return 0}},trianglesLength:{get:function(){return 0}},geometryByteLength:{get:function(){return 0}},texturesByteLength:{get:function(){return 0}},batchTableByteLength:{get:function(){return 0}},innerContents:{get:function(){return this._contents}},ready:{get:function(){return this._ready}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){return this._resource.getUrlComponent(!0)}},metadata:{get:function(){return this._metadata},set:function(e){this._metadata=e;let t=this._contents,n=t.length;for(let i=0;i<n;++i)t[i].metadata=e}},batchTable:{get:function(){}},group:{get:function(){return this._group},set:function(e){this._group=e;let t=this._contents,n=t.length;for(let i=0;i<n;++i)t[i].group=e}}});var PI=Uint32Array.BYTES_PER_ELEMENT;Iu.fromTileType=async function(e,t,n,i,o,r){o=o??0;let s=new Uint8Array(i),a=new DataView(i);o+=PI;let c=a.getUint32(o,!0);if(c!==1)throw new ae(`Only Composite Tile version 1 is supported. Version ${c} is not.`);o+=PI,o+=PI;let d=a.getUint32(o,!0);o+=PI;let u=n.queryParameters.compositeIndex;l(u)?u=`${u}_`:u="";let h=[];h.length=d;for(let f=0;f<d;++f){let y=zm(s,o),x=a.getUint32(o+PI*2,!0),S=r[y],C=`${u}${f}`,V=n.getDerivedResource({queryParameters:{compositeIndex:C}});if(l(S))h[f]=Promise.resolve(S(e,t,V,i,o));else throw new ae(`Unknown tile content type, ${y}, inside Composite tile`);o+=x}let p=await Promise.all(h);return new Iu(e,t,n,p)};Iu.prototype.hasProperty=function(e,t){return!1};Iu.prototype.getFeature=function(e){};Iu.prototype.applyDebugSettings=function(e,t){let n=this._contents,i=n.length;for(let o=0;o<i;++o)n[o].applyDebugSettings(e,t)};Iu.prototype.applyStyle=function(e){let t=this._contents,n=t.length;for(let i=0;i<n;++i)t[i].applyStyle(e)};Iu.prototype.update=function(e,t){let n=this._contents,i=n.length,o=!0;for(let r=0;r<i;++r)n[r].update(e,t),o=o&&n[r].ready;!this._ready&&o&&(this._ready=!0)};Iu.prototype.pick=function(e,t,n){if(!this._ready)return;let i,o=Number.POSITIVE_INFINITY,r=this._contents,s=r.length;for(let a=0;a<s;++a){let c=r[a].pick(e,t,n);if(!l(c))continue;let d=m.distance(e.origin,c);d<o&&(i=c,o=d)}if(l(i))return n};Iu.prototype.isDestroyed=function(){return!1};Iu.prototype.destroy=function(){let e=this._contents,t=e.length;for(let n=0;n<t;++n)e[n].destroy();return me(this)};var vI=Iu;var Yrn=_(T(),1);var xin=_(T(),1);function dwe(e,t,n){return JSON.parse(Pl(e,t,n))}var qo=dwe;var Con=_(T(),1);var Win=_(T(),1);function uc(e){this._id=zn();let t=e.featuresLength;this._showAlphaProperties=void 0,this._batchValues=void 0,this._batchValuesDirty=!1,this._batchTexture=void 0,this._defaultTexture=void 0,this._pickTexture=void 0,this._pickIds=[];let n,i;if(t>0){let o=Math.min(t,Nt.maximumTextureSize),r=Math.ceil(t/Nt.maximumTextureSize),s=1/o,a=s*.5,c=1/r,d=c*.5;n=new U(o,r),i=new se(s,a,c,d)}this._translucentFeaturesLength=0,this._featuresLength=t,this._textureDimensions=n,this._textureStep=i,this._owner=e.owner,this._statistics=e.statistics,this._colorChangedCallback=e.colorChangedCallback}Object.defineProperties(uc.prototype,{translucentFeaturesLength:{get:function(){return this._translucentFeaturesLength}},byteLength:{get:function(){let e=0;return l(this._pickTexture)&&(e+=this._pickTexture.sizeInBytes),l(this._batchTexture)&&(e+=this._batchTexture.sizeInBytes),e}},textureDimensions:{get:function(){return this._textureDimensions}},textureStep:{get:function(){return this._textureStep}},batchTexture:{get:function(){return this._batchTexture}},defaultTexture:{get:function(){return this._defaultTexture}},pickTexture:{get:function(){return this._pickTexture}}});uc.DEFAULT_COLOR_VALUE=D.WHITE;uc.DEFAULT_SHOW_VALUE=!0;function moe(e){let t=e._textureDimensions;return t.x*t.y*4}function hoe(e){if(!l(e._batchValues)){let t=moe(e),n=new Uint8Array(t).fill(255);e._batchValues=n}return e._batchValues}function foe(e){if(!l(e._showAlphaProperties)){let t=2*e._featuresLength,n=new Uint8Array(t).fill(255);e._showAlphaProperties=n}return e._showAlphaProperties}uc.prototype.setShow=function(e,t){if(t&&!l(this._showAlphaProperties))return;let n=foe(this),i=e*2,o=t?255:0;if(n[i]!==o){n[i]=o;let r=hoe(this),s=e*4+3;r[s]=t?n[i+1]:0,this._batchValuesDirty=!0}};uc.prototype.setAllShow=function(e){let t=this._featuresLength;for(let n=0;n<t;++n)this.setShow(n,e)};uc.prototype.getShow=function(e){if(!l(this._showAlphaProperties))return!0;let t=e*2;return this._showAlphaProperties[t]===255};var uwe=new Array(4);uc.prototype.setColor=function(e,t){if(D.equals(t,uc.DEFAULT_COLOR_VALUE)&&!l(this._batchValues))return;let n=t.toBytes(uwe),i=n[3],o=hoe(this),r=e*4,s=foe(this),a=e*2;if(o[r]!==n[0]||o[r+1]!==n[1]||o[r+2]!==n[2]||s[a+1]!==i){o[r]=n[0],o[r+1]=n[1],o[r+2]=n[2];let c=s[a+1]!==255,d=s[a]!==0;o[r+3]=d?i:0,s[a+1]=i;let u=i!==255;u&&!c?++this._translucentFeaturesLength:!u&&c&&--this._translucentFeaturesLength,this._batchValuesDirty=!0,l(this._colorChangedCallback)&&this._colorChangedCallback(e,t)}};uc.prototype.setAllColor=function(e){let t=this._featuresLength;for(let n=0;n<t;++n)this.setColor(n,e)};uc.prototype.getColor=function(e,t){if(!l(this._batchValues))return D.clone(uc.DEFAULT_COLOR_VALUE,t);let n=this._batchValues,i=e*4,o=this._showAlphaProperties,r=e*2;return D.fromBytes(n[i],n[i+1],n[i+2],o[r+1],t)};uc.prototype.getPickColor=function(e){return this._pickIds[e]};function poe(e,t,n){let i=e._textureDimensions;return new vt({context:t,pixelFormat:it.RGBA,pixelDatatype:je.UNSIGNED_BYTE,source:{width:i.x,height:i.y,arrayBufferView:n},flipY:!1,sampler:qt.NEAREST})}function mwe(e,t){let n=e._featuresLength;if(!l(e._pickTexture)&&n>0){let i=e._pickIds,o=moe(e),r=new Uint8Array(o),s=e._owner,a=e._statistics;for(let c=0;c<n;++c){let d=t.createPickId(s.getFeature(c));i.push(d);let u=d.color,h=c*4;r[h]=D.floatToByte(u.red),r[h+1]=D.floatToByte(u.green),r[h+2]=D.floatToByte(u.blue),r[h+3]=D.floatToByte(u.alpha)}e._pickTexture=poe(e,t,r),l(a)&&(a.batchTableByteLength+=e._pickTexture.sizeInBytes)}}function hwe(e){let t=e._textureDimensions;e._batchTexture.copyFrom({source:{width:t.x,height:t.y,arrayBufferView:e._batchValues}})}uc.prototype.update=function(e,t){let n=t.context;this._defaultTexture=n.defaultTexture;let i=t.passes;(i.pick||i.postProcess)&&mwe(this,n),this._batchValuesDirty&&(this._batchValuesDirty=!1,l(this._batchTexture)||(this._batchTexture=poe(this,n,this._batchValues),l(this._statistics)&&(this._statistics.batchTableByteLength+=this._batchTexture.sizeInBytes)),hwe(this))};uc.prototype.isDestroyed=function(){return!1};uc.prototype.destroy=function(){this._batchTexture=this._batchTexture&&this._batchTexture.destroy(),this._pickTexture=this._pickTexture&&this._pickTexture.destroy();let e=this._pickIds,t=e.length;for(let n=0;n<t;++n)e[n].destroy();return me(this)};var $c=uc;var Qin=_(T(),1);var Uin=_(T(),1);var fwe={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},pwe={SCALAR:void 0,VEC2:U,VEC3:m,VEC4:se,MAT2:Ii,MAT3:$,MAT4:F};function bwe(e){let t=e.componentType,n;typeof t=="string"?n=Q.fromName(t):n=t;let i=fwe[e.type],o=pwe[e.type];return{componentsPerAttribute:i,classType:o,createArrayBufferView:function(r,s,a){return Q.createArrayBufferView(n,r,s,i*a)}}}var Td=bwe;function zp(e){this._classes=void 0,this._classIds=void 0,this._classIndexes=void 0,this._parentCounts=void 0,this._parentIndexes=void 0,this._parentIds=void 0,this._byteLength=0,gwe(this,e.extension,e.binaryBody)}Object.defineProperties(zp.prototype,{byteLength:{get:function(){return this._byteLength}}});function gwe(e,t,n){let i,o,r,s=t.instancesLength,a=t.classes,c=t.classIds,d=t.parentCounts,u=t.parentIds,h=s,p=0;l(c.byteOffset)&&(c.componentType=c.componentType??Q.UNSIGNED_SHORT,c.type=on.SCALAR,r=Td(c),c=r.createArrayBufferView(n.buffer,n.byteOffset+c.byteOffset,s),p+=c.byteLength);let g;if(l(d)){for(l(d.byteOffset)&&(d.componentType=d.componentType??Q.UNSIGNED_SHORT,d.type=on.SCALAR,r=Td(d),d=r.createArrayBufferView(n.buffer,n.byteOffset+d.byteOffset,s),p+=d.byteLength),g=new Uint16Array(s),h=0,i=0;i<s;++i)g[i]=h,h+=d[i];p+=g.byteLength}l(u)&&l(u.byteOffset)&&(u.componentType=u.componentType??Q.UNSIGNED_SHORT,u.type=on.SCALAR,r=Td(u),u=r.createArrayBufferView(n.buffer,n.byteOffset+u.byteOffset,h),p+=u.byteLength);let f=a.length;for(i=0;i<f;++i){let S=a[i].length,C=a[i].instances,V=ywe(S,C,n);p+=xwe(V),a[i].instances=St(V,C)}let y=new Array(f).fill(0),x=new Uint16Array(s);for(i=0;i<s;++i)o=c[i],x[i]=y[o],++y[o];p+=x.byteLength,e._classes=a,e._classIds=c,e._classIndexes=x,e._parentCounts=d,e._parentIndexes=g,e._parentIds=u,e._byteLength=p}function ywe(e,t,n){let i;for(let o in t)if(t.hasOwnProperty(o)){let r=t[o],s=r.byteOffset;if(l(s)){let a=r.componentType,c=r.type;if(!l(a))throw new ae("componentType is required.");if(!l(c))throw new ae("type is required.");if(!l(n))throw new ae(`Property ${o} requires a batch table binary.`);let d=Td(r),u=d.componentsPerAttribute,h=d.classType,p=d.createArrayBufferView(n.buffer,n.byteOffset+s,e);l(i)||(i={}),i[o]={typedArray:p,componentCount:u,type:h}}}return i}function xwe(e){let t=0;for(let n in e)e.hasOwnProperty(n)&&(t+=e[n].typedArray.byteLength);return t}var _we=[],Twe=[],Swe=0;function Cwe(e,t,n){let i=e._classIds,o=e._parentCounts,r=e._parentIds,s=e._parentIndexes,a=i.length,c=_we;c.length=Math.max(c.length,a);let d=++Swe,u=Twe;for(u.length=0,u.push(t);u.length>0;){if(t=u.pop(),c[t]===d)continue;c[t]=d;let h=n(e,t);if(l(h))return h;let p=o[t],g=s[t];for(let f=0;f<p;++f){let y=r[g+f];y!==t&&u.push(y)}}}function Vwe(e,t,n){let i=!0;for(;i;){let o=n(e,t);if(l(o))return o;let r=e._parentIds[t];i=r!==t,t=r}}function wI(e,t,n){let i=e._parentCounts,o=e._parentIds;if(l(o)){if(l(i))return Cwe(e,t,n)}else return n(e,t);return Vwe(e,t,n)}zp.prototype.hasProperty=function(e,t){let n=wI(this,e,function(i,o){let r=i._classIds[o],s=i._classes[r].instances;if(l(s[t]))return!0});return l(n)};zp.prototype.propertyExists=function(e){let t=this._classes,n=t.length;for(let i=0;i<n;++i){let o=t[i].instances;if(l(o[e]))return!0}return!1};zp.prototype.getPropertyIds=function(e,t){return t=l(t)?t:[],t.length=0,wI(this,e,function(n,i){let o=n._classIds[i],r=n._classes[o].instances;for(let s in r)r.hasOwnProperty(s)&&t.indexOf(s)===-1&&t.push(s)}),t};zp.prototype.getProperty=function(e,t){return wI(this,e,function(n,i){let o=n._classIds[i],r=n._classes[o],s=n._classIndexes[i],a=r.instances[t];if(l(a))return l(a.typedArray)?Lwe(a,s):Ye(a[s],!0)})};function Lwe(e,t){let n=e.typedArray,i=e.componentCount;return i===1?n[t]:e.type.unpack(n,t*i)}zp.prototype.setProperty=function(e,t,n){let i=wI(this,e,function(o,r){let s=o._classIds[r],a=o._classes[s],c=o._classIndexes[r],d=a.instances[t];if(l(d))return l(d.typedArray)?Rwe(d,c,n):d[c]=Ye(n,!0),!0});return l(i)};function Rwe(e,t,n){let i=e.typedArray,o=e.componentCount;o===1?i[t]=n:e.type.pack(n,i,t*o)}zp.prototype.isClass=function(e,t){let n=wI(this,e,function(i,o){let r=i._classIds[o];if(i._classes[r].name===t)return!0});return l(n)};zp.prototype.getClassName=function(e){let t=this._classIds[e];return this._classes[t].name};var $x=zp;var qin=_(T(),1),Zwe={HIGHLIGHT:0,REPLACE:1,MIX:2},vl=Object.freeze(Zwe);var pz=$c.DEFAULT_COLOR_VALUE,bz=$c.DEFAULT_SHOW_VALUE;function To(e,t,n,i,o){this.featuresLength=t;let r;l(n)&&(r=n.extensions),this._extensions=r??{};let s=Gwe(n);this._properties=s,this._batchTableHierarchy=Ewe(this,n,i);let a=goe(t,s,i);this._binaryPropertiesByteLength=Iwe(a),this._batchTableBinaryProperties=a,this._content=e,this._batchTexture=new $c({featuresLength:t,colorChangedCallback:o,owner:e,statistics:e.tileset.statistics})}To._deprecationWarning=Vs;Object.defineProperties(To.prototype,{batchTableByteLength:{get:function(){let e=this._binaryPropertiesByteLength;return l(this._batchTableHierarchy)&&(e+=this._batchTableHierarchy.byteLength),e+=this._batchTexture.byteLength,e}}});function Gwe(e){let t={};if(!l(e))return t;for(let n in e)e.hasOwnProperty(n)&&n!=="HIERARCHY"&&n!=="extensions"&&n!=="extras"&&(t[n]=Ye(e[n],!0));return t}function Ewe(e,t,n){if(!l(t))return;let i=e._extensions["3DTILES_batch_table_hierarchy"],o=t.HIERARCHY;if(l(o)&&(To._deprecationWarning("batchTableHierarchyExtension","The batch table HIERARCHY property has been moved to an extension. Use extensions.3DTILES_batch_table_hierarchy instead."),e._extensions["3DTILES_batch_table_hierarchy"]=o,i=o),!!l(i))return new $x({extension:i,binaryBody:n})}function goe(e,t,n){let i;for(let o in t)if(t.hasOwnProperty(o)){let r=t[o],s=r.byteOffset;if(l(s)){let a=r.componentType,c=r.type;if(!l(a))throw new ae("componentType is required.");if(!l(c))throw new ae("type is required.");if(!l(n))throw new ae(`Property ${o} requires a batch table binary.`);let d=Td(r),u=d.componentsPerAttribute,h=d.classType,p=d.createArrayBufferView(n.buffer,n.byteOffset+s,e);l(i)||(i={}),i[o]={typedArray:p,componentCount:u,type:h}}}return i}function Iwe(e){if(!l(e))return 0;let t=0;for(let n in e)e.hasOwnProperty(n)&&(t+=e[n].typedArray.byteLength);return t}To.getBinaryProperties=function(e,t,n){return goe(e,t,n)};To.prototype.setShow=function(e,t){this._batchTexture.setShow(e,t)};To.prototype.setAllShow=function(e){this._batchTexture.setAllShow(e)};To.prototype.getShow=function(e){return this._batchTexture.getShow(e)};To.prototype.setColor=function(e,t){this._batchTexture.setColor(e,t)};To.prototype.setAllColor=function(e){this._batchTexture.setAllColor(e)};To.prototype.getColor=function(e,t){return this._batchTexture.getColor(e,t)};To.prototype.getPickColor=function(e){return this._batchTexture.getPickColor(e)};var Xwe=new D;To.prototype.applyStyle=function(e){if(!l(e)){this.setAllColor(pz),this.setAllShow(bz);return}let t=this._content,n=this.featuresLength;for(let i=0;i<n;++i){let o=t.getFeature(i),r=l(e.color)?e.color.evaluateColor(o,Xwe)??pz:pz,s=l(e.show)?e.show.evaluate(o)??bz:bz;this.setColor(i,r),this.setShow(i,s)}};function Wwe(e,t){let n=e.typedArray,i=e.componentCount;return i===1?n[t]:e.type.unpack(n,t*i)}function Pwe(e,t,n){let i=e.typedArray,o=e.componentCount;o===1?i[t]=n:e.type.pack(n,i,t*o)}To.prototype.isClass=function(e,t){let n=this._batchTableHierarchy;return l(n)?n.isClass(e,t):!1};To.prototype.isExactClass=function(e,t){return this.getExactClassName(e)===t};To.prototype.getExactClassName=function(e){let t=this._batchTableHierarchy;if(l(t))return t.getClassName(e)};To.prototype.hasProperty=function(e,t){return l(this._properties[t])||l(this._batchTableHierarchy)&&this._batchTableHierarchy.hasProperty(e,t)};To.prototype.hasPropertyBySemantic=function(){return!1};To.prototype.getPropertyIds=function(e,t){t=l(t)?t:[],t.length=0;let n=Object.keys(this._properties);return t.push.apply(t,n),l(this._batchTableHierarchy)&&t.push.apply(t,this._batchTableHierarchy.getPropertyIds(e,n)),t};To.prototype.getPropertyBySemantic=function(e,t){};To.prototype.getProperty=function(e,t){if(l(this._batchTableBinaryProperties)){let i=this._batchTableBinaryProperties[t];if(l(i))return Wwe(i,e)}let n=this._properties[t];if(l(n))return Ye(n[e],!0);if(l(this._batchTableHierarchy)){let i=this._batchTableHierarchy.getProperty(e,t);if(l(i))return i}};To.prototype.setProperty=function(e,t,n){let i=this.featuresLength;if(l(this._batchTableBinaryProperties)){let r=this._batchTableBinaryProperties[t];if(l(r)){Pwe(r,e,n);return}}if(l(this._batchTableHierarchy)&&this._batchTableHierarchy.setProperty(e,t,n))return;let o=this._properties[t];l(o)||(this._properties[t]=new Array(i),o=this._properties[t]),o[e]=Ye(n,!0)};function vwe(e){return e._batchTexture.textureDimensions.y===1?`uniform vec4 tile_textureStep; vec2 computeSt(float batchId) { float stepX = tile_textureStep.x; float centerX = tile_textureStep.y; return vec2(centerX + (batchId * stepX), 0.5); } `:`uniform vec4 tile_textureStep; uniform vec2 tile_textureDimensions; vec2 computeSt(float batchId) { float stepX = tile_textureStep.x; float centerX = tile_textureStep.y; float stepY = tile_textureStep.z; float centerY = tile_textureStep.w; float xId = mod(batchId, tile_textureDimensions.x); float yId = floor(batchId / tile_textureDimensions.x); return vec2(centerX + (xId * stepX), centerY + (yId * stepY)); } `}To.prototype.getVertexShaderCallback=function(e,t,n){if(this.featuresLength===0)return;let i=this;return function(o){let r=yoe(o,n,!1),s;return Nt.maximumVertexTextureImageUnits>0?(s="",e&&(s+=`uniform bool tile_translucentCommand; `),s+=`uniform sampler2D tile_batchTexture; out vec4 tile_featureColor; out vec2 tile_featureSt; void main() { vec2 st = computeSt(${t}); vec4 featureProperties = texture(tile_batchTexture, st); tile_color(featureProperties); float show = ceil(featureProperties.a); gl_Position *= show; `,e&&(s+=` bool isStyleTranslucent = (featureProperties.a != 1.0); if (czm_pass == czm_passTranslucent) { if (!isStyleTranslucent && !tile_translucentCommand) { gl_Position *= 0.0; } } else { if (isStyleTranslucent) { gl_Position *= 0.0; } } `),s+=` tile_featureColor = featureProperties; tile_featureSt = st; }`):s=`out vec2 tile_featureSt; void main() { tile_color(vec4(1.0)); tile_featureSt = computeSt(${t}); }`,`${r} ${vwe(i)}${s}`}};function boe(e,t){return e=De.replaceMain(e,"tile_main"),t?`${e}uniform float tile_colorBlend; void tile_color(vec4 tile_featureColor) { tile_main(); tile_featureColor = czm_gammaCorrect(tile_featureColor); out_FragColor.a *= tile_featureColor.a; float highlight = ceil(tile_colorBlend); out_FragColor.rgb *= mix(tile_featureColor.rgb, vec3(1.0), highlight); } `:`${e}void tile_color(vec4 tile_featureColor) { tile_main(); } `}function wwe(e,t){let n=`texture(${t}`,i=0,o=e.indexOf(n,i),r;for(;o>-1;){let s=0;for(let d=o;d<e.length;++d){let u=e.charAt(d);if(u==="(")++s;else if(u===")"&&(--s,s===0)){r=d+1;break}}let c=`tile_diffuse_final(${e.slice(o,r)}, tile_diffuse)`;e=e.slice(0,o)+c+e.slice(r),i=o+c.length,o=e.indexOf(n,i)}return e}function yoe(e,t,n){if(!l(t))return boe(e,n);let i=new RegExp(`(uniform|attribute|in)\\s+(vec[34]|sampler2D)\\s+${t};`),o=e.match(i);if(!l(o))return boe(e,n);let r=o[0],s=o[2];e=De.replaceMain(e,"tile_main"),e=e.replace(r,"");let a=`bool isWhite(vec3 color) { return all(greaterThan(color, vec3(1.0 - czm_epsilon3))); } vec4 tile_diffuse_final(vec4 sourceDiffuse, vec4 tileDiffuse) { vec4 blendDiffuse = mix(sourceDiffuse, tileDiffuse, tile_colorBlend); vec4 diffuse = isWhite(tileDiffuse.rgb) ? sourceDiffuse : blendDiffuse; return vec4(diffuse.rgb, sourceDiffuse.a); } `,c=` tile_featureColor = czm_gammaCorrect(tile_featureColor); out_FragColor.a *= tile_featureColor.a; float highlight = ceil(tile_colorBlend); out_FragColor.rgb *= mix(tile_featureColor.rgb, vec3(1.0), highlight); `,d;if(s==="vec3"||s==="vec4"){let u=s==="vec3"?`vec4(${t}, 1.0)`:t,h=s==="vec3"?"tile_diffuse.xyz":"tile_diffuse";i=new RegExp(t,"g"),e=e.replace(i,h),d=` vec4 source = ${u}; tile_diffuse = tile_diffuse_final(source, tile_featureColor); tile_main(); `}else s==="sampler2D"&&(e=wwe(e,t),d=` tile_diffuse = tile_featureColor; tile_main(); `);return e=`uniform float tile_colorBlend; vec4 tile_diffuse = vec4(1.0); ${a}${r} ${e} void tile_color(vec4 tile_featureColor) { ${d}`,n&&(e+=c),e+=`} `,e}To.prototype.getFragmentShaderCallback=function(e,t,n){if(this.featuresLength!==0)return function(i){return i=yoe(i,t,!0),Nt.maximumVertexTextureImageUnits>0?(i+=`uniform sampler2D tile_pickTexture; in vec2 tile_featureSt; in vec4 tile_featureColor; void main() { tile_color(tile_featureColor); `,n&&(i+=` out_FragColor.rgb *= out_FragColor.a; `),i+="}"):(e&&(i+=`uniform bool tile_translucentCommand; `),i+=`uniform sampler2D tile_pickTexture; uniform sampler2D tile_batchTexture; in vec2 tile_featureSt; void main() { vec4 featureProperties = texture(tile_batchTexture, tile_featureSt); if (featureProperties.a == 0.0) { discard; } `,e&&(i+=` bool isStyleTranslucent = (featureProperties.a != 1.0); if (czm_pass == czm_passTranslucent) { if (!isStyleTranslucent && !tile_translucentCommand) { discard; } } else { if (isStyleTranslucent) { discard; } } `),i+=` tile_color(featureProperties); `,n&&(i+=` out_FragColor.rgb *= out_FragColor.a; `),i+=`} `),i}};function Fwe(e){let t=e._content.tileset,n=t.colorBlendMode,i=t.colorBlendAmount;if(n===vl.HIGHLIGHT)return 0;if(n===vl.REPLACE)return 1;if(n===vl.MIX)return X.clamp(i,X.EPSILON4,1)}To.prototype.getUniformMapCallback=function(){if(this.featuresLength===0)return;let e=this;return function(t){return St(t,{tile_batchTexture:function(){return e._batchTexture.batchTexture??e._batchTexture.defaultTexture},tile_textureDimensions:function(){return e._batchTexture.textureDimensions},tile_textureStep:function(){return e._batchTexture.textureStep},tile_colorBlend:function(){return Fwe(e)},tile_pickTexture:function(){return e._batchTexture.pickTexture}})}};To.prototype.getPickId=function(){return"texture(tile_pickTexture, tile_featureSt)"};var tg={ALL_OPAQUE:0,ALL_TRANSLUCENT:1,OPAQUE_AND_TRANSLUCENT:2};To.prototype.addDerivedCommands=function(e,t){let n=e.commandList,i=n.length,o=this._content._tile,r=o._finalResolution,s=o.tileset,a=s.isSkippingLevelOfDetail&&s.hasMixedContent&&e.context.stencilBuffer,c=Awe(this);for(let d=t;d<i;++d){let u=n[d];if(u.pass===Ee.COMPUTE)continue;let h=u.derivedCommands.tileset;(!l(h)||u.dirty)&&(h={},u.derivedCommands.tileset=h,h.originalCommand=Mwe(u),u.dirty=!1);let p=h.originalCommand;c!==tg.ALL_OPAQUE&&u.pass!==Ee.TRANSLUCENT&&(l(h.translucent)||(h.translucent=Nwe(p))),c!==tg.ALL_TRANSLUCENT&&u.pass!==Ee.TRANSLUCENT&&(l(h.opaque)||(h.opaque=kwe(p)),a&&(r||(l(h.zback)||(h.zback=Dwe(e.context,p)),s._backfaceCommands.push(h.zback)),(!l(h.stencil)||o._selectionDepth!==Owe(h.stencil))&&(u.renderState.depthMask?h.stencil=Bwe(p,o._selectionDepth):h.stencil=h.opaque)));let g=a?h.stencil:h.opaque,f=h.translucent;u.pass!==Ee.TRANSLUCENT?(c===tg.ALL_OPAQUE&&(n[d]=g),c===tg.ALL_TRANSLUCENT&&(n[d]=f),c===tg.OPAQUE_AND_TRANSLUCENT&&(n[d]=g,n.push(f))):n[d]=p}};function Awe(e){let t=e._batchTexture.translucentFeaturesLength;return t===0?tg.ALL_OPAQUE:t===e.featuresLength?tg.ALL_TRANSLUCENT:tg.OPAQUE_AND_TRANSLUCENT}function Mwe(e){let t=$e.shallowClone(e),n=t.pass===Ee.TRANSLUCENT;return t.uniformMap=l(t.uniformMap)?t.uniformMap:{},t.uniformMap.tile_translucentCommand=function(){return n},t}function Nwe(e){let t=$e.shallowClone(e);return t.pass=Ee.TRANSLUCENT,t.renderState=Ywe(e.renderState),t}function kwe(e){let t=$e.shallowClone(e);return t.renderState=zwe(e.renderState),t}function Uwe(e,t){let n=e.shaderCache.getDerivedShaderProgram(t,"zBackfaceLogDepth");if(!l(n)){let i=t.fragmentShaderSource.clone();i.defines=l(i.defines)?i.defines.slice(0):[],i.defines.push("POLYGON_OFFSET"),n=e.shaderCache.createDerivedShaderProgram(t,"zBackfaceLogDepth",{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:i,attributeLocations:t._attributeLocations})}return n}function Dwe(e,t){let n=$e.shallowClone(t),i=Ye(n.renderState,!0);i.cull.enabled=!0,i.cull.face=Ti.FRONT,i.colorMask={red:!1,green:!1,blue:!1,alpha:!1},i.polygonOffset={enabled:!0,factor:5,units:5},i.stencilTest=Ut.setCesium3DTileBit(),i.stencilMask=Ut.CESIUM_3D_TILE_MASK,n.renderState=Ue.fromCache(i),n.castShadows=!1,n.receiveShadows=!1,n.uniformMap=Ye(t.uniformMap);let o=new U(5,5);return n.uniformMap.u_polygonOffset=function(){return o},n.shaderProgram=Uwe(e,t.shaderProgram),n}function Bwe(e,t){let n=$e.shallowClone(e),i=Ye(n.renderState,!0);return i.stencilTest.enabled=!0,i.stencilTest.mask=Ut.SKIP_LOD_MASK,i.stencilTest.reference=Ut.CESIUM_3D_TILE_MASK|t<<Ut.SKIP_LOD_BIT_SHIFT,i.stencilTest.frontFunction=Dn.GREATER_OR_EQUAL,i.stencilTest.frontOperation.zPass=ht.REPLACE,i.stencilTest.backFunction=Dn.GREATER_OR_EQUAL,i.stencilTest.backOperation.zPass=ht.REPLACE,i.stencilMask=Ut.CESIUM_3D_TILE_MASK|Ut.SKIP_LOD_MASK,n.renderState=Ue.fromCache(i),n}function Owe(e){return(e.renderState.stencilTest.reference&Ut.SKIP_LOD_MASK)>>>Ut.SKIP_LOD_BIT_SHIFT}function Ywe(e){let t=Ye(e,!0);return t.cull.enabled=!1,t.depthTest.enabled=!0,t.depthMask=!1,t.blending=un.ALPHA_BLEND,t.stencilTest=Ut.setCesium3DTileBit(),t.stencilMask=Ut.CESIUM_3D_TILE_MASK,Ue.fromCache(t)}function zwe(e){let t=Ye(e,!0);return t.stencilTest=Ut.setCesium3DTileBit(),t.stencilMask=Ut.CESIUM_3D_TILE_MASK,Ue.fromCache(t)}To.prototype.update=function(e,t){this._batchTexture.update(e,t)};To.prototype.isDestroyed=function(){return!1};To.prototype.destroy=function(){return this._batchTexture=this._batchTexture&&this._batchTexture.destroy(),me(this)};var Hp=To;var wrn=_(T(),1);var Lon=_(T(),1);function Hwe(e){this.offset=e.offset,this.count=e.count,this.color=e.color,this.batchIds=e.batchIds}var bf=Hwe;var Crn=_(T(),1);var Zon=_(T(),1),TC=`in vec3 position; in float a_batchId; uniform mat4 u_modifiedModelViewProjection; void main() { gl_Position = czm_depthClamp(u_modifiedModelViewProjection * vec4(position, 1.0)); } `;var Xon=_(T(),1);function Xu(e,t){this._content=e,this._batchId=t,this._color=void 0}Object.defineProperties(Xu.prototype,{show:{get:function(){return this._content.batchTable.getShow(this._batchId)},set:function(e){this._content.batchTable.setShow(this._batchId,e)}},color:{get:function(){return l(this._color)||(this._color=new D),this._content.batchTable.getColor(this._batchId,this._color)},set:function(e){this._content.batchTable.setColor(this._batchId,e)}},polylinePositions:{get:function(){if(l(this._content.getPolylinePositions))return this._content.getPolylinePositions(this._batchId)}},content:{get:function(){return this._content}},tileset:{get:function(){return this._content.tileset}},primitive:{get:function(){return this._content.tileset}},featureId:{get:function(){return this._batchId}},pickId:{get:function(){return this._content.batchTable.getPickColor(this._batchId)}}});Xu.prototype.hasProperty=function(e){return this._content.batchTable.hasProperty(this._batchId,e)};Xu.prototype.getPropertyIds=function(e){return this._content.batchTable.getPropertyIds(this._batchId,e)};Xu.prototype.getProperty=function(e){return this._content.batchTable.getProperty(this._batchId,e)};Xu.getPropertyInherited=function(e,t,n){let i=e.batchTable;if(l(i)){if(i.hasPropertyBySemantic(t,n))return i.getPropertyBySemantic(t,n);if(i.hasProperty(t,n))return i.getProperty(t,n)}let o=e.metadata;if(l(o)){if(o.hasPropertyBySemantic(n))return o.getPropertyBySemantic(n);if(o.hasProperty(n))return o.getProperty(n)}let r=e.tile,s=r.metadata;if(l(s)){if(s.hasPropertyBySemantic(n))return s.getPropertyBySemantic(n);if(s.hasProperty(n))return s.getProperty(n)}let a;if(l(r.implicitSubtree)&&(a=r.implicitSubtree.metadata),l(a)){if(a.hasPropertyBySemantic(n))return a.getPropertyBySemantic(n);if(a.hasProperty(n))return a.getProperty(n)}let c=l(e.group)?e.group.metadata:void 0;if(l(c)){if(c.hasPropertyBySemantic(n))return c.getPropertyBySemantic(n);if(c.hasProperty(n))return c.getProperty(n)}let d=e.tileset.metadata;if(l(d)){if(d.hasPropertyBySemantic(n))return d.getPropertyBySemantic(n);if(d.hasProperty(n))return d.getProperty(n)}};Xu.prototype.getPropertyInherited=function(e){return Xu.getPropertyInherited(this._content,this._batchId,e)};Xu.prototype.setProperty=function(e,t){this._content.batchTable.setProperty(this._batchId,e,t),this._content.featurePropertiesDirty=!0};Xu.prototype.isExactClass=function(e){return this._content.batchTable.isExactClass(this._batchId,e)};Xu.prototype.isClass=function(e){return this._content.batchTable.isClass(this._batchId,e)};Xu.prototype.getExactClassName=function(){return this._content.batchTable.getExactClassName(this._batchId)};var Bs=Xu;var Hon=_(T(),1);var von=_(T(),1),gz=class{add(t,n,i){if(typeof arguments[0]!="string")for(let o in arguments[0])this.add(o,arguments[0][o],arguments[1]);else(Array.isArray(t)?t:[t]).forEach(function(o){this[o]=this[o]||[],n&&this[o][i?"unshift":"push"](n)},this)}run(t,n){this[t]=this[t]||[],this[t].forEach(function(i){i.call(n&&n.context?n.context:n,n)})}},yz=class{constructor(t){this.jsep=t,this.registered={}}register(...t){t.forEach(n=>{if(typeof n!="object"||!n.name||!n.init)throw new Error("Invalid JSEP plugin format");this.registered[n.name]||(n.init(this.jsep),this.registered[n.name]=n)})}},wl=class e{static get version(){return"1.4.0"}static toString(){return"JavaScript Expression Parser (JSEP) v"+e.version}static addUnaryOp(t){return e.max_unop_len=Math.max(t.length,e.max_unop_len),e.unary_ops[t]=1,e}static addBinaryOp(t,n,i){return e.max_binop_len=Math.max(t.length,e.max_binop_len),e.binary_ops[t]=n,i?e.right_associative.add(t):e.right_associative.delete(t),e}static addIdentifierChar(t){return e.additional_identifier_chars.add(t),e}static addLiteral(t,n){return e.literals[t]=n,e}static removeUnaryOp(t){return delete e.unary_ops[t],t.length===e.max_unop_len&&(e.max_unop_len=e.getMaxKeyLen(e.unary_ops)),e}static removeAllUnaryOps(){return e.unary_ops={},e.max_unop_len=0,e}static removeIdentifierChar(t){return e.additional_identifier_chars.delete(t),e}static removeBinaryOp(t){return delete e.binary_ops[t],t.length===e.max_binop_len&&(e.max_binop_len=e.getMaxKeyLen(e.binary_ops)),e.right_associative.delete(t),e}static removeAllBinaryOps(){return e.binary_ops={},e.max_binop_len=0,e}static removeLiteral(t){return delete e.literals[t],e}static removeAllLiterals(){return e.literals={},e}get char(){return this.expr.charAt(this.index)}get code(){return this.expr.charCodeAt(this.index)}constructor(t){this.expr=t,this.index=0}static parse(t){return new e(t).parse()}static getMaxKeyLen(t){return Math.max(0,...Object.keys(t).map(n=>n.length))}static isDecimalDigit(t){return t>=48&&t<=57}static binaryPrecedence(t){return e.binary_ops[t]||0}static isIdentifierStart(t){return t>=65&&t<=90||t>=97&&t<=122||t>=128&&!e.binary_ops[String.fromCharCode(t)]||e.additional_identifier_chars.has(String.fromCharCode(t))}static isIdentifierPart(t){return e.isIdentifierStart(t)||e.isDecimalDigit(t)}throwError(t){let n=new Error(t+" at character "+this.index);throw n.index=this.index,n.description=t,n}runHook(t,n){if(e.hooks[t]){let i={context:this,node:n};return e.hooks.run(t,i),i.node}return n}searchHook(t){if(e.hooks[t]){let n={context:this};return e.hooks[t].find(function(i){return i.call(n.context,n),n.node}),n.node}}gobbleSpaces(){let t=this.code;for(;t===e.SPACE_CODE||t===e.TAB_CODE||t===e.LF_CODE||t===e.CR_CODE;)t=this.expr.charCodeAt(++this.index);this.runHook("gobble-spaces")}parse(){this.runHook("before-all");let t=this.gobbleExpressions(),n=t.length===1?t[0]:{type:e.COMPOUND,body:t};return this.runHook("after-all",n)}gobbleExpressions(t){let n=[],i,o;for(;this.index<this.expr.length;)if(i=this.code,i===e.SEMCOL_CODE||i===e.COMMA_CODE)this.index++;else if(o=this.gobbleExpression())n.push(o);else if(this.index<this.expr.length){if(i===t)break;this.throwError('Unexpected "'+this.char+'"')}return n}gobbleExpression(){let t=this.searchHook("gobble-expression")||this.gobbleBinaryExpression();return this.gobbleSpaces(),this.runHook("after-expression",t)}gobbleBinaryOp(){this.gobbleSpaces();let t=this.expr.substr(this.index,e.max_binop_len),n=t.length;for(;n>0;){if(e.binary_ops.hasOwnProperty(t)&&(!e.isIdentifierStart(this.code)||this.index+t.length<this.expr.length&&!e.isIdentifierPart(this.expr.charCodeAt(this.index+t.length))))return this.index+=n,t;t=t.substr(0,--n)}return!1}gobbleBinaryExpression(){let t,n,i,o,r,s,a,c,d;if(s=this.gobbleToken(),!s||(n=this.gobbleBinaryOp(),!n))return s;for(r={value:n,prec:e.binaryPrecedence(n),right_a:e.right_associative.has(n)},a=this.gobbleToken(),a||this.throwError("Expected expression after "+n),o=[s,r,a];n=this.gobbleBinaryOp();){if(i=e.binaryPrecedence(n),i===0){this.index-=n.length;break}r={value:n,prec:i,right_a:e.right_associative.has(n)},d=n;let u=h=>r.right_a&&h.right_a?i>h.prec:i<=h.prec;for(;o.length>2&&u(o[o.length-2]);)a=o.pop(),n=o.pop().value,s=o.pop(),t={type:e.BINARY_EXP,operator:n,left:s,right:a},o.push(t);t=this.gobbleToken(),t||this.throwError("Expected expression after "+d),o.push(r,t)}for(c=o.length-1,t=o[c];c>1;)t={type:e.BINARY_EXP,operator:o[c-1].value,left:o[c-2],right:t},c-=2;return t}gobbleToken(){let t,n,i,o;if(this.gobbleSpaces(),o=this.searchHook("gobble-token"),o)return this.runHook("after-token",o);if(t=this.code,e.isDecimalDigit(t)||t===e.PERIOD_CODE)return this.gobbleNumericLiteral();if(t===e.SQUOTE_CODE||t===e.DQUOTE_CODE)o=this.gobbleStringLiteral();else if(t===e.OBRACK_CODE)o=this.gobbleArray();else{for(n=this.expr.substr(this.index,e.max_unop_len),i=n.length;i>0;){if(e.unary_ops.hasOwnProperty(n)&&(!e.isIdentifierStart(this.code)||this.index+n.length<this.expr.length&&!e.isIdentifierPart(this.expr.charCodeAt(this.index+n.length)))){this.index+=i;let r=this.gobbleToken();return r||this.throwError("missing unaryOp argument"),this.runHook("after-token",{type:e.UNARY_EXP,operator:n,argument:r,prefix:!0})}n=n.substr(0,--i)}e.isIdentifierStart(t)?(o=this.gobbleIdentifier(),e.literals.hasOwnProperty(o.name)?o={type:e.LITERAL,value:e.literals[o.name],raw:o.name}:o.name===e.this_str&&(o={type:e.THIS_EXP})):t===e.OPAREN_CODE&&(o=this.gobbleGroup())}return o?(o=this.gobbleTokenProperty(o),this.runHook("after-token",o)):this.runHook("after-token",!1)}gobbleTokenProperty(t){this.gobbleSpaces();let n=this.code;for(;n===e.PERIOD_CODE||n===e.OBRACK_CODE||n===e.OPAREN_CODE||n===e.QUMARK_CODE;){let i;if(n===e.QUMARK_CODE){if(this.expr.charCodeAt(this.index+1)!==e.PERIOD_CODE)break;i=!0,this.index+=2,this.gobbleSpaces(),n=this.code}this.index++,n===e.OBRACK_CODE?(t={type:e.MEMBER_EXP,computed:!0,object:t,property:this.gobbleExpression()},t.property||this.throwError('Unexpected "'+this.char+'"'),this.gobbleSpaces(),n=this.code,n!==e.CBRACK_CODE&&this.throwError("Unclosed ["),this.index++):n===e.OPAREN_CODE?t={type:e.CALL_EXP,arguments:this.gobbleArguments(e.CPAREN_CODE),callee:t}:(n===e.PERIOD_CODE||i)&&(i&&this.index--,this.gobbleSpaces(),t={type:e.MEMBER_EXP,computed:!1,object:t,property:this.gobbleIdentifier()}),i&&(t.optional=!0),this.gobbleSpaces(),n=this.code}return t}gobbleNumericLiteral(){let t="",n,i;for(;e.isDecimalDigit(this.code);)t+=this.expr.charAt(this.index++);if(this.code===e.PERIOD_CODE)for(t+=this.expr.charAt(this.index++);e.isDecimalDigit(this.code);)t+=this.expr.charAt(this.index++);if(n=this.char,n==="e"||n==="E"){for(t+=this.expr.charAt(this.index++),n=this.char,(n==="+"||n==="-")&&(t+=this.expr.charAt(this.index++));e.isDecimalDigit(this.code);)t+=this.expr.charAt(this.index++);e.isDecimalDigit(this.expr.charCodeAt(this.index-1))||this.throwError("Expected exponent ("+t+this.char+")")}return i=this.code,e.isIdentifierStart(i)?this.throwError("Variable names cannot start with a number ("+t+this.char+")"):(i===e.PERIOD_CODE||t.length===1&&t.charCodeAt(0)===e.PERIOD_CODE)&&this.throwError("Unexpected period"),{type:e.LITERAL,value:parseFloat(t),raw:t}}gobbleStringLiteral(){let t="",n=this.index,i=this.expr.charAt(this.index++),o=!1;for(;this.index<this.expr.length;){let r=this.expr.charAt(this.index++);if(r===i){o=!0;break}else if(r==="\\")switch(r=this.expr.charAt(this.index++),r){case"n":t+=` `;break;case"r":t+="\r";break;case"t":t+=" ";break;case"b":t+="\b";break;case"f":t+="\f";break;case"v":t+="\v";break;default:t+=r}else t+=r}return o||this.throwError('Unclosed quote after "'+t+'"'),{type:e.LITERAL,value:t,raw:this.expr.substring(n,this.index)}}gobbleIdentifier(){let t=this.code,n=this.index;for(e.isIdentifierStart(t)?this.index++:this.throwError("Unexpected "+this.char);this.index<this.expr.length&&(t=this.code,e.isIdentifierPart(t));)this.index++;return{type:e.IDENTIFIER,name:this.expr.slice(n,this.index)}}gobbleArguments(t){let n=[],i=!1,o=0;for(;this.index<this.expr.length;){this.gobbleSpaces();let r=this.code;if(r===t){i=!0,this.index++,t===e.CPAREN_CODE&&o&&o>=n.length&&this.throwError("Unexpected token "+String.fromCharCode(t));break}else if(r===e.COMMA_CODE){if(this.index++,o++,o!==n.length){if(t===e.CPAREN_CODE)this.throwError("Unexpected token ,");else if(t===e.CBRACK_CODE)for(let s=n.length;s<o;s++)n.push(null)}}else if(n.length!==o&&o!==0)this.throwError("Expected comma");else{let s=this.gobbleExpression();(!s||s.type===e.COMPOUND)&&this.throwError("Expected comma"),n.push(s)}}return i||this.throwError("Expected "+String.fromCharCode(t)),n}gobbleGroup(){this.index++;let t=this.gobbleExpressions(e.CPAREN_CODE);if(this.code===e.CPAREN_CODE)return this.index++,t.length===1?t[0]:t.length?{type:e.SEQUENCE_EXP,expressions:t}:!1;this.throwError("Unclosed (")}gobbleArray(){return this.index++,{type:e.ARRAY_EXP,elements:this.gobbleArguments(e.CBRACK_CODE)}}},Kwe=new gz;Object.assign(wl,{hooks:Kwe,plugins:new yz(wl),COMPOUND:"Compound",SEQUENCE_EXP:"SequenceExpression",IDENTIFIER:"Identifier",MEMBER_EXP:"MemberExpression",LITERAL:"Literal",THIS_EXP:"ThisExpression",CALL_EXP:"CallExpression",UNARY_EXP:"UnaryExpression",BINARY_EXP:"BinaryExpression",ARRAY_EXP:"ArrayExpression",TAB_CODE:9,LF_CODE:10,CR_CODE:13,SPACE_CODE:32,PERIOD_CODE:46,COMMA_CODE:44,SQUOTE_CODE:39,DQUOTE_CODE:34,OPAREN_CODE:40,CPAREN_CODE:41,OBRACK_CODE:91,CBRACK_CODE:93,QUMARK_CODE:63,SEMCOL_CODE:59,COLON_CODE:58,unary_ops:{"-":1,"!":1,"~":1,"+":1},binary_ops:{"||":1,"??":1,"&&":2,"|":3,"^":4,"&":5,"==":6,"!=":6,"===":6,"!==":6,"<":7,">":7,"<=":7,">=":7,"<<":8,">>":8,">>>":8,"+":9,"-":9,"*":10,"/":10,"%":10,"**":11},right_associative:new Set(["**"]),additional_identifier_chars:new Set(["$","_"]),literals:{true:!0,false:!1,null:null},this_str:"this"});wl.max_unop_len=wl.getMaxKeyLen(wl.unary_ops);wl.max_binop_len=wl.getMaxKeyLen(wl.binary_ops);var ng=e=>new wl(e).parse(),Jwe=Object.getOwnPropertyNames(class{});Object.getOwnPropertyNames(wl).filter(e=>!Jwe.includes(e)&&ng[e]===void 0).forEach(e=>{ng[e]=wl[e]});ng.Jsep=wl;var Qwe="ConditionalExpression",jwe={name:"ternary",init(e){e.hooks.add("after-expression",function(n){if(n.node&&this.code===e.QUMARK_CODE){this.index++;let i=n.node,o=this.gobbleExpression();if(o||this.throwError("Expected expression"),this.gobbleSpaces(),this.code===e.COLON_CODE){this.index++;let r=this.gobbleExpression();if(r||this.throwError("Expected expression"),n.node={type:Qwe,test:i,consequent:o,alternate:r},i.operator&&e.binary_ops[i.operator]<=.9){let s=i;for(;s.right.operator&&e.binary_ops[s.right.operator]<=.9;)s=s.right;n.node.test=s.right,s.right=n.node,n.node=i}}else this.throwError("Expected :")}})}};ng.plugins.register(jwe);var Fon=_(T(),1),qwe={VARIABLE:0,UNARY:1,BINARY:2,TERNARY:3,CONDITIONAL:4,MEMBER:5,FUNCTION_CALL:6,ARRAY:7,REGEX:8,VARIABLE_IN_STRING:9,LITERAL_NULL:10,LITERAL_BOOLEAN:11,LITERAL_NUMBER:12,LITERAL_STRING:13,LITERAL_COLOR:14,LITERAL_VECTOR:15,LITERAL_REGEX:16,LITERAL_UNDEFINED:17,BUILTIN_VARIABLE:18},gt=Object.freeze(qwe);function Hm(e,t){this._expression=e,e=uFe(e,t),e=hFe(mFe(e)),ng.addBinaryOp("=~",0),ng.addBinaryOp("!~",0);let n;try{n=ng(e)}catch(i){throw new ae(i)}this._runtimeAst=Li(this,n)}Object.defineProperties(Hm.prototype,{expression:{get:function(){return this._expression}}});var vn={arrayIndex:0,arrayArray:[[]],cartesian2Index:0,cartesian3Index:0,cartesian4Index:0,cartesian2Array:[new U],cartesian3Array:[new m],cartesian4Array:[new se],reset:function(){this.arrayIndex=0,this.cartesian2Index=0,this.cartesian3Index=0,this.cartesian4Index=0},getArray:function(){this.arrayIndex>=this.arrayArray.length&&this.arrayArray.push([]);let e=this.arrayArray[this.arrayIndex++];return e.length=0,e},getCartesian2:function(){return this.cartesian2Index>=this.cartesian2Array.length&&this.cartesian2Array.push(new U),this.cartesian2Array[this.cartesian2Index++]},getCartesian3:function(){return this.cartesian3Index>=this.cartesian3Array.length&&this.cartesian3Array.push(new m),this.cartesian3Array[this.cartesian3Index++]},getCartesian4:function(){return this.cartesian4Index>=this.cartesian4Array.length&&this.cartesian4Array.push(new se),this.cartesian4Array[this.cartesian4Index++]}};Hm.prototype.evaluate=function(e,t){vn.reset();let n=this._runtimeAst.evaluate(e);return t instanceof D&&n instanceof se?D.fromCartesian4(n,t):n instanceof U||n instanceof m||n instanceof se?n.clone(t):n};Hm.prototype.evaluateColor=function(e,t){vn.reset();let n=this._runtimeAst.evaluate(e);return D.fromCartesian4(n,t)};Hm.prototype.getShaderFunction=function(e,t,n,i){let o=this.getShaderExpression(t,n);return o=`${i} ${e} { return ${o}; } `,o};Hm.prototype.getShaderExpression=function(e,t){return this._runtimeAst.getShaderExpression(e,t)};Hm.prototype.getVariables=function(){let e=[];return this._runtimeAst.getVariables(e),e=e.filter(function(t,n,i){return i.indexOf(t)===n}),e};var $we=["!","-","+"],xoe=["+","-","*","/","%","===","!==",">",">=","<","<=","&&","||","!~","=~"],FI=/\${(.*?)}/g,eFe=/\\/g,tFe="@#%",nFe=/@#%/g,y5=new D,x5={abs:Os(Math.abs),sqrt:Os(Math.sqrt),cos:Os(Math.cos),sin:Os(Math.sin),tan:Os(Math.tan),acos:Os(Math.acos),asin:Os(Math.asin),atan:Os(Math.atan),radians:Os(X.toRadians),degrees:Os(X.toDegrees),sign:Os(X.sign),floor:Os(Math.floor),ceil:Os(Math.ceil),round:Os(Math.round),exp:Os(Math.exp),exp2:Os(oFe),log:Os(Math.log),log2:Os(rFe),fract:Os(iFe),length:sFe,normalize:aFe},_5={atan2:b5(Math.atan2,!1),pow:b5(Math.pow,!1),min:b5(Math.min,!0),max:b5(Math.max,!0),distance:cFe,dot:lFe,cross:dFe},Tz={clamp:_oe(X.clamp,!0),mix:_oe(X.lerp,!0)};function iFe(e){return e-Math.floor(e)}function oFe(e){return Math.pow(2,e)}function rFe(e){return X.log2(e)}function Os(e){return function(t,n){if(typeof n=="number")return e(n);if(n instanceof U)return U.fromElements(e(n.x),e(n.y),vn.getCartesian2());if(n instanceof m)return m.fromElements(e(n.x),e(n.y),e(n.z),vn.getCartesian3());if(n instanceof se)return se.fromElements(e(n.x),e(n.y),e(n.z),e(n.w),vn.getCartesian4());throw new ae(`Function "${t}" requires a vector or number argument. Argument is ${n}.`)}}function b5(e,t){return function(n,i,o){if(t&&typeof o=="number"){if(typeof i=="number")return e(i,o);if(i instanceof U)return U.fromElements(e(i.x,o),e(i.y,o),vn.getCartesian2());if(i instanceof m)return m.fromElements(e(i.x,o),e(i.y,o),e(i.z,o),vn.getCartesian3());if(i instanceof se)return se.fromElements(e(i.x,o),e(i.y,o),e(i.z,o),e(i.w,o),vn.getCartesian4())}if(typeof i=="number"&&typeof o=="number")return e(i,o);if(i instanceof U&&o instanceof U)return U.fromElements(e(i.x,o.x),e(i.y,o.y),vn.getCartesian2());if(i instanceof m&&o instanceof m)return m.fromElements(e(i.x,o.x),e(i.y,o.y),e(i.z,o.z),vn.getCartesian3());if(i instanceof se&&o instanceof se)return se.fromElements(e(i.x,o.x),e(i.y,o.y),e(i.z,o.z),e(i.w,o.w),vn.getCartesian4());throw new ae(`Function "${n}" requires vector or number arguments of matching types. Arguments are ${i} and ${o}.`)}}function _oe(e,t){return function(n,i,o,r){if(t&&typeof r=="number"){if(typeof i=="number"&&typeof o=="number")return e(i,o,r);if(i instanceof U&&o instanceof U)return U.fromElements(e(i.x,o.x,r),e(i.y,o.y,r),vn.getCartesian2());if(i instanceof m&&o instanceof m)return m.fromElements(e(i.x,o.x,r),e(i.y,o.y,r),e(i.z,o.z,r),vn.getCartesian3());if(i instanceof se&&o instanceof se)return se.fromElements(e(i.x,o.x,r),e(i.y,o.y,r),e(i.z,o.z,r),e(i.w,o.w,r),vn.getCartesian4())}if(typeof i=="number"&&typeof o=="number"&&typeof r=="number")return e(i,o,r);if(i instanceof U&&o instanceof U&&r instanceof U)return U.fromElements(e(i.x,o.x,r.x),e(i.y,o.y,r.y),vn.getCartesian2());if(i instanceof m&&o instanceof m&&r instanceof m)return m.fromElements(e(i.x,o.x,r.x),e(i.y,o.y,r.y),e(i.z,o.z,r.z),vn.getCartesian3());if(i instanceof se&&o instanceof se&&r instanceof se)return se.fromElements(e(i.x,o.x,r.x),e(i.y,o.y,r.y),e(i.z,o.z,r.z),e(i.w,o.w,r.w),vn.getCartesian4());throw new ae(`Function "${n}" requires vector or number arguments of matching types. Arguments are ${i}, ${o}, and ${r}.`)}}function sFe(e,t){if(typeof t=="number")return Math.abs(t);if(t instanceof U)return U.magnitude(t);if(t instanceof m)return m.magnitude(t);if(t instanceof se)return se.magnitude(t);throw new ae(`Function "${e}" requires a vector or number argument. Argument is ${t}.`)}function aFe(e,t){if(typeof t=="number")return 1;if(t instanceof U)return U.normalize(t,vn.getCartesian2());if(t instanceof m)return m.normalize(t,vn.getCartesian3());if(t instanceof se)return se.normalize(t,vn.getCartesian4());throw new ae(`Function "${e}" requires a vector or number argument. Argument is ${t}.`)}function cFe(e,t,n){if(typeof t=="number"&&typeof n=="number")return Math.abs(t-n);if(t instanceof U&&n instanceof U)return U.distance(t,n);if(t instanceof m&&n instanceof m)return m.distance(t,n);if(t instanceof se&&n instanceof se)return se.distance(t,n);throw new ae(`Function "${e}" requires vector or number arguments of matching types. Arguments are ${t} and ${n}.`)}function lFe(e,t,n){if(typeof t=="number"&&typeof n=="number")return t*n;if(t instanceof U&&n instanceof U)return U.dot(t,n);if(t instanceof m&&n instanceof m)return m.dot(t,n);if(t instanceof se&&n instanceof se)return se.dot(t,n);throw new ae(`Function "${e}" requires vector or number arguments of matching types. Arguments are ${t} and ${n}.`)}function dFe(e,t,n){if(t instanceof m&&n instanceof m)return m.cross(t,n,vn.getCartesian3());throw new ae(`Function "${e}" requires vec3 arguments. Arguments are ${t} and ${n}.`)}function Vt(e,t,n,i,o){this._type=e,this._value=t,this._left=n,this._right=i,this._test=o,this.evaluate=void 0,CFe(this)}function uFe(e,t){if(!l(t))return e;for(let n in t)if(t.hasOwnProperty(n)){let i=new RegExp(`\\$\\{${n}\\}`,"g"),o=`(${t[n]})`;l(o)&&(e=e.replace(i,o))}return e}function mFe(e){return e.replace(eFe,tFe)}function _z(e){return e.replace(nFe,"\\")}function hFe(e){let t=e,n="",i=t.indexOf("${");for(;i>=0;){let o=t.indexOf("'"),r=t.indexOf('"'),s;if(o>=0&&o<i)s=t.indexOf("'",o+1),n+=t.substr(0,s+1),t=t.substr(s+1),i=t.indexOf("${");else if(r>=0&&r<i)s=t.indexOf('"',r+1),n+=t.substr(0,s+1),t=t.substr(s+1),i=t.indexOf("${");else{n+=t.substr(0,i);let a=t.indexOf("}");if(a<0)throw new ae("Unmatched {.");n+=`czm_${t.substr(i+2,a-(i+2))}`,t=t.substr(a+1),i=t.indexOf("${")}}return n+=t,n}function fFe(e){let t=typeof e.value;if(e.value===null)return new Vt(gt.LITERAL_NULL,null);if(t==="boolean")return new Vt(gt.LITERAL_BOOLEAN,e.value);if(t==="number")return new Vt(gt.LITERAL_NUMBER,e.value);if(t==="string")return e.value.indexOf("${")>=0?new Vt(gt.VARIABLE_IN_STRING,e.value):new Vt(gt.LITERAL_STRING,_z(e.value))}function pFe(e,t){let n=t.arguments,i=n.length,o,r,s,a;if(t.callee.type==="MemberExpression"){o=t.callee.property.name;let c=t.callee.object;if(o==="test"||o==="exec"){if(!l(c.callee)||c.callee.name!=="regExp")throw new ae(`${o} is not a function.`);return i===0?o==="test"?new Vt(gt.LITERAL_BOOLEAN,!1):new Vt(gt.LITERAL_NULL,null):(s=Li(e,c),a=Li(e,n[0]),new Vt(gt.FUNCTION_CALL,o,s,a))}else if(o==="toString")return r=Li(e,c),new Vt(gt.FUNCTION_CALL,o,r);throw new ae(`Unexpected function call "${o}".`)}if(o=t.callee.name,o==="color"){if(i===0)return new Vt(gt.LITERAL_COLOR,o);if(r=Li(e,n[0]),l(n[1])){let c=Li(e,n[1]);return new Vt(gt.LITERAL_COLOR,o,[r,c])}return new Vt(gt.LITERAL_COLOR,o,[r])}else if(o==="rgb"||o==="hsl"){if(i<3)throw new ae(`${o} requires three arguments.`);return r=[Li(e,n[0]),Li(e,n[1]),Li(e,n[2])],new Vt(gt.LITERAL_COLOR,o,r)}else if(o==="rgba"||o==="hsla"){if(i<4)throw new ae(`${o} requires four arguments.`);return r=[Li(e,n[0]),Li(e,n[1]),Li(e,n[2]),Li(e,n[3])],new Vt(gt.LITERAL_COLOR,o,r)}else if(o==="vec2"||o==="vec3"||o==="vec4"){r=new Array(i);for(let c=0;c<i;++c)r[c]=Li(e,n[c]);return new Vt(gt.LITERAL_VECTOR,o,r)}else{if(o==="isNaN"||o==="isFinite")return i===0?o==="isNaN"?new Vt(gt.LITERAL_BOOLEAN,!0):new Vt(gt.LITERAL_BOOLEAN,!1):(r=Li(e,n[0]),new Vt(gt.UNARY,o,r));if(o==="isExactClass"||o==="isClass"){if(i<1||i>1)throw new ae(`${o} requires exactly one argument.`);return r=Li(e,n[0]),new Vt(gt.UNARY,o,r)}else if(o==="getExactClassName"){if(i>0)throw new ae(`${o} does not take any argument.`);return new Vt(gt.UNARY,o)}else if(l(x5[o])){if(i!==1)throw new ae(`${o} requires exactly one argument.`);return r=Li(e,n[0]),new Vt(gt.UNARY,o,r)}else if(l(_5[o])){if(i!==2)throw new ae(`${o} requires exactly two arguments.`);return s=Li(e,n[0]),a=Li(e,n[1]),new Vt(gt.BINARY,o,s,a)}else if(l(Tz[o])){if(i!==3)throw new ae(`${o} requires exactly three arguments.`);s=Li(e,n[0]),a=Li(e,n[1]);let c=Li(e,n[2]);return new Vt(gt.TERNARY,o,s,a,c)}else{if(o==="Boolean")return i===0?new Vt(gt.LITERAL_BOOLEAN,!1):(r=Li(e,n[0]),new Vt(gt.UNARY,o,r));if(o==="Number")return i===0?new Vt(gt.LITERAL_NUMBER,0):(r=Li(e,n[0]),new Vt(gt.UNARY,o,r));if(o==="String")return i===0?new Vt(gt.LITERAL_STRING,""):(r=Li(e,n[0]),new Vt(gt.UNARY,o,r));if(o==="regExp")return bFe(e,t)}}throw new ae(`Unexpected function call "${o}".`)}function bFe(e,t){let n=t.arguments;if(n.length===0)return new Vt(gt.LITERAL_REGEX,new RegExp);let i=Li(e,n[0]),o;if(n.length>1){let r=Li(e,n[1]);if(xz(i)&&xz(r)){try{o=new RegExp(_z(String(i._value)),r._value)}catch(s){throw new ae(s)}return new Vt(gt.LITERAL_REGEX,o)}return new Vt(gt.REGEX,i,r)}if(xz(i)){try{o=new RegExp(_z(String(i._value)))}catch(r){throw new ae(r)}return new Vt(gt.LITERAL_REGEX,o)}return new Vt(gt.REGEX,i)}function gFe(e){if(TFe(e.name)){let t=SFe(e.name);return t.substr(0,8)==="tiles3d_"?new Vt(gt.BUILTIN_VARIABLE,t):new Vt(gt.VARIABLE,t)}else{if(e.name==="NaN")return new Vt(gt.LITERAL_NUMBER,NaN);if(e.name==="Infinity")return new Vt(gt.LITERAL_NUMBER,1/0);if(e.name==="undefined")return new Vt(gt.LITERAL_UNDEFINED,void 0)}throw new ae(`${e.name} is not defined.`)}function yFe(e){let t=e.property.name;if(t==="PI")return new Vt(gt.LITERAL_NUMBER,Math.PI);if(t==="E")return new Vt(gt.LITERAL_NUMBER,Math.E)}function xFe(e){if(e.property.name==="POSITIVE_INFINITY")return new Vt(gt.LITERAL_NUMBER,Number.POSITIVE_INFINITY)}function _Fe(e,t){if(t.object.name==="Math")return yFe(t);if(t.object.name==="Number")return xFe(t);let n,i=Li(e,t.object);return t.computed?(n=Li(e,t.property),new Vt(gt.MEMBER,"brackets",i,n)):(n=new Vt(gt.LITERAL_STRING,t.property.name),new Vt(gt.MEMBER,"dot",i,n))}function xz(e){return e._type>=gt.LITERAL_NULL}function TFe(e){return e.substr(0,4)==="czm_"}function SFe(e){return e.substr(4)}function Li(e,t){let n,i,o,r;if(t.type==="Literal")n=fFe(t);else if(t.type==="CallExpression")n=pFe(e,t);else if(t.type==="Identifier")n=gFe(t);else if(t.type==="UnaryExpression"){i=t.operator;let s=Li(e,t.argument);if($we.indexOf(i)>-1)n=new Vt(gt.UNARY,i,s);else throw new ae(`Unexpected operator "${i}".`)}else if(t.type==="BinaryExpression")if(i=t.operator,o=Li(e,t.left),r=Li(e,t.right),xoe.indexOf(i)>-1)n=new Vt(gt.BINARY,i,o,r);else throw new ae(`Unexpected operator "${i}".`);else if(t.type==="LogicalExpression")i=t.operator,o=Li(e,t.left),r=Li(e,t.right),xoe.indexOf(i)>-1&&(n=new Vt(gt.BINARY,i,o,r));else if(t.type==="ConditionalExpression"){let s=Li(e,t.test);o=Li(e,t.consequent),r=Li(e,t.alternate),n=new Vt(gt.CONDITIONAL,"?",o,r,s)}else if(t.type==="MemberExpression")n=_Fe(e,t);else if(t.type==="ArrayExpression"){let s=[];for(let a=0;a<t.elements.length;a++)s[a]=Li(e,t.elements[a]);n=new Vt(gt.ARRAY,s)}else throw t.type==="Compound"?new ae("Provide exactly one expression."):new ae("Cannot parse expression.");return n}function CFe(e){e._type===gt.CONDITIONAL?e.evaluate=e._evaluateConditional:e._type===gt.FUNCTION_CALL?e._value==="test"?e.evaluate=e._evaluateRegExpTest:e._value==="exec"?e.evaluate=e._evaluateRegExpExec:e._value==="toString"&&(e.evaluate=e._evaluateToString):e._type===gt.UNARY?e._value==="!"?e.evaluate=e._evaluateNot:e._value==="-"?e.evaluate=e._evaluateNegative:e._value==="+"?e.evaluate=e._evaluatePositive:e._value==="isNaN"?e.evaluate=e._evaluateNaN:e._value==="isFinite"?e.evaluate=e._evaluateIsFinite:e._value==="isExactClass"?e.evaluate=e._evaluateIsExactClass:e._value==="isClass"?e.evaluate=e._evaluateIsClass:e._value==="getExactClassName"?e.evaluate=e._evaluateGetExactClassName:e._value==="Boolean"?e.evaluate=e._evaluateBooleanConversion:e._value==="Number"?e.evaluate=e._evaluateNumberConversion:e._value==="String"?e.evaluate=e._evaluateStringConversion:l(x5[e._value])&&(e.evaluate=LFe(e._value)):e._type===gt.BINARY?e._value==="+"?e.evaluate=e._evaluatePlus:e._value==="-"?e.evaluate=e._evaluateMinus:e._value==="*"?e.evaluate=e._evaluateTimes:e._value==="/"?e.evaluate=e._evaluateDivide:e._value==="%"?e.evaluate=e._evaluateMod:e._value==="==="?e.evaluate=e._evaluateEqualsStrict:e._value==="!=="?e.evaluate=e._evaluateNotEqualsStrict:e._value==="<"?e.evaluate=e._evaluateLessThan:e._value==="<="?e.evaluate=e._evaluateLessThanOrEquals:e._value===">"?e.evaluate=e._evaluateGreaterThan:e._value===">="?e.evaluate=e._evaluateGreaterThanOrEquals:e._value==="&&"?e.evaluate=e._evaluateAnd:e._value==="||"?e.evaluate=e._evaluateOr:e._value==="=~"?e.evaluate=e._evaluateRegExpMatch:e._value==="!~"?e.evaluate=e._evaluateRegExpNotMatch:l(_5[e._value])&&(e.evaluate=RFe(e._value)):e._type===gt.TERNARY?e.evaluate=ZFe(e._value):e._type===gt.MEMBER?e._value==="brackets"?e.evaluate=e._evaluateMemberBrackets:e.evaluate=e._evaluateMemberDot:e._type===gt.ARRAY?e.evaluate=e._evaluateArray:e._type===gt.VARIABLE?e.evaluate=e._evaluateVariable:e._type===gt.VARIABLE_IN_STRING?e.evaluate=e._evaluateVariableString:e._type===gt.LITERAL_COLOR?e.evaluate=e._evaluateLiteralColor:e._type===gt.LITERAL_VECTOR?e.evaluate=e._evaluateLiteralVector:e._type===gt.LITERAL_STRING?e.evaluate=e._evaluateLiteralString:e._type===gt.REGEX?e.evaluate=e._evaluateRegExp:e._type===gt.BUILTIN_VARIABLE?e._value==="tiles3d_tileset_time"&&(e.evaluate=VFe):e.evaluate=e._evaluateLiteral}function VFe(e){return l(e)?e.content.tileset.timeSinceLoad:0}function LFe(e){let t=x5[e];return function(n){let i=this._left.evaluate(n);return t(e,i)}}function RFe(e){let t=_5[e];return function(n){let i=this._left.evaluate(n),o=this._right.evaluate(n);return t(e,i,o)}}function ZFe(e){let t=Tz[e];return function(n){let i=this._left.evaluate(n),o=this._right.evaluate(n),r=this._test.evaluate(n);return t(e,i,o,r)}}function T5(e,t){if(l(e))return e.getPropertyInherited(t)}Vt.prototype._evaluateLiteral=function(){return this._value};Vt.prototype._evaluateLiteralColor=function(e){let t=y5,n=this._left;if(this._value==="color")l(n)?n.length>1?(D.fromCssColorString(n[0].evaluate(e),t),t.alpha=n[1].evaluate(e)):D.fromCssColorString(n[0].evaluate(e),t):D.fromBytes(255,255,255,255,t);else if(this._value==="rgb")D.fromBytes(n[0].evaluate(e),n[1].evaluate(e),n[2].evaluate(e),255,t);else if(this._value==="rgba"){let i=n[3].evaluate(e)*255;D.fromBytes(n[0].evaluate(e),n[1].evaluate(e),n[2].evaluate(e),i,t)}else this._value==="hsl"?D.fromHsl(n[0].evaluate(e),n[1].evaluate(e),n[2].evaluate(e),1,t):this._value==="hsla"&&D.fromHsl(n[0].evaluate(e),n[1].evaluate(e),n[2].evaluate(e),n[3].evaluate(e),t);return se.fromColor(t,vn.getCartesian4())};Vt.prototype._evaluateLiteralVector=function(e){let t=vn.getArray(),n=this._value,i=this._left,o=i.length;for(let a=0;a<o;++a){let c=i[a].evaluate(e);if(typeof c=="number")t.push(c);else if(c instanceof U)t.push(c.x,c.y);else if(c instanceof m)t.push(c.x,c.y,c.z);else if(c instanceof se)t.push(c.x,c.y,c.z,c.w);else throw new ae(`${n} argument must be a vector or number. Argument is ${c}.`)}let r=t.length,s=parseInt(n.charAt(3));if(r===0)throw new ae(`Invalid ${n} constructor. No valid arguments.`);if(r<s&&r>1)throw new ae(`Invalid ${n} constructor. Not enough arguments.`);if(r>s&&o>1)throw new ae(`Invalid ${n} constructor. Too many arguments.`);if(r===1){let a=t[0];t.push(a,a,a)}if(n==="vec2")return U.fromArray(t,0,vn.getCartesian2());if(n==="vec3")return m.fromArray(t,0,vn.getCartesian3());if(n==="vec4")return se.fromArray(t,0,vn.getCartesian4())};Vt.prototype._evaluateLiteralString=function(){return this._value};Vt.prototype._evaluateVariableString=function(e){let t=this._value,n=FI.exec(t);for(;n!==null;){let i=n[0],o=n[1],r=T5(e,o);l(r)||(r=""),t=t.replace(i,r),FI.lastIndex+=r.length-i.length,n=FI.exec(t)}return t};Vt.prototype._evaluateVariable=function(e){return T5(e,this._value)};function e_(e){return e._value==="feature"}Vt.prototype._evaluateMemberDot=function(e){if(e_(this._left))return T5(e,this._right.evaluate(e));let t=this._left.evaluate(e);if(!l(t))return;let n=this._right.evaluate(e);if(t instanceof U||t instanceof m||t instanceof se){if(n==="r")return t.x;if(n==="g")return t.y;if(n==="b")return t.z;if(n==="a")return t.w}return t[n]};Vt.prototype._evaluateMemberBrackets=function(e){if(e_(this._left))return T5(e,this._right.evaluate(e));let t=this._left.evaluate(e);if(!l(t))return;let n=this._right.evaluate(e);if(t instanceof U||t instanceof m||t instanceof se){if(n===0||n==="r")return t.x;if(n===1||n==="g")return t.y;if(n===2||n==="b")return t.z;if(n===3||n==="a")return t.w}return t[n]};Vt.prototype._evaluateArray=function(e){let t=[];for(let n=0;n<this._value.length;n++)t[n]=this._value[n].evaluate(e);return t};Vt.prototype._evaluateNot=function(e){let t=this._left.evaluate(e);if(typeof t!="boolean")throw new ae(`Operator "!" requires a boolean argument. Argument is ${t}.`);return!t};Vt.prototype._evaluateNegative=function(e){let t=this._left.evaluate(e);if(t instanceof U)return U.negate(t,vn.getCartesian2());if(t instanceof m)return m.negate(t,vn.getCartesian3());if(t instanceof se)return se.negate(t,vn.getCartesian4());if(typeof t=="number")return-t;throw new ae(`Operator "-" requires a vector or number argument. Argument is ${t}.`)};Vt.prototype._evaluatePositive=function(e){let t=this._left.evaluate(e);if(!(t instanceof U||t instanceof m||t instanceof se||typeof t=="number"))throw new ae(`Operator "+" requires a vector or number argument. Argument is ${t}.`);return t};Vt.prototype._evaluateLessThan=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(typeof t!="number"||typeof n!="number")throw new ae(`Operator "<" requires number arguments. Arguments are ${t} and ${n}.`);return t<n};Vt.prototype._evaluateLessThanOrEquals=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(typeof t!="number"||typeof n!="number")throw new ae(`Operator "<=" requires number arguments. Arguments are ${t} and ${n}.`);return t<=n};Vt.prototype._evaluateGreaterThan=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(typeof t!="number"||typeof n!="number")throw new ae(`Operator ">" requires number arguments. Arguments are ${t} and ${n}.`);return t>n};Vt.prototype._evaluateGreaterThanOrEquals=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(typeof t!="number"||typeof n!="number")throw new ae(`Operator ">=" requires number arguments. Arguments are ${t} and ${n}.`);return t>=n};Vt.prototype._evaluateOr=function(e){let t=this._left.evaluate(e);if(typeof t!="boolean")throw new ae(`Operator "||" requires boolean arguments. First argument is ${t}.`);if(t)return!0;let n=this._right.evaluate(e);if(typeof n!="boolean")throw new ae(`Operator "||" requires boolean arguments. Second argument is ${n}.`);return t||n};Vt.prototype._evaluateAnd=function(e){let t=this._left.evaluate(e);if(typeof t!="boolean")throw new ae(`Operator "&&" requires boolean arguments. First argument is ${t}.`);if(!t)return!1;let n=this._right.evaluate(e);if(typeof n!="boolean")throw new ae(`Operator "&&" requires boolean arguments. Second argument is ${n}.`);return t&&n};Vt.prototype._evaluatePlus=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(n instanceof U&&t instanceof U)return U.add(t,n,vn.getCartesian2());if(n instanceof m&&t instanceof m)return m.add(t,n,vn.getCartesian3());if(n instanceof se&&t instanceof se)return se.add(t,n,vn.getCartesian4());if(typeof t=="string"||typeof n=="string")return t+n;if(typeof t=="number"&&typeof n=="number")return t+n;throw new ae(`Operator "+" requires vector or number arguments of matching types, or at least one string argument. Arguments are ${t} and ${n}.`)};Vt.prototype._evaluateMinus=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(n instanceof U&&t instanceof U)return U.subtract(t,n,vn.getCartesian2());if(n instanceof m&&t instanceof m)return m.subtract(t,n,vn.getCartesian3());if(n instanceof se&&t instanceof se)return se.subtract(t,n,vn.getCartesian4());if(typeof t=="number"&&typeof n=="number")return t-n;throw new ae(`Operator "-" requires vector or number arguments of matching types. Arguments are ${t} and ${n}.`)};Vt.prototype._evaluateTimes=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(n instanceof U&&t instanceof U)return U.multiplyComponents(t,n,vn.getCartesian2());if(n instanceof U&&typeof t=="number")return U.multiplyByScalar(n,t,vn.getCartesian2());if(t instanceof U&&typeof n=="number")return U.multiplyByScalar(t,n,vn.getCartesian2());if(n instanceof m&&t instanceof m)return m.multiplyComponents(t,n,vn.getCartesian3());if(n instanceof m&&typeof t=="number")return m.multiplyByScalar(n,t,vn.getCartesian3());if(t instanceof m&&typeof n=="number")return m.multiplyByScalar(t,n,vn.getCartesian3());if(n instanceof se&&t instanceof se)return se.multiplyComponents(t,n,vn.getCartesian4());if(n instanceof se&&typeof t=="number")return se.multiplyByScalar(n,t,vn.getCartesian4());if(t instanceof se&&typeof n=="number")return se.multiplyByScalar(t,n,vn.getCartesian4());if(typeof t=="number"&&typeof n=="number")return t*n;throw new ae(`Operator "*" requires vector or number arguments. If both arguments are vectors they must be matching types. Arguments are ${t} and ${n}.`)};Vt.prototype._evaluateDivide=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(n instanceof U&&t instanceof U)return U.divideComponents(t,n,vn.getCartesian2());if(t instanceof U&&typeof n=="number")return U.divideByScalar(t,n,vn.getCartesian2());if(n instanceof m&&t instanceof m)return m.divideComponents(t,n,vn.getCartesian3());if(t instanceof m&&typeof n=="number")return m.divideByScalar(t,n,vn.getCartesian3());if(n instanceof se&&t instanceof se)return se.divideComponents(t,n,vn.getCartesian4());if(t instanceof se&&typeof n=="number")return se.divideByScalar(t,n,vn.getCartesian4());if(typeof t=="number"&&typeof n=="number")return t/n;throw new ae(`Operator "/" requires vector or number arguments of matching types, or a number as the second argument. Arguments are ${t} and ${n}.`)};Vt.prototype._evaluateMod=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(n instanceof U&&t instanceof U)return U.fromElements(t.x%n.x,t.y%n.y,vn.getCartesian2());if(n instanceof m&&t instanceof m)return m.fromElements(t.x%n.x,t.y%n.y,t.z%n.z,vn.getCartesian3());if(n instanceof se&&t instanceof se)return se.fromElements(t.x%n.x,t.y%n.y,t.z%n.z,t.w%n.w,vn.getCartesian4());if(typeof t=="number"&&typeof n=="number")return t%n;throw new ae(`Operator "%" requires vector or number arguments of matching types. Arguments are ${t} and ${n}.`)};Vt.prototype._evaluateEqualsStrict=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);return n instanceof U&&t instanceof U||n instanceof m&&t instanceof m||n instanceof se&&t instanceof se?t.equals(n):t===n};Vt.prototype._evaluateNotEqualsStrict=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);return n instanceof U&&t instanceof U||n instanceof m&&t instanceof m||n instanceof se&&t instanceof se?!t.equals(n):t!==n};Vt.prototype._evaluateConditional=function(e){let t=this._test.evaluate(e);if(typeof t!="boolean")throw new ae(`Conditional argument of conditional expression must be a boolean. Argument is ${t}.`);return t?this._left.evaluate(e):this._right.evaluate(e)};Vt.prototype._evaluateNaN=function(e){return isNaN(this._left.evaluate(e))};Vt.prototype._evaluateIsFinite=function(e){return isFinite(this._left.evaluate(e))};Vt.prototype._evaluateIsExactClass=function(e){return l(e)?e.isExactClass(this._left.evaluate(e)):!1};Vt.prototype._evaluateIsClass=function(e){return l(e)?e.isClass(this._left.evaluate(e)):!1};Vt.prototype._evaluateGetExactClassName=function(e){if(l(e))return e.getExactClassName()};Vt.prototype._evaluateBooleanConversion=function(e){return!!this._left.evaluate(e)};Vt.prototype._evaluateNumberConversion=function(e){return Number(this._left.evaluate(e))};Vt.prototype._evaluateStringConversion=function(e){return String(this._left.evaluate(e))};Vt.prototype._evaluateRegExp=function(e){let t=this._value.evaluate(e),n="";l(this._left)&&(n=this._left.evaluate(e));let i;try{i=new RegExp(t,n)}catch(o){throw new ae(o)}return i};Vt.prototype._evaluateRegExpTest=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(!(t instanceof RegExp&&typeof n=="string"))throw new ae(`RegExp.test requires the first argument to be a RegExp and the second argument to be a string. Arguments are ${t} and ${n}.`);return t.test(n)};Vt.prototype._evaluateRegExpMatch=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(t instanceof RegExp&&typeof n=="string")return t.test(n);if(n instanceof RegExp&&typeof t=="string")return n.test(t);throw new ae(`Operator "=~" requires one RegExp argument and one string argument. Arguments are ${t} and ${n}.`)};Vt.prototype._evaluateRegExpNotMatch=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(t instanceof RegExp&&typeof n=="string")return!t.test(n);if(n instanceof RegExp&&typeof t=="string")return!n.test(t);throw new ae(`Operator "!~" requires one RegExp argument and one string argument. Arguments are ${t} and ${n}.`)};Vt.prototype._evaluateRegExpExec=function(e){let t=this._left.evaluate(e),n=this._right.evaluate(e);if(!(t instanceof RegExp&&typeof n=="string"))throw new ae(`RegExp.exec requires the first argument to be a RegExp and the second argument to be a string. Arguments are ${t} and ${n}.`);let i=t.exec(n);return l(i)?i[1]:null};Vt.prototype._evaluateToString=function(e){let t=this._left.evaluate(e);if(t instanceof RegExp||t instanceof U||t instanceof m||t instanceof se)return String(t);throw new ae(`Unexpected function call "${this._value}".`)};function Toe(e){let t=e._left,n=t.length;for(let a=0;a<n;++a)if(t[a]._type!==gt.LITERAL_NUMBER)return;let i=t[0]._value,o=t[1]._value,r=t[2]._value,s=n===4?t[3]._value:1;return D.fromHsl(i,o,r,s,y5)}function Soe(e){let t=e._left,n=t.length;for(let o=0;o<n;++o)if(t[o]._type!==gt.LITERAL_NUMBER)return;let i=y5;return i.red=t[0]._value/255,i.green=t[1]._value/255,i.blue=t[2]._value/255,i.alpha=n===4?t[3]._value:1,i}function ig(e){return e%1===0?e.toFixed(1):e.toString()}function GFe(e){let t=ig(e.red),n=ig(e.green),i=ig(e.blue);return`vec3(${t}, ${n}, ${i})`}function g5(e){let t=ig(e.red),n=ig(e.green),i=ig(e.blue),o=ig(e.alpha);return`vec4(${t}, ${n}, ${i}, ${o})`}function Coe(e,t,n,i){let o=e.length,r=new Array(o);for(let s=0;s<o;++s)r[s]=e[s].getShaderExpression(t,n,i);return r}function Voe(e,t){return l(t[e])?t[e]:Hm.NULL_SENTINEL}Hm.NULL_SENTINEL="czm_infinity";Vt.prototype.getShaderExpression=function(e,t,n){let i,o,r,s,a=this._type,c=this._value;l(this._left)&&(Array.isArray(this._left)?o=Coe(this._left,e,t,this):o=this._left.getShaderExpression(e,t,this)),l(this._right)&&(r=this._right.getShaderExpression(e,t,this)),l(this._test)&&(s=this._test.getShaderExpression(e,t,this)),Array.isArray(this._value)&&(c=Coe(this._value,e,t,this));let d,u,h;switch(a){case gt.VARIABLE:return e_(this)?void 0:Voe(c,e);case gt.UNARY:if(c==="Boolean")return`bool(${o})`;if(c==="Number")return`float(${o})`;if(c==="round")return`floor(${o} + 0.5)`;if(l(x5[c]))return`${c}(${o})`;if(c==="isNaN")return`(${o} != ${o})`;if(c==="isFinite")return`(abs(${o}) < czm_infinity)`;if(c==="String"||c==="isExactClass"||c==="isClass"||c==="getExactClassName")throw new ae(`Error generating style shader: "${c}" is not supported.`);return c+o;case gt.BINARY:return c==="%"?`mod(${o}, ${r})`:c==="==="?`(${o} == ${r})`:c==="!=="?`(${o} != ${r})`:c==="atan2"?`atan(${o}, ${r})`:l(_5[c])?`${c}(${o}, ${r})`:`(${o} ${c} ${r})`;case gt.TERNARY:if(l(Tz[c]))return`${c}(${o}, ${r}, ${s})`;break;case gt.CONDITIONAL:return`(${s} ? ${o} : ${r})`;case gt.MEMBER:return e_(this._left)?Voe(r,e):r==="r"||r==="x"||r==="0.0"?`${o}[0]`:r==="g"||r==="y"||r==="1.0"?`${o}[1]`:r==="b"||r==="z"||r==="2.0"?`${o}[2]`:r==="a"||r==="w"||r==="3.0"?`${o}[3]`:`${o}[int(${r})]`;case gt.FUNCTION_CALL:throw new ae(`Error generating style shader: "${c}" is not supported.`);case gt.ARRAY:if(c.length===4)return`vec4(${c[0]}, ${c[1]}, ${c[2]}, ${c[3]})`;if(c.length===3)return`vec3(${c[0]}, ${c[1]}, ${c[2]})`;if(c.length===2)return`vec2(${c[0]}, ${c[1]})`;throw new ae("Error generating style shader: Invalid array length. Array length should be 2, 3, or 4.");case gt.REGEX:throw new ae("Error generating style shader: Regular expressions are not supported.");case gt.VARIABLE_IN_STRING:throw new ae("Error generating style shader: Converting a variable to a string is not supported.");case gt.LITERAL_NULL:return Hm.NULL_SENTINEL;case gt.LITERAL_BOOLEAN:return c?"true":"false";case gt.LITERAL_NUMBER:return ig(c);case gt.LITERAL_STRING:if(l(n)&&n._type===gt.MEMBER&&(c==="r"||c==="g"||c==="b"||c==="a"||c==="x"||c==="y"||c==="z"||c==="w"||e_(n._left)))return c;if(i=D.fromCssColorString(c,y5),l(i))return GFe(i);throw new ae("Error generating style shader: String literals are not supported.");case gt.LITERAL_COLOR:if(d=o,c==="color"){if(l(d)){if(d.length>1){let p=d[0],g=d[1];return g!=="1.0"&&(t.translucent=!0),`vec4(${p}, ${g})`}}else return"vec4(1.0)";return`vec4(${d[0]}, 1.0)`}else{if(c==="rgb")return i=Soe(this),l(i)?g5(i):`vec4(${d[0]} / 255.0, ${d[1]} / 255.0, ${d[2]} / 255.0, 1.0)`;if(c==="rgba")return d[3]!=="1.0"&&(t.translucent=!0),i=Soe(this),l(i)?g5(i):`vec4(${d[0]} / 255.0, ${d[1]} / 255.0, ${d[2]} / 255.0, ${d[3]})`;if(c==="hsl")return i=Toe(this),l(i)?g5(i):`vec4(czm_HSLToRGB(vec3(${d[0]}, ${d[1]}, ${d[2]})), 1.0)`;if(c==="hsla")return i=Toe(this),l(i)?(i.alpha!==1&&(t.translucent=!0),g5(i)):(d[3]!=="1.0"&&(t.translucent=!0),`vec4(czm_HSLToRGB(vec3(${d[0]}, ${d[1]}, ${d[2]})), ${d[3]})`)}break;case gt.LITERAL_VECTOR:u=o.length,h=`${c}(`;for(let p=0;p<u;++p)h+=o[p],p<u-1&&(h+=", ");return h+=")",h;case gt.LITERAL_REGEX:throw new ae("Error generating style shader: Regular expressions are not supported.");case gt.LITERAL_UNDEFINED:return Hm.NULL_SENTINEL;case gt.BUILTIN_VARIABLE:if(c==="tiles3d_tileset_time")return c}};Vt.prototype.getVariables=function(e,t){let n,i,o,r=this._type,s=this._value;if(l(this._left))if(Array.isArray(this._left))for(n=this._left,i=n.length,o=0;o<i;++o)n[o].getVariables(e,this);else this._left.getVariables(e,this);if(l(this._right)&&this._right.getVariables(e,this),l(this._test)&&this._test.getVariables(e,this),Array.isArray(this._value))for(n=this._value,i=n.length,o=0;o<i;++o)n[o].getVariables(e,this);let a;switch(r){case gt.VARIABLE:e_(this)||e.push(s);break;case gt.VARIABLE_IN_STRING:for(a=FI.exec(s);a!==null;)e.push(a[1]),a=FI.exec(s);break;case gt.LITERAL_STRING:l(t)&&t._type===gt.MEMBER&&e_(t._left)&&e.push(s);break}};var Wu=Hm;function Kp(e){e=e??Y.EMPTY_OBJECT,this._batchTable=e.batchTable,this._batchIds=e.batchIds,this._positions=e.positions,this._vertexBatchIds=e.vertexBatchIds,this._indices=e.indices,this._indexCounts=e.indexCounts,this._indexOffsets=e.indexOffsets,this._batchedIndices=e.batchedIndices,this._boundingVolume=e.boundingVolume,this._boundingVolumes=e.boundingVolumes,this._center=e.center??m.ZERO,this._va=void 0,this._sp=void 0,this._spStencil=void 0,this._spPick=void 0,this._uniformMap=void 0,this._vaSwap=void 0,this._rsStencilDepthPass=void 0,this._rsStencilDepthPass3DTiles=void 0,this._rsColorPass=void 0,this._rsPickPass=void 0,this._rsWireframe=void 0,this._commands=[],this._commandsIgnoreShow=[],this._pickCommands=[],this._constantColor=D.clone(D.WHITE),this._highlightColor=this._constantColor,this._batchDirty=!0,this._pickCommandsDirty=!0,this._framesSinceLastRebatch=0,this._updatingAllCommands=!1,this._trianglesLength=this._indices.length/3,this._geometryByteLength=this._indices.byteLength+this._positions.byteLength+this._vertexBatchIds.byteLength,this.debugWireframe=!1,this._debugWireframe=this.debugWireframe,this._wireframeDirty=!1,this.forceRebatch=!1,this.classificationType=e.classificationType??Un.BOTH,this._vertexShaderSource=e._vertexShaderSource,this._fragmentShaderSource=e._fragmentShaderSource,this._attributeLocations=e._attributeLocations,this._uniformMap=e._uniformMap,this._pickId=e._pickId,this._modelMatrix=e._modelMatrix,this._boundingSphere=e._boundingSphere,this._batchIdLookUp={};let t=this._batchIds.length;for(let n=0;n<t;++n){let i=this._batchIds[n];this._batchIdLookUp[i]=n}}Object.defineProperties(Kp.prototype,{trianglesLength:{get:function(){return this._trianglesLength}},geometryByteLength:{get:function(){return this._geometryByteLength}}});var EFe={position:0,a_batchId:1};function IFe(e,t){if(l(e._va))return;let n=xt.createVertexBuffer({context:t,typedArray:e._positions,usage:Me.STATIC_DRAW}),i=xt.createVertexBuffer({context:t,typedArray:e._vertexBatchIds,usage:Me.STATIC_DRAW}),o=xt.createIndexBuffer({context:t,typedArray:e._indices,usage:Me.DYNAMIC_DRAW,indexDatatype:e._indices.BYTES_PER_ELEMENT===2?Ae.UNSIGNED_SHORT:Ae.UNSIGNED_INT}),r=[{index:0,vertexBuffer:n,componentDatatype:Q.fromTypedArray(e._positions),componentsPerAttribute:3},{index:1,vertexBuffer:i,componentDatatype:Q.fromTypedArray(e._vertexBatchIds),componentsPerAttribute:1}];e._va=new ni({context:t,attributes:r,indexBuffer:o}),t.webgl2&&(e._vaSwap=new ni({context:t,attributes:r,indexBuffer:xt.createIndexBuffer({context:t,sizeInBytes:o.sizeInBytes,usage:Me.DYNAMIC_DRAW,indexDatatype:o.indexDatatype})})),e._batchedPositions=void 0,e._transferrableBatchIds=void 0,e._vertexBatchIds=void 0}function XFe(e,t){if(l(e._sp))return;let n=e._batchTable,i=e._attributeLocations??EFe,o=e._pickId,r=e._vertexShaderSource,s=e._fragmentShaderSource;if(l(r)){e._sp=$t.fromCache({context:t,vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:i}),e._spStencil=e._sp,s=De.replaceMain(s,"czm_non_pick_main"),s=`${s}void main() { czm_non_pick_main(); out_FragColor = ${o}; } `,e._spPick=$t.fromCache({context:t,vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:i});return}let a=n.getVertexShaderCallback(!1,"a_batchId",void 0)(TC),c=n.getFragmentShaderCallback(!1,void 0,!0)(J0);o=n.getPickId();let d=new De({sources:[a]}),u=new De({defines:["VECTOR_TILE"],sources:[c]});e._sp=$t.fromCache({context:t,vertexShaderSource:d,fragmentShaderSource:u,attributeLocations:i}),d=new De({sources:[TC]}),u=new De({defines:["VECTOR_TILE"],sources:[J0]}),e._spStencil=$t.fromCache({context:t,vertexShaderSource:d,fragmentShaderSource:u,attributeLocations:i}),c=De.replaceMain(c,"czm_non_pick_main"),c=`${c} void main() { czm_non_pick_main(); out_FragColor = ${o}; } `;let h=new De({sources:[a]}),p=new De({defines:["VECTOR_TILE"],sources:[c]});e._spPick=$t.fromCache({context:t,vertexShaderSource:h,fragmentShaderSource:p,attributeLocations:i})}function Loe(e){let t=e?Dn.EQUAL:Dn.ALWAYS;return{colorMask:{red:!1,green:!1,blue:!1,alpha:!1},stencilTest:{enabled:!0,frontFunction:t,frontOperation:{fail:ht.KEEP,zFail:ht.DECREMENT_WRAP,zPass:ht.KEEP},backFunction:t,backOperation:{fail:ht.KEEP,zFail:ht.INCREMENT_WRAP,zPass:ht.KEEP},reference:Ut.CESIUM_3D_TILE_MASK,mask:Ut.CESIUM_3D_TILE_MASK},stencilMask:Ut.CLASSIFICATION_MASK,depthTest:{enabled:!0,func:cc.LESS_OR_EQUAL},depthMask:!1}}var WFe={stencilTest:{enabled:!0,frontFunction:Dn.NOT_EQUAL,frontOperation:{fail:ht.ZERO,zFail:ht.ZERO,zPass:ht.ZERO},backFunction:Dn.NOT_EQUAL,backOperation:{fail:ht.ZERO,zFail:ht.ZERO,zPass:ht.ZERO},reference:0,mask:Ut.CLASSIFICATION_MASK},stencilMask:Ut.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1,blending:un.PRE_MULTIPLIED_ALPHA_BLEND},PFe={stencilTest:{enabled:!0,frontFunction:Dn.NOT_EQUAL,frontOperation:{fail:ht.ZERO,zFail:ht.ZERO,zPass:ht.ZERO},backFunction:Dn.NOT_EQUAL,backOperation:{fail:ht.ZERO,zFail:ht.ZERO,zPass:ht.ZERO},reference:0,mask:Ut.CLASSIFICATION_MASK},stencilMask:Ut.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1};function vFe(e){l(e._rsStencilDepthPass)||(e._rsStencilDepthPass=Ue.fromCache(Loe(!1)),e._rsStencilDepthPass3DTiles=Ue.fromCache(Loe(!0)),e._rsColorPass=Ue.fromCache(WFe),e._rsPickPass=Ue.fromCache(PFe))}var t_=new F,Roe=new m;function wFe(e,t){if(l(e._uniformMap))return;let n={u_modifiedModelViewProjection:function(){let i=t.uniformState.view,o=t.uniformState.projection;return F.clone(i,t_),F.multiplyByPoint(t_,e._center,Roe),F.setTranslation(t_,Roe,t_),F.multiply(o,t_,t_),t_},u_highlightColor:function(){return e._highlightColor}};e._uniformMap=e._batchTable.getUniformMapCallback()(n)}function Sz(e,t,n,i,o,r,s){let a=e.constructor.BYTES_PER_ELEMENT,c=r.length;for(let d=0;d<c;++d){let u=r[d],h=s[u],p=i[h],g=o[h],f=new e.constructor(e.buffer,a*p,g);t.set(f,n),i[h]=n,n+=g}return n}function FFe(e,t){let n=e._indices,i=e._indexOffsets,o=e._indexCounts,r=e._batchIdLookUp,s=new n.constructor(n.length),a=t.pop(),c=[a],d=Sz(n,s,0,i,o,a.batchIds,r);for(a.offset=0,a.count=d;t.length>0;){let u=t.pop();if(D.equals(u.color,a.color))d=Sz(n,s,d,i,o,u.batchIds,r),a.batchIds=a.batchIds.concat(u.batchIds),a.count=d-a.offset;else{let h=d;d=Sz(n,s,d,i,o,u.batchIds,r),u.offset=h,u.count=d-h,c.push(u),a=u}}e._va.indexBuffer.copyFromArrayView(s),e._indices=s,e._batchedIndices=c}function Cz(e,t,n,i,o,r,s){let a=e.bytesPerIndex,c=r.length;for(let d=0;d<c;++d){let u=r[d],h=s[u],p=i[h],g=o[h];t.copyFromBuffer(e,p*a,n*a,g*a),i[h]=n,n+=g}return n}function AFe(e,t){let n=e._indexOffsets,i=e._indexCounts,o=e._batchIdLookUp,r=t.pop(),s=[r],a=e._va.indexBuffer,c=e._vaSwap.indexBuffer,d=Cz(a,c,0,n,i,r.batchIds,o);for(r.offset=0,r.count=d;t.length>0;){let h=t.pop();if(D.equals(h.color,r.color))d=Cz(a,c,d,n,i,h.batchIds,o),r.batchIds=r.batchIds.concat(h.batchIds),r.count=d-r.offset;else{let p=d;d=Cz(a,c,d,n,i,h.batchIds,o),h.offset=p,h.count=d-p,s.push(h),r=h}}let u=e._va;e._va=e._vaSwap,e._vaSwap=u,e._batchedIndices=s}function MFe(e,t){return t.color.toRgba()-e.color.toRgba()}function NFe(e,t){if(!e._batchDirty)return!1;let n=e._batchedIndices,i=n.length,o=!1,r={};for(let s=0;s<i;++s){let c=n[s].color.toRgba();if(l(r[c])){o=!0;break}else r[c]=!0}if(!o)return e._batchDirty=!1,!1;if(o&&!e.forceRebatch&&e._framesSinceLastRebatch<120){++e._framesSinceLastRebatch;return}return n.sort(MFe),t.webgl2?AFe(e,n):FFe(e,n),e._framesSinceLastRebatch=0,e._batchDirty=!1,e._pickCommandsDirty=!0,e._wireframeDirty=!0,!0}function kFe(e,t){let n=NFe(e,t),i=e._commands,o=e._batchedIndices,r=o.length,s=r*2;if(l(i)&&!n&&i.length===s)return;i.length=s;let a=e._va,c=e._sp,d=e._modelMatrix??F.IDENTITY,u=e._uniformMap,h=e._boundingVolume;for(let p=0;p<r;++p){let g=o[p].offset,f=o[p].count,y=i[p*2];l(y)||(y=i[p*2]=new $e({owner:e})),y.vertexArray=a,y.modelMatrix=d,y.offset=g,y.count=f,y.renderState=e._rsStencilDepthPass,y.shaderProgram=c,y.uniformMap=u,y.boundingVolume=h,y.cull=!1,y.pass=Ee.TERRAIN_CLASSIFICATION;let x=$e.shallowClone(y,y.derivedCommands.tileset);x.renderState=e._rsStencilDepthPass3DTiles,x.pass=Ee.CESIUM_3D_TILE_CLASSIFICATION,y.derivedCommands.tileset=x;let S=i[p*2+1];l(S)||(S=i[p*2+1]=new $e({owner:e})),S.vertexArray=a,S.modelMatrix=d,S.offset=g,S.count=f,S.renderState=e._rsColorPass,S.shaderProgram=c,S.uniformMap=u,S.boundingVolume=h,S.cull=!1,S.pass=Ee.TERRAIN_CLASSIFICATION;let C=$e.shallowClone(S,S.derivedCommands.tileset);C.pass=Ee.CESIUM_3D_TILE_CLASSIFICATION,S.derivedCommands.tileset=C}e._commandsDirty=!0}function UFe(e,t){if(e.classificationType===Un.TERRAIN||!t.invertClassification||l(e._commandsIgnoreShow)&&!e._commandsDirty)return;let n=e._commands,i=e._commandsIgnoreShow,o=e._spStencil,r=n.length,s=i.length=r/2,a=0;for(let c=0;c<s;++c){let d=i[c]=$e.shallowClone(n[a],i[c]);d.shaderProgram=o,d.pass=Ee.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW,a+=2}e._commandsDirty=!1}function DFe(e){if(!e._pickCommandsDirty)return;let t=e._indexOffsets.length,n=e._pickCommands;n.length=t*2;let i=e._va,o=e._spStencil,r=e._spPick,s=e._modelMatrix??F.IDENTITY,a=e._uniformMap;for(let c=0;c<t;++c){let d=e._indexOffsets[c],u=e._indexCounts[c],h=l(e._boundingVolumes)?e._boundingVolumes[c]:e.boundingVolume,p=n[c*2];l(p)||(p=n[c*2]=new $e({owner:e,pickOnly:!0})),p.vertexArray=i,p.modelMatrix=s,p.offset=d,p.count=u,p.renderState=e._rsStencilDepthPass,p.shaderProgram=o,p.uniformMap=a,p.boundingVolume=h,p.pass=Ee.TERRAIN_CLASSIFICATION;let g=$e.shallowClone(p,p.derivedCommands.tileset);g.renderState=e._rsStencilDepthPass3DTiles,g.pass=Ee.CESIUM_3D_TILE_CLASSIFICATION,p.derivedCommands.tileset=g;let f=n[c*2+1];l(f)||(f=n[c*2+1]=new $e({owner:e,pickOnly:!0})),f.vertexArray=i,f.modelMatrix=s,f.offset=d,f.count=u,f.renderState=e._rsPickPass,f.shaderProgram=r,f.uniformMap=a,f.boundingVolume=h,f.pass=Ee.TERRAIN_CLASSIFICATION;let y=$e.shallowClone(f,f.derivedCommands.tileset);y.pass=Ee.CESIUM_3D_TILE_CLASSIFICATION,f.derivedCommands.tileset=y}e._pickCommandsDirty=!1}Kp.prototype.createFeatures=function(e,t){let n=this._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o];t[r]=new Bs(e,r)}};Kp.prototype.applyDebugSettings=function(e,t){this._highlightColor=e?t:this._constantColor};function BFe(e,t){e._updatingAllCommands=!0;let n=e._batchIds,i=n.length,o;for(o=0;o<i;++o){let s=n[o],a=t[s];a.show=!0,a.color=D.WHITE}let r=e._batchedIndices;for(i=r.length,o=0;o<i;++o)r[o].color=D.clone(D.WHITE);e._updatingAllCommands=!1,e._batchDirty=!0}var OFe=new D,YFe=D.WHITE,zFe=!0,HFe=/\$/;Kp.prototype.applyStyle=function(e,t){if(!l(e)){BFe(this,t);return}let n=e.color,i=n instanceof Wu&&!HFe.test(n.expression);this._updatingAllCommands=i;let o=this._batchIds,r=o.length,s;for(s=0;s<r;++s){let a=o[s],c=t[a];c.color=l(e.color)?e.color.evaluateColor(c,OFe):YFe,c.show=l(e.show)?e.show.evaluate(c):zFe}if(i){let a=this._batchedIndices;for(r=a.length,s=0;s<r;++s)a[s].color=D.clone(D.WHITE);this._updatingAllCommands=!1,this._batchDirty=!0}};Kp.prototype.updateCommands=function(e,t){if(this._updatingAllCommands)return;let n=this._batchIdLookUp,i=n[e];if(!l(i))return;let o=this._indexOffsets,r=this._indexCounts,s=o[i],a=r[i],c=this._batchedIndices,d=c.length,u;for(u=0;u<d;++u){let y=c[u].offset,x=c[u].count;if(s>=y&&s<y+x)break}c.push(new bf({color:D.clone(t),offset:s,count:a,batchIds:[e]}));let h=[],p=[],g=c[u].batchIds,f=g.length;for(let y=0;y<f;++y){let x=g[y];if(x===e)continue;let S=n[x];o[S]<s?h.push(x):p.push(x)}p.length!==0&&c.push(new bf({color:D.clone(c[u].color),offset:s+a,count:c[u].offset+c[u].count-(s+a),batchIds:p})),h.length!==0?(c[u].count=s-c[u].offset,c[u].batchIds=h):c.splice(u,1),this._batchDirty=!0};function Zoe(e,t,n,i){let o=e.classificationType,r=o!==Un.CESIUM_3D_TILE,s=o!==Un.TERRAIN,a=t.commandList,c=n.length,d,u;for(u=0;u<c;++u)r&&(d=n[u],d.pass=Ee.TERRAIN_CLASSIFICATION,a.push(d)),s&&(d=n[u].derivedCommands.tileset,d.pass=Ee.CESIUM_3D_TILE_CLASSIFICATION,a.push(d));if(!(!t.invertClassification||!l(i)))for(c=i.length,u=0;u<c;++u)a.push(i[u])}function KFe(e,t){let n=e.commandList,i=t.length;for(let o=0;o<i;o+=2){let r=t[o+1];r.pass=Ee.OPAQUE,n.push(r)}}function JFe(e){let t=e.debugWireframe===e._debugWireframe;if(t=t&&!(e.debugWireframe&&e._wireframeDirty),t)return;l(e._rsWireframe)||(e._rsWireframe=Ue.fromCache({}));let n,i;e.debugWireframe?(n=e._rsWireframe,i=we.LINES):(n=e._rsColorPass,i=we.TRIANGLES);let o=e._commands,r=o.length;for(let s=0;s<r;s+=2){let a=o[s+1];a.renderState=n,a.primitiveType=i}e._debugWireframe=e.debugWireframe,e._wireframeDirty=!1}Kp.prototype.update=function(e){let t=e.context;IFe(this,t),XFe(this,t),vFe(this),wFe(this,t);let n=e.passes;n.render&&(kFe(this,t),UFe(this,e),JFe(this),this._debugWireframe?KFe(e,this._commands):Zoe(this,e,this._commands,this._commandsIgnoreShow)),n.pick&&(DFe(this),Zoe(this,e,this._pickCommands))};Kp.prototype.isDestroyed=function(){return!1};Kp.prototype.destroy=function(){return this._va=this._va&&this._va.destroy(),this._sp=this._sp&&this._sp.destroy(),this._spPick=this._spPick&&this._spPick.destroy(),this._vaSwap=this._vaSwap&&this._vaSwap.destroy(),me(this)};var n_=Kp;function Sd(e){this._boxes=e.boxes,this._boxBatchIds=e.boxBatchIds,this._cylinders=e.cylinders,this._cylinderBatchIds=e.cylinderBatchIds,this._ellipsoids=e.ellipsoids,this._ellipsoidBatchIds=e.ellipsoidBatchIds,this._spheres=e.spheres,this._sphereBatchIds=e.sphereBatchIds,this._modelMatrix=e.modelMatrix,this._batchTable=e.batchTable,this._boundingVolume=e.boundingVolume,this._center=e.center,l(this._center)||(l(this._boundingVolume)?this._center=m.clone(this._boundingVolume.center):this._center=m.clone(m.ZERO)),this._boundingVolumes=void 0,this._batchedIndices=void 0,this._indices=void 0,this._indexOffsets=void 0,this._indexCounts=void 0,this._positions=void 0,this._vertexBatchIds=void 0,this._batchIds=void 0,this._batchTableColors=void 0,this._packedBuffer=void 0,this._ready=!1,this._promise=void 0,this._error=void 0,this._verticesPromise=void 0,this._primitive=void 0,this.debugWireframe=!1,this.forceRebatch=!1,this.classificationType=Un.BOTH}Object.defineProperties(Sd.prototype,{trianglesLength:{get:function(){return l(this._primitive)?this._primitive.trianglesLength:0}},geometryByteLength:{get:function(){return l(this._primitive)?this._primitive.geometryByteLength:0}},ready:{get:function(){return this._ready}}});Sd.packedBoxLength=F.packedLength+m.packedLength;Sd.packedCylinderLength=F.packedLength+2;Sd.packedEllipsoidLength=F.packedLength+m.packedLength;Sd.packedSphereLength=m.packedLength+1;function QFe(e){let t=new Float64Array(F.packedLength+m.packedLength),n=0;return m.pack(e._center,t,n),n+=m.packedLength,F.pack(e._modelMatrix,t,n),t}function jFe(e,t){let n=0,i=t[n++],o=t[n++],r=e._boundingVolumes=new Array(o);for(let c=0;c<o;++c)r[c]=le.unpack(t,n),n+=le.packedLength;let s=t[n++],a=e._batchedIndices=new Array(s);for(let c=0;c<s;++c){let d=D.unpack(t,n);n+=D.packedLength;let u=t[n++],h=t[n++],p=t[n++],g=new Array(p);for(let f=0;f<p;++f)g[f]=t[n++];a[c]=new bf({color:d,offset:u,count:h,batchIds:g})}return i}var qFe=new xi("createVectorTileGeometries",5),$Fe=new D;function e9e(e){if(!l(e._primitive)&&!l(e._verticesPromise)){let t=e._boxes,n=e._boxBatchIds,i=e._cylinders,o=e._cylinderBatchIds,r=e._ellipsoids,s=e._ellipsoidBatchIds,a=e._spheres,c=e._sphereBatchIds,d=e._batchTableColors,u=e._packedBuffer;if(!l(d)){let f=0;l(e._boxes)&&(t=e._boxes=t.slice(),n=e._boxBatchIds=n.slice(),f+=n.length),l(e._cylinders)&&(i=e._cylinders=i.slice(),o=e._cylinderBatchIds=o.slice(),f+=o.length),l(e._ellipsoids)&&(r=e._ellipsoids=r.slice(),s=e._ellipsoidBatchIds=s.slice(),f+=s.length),l(e._spheres)&&(a=e._sphere=a.slice(),c=e._sphereBatchIds=c.slice(),f+=c.length),d=e._batchTableColors=new Uint32Array(f);let y=e._batchTable;for(let x=0;x<f;++x){let S=y.getColor(x,$Fe);d[x]=S.toRgba()}u=e._packedBuffer=QFe(e)}let h=[];l(t)&&h.push(t.buffer,n.buffer),l(i)&&h.push(i.buffer,o.buffer),l(r)&&h.push(r.buffer,s.buffer),l(a)&&h.push(a.buffer,c.buffer),h.push(d.buffer,u.buffer);let p={boxes:l(t)?t.buffer:void 0,boxBatchIds:l(t)?n.buffer:void 0,cylinders:l(i)?i.buffer:void 0,cylinderBatchIds:l(i)?o.buffer:void 0,ellipsoids:l(r)?r.buffer:void 0,ellipsoidBatchIds:l(r)?s.buffer:void 0,spheres:l(a)?a.buffer:void 0,sphereBatchIds:l(a)?c.buffer:void 0,batchTableColors:d.buffer,packedBuffer:u.buffer},g=e._verticesPromise=qFe.scheduleTask(p,h);return l(g)?g.then(function(f){if(e.isDestroyed())return;let y=new Float64Array(f.packedBuffer);jFe(e,y)===2?e._indices=new Uint16Array(f.indices):e._indices=new Uint32Array(f.indices),e._indexOffsets=new Uint32Array(f.indexOffsets),e._indexCounts=new Uint32Array(f.indexCounts),e._positions=new Float32Array(f.positions),e._vertexBatchIds=new Uint16Array(f.vertexBatchIds),e._batchIds=new Uint16Array(f.batchIds),t9e(e),e._ready=!0}).catch(f=>{e.isDestroyed()||(e._error=f)}):void 0}}function t9e(e){l(e._primitive)||(e._primitive=new n_({batchTable:e._batchTable,positions:e._positions,batchIds:e._batchIds,vertexBatchIds:e._vertexBatchIds,indices:e._indices,indexOffsets:e._indexOffsets,indexCounts:e._indexCounts,batchedIndices:e._batchedIndices,boundingVolume:e._boundingVolume,boundingVolumes:e._boundingVolumes,center:e._center,pickObject:e._pickObject??e}),e._boxes=void 0,e._boxBatchIds=void 0,e._cylinders=void 0,e._cylinderBatchIds=void 0,e._ellipsoids=void 0,e._ellipsoidBatchIds=void 0,e._spheres=void 0,e._sphereBatchIds=void 0,e._center=void 0,e._modelMatrix=void 0,e._batchTable=void 0,e._boundingVolume=void 0,e._boundingVolumes=void 0,e._batchedIndices=void 0,e._indices=void 0,e._indexOffsets=void 0,e._indexCounts=void 0,e._positions=void 0,e._vertexBatchIds=void 0,e._batchIds=void 0,e._batchTableColors=void 0,e._packedBuffer=void 0,e._verticesPromise=void 0)}Sd.prototype.createFeatures=function(e,t){this._primitive.createFeatures(e,t)};Sd.prototype.applyDebugSettings=function(e,t){this._primitive.applyDebugSettings(e,t)};Sd.prototype.applyStyle=function(e,t){this._primitive.applyStyle(e,t)};Sd.prototype.updateCommands=function(e,t){this._primitive.updateCommands(e,t)};Sd.prototype.update=function(e){if(!this._ready){if(l(this._promise)||(this._promise=e9e(this)),l(this._error)){let t=this._error;throw this._error=void 0,t}return}this._primitive.debugWireframe=this.debugWireframe,this._primitive.forceRebatch=this.forceRebatch,this._primitive.classificationType=this.classificationType,this._primitive.update(e)};Sd.prototype.isDestroyed=function(){return!1};Sd.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),me(this)};var Jp=Sd;function gf(e,t,n,i,o){this._tileset=e,this._tile=t,this._resource=n,this._geometries=void 0,this._metadata=void 0,this._batchTable=void 0,this._features=void 0,this.featurePropertiesDirty=!1,this._group=void 0,this._ready=!1,o9e(this,i,o)}Object.defineProperties(gf.prototype,{featuresLength:{get:function(){return l(this._batchTable)?this._batchTable.featuresLength:0}},pointsLength:{get:function(){return 0}},trianglesLength:{get:function(){return l(this._geometries)?this._geometries.trianglesLength:0}},geometryByteLength:{get:function(){return l(this._geometries)?this._geometries.geometryByteLength:0}},texturesByteLength:{get:function(){return 0}},batchTableByteLength:{get:function(){return l(this._batchTable)?this._batchTable.batchTableByteLength:0}},innerContents:{get:function(){}},ready:{get:function(){return this._ready}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){return this._resource.getUrlComponent(!0)}},metadata:{get:function(){return this._metadata},set:function(e){this._metadata=e}},batchTable:{get:function(){return this._batchTable}},group:{get:function(){return this._group},set:function(e){this._group=e}}});function n9e(e){return function(t,n){l(e._geometries)&&e._geometries.updateCommands(t,n)}}function i9e(e,t){let n,i,o,r,s,a=e.BOXES_LENGTH??0,c=e.CYLINDERS_LENGTH??0,d=e.ELLIPSOIDS_LENGTH??0,u=e.SPHERES_LENGTH??0;if(a>0&&l(e.BOX_BATCH_IDS)){let f=t.byteOffset+e.BOX_BATCH_IDS.byteOffset;n=new Uint16Array(t.buffer,f,a)}if(c>0&&l(e.CYLINDER_BATCH_IDS)){let f=t.byteOffset+e.CYLINDER_BATCH_IDS.byteOffset;i=new Uint16Array(t.buffer,f,c)}if(d>0&&l(e.ELLIPSOID_BATCH_IDS)){let f=t.byteOffset+e.ELLIPSOID_BATCH_IDS.byteOffset;o=new Uint16Array(t.buffer,f,d)}if(u>0&&l(e.SPHERE_BATCH_IDS)){let f=t.byteOffset+e.SPHERE_BATCH_IDS.byteOffset;r=new Uint16Array(t.buffer,f,u)}let h=l(n)||l(i)||l(o)||l(r),p=a>0&&!l(n)||c>0&&!l(i)||d>0&&!l(o)||u>0&&!l(r);if(h&&p)throw new ae("If one group of batch ids is defined, then all batch ids must be defined");if(!l(n)&&!l(i)&&!l(o)&&!l(r)){let f=0;if(!l(n)&&a>0)for(n=new Uint16Array(a),s=0;s<a;++s)n[s]=f++;if(!l(i)&&c>0)for(i=new Uint16Array(c),s=0;s<c;++s)i[s]=f++;if(!l(o)&&d>0)for(o=new Uint16Array(d),s=0;s<d;++s)o[s]=f++;if(!l(r)&&u>0)for(r=new Uint16Array(u),s=0;s<u;++s)r[s]=f++}return{boxes:n,cylinders:i,ellipsoids:o,spheres:r}}var i_=Uint32Array.BYTES_PER_ELEMENT;function o9e(e,t,n){n=n??0;let i=new Uint8Array(t),o=new DataView(t);n+=i_;let r=o.getUint32(n,!0);if(r!==1)throw new ae(`Only Geometry tile version 1 is supported. Version ${r} is not.`);n+=i_;let s=o.getUint32(n,!0);if(n+=i_,s===0){e._ready=!0;return}let a=o.getUint32(n,!0);if(n+=i_,a===0)throw new ae("Feature table must have a byte length greater than zero");let c=o.getUint32(n,!0);n+=i_;let d=o.getUint32(n,!0);n+=i_;let u=o.getUint32(n,!0);n+=i_;let h=qo(i,n,a);n+=a;let p=new Uint8Array(t,n,c);n+=c;let g,f;d>0&&(g=qo(i,n,d),n+=d,u>0&&(f=new Uint8Array(t,n,u),f=new Uint8Array(f)));let y=h.BOXES_LENGTH??0,x=h.CYLINDERS_LENGTH??0,S=h.ELLIPSOIDS_LENGTH??0,C=h.SPHERES_LENGTH??0,V=y+x+S+C,L=new Hp(e,V,g,f,n9e(e));if(e._batchTable=L,V===0)return;let Z=e.tile.computedTransform,E;l(h.RTC_CENTER)&&(E=m.unpack(h.RTC_CENTER),F.multiplyByPoint(Z,E,E));let P=i9e(h,p);if(y>0||x>0||S>0||C>0){let W,v,A,b;if(y>0){let R=p.byteOffset+h.BOXES.byteOffset;W=new Float32Array(p.buffer,R,Jp.packedBoxLength*y)}if(x>0){let R=p.byteOffset+h.CYLINDERS.byteOffset;v=new Float32Array(p.buffer,R,Jp.packedCylinderLength*x)}if(S>0){let R=p.byteOffset+h.ELLIPSOIDS.byteOffset;A=new Float32Array(p.buffer,R,Jp.packedEllipsoidLength*S)}if(C>0){let R=p.byteOffset+h.SPHERES.byteOffset;b=new Float32Array(p.buffer,R,Jp.packedSphereLength*C)}return e._geometries=new Jp({boxes:W,boxBatchIds:P.boxes,cylinders:v,cylinderBatchIds:P.cylinders,ellipsoids:A,ellipsoidBatchIds:P.ellipsoids,spheres:b,sphereBatchIds:P.spheres,center:E,modelMatrix:Z,batchTable:L,boundingVolume:e.tile.boundingVolume.boundingVolume}),e}return Promise.resolve(e)}function Goe(e){let t=e.featuresLength;if(!l(e._features)&&t>0){let n=new Array(t);l(e._geometries)&&e._geometries.createFeatures(e,n),e._features=n}}gf.prototype.hasProperty=function(e,t){return this._batchTable.hasProperty(e,t)};gf.prototype.getFeature=function(e){return Goe(this),this._features[e]};gf.prototype.applyDebugSettings=function(e,t){l(this._geometries)&&this._geometries.applyDebugSettings(e,t)};gf.prototype.applyStyle=function(e){Goe(this),l(this._geometries)&&this._geometries.applyStyle(e,this._features)};gf.prototype.update=function(e,t){l(this._geometries)&&(this._geometries.classificationType=this._tileset.classificationType,this._geometries.debugWireframe=this._tileset.debugWireframe,this._geometries.update(t)),l(this._batchTable)&&this._geometries.ready&&(this._batchTable.update(e,t),this._ready=!0)};gf.prototype.pick=function(e,t,n){};gf.prototype.isDestroyed=function(){return!1};gf.prototype.destroy=function(){return this._geometries=this._geometries&&this._geometries.destroy(),this._batchTable=this._batchTable&&this._batchTable.destroy(),me(this)};var AI=gf;var Sfn=_(T(),1);var Hrn=_(T(),1);var Vz={};Vz.encode2D=function(e,t,n){let i=Math.pow(2,e),o={x:t,y:n},r,s,a,c=BigInt(0);for(a=i/2;a>0;a/=2)r=(o.x&a)>0?1:0,s=(o.y&a)>0?1:0,c+=BigInt((3*r^s)*a*a),Eoe(i,o,r,s);return c};Vz.decode2D=function(e,t){let n=Math.pow(2,e),i={x:0,y:0},o,r,s,a;for(s=1,a=t;s<n;s*=2)o=1&Number(a/BigInt(2)),r=1&Number(a^BigInt(o)),Eoe(s,i,o,r),i.x+=s*o,i.y+=s*r,a/=BigInt(4);return[i.x,i.y]};function Eoe(e,t,n,i){if(i!==0)return;n===1&&(t.x=e-1-t.x,t.y=e-1-t.y);let o=t.x;t.x=t.y,t.y=o}var SC=Vz;var esn=_(T(),1);var o_=30,r9e=1<<o_,s9e=1<<o_+1>>>0,Lz=2*o_+1,og=4,Woe=[],Poe=[],a9e=[[0,1,3,2],[0,2,3,1],[3,2,0,1],[3,1,0,2]],rg=1,CC=2,S5=[rg,0,0,rg|CC];function qr(e){if(!Bt.supportsBigInt())throw new ae("S2 required BigInt support");this._cellId=e,this._level=qr.getLevel(e)}qr.fromToken=function(e){return new qr(qr.getIdFromToken(e))};qr.isValidId=function(e){return!(e<=0||e>>BigInt(Lz)>5||!(e&~e+BigInt(1)&BigInt("0x1555555555555555")))};qr.isValidToken=function(e){return/^[0-9a-fA-F]{1,16}$/.test(e)?qr.isValidId(qr.getIdFromToken(e)):!1};qr.getIdFromToken=function(e){return BigInt("0x"+e+"0".repeat(16-e.length))};qr.getTokenFromId=function(e){let t=Math.floor(g9e(e)/4),n=e.toString(16).replace(/0*$/,"");return Array(17-t-n.length).join("0")+n};qr.getLevel=function(e){let t=0;for(;e!==BigInt(0)&&!(e&BigInt(1));)t++,e=e>>BigInt(1);return o_-(t>>1)};qr.prototype.getChild=function(e){let t=Foe(this._cellId)>>BigInt(2),n=this._cellId+BigInt(2*e+1-4)*t;return new qr(n)};qr.prototype.getParent=function(){let e=Foe(this._cellId)<<BigInt(2);return new qr(this._cellId&~e+BigInt(1)|e)};qr.prototype.getParentAtLevel=function(e){let t=p9e(e);return new qr(this._cellId&-t|t)};qr.prototype.getCenter=function(e){e=e??ne.WGS84;let t=c9e(this._cellId,this._level);t=m.normalize(t,t);let n=new he.fromCartesian(t,ne.UNIT_SPHERE);return he.toCartesian(n,e,new m)};qr.prototype.getVertex=function(e,t){t=t??ne.WGS84;let n=l9e(this._cellId,this._level,e);n=m.normalize(n,n);let i=new he.fromCartesian(n,ne.UNIT_SPHERE);return he.toCartesian(i,t,new m)};qr.fromFacePositionLevel=function(e,t,n){let i=(e<4?"0":"")+(e<2?"0":"")+e.toString(2),o=t.toString(2),r=Array(2*n-o.length+1).join("0"),s=Array(Lz-2*n).join("0"),a=BigInt(`0b${i}${r}${o}1${s}`);return new qr(a)};function c9e(e,t){let n=d9e(e,t);return u9e(n[0],n[1],n[2])}function l9e(e,t,n){let i=voe(e,t),o=m9e([i[1],i[2]],t),r=n>>1&1;return woe(i[0],o[0][r^n&1],o[1][r])}function d9e(e,t){let n=voe(e),i=n[0],o=n[1],r=n[2],s=t===30,a=!s&&(BigInt(o)^e>>BigInt(2))&BigInt(1),c=s?1:a?2:0,d=(o<<1)+c,u=(r<<1)+c;return[i,d,u]}function voe(e){Woe.length===0&&f9e();let t=Number(e>>BigInt(Lz)),n=t&rg,i=(1<<og)-1,o=0,r=0;for(let s=7;s>=0;s--){let c=(1<<2*(s===7?o_-7*og:og))-1;n+=Number(e>>BigInt(s*2*og+1)&BigInt(c))<<2,n=Poe[n];let d=s*og;o+=n>>og+2<<d,r+=(n>>2&i)<<d,n&=rg|CC}return[t,o,r]}function u9e(e,t,n){let i=Ioe(t),o=Ioe(n),r=C5(i),s=C5(o);return woe(e,r,s)}function woe(e,t,n){switch(e){case 0:return new m(1,t,n);case 1:return new m(-t,1,n);case 2:return new m(-t,-n,1);case 3:return new m(-1,-n,-t);case 4:return new m(n,-1,-t);default:return new m(n,t,-1)}}function C5(e){return e>=.5?1/3*(4*e*e-1):1/3*(1-4*(1-e)*(1-e))}function Ioe(e){return 1/s9e*e}function m9e(e,t){let n=[[],[]],i=h9e(t);for(let o=0;o<2;++o){let r=e[o]&-i,s=r+i;n[o][0]=C5(Xoe(r)),n[o][1]=C5(Xoe(s))}return n}function h9e(e){return 1<<o_-e>>>0}function Xoe(e){return 1/r9e*e}function sg(e,t,n,i,o,r){if(e===og){let s=(t<<og)+n;Woe[(s<<2)+i]=(o<<2)+r,Poe[(o<<2)+i]=(s<<2)+r}else{e++,t<<=1,n<<=1,o<<=2;let s=a9e[r];sg(e,t+(s[0]>>1),n+(s[0]&1),i,o,r^S5[0]),sg(e,t+(s[1]>>1),n+(s[1]&1),i,o+1,r^S5[1]),sg(e,t+(s[2]>>1),n+(s[2]&1),i,o+2,r^S5[2]),sg(e,t+(s[3]>>1),n+(s[3]&1),i,o+3,r^S5[3])}}function f9e(){sg(0,0,0,0,0,0),sg(0,0,0,rg,0,rg),sg(0,0,0,CC,0,CC),sg(0,0,0,rg|CC,0,rg|CC)}function Foe(e){return e&~e+BigInt(1)}function p9e(e){return BigInt(1)<<BigInt(2*(o_-e))}var b9e=[64,0,1,39,2,15,40,23,3,12,16,59,41,19,24,54,4,64,13,10,17,62,60,28,42,30,20,51,25,44,55,47,5,32,65,38,14,22,11,58,18,53,63,9,61,27,29,50,43,46,31,37,21,57,52,8,26,49,45,36,56,7,48,35,6,34,33,0];function g9e(e){return b9e[(-e&e)%BigInt(67)]}var Qp=qr;var tfn=_(T(),1);var isn=_(T(),1);function y9e(e,t){return l(e)&&l(e.extensions)&&l(e.extensions[t])}var ri=y9e;var asn=_(T(),1);function Rz(e){let t=e.lengthBits,n=e.availableCount,i=e.constant,o=e.bitstream;if(l(i))n=t;else{let r=Math.ceil(t/8);if(o.length!==r)throw new ae(`Availability bitstream must be exactly ${r} bytes long to store ${t} bits. Actual bitstream was ${o.length} bytes long.`);let s=e.computeAvailableCountEnabled??!1;!l(n)&&s&&(n=x9e(o,t))}this._lengthBits=t,this._availableCount=n,this._constant=i,this._bitstream=o}function x9e(e,t){let n=0;for(let i=0;i<t;i++){let o=i>>3,r=i%8;n+=e[o]>>r&1}return n}Object.defineProperties(Rz.prototype,{lengthBits:{get:function(){return this._lengthBits}},availableCount:{get:function(){return this._availableCount}}});Rz.prototype.getBit=function(e){if(l(this._constant))return this._constant;let t=e>>3,n=e%8;return(this._bitstream[t]>>n&1)===1};var VC=Rz;var dsn=_(T(),1);function jp(e){e=e??Y.EMPTY_OBJECT;let t=e.metadataTable,n=e.class,i=e.entityId,o=e.propertyTableJson;this._class=n,this._metadataTable=t,this._entityId=i,this._extensions=o.extensions,this._extras=o.extras}Object.defineProperties(jp.prototype,{class:{get:function(){return this._class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});jp.prototype.hasProperty=function(e){return this._metadataTable.hasProperty(e)};jp.prototype.hasPropertyBySemantic=function(e){return this._metadataTable.hasPropertyBySemantic(e)};jp.prototype.getPropertyIds=function(e){return this._metadataTable.getPropertyIds(e)};jp.prototype.getProperty=function(e){return this._metadataTable.getProperty(this._entityId,e)};jp.prototype.setProperty=function(e,t){return this._metadataTable.setProperty(this._entityId,e,t)};jp.prototype.getPropertyBySemantic=function(e){return this._metadataTable.getPropertyBySemantic(this._entityId,e)};jp.prototype.setPropertyBySemantic=function(e,t){return this._metadataTable.setPropertyBySemantic(this._entityId,e,t)};var LC=jp;var msn=_(T(),1);var V5={QUADTREE:"QUADTREE",OCTREE:"OCTREE"};V5.getBranchingFactor=function(e){switch(e){case V5.OCTREE:return 8;case V5.QUADTREE:return 4}};var $r=Object.freeze(V5);var Ssn=_(T(),1);var gsn=_(T(),1);function fa(){}Object.defineProperties(fa.prototype,{class:{get:function(){pe.throwInstantiationError()}}});fa.prototype.hasProperty=function(e){pe.throwInstantiationError()};fa.prototype.hasPropertyBySemantic=function(e){pe.throwInstantiationError()};fa.prototype.getPropertyIds=function(e){pe.throwInstantiationError()};fa.prototype.getProperty=function(e){pe.throwInstantiationError()};fa.prototype.setProperty=function(e,t){pe.throwInstantiationError()};fa.prototype.getPropertyBySemantic=function(e){pe.throwInstantiationError()};fa.prototype.setPropertyBySemantic=function(e,t){pe.throwInstantiationError()};fa.hasProperty=function(e,t,n){if(l(t[e]))return!0;let i=n.properties;if(!l(i))return!1;let o=i[e];return!!(l(o)&&l(o.default))};fa.hasPropertyBySemantic=function(e,t,n){let i=n.propertiesBySemantic;if(!l(i))return!1;let o=i[e];return l(o)};fa.getPropertyIds=function(e,t,n){n=l(n)?n:[],n.length=0;for(let o in e)e.hasOwnProperty(o)&&l(e[o])&&n.push(o);let i=t.properties;if(l(i))for(let o in i)i.hasOwnProperty(o)&&!l(e[o])&&l(i[o].default)&&n.push(o);return n};fa.getProperty=function(e,t,n){let i=n.properties[e],o=t[e];Array.isArray(o)&&(o=o.slice());let r=!0;if(o=i.handleNoData(o),!l(o)&&l(i.default))return o=Ye(i.default,!0),i.unpackVectorAndMatrixTypes(o,r);if(l(o))return o=i.normalize(o),o=i.applyValueTransform(o),i.unpackVectorAndMatrixTypes(o,r)};fa.setProperty=function(e,t,n,i){if(!l(n[e]))return!1;Array.isArray(t)&&(t=t.slice());let o,r=i.properties;return l(r)&&(o=r[e]),l(o)&&(t=o.packVectorAndMatrixTypes(t,!0),t=o.unapplyValueTransform(t),t=o.unnormalize(t)),n[e]=t,!0};fa.getPropertyBySemantic=function(e,t,n){let i=n.propertiesBySemantic;if(!l(i))return;let o=i[e];if(l(o))return fa.getProperty(o.id,t,n)};fa.setPropertyBySemantic=function(e,t,n,i){let o=i.propertiesBySemantic;if(!l(o))return!1;let r=i.propertiesBySemantic[e];return l(r)?fa.setProperty(r.id,t,n,i):!1};var Nn=fa;function qp(e){e=e??Y.EMPTY_OBJECT;let t=e.subtreeMetadata,n=e.class,i=l(t.properties)?t.properties:{};this._class=n,this._properties=i,this._extras=t.extras,this._extensions=t.extensions}Object.defineProperties(qp.prototype,{class:{get:function(){return this._class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});qp.prototype.hasProperty=function(e){return Nn.hasProperty(e,this._properties,this._class)};qp.prototype.hasPropertyBySemantic=function(e){return Nn.hasPropertyBySemantic(e,this._properties,this._class)};qp.prototype.getPropertyIds=function(e){return Nn.getPropertyIds(this._properties,this._class,e)};qp.prototype.getProperty=function(e){return Nn.getProperty(e,this._properties,this._class)};qp.prototype.setProperty=function(e,t){return Nn.setProperty(e,t,this._properties,this._class)};qp.prototype.getPropertyBySemantic=function(e){return Nn.getPropertyBySemantic(e,this._properties,this._class)};qp.prototype.setPropertyBySemantic=function(e,t){return Nn.setPropertyBySemantic(e,t,this._properties,this._class)};var MI=qp;var han=_(T(),1);var san=_(T(),1);var Zsn=_(T(),1);var At={INT8:"INT8",UINT8:"UINT8",INT16:"INT16",UINT16:"UINT16",INT32:"INT32",UINT32:"UINT32",INT64:"INT64",UINT64:"UINT64",FLOAT32:"FLOAT32",FLOAT64:"FLOAT64"};At.getMinimum=function(e){switch(e){case At.INT8:return-128;case At.UINT8:return 0;case At.INT16:return-32768;case At.UINT16:return 0;case At.INT32:return-2147483648;case At.UINT32:return 0;case At.INT64:return Bt.supportsBigInt()?BigInt("-9223372036854775808"):-Math.pow(2,63);case At.UINT64:return Bt.supportsBigInt()?BigInt(0):0;case At.FLOAT32:return-34028234663852886e22;case At.FLOAT64:return-Number.MAX_VALUE}};At.getMaximum=function(e){switch(e){case At.INT8:return 127;case At.UINT8:return 255;case At.INT16:return 32767;case At.UINT16:return 65535;case At.INT32:return 2147483647;case At.UINT32:return 4294967295;case At.INT64:return Bt.supportsBigInt()?BigInt("9223372036854775807"):Math.pow(2,63)-1;case At.UINT64:return Bt.supportsBigInt()?BigInt("18446744073709551615"):Math.pow(2,64)-1;case At.FLOAT32:return 34028234663852886e22;case At.FLOAT64:return Number.MAX_VALUE}};At.isIntegerType=function(e){switch(e){case At.INT8:case At.UINT8:case At.INT16:case At.UINT16:case At.INT32:case At.UINT32:case At.INT64:case At.UINT64:return!0;default:return!1}};At.isUnsignedIntegerType=function(e){switch(e){case At.UINT8:case At.UINT16:case At.UINT32:case At.UINT64:return!0;default:return!1}};At.isVectorCompatible=function(e){switch(e){case At.INT8:case At.UINT8:case At.INT16:case At.UINT16:case At.INT32:case At.UINT32:case At.FLOAT32:case At.FLOAT64:return!0;default:return!1}};At.normalize=function(e,t){return Math.max(Number(e)/Number(At.getMaximum(t)),-1)};At.unnormalize=function(e,t){let n=At.getMaximum(t),i=At.isUnsignedIntegerType(t)?0:-n;return e=X.sign(e)*Math.round(Math.abs(e)*Number(n)),(t===At.INT64||t===At.UINT64)&&Bt.supportsBigInt()&&(e=BigInt(e)),e>n?n:e<i?i:e};At.applyValueTransform=function(e,t,n){return n*e+t};At.unapplyValueTransform=function(e,t,n){return n===0?0:(e-t)/n};At.getSizeInBytes=function(e){switch(e){case At.INT8:case At.UINT8:return 1;case At.INT16:case At.UINT16:return 2;case At.INT32:case At.UINT32:return 4;case At.INT64:case At.UINT64:return 8;case At.FLOAT32:return 4;case At.FLOAT64:return 8}};At.fromComponentDatatype=function(e){switch(e){case Q.BYTE:return At.INT8;case Q.UNSIGNED_BYTE:return At.UINT8;case Q.SHORT:return At.INT16;case Q.UNSIGNED_SHORT:return At.UINT16;case Q.INT:return At.INT32;case Q.UNSIGNED_INT:return At.UINT32;case Q.FLOAT:return At.FLOAT32;case Q.DOUBLE:return At.FLOAT64}};At.toComponentDatatype=function(e){switch(e){case At.INT8:return Q.BYTE;case At.UINT8:return Q.UNSIGNED_BYTE;case At.INT16:return Q.SHORT;case At.UINT16:return Q.UNSIGNED_SHORT;case At.INT32:return Q.INT;case At.UINT32:return Q.UNSIGNED_INT;case At.FLOAT32:return Q.FLOAT;case At.FLOAT64:return Q.DOUBLE}};var Ft=Object.freeze(At);var Ksn=_(T(),1);var wsn=_(T(),1);var No={SCALAR:"SCALAR",VEC2:"VEC2",VEC3:"VEC3",VEC4:"VEC4",MAT2:"MAT2",MAT3:"MAT3",MAT4:"MAT4",BOOLEAN:"BOOLEAN",STRING:"STRING",ENUM:"ENUM"};No.isVectorType=function(e){switch(e){case No.VEC2:case No.VEC3:case No.VEC4:return!0;default:return!1}};No.isMatrixType=function(e){switch(e){case No.MAT2:case No.MAT3:case No.MAT4:return!0;default:return!1}};No.getComponentCount=function(e){switch(e){case No.SCALAR:case No.STRING:case No.ENUM:case No.BOOLEAN:return 1;case No.VEC2:return 2;case No.VEC3:return 3;case No.VEC4:return 4;case No.MAT2:return 4;case No.MAT3:return 9;case No.MAT4:return 16}};No.getMathType=function(e){switch(e){case No.VEC2:return U;case No.VEC3:return m;case No.VEC4:return se;case No.MAT2:return Ii;case No.MAT3:return $;case No.MAT4:return F;default:return}};var ct=Object.freeze(No);function Aa(e){e=e??Y.EMPTY_OBJECT;let t=e.id,n=e.type,i=e.componentType,o=e.enumType,r=l(i)&&Ft.isIntegerType(i)&&(e.normalized??!1);this._id=t,this._name=e.name,this._description=e.description,this._semantic=e.semantic,this._isLegacyExtension=e.isLegacyExtension,this._type=n,this._componentType=i,this._enumType=o,this._valueType=l(o)?o.valueType:i,this._isArray=e.isArray??!1,this._isVariableLengthArray=e.isVariableLengthArray??!1,this._arrayLength=e.arrayLength,this._min=Ye(e.min,!0),this._max=Ye(e.max,!0),this._normalized=r;let s=Ye(e.offset,!0),a=Ye(e.scale,!0),c=l(s)||l(a),d=!0;l(s)||(s=this.expandConstant(0,d)),l(a)||(a=this.expandConstant(1,d)),this._offset=s,this._scale=a,this._hasValueTransform=c,this._noData=Ye(e.noData,!0),this._default=Ye(e.default,!0),this._required=e.required??!0,this._extras=Ye(e.extras,!0),this._extensions=Ye(e.extensions,!0)}Aa.fromJson=function(e){e=e??Y.EMPTY_OBJECT;let t=e.id,n=e.property,i=_9e(n),o=T9e(n,e.enums),r;return l(i)?i?r=l(n.optional)?!n.optional:!0:r=n.required??!1:r=!1,new Aa({id:t,type:o.type,componentType:o.componentType,enumType:o.enumType,isArray:o.isArray,isVariableLengthArray:o.isVariableLengthArray,arrayLength:o.arrayLength,normalized:n.normalized,min:n.min,max:n.max,offset:n.offset,scale:n.scale,noData:n.noData,default:n.default,required:r,name:n.name,description:n.description,semantic:n.semantic,extras:n.extras,extensions:n.extensions,isLegacyExtension:i})};Object.defineProperties(Aa.prototype,{id:{get:function(){return this._id}},name:{get:function(){return this._name}},description:{get:function(){return this._description}},type:{get:function(){return this._type}},enumType:{get:function(){return this._enumType}},componentType:{get:function(){return this._componentType}},valueType:{get:function(){return this._valueType}},isArray:{get:function(){return this._isArray}},isVariableLengthArray:{get:function(){return this._isVariableLengthArray}},arrayLength:{get:function(){return this._arrayLength}},normalized:{get:function(){return this._normalized}},max:{get:function(){return this._max}},min:{get:function(){return this._min}},noData:{get:function(){return this._noData}},default:{get:function(){return this._default}},required:{get:function(){return this._required}},semantic:{get:function(){return this._semantic}},hasValueTransform:{get:function(){return this._hasValueTransform}},offset:{get:function(){return this._offset}},scale:{get:function(){return this._scale}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});function _9e(e){if(e.type==="ARRAY")return!0;let t=e.type;if(t===ct.SCALAR||ct.isMatrixType(t)||ct.isVectorType(t))return!1;if(l(Ft[t]))return!0;if(l(e.noData)||l(e.scale)||l(e.offset)||l(e.required)||l(e.count)||l(e.array)||l(e.optional))return!1}function T9e(e,t){let n=e.type,i=e.componentType,o=n==="ARRAY",r,s,a;o?(r=!0,s=e.componentCount,a=!l(s)):e.array?(r=!0,s=e.count,a=!l(e.count)):(r=!1,s=void 0,a=!1);let c;if(l(e.enumType)&&(c=t[e.enumType]),n===ct.ENUM)return{type:n,componentType:void 0,enumType:c,valueType:c.valueType,isArray:r,isVariableLengthArray:a,arrayLength:s};if(o&&i===ct.ENUM)return{type:i,componentType:void 0,enumType:c,valueType:c.valueType,isArray:r,isVariableLengthArray:a,arrayLength:s};if(n===ct.SCALAR||ct.isMatrixType(n)||ct.isVectorType(n))return{type:n,componentType:i,enumType:void 0,valueType:i,isArray:r,isVariableLengthArray:a,arrayLength:s};if(n===ct.BOOLEAN||n===ct.STRING)return{type:n,componentType:void 0,enumType:void 0,valueType:void 0,isArray:r,isVariableLengthArray:a,arrayLength:s};if(o&&(i===ct.BOOLEAN||i===ct.STRING))return{type:i,componentType:void 0,enumType:void 0,valueType:void 0,isArray:r,isVariableLengthArray:a,arrayLength:s};if(l(i)&&l(Ft[i]))return{type:ct.SCALAR,componentType:i,enumType:void 0,valueType:i,isArray:r,isVariableLengthArray:a,arrayLength:s};if(l(Ft[n]))return{type:ct.SCALAR,componentType:n,enumType:void 0,valueType:n,isArray:r,isVariableLengthArray:a,arrayLength:s}}Aa.prototype.normalize=function(e){return this._normalized?Zz(e,this._valueType,Ft.normalize):e};Aa.prototype.unnormalize=function(e){return this._normalized?Zz(e,this._valueType,Ft.unnormalize):e};Aa.prototype.applyValueTransform=function(e){return!this._hasValueTransform||this._isVariableLengthArray?e:Aa.valueTransformInPlace(e,this._offset,this._scale,Ft.applyValueTransform)};Aa.prototype.unapplyValueTransform=function(e){return!this._hasValueTransform||this._isVariableLengthArray?e:Aa.valueTransformInPlace(e,this._offset,this._scale,Ft.unapplyValueTransform)};Aa.prototype.expandConstant=function(e,t){t=t??!1;let n=this._isArray,i=this._arrayLength,o=ct.getComponentCount(this._type),r=n&&o>1;if(!n&&o===1)return e;if(!n)return new Array(o).fill(e);if(!r)return new Array(i).fill(e);if(!t)return new Array(this._arrayLength*o).fill(e);let s=new Array(o).fill(e);return new Array(this._arrayLength).fill(s)};Aa.prototype.handleNoData=function(e){let t=this._noData;if(!l(t))return e;if(!koe(e,t))return e};function koe(e,t){if(!Array.isArray(e))return e===t;if(!Array.isArray(t)||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!koe(e[n],t[n]))return!1;return!0}Aa.prototype.unpackVectorAndMatrixTypes=function(e,t){t=t??!1;let n=ct.getMathType(this._type),i=this._isArray,o=ct.getComponentCount(this._type),r=i&&o>1;return l(n)?t&&r?e.map(function(s){return n.unpack(s)}):i?n.unpackArray(e):n.unpack(e):e};Aa.prototype.packVectorAndMatrixTypes=function(e,t){t=t??!1;let n=ct.getMathType(this._type),i=this._isArray,o=ct.getComponentCount(this._type),r=i&&o>1;return l(n)?t&&r?e.map(function(s){return n.pack(s,[])}):i?n.packArray(e,[]):n.pack(e,[]):e};Aa.prototype.validate=function(e){if(!(!l(e)&&l(this._default)))return this._required&&!l(e)?"required property must have a value":this._isArray?S9e(this,e):Uoe(this,e)};function S9e(e,t){if(!Array.isArray(t))return`value ${t} must be an array`;let n=t.length;if(!e._isVariableLengthArray&&n!==e._arrayLength)return"Array length does not match property.arrayLength";for(let i=0;i<n;i++){let o=Uoe(e,t[i]);if(l(o))return o}}function Uoe(e,t){let n=e._type,i=e._componentType,o=e._enumType,r=e._normalized;return ct.isVectorType(n)?C9e(t,n,i):ct.isMatrixType(n)?V9e(t,n,i):n===ct.STRING?L9e(t):n===ct.BOOLEAN?R9e(t):n===ct.ENUM?Z9e(t,o):G9e(t,i,r)}function C9e(e,t,n){if(!Ft.isVectorCompatible(n))return`componentType ${n} is incompatible with vector type ${t}`;if(t===ct.VEC2&&!(e instanceof U))return`vector value ${e} must be a Cartesian2`;if(t===ct.VEC3&&!(e instanceof m))return`vector value ${e} must be a Cartesian3`;if(t===ct.VEC4&&!(e instanceof se))return`vector value ${e} must be a Cartesian4`}function V9e(e,t,n){if(!Ft.isVectorCompatible(n))return`componentType ${n} is incompatible with matrix type ${t}`;if(t===ct.MAT2&&!(e instanceof Ii))return`matrix value ${e} must be a Matrix2`;if(t===ct.MAT3&&!(e instanceof $))return`matrix value ${e} must be a Matrix3`;if(t===ct.MAT4&&!(e instanceof F))return`matrix value ${e} must be a Matrix4`}function L9e(e){if(typeof e!="string")return L5(e,ct.STRING)}function R9e(e){if(typeof e!="boolean")return L5(e,ct.BOOLEAN)}function Z9e(e,t){let n=typeof e;if(l(t))return n!=="string"||!l(t.valuesByName[e])?`value ${e} is not a valid enum name for ${t.id}`:void 0}function G9e(e,t,n){let i=typeof e;switch(t){case Ft.INT8:case Ft.UINT8:case Ft.INT16:case Ft.UINT16:case Ft.INT32:case Ft.UINT32:case Ft.FLOAT32:case Ft.FLOAT64:return i!=="number"?L5(e,t):isFinite(e)?Moe(e,t,n):Noe(e,t);case Ft.INT64:case Ft.UINT64:return i!=="number"&&i!=="bigint"?L5(e,t):i==="number"&&!isFinite(e)?Noe(e,t):Moe(e,t,n)}}function L5(e,t){return`value ${e} does not match type ${t}`}function Aoe(e,t,n){let i=`value ${e} is out of range for type ${t}`;return n&&(i+=" (normalized)"),i}function Moe(e,t,n){if(n){let i=Ft.isUnsignedIntegerType(t)?0:-1;return e<i||e>1?Aoe(e,t,n):void 0}if(e<Ft.getMinimum(t)||e>Ft.getMaximum(t))return Aoe(e,t,n)}function Noe(e,t){return`value ${e} of type ${t} must be finite`}function Zz(e,t,n){if(!Array.isArray(e))return n(e,t);for(let i=0;i<e.length;i++)e[i]=Zz(e[i],t,n);return e}Aa.valueTransformInPlace=function(e,t,n,i){if(!Array.isArray(e))return i(e,t,n);for(let o=0;o<e.length;o++)e[o]=Aa.valueTransformInPlace(e[o],t[o],n[o],i);return e};var yf=Aa;function NI(e){e=e??Y.EMPTY_OBJECT;let t=e.count,n=e.property,i=e.classProperty,o=e.bufferViews,r=i.type,s=i.isArray,a=i.isVariableLengthArray,c=i.valueType,d=i.enumType,u=r===ct.STRING,h=r===ct.BOOLEAN,p=0,g;if(a){let b=n.arrayOffsetType??n.offsetType;b=Ft[b]??Ft.UINT32;let R=n.arrayOffsets??n.arrayOffsetBufferView;g=new Gz(o[R],b,t+1),p+=g.typedArray.byteLength}let f=ct.getComponentCount(r),y;a?y=g.get(t)-g.get(0):s?y=t*i.arrayLength:y=t;let x=f*y,S;if(u){let b=n.stringOffsetType??n.offsetType;b=Ft[b]??Ft.UINT32;let R=n.stringOffsets??n.stringOffsetBufferView;S=new Gz(o[R],b,x+1),p+=S.typedArray.byteLength}(u||h)&&(c=Ft.UINT8);let C;u?C=S.get(x)-S.get(0):h?C=Math.ceil(x/8):C=x;let V=n.values??n.bufferView,L=new Gz(o[V],c,C);p+=L.typedArray.byteLength;let Z=n.offset,E=n.scale,P=i.hasValueTransform||l(Z)||l(E);Z=Z??i.offset,E=E??i.scale,Z=Doe(Z),E=Doe(E);let W,v,A=this;u?W=function(b){return X9e(b,A._values,A._stringOffsets)}:h?(W=function(b){return W9e(b,A._values)},v=function(b,R){P9e(b,A._values,R)}):l(d)?(W=function(b){let R=A._values.get(b);return d.namesByValue[R]},v=function(b,R){let G=d.valuesByName[R];A._values.set(b,G)}):(W=function(b){return A._values.get(b)},v=function(b,R){A._values.set(b,R)}),this._arrayOffsets=g,this._stringOffsets=S,this._values=L,this._classProperty=i,this._count=t,this._vectorComponentCount=f,this._min=n.min,this._max=n.max,this._offset=Z,this._scale=E,this._hasValueTransform=P,this._getValue=W,this._setValue=v,this._unpackedValues=void 0,this._extras=n.extras,this._extensions=n.extensions,this._byteLength=p}Object.defineProperties(NI.prototype,{hasValueTransform:{get:function(){return this._hasValueTransform}},offset:{get:function(){return this._offset}},scale:{get:function(){return this._scale}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}},byteLength:{get:function(){return this._byteLength}}});NI.prototype.get=function(e){let t=E9e(this,e);return t=this._classProperty.handleNoData(t),l(t)?(t=this._classProperty.normalize(t),t=U9e(this,t),this._classProperty.unpackVectorAndMatrixTypes(t)):(t=this._classProperty.default,this._classProperty.unpackVectorAndMatrixTypes(t))};NI.prototype.set=function(e,t){let n=this._classProperty;t=n.packVectorAndMatrixTypes(t),t=D9e(this,t),t=n.unnormalize(t),I9e(this,e,t)};NI.prototype.getTypedArray=function(){if(l(this._values))return this._values.typedArray};function Doe(e){if(!Array.isArray(e))return e;let t=[];for(let n=0;n<e.length;n++){let i=e[n];Array.isArray(i)?t.push.apply(t,i):t.push(i)}return t}function E9e(e,t){Ooe(e)&&Yoe(e);let n=e._classProperty,i=n.isArray,o=n.type,r=ct.getComponentCount(o);if(l(e._unpackedValues)){let s=e._unpackedValues[t];return i?Ye(s,!0):s}return!i&&r===1?e._getValue(t):Boe(e,n,t)}function Boe(e,t,n){let i,o;if(t.isVariableLengthArray){i=e._arrayOffsets.get(n),o=e._arrayOffsets.get(n+1)-i;let s=ct.getComponentCount(t.type);i*=s,o*=s}else{let a=(t.arrayLength??1)*e._vectorComponentCount;i=n*a,o=a}let r=new Array(o);for(let s=0;s<o;s++)r[s]=e._getValue(i+s);return r}function I9e(e,t,n){N9e(e,t,n)&&Yoe(e);let i=e._classProperty,o=i.isArray,r=i.type,s=ct.getComponentCount(r);if(l(e._unpackedValues)){i.isArray&&(n=Ye(n,!0)),e._unpackedValues[t]=n;return}if(!o&&s===1){e._setValue(t,n);return}let a,c;if(i.isVariableLengthArray)a=e._arrayOffsets.get(t),c=e._arrayOffsets.get(t+1)-a;else{let u=(i.arrayLength??1)*e._vectorComponentCount;a=t*u,c=u}for(let d=0;d<c;++d)e._setValue(a+d,n[d])}function X9e(e,t,n){let i=n.get(e),o=n.get(e+1)-i;return Pl(t.typedArray,i,o)}function W9e(e,t){let n=e>>3,i=e%8;return(t.typedArray[n]>>i&1)===1}function P9e(e,t,n){let i=e>>3,o=e%8;n?t.typedArray[i]|=1<<o:t.typedArray[i]&=~(1<<o)}function v9e(e,t){let n=t.dataView,i=e*8,o=0,r=(n.getUint8(i+7)&128)>0,s=!0;for(let a=0;a<8;++a){let c=n.getUint8(i+a);r&&(s?c!==0&&(c=~(c-1)&255,s=!1):c=~c&255),o+=c*Math.pow(256,a)}return r&&(o=-o),o}function w9e(e,t){let n=t.dataView,i=e*8,o=BigInt(0),r=(n.getUint8(i+7)&128)>0,s=!0;for(let a=0;a<8;++a){let c=n.getUint8(i+a);r&&(s?c!==0&&(c=~(c-1)&255,s=!1):c=~c&255),o+=BigInt(c)*(BigInt(1)<<BigInt(a*8))}return r&&(o=-o),o}function F9e(e,t){let n=t.dataView,i=e*8,o=n.getUint32(i,!0),r=n.getUint32(i+4,!0);return o+4294967296*r}function A9e(e,t){let n=t.dataView,i=e*8,o=BigInt(n.getUint32(i,!0)),r=BigInt(n.getUint32(i+4,!0));return o+BigInt(4294967296)*r}function M9e(e){switch(e){case Ft.INT8:return Q.BYTE;case Ft.UINT8:return Q.UNSIGNED_BYTE;case Ft.INT16:return Q.SHORT;case Ft.UINT16:return Q.UNSIGNED_SHORT;case Ft.INT32:return Q.INT;case Ft.UINT32:return Q.UNSIGNED_INT;case Ft.FLOAT32:return Q.FLOAT;case Ft.FLOAT64:return Q.DOUBLE}}function Ooe(e){if(l(e._unpackedValues))return!1;let t=e._classProperty,n=t.type,i=t.valueType;return n===ct.STRING||i===Ft.INT64&&!Bt.supportsBigInt64Array()||i===Ft.UINT64&&!Bt.supportsBigUint64Array()}function N9e(e,t,n){if(Ooe(e))return!0;let i=e._arrayOffsets;if(l(i)){let o=i.get(t+1)-i.get(t),r=n.length;if(o!==r)return!0}return!1}function Yoe(e){e._unpackedValues=k9e(e),e._arrayOffsets=void 0,e._stringOffsets=void 0,e._values=void 0}function k9e(e){let t=e._count,n=new Array(t),i=e._classProperty,o=i.isArray,r=i.type,s=ct.getComponentCount(r);if(!o&&s===1){for(let a=0;a<t;++a)n[a]=e._getValue(a);return n}for(let a=0;a<t;a++)n[a]=Boe(e,i,a);return n}function U9e(e,t){let i=e._classProperty.isVariableLengthArray;return!e._hasValueTransform||i?t:yf.valueTransformInPlace(t,e._offset,e._scale,Ft.applyValueTransform)}function D9e(e,t){let i=e._classProperty.isVariableLengthArray;return!e._hasValueTransform||i?t:yf.valueTransformInPlace(t,e._offset,e._scale,Ft.unapplyValueTransform)}function Gz(e,t,n){let i=this,o,r,s;if(t===Ft.INT64)Bt.supportsBigInt()?Bt.supportsBigInt64Array()?(o=new BigInt64Array(e.buffer,e.byteOffset,n),s=function(a,c){i.typedArray[a]=BigInt(c)}):(o=new Uint8Array(e.buffer,e.byteOffset,n*8),r=function(a){return w9e(a,i)}):(_t("INT64 type is not fully supported on this platform. Values greater than 2^53 - 1 or less than -(2^53 - 1) may lose precision when read."),o=new Uint8Array(e.buffer,e.byteOffset,n*8),r=function(a){return v9e(a,i)});else if(t===Ft.UINT64)Bt.supportsBigInt()?Bt.supportsBigUint64Array()?(o=new BigUint64Array(e.buffer,e.byteOffset,n),s=function(a,c){i.typedArray[a]=BigInt(c)}):(o=new Uint8Array(e.buffer,e.byteOffset,n*8),r=function(a){return A9e(a,i)}):(_t("UINT64 type is not fully supported on this platform. Values greater than 2^53 - 1 may lose precision when read."),o=new Uint8Array(e.buffer,e.byteOffset,n*8),r=function(a){return F9e(a,i)});else{let a=M9e(t);o=Q.createArrayBufferView(a,e.buffer,e.byteOffset,n),s=function(c,d){i.typedArray[c]=d}}l(r)||(r=function(a){return i.typedArray[a]}),this.typedArray=o,this.dataView=new DataView(o.buffer,o.byteOffset),this.get=r,this.set=s,this._componentType=t}var kI=NI;function Km(e){e=e??Y.EMPTY_OBJECT;let t=e.count,n=e.class,i=0,o={};if(l(e.properties)){for(let r in e.properties)if(e.properties.hasOwnProperty(r)){let s=new kI({count:t,property:e.properties[r],classProperty:n.properties[r],bufferViews:e.bufferViews});o[r]=s,i+=s.byteLength}}this._count=t,this._class=n,this._properties=o,this._byteLength=i}Object.defineProperties(Km.prototype,{count:{get:function(){return this._count}},class:{get:function(){return this._class}},byteLength:{get:function(){return this._byteLength}}});Km.prototype.hasProperty=function(e){return Nn.hasProperty(e,this._properties,this._class)};Km.prototype.hasPropertyBySemantic=function(e){return Nn.hasPropertyBySemantic(e,this._properties,this._class)};Km.prototype.getPropertyIds=function(e){return Nn.getPropertyIds(this._properties,this._class,e)};Km.prototype.getProperty=function(e,t){let n=this._properties[t],i;return l(n)?i=n.get(e):i=B9e(this._class,t),i};Km.prototype.setProperty=function(e,t,n){let i=this._properties[t];return l(i)?(i.set(e,n),!0):!1};Km.prototype.getPropertyBySemantic=function(e,t){let n,i=this._class.propertiesBySemantic;if(l(i)&&(n=i[t]),l(n))return this.getProperty(e,n.id)};Km.prototype.setPropertyBySemantic=function(e,t,n){let i,o=this._class.propertiesBySemantic;return l(o)&&(i=o[t]),l(i)?this.setProperty(e,i.id,n):!1};Km.prototype.getPropertyTypedArray=function(e){let t=this._properties[e];if(l(t))return t.getTypedArray()};Km.prototype.getPropertyTypedArrayBySemantic=function(e){let t,n=this._class.propertiesBySemantic;if(l(n)&&(t=n[e]),l(t))return this.getPropertyTypedArray(t.id)};function B9e(e,t){let n=e.properties;if(!l(n))return;let i=n[t];if(l(i)&&l(i.default)){let o=i.default;return i.isArray&&(o=Ye(o,!0)),o=i.normalize(o),i.unpackVectorAndMatrixTypes(o)}}var Pu=Km;var Dhn=_(T(),1);var Zan=_(T(),1);var xan=_(T(),1);function ag(){}Object.defineProperties(ag.prototype,{cacheKey:{get:function(){pe.throwInstantiationError()}}});ag.prototype.load=function(){pe.throwInstantiationError()};ag.prototype.unload=function(){};ag.prototype.process=function(e){return!1};ag.prototype.getError=function(e,t){l(t)&&l(t.message)&&(e+=` ${t.message}`);let n=new ae(e);return l(t)&&(n.stack=`Original stack: ${t.stack} Handler stack: ${n.stack}`),n};ag.prototype.isDestroyed=function(){return!1};ag.prototype.destroy=function(){return this.unload(),me(this)};var Ki=ag;var Tan=_(T(),1),O9e={UNLOADED:0,LOADING:1,LOADED:2,PROCESSING:3,READY:4,FAILED:5},yt=Object.freeze(O9e);function $p(e){e=e??Y.EMPTY_OBJECT;let t=e.typedArray,n=e.resource,i=e.cacheKey;this._typedArray=t,this._resource=n,this._cacheKey=i,this._state=yt.UNLOADED,this._promise=void 0}l(Object.create)&&($p.prototype=Object.create(Ki.prototype),$p.prototype.constructor=$p);Object.defineProperties($p.prototype,{cacheKey:{get:function(){return this._cacheKey}},typedArray:{get:function(){return this._typedArray}}});$p.prototype.load=async function(){return l(this._promise)?this._promise:l(this._typedArray)?(this._promise=Promise.resolve(this),this._promise):(this._promise=Y9e(this),this._promise)};async function Y9e(e){let t=e._resource;e._state=yt.LOADING;try{let n=await $p._fetchArrayBuffer(t);return e.isDestroyed()?void 0:(e._typedArray=new Uint8Array(n),e._state=yt.READY,e)}catch(n){if(e.isDestroyed())return;e._state=yt.FAILED;let i=`Failed to load external buffer: ${t.url}`;throw e.getError(i,n)}}$p._fetchArrayBuffer=function(e){return e.fetchArrayBuffer()};$p.prototype.unload=function(){this._typedArray=void 0};var r_=$p;var qan=_(T(),1);var kan=_(T());var Ian=_(T()),Gan=function(){var e="b9H79Tebbbe9nk9Geueu9Geub9Gbb9Gouuuuuueu9Gvuuuuueu9Gduueu9Gluuuueu9Gvuuuuub9Gouuuuuub9Gluuuub9GiuuueuiYKdilveoveovrrwrrDDoDbqqbelve9Weiiviebeoweuec;G:Qdkr:nlAo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8F9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949c919M9MWV9mW4W2be8A9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949c919M9MWVbd8F9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949c919M9MWV9c9V919U9KbiE9TW79O9V9Wt9FW9U9J9V9KW9wWVtW949wWV79P9V9UblY9TW79O9V9Wt9FW9U9J9V9KW69U9KW949c919M9MWVbv8E9TW79O9V9Wt9FW9U9J9V9KW69U9KW949c919M9MWV9c9V919U9Kbo8A9TW79O9V9Wt9FW9U9J9V9KW69U9KW949wWV79P9V9UbrE9TW79O9V9Wt9FW9U9J9V9KW69U9KW949tWG91W9U9JWbwa9TW79O9V9Wt9FW9U9J9V9KW69U9KW949tWG91W9U9JW9c9V919U9KbDL9TW79O9V9Wt9FW9U9J9V9KWS9P2tWV9p9JtbqK9TW79O9V9Wt9FW9U9J9V9KWS9P2tWV9r919HtbkL9TW79O9V9Wt9FW9U9J9V9KWS9P2tWVT949WbxE9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94J9H9J9OWbsa9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94J9H9J9OW9ttV9P9Wbza9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94SWt9J9O9sW9T9H9WbHK9TW79O9V9Wt9F79W9Ht9P9H29t9VVt9sW9T9H9WbOl79IV9RbADwebcekdLQq:X9MKdbk:xhdgud9:8Jjjjjbc;qw9Rgo8Kjjjjbdndnaembcbhrxekabcbyd;C:kjjbgwc:GeV86bbaoc;adfcbcjdz:vjjjb8AdnaiTmbaoc;adfadalzNjjjb8Akaoc;abfalfcbcbcjdal9RalcFe0Ez:vjjjb8Aaoc;abfaoc;adfalzNjjjb8AaocUf9cb83ibaoc8Wf9cb83ibaocyf9cb83ibaocaf9cb83ibaocKf9cb83ibaoczf9cb83ibao9cb83iwao9cb83ibcj;abal9Uc;WFbGcjdalca0EhDdnaicd6mbavcd9imbawTmbadcefhqaDci2gkal2hxaoc;alfclfhmaoc;qlfceVhPaoc;qofclVhsaoc;qofcKfhzaoc;qofczfhHcbhOincdhAcbhrdnavci6mbaz9cb83ibaH9cb83ibao9cb83i;yoao9cb83i;qoadaOfgrybbhCcbhXincbhQcbhLdninaralfhKarybbgYaC7aLVhLaQcP0meaKhraYhCaQcefgQaXfai6mbkkcbhCaoc;qofhQincwh8AcwhEdnaLaC93grcFeGg3cs0mbclhEa3ci0mba3cb9hcethEkdnarcw4cFeGg3cs0mbclh8Aa3ci0mba3cb9hceth8Aka8AaEfh3aQydbh5cwh8AcwhEdnarcz4cFeGg8Ecs0mbclhEa8Eci0mba8Ecb9hcethEka3a5fh3dnarcFFFFb0mbclh8AarcFFF8F0mbarcFFFr0ceth8AkaQa3aEfa8AfBdbaQclfhQaCcefgCcw9hmbkaKhraYhCaXczfgXai6mbkcbhrcehQashLinaQaraLydbaoc;qofarcdtfydb6EhraLclfhLaQcefgQcw9hmbkcihAkcbh3aoc;qlfcbcjdz:vjjjb8Aaoc;alfcwfcbBdbao9cb83i;alarclth8FadhaaDhhaqh5inaoc;qlfadcba3cufgrara30Eal2falzNjjjb8Aaiahaiah6EhgdnaDaia39Ra3aDfai6EgYcsfc9WGgraY9nmbaoc;qofaYfcbaraY9Rz:vjjjb8Akada3al2fh8Jcbh8Kina8Ka8FVcl4hXaoc;alfa8Kcdtfh8LaOh8Mcbh8Nina8NaOfhQdndndndndndna8KPldebidkaPa8Mc98GgLfhra5aLfh8Aaoc;qlfaQc98GgLfRbbhCcwhQinarRbbaQtaCVhCarcefhraQcwfgQca9hmbkaYTmla8Ncith8Ea8JaLfhEcbhKinaERbbhLcwhra8AhQinaQRbbartaLVhLaQcefhQarcwfgrca9hmbkaoc;qofaKfaLaC7aX93a8E486bba8Aalfh8AaEalfhEaLhCaKcefgKaY9hmbxlkkaYTmia8Mc9:Ghra8NcitcwGhEaoc;qlfaQceVfRbbcwtaoc;qlfaQc9:GfRbbVhLaoc;qofhQaghCinaQa5arfRbbcwtaaarfRbbVg8AaL9RgLcetaLcztcz91cs47cFFiGaE486bbaralfhraQcefhQa8AhLa3aCcufgC9hmbxikkaYTmda8JaQfhraoc;qlfaQfRbbhLaoc;qofhQaghCinaQarRbbg8AaL9RgLcetaLcKtcK91cr4786bbaQcefhQaralfhra8AhLa3aCcufgC9hmbxdkkaYTmeka8LydbhEcbhKaoc;qofhrincdhLcbhQinaLaraQfRbbcb9hfhLaQcefgQcz9hmbkclhCcbhQinaCaraQfRbbcd0fhCaQcefgQcz9hmbkcwh8AcbhQina8AaraQfRbbcP0fh8AaQcefgQcz9hmbkaLaCaLaC6EgQa8AaQa8A6EgQczaQcz6EaEfhEarczfhraKczfgKaY6mbka8LaEBdbka8Mcefh8Ma8Ncefg8Ncl9hmbka8Kcefg8KaA9hmbkaaaxfhaahakfhha5axfh5a3akfg3ai6mbkcbhrcehQamhLinaQaraLydbaoc;alfarcdtfydb6EhraLclfhLaQcefgChQaAaC9hmbkaoaOcd4fa8FcdVararcdSE86bbaOclfgOal6mbkkabaefh8Kabcefhralcd4gecbawEhqadcefhHaoc;abfceVhzcbhxdndninaiax9nmeaoc;qofcbcjdz:vjjjb8Aa8Kar9Raq6mdadaxal2gQfhkcbh8JaHaQfhsarcbaqz:vjjjbghaqfh5aDaiax9RaxaDfai6EgPcsfgrcl4cifcd4hAarc9WGg8LThmindndndndndndndndndndnawTmbaoa8Jcd4fRbbgLciGPlbedlbkaPTmdaka8Jfhraoc;abfa8JfRbbhLaoc;qofhQaPhCinaQarRbbg8AaL9RgLcetaLcKtcK91cr4786bbaQcefhQaralfhra8AhLaCcufgCmbxikkaPTmia8JcitcwGhEaoc;abfa8JceVfRbbcwtaoc;abfa8Jc9:GgrfRbbVhLakarfhraoc;qofhQaPhCinaQar8Vbbg8AaL9RgLcetaLcztcz91cs47cFFiGaE486bbaQcefhQaralfhra8AhLaCcufgCmbxdkkaza8Jc98GgEfhrasaEfh8Aaoc;abfaEfRbbhCcwhQinarRbbaQtaCVhCarcefhraQcwfgQca9hmbkaPTmbaLcl4hYa8JcitcKGh3akaEfhEcbhKinaERbbhLcwhra8AhQinaQRbbartaLVhLaQcefhQarcwfgrca9hmbkaoc;qofaKfaLaC7aY93a3486bba8Aalfh8AaEalfhEaLhCaKcefgKaP9hmbkkawmbcbhrxlka8LTmbcbhrdninaoc;qofarfgQcwf8PibaQ8Pib:e9qTmearczfgra8L9pmdxbkkdnavmbcehrxikcbhEaAhKaAhYinaoc;qofaEfgrcwf8Pibhyar8Pibh8PcdhLcbhQinaLaraQfRbbcb9hfhLaQcefgQcz9hmbkclhCcbhQinaCaraQfRbbcd0fhCaQcefgQcz9hmbkcwh8AcbhQina8AaraQfRbbcP0fh8AaQcefgQcz9hmbkaLaCaLaC6Egra8Aara8A6Egrczarcz6EaYfhYarcucbaya8P:e9cb9sEgQaraQ6EaKfhKaEczfgEa8L9pmdxbkkaha8Jcd4fgrarRbbcda8JcetcoGtV86bbxikdnaKaP6mbaYaP6mbaha8Jcd4fgrarRbbcia8JcetcoGtV86bba8Ka59RaP6mra5aoc;qofaPzNjjjbaPfh5xikaKaY9phrkaha8Jcd4fgQaQRbbara8JcetcoGtV86bbka8Ka59RaA6mla5cbaAz:vjjjbgOaAfhYdndna8Lmbamhrxekdna8KaY9RcK9pmbamhrxekarcdtc:q1jjbfcj1jjbawEg5ydxggcetc;:FFFeGh8Fcuh3cuagtcu7cFeGhacbh8Maoc;qofhLinaoc;qofa8MfhXczhEdndndnagPDbeeeeeeedekcucbaXcwf8PibaX8Pib:e9cb9sEhExekcbhra8FhEinaEaaaLarfRbb9nfhEarcefgrcz9hmbkkcih8Ecbh8AinczhQdndndna5a8AcdtfydbgKPDbeeeeeeedekcucbaXcwf8PibaX8Pib:e9cb9sEhQxekaKcetc;:FFFeGhQcuaKtcu7cFeGhCcbhrinaQaCaLarfRbb9nfhQarcefgrcz9hmbkkdndnaQaE6mbaKa39hmeaQaE9hmea5a8EcdtfydbcwSmeka8Ah8EaQhEka8Acefg8Aci9hmbkaOa8Mco4fgrarRbba8Ea8Mci4coGtV86bbdndndna5a8Ecdtfydbg3PDdbbbbbbbebkdncwa39Tg8ETmbcua3tcu7hQdndna3ceSmbcbh8NaLhXinaXhra8Eh8AcbhCinarRbbgEaQcFeGgKaEaK6EaCa3tVhCarcefhra8Acufg8AmbkaYaC86bbaXa8EfhXaYcefhYa8Na8Efg8Ncz6mbxdkkcbh8NaLhXinaXhra8Eh8AcbhCinarRbbgEaQcFeGgKaEaK6EaCcetVhCarcefhra8Acufg8AmbkaYaC:T9cFe:d9c:c:qj:bw9:9c:q;c1:I1e:d9c:b:c:e1z9:9ca188bbaXa8EfhXaYcefhYa8Na8Efg8Ncz6mbkkcbhrinaYaLarfRbbgC86bbaYaCaQcFeG9pfhYarcefgrcz9hmbxikkdna3ceSmbinaYcb86bbaYcefhYxbkkinaYcb86bbaYcefhYxbkkaYaX8Pbb83bbaYcwfaXcwf8Pbb83bbaYczfhYka8Mczfg8Ma8L9pgrmeaLczfhLa8KaY9RcK9pmbkkarTmlaYh5aYTmlka8Jcefg8Jal9hmbkaoc;abfakaPcufal2falzNjjjb8AaPaxfhxa5hra5mbkcbhrxdkdna8Kar9RaqalfgQcKcaawEgLaQaL0EgC9pmbcbhrxdkdnaQaL9pmbarcbaCaQ9RgQz:vjjjbaQfhrkaraoc;adfalzNjjjbalfhrdnawTmbaraoaezNjjjbaefhrkarab9Rhrxekcbhrkaoc;qwf8KjjjjbarkCbabaeadaialcdz:bjjjbk9reduaecd4gdaefgicaaica0Eabcj;abae9Uc;WFbGcjdaeca0Egifcufai9Uae2aiadfaicl4cifcd4f2fcefkmbcbabBd;C:kjjbk:Ese5u8Jjjjjbc;ae9Rgl8Kjjjjbcbhvdnaici9UgocHfae0mbabcbyd;m:kjjbgrc;GeV86bbalc;abfcFecjez:vjjjb8AalcUfgw9cu83ibalc8WfgD9cu83ibalcyfgq9cu83ibalcafgk9cu83ibalcKfgx9cu83ibalczfgm9cu83ibal9cu83iwal9cu83ibabaefc9WfhPabcefgsaofhednaiTmbcmcsarcb9kgzEhHcbhOcbhAcbhCcbhXcbhQindnaeaP9nmbcbhvxikaQcufhvadaCcdtfgLydbhKaLcwfydbhYaLclfydbh8AcbhEdndndninalc;abfavcsGcitfgoydlh3dndndnaoydbgoaK9hmba3a8ASmekdnaoa8A9hmba3aY9hmbaEcefhExekaoaY9hmea3aK9hmeaEcdfhEkaEc870mdaXcufhvaLaEciGcx2goc;i1jjbfydbcdtfydbh3aLaoc;e1jjbfydbcdtfydbh8AaLaoc;a1jjbfydbcdtfydbhKcbhodnindnalavcsGcdtfydba39hmbaohYxdkcuhYavcufhvaocefgocz9hmbkkaOa3aOSgvaYce9iaYaH9oVgoGfhOdndndncbcsavEaYaoEgvcs9hmbarce9imba3a3aAa3cefaASgvEgAcefSmecmcsavEhvkasavaEcdtc;WeGV86bbavcs9hmea3aA9Rgvcetavc8F917hvinaeavcFb0crtavcFbGV86bbaecefheavcje6hoavcr4hvaoTmbka3hAxvkcPhvasaEcdtcPV86bba3hAkavTmiavaH9omicdhocehEaQhYxlkavcufhvaEclfgEc;ab9hmbkkdnaLceaYaOSceta8AaOSEcx2gvc;a1jjbfydbcdtfydbgKTaLavc;e1jjbfydbcdtfydbg8AceSGaLavc;i1jjbfydbcdtfydbg3cdSGaOcb9hGazGg5ce9hmbaw9cu83ibaD9cu83ibaq9cu83ibak9cu83ibax9cu83ibam9cu83ibal9cu83iwal9cu83ibcbhOkcbhEaXcufgvhodnindnalaocsGcdtfydba8A9hmbaEhYxdkcuhYaocufhoaEcefgEcz9hmbkkcbhodnindnalavcsGcdtfydba39hmbaohExdkcuhEavcufhvaocefgocz9hmbkkaOaKaOSg8EfhLdndnaYcm0mbaYcefhYxekcbcsa8AaLSgvEhYaLavfhLkdndnaEcm0mbaEcefhExekcbcsa3aLSgvEhEaLavfhLkc9:cua8EEh8FcbhvaEaYcltVgacFeGhodndndninavc:W1jjbfRbbaoSmeavcefgvcz9hmbxdkka5aKaO9havcm0VVmbasavc;WeV86bbxekasa8F86bbaeaa86bbaecefhekdna8EmbaKaA9Rgvcetavc8F917hvinaeavcFb0gocrtavcFbGV86bbavcr4hvaecefheaombkaKhAkdnaYcs9hmba8AaA9Rgvcetavc8F917hvinaeavcFb0gocrtavcFbGV86bbavcr4hvaecefheaombka8AhAkdnaEcs9hmba3aA9Rgvcetavc8F917hvinaeavcFb0gocrtavcFbGV86bbavcr4hvaecefheaombka3hAkalaXcdtfaKBdbaXcefcsGhvdndnaYPzbeeeeeeeeeeeeeebekalavcdtfa8ABdbaXcdfcsGhvkdndnaEPzbeeeeeeeeeeeeeebekalavcdtfa3BdbavcefcsGhvkcihoalc;abfaQcitfgEaKBdlaEa8ABdbaQcefcsGhYcdhEavhXaLhOxekcdhoalaXcdtfa3BdbcehEaXcefcsGhXaQhYkalc;abfaYcitfgva8ABdlava3Bdbalc;abfaQaEfcsGcitfgva3BdlavaKBdbascefhsaQaofcsGhQaCcifgCai6mbkkdnaeaP9nmbcbhvxekcbhvinaeavfavc:W1jjbfRbb86bbavcefgvcz9hmbkaeab9Ravfhvkalc;aef8KjjjjbavkZeeucbhddninadcefgdc8F0meceadtae6mbkkadcrfcFeGcr9Uci2cdfabci9U2cHfkmbcbabBd;m:kjjbk:Adewu8Jjjjjbcz9Rhlcbhvdnaicvfae0mbcbhvabcbRb;m:kjjbc;qeV86bbal9cb83iwabcefhoabaefc98fhrdnaiTmbcbhwcbhDindnaoar6mbcbskadaDcdtfydbgqalcwfawaqav9Rgvavc8F91gv7av9Rc507gwcdtfgkydb9Rgvc8E91c9:Gavcdt7awVhvinaoavcFb0gecrtavcFbGV86bbavcr4hvaocefhoaembkakaqBdbaqhvaDcefgDai9hmbkkdnaoar9nmbcbskaocbBbbaoab9RclfhvkavkBeeucbhddninadcefgdc8F0meceadtae6mbkkadcwfcFeGcr9Uab2cvfk:bvli99dui99ludnaeTmbcuadcetcuftcu7:Zhvdndncuaicuftcu7:ZgoJbbbZMgr:lJbbb9p9DTmbar:Ohwxekcjjjj94hwkcbhicbhDinalclfIdbgrJbbbbJbbjZalIdbgq:lar:lMalcwfIdbgk:lMgr:varJbbbb9BEgrNhxaqarNhrdndnakJbbbb9GTmbaxhqxekJbbjZar:l:tgqaq:maxJbbbb9GEhqJbbjZax:l:tgxax:marJbbbb9GEhrkdndnalcxfIdbgxJbbj:;axJbbj:;9GEgkJbbjZakJbbjZ9FEavNJbbbZJbbb:;axJbbbb9GEMgx:lJbbb9p9DTmbax:Ohmxekcjjjj94hmkdndnaqJbbj:;aqJbbj:;9GEgxJbbjZaxJbbjZ9FEaoNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:OhPxekcjjjj94hPkdndnarJbbj:;arJbbj:;9GEgqJbbjZaqJbbjZ9FEaoNJbbbZJbbb:;arJbbbb9GEMgr:lJbbb9p9DTmbar:Ohsxekcjjjj94hskdndnadcl9hmbabaifgzas86bbazcifam86bbazcdfaw86bbazcefaP86bbxekabaDfgzas87ebazcofam87ebazclfaw87ebazcdfaP87ebkalczfhlaiclfhiaDcwfhDaecufgembkkk;hlld99eud99eudnaeTmbdndncuaicuftcu7:ZgvJbbbZMgo:lJbbb9p9DTmbao:Ohixekcjjjj94hikaic;8FiGhrinabcofcicdalclfIdb:lalIdb:l9EgialcwfIdb:lalaicdtfIdb:l9EEgialcxfIdb:lalaicdtfIdb:l9EEgiarV87ebdndnJbbj:;JbbjZalaicdtfIdbJbbbb9DEgoalaicd7cdtfIdbJ;Zl:1ZNNgwJbbj:;awJbbj:;9GEgDJbbjZaDJbbjZ9FEavNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohqxekcjjjj94hqkabcdfaq87ebdndnalaicefciGcdtfIdbJ;Zl:1ZNaoNgwJbbj:;awJbbj:;9GEgDJbbjZaDJbbjZ9FEavNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohqxekcjjjj94hqkabaq87ebdndnaoalaicufciGcdtfIdbJ;Zl:1ZNNgoJbbj:;aoJbbj:;9GEgwJbbjZawJbbjZ9FEavNJbbbZJbbb:;aoJbbbb9GEMgo:lJbbb9p9DTmbao:Ohixekcjjjj94hikabclfai87ebabcwfhbalczfhlaecufgembkkk;3viDue99eu8Jjjjjbcjd9Rgo8Kjjjjbadcd4hrdndndndnavcd9hmbadcl6meaohwarhDinawc:CuBdbawclfhwaDcufgDmbkaeTmiadcl6mdarcdthqalhkcbhxinaohwakhDarhminawawydbgPcbaDIdbgs:8cL4cFeGc:cufasJbbbb9BEgzaPaz9kEBdbaDclfhDawclfhwamcufgmmbkakaqfhkaxcefgxaeSmixbkkaeTmdxekaeTmekarcdthkavce9hhqadcl6hdcbhxindndndnaqmbadmdc:CuhDalhwarhminaDcbawIdbgs:8cL4cFeGc:cufasJbbbb9BEgPaDaP9kEhDawclfhwamcufgmmbxdkkc:CuhDdndnavPleddbdkadmdaohwalhmarhPinawcbamIdbgs:8cL4cFeGgzc;:bazc;:b0Ec:cufasJbbbb9BEBdbamclfhmawclfhwaPcufgPmbxdkkadmecbhwarhminaoawfcbalawfIdbgs:8cL4cFeGgPc8AaPc8A0Ec:cufasJbbbb9BEBdbawclfhwamcufgmmbkkadmbcbhwarhPinaDhmdnavceSmbaoawfydbhmkdndnalawfIdbgscjjj;8iamai9RcefgmcLt9R::NJbbbZJbbb:;asJbbbb9GEMgs:lJbbb9p9DTmbas:Ohzxekcjjjj94hzkabawfazcFFFrGamcKtVBdbawclfhwaPcufgPmbkkabakfhbalakfhlaxcefgxae9hmbkkaocjdf8Kjjjjbk;YqdXui998Jjjjjbc:qd9Rgv8Kjjjjbavc:Sefcbc;Kbz:vjjjb8AcbhodnadTmbcbhoaiTmbdndnabaeSmbaehrxekavcuadcdtgwadcFFFFi0Ecbyd;u:kjjbHjjjjbbgrBd:SeavceBd:mdaraeawzNjjjb8Akavc:GefcwfcbBdbav9cb83i:Geavc:Gefaradaiavc:Sefz:ojjjbavyd:GehDadci9Ugqcbyd;u:kjjbHjjjjbbheavc:Sefavyd:mdgkcdtfaeBdbavakcefgwBd:mdaecbaqz:vjjjbhxavc:SefawcdtfcuaicdtaicFFFFi0Ecbyd;u:kjjbHjjjjbbgmBdbavakcdfgPBd:mdalc;ebfhsaDheamhwinawalIdbasaeydbgzcwazcw6EcdtfIdbMUdbaeclfheawclfhwaicufgimbkavc:SefaPcdtfcuaqcdtadcFFFF970Ecbyd;u:kjjbHjjjjbbgPBdbdnadci6mbarheaPhwaqhiinawamaeydbcdtfIdbamaeclfydbcdtfIdbMamaecwfydbcdtfIdbMUdbaecxfheawclfhwaicufgimbkkakcifhoalc;ebfhHavc;qbfhOavheavyd:KehAavyd:OehCcbhzcbhwcbhXcehQinaehLcihkarawci2gKcdtfgeydbhsaeclfydbhdabaXcx2fgicwfaecwfydbgYBdbaiclfadBdbaiasBdbaxawfce86bbaOaYBdwaOadBdlaOasBdbaPawcdtfcbBdbdnazTmbcihkaLhiinaOakcdtfaiydbgeBdbakaeaY9haeas9haead9hGGfhkaiclfhiazcufgzmbkkaXcefhXcbhzinaCaAarazaKfcdtfydbcdtgifydbcdtfgYheaDaifgdydbgshidnasTmbdninaeydbawSmeaeclfheaicufgiTmdxbkkaeaYascdtfc98fydbBdbadadydbcufBdbkazcefgzci9hmbkdndnakTmbcuhwJbbbbh8Acbhdavyd:KehYavyd:OehKindndnaDaOadcdtfydbcdtgzfydbgembadcefhdxekadcs0hiamazfgsIdbhEasalcbadcefgdaiEcdtfIdbaHaecwaecw6EcdtfIdbMg3Udba3aE:th3aecdthiaKaYazfydbcdtfheinaPaeydbgzcdtfgsa3asIdbMgEUdbaEa8Aa8AaE9DgsEh8AazawasEhwaeclfheaic98fgimbkkadak9hmbkawcu9hmekaQaq9pmdindnaxaQfRbbmbaQhwxdkaqaQcefgQ9hmbxikkakczakcz6EhzaOheaLhOawcu9hmbkkaocdtavc:Seffc98fhedninaoTmeaeydbcbyd;q:kjjbH:bjjjbbaec98fheaocufhoxbkkavc:qdf8Kjjjjbk;IlevucuaicdtgvaicFFFFi0Egocbyd;u:kjjbHjjjjbbhralalyd9GgwcdtfarBdbalawcefBd9GabarBdbaocbyd;u:kjjbHjjjjbbhralalyd9GgocdtfarBdbalaocefBd9GabarBdlcuadcdtadcFFFFi0Ecbyd;u:kjjbHjjjjbbhralalyd9GgocdtfarBdbalaocefBd9GabarBdwabydbcbavz:vjjjb8Aadci9UhDdnadTmbabydbhoaehladhrinaoalydbcdtfgvavydbcefBdbalclfhlarcufgrmbkkdnaiTmbabydbhlabydlhrcbhvaihoinaravBdbarclfhralydbavfhvalclfhlaocufgombkkdnadci6mbabydlhrabydwhvcbhlinaecwfydbhoaeclfydbhdaraeydbcdtfgwawydbgwcefBdbavawcdtfalBdbaradcdtfgdadydbgdcefBdbavadcdtfalBdbaraocdtfgoaoydbgocefBdbavaocdtfalBdbaecxfheaDalcefgl9hmbkkdnaiTmbabydlheabydbhlinaeaeydbalydb9RBdbalclfhlaeclfheaicufgimbkkkQbabaeadaic;K1jjbz:njjjbkQbabaeadaic;m:jjjbz:njjjbk9DeeuabcFeaicdtz:vjjjbhlcbhbdnadTmbindnalaeydbcdtfgiydbcu9hmbaiabBdbabcefhbkaeclfheadcufgdmbkkabk;:kivuo99lu8Jjjjjbcj;Hb9Rgl8Kjjjjbcbhvalc:m;Gbfcbc;Kbz:vjjjb8AalcuadcdtadcFFFFi0Egocbyd;u:kjjbHjjjjbbgrBd:m9GalceBd;S9Galcwfcbyd:8:kjjbBdbalcb8Pd:0:kjjb83ibalc;W;Gbfcwfcbyd;i:kjjbBdbalcb8Pd;a:kjjb83i;W9Gaicd4hwdndnadmbJFFuFhDJFFuuhqJFFuuhkJFFuFhxJFFuuhmJFFuFhPxekawcdthsaehzincbhiinalaifgHazaifIdbgDaHIdbgxaxaD9EEUdbalc;W;GbfaifgHaDaHIdbgxaxaD9DEUdbaiclfgicx9hmbkazasfhzavcefgvad9hmbkalIdwhqalId;49GhDalIdlhkalId;09GhxalIdbhmalId;W9GhPkdndnadTmbJbbbbJbbjZJbbbbaPam:tgPaPJbbbb9DEgPaxak:tgxaxaP9DEgxaDaq:tgDaDax9DEgD:vaDJbbbb9BEhDawcdthsarhHadhzindndnaDaeIdbam:tNJb;au9eNJbbbZMgx:lJbbb9p9DTmbax:Ohixekcjjjj94hikaicztaicwtcj;GiGVaicsGVc:p;G:dKGcH2c;d;H:WKGcv2c;j:KM;jbGhvdndnaDaeclfIdbak:tNJb;au9eNJbbbZMgx:lJbbb9p9DTmbax:Ohixekcjjjj94hikaicztaicwtcj;GiGVaicsGVc:p;G:dKGcH2c;d;H:WKGcq2cM;j:KMeGavVhvdndnaDaecwfIdbaq:tNJb;au9eNJbbbZMgx:lJbbb9p9DTmbax:Ohixekcjjjj94hikaHavaicztaicwtcj;GiGVaicsGVc:p;G:dKGcH2c;d;H:WKGcC2c:KM;j:KdGVBdbaeasfheaHclfhHazcufgzmbkalcbcj;Gbz:vjjjbhiarhHadheinaiaHydbgzcFrGcx2fgvavydbcefBdbaiazcq4cFrGcx2fgvavydlcefBdlaiazcC4cFrGcx2fgzazydwcefBdwaHclfhHaecufgembxdkkalcbcj;Gbz:vjjjb8AkcbhHcbhzcbhecbhvinalaHfgiydbhsaiazBdbaicwfgwydbhOawavBdbaiclfgiydbhwaiaeBdbasazfhzaOavfhvawaefheaHcxfgHcj;Gb9hmbkcbhHalaocbyd;u:kjjbHjjjjbbgiBd:q9GdnadTmbabhzinazaHBdbazclfhzadaHcefgH9hmbkabhHadhzinalaraHydbgecdtfydbcFrGcx2fgvavydbgvcefBdbaiavcdtfaeBdbaHclfhHazcufgzmbkaihHadhzinalaraHydbgecdtfydbcq4cFrGcx2fgvavydlgvcefBdlabavcdtfaeBdbaHclfhHazcufgzmbkabhHadhzinalaraHydbgecdtfydbcC4cFrGcx2fgvavydwgvcefBdwaiavcdtfaeBdbaHclfhHazcufgzmbkcbhHinabaiydbcdtfaHBdbaiclfhiadaHcefgH9hmbkkclhidninaic98Smealc:m;Gbfaifydbcbyd;q:kjjbH:bjjjbbaic98fhixbkkalcj;Hbf8Kjjjjbk9teiucbcbyd;y:kjjbgeabcifc98GfgbBd;y:kjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;teeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiaeydlBdlaiaeydwBdwaiaeydxBdxaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk:3eedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdxaialBdwaialBdlaialBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabk9teiucbcbyd;y:kjjbgeabcrfc94GfgbBd;y:kjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik9:eiuZbhedndncbyd;y:kjjbgdaecztgi9nmbcuheadai9RcFFifcz4nbcuSmekadhekcbabae9Rcifc98Gcbyd;y:kjjbfgdBd;y:kjjbdnadZbcztge9nmbadae9RcFFifcz4nb8Akkk;Qddbcjwk;mdbbbbdbbblbbbwbbbbbbbebbbdbbblbbbwbbbbbbbbbbbbbbbb4:h9w9N94:P:gW:j9O:ye9Pbbbbbbebbbdbbbebbbdbbbbbbbdbbbbbbbebbbbbbb:l29hZ;69:9kZ;N;76Z;rg97Z;z;o9xZ8J;B85Z;:;u9yZ;b;k9HZ:2;Z9DZ9e:l9mZ59A8KZ:r;T3Z:A:zYZ79OHZ;j4::8::Y:D9V8:bbbb9s:49:Z8R:hBZ9M9M;M8:L;z;o8:;8:PG89q;x:J878R:hQ8::M:B;e87bbbbbbjZbbjZbbjZ:E;V;N8::Y:DsZ9i;H;68:xd;R8:;h0838:;W:NoZbbbb:WV9O8:uf888:9i;H;68:9c9G;L89;n;m9m89;D8Ko8:bbbbf:8tZ9m836ZS:2AZL;zPZZ818EZ9e:lxZ;U98F8:819E;68:FFuuFFuuFFuuFFuFFFuFFFuFbc;mqkzebbbebbbdbbb9G:vbb",t=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if(typeof WebAssembly!="object")return{supported:!1};var n,i=WebAssembly.instantiate(o(e),{}).then(function(g){n=g.instance,n.exports.__wasm_call_ctors(),n.exports.meshopt_encodeVertexVersion(0),n.exports.meshopt_encodeIndexVersion(1)});function o(g){for(var f=new Uint8Array(g.length),y=0;y<g.length;++y){var x=g.charCodeAt(y);f[y]=x>96?x-97:x>64?x-39:x+4}for(var S=0,y=0;y<g.length;++y)f[S++]=f[y]<60?t[f[y]]:(f[y]-60)*64+f[++y];return f.buffer.slice(0,S)}function r(g){if(!g)throw new Error("Assertion failed")}function s(g){return new Uint8Array(g.buffer,g.byteOffset,g.byteLength)}function a(g,f,y,x){var S=n.exports.sbrk,C=S(f.length*4),V=S(y*4),L=new Uint8Array(n.exports.memory.buffer),Z=s(f);L.set(Z,C),x&&x(C,C,f.length,y);var E=g(V,C,f.length,y);L=new Uint8Array(n.exports.memory.buffer);var P=new Uint32Array(y);new Uint8Array(P.buffer).set(L.subarray(V,V+y*4)),Z.set(L.subarray(C,C+f.length*4)),S(C-S(0));for(var W=0;W<f.length;++W)f[W]=P[f[W]];return[P,E]}function c(g,f,y,x){var S=n.exports.sbrk,C=S(y*4),V=S(y*x),L=new Uint8Array(n.exports.memory.buffer);L.set(s(f),V),g(C,V,y,x),L=new Uint8Array(n.exports.memory.buffer);var Z=new Uint32Array(y);return new Uint8Array(Z.buffer).set(L.subarray(C,C+y*4)),S(C-S(0)),Z}function d(g,f,y,x,S){var C=n.exports.sbrk,V=C(f),L=C(x*S),Z=new Uint8Array(n.exports.memory.buffer);Z.set(s(y),L);var E=g(V,f,L,x,S),P=new Uint8Array(E);return P.set(Z.subarray(V,V+E)),C(V-C(0)),P}function u(g){for(var f=0,y=0;y<g.length;++y){var x=g[y];f=f<x?x:f}return f}function h(g,f){if(r(f==2||f==4),f==4)return new Uint32Array(g.buffer,g.byteOffset,g.byteLength/4);var y=new Uint16Array(g.buffer,g.byteOffset,g.byteLength/2);return new Uint32Array(y)}function p(g,f,y,x,S,C,V){var L=n.exports.sbrk,Z=L(y*x),E=L(y*C),P=new Uint8Array(n.exports.memory.buffer);P.set(s(f),E),g(Z,y,x,S,E,V);var W=new Uint8Array(y*x);return W.set(P.subarray(Z,Z+y*x)),L(Z-L(0)),W}return{ready:i,supported:!0,reorderMesh:function(g,f,y){var x=f?y?n.exports.meshopt_optimizeVertexCacheStrip:n.exports.meshopt_optimizeVertexCache:void 0;return a(n.exports.meshopt_optimizeVertexFetchRemap,g,u(g)+1,x)},reorderPoints:function(g,f){return r(g instanceof Float32Array),r(g.length%f==0),r(f>=3),c(n.exports.meshopt_spatialSortRemap,g,g.length/f,f*4)},encodeVertexBuffer:function(g,f,y){r(y>0&&y<=256),r(y%4==0);var x=n.exports.meshopt_encodeVertexBufferBound(f,y);return d(n.exports.meshopt_encodeVertexBuffer,x,g,f,y)},encodeIndexBuffer:function(g,f,y){r(y==2||y==4),r(f%3==0);var x=h(g,y),S=n.exports.meshopt_encodeIndexBufferBound(f,u(x)+1);return d(n.exports.meshopt_encodeIndexBuffer,S,x,f,4)},encodeIndexSequence:function(g,f,y){r(y==2||y==4);var x=h(g,y),S=n.exports.meshopt_encodeIndexSequenceBound(f,u(x)+1);return d(n.exports.meshopt_encodeIndexSequence,S,x,f,4)},encodeGltfBuffer:function(g,f,y,x){var S={ATTRIBUTES:this.encodeVertexBuffer,TRIANGLES:this.encodeIndexBuffer,INDICES:this.encodeIndexSequence};return r(S[x]),S[x](g,f,y)},encodeFilterOct:function(g,f,y,x){return r(y==4||y==8),r(x>=1&&x<=16),p(n.exports.meshopt_encodeFilterOct,g,f,y,x,16)},encodeFilterQuat:function(g,f,y,x){return r(y==8),r(x>=4&&x<=16),p(n.exports.meshopt_encodeFilterQuat,g,f,y,x,16)},encodeFilterExp:function(g,f,y,x,S){r(y>0&&y%4==0),r(x>=1&&x<=24);var C={Separate:0,SharedVector:1,SharedComponent:2,Clamped:3};return p(n.exports.meshopt_encodeFilterExp,g,f,y,x,y,S?C[S]:1)}}}();var Wan=_(T()),zoe=function(){var e="b9H79Tebbbe8Fv9Gbb9Gvuuuuueu9Giuuub9Geueu9Giuuueuikqbeeedddillviebeoweuec:W:Odkr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbeY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVbdE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbiL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtblK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbol79IV9Rbrq:986qdbk;jYi5ud9:du8Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnalTmbcuhoaiRbbgrc;WeGc:Ge9hmbarcsGgwce0mbc9:hoalcufadcd4cbawEgDadfgrcKcaawEgqaraq0Egk6mbaicefhxcj;abad9Uc;WFbGcjdadca0EhmaialfgPar9Rgoadfhsavaoadz1jjjbgzceVhHcbhOdndninaeaO9nmeaPax9RaD6mdamaeaO9RaOamfgoae6EgAcsfglc9WGhCabaOad2fhXaAcethQaxaDfhiaOaeaoaeao6E9RhLalcl4cifcd4hKazcj;cbfaAfhYcbh8AazcjdfhEaHh3incbhodnawTmbaxa8Acd4fRbbhokaocFeGh5cbh8Eazcj;cbfhqinaih8Fdndndndna5a8Ecet4ciGgoc9:fPdebdkaPa8F9RaA6mrazcj;cbfa8EaA2fa8FaAz1jjjb8Aa8FaAfhixdkazcj;cbfa8EaA2fcbaAz:jjjjb8Aa8FhixekaPa8F9RaK6mva8FaKfhidnaCTmbaPai9RcK6mbaocdtc:q1jjbfcj1jjbawEhaczhrcbhlinargoc9Wfghaqfhrdndndndndndnaaa8Fahco4fRbbalcoG4ciGcdtfydbPDbedvivvvlvkar9cb83bbarcwf9cb83bbxlkarcbaiRbdai8Xbb9c:c:qj:bw9:9c:q;c1:I1e:d9c:b:c:e1z9:gg9cjjjjjz:dg8J9qE86bbaqaofgrcGfag9c8F1:NghcKtc8F91aicdfa8J9c8N1:Nfg8KRbbG86bbarcVfcba8KahcjeGcr4fghRbbag9cjjjjjl:dg8J9qE86bbarc7fcbaha8J9c8L1:NfghRbbag9cjjjjjd:dg8J9qE86bbarctfcbaha8J9c8K1:NfghRbbag9cjjjjje:dg8J9qE86bbarc91fcbaha8J9c8J1:NfghRbbag9cjjjj;ab:dg8J9qE86bbarc4fcbaha8J9cg1:NfghRbbag9cjjjja:dg8J9qE86bbarc93fcbaha8J9ch1:NfghRbbag9cjjjjz:dgg9qE86bbarc94fcbahag9ca1:NfghRbbai8Xbe9c:c:qj:bw9:9c:q;c1:I1e:d9c:b:c:e1z9:gg9cjjjjjz:dg8J9qE86bbarc95fag9c8F1:NgicKtc8F91aha8J9c8N1:NfghRbbG86bbarc96fcbahaicjeGcr4fgiRbbag9cjjjjjl:dg8J9qE86bbarc97fcbaia8J9c8L1:NfgiRbbag9cjjjjjd:dg8J9qE86bbarc98fcbaia8J9c8K1:NfgiRbbag9cjjjjje:dg8J9qE86bbarc99fcbaia8J9c8J1:NfgiRbbag9cjjjj;ab:dg8J9qE86bbarc9:fcbaia8J9cg1:NfgiRbbag9cjjjja:dg8J9qE86bbarcufcbaia8J9ch1:NfgiRbbag9cjjjjz:dgg9qE86bbaiag9ca1:NfhixikaraiRblaiRbbghco4g8Ka8KciSg8KE86bbaqaofgrcGfaiclfa8Kfg8KRbbahcl4ciGg8La8LciSg8LE86bbarcVfa8Ka8Lfg8KRbbahcd4ciGg8La8LciSg8LE86bbarc7fa8Ka8Lfg8KRbbahciGghahciSghE86bbarctfa8Kahfg8KRbbaiRbeghco4g8La8LciSg8LE86bbarc91fa8Ka8Lfg8KRbbahcl4ciGg8La8LciSg8LE86bbarc4fa8Ka8Lfg8KRbbahcd4ciGg8La8LciSg8LE86bbarc93fa8Ka8Lfg8KRbbahciGghahciSghE86bbarc94fa8Kahfg8KRbbaiRbdghco4g8La8LciSg8LE86bbarc95fa8Ka8Lfg8KRbbahcl4ciGg8La8LciSg8LE86bbarc96fa8Ka8Lfg8KRbbahcd4ciGg8La8LciSg8LE86bbarc97fa8Ka8Lfg8KRbbahciGghahciSghE86bbarc98fa8KahfghRbbaiRbigico4g8Ka8KciSg8KE86bbarc99faha8KfghRbbaicl4ciGg8Ka8KciSg8KE86bbarc9:faha8KfghRbbaicd4ciGg8Ka8KciSg8KE86bbarcufaha8KfgrRbbaiciGgiaiciSgiE86bbaraifhixdkaraiRbwaiRbbghcl4g8Ka8KcsSg8KE86bbaqaofgrcGfaicwfa8Kfg8KRbbahcsGghahcsSghE86bbarcVfa8KahfghRbbaiRbeg8Kcl4g8La8LcsSg8LE86bbarc7faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarctfaha8KfghRbbaiRbdg8Kcl4g8La8LcsSg8LE86bbarc91faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc4faha8KfghRbbaiRbig8Kcl4g8La8LcsSg8LE86bbarc93faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc94faha8KfghRbbaiRblg8Kcl4g8La8LcsSg8LE86bbarc95faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc96faha8KfghRbbaiRbvg8Kcl4g8La8LcsSg8LE86bbarc97faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc98faha8KfghRbbaiRbog8Kcl4g8La8LcsSg8LE86bbarc99faha8LfghRbba8KcsGg8Ka8KcsSg8KE86bbarc9:faha8KfghRbbaiRbrgicl4g8Ka8KcsSg8KE86bbarcufaha8KfgrRbbaicsGgiaicsSgiE86bbaraifhixekarai8Pbb83bbarcwfaicwf8Pbb83bbaiczfhikdnaoaC9pmbalcdfhlaoczfhraPai9RcL0mekkaoaC6moaimexokaCmva8FTmvkaqaAfhqa8Ecefg8Ecl9hmbkdndndndnawTmbasa8Acd4fRbbgociGPlbedrbkaATmdaza8Afh8Fazcj;cbfhhcbh8EaEhaina8FRbbhraahocbhlinaoahalfRbbgqce4cbaqceG9R7arfgr86bbaoadfhoaAalcefgl9hmbkaacefhaa8Fcefh8FahaAfhha8Ecefg8Ecl9hmbxikkaATmeaza8Afhaazcj;cbfhhcbhoceh8EaYh8FinaEaofhlaa8Vbbhrcbhoinala8FaofRbbcwtahaofRbbgqVc;:FiGce4cbaqceG9R7arfgr87bbaladfhlaLaocefgofmbka8FaQfh8FcdhoaacdfhaahaQfhha8EceGhlcbh8EalmbxdkkaATmbcbaocl49Rh8Eaza8AfRbbhqcwhoa3hlinalRbbaotaqVhqalcefhlaocwfgoca9hmbkcbhhaEh8FaYhainazcj;cbfahfRbbhrcwhoaahlinalRbbaotarVhralaAfhlaocwfgoca9hmbkara8E93aq7hqcbhoa8Fhlinalaqao486bbalcefhlaocwfgoca9hmbka8Fadfh8FaacefhaahcefghaA9hmbkkaEclfhEa3clfh3a8Aclfg8Aad6mbkaXazcjdfaAad2z1jjjb8AazazcjdfaAcufad2fadz1jjjb8AaAaOfhOaihxaimbkc9:hoxdkcbc99aPax9RakSEhoxekc9:hokavcj;kbf8Kjjjjbaok;cseHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgwce0mbavc;abfcFecjez:jjjjb8AavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhDaicefgqarfhidnaeTmbcmcsawceSEhkcbhxcbhmcbhPcbhwcbhlindnaiaD9nmbc9:hoxikdndnaqRbbgoc;Ve0mbavc;abfalaocu7gscl4fcsGcitfgzydlhrazydbhzdnaocsGgHak9pmbavawasfcsGcdtfydbaxaHEhoaHThsdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkaxasfhxcdhHavawcdtfaoBdbawasfhwcehsalhOxdkdndnaHcsSmbaHc987aHamffcefhoxekaicefhoai8SbbgHcFeGhsdndnaHcu9mmbaohixekaicvfhiascFbGhscrhHdninao8SbbgOcFbGaHtasVhsaOcu9kmeaocefhoaHcrfgHc8J9hmbxdkkaocefhikasce4cbasceG9R7amfhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhHavawcdtfaoBdbcehsawcefhwalhOaohmxekdnaocpe0mbaxcefgHavawaDaocsGfRbbgocl49RcsGcdtfydbaocz6gzEhravawao9RcsGcdtfydbaHazfgAaocsGgHEhoaHThCdndnadcd9hmbabaPcetfgHax87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHaxBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfaxBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgOaxBdlaOarBdbavawazfgwcsGcdtfaoBdbalcefcsGhOawaCfhwaxhzaAaCfhxxekaxcbaiRbbgOEgzaoc;:eSgHfhraOcsGhCaOcl4hAdndnaOcs0mbarcefhoxekarhoavawaA9RcsGcdtfydbhrkdndnaCmbaocefhxxekaohxavawaO9RcsGcdtfydbhokdndnaHTmbaicefhHxekaicdfhHai8SbegscFeGhzdnascu9kmbaicofhXazcFbGhzcrhidninaH8SbbgscFbGaitazVhzascu9kmeaHcefhHaicrfgic8J9hmbkaXhHxekaHcefhHkazce4cbazceG9R7amfgmhzkdndnaAcsSmbaHhsxekaHcefhsaH8SbbgicFeGhrdnaicu9kmbaHcvfhXarcFbGhrcrhidninas8SbbgHcFbGaitarVhraHcu9kmeascefhsaicrfgic8J9hmbkaXhsxekascefhskarce4cbarceG9R7amfgmhrkdndnaCcsSmbashixekascefhias8SbbgocFeGhHdnaocu9kmbascvfhXaHcFbGhHcrhodninai8SbbgscFbGaotaHVhHascu9kmeaicefhiaocrfgoc8J9hmbkaXhixekaicefhikaHce4cbaHceG9R7amfgmhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfazBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgXazBdlaXarBdbavawaOcz6aAcsSVfgwcsGcdtfaoBdbawaCTaCcsSVfhwalcefcsGhOkaqcefhqavc;abfaOcitfgOarBdlaOaoBdbavc;abfalasfcsGcitfgraoBdlarazBdbawcsGhwalaHfcsGhlaPcifgPae6mbkkcbc99aiaDSEhokavc;aef8Kjjjjbaok:clevu8Jjjjjbcz9Rhvdnaecvfal9nmbc9:skdnaiRbbc;:eGc;qeSmbcuskav9cb83iwaicefhoaialfc98fhrdnaeTmbdnadcdSmbcbhwindnaoar6mbc9:skaocefhlao8SbbgicFeGhddndnaicu9mmbalhoxekaocvfhoadcFbGhdcrhidninal8SbbgDcFbGaitadVhdaDcu9kmealcefhlaicrfgic8J9hmbxdkkalcefhokabawcdtfadc8Etc8F91adcd47avcwfadceGcdtVglydbfgiBdbalaiBdbawcefgwae9hmbxdkkcbhwindnaoar6mbc9:skaocefhlao8SbbgicFeGhddndnaicu9mmbalhoxekaocvfhoadcFbGhdcrhidninal8SbbgDcFbGaitadVhdaDcu9kmealcefhlaicrfgic8J9hmbxdkkalcefhokabawcetfadc8Etc8F91adcd47avcwfadceGcdtVglydbfgi87ebalaiBdbawcefgwae9hmbkkcbc99aoarSEk:Lvoeue99dud99eud99dndnadcl9hmbaeTmeindndnabcdfgd8Sbb:Yab8Sbbgi:Ygl:l:tabcefgv8Sbbgo:Ygr:l:tgwJbb;:9cawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai86bbdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad86bbdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad86bbabclfhbaecufgembxdkkaeTmbindndnabclfgd8Ueb:Yab8Uebgi:Ygl:l:tabcdfgv8Uebgo:Ygr:l:tgwJb;:FSawawNJbbbbawawJbbbb9GgDEgq:mgkaqaicb9iEalMgwawNakaqaocb9iEarMgqaqNMM:r:vglNJbbbZJbbb:;aDEMgr:lJbbb9p9DTmbar:Ohixekcjjjj94hikadai87ebdndnaqalNJbbbZJbbb:;aqJbbbb9GEMgq:lJbbb9p9DTmbaq:Ohdxekcjjjj94hdkavad87ebdndnawalNJbbbZJbbb:;awJbbbb9GEMgw:lJbbb9p9DTmbaw:Ohdxekcjjjj94hdkabad87ebabcwfhbaecufgembkkk;oiliui99iue99dnaeTmbcbhiabhlindndnJ;Zl81Zalcof8UebgvciV:Y:vgoal8Ueb:YNgrJb;:FSNJbbbZJbbb:;arJbbbb9GEMgw:lJbbb9p9DTmbaw:OhDxekcjjjj94hDkalclf8Uebhqalcdf8UebhkabaiavcefciGfcetfaD87ebdndnaoak:YNgwJb;:FSNJbbbZJbbb:;awJbbbb9GEMgx:lJbbb9p9DTmbax:OhDxekcjjjj94hDkabaiavciGfgkcd7cetfaD87ebdndnaoaq:YNgoJb;:FSNJbbbZJbbb:;aoJbbbb9GEMgx:lJbbb9p9DTmbax:OhDxekcjjjj94hDkabaiavcufciGfcetfaD87ebdndnJbbjZararN:tawawN:taoaoN:tgrJbbbbarJbbbb9GE:rJb;:FSNJbbbZMgr:lJbbb9p9DTmbar:Ohvxekcjjjj94hvkabakcetfav87ebalcwfhlaiclfhiaecufgembkkk9mbdnadcd4ae2gdTmbinababydbgecwtcw91:Yaece91cjjj98Gcjjj;8if::NUdbabclfhbadcufgdmbkkk9teiucbcbyd:K1jjbgeabcifc98GfgbBd:K1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;teeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiaeydlBdlaiaeydwBdwaiaeydxBdxaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk:3eedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdxaialBdwaialBdlaialBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabkk81dbcjwk8Kbbbbdbbblbbbwbbbbbbbebbbdbbblbbbwbbbbc:Kwkl8WNbb",t="b9H79TebbbeKl9Gbb9Gvuuuuueu9Giuuub9Geueuikqbbebeedddilve9Weeeviebeoweuec:q:6dkr;leDo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9KW9J9V9KW9wWVtW949c919M9MWVbdY9TW79O9V9Wt9F9KW9J9V9KW69U9KW949c919M9MWVblE9TW79O9V9Wt9F9KW9J9V9KW69U9KW949tWG91W9U9JWbvL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9p9JtboK9TW79O9V9Wt9F9KW9J9V9KWS9P2tWV9r919HtbrL9TW79O9V9Wt9F9KW9J9V9KWS9P2tWVT949Wbwl79IV9RbDq;X9Mqlbzik9:evu8Jjjjjbcz9Rhbcbheincbhdcbhiinabcwfadfaicjuaead4ceGglE86bbaialfhiadcefgdcw9hmbkaec:q:yjjbfai86bbaecitc:q1jjbfab8Piw83ibaecefgecjd9hmbkk:183lYud97dur978Jjjjjbcj;kb9Rgv8Kjjjjbc9:hodnalTmbcuhoaiRbbgrc;WeGc:Ge9hmbarcsGgwce0mbc9:hoalcufadcd4cbawEgDadfgrcKcaawEgqaraq0Egk6mbaicefhxavaialfgmar9Rgoad;8qbbcj;abad9Uc;WFbGcjdadca0EhPdndndnadTmbaoadfhscbhzinaeaz9nmdamax9RaD6miabazad2fhHaxaDfhOaPaeaz9RazaPfae6EgAcsfgocl4cifcd4hCavcj;cbfaoc9WGgXcetfhQavcj;cbfaXci2fhLavcj;cbfaXfhKcbhYaoc;ab6h8AincbhodnawTmbaxaYcd4fRbbhokaocFeGhEcbh3avcj;cbfh5indndndndnaEa3cet4ciGgoc9:fPdebdkamaO9RaX6mwavcj;cbfa3aX2faOaX;8qbbaOaAfhOxdkavcj;cbfa3aX2fcbaX;8kbxekamaO9RaC6moaoclVcbawEhraOaCfhocbhidna8Ambamao9Rc;Gb6mbcbhlina5alfhidndndndndndnaOalco4fRbbgqciGarfPDbedibledibkaipxbbbbbbbbbbbbbbbbpklbxlkaiaopbblaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLg8Ecdp:mea8EpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9og8Fpxiiiiiiiiiiiiiiiip8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaoclffahc:q:yjjbfRbbfhoxikaiaopbbwaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9og8Fpxssssssssssssssssp8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaocwffahc:q:yjjbfRbbfhoxdkaiaopbbbpklbaoczfhoxekaiaopbbdaoRbbgacitc:q1jjbfpbibaac:q:yjjbfRbbgapsaoRbeghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPpklbaaaocdffahc:q:yjjbfRbbfhokdndndndndndnaqcd4ciGarfPDbedibledibkaiczfpxbbbbbbbbbbbbbbbbpklbxlkaiczfaopbblaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLg8Ecdp:mea8EpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9og8Fpxiiiiiiiiiiiiiiiip8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaoclffahc:q:yjjbfRbbfhoxikaiczfaopbbwaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9og8Fpxssssssssssssssssp8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaocwffahc:q:yjjbfRbbfhoxdkaiczfaopbbbpklbaoczfhoxekaiczfaopbbdaoRbbgacitc:q1jjbfpbibaac:q:yjjbfRbbgapsaoRbeghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPpklbaaaocdffahc:q:yjjbfRbbfhokdndndndndndnaqcl4ciGarfPDbedibledibkaicafpxbbbbbbbbbbbbbbbbpklbxlkaicafaopbblaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLg8Ecdp:mea8EpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9og8Fpxiiiiiiiiiiiiiiiip8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaoclffahc:q:yjjbfRbbfhoxikaicafaopbbwaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9og8Fpxssssssssssssssssp8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaaaocwffahc:q:yjjbfRbbfhoxdkaicafaopbbbpklbaoczfhoxekaicafaopbbdaoRbbgacitc:q1jjbfpbibaac:q:yjjbfRbbgapsaoRbeghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPpklbaaaocdffahc:q:yjjbfRbbfhokdndndndndndnaqco4arfPDbedibledibkaic8Wfpxbbbbbbbbbbbbbbbbpklbxlkaic8Wfaopbblaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLg8Ecdp:mea8EpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9og8Fpxiiiiiiiiiiiiiiiip8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngicitc:q1jjbfpbibaic:q:yjjbfRbbgipsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Ngqcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaiaoclffaqc:q:yjjbfRbbfhoxikaic8Wfaopbbwaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9og8Fpxssssssssssssssssp8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngicitc:q1jjbfpbibaic:q:yjjbfRbbgipsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Ngqcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spklbaiaocwffaqc:q:yjjbfRbbfhoxdkaic8Wfaopbbbpklbaoczfhoxekaic8WfaopbbdaoRbbgicitc:q1jjbfpbibaic:q:yjjbfRbbgipsaoRbegqcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPpklbaiaocdffaqc:q:yjjbfRbbfhokalc;abfhialcjefaX0meaihlamao9Rc;Fb0mbkkdnaiaX9pmbaici4hlinamao9RcK6mwa5aifhqdndndndndndnaOaico4fRbbalcoG4ciGarfPDbedibledibkaqpxbbbbbbbbbbbbbbbbpkbbxlkaqaopbblaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLg8Ecdp:mea8EpmbzeHdOiAlCvXoQrLpxiiiiiiiiiiiiiiiip9og8Fpxiiiiiiiiiiiiiiiip8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spkbbaaaoclffahc:q:yjjbfRbbfhoxikaqaopbbwaopbbbg8Eclp:mea8EpmbzeHdOiAlCvXoQrLpxssssssssssssssssp9og8Fpxssssssssssssssssp8Jg8Ep5b9cjF;8;4;W;G;ab9:9cU1:Ngacitc:q1jjbfpbibaac:q:yjjbfRbbgapsa8Ep5e9cjF;8;4;W;G;ab9:9cU1:Nghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPa8Fa8Ep9spkbbaaaocwffahc:q:yjjbfRbbfhoxdkaqaopbbbpkbbaoczfhoxekaqaopbbdaoRbbgacitc:q1jjbfpbibaac:q:yjjbfRbbgapsaoRbeghcitc:q1jjbfpbibp9UpmbedilvorzHOACXQLpPpkbbaaaocdffahc:q:yjjbfRbbfhokalcdfhlaiczfgiaX6mbkkaohOaoTmoka5aXfh5a3cefg3cl9hmbkdndndndnawTmbasaYcd4fRbbglciGPlbedwbkaXTmdavcjdfaYfhlavaYfpbdbhgcbhoinalavcj;cbfaofpblbg8JaKaofpblbg8KpmbzeHdOiAlCvXoQrLg8LaQaofpblbg8MaLaofpblbg8NpmbzeHdOiAlCvXoQrLgypmbezHdiOAlvCXorQLg8Ecep9Ta8Epxeeeeeeeeeeeeeeeeg8Fp9op9Hp9rg8Eagp9Uggp9Abbbaladfglaga8Ea8Epmlvorlvorlvorlvorp9Uggp9Abbbaladfglaga8Ea8EpmwDqkwDqkwDqkwDqkp9Uggp9Abbbaladfglaga8Ea8EpmxmPsxmPsxmPsxmPsp9Uggp9Abbbaladfglaga8LaypmwDKYqk8AExm35Ps8E8Fg8Ecep9Ta8Ea8Fp9op9Hp9rg8Ep9Uggp9Abbbaladfglaga8Ea8Epmlvorlvorlvorlvorp9Uggp9Abbbaladfglaga8Ea8EpmwDqkwDqkwDqkwDqkp9Uggp9Abbbaladfglaga8Ea8EpmxmPsxmPsxmPsxmPsp9Uggp9Abbbaladfglaga8Ja8KpmwKDYq8AkEx3m5P8Es8Fg8Ja8Ma8NpmwKDYq8AkEx3m5P8Es8Fg8KpmbezHdiOAlvCXorQLg8Ecep9Ta8Ea8Fp9op9Hp9rg8Ep9Uggp9Abbbaladfglaga8Ea8Epmlvorlvorlvorlvorp9Uggp9Abbbaladfglaga8Ea8EpmwDqkwDqkwDqkwDqkp9Uggp9Abbbaladfglaga8Ea8EpmxmPsxmPsxmPsxmPsp9Uggp9Abbbaladfglaga8Ja8KpmwDKYqk8AExm35Ps8E8Fg8Ecep9Ta8Ea8Fp9op9Hp9rg8Ep9Ug8Fp9Abbbaladfgla8Fa8Ea8Epmlvorlvorlvorlvorp9Ug8Fp9Abbbaladfgla8Fa8Ea8EpmwDqkwDqkwDqkwDqkp9Ug8Fp9Abbbaladfgla8Fa8Ea8EpmxmPsxmPsxmPsxmPsp9Uggp9AbbbaladfhlaoczfgoaX6mbxikkaXTmeavcjdfaYfhlavaYfpbdbhgcbhoinalavcj;cbfaofpblbg8JaKaofpblbg8KpmbzeHdOiAlCvXoQrLg8LaQaofpblbg8MaLaofpblbg8NpmbzeHdOiAlCvXoQrLgypmbezHdiOAlvCXorQLg8Ecep:nea8Epxebebebebebebebebg8Fp9op:bep9rg8Eagp:oeggp9Abbbaladfglaga8Ea8Epmlvorlvorlvorlvorp:oeggp9Abbbaladfglaga8Ea8EpmwDqkwDqkwDqkwDqkp:oeggp9Abbbaladfglaga8Ea8EpmxmPsxmPsxmPsxmPsp:oeggp9Abbbaladfglaga8LaypmwDKYqk8AExm35Ps8E8Fg8Ecep:nea8Ea8Fp9op:bep9rg8Ep:oeggp9Abbbaladfglaga8Ea8Epmlvorlvorlvorlvorp:oeggp9Abbbaladfglaga8Ea8EpmwDqkwDqkwDqkwDqkp:oeggp9Abbbaladfglaga8Ea8EpmxmPsxmPsxmPsxmPsp:oeggp9Abbbaladfglaga8Ja8KpmwKDYq8AkEx3m5P8Es8Fg8Ja8Ma8NpmwKDYq8AkEx3m5P8Es8Fg8KpmbezHdiOAlvCXorQLg8Ecep:nea8Ea8Fp9op:bep9rg8Ep:oeggp9Abbbaladfglaga8Ea8Epmlvorlvorlvorlvorp:oeggp9Abbbaladfglaga8Ea8EpmwDqkwDqkwDqkwDqkp:oeggp9Abbbaladfglaga8Ea8EpmxmPsxmPsxmPsxmPsp:oeggp9Abbbaladfglaga8Ja8KpmwDKYqk8AExm35Ps8E8Fg8Ecep:nea8Ea8Fp9op:bep9rg8Ep:oeg8Fp9Abbbaladfgla8Fa8Ea8Epmlvorlvorlvorlvorp:oeg8Fp9Abbbaladfgla8Fa8Ea8EpmwDqkwDqkwDqkwDqkp:oeg8Fp9Abbbaladfgla8Fa8Ea8EpmxmPsxmPsxmPsxmPsp:oeggp9AbbbaladfhlaoczfgoaX6mbxdkkaXTmbcbhocbalcl4gl9Rc8FGhiavcjdfaYfhravaYfpbdbh8Finaravcj;cbfaofpblbggaKaofpblbg8JpmbzeHdOiAlCvXoQrLg8KaQaofpblbg8LaLaofpblbg8MpmbzeHdOiAlCvXoQrLg8NpmbezHdiOAlvCXorQLg8Eaip:Rea8Ealp:Sep9qg8Ea8Fp9rg8Fp9Abbbaradfgra8Fa8Ea8Epmlvorlvorlvorlvorp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmwDqkwDqkwDqkwDqkp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmxmPsxmPsxmPsxmPsp9rg8Fp9Abbbaradfgra8Fa8Ka8NpmwDKYqk8AExm35Ps8E8Fg8Eaip:Rea8Ealp:Sep9qg8Ep9rg8Fp9Abbbaradfgra8Fa8Ea8Epmlvorlvorlvorlvorp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmwDqkwDqkwDqkwDqkp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmxmPsxmPsxmPsxmPsp9rg8Fp9Abbbaradfgra8Faga8JpmwKDYq8AkEx3m5P8Es8Fgga8La8MpmwKDYq8AkEx3m5P8Es8Fg8JpmbezHdiOAlvCXorQLg8Eaip:Rea8Ealp:Sep9qg8Ep9rg8Fp9Abbbaradfgra8Fa8Ea8Epmlvorlvorlvorlvorp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmwDqkwDqkwDqkwDqkp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmxmPsxmPsxmPsxmPsp9rg8Fp9Abbbaradfgra8Faga8JpmwDKYqk8AExm35Ps8E8Fg8Eaip:Rea8Ealp:Sep9qg8Ep9rg8Fp9Abbbaradfgra8Fa8Ea8Epmlvorlvorlvorlvorp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmwDqkwDqkwDqkwDqkp9rg8Fp9Abbbaradfgra8Fa8Ea8EpmxmPsxmPsxmPsxmPsp9rg8Fp9AbbbaradfhraoczfgoaX6mbkkaYclfgYad6mbkaHavcjdfaAad2;8qbbavavcjdfaAcufad2fad;8qbbaAazfhzc9:hoaOhxaOmbxlkkaeTmbaDalfhrcbhocuhlinaralaD9RglfaD6mdaPaeao9RaoaPfae6Eaofgoae6mbkaial9Rhxkcbc99amax9RakSEhoxekc9:hokavcj;kbf8Kjjjjbaokwbz:bjjjbk::seHu8Jjjjjbc;ae9Rgv8Kjjjjbc9:hodnaeci9UgrcHfal0mbcuhoaiRbbgwc;WeGc;Ge9hmbawcsGgwce0mbavc;abfcFecje;8kbavcUf9cu83ibavc8Wf9cu83ibavcyf9cu83ibavcaf9cu83ibavcKf9cu83ibavczf9cu83ibav9cu83iwav9cu83ibaialfc9WfhDaicefgqarfhidnaeTmbcmcsawceSEhkcbhxcbhmcbhPcbhwcbhlindnaiaD9nmbc9:hoxikdndnaqRbbgoc;Ve0mbavc;abfalaocu7gscl4fcsGcitfgzydlhrazydbhzdnaocsGgHak9pmbavawasfcsGcdtfydbaxaHEhoaHThsdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkaxasfhxcdhHavawcdtfaoBdbawasfhwcehsalhOxdkdndnaHcsSmbaHc987aHamffcefhoxekaicefhoai8SbbgHcFeGhsdndnaHcu9mmbaohixekaicvfhiascFbGhscrhHdninao8SbbgOcFbGaHtasVhsaOcu9kmeaocefhoaHcrfgHc8J9hmbxdkkaocefhikasce4cbasceG9R7amfhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhHavawcdtfaoBdbcehsawcefhwalhOaohmxekdnaocpe0mbaxcefgHavawaDaocsGfRbbgocl49RcsGcdtfydbaocz6gzEhravawao9RcsGcdtfydbaHazfgAaocsGgHEhoaHThCdndnadcd9hmbabaPcetfgHax87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHaxBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfaxBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgOaxBdlaOarBdbavawazfgwcsGcdtfaoBdbalcefcsGhOawaCfhwaxhzaAaCfhxxekaxcbaiRbbgOEgzaoc;:eSgHfhraOcsGhCaOcl4hAdndnaOcs0mbarcefhoxekarhoavawaA9RcsGcdtfydbhrkdndnaCmbaocefhxxekaohxavawaO9RcsGcdtfydbhokdndnaHTmbaicefhHxekaicdfhHai8SbegscFeGhzdnascu9kmbaicofhXazcFbGhzcrhidninaH8SbbgscFbGaitazVhzascu9kmeaHcefhHaicrfgic8J9hmbkaXhHxekaHcefhHkazce4cbazceG9R7amfgmhzkdndnaAcsSmbaHhsxekaHcefhsaH8SbbgicFeGhrdnaicu9kmbaHcvfhXarcFbGhrcrhidninas8SbbgHcFbGaitarVhraHcu9kmeascefhsaicrfgic8J9hmbkaXhsxekascefhskarce4cbarceG9R7amfgmhrkdndnaCcsSmbashixekascefhias8SbbgocFeGhHdnaocu9kmbascvfhXaHcFbGhHcrhodninai8SbbgscFbGaotaHVhHascu9kmeaicefhiaocrfgoc8J9hmbkaXhixekaicefhikaHce4cbaHceG9R7amfgmhokdndnadcd9hmbabaPcetfgHaz87ebaHclfao87ebaHcdfar87ebxekabaPcdtfgHazBdbaHcwfaoBdbaHclfarBdbkcdhsavawcdtfazBdbavawcefgwcsGcdtfarBdbcihHavc;abfalcitfgXazBdlaXarBdbavawaOcz6aAcsSVfgwcsGcdtfaoBdbawaCTaCcsSVfhwalcefcsGhOkaqcefhqavc;abfaOcitfgOarBdlaOaoBdbavc;abfalasfcsGcitfgraoBdlarazBdbawcsGhwalaHfcsGhlaPcifgPae6mbkkcbc99aiaDSEhokavc;aef8Kjjjjbaok:clevu8Jjjjjbcz9Rhvdnaecvfal9nmbc9:skdnaiRbbc;:eGc;qeSmbcuskav9cb83iwaicefhoaialfc98fhrdnaeTmbdnadcdSmbcbhwindnaoar6mbc9:skaocefhlao8SbbgicFeGhddndnaicu9mmbalhoxekaocvfhoadcFbGhdcrhidninal8SbbgDcFbGaitadVhdaDcu9kmealcefhlaicrfgic8J9hmbxdkkalcefhokabawcdtfadc8Etc8F91adcd47avcwfadceGcdtVglydbfgiBdbalaiBdbawcefgwae9hmbxdkkcbhwindnaoar6mbc9:skaocefhlao8SbbgicFeGhddndnaicu9mmbalhoxekaocvfhoadcFbGhdcrhidninal8SbbgDcFbGaitadVhdaDcu9kmealcefhlaicrfgic8J9hmbxdkkalcefhokabawcetfadc8Etc8F91adcd47avcwfadceGcdtVglydbfgi87ebalaiBdbawcefgwae9hmbkkcbc99aoarSEk:SPliuo97eue978Jjjjjbca9Rhiaec98Ghldndnadcl9hmbdnalTmbcbhvabhdinadadpbbbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDpxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpkbbadczfhdavclfgval6mbkkalaeSmeaipxbbbbbbbbbbbbbbbbgqpklbaiabalcdtfgdaeciGglcdtgv;8qbbdnalTmbaiaipblbgocKp:RecKp:Sep;6egraocwp:RecKp:Sep;6earp;Geaoczp:RecKp:Sep;6egwp;Gep;Kep;LegDaqp:2egqarpxbbbjbbbjbbbjbbbjgkp9op9rp;Kegrpxbb;:9cbb;:9cbb;:9cbb;:9cararp;MeaDaDp;Meawaqawakp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFbbbFbbbFbbbFbbbp9oaopxbbbFbbbFbbbFbbbFp9op9qarawp;Meaqp;Kecwp:RepxbFbbbFbbbFbbbFbbp9op9qaDawp;Meaqp;Keczp:RepxbbFbbbFbbbFbbbFbp9op9qpklbkadaiav;8qbbskdnalTmbcbhvabhdinadczfgxaxpbbbgopxbbbbbbFFbbbbbbFFgkp9oadpbbbgDaopmbediwDqkzHOAKY8AEgwczp:Reczp:Sep;6egraDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;7eawczp:Sep;6egwp;Gearp;Gep;Kep;Legopxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegrpxb;:FSb;:FSb;:FSb;:FSararp;Meaoaop;Meawaqawamp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFFbbFFbbFFbbFFbbp9oaoawp;Meaqp;Keczp:Rep9qgoarawp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogrpmwDKYqk8AExm35Ps8E8Fp9qpkbbadaDakp9oaoarpmbezHdiOAlvCXorQLp9qpkbbadcafhdavclfgval6mbkkalaeSmbaiczfpxbbbbbbbbbbbbbbbbgopklbaiaopklbaiabalcitfgdaeciGglcitgv;8qbbdnalTmbaiaipblzgopxbbbbbbFFbbbbbbFFgkp9oaipblbgDaopmbediwDqkzHOAKY8AEgwczp:Reczp:Sep;6egraDaopmlvorxmPsCXQL358E8FpxFubbFubbFubbFubbp9op;7eawczp:Sep;6egwp;Gearp;Gep;Kep;Legopxbbbbbbbbbbbbbbbbp:2egqarpxbbbjbbbjbbbjbbbjgmp9op9rp;Kegrpxb;:FSb;:FSb;:FSb;:FSararp;Meaoaop;Meawaqawamp9op9rp;Kegrarp;Mep;Kep;Kep;Jep;Negwp;Mepxbbn0bbn0bbn0bbn0gqp;KepxFFbbFFbbFFbbFFbbp9oaoawp;Meaqp;Keczp:Rep9qgoarawp;Meaqp;KepxFFbbFFbbFFbbFFbbp9ogrpmwDKYqk8AExm35Ps8E8Fp9qpklzaiaDakp9oaoarpmbezHdiOAlvCXorQLp9qpklbkadaiav;8qbbkk:oDllue97euv978Jjjjjbc8W9Rhidnaec98GglTmbcbhvabhoinaiaopbbbgraoczfgwpbbbgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklbaopxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaDakp;Mearp;Keamp9oaqakp;Mearp;Keczp:Rep9qgkpmbezHdiOAlvCXorQLgrp5baipblbpEb:T:j83ibaocwfarp5eaipblbpEe:T:j83ibawaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblbpEd:T:j83ibaocKfakp5eaipblbpEi:T:j83ibaocafhoavclfgval6mbkkdnalaeSmbaiczfpxbbbbbbbbbbbbbbbbgkpklbaiakpklbaiabalcitfgoaeciGgvcitgw;8qbbdnavTmbaiaipblbgraipblzgDpmlvorxmPsCXQL358E8Fgqczp:Segkclp:RepklaaipxbbjZbbjZbbjZbbjZpx;Zl81Z;Zl81Z;Zl81Z;Zl81Zakpxibbbibbbibbbibbbp9qp;6ep;NegkaraDpmbediwDqkzHOAKY8AEgrczp:Reczp:Sep;6ep;MegDaDp;Meakarczp:Sep;6ep;Megxaxp;Meakaqczp:Reczp:Sep;6ep;Megqaqp;Mep;Kep;Kep;Lepxbbbbbbbbbbbbbbbbp:4ep;Jepxb;:FSb;:FSb;:FSb;:FSgkp;Mepxbbn0bbn0bbn0bbn0grp;KepxFFbbFFbbFFbbFFbbgmp9oaxakp;Mearp;Keczp:Rep9qgxaDakp;Mearp;Keamp9oaqakp;Mearp;Keczp:Rep9qgkpmbezHdiOAlvCXorQLgrp5baipblapEb:T:j83ibaiarp5eaipblapEe:T:j83iwaiaxakpmwDKYqk8AExm35Ps8E8Fgkp5baipblapEd:T:j83izaiakp5eaipblapEi:T:j83iKkaoaiaw;8qbbkk;uddiue978Jjjjjbc;ab9Rhidnadcd4ae2glc98GgvTmbcbheabhdinadadpbbbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepkbbadczfhdaeclfgeav6mbkkdnavalSmbaic8WfpxbbbbbbbbbbbbbbbbgopklbaicafaopklbaiczfaopklbaiaopklbaiabavcdtfgdalciGgecdtgv;8qbbdnaeTmbaiaipblbgocwp:Recwp:Sep;6eaocep:SepxbbjFbbjFbbjFbbjFp9opxbbjZbbjZbbjZbbjZp:Uep;Mepklbkadaiav;8qbbkk9teiucbcbydj1jjbgeabcifc98GfgbBdj1jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaikkkebcjwklz:Dbb",n=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,3,2,0,0,5,3,1,0,1,12,1,0,10,22,2,12,0,65,0,65,0,65,0,252,10,0,0,11,7,0,65,0,253,15,26,11]),i=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if(typeof WebAssembly!="object")return{supported:!1};var o=WebAssembly.validate(n)?a(t):a(e),r,s=WebAssembly.instantiate(o,{}).then(function(S){r=S.instance,r.exports.__wasm_call_ctors()});function a(S){for(var C=new Uint8Array(S.length),V=0;V<S.length;++V){var L=S.charCodeAt(V);C[V]=L>96?L-97:L>64?L-39:L+4}for(var Z=0,V=0;V<S.length;++V)C[Z++]=C[V]<60?i[C[V]]:(C[V]-60)*64+C[++V];return C.buffer.slice(0,Z)}function c(S,C,V,L,Z,E,P){var W=S.exports.sbrk,v=L+3&-4,A=W(v*Z),b=W(E.length),R=new Uint8Array(S.exports.memory.buffer);R.set(E,b);var G=C(A,L,Z,b,E.length);if(G==0&&P&&P(A,v,Z),V.set(R.subarray(A,A+L*Z)),W(A-W(0)),G!=0)throw new Error("Malformed buffer data: "+G)}var d={NONE:"",OCTAHEDRAL:"meshopt_decodeFilterOct",QUATERNION:"meshopt_decodeFilterQuat",EXPONENTIAL:"meshopt_decodeFilterExp"},u={ATTRIBUTES:"meshopt_decodeVertexBuffer",TRIANGLES:"meshopt_decodeIndexBuffer",INDICES:"meshopt_decodeIndexSequence"},h=[],p=0;function g(S){var C={object:new Worker(S),pending:0,requests:{}};return C.object.onmessage=function(V){var L=V.data;C.pending-=L.count,C.requests[L.id][L.action](L.value),delete C.requests[L.id]},C}function f(S){for(var C="self.ready = WebAssembly.instantiate(new Uint8Array(["+new Uint8Array(o)+"]), {}).then(function(result) { result.instance.exports.__wasm_call_ctors(); return result.instance; });self.onmessage = "+x.name+";"+c.toString()+x.toString(),V=new Blob([C],{type:"text/javascript"}),L=URL.createObjectURL(V),Z=h.length;Z<S;++Z)h[Z]=g(L);for(var Z=S;Z<h.length;++Z)h[Z].object.postMessage({});h.length=S,URL.revokeObjectURL(L)}function y(S,C,V,L,Z){for(var E=h[0],P=1;P<h.length;++P)h[P].pending<E.pending&&(E=h[P]);return new Promise(function(W,v){var A=new Uint8Array(V),b=++p;E.pending+=S,E.requests[b]={resolve:W,reject:v},E.object.postMessage({id:b,count:S,size:C,source:A,mode:L,filter:Z},[A.buffer])})}function x(S){var C=S.data;if(!C.id)return self.close();self.ready.then(function(V){try{var L=new Uint8Array(C.count*C.size);c(V,V.exports[C.mode],L,C.count,C.size,C.source,V.exports[C.filter]),self.postMessage({id:C.id,count:C.count,action:"resolve",value:L},[L.buffer])}catch(Z){self.postMessage({id:C.id,count:C.count,action:"reject",value:Z})}})}return{ready:s,supported:!0,useWorkers:function(S){f(S)},decodeVertexBuffer:function(S,C,V,L,Z){c(r,r.exports.meshopt_decodeVertexBuffer,S,C,V,L,r.exports[d[Z]])},decodeIndexBuffer:function(S,C,V,L){c(r,r.exports.meshopt_decodeIndexBuffer,S,C,V,L)},decodeIndexSequence:function(S,C,V,L){c(r,r.exports.meshopt_decodeIndexSequence,S,C,V,L)},decodeGltfBuffer:function(S,C,V,L,Z,E){c(r,r.exports[u[Z]],S,C,V,L,r.exports[d[E]])},decodeGltfBufferAsync:function(S,C,V,L,Z){return h.length>0?y(S,C,V,u[L],d[Z]):s.then(function(){var E=new Uint8Array(S*C);return c(r,r.exports[u[L]],E,S,C,V,r.exports[d[Z]]),E})}}}();var wan=_(T()),Pan=function(){var e="b9H79Tebbbe9Hk9Geueu9Geub9Gbb9Gsuuuuuuuuuuuu99uueu9Gvuuuuub9Gvuuuuue999Gquuuuuuu99uueu9Gwuuuuuu99ueu9Giuuue999Gluuuueu9GiuuueuizsdilvoirwDbqqbeqlve9Weiiviebeoweuec:G:Pdkr:Tewo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bbz9TW79O9V9Wt9F79P9T9W29P9M95bl8E9TW79O9V9Wt9F79P9T9W29P9M959x9Pt9OcttV9P9I91tW7bvQ9TW79O9V9Wt9F79P9T9W29P9M959q9V9P9Ut7boX9TW79O9V9Wt9F79P9T9W29P9M959t9J9H2Wbra9TW79O9V9Wt9F9V9Wt9P9T9P96W9wWVtW94SWt9J9O9sW9T9H9Wbwl79IV9RbDDwebcekdmxq:x:yesdbk:Z9VvKue99euY99Ou8Jjjjjbc;W;qb9Rgs8Kjjjjbcbhzascxfcbc;Kbz:ljjjb8AdnabaeSmbabaeadcdtz:kjjjb8AkdnamcdGTmbalcrfci4gHcbyd:m:jjjbHjjjjbbheascxfasyd2gOcdtfaeBdbasaOcefBd2aecbaHz:ljjjbhAcbhlcbhednadTmbcbhlabheadhHinaAaeydbgOci4fgCaCRbbgCceaOcrGgOtV86bbaCcu7aO4ceGalfhlaeclfheaHcufgHmbkcualcdtalcFFFFi0Ehekaecbyd:m:jjjbHjjjjbbhzascxfasyd2gecdtfazBdbasaecefBd2alcd4alfhOcehHinaHgecethHaeaO6mbkcbhXcuaecdtgOaecFFFFi0Ecbyd:m:jjjbHjjjjbbhHascxfasyd2gCcdtfaHBdbasaCcefBd2aHcFeaOz:ljjjbhQdnadTmbaecufhLcbhKindndnaQabaXcdtfgYydbgCc:v;t;h;Ev2aLGgOcdtfgAydbgHcuSmbceheinazaHcdtfydbaCSmdaOaefhHaecefheaQaHaLGgOcdtfgAydbgHcu9hmbkkazaKcdtfaCBdbaAaKBdbaKhHaKcefhKkaYaHBdbaXcefgXad9hmbkkaQcbyd1:jjjbH:bjjjbbasasyd2cufBd2kcualcefgecdtaecFFFFi0Ecbyd:m:jjjbHjjjjbbh8Aascxfasyd2gecdtfa8ABdbasa8ABdlasaecefBd2cuadcitadcFFFFe0Ecbyd:m:jjjbHjjjjbbhEascxfasyd2gecdtfaEBdbasaEBdwasaecefBd2asclfabadalcbz:cjjjbcualcdtg3alcFFFFi0Eg5cbyd:m:jjjbHjjjjbbhLascxfasyd2gecdtfaLBdbasaecefBd2a5cbyd:m:jjjbHjjjjbbh8Eascxfasyd2gecdtfa8EBdbasaecefBd2alcd4alfhOcehHinaHgecethHaeaO6mbkcbhYcuaecdtgOaecFFFFi0Ecbyd:m:jjjbHjjjjbbhHascxfasyd2gCcdtfaHBdbasaCcefBd2aHcFeaOz:ljjjbhQdnalTmbavcd4hCaecufhKinaYhednazTmbazaYcdtfydbhekaiaeaC2cdtfgeydlgHcH4aH7c:F:b:DD2aeydbgHcH4aH7c;D;O:B8J27aeydwgecH4ae7c:3F;N8N27aKGhHaYcdth8FdndndnazTmbaQaHcdtfgAydbgecuSmeaiaza8FfydbaC2cdtfhXcehOinaiazaecdtfydbaC2cdtfaXcxz:ojjjbTmiaHaOfheaOcefhOaQaeaKGgHcdtfgAydbgecu9hmbxdkkaQaHcdtfgAydbgecuSmbaiaYaC2cdtfhXcehOinaiaeaC2cdtfaXcxz:ojjjbTmdaHaOfheaOcefhOaQaeaKGgHcdtfgAydbgecu9hmbkkaAaYBdbaYhekaLa8FfaeBdbaYcefgYal9hmbkcbhea8EhHinaHaeBdbaHclfhHalaecefge9hmbkcbheaLhHa8EhOindnaeaHydbgCSmbaOa8EaCcdtfgCydbBdbaCaeBdbkaHclfhHaOclfhOalaecefge9hmbkkcbhaaQcbyd1:jjjbH:bjjjbbasasyd2cufBd2alcbyd:m:jjjbHjjjjbbhKascxfasyd2gecdtfaKBdbasaecefBd2a5cbyd:m:jjjbHjjjjbbheascxfasyd2gHcdtfaeBdbasaHcefBd2a5cbyd:m:jjjbHjjjjbbhHascxfasyd2gOcdtfaHBdbasaOcefBd2aecFea3z:ljjjbhhaHcFea3z:ljjjbhgdnalTmbaEcwfh8Jindna8AaagOcefgacdtfydbgCa8AaOcdtgefydbgHSmbaCaH9Rh8FaEaHcitfh3agaefh8KahaefhYcbhAindndna3aAcitfydbgQaO9hmbaYaOBdba8KaOBdbxekdna8AaQcdtg8LfgeclfydbgHaeydbgeSmbaEaecitgCfydbaOSmeaHae9Rh8Maecu7aHfhXa8JaCfhHcbheinaXaeSmeaecefheaHydbhCaHcwfhHaCaO9hmbkaea8M6mekaga8LfgeaOaQaeydbcuSEBdbaYaQaOaYydbcuSEBdbkaAcefgAa8F9hmbkkaaal9hmbkaLhHa8EhOaghCahhAcbheindndnaeaHydbgQ9hmbdnaeaOydbgQ9hmbaAydbhQdnaCydbgXcu9hmbaQcu9hmbaKaefcb86bbxikaKaefhYdnaeaXSmbaeaQSmbaYce86bbxikaYcl86bbxdkdnaea8EaQcdtgXfydb9hmbdnaCydbgYcuSmbaeaYSmbaAydbg8FcuSmbaea8FSmbagaXfydbg3cuSmba3aQSmbahaXfydbgXcuSmbaXaQSmbdnaLaYcdtfydbgQaLaXcdtfydb9hmbaQaLa8FcdtfydbgXSmbaXaLa3cdtfydb9hmbaKaefcd86bbxlkaKaefcl86bbxikaKaefcl86bbxdkaKaefcl86bbxekaKaefaKaQfRbb86bbkaHclfhHaOclfhOaCclfhCaAclfhAalaecefge9hmbkdnaqTmbdndnazTmbazheaLhHalhOindnaqaeydbfRbbTmbaKaHydbfcl86bbkaeclfheaHclfhHaOcufgOmbxdkkaLhealhHindnaqRbbTmbaKaeydbfcl86bbkaqcefhqaeclfheaHcufgHmbkkaLhealhOaKhHindnaKaeydbfRbbcl9hmbaHcl86bbkaeclfheaHcefhHaOcufgOmbkkamceGTmbaKhealhHindnaeRbbce9hmbaecl86bbkaecefheaHcufgHmbkkcualcx2alc;v:Q;v:Qe0Ecbyd:m:jjjbHjjjjbbhaascxfasyd2gecdtfaaBdbasaecefBd2aaaialavazz:djjjbh8NdndnaDmbcbhycbh8Jxekcbh8JawhecbhHindnaeIdbJbbbb9ETmbasc;Wbfa8JcdtfaHBdba8Jcefh8JkaeclfheaDaHcefgH9hmbkcua8Jal2gecdtaecFFFFi0Ecbyd:m:jjjbHjjjjbbhyascxfasyd2gecdtfayBdbasaecefBd2alTmba8JTmbarcd4hYdnazTmba8Jcdth8FcbhQayhXinaoazaQcdtfydbaY2cdtfhAasc;WbfheaXhHa8JhOinaHaAaeydbcdtgCfIdbawaCfIdbNUdbaeclfheaHclfhHaOcufgOmbkaXa8FfhXaQcefgQal9hmbxdkka8Jcdth8FcbhQayhXinaoaQaY2cdtfhAasc;WbfheaXhHa8JhOinaHaAaeydbcdtgCfIdbawaCfIdbNUdbaeclfheaHclfhHaOcufgOmbkaXa8FfhXaQcefgQal9hmbkkcualc8S2gHalc;D;O;f8U0EgCcbyd:m:jjjbHjjjjbbheascxfasyd2gOcdtfaeBdbasaOcefBd2aecbaHz:ljjjbhqdndndndna8JTmbaCcbyd:m:jjjbHjjjjbbhvascxfasyd2gecdtfavBdbcehOasaecefBd2avcbaHz:ljjjb8Acua8Jal2gecltgHaecFFFFb0Ecbyd:m:jjjbHjjjjbbhrascxfasyd2gecdtfarBdbasaecefBd2arcbaHz:ljjjb8AadmexikcbhvadTmecbhrkcbhAabhHindnaaaHclfydbgQcx2fgeIdbaaaHydbgXcx2fgOIdbg8P:tgIaaaHcwfydbgYcx2fgCIdlaOIdlg8R:tg8SNaCIdba8P:tgRaeIdla8R:tg8UN:tg8Va8VNa8UaCIdwaOIdwg8W:tg8XNa8SaeIdwa8W:tg8UN:tg8Sa8SNa8UaRNa8XaIN:tgIaINMM:rgRJbbbb9ETmba8VaR:vh8VaIaR:vhIa8SaR:vh8SkaqaLaXcdtfydbc8S2fgea8SaR:rgRa8SNNg8UaeIdbMUdbaeaIaRaINg8YNg8XaeIdlMUdlaea8VaRa8VNg8ZNg80aeIdwMUdwaea8Ya8SNg8YaeIdxMUdxaea8Za8SNg81aeIdzMUdzaea8ZaINg8ZaeIdCMUdCaea8SaRa8Va8WNa8Sa8PNa8RaINMM:mg8RNg8PNg8SaeIdKMUdKaeaIa8PNgIaeId3MUd3aea8Va8PNg8VaeIdaMUdaaea8Pa8RNg8PaeId8KMUd8KaeaRaeIdyMUdyaqaLaQcdtfydbc8S2fgea8UaeIdbMUdbaea8XaeIdlMUdlaea80aeIdwMUdwaea8YaeIdxMUdxaea81aeIdzMUdzaea8ZaeIdCMUdCaea8SaeIdKMUdKaeaIaeId3MUd3aea8VaeIdaMUdaaea8PaeId8KMUd8KaeaRaeIdyMUdyaqaLaYcdtfydbc8S2fgea8UaeIdbMUdbaea8XaeIdlMUdlaea80aeIdwMUdwaea8YaeIdxMUdxaea81aeIdzMUdzaea8ZaeIdCMUdCaea8SaeIdKMUdKaeaIaeId3MUd3aea8VaeIdaMUdaaea8PaeId8KMUd8KaeaRaeIdyMUdyaHcxfhHaAcifgAad6mbkcbh8FabhXinaba8FcdtfhQcbhHinaKaQaHc;a1jjbfydbcdtfydbgOfRbbhedndnaKaXaHfydbgCfRbbgAc99fcFeGcpe0mbaec99fcFeGc;:e6mekdnaAcufcFeGce0mbahaCcdtfydbaO9hmekdnaecufcFeGce0mbagaOcdtfydbaC9hmekdnaAcv2aefc:G1jjbfRbbTmbaLaOcdtfydbaLaCcdtfydb0mekJbbacJbbacJbbjZaecFeGceSEaAceSEh8ZdnaaaQaHc;e1jjbfydbcdtfydbcx2fgeIdwaaaCcx2fgAIdwg8R:tg8VaaaOcx2fgYIdwa8R:tg8Sa8SNaYIdbaAIdbg8W:tgIaINaYIdlaAIdlg8U:tgRaRNMMg8PNa8Va8SNaeIdba8W:tg80aINaRaeIdla8U:tg8YNMMg8Xa8SN:tg8Va8VNa80a8PNa8XaIN:tg8Sa8SNa8Ya8PNa8XaRN:tgIaINMM:rgRJbbbb9ETmba8VaR:vh8VaIaR:vhIa8SaR:vh8SkaqaLaCcdtfydbc8S2fgea8Sa8Za8P:rNgRa8SNNg8XaeIdbMUdbaeaIaRaINg8ZNg80aeIdlMUdlaea8VaRa8VNg8PNg8YaeIdwMUdwaea8Za8SNg8ZaeIdxMUdxaea8Pa8SNg81aeIdzMUdzaea8PaINgBaeIdCMUdCaea8SaRa8Va8RNa8Sa8WNa8UaINMM:mg8RNg8PNg8SaeIdKMUdKaeaIa8PNgIaeId3MUd3aea8Va8PNg8VaeIdaMUdaaea8Pa8RNg8PaeId8KMUd8KaeaRaeIdyMUdyaqaLaOcdtfydbc8S2fgea8XaeIdbMUdbaea80aeIdlMUdlaea8YaeIdwMUdwaea8ZaeIdxMUdxaea81aeIdzMUdzaeaBaeIdCMUdCaea8SaeIdKMUdKaeaIaeId3MUd3aea8VaeIdaMUdaaea8PaeId8KMUd8KaeaRaeIdyMUdykaHclfgHcx9hmbkaXcxfhXa8Fcifg8Fad6mbkdna8JTmbcbhXinJbbbbh8WaaabaXcdtfgeclfydbgYcx2fgHIdwaaaeydbg8Fcx2fgOIdwg8Y:tgIaINaHIdbaOIdbg81:tg8Va8VNaHIdlaOIdlgB:tgRaRNMMg8Zaaaecwfydbg3cx2fgeIdwa8Y:tg8PNaIaIa8PNa8VaeIdba81:tg8RNaRaeIdlaB:tg8UNMMg8SN:tJbbbbJbbjZa8Za8Pa8PNa8Ra8RNa8Ua8UNMMg80Na8Sa8SN:tg8X:va8XJbbbb9BEg8XNh83a80aINa8Pa8SN:ta8XNhUa8Za8UNaRa8SN:ta8XNh85a80aRNa8Ua8SN:ta8XNh86a8Za8RNa8Va8SN:ta8XNh87a80a8VNa8Ra8SN:ta8XNh88a8Va8UNa8RaRN:tg8Sa8SNaRa8PNa8UaIN:tg8Sa8SNaIa8RNa8Pa8VN:tg8Sa8SNMM:rJbbbZNh8Saya8Fa8J2gwcdtfhHaya3a8J2g8LcdtfhOayaYa8J2gicdtfhCa8Y:mh89aB:mh8:a81:mhZcbhAa8JhQJbbbbh8UJbbbbh8XJbbbbh8ZJbbbbh80Jbbbbh8YJbbbbh81JbbbbhBJbbbbhnJbbbbhcinasc;WbfaAfgecwfa8SaUaCIdbaHIdbg8P:tgRNa83aOIdba8P:tg8RNMgINUdbaeclfa8Sa86aRNa85a8RNMg8VNUdbaea8Sa88aRNa87a8RNMgRNUdbaecxfa8Sa89aINa8:a8VNa8PaZaRNMMMg8PNUdba8SaIa8VNNa80Mh80a8SaIaRNNa8YMh8Ya8Sa8VaRNNa81Mh81a8Sa8Pa8PNNa8WMh8Wa8SaIa8PNNa8UMh8Ua8Sa8Va8PNNa8XMh8Xa8SaRa8PNNa8ZMh8Za8SaIaINNaBMhBa8Sa8Va8VNNanMhna8SaRaRNNacMhcaHclfhHaCclfhCaOclfhOaAczfhAaQcufgQmbkava8Fc8S2fgeacaeIdbMUdbaeanaeIdlMUdlaeaBaeIdwMUdwaea81aeIdxMUdxaea8YaeIdzMUdzaea80aeIdCMUdCaea8ZaeIdKMUdKaea8XaeId3MUd3aea8UaeIdaMUdaaea8WaeId8KMUd8Kaea8SaeIdyMUdyavaYc8S2fgeacaeIdbMUdbaeanaeIdlMUdlaeaBaeIdwMUdwaea81aeIdxMUdxaea8YaeIdzMUdzaea80aeIdCMUdCaea8ZaeIdKMUdKaea8XaeId3MUd3aea8UaeIdaMUdaaea8WaeId8KMUd8Kaea8SaeIdyMUdyava3c8S2fgeacaeIdbMUdbaeanaeIdlMUdlaeaBaeIdwMUdwaea81aeIdxMUdxaea8YaeIdzMUdzaea80aeIdCMUdCaea8ZaeIdKMUdKaea8XaeId3MUd3aea8UaeIdaMUdaaea8WaeId8KMUd8Kaea8SaeIdyMUdyarawcltfhQcbhHa8JhCinaQaHfgeasc;WbfaHfgOIdbaeIdbMUdbaeclfgAaOclfIdbaAIdbMUdbaecwfgAaOcwfIdbaAIdbMUdbaecxfgeaOcxfIdbaeIdbMUdbaHczfhHaCcufgCmbkaraicltfhQcbhHa8JhCinaQaHfgeasc;WbfaHfgOIdbaeIdbMUdbaeclfgAaOclfIdbaAIdbMUdbaecwfgAaOcwfIdbaAIdbMUdbaecxfgeaOcxfIdbaeIdbMUdbaHczfhHaCcufgCmbkara8LcltfhQcbhHa8JhCinaQaHfgeasc;WbfaHfgOIdbaeIdbMUdbaeclfgAaOclfIdbaAIdbMUdbaecwfgAaOcwfIdbaAIdbMUdbaecxfgeaOcxfIdbaeIdbMUdbaHczfhHaCcufgCmbkaXcifgXad6mbkkcbhOxekcehOcbhrkcbh3dndnamcwGg9cmbJbbbbh8UcbhJcbhocbhCxekcbhea5cbyd:m:jjjbHjjjjbbhCascxfasyd2gHcdtfaCBdbasaHcefBd2dnalTmbaChHinaHaeBdbaHclfhHalaecefge9hmbkkdnaOmbcbh8Finaba8FcdtfhYcbhXinaLaYaXcdtgec;a1jjbfydbcdtfydbcdtfydbhHdnaCaLaYaefydbcdtfydbgOcdtfgAydbgeaOSmbinaAaCaegOcdtfgQydbgeBdbaQhAaOae9hmbkkdnaCaHcdtfgAydbgeaHSmbinaAaCaegHcdtfgQydbgeBdbaQhAaHae9hmbkkdnaOaHSmbaCaOaHaOaH0EcdtfaOaHaOaH6EBdbkaXcefgXci9hmbka8Fcifg8Fad6mbkkcbhJdnalTmbcbhQindnaLaQcdtgefydbaQ9hmbaQhHdnaCaefgXydbgeaQSmbaXhOinaOaCaegHcdtfgAydbgeBdbaAhOaHae9hmbkkaXaHBdbkaQcefgQal9hmbkcbheaLhOaChHcbhJindndnaeaOydbgA9hmbdnaeaHydbgA9hmbaHaJBdbaJcefhJxdkaHaCaAcdtfydbBdbxekaHaCaAcdtfydbBdbkaOclfhOaHclfhHalaecefge9hmbkkcuaJcltgeaJcjjjjiGEcbyd:m:jjjbHjjjjbbhoascxfasyd2gHcdtfaoBdbasaHcefBd2aocbaez:ljjjbhAdnalTmbaChOaahealhQinaecwfIdbh8SaeclfIdbhIaAaOydbcltfgHaeIdbaHIdbMUdbaHclfgXaIaXIdbMUdbaHcwfgXa8SaXIdbMUdbaHcxfgHaHIdbJbbjZMUdbaOclfhOaecxfheaQcufgQmbkkdnaJTmbaAheaJhHinaecxfgOIdbh8SaOcbBdbaeaeIdbJbbbbJbbjZa8S:va8SJbbbb9BEg8SNUdbaeclfgOa8SaOIdbNUdbaecwfgOa8SaOIdbNUdbaeczfheaHcufgHmbkkdnalTmbaChOaahealhQinaAaOydbcltfgHcxfgXaecwfIdbaHcwfIdb:tg8Sa8SNaeIdbaHIdb:tg8Sa8SNaeclfIdbaHclfIdb:tg8Sa8SNMMg8SaXIdbgIaIa8S9DEUdbaOclfhOaecxfheaQcufgQmbkkdnaJmbcbhJJFFuuh8UxekaAcxfheaAhHaJhOinaHaeIdbUdbaeczfheaHclfhHaOcufgOmbkJFFuuh8UaAheaJhHinaeIdbg8Sa8Ua8Ua8S9EEh8UaeclfheaHcufgHmbkkasydlh9ednalTmba9eclfhea9eydbhAaKhHalhQcbhOincbaeydbgXaA9RaHRbbcpeGEaOfhOaHcefhHaeclfheaXhAaQcufgQmbkaOce4h3kcuada39RcifgTcx2aTc;v:Q;v:Qe0Ecbyd:m:jjjbHjjjjbbhDascxfasyd2gecdtfaDBdbasaecefBd2cuaTcdtaTcFFFFi0Ecbyd:m:jjjbHjjjjbbhSascxfasyd2gecdtfaSBdbasaecefBd2a5cbyd:m:jjjbHjjjjbbh8Mascxfasyd2gecdtfa8MBdbasaecefBd2alcbyd:m:jjjbHjjjjbbh9hascxfasyd2gecdtfa9hBdbasaecefBd2axaxNa8NJbbjZamclGEg83a83N:vhcJbbbbhndnadak9nmbdnaTci6mba8Jclth9iaDcwfh6JbbbbhBJbbbbhninasclfabadalaLz:cjjjbabh3cbhEcbh5inaba5cdtfhwcbheindnaLa3aefydbgOcdtg8FfydbgQaLawaec;q1jjbfydbcdtfydbgHcdtg8LfydbgXSmbaKaHfRbbgYcv2aKaOfRbbgAfc;G1jjbfRbbg8AaAcv2aYfgic;G1jjbfRbbg8KVcFeGTmbdnaXaQ9nmbaic:G1jjbfRbbcFeGmekaAcufhQdnaAaY9hmbaQcFeGce0mbaha8FfydbaH9hmekdndnaAclSmbaYcl9hmekdnaQcFeGce0mbaha8FfydbaH9hmdkaYcufcFeGce0mbaga8LfydbaO9hmekaDaEcx2fgAaHaOa8KcFeGgQEBdlaAaOaHaQEBdbaAaQa8AGcb9hBdwaEcefhEkaeclfgecx9hmbkdna5cifg5ad9pmba3cxfh3aEcifaT9nmekkaETmdcbhYinaqaLaDaYcx2fgAydbgQcdtg3fydbc8S2fgeIdwaaaAydlgXcx2fgHIdwg8VNaeIdzaHIdbgRNaeIdaMg8Sa8SMMa8VNaeIdlaHIdlg8PNaeIdCa8VNaeId3Mg8Sa8SMMa8PNaeIdbaRNaeIdxa8PNaeIdKMg8Sa8SMMaRNaeId8KMMM:lh8SJbbbbJbbjZaeIdygI:vaIJbbbb9BEhIdndnaAydwg8FmbJFFuuh8XxekJbbbbJbbjZaqaLaXcdtfydbc8S2fgeIdyg8R:va8RJbbbb9BEaeIdwaaaQcx2fgHIdwg8RNaeIdzaHIdbg8WNaeIdaMg8Xa8XMMa8RNaeIdlaHIdlg8XNaeIdCa8RNaeId3Mg8Ra8RMMa8XNaeIdba8WNaeIdxa8XNaeIdKMg8Ra8RMMa8WNaeId8KMMM:lNh8XkaIa8SNh8Zdna8JTmbavaQc8S2fgOIdwa8VNaOIdzaRNaOIdaMg8Sa8SMMa8VNaOIdla8PNaOIdCa8VNaOId3Mg8Sa8SMMa8PNaOIdbaRNaOIdxa8PNaOIdKMg8Sa8SMMaRNaOId8KMMMh8SayaXa8J2gwcdtfhHaraQa8J2g8LcltfheaOIdyh8Ra8JhOinaHIdbgIaIa8RNaecxfIdba8VaecwfIdbNaRaeIdbNa8PaeclfIdbNMMMgIaIM:tNa8SMh8SaHclfhHaeczfheaOcufgOmbkdndna8FmbJbbbbhIxekavaXc8S2fgOIdwaaaQcx2fgeIdwgRNaOIdzaeIdbg8PNaOIdaMgIaIMMaRNaOIdlaeIdlg8RNaOIdCaRNaOId3MgIaIMMa8RNaOIdba8PNaOIdxa8RNaOIdKMgIaIMMa8PNaOId8KMMMhIaya8LcdtfhHarawcltfheaOIdyh8Wa8JhOinaHIdbg8Va8Va8WNaecxfIdbaRaecwfIdbNa8PaeIdbNa8RaeclfIdbNMMMg8Va8VM:tNaIMhIaHclfhHaeczfheaOcufgOmbkaI:lhIka8Za8S:lMh8Za8XaIMh8XaKaQfRbbcd9hmbdnagahaha3fydbaXSEa8Ea3fydbgwcdtfydbg3cu9hmba8EaXcdtfydbh3kavawc8S2fgOIdwaaa3cx2fgeIdwg8VNaOIdzaeIdbgRNaOIdaMg8Sa8SMMa8VNaOIdlaeIdlg8PNaOIdCa8VNaOId3Mg8Sa8SMMa8PNaOIdbaRNaOIdxa8PNaOIdKMg8Sa8SMMaRNaOId8KMMMh8Saya3a8J2g8LcdtfhHarawa8J2gicltfheaOIdyh8Ra8JhOinaHIdbgIaIa8RNaecxfIdba8VaecwfIdbNaRaeIdbNa8PaeclfIdbNMMMgIaIM:tNa8SMh8SaHclfhHaeczfheaOcufgOmbkdndna8FmbJbbbbhIxekava3c8S2fgOIdwaaawcx2fgeIdwgRNaOIdzaeIdbg8PNaOIdaMgIaIMMaRNaOIdlaeIdlg8RNaOIdCaRNaOId3MgIaIMMa8RNaOIdba8PNaOIdxa8RNaOIdKMgIaIMMa8PNaOId8KMMMhIayaicdtfhHara8LcltfheaOIdyh8Wa8JhOinaHIdbg8Va8Va8WNaecxfIdbaRaecwfIdbNa8PaeIdbNa8RaeclfIdbNMMMg8Va8VM:tNaIMhIaHclfhHaeczfheaOcufgOmbkaI:lhIka8Za8S:lMh8Za8XaIMh8XkaAa8Za8Xa8Za8X9FgeEUdwaAaXaQaea8FTVgeEBdlaAaQaXaeEBdbaYcefgYaE9hmbkasc;Wbfcbcj;qbz:ljjjb8Aa6heaEhHinasc;WbfaeydbcA4cF8FGgOcFAaOcFA6EcdtfgOaOydbcefBdbaecxfheaHcufgHmbkcbhecbhHinasc;WbfaefgOydbhAaOaHBdbaAaHfhHaeclfgecj;qb9hmbkcbhea6hHinasc;WbfaHydbcA4cF8FGgOcFAaOcFA6EcdtfgOaOydbgOcefBdbaSaOcdtfaeBdbaHcxfhHaEaecefge9hmbkadak9RgOci9Uh9kdnalTmbcbhea8MhHinaHaeBdbaHclfhHalaecefge9hmbkkcbh0a9hcbalz:ljjjbh5aOcO9Uh9ma9kce4h9nasydwh9ocbh8Kcbh8AdninaDaSa8Acdtfydbcx2fgiIdwg8Sac9Emea8Ka9k9pmeJFFuuhIdna9naE9pmbaDaSa9ncdtfydbcx2fIdwJbb;aZNhIkdna8SaI9ETmba8San9ETmba8Ka9m0mdkdna5aLaiydlgwcdtg9pfydbgAfg9qRbba5aLaiydbg3cdtg9rfydbgefg9sRbbVmbaKa3fRbbh9tdna9eaecdtfgHclfydbgOaHydbgHSmbaOaH9RhQaaaAcx2fhYaaaecx2fh8Fa9oaHcitfhecbhHceh8Ldnindna8MaeydbcdtfydbgOaASmba8MaeclfydbcdtfydbgXaASmbaOaXSmbaaaXcx2fgXIdbaaaOcx2fgOIdbg8V:tg8Sa8FIdlaOIdlgR:tg8WNa8FIdba8V:tg8XaXIdlaR:tgIN:tg8Pa8SaYIdlaR:tg8ZNaYIdba8V:tg80aIN:tgRNaIa8FIdwaOIdwg8R:tg8YNa8WaXIdwa8R:tg8VN:tg8WaIaYIdwa8R:tg81Na8Za8VN:tgINa8Va8XNa8Ya8SN:tg8Ra8Va80Na81a8SN:tg8SNMMa8Pa8PNa8Wa8WNa8Ra8RNMMaRaRNaIaINa8Sa8SNMMN:rJbbj8:N9FmdkaecwfheaHcefgHaQ6h8LaQaH9hmbkka8LceGTmba9ncefh9nxekdndndndna9tc9:fPdebdka3heina8MaecdtgefawBdba8Eaefydbgea39hmbxikkdnagahaha9rfydbawSEa8Ea9rfydbg3cdtfydbgecu9hmba8Ea9pfydbheka8Ma9rfawBdbaehwka8Ma3cdtfawBdbka9sce86bba9qce86bbaiIdwg8Sanana8S9DEhna0cefh0cecda9tceSEa8Kfh8Kka8Acefg8AaE9hmbkka0TmddnalTmbcbhXcbh8Findna8Ma8FcdtgefydbgOa8FSmbaLaOcdtfydbh3dna8FaLaefydb9hgwmbaqa3c8S2fgeaqa8Fc8S2fgHIdbaeIdbMUdbaeaHIdlaeIdlMUdlaeaHIdwaeIdwMUdwaeaHIdxaeIdxMUdxaeaHIdzaeIdzMUdzaeaHIdCaeIdCMUdCaeaHIdKaeIdKMUdKaeaHId3aeId3MUd3aeaHIdaaeIdaMUdaaeaHId8KaeId8KMUd8KaeaHIdyaeIdyMUdyka8JTmbavaOc8S2fgeava8Fc8S2g8LfgHIdbaeIdbMUdbaeaHIdlaeIdlMUdlaeaHIdwaeIdwMUdwaeaHIdxaeIdxMUdxaeaHIdzaeIdzMUdzaeaHIdCaeIdCMUdCaeaHIdKaeIdKMUdKaeaHId3aeId3MUd3aeaHIdaaeIdaMUdaaeaHId8KaeId8KMUd8KaeaHIdyaeIdyMUdya9iaO2hYarhHa8JhAinaHaYfgeaHaXfgOIdbaeIdbMUdbaeclfgQaOclfIdbaQIdbMUdbaecwfgQaOcwfIdbaQIdbMUdbaecxfgeaOcxfIdbaeIdbMUdbaHczfhHaAcufgAmbkawmbJbbbbJbbjZaqa8LfgeIdyg8S:va8SJbbbb9BEaeIdwaaa3cx2fgHIdwg8SNaeIdzaHIdbgINaeIdaMg8Va8VMMa8SNaeIdlaHIdlg8VNaeIdCa8SNaeId3Mg8Sa8SMMa8VNaeIdbaINaeIdxa8VNaeIdKMg8Sa8SMMaINaeId8KMMM:lNg8SaBaBa8S9DEhBkaXa9ifhXa8Fcefg8Fal9hmbkcbhHahheindnaeydbgOcuSmbdnaHa8MaOcdtgAfydbgO9hmbcuhOahaAfydbgAcuSmba8MaAcdtfydbhOkaeaOBdbkaeclfhealaHcefgH9hmbkcbhHagheindnaeydbgOcuSmbdnaHa8MaOcdtgAfydbgO9hmbcuhOagaAfydbgAcuSmba8MaAcdtfydbhOkaeaOBdbkaeclfhealaHcefgH9hmbkkaBana8JEhBcbhAabhecbhQindna8MaeydbcdtfydbgHa8MaeclfydbcdtfydbgOSmbaHa8MaecwfydbcdtfydbgXSmbaOaXSmbabaAcdtfgYaHBdbaYcwfaXBdbaYclfaOBdbaAcifhAkaecxfheaQcifgQad6mbkdndna9cTmbaAak9nmba8UaB9FTmbcbhdabhecbhHindnaoaCaeydbgOcdtfydbcdtfIdbaB9ETmbabadcdtfgQaOBdbaQclfaeclfydbBdbaQcwfaecwfydbBdbadcifhdkaecxfheaHcifgHaA6mbkJFFuuh8UaJTmeaoheaJhHJFFuuh8SinaeIdbgIa8Sa8SaI9EEg8Va8SaIaB9EgOEh8Sa8Va8UaOEh8UaeclfheaHcufgHmbxdkkaAhdkadak0mbxdkkasclfabadalaLz:cjjjbkdndnadak0mbadhOxekdna9cmbadhOxekdna8Uac9FmbadhOxekina8UJbb;aZNg8Saca8Sac9DEh8VJbbbbh8SdnaJTmbaoheaJhHinaeIdbgIa8SaIa8V9FEa8SaIa8S9EEh8SaeclfheaHcufgHmbkkcbhOabhecbhHindnaoaCaeydbgAcdtfydbcdtfIdba8V9ETmbabaOcdtfgQaABdbaQclfaeclfydbBdbaQcwfaecwfydbBdbaOcifhOkaecxfheaHcifgHad6mbkJFFuuh8UdnaJTmbaoheaJhHJFFuuhIinaeIdbgRaIaIaR9EEg8PaIaRa8V9EgAEhIa8Pa8UaAEh8UaeclfheaHcufgHmbkkdnaOad9hmbadhOxdka8Sanana8S9DEhnaOak9nmeaOhda8Uac9FmbkkdnamcjjjjlGTmbazmbaOTmbcbhLabheinaKaeydbgAfRbbc3thXaecwfgYydbhHdndnahaAcdtg3fydbaeclfg8FydbgCSmbcbhQagaCcdtfydbaA9hmekcjjjj94hQkaeaXaQVaAVBdbaKaCfRbbc3thXdndnahaCcdtfydbaHSmbcbhQagaHcdtfydbaC9hmekcjjjj94hQka8FaXaQVaCVBdbaKaHfRbbc3thQdndnahaHcdtfydbaASmbcbhCaga3fydbaH9hmekcjjjj94hCkaYaQaCVaHVBdbaecxfheaLcifgLaO6mbkkdnazTmbaOTmbaOheinabazabydbcdtfydbBdbabclfhbaecufgembkkdnaPTmbaPa83an:rNUdbkasyd2gecdtascxffc98fhHdninaeTmeaHydbcbyd1:jjjbH:bjjjbbaHc98fhHaecufhexbkkasc;W;qbf8KjjjjbaOk;Yieouabydlhvabydbclfcbaicdtz:ljjjbhoadci9UhrdnadTmbdnalTmbaehwadhDinaoalawydbcdtfydbcdtfgqaqydbcefBdbawclfhwaDcufgDmbxdkkaehwadhDinaoawydbcdtfgqaqydbcefBdbawclfhwaDcufgDmbkkdnaiTmbcbhDaohwinawydbhqawaDBdbawclfhwaqaDfhDaicufgimbkkdnadci6mbinaecwfydbhwaeclfydbhDaeydbhidnalTmbalawcdtfydbhwalaDcdtfydbhDalaicdtfydbhikavaoaicdtfgqydbcitfaDBdbavaqydbcitfawBdlaqaqydbcefBdbavaoaDcdtfgqydbcitfawBdbavaqydbcitfaiBdlaqaqydbcefBdbavaoawcdtfgwydbcitfaiBdbavawydbcitfaDBdlawawydbcefBdbaecxfhearcufgrmbkkabydbcbBdbk;Qodvuv998Jjjjjbca9Rgvczfcwfcbyd11jjbBdbavcb8Pdj1jjb83izavcwfcbydN1jjbBdbavcb8Pd:m1jjb83ibdnadTmbaicd4hodnabmbdnalTmbcbhrinaealarcdtfydbao2cdtfhwcbhiinavczfaifgDawaifIdbgqaDIdbgkakaq9EEUdbavaifgDaqaDIdbgkakaq9DEUdbaiclfgicx9hmbkarcefgrad9hmbxikkaocdthrcbhwincbhiinavczfaifgDaeaifIdbgqaDIdbgkakaq9EEUdbavaifgDaqaDIdbgkakaq9DEUdbaiclfgicx9hmbkaearfheawcefgwad9hmbxdkkdnalTmbcbhrinabarcx2fgiaealarcdtfydbao2cdtfgwIdbUdbaiawIdlUdlaiawIdwUdwcbhiinavczfaifgDawaifIdbgqaDIdbgkakaq9EEUdbavaifgDaqaDIdbgkakaq9DEUdbaiclfgicx9hmbkarcefgrad9hmbxdkkaocdthlcbhraehwinabarcx2fgiaearao2cdtfgDIdbUdbaiaDIdlUdlaiaDIdwUdwcbhiinavczfaifgDawaifIdbgqaDIdbgkakaq9EEUdbavaifgDaqaDIdbgkakaq9DEUdbaiclfgicx9hmbkawalfhwarcefgrad9hmbkkJbbbbavIdbavIdzgk:tgqaqJbbbb9DEgqavIdlavIdCgx:tgmamaq9DEgqavIdwavIdKgm:tgPaPaq9DEhPdnabTmbadTmbJbbbbJbbjZaP:vaPJbbbb9BEhqinabaqabIdbak:tNUdbabclfgvaqavIdbax:tNUdbabcwfgvaqavIdbam:tNUdbabcxfhbadcufgdmbkkaPk8MbabaeadaialavcbcbcbcbcbaoarawaDz:bjjjbk8MbabaeadaialavaoarawaDaqakaxamaPz:bjjjbk:DCoDud99rue99iul998Jjjjjbc;Wb9Rgw8KjjjjbdndnarmbcbhDxekawcxfcbc;Kbz:ljjjb8Aawcuadcx2adc;v:Q;v:Qe0Ecbyd:m:jjjbHjjjjbbgqBdxawceBd2aqaeadaicbz:djjjb8AawcuadcdtadcFFFFi0Egkcbyd:m:jjjbHjjjjbbgxBdzawcdBd2adcd4adfhmceheinaegicetheaiam6mbkcbhPawcuaicdtgsaicFFFFi0Ecbyd:m:jjjbHjjjjbbgzBdCawciBd2dndnar:ZgH:rJbbbZMgO:lJbbb9p9DTmbaO:Ohexekcjjjj94hekaicufhAc:bwhmcbhCadhXcbhQinaChLaeamgKcufaeaK9iEaPgDcefaeaD9kEhYdndnadTmbaYcuf:YhOaqhiaxheadhmindndnaiIdbaONJbbbZMg8A:lJbbb9p9DTmba8A:OhCxekcjjjj94hCkaCcCthCdndnaiclfIdbaONJbbbZMg8A:lJbbb9p9DTmba8A:OhExekcjjjj94hEkaEcqtaCVhCdndnaicwfIdbaONJbbbZMg8A:lJbbb9p9DTmba8A:OhExekcjjjj94hEkaeaCaEVBdbaicxfhiaeclfheamcufgmmbkazcFeasz:ljjjbh3cbh5cbhPindna3axaPcdtfydbgCcm4aC7c:v;t;h;Ev2gics4ai7aAGgmcdtfgEydbgecuSmbaeaCSmbcehiina3amaifaAGgmcdtfgEydbgecuSmeaicefhiaeaC9hmbkkaEaCBdba5aecuSfh5aPcefgPad9hmbxdkkazcFeasz:ljjjb8Acbh5kaDaYa5ar0giEhPaLa5aiEhCdna5arSmbaYaKaiEgmaP9Rcd9imbdndnaQcl0mbdnaX:ZgOaL:Zg8A:taY:Yg8EaD:Y:tg8Fa8EaK:Y:tgaa5:ZghaH:tNNNaOaH:taaNa8Aah:tNa8AaH:ta8FNahaO:tNM:va8EMJbbbZMgO:lJbbb9p9DTmbaO:Ohexdkcjjjj94hexekaPamfcd9Theka5aXaiEhXaQcefgQcs9hmekkdndnaCmbcihicbhDxekcbhiawakcbyd:m:jjjbHjjjjbbg5BdKawclBd2aPcuf:Yh8AdndnadTmbaqhiaxheadhmindndnaiIdba8ANJbbbZMgO:lJbbb9p9DTmbaO:OhCxekcjjjj94hCkaCcCthCdndnaiclfIdba8ANJbbbZMgO:lJbbb9p9DTmbaO:OhExekcjjjj94hEkaEcqtaCVhCdndnaicwfIdba8ANJbbbZMgO:lJbbb9p9DTmbaO:OhExekcjjjj94hEkaeaCaEVBdbaicxfhiaeclfheamcufgmmbkazcFeasz:ljjjbh3cbhDcbhYindndndna3axaYcdtgKfydbgCcm4aC7c:v;t;h;Ev2gics4ai7aAGgmcdtfgEydbgecuSmbcehiinaxaecdtgefydbaCSmdamaifheaicefhia3aeaAGgmcdtfgEydbgecu9hmbkkaEaYBdbaDhiaDcefhDxeka5aefydbhika5aKfaiBdbaYcefgYad9hmbkcuaDc32giaDc;j:KM;jb0EhexekazcFeasz:ljjjb8AcbhDcbhekawaecbyd:m:jjjbHjjjjbbgeBd3awcvBd2aecbaiz:ljjjbhEavcd4hKdnadTmbdnalTmbaKcdth3a5hCaqhealhmadhAinaEaCydbc32fgiaeIdbaiIdbMUdbaiaeclfIdbaiIdlMUdlaiaecwfIdbaiIdwMUdwaiamIdbaiIdxMUdxaiamclfIdbaiIdzMUdzaiamcwfIdbaiIdCMUdCaiaiIdKJbbjZMUdKaCclfhCaecxfheama3fhmaAcufgAmbxdkka5hmaqheadhCinaEamydbc32fgiaeIdbaiIdbMUdbaiaeclfIdbaiIdlMUdlaiaecwfIdbaiIdwMUdwaiaiIdxJbbbbMUdxaiaiIdzJbbbbMUdzaiaiIdCJbbbbMUdCaiaiIdKJbbjZMUdKamclfhmaecxfheaCcufgCmbkkdnaDTmbaEhiaDheinaiaiIdbJbbbbJbbjZaicKfIdbgO:vaOJbbbb9BEgONUdbaiclfgmaOamIdbNUdbaicwfgmaOamIdbNUdbaicxfgmaOamIdbNUdbaiczfgmaOamIdbNUdbaicCfgmaOamIdbNUdbaic3fhiaecufgembkkcbhCawcuaDcdtgYaDcFFFFi0Egicbyd:m:jjjbHjjjjbbgeBdaawcoBd2awaicbyd:m:jjjbHjjjjbbg3Bd8KaecFeaYz:ljjjbhxdnadTmbJbbjZJbbjZa8A:vaPceSEaoNgOaONh8AaKcdthPalheina8Aaec;81jjbalEgmIdwaEa5ydbgAc32fgiIdC:tgOaONamIdbaiIdx:tgOaONamIdlaiIdz:tgOaONMMNaqcwfIdbaiIdw:tgOaONaqIdbaiIdb:tgOaONaqclfIdbaiIdl:tgOaONMMMhOdndnaxaAcdtgifgmydbcuSmba3aifIdbaO9ETmekamaCBdba3aifaOUdbka5clfh5aqcxfhqaeaPfheadaCcefgC9hmbkkabaxaYz:kjjjb8AcrhikaicdthiinaiTmeaic98fgiawcxffydbcbyd1:jjjbH:bjjjbbxbkkawc;Wbf8KjjjjbaDk:Ydidui99ducbhi8Jjjjjbca9Rglczfcwfcbyd11jjbBdbalcb8Pdj1jjb83izalcwfcbydN1jjbBdbalcb8Pd:m1jjb83ibdndnaembJbbjFhvJbbjFhoJbbjFhrxekadcd4cdthwincbhdinalczfadfgDabadfIdbgvaDIdbgoaoav9EEUdbaladfgDavaDIdbgoaoav9DEUdbadclfgdcx9hmbkabawfhbaicefgiae9hmbkalIdwalIdK:thralIdlalIdC:thoalIdbalIdz:thvkJbbbbavavJbbbb9DEgvaoaoav9DEgvararav9DEk9DeeuabcFeaicdtz:ljjjbhlcbhbdnadTmbindnalaeydbcdtfgiydbcu9hmbaiabBdbabcefhbkaeclfheadcufgdmbkkabk9teiucbcbyd:q:jjjbgeabcifc98GfgbBd:q:jjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;teeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiaeydlBdlaiaeydwBdwaiaeydxBdxaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk:3eedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdxaialBdwaialBdlaialBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabk9teiucbcbyd:q:jjjbgeabcrfc94GfgbBd:q:jjjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik9:eiuZbhedndncbyd:q:jjjbgdaecztgi9nmbcuheadai9RcFFifcz4nbcuSmekadhekcbabae9Rcifc98Gcbyd:q:jjjbfgdBd:q:jjjbdnadZbcztge9nmbadae9RcFFifcz4nb8Akk6eiucbhidnadTmbdninabRbbglaeRbbgv9hmeaecefheabcefhbadcufgdmbxdkkalav9Rhikaikk:Iedbcjwk1eFFuuFFuuFFuuFFuFFFuFFFuFbbbbbbbbeeebeebebbeeebebbbbbebebbbbbbbbbebbbdbbbbbbbebbbebbbdbbbbbbbbbbbeeeeebebbebbebebbbeebbbbbbbbbbbbbbbbbbbbbc1Dkxebbbdbbb:GNbb",t=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if(typeof WebAssembly!="object")return{supported:!1};var n,i=WebAssembly.instantiate(o(e),{}).then(function(f){n=f.instance,n.exports.__wasm_call_ctors()});function o(f){for(var y=new Uint8Array(f.length),x=0;x<f.length;++x){var S=f.charCodeAt(x);y[x]=S>96?S-97:S>64?S-39:S+4}for(var C=0,x=0;x<f.length;++x)y[C++]=y[x]<60?t[y[x]]:(y[x]-60)*64+y[++x];return y.buffer.slice(0,C)}function r(f){if(!f)throw new Error("Assertion failed")}function s(f){return new Uint8Array(f.buffer,f.byteOffset,f.byteLength)}function a(f,y,x){var S=n.exports.sbrk,C=S(y.length*4),V=S(x*4),L=new Uint8Array(n.exports.memory.buffer),Z=s(y);L.set(Z,C);var E=f(V,C,y.length,x);L=new Uint8Array(n.exports.memory.buffer);var P=new Uint32Array(x);new Uint8Array(P.buffer).set(L.subarray(V,V+x*4)),Z.set(L.subarray(C,C+y.length*4)),S(C-S(0));for(var W=0;W<y.length;++W)y[W]=P[y[W]];return[P,E]}function c(f){for(var y=0,x=0;x<f.length;++x){var S=f[x];y=y<S?S:y}return y}function d(f,y,x,S,C,V,L,Z,E){var P=n.exports.sbrk,W=P(4),v=P(x*4),A=P(C*V),b=P(x*4),R=new Uint8Array(n.exports.memory.buffer);R.set(s(S),A),R.set(s(y),b);var G=f(v,b,x,A,C,V,L,Z,E,W);R=new Uint8Array(n.exports.memory.buffer);var I=new Uint32Array(G);s(I).set(R.subarray(v,v+G*4));var w=new Float32Array(1);return s(w).set(R.subarray(W,W+4)),P(W-P(0)),[I,w[0]]}function u(f,y,x,S,C,V,L,Z,E,P,W,v,A){var b=n.exports.sbrk,R=b(4),G=b(x*4),I=b(C*V),w=b(C*Z),M=b(E.length*4),B=b(x*4),k=P?b(C):0,O=new Uint8Array(n.exports.memory.buffer);O.set(s(S),I),O.set(s(L),w),O.set(s(E),M),O.set(s(y),B),P&&O.set(s(P),k);var N=f(G,B,x,I,C,V,w,Z,M,E.length,k,W,v,A,R);O=new Uint8Array(n.exports.memory.buffer);var z=new Uint32Array(N);s(z).set(O.subarray(G,G+N*4));var K=new Float32Array(1);return s(K).set(O.subarray(R,R+4)),b(R-b(0)),[z,K[0]]}function h(f,y,x,S){var C=n.exports.sbrk,V=C(x*S),L=new Uint8Array(n.exports.memory.buffer);L.set(s(y),V);var Z=f(V,x,S);return C(V-C(0)),Z}function p(f,y,x,S,C,V,L,Z){var E=n.exports.sbrk,P=E(Z*4),W=E(x*S),v=E(x*V),A=new Uint8Array(n.exports.memory.buffer);A.set(s(y),W),C&&A.set(s(C),v);var b=f(P,W,x,S,v,V,L,Z);A=new Uint8Array(n.exports.memory.buffer);var R=new Uint32Array(b);return s(R).set(A.subarray(P,P+b*4)),E(P-E(0)),R}var g={LockBorder:1,Sparse:2,ErrorAbsolute:4,Prune:8,_InternalDebug:1<<30};return{ready:i,supported:!0,compactMesh:function(f){r(f instanceof Uint32Array||f instanceof Int32Array||f instanceof Uint16Array||f instanceof Int16Array),r(f.length%3==0);var y=f.BYTES_PER_ELEMENT==4?f:new Uint32Array(f);return a(n.exports.meshopt_optimizeVertexFetchRemap,y,c(f)+1)},simplify:function(f,y,x,S,C,V){r(f instanceof Uint32Array||f instanceof Int32Array||f instanceof Uint16Array||f instanceof Int16Array),r(f.length%3==0),r(y instanceof Float32Array),r(y.length%x==0),r(x>=3),r(S>=0&&S<=f.length),r(S%3==0),r(C>=0);for(var L=0,Z=0;Z<(V?V.length:0);++Z)r(V[Z]in g),L|=g[V[Z]];var E=f.BYTES_PER_ELEMENT==4?f:new Uint32Array(f),P=d(n.exports.meshopt_simplify,E,f.length,y,y.length/x,x*4,S,C,L);return P[0]=f instanceof Uint32Array?P[0]:new f.constructor(P[0]),P},simplifyWithAttributes:function(f,y,x,S,C,V,L,Z,E,P){r(f instanceof Uint32Array||f instanceof Int32Array||f instanceof Uint16Array||f instanceof Int16Array),r(f.length%3==0),r(y instanceof Float32Array),r(y.length%x==0),r(x>=3),r(S instanceof Float32Array),r(S.length%C==0),r(C>=0),r(L==null||L instanceof Uint8Array),r(L==null||L.length==y.length/x),r(Z>=0&&Z<=f.length),r(Z%3==0),r(E>=0),r(Array.isArray(V)),r(C>=V.length),r(V.length<=32);for(var W=0;W<V.length;++W)r(V[W]>=0);for(var v=0,W=0;W<(P?P.length:0);++W)r(P[W]in g),v|=g[P[W]];var A=f.BYTES_PER_ELEMENT==4?f:new Uint32Array(f),b=u(n.exports.meshopt_simplifyWithAttributes,A,f.length,y,y.length/x,x*4,S,C*4,new Float32Array(V),L?new Uint8Array(L):null,Z,E,v);return b[0]=f instanceof Uint32Array?b[0]:new f.constructor(b[0]),b},getScale:function(f,y){return r(f instanceof Float32Array),r(f.length%y==0),r(y>=3),h(n.exports.meshopt_simplifyScale,f,f.length/y,y*4)},simplifyPoints:function(f,y,x,S,C,V){return r(f instanceof Float32Array),r(f.length%y==0),r(y>=3),r(x>=0&&x<=f.length/y),S?(r(S instanceof Float32Array),r(S.length%C==0),r(C>=3),r(f.length/y==S.length/C),p(n.exports.meshopt_simplifyPoints,f,f.length/y,y*4,S,C*4,V,x)):p(n.exports.meshopt_simplifyPoints,f,f.length/y,y*4,void 0,0,0,x)}}}();var Man=_(T()),Fan=function(){var e="b9H79TebbbeVx9Geueu9Geub9Gbb9Giuuueu9Gmuuuuuuuuuuu9999eu9Gvuuuuueu9Gwuuuuuuuub9Gxuuuuuuuuuuuueu9Gkuuuuuuuuuu99eu9Gouuuuuub9Gruuuuuuub9GluuuubiOHdilvorwDDqkbiibeilve9Weiiviebeoweuec:q:Odkr:Yewo9TW9T9VV95dbH9F9F939H79T9F9J9H229F9Jt9VV7bb8A9TW79O9V9Wt9F9I919P29K9nW79O2Wt79c9V919U9KbeX9TW79O9V9Wt9F9I919P29K9nW79O2Wt7bo39TW79O9V9Wt9F9J9V9T9W91tWJ2917tWV9c9V919U9K7br39TW79O9V9Wt9F9J9V9T9W91tW9nW79O2Wt9c9V919U9K7bDL9TW79O9V9Wt9F9V9Wt9P9T9P96W9nW79O2Wtbql79IV9RbkDwebcekdsPq;29zHdbkIbabaec9:fgefcufae9Ugeabci9Uadfcufad9Ugbaeab0Ek:w8KDPue99eux99dui99euo99iu8Jjjjjbc:WD9Rgm8KjjjjbdndnalmbcbhPxekamc:Cwfcbc;Kbz:njjjb8Adndnalcb9imbaoal9nmbamcuaocdtaocFFFFi0Egscbyd:e1jjbHjjjjbbgzBd:CwamceBd;8wamascbyd:e1jjbHjjjjbbgHBd:GwamcdBd;8wamcualcdtalcFFFFi0Ecbyd:e1jjbHjjjjbbgOBd:KwamciBd;8waihsalhAinazasydbcdtfcbBdbasclfhsaAcufgAmbkaihsalhAinazasydbcdtfgCaCydbcefBdbasclfhsaAcufgAmbkaihsalhCcbhXindnazasydbcdtgQfgAydbcb9imbaHaQfaXBdbaAaAydbgQcjjjj94VBdbaQaXfhXkasclfhsaCcufgCmbkalci9UhLdnalci6mbcbhsaihAinaAcwfydbhCaAclfydbhXaHaAydbcdtfgQaQydbgQcefBdbaOaQcdtfasBdbaHaXcdtfgXaXydbgXcefBdbaOaXcdtfasBdbaHaCcdtfgCaCydbgCcefBdbaOaCcdtfasBdbaAcxfhAaLascefgs9hmbkkaihsalhAindnazasydbcdtgCfgXydbgQcu9kmbaXaQcFFFFrGgQBdbaHaCfgCaCydbaQ9RBdbkasclfhsaAcufgAmbxdkkamcuaocdtgsaocFFFFi0EgAcbyd:e1jjbHjjjjbbgzBd:CwamceBd;8wamaAcbyd:e1jjbHjjjjbbgHBd:GwamcdBd;8wamcualcdtalcFFFFi0Ecbyd:e1jjbHjjjjbbgOBd:KwamciBd;8wazcbasz:njjjbhXalci9UhLaihsalhAinaXasydbcdtfgCaCydbcefBdbasclfhsaAcufgAmbkdnaoTmbcbhsaHhAaXhCaohQinaAasBdbaAclfhAaCydbasfhsaCclfhCaQcufgQmbkkdnalci6mbcbhsaihAinaAcwfydbhCaAclfydbhQaHaAydbcdtfgKaKydbgKcefBdbaOaKcdtfasBdbaHaQcdtfgQaQydbgQcefBdbaOaQcdtfasBdbaHaCcdtfgCaCydbgCcefBdbaOaCcdtfasBdbaAcxfhAaLascefgs9hmbkkaoTmbcbhsaohAinaHasfgCaCydbaXasfydb9RBdbasclfhsaAcufgAmbkkamaLcbyd:e1jjbHjjjjbbgsBd:OwamclBd;8wascbaLz:njjjbhYamcuaLcK2alcjjjjd0Ecbyd:e1jjbHjjjjbbg8ABd:SwamcvBd;8wJbbbbhEdnalci6g3mbarcd4hKaihAa8AhsaLhrJbbbbh5inavaAclfydbaK2cdtfgCIdlh8EavaAydbaK2cdtfgXIdlhEavaAcwfydbaK2cdtfgQIdlh8FaCIdwhaaXIdwhhaQIdwhgasaCIdbg8JaXIdbg8KMaQIdbg8LMJbbnn:vUdbasclfaXIdlaCIdlMaQIdlMJbbnn:vUdbaQIdwh8MaCIdwh8NaXIdwhyascxfa8EaE:tg8Eagah:tggNa8FaE:tg8Faaah:tgaN:tgEJbbbbJbbjZa8Ja8K:tg8Ja8FNa8La8K:tg8Ka8EN:tghahNaEaENaaa8KNaga8JN:tgEaENMM:rg8K:va8KJbbbb9BEg8ENUdbasczfaEa8ENUdbascCfaha8ENUdbascwfa8Maya8NMMJbbnn:vUdba5a8KMh5aAcxfhAascKfhsarcufgrmbka5aL:Z:vJbbbZNhEkamcuaLcdtalcFFFF970Ecbyd:e1jjbHjjjjbbgCBd:WwamcoBd;8waEaq:ZNhEdna3mbcbhsaChAinaAasBdbaAclfhAaLascefgs9hmbkkaE:rhhcuh8PamcuaLcltalcFFFFd0Ecbyd:e1jjbHjjjjbbgIBd:0wamcrBd;8wcbaIa8AaCaLz:djjjb8AJFFuuhyJFFuuh8RJFFuuh8Sdnalci6gXmbJFFuuh8Sa8AhsaLhAJFFuuh8RJFFuuhyinascwfIdbgEayayaE9EEhyasclfIdbgEa8Ra8RaE9EEh8RasIdbgEa8Sa8SaE9EEh8SascKfhsaAcufgAmbkkahJbbbZNhgamaocetgscuaocu9kEcbyd:e1jjbHjjjjbbgABd:4waAcFeasz:njjjbhCdnaXmbcbhAJFFuuhEa8Ahscuh8PinascwfIdbay:tghahNasIdba8S:tghahNasclfIdba8R:tghahNMM:rghaEa8PcuSahaE9DVgXEhEaAa8PaXEh8PascKfhsaLaAcefgA9hmbkkamczfcbcjwz:njjjb8Aamcwf9cb83ibam9cb83ibagaxNhRJbbjZak:th8Ncbh8UJbbbbh8VJbbbbh8WJbbbbh8XJbbbbh8YJbbbbh8ZJbbbbh80cbh81cbhPinJbbbbhEdna8UTmbJbbjZa8U:Z:vhEkJbbbbhhdna80a80Na8Ya8YNa8Za8ZNMMg8KJbbbb9BmbJbbjZa8K:r:vhhka8XaENh5a8WaENh8Fa8VaENhaa8PhQdndndndndna8UaPVTmbamydwgBTmea80ahNh8Ja8ZahNh8La8YahNh8Maeamydbcdtfh83cbh3JFFuuhEcvhXcuhQindnaza83a3cdtfydbcdtgsfydbgvTmbaOaHasfydbcdtfhAindndnaCaiaAydbgKcx2fgsclfydbgrcetf8Vebcs4aCasydbgLcetf8Vebcs4faCascwfydbglcetf8Vebcs4fgombcbhsxekcehsazaLcdtfydbgLceSmbcehsazarcdtfydbgrceSmbcehsazalcdtfydbglceSmbdnarcdSaLcdSfalcdSfcd6mbaocefhsxekaocdfhskdnasaX9kmba8AaKcK2fgLIdwa5:thhaLIdla8F:th8KaLIdbaa:th8EdndnakJbbbb9DTmba8E:lg8Ea8K:lg8Ka8Ea8K9EEg8Kah:lgha8Kah9EEag:vJbbjZMhhxekahahNa8Ea8ENa8Ka8KNMM:rag:va8NNJbbjZMJ9VO:d86JbbjZaLIdCa8JNaLIdxa8MNa8LaLIdzNMMakN:tghahJ9VO:d869DENhhkaKaQasaX6ahaE9DVgLEhQasaXaLEhXahaEaLEhEkaAclfhAavcufgvmbkka3cefg3aB9hmbkkaQcu9hmekama5Ud:ODama8FUd:KDamaaUd:GDamcuBd:qDamcFFF;7rBdjDaIcba8AaYamc:GDfakJbbbb9Damc:qDfamcjDfz:ejjjbamyd:qDhQdndnaxJbbbb9ETmba8UaD6mbaQcuSmeceh3amIdjDaR9EmixdkaQcu9hmekdna8UTmbdnamydlgza8Uci2fgsciGTmbadasfcba8Uazcu7fciGcefz:njjjb8AkabaPcltfgzam8Pib83dbazcwfamcwf8Pib83dbaPcefhPkc3hzinazc98Smvamc:Cwfazfydbcbydj1jjbH:bjjjbbazc98fhzxbkkcbh3a8Uaq9pmbamydwaCaiaQcx2fgsydbcetf8Vebcs4aCascwfydbcetf8Vebcs4faCasclfydbcetf8Vebcs4ffaw9nmekcbhscbhAdna81TmbcbhAamczfhXinamczfaAcdtfaXydbgLBdbaXclfhXaAaYaLfRbbTfhAa81cufg81mbkkamydwhlamydbhXam9cu83i:GDam9cu83i:ODam9cu83i:qDam9cu83i:yDaAc;8eaAclfc:bd6Eh81inamcjDfasfcFFF;7rBdbasclfgscz9hmbka81cdthBdnalTmbaeaXcdtfhocbhrindnazaoarcdtfydbcdtgsfydbgvTmbaOaHasfydbcdtfhAcuhLcuhsinazaiaAydbgKcx2fgXclfydbcdtfydbazaXydbcdtfydbfazaXcwfydbcdtfydbfgXasaXas6gXEhsaKaLaXEhLaAclfhAavcufgvmbkaLcuSmba8AaLcK2fgAIdway:tgEaENaAIdba8S:tgEaENaAIdla8R:tgEaENMM:rhEcbhAindndnasamc:qDfaAfgvydbgX6mbasaX9hmeaEamcjDfaAfIdb9FTmekavasBdbamc:GDfaAfaLBdbamcjDfaAfaEUdbxdkaAclfgAcz9hmbkkarcefgral9hmbkkamczfaBfhLcbhscbhAindnamc:GDfasfydbgXcuSmbaLaAcdtfaXBdbaAcefhAkasclfgscz9hmbkaAa81fg81TmbJFFuuhhcuhKamczfhsa81hvcuhLina8AasydbgXcK2fgAIdway:tgEaENaAIdba8S:tgEaENaAIdla8R:tgEaENMM:rhEdndnazaiaXcx2fgAclfydbcdtfydbazaAydbcdtfydbfazaAcwfydbcdtfydbfgAaL6mbaAaL9hmeaEah9DTmekaEhhaAhLaXhKkasclfhsavcufgvmbkaKcuSmbaKhQkdnamaiaQcx2fgrydbarclfydbarcwfydbaCabaeadaPawaqa3z:fjjjbTmbaPcefhPJbbbbh8VJbbbbh8WJbbbbh8XJbbbbh8YJbbbbh8ZJbbbbh80kcbhXinaOaHaraXcdtfydbcdtgAfydbcdtfgKhsazaAfgvydbgLhAdnaLTmbdninasydbaQSmeasclfhsaAcufgATmdxbkkasaKaLcdtfc98fydbBdbavavydbcufBdbkaXcefgXci9hmbka8AaQcK2fgsIdbhEasIdlhhasIdwh8KasIdxh8EasIdzh5asIdCh8FaYaQfce86bba80a8FMh80a8Za5Mh8Za8Ya8EMh8Ya8Xa8KMh8Xa8WahMh8Wa8VaEMh8Vamydxh8Uxbkkamc:WDf8KjjjjbaPk;Vvivuv99lu8Jjjjjbca9Rgv8Kjjjjbdndnalcw0mbaiydbhoaeabcitfgralcdtcufBdlaraoBdbdnalcd6mbaiclfhoalcufhwarcxfhrinaoydbhDarcuBdbarc98faDBdbarcwfhraoclfhoawcufgwmbkkalabfhrxekcbhDavczfcwfcbBdbav9cb83izavcwfcbBdbav9cb83ibJbbjZhqJbbjZhkinadaiaDcdtfydbcK2fhwcbhrinavczfarfgoawarfIdbgxaoIdbgm:tgPakNamMgmUdbavarfgoaPaxam:tNaoIdbMUdbarclfgrcx9hmbkJbbjZaqJbbjZMgq:vhkaDcefgDal9hmbkcbhoadcbcecdavIdlgxavIdwgm9GEgravIdbgPam9GEaraPax9GEgscdtgrfhzavczfarfIdbhxaihralhwinaiaocdtfgDydbhHaDarydbgOBdbaraHBdbarclfhraoazaOcK2fIdbax9Dfhoawcufgwmbkaeabcitfhrdndnaocv6mbaoalc98f6mekaraiydbBdbaralcdtcufBdlaiclfhoalcufhwarcxfhrinaoydbhDarcuBdbarc98faDBdbarcwfhraoclfhoawcufgwmbkalabfhrxekaraxUdbararydlc98GasVBdlabcefaeadaiaoz:djjjbhwararydlciGawabcu7fcdtVBdlawaeadaiaocdtfalao9Rz:djjjbhrkavcaf8Kjjjjbark:;idiud99dndnabaecitfgwydlgDciGgqciSmbinabcbaDcd4gDalaqcdtfIdbawIdb:tgkJbbbb9FEgwaecefgefadaialavaoarz:ejjjbak:larIdb9FTmdabawaD7aefgecitfgwydlgDciGgqci9hmbkkabaecitfgeclfhbdnavmbcuhwindnaiaeydbgDfRbbmbadaDcK2fgqIdwalIdw:tgkakNaqIdbalIdb:tgkakNaqIdlalIdl:tgkakNMM:rgkarIdb9DTmbarakUdbaoaDBdbkaecwfheawcefgwabydbcd46mbxdkkcuhwindnaiaeydbgDfRbbmbadaDcK2fgqIdbalIdb:t:lgkaqIdlalIdl:t:lgxakax9EEgkaqIdwalIdw:t:lgxakax9EEgkarIdb9DTmbarakUdbaoaDBdbkaecwfheawcefgwabydbcd46mbkkk;llevudnabydwgxaladcetfgm8Vebcs4alaecetfgP8Vebgscs4falaicetfgz8Vebcs4ffaD0abydxaq9pVakVgDce9hmbavawcltfgxab8Pdb83dbaxcwfabcwfgx8Pdb83dbdnaxydbgqTmbaoabydbcdtfhxaqhsinalaxydbcetfcFFi87ebaxclfhxascufgsmbkkdnabydxglci2gsabydlgxfgkciGTmbarakfcbalaxcu7fciGcefz:njjjb8Aabydxci2hsabydlhxabydwhqkab9cb83dwababydbaqfBdbabascifc98GaxfBdlaP8Vebhscbhxkdnascztcz91cu9kmbabaxcefBdwaPax87ebaoabydbcdtfaxcdtfaeBdbkdnam8Uebcu9kmbababydwgxcefBdwamax87ebaoabydbcdtfaxcdtfadBdbkdnaz8Uebcu9kmbababydwgxcefBdwazax87ebaoabydbcdtfaxcdtfaiBdbkarabydlfabydxci2faPRbb86bbarabydlfabydxci2fcefamRbb86bbarabydlfabydxci2fcdfazRbb86bbababydxcefBdxaDk8LbabaeadaialavaoarawaDaDaqJbbbbz:cjjjbk;Jkovud99euv99eul998Jjjjjbc:W;ae9Rgo8KjjjjbdndnadTmbavcd4hrcbhwcbhDindnaiaeclfydbar2cdtfgvIdbaiaeydbar2cdtfgqIdbgk:tgxaiaecwfydbar2cdtfgmIdlaqIdlgP:tgsNamIdbak:tgzavIdlaP:tgPN:tgkakNaPamIdwaqIdwgH:tgONasavIdwaH:tgHN:tgPaPNaHazNaOaxN:tgxaxNMM:rgsJbbbb9Bmbaoc:W:qefawcx2fgAakas:vUdwaAaxas:vUdlaAaPas:vUdbaoc8Wfawc8K2fgAaq8Pdb83dbaAav8Pdb83dxaAam8Pdb83dKaAcwfaqcwfydbBdbaAcCfavcwfydbBdbaAcafamcwfydbBdbawcefhwkaecxfheaDcifgDad6mbkab9cb83dbabcyf9cb83dbabcaf9cb83dbabcKf9cb83dbabczf9cb83dbabcwf9cb83dbawTmeaocbBd8Sao9cb83iKao9cb83izaoczfaoc8Wfawci2cxaoc8Sfcbz1jjjbaoIdKhCaoIdChXaoIdzhQao9cb83iwao9cb83ibaoaoc:W:qefawcxaoc8Sfcbz1jjjbJbbjZhkaoIdwgPJbbbbJbbjZaPaPNaoIdbgPaPNaoIdlgsasNMM:rgx:vaxJbbbb9BEgzNhxasazNhsaPazNhzaoc:W:qefheawhvinaecwfIdbaxNaeIdbazNasaeclfIdbNMMgPakaPak9DEhkaecxfheavcufgvmbkabaCUdwabaXUdlabaQUdbabaoId3UdxdndnakJ;n;m;m899FmbJbbbbhPaoc:W:qefheaoc8WfhvinaCavcwfIdb:taecwfIdbgHNaQavIdb:taeIdbgONaXavclfIdb:taeclfIdbgLNMMaxaHNazaONasaLNMM:vgHaPaHaP9EEhPavc8KfhvaecxfheawcufgwmbkabaxUd8KabasUdaabazUd3abaCaxaPN:tUdKabaXasaPN:tUdCabaQazaPN:tUdzabJbbjZakakN:t:rgkUdydndnaxJbbj:;axJbbj:;9GEgPJbbjZaPJbbjZ9FEJbb;:9cNJbbbZJbbb:;axJbbbb9GEMgP:lJbbb9p9DTmbaP:Ohexekcjjjj94hekabae86b8UdndnasJbbj:;asJbbj:;9GEgPJbbjZaPJbbjZ9FEJbb;:9cNJbbbZJbbb:;asJbbbb9GEMgP:lJbbb9p9DTmbaP:Ohvxekcjjjj94hvkabav86bRdndnazJbbj:;azJbbj:;9GEgPJbbjZaPJbbjZ9FEJbb;:9cNJbbbZJbbb:;azJbbbb9GEMgP:lJbbb9p9DTmbaP:Ohqxekcjjjj94hqkabaq86b8SdndnaecKtcK91:YJbb;:9c:vax:t:lavcKtcK91:YJbb;:9c:vas:t:laqcKtcK91:YJbb;:9c:vaz:t:lakMMMJbb;:9cNJbbjZMgk:lJbbb9p9DTmbak:Ohexekcjjjj94hekaecFbaecFb9iEhexekabcjjj;8iBdycFbhekabae86b8Vxekab9cb83dbabcyf9cb83dbabcaf9cb83dbabcKf9cb83dbabczf9cb83dbabcwf9cb83dbkaoc:W;aef8Kjjjjbk;Yodouk99cbho8Jjjjjbca9RgrczfcwfcbBdbar9cb83izarcwfcbBdbar9cb83ibavcd4hwaicd4hDdnadTmbaDcdthqaehkinalaoaw2cdtfIdbhxcbhvinarczfavfgiaoaiydbgiakavfIdbgmax:taeavaqai2ffIdbalaiaw2cdtfIdb:t9DEBdbaravfgiaoaiydbgiaxamMaeavaqai2ffIdbalaiaw2cdtfIdbM9EEBdbavclfgvcx9hmbkakaqfhkaocefgoad9hmbkkJbbbbhxcbhvcbhkcbhiinalaravfydbgoaw2cdtfIdbalarczfavfydbgqaw2cdtfIdbaeaoaD2cdtfgoIdwaeaqaD2cdtfgqIdw:tgmamNaoIdbaqIdb:tgmamNaoIdlaqIdl:tgmamNMM:rMMgmaxamax9EgoEhxaiakaoEhkavclfhvaicefgici9hmbkJbbbbhmdnaearakcdtgifydbgoaD2cdtfgvIdwaearczfaifydbgraD2cdtfgiIdwgP:tgsasNavIdbaiIdbgz:tgHaHNavIdlaiIdlgO:tgAaANMM:rgCJbbbb9ETmbaCalaoaw2cdtfIdbMalaraw2cdtfIdb:taCaCM:vhmkaxJbbbZNhCasamNaPMhPaAamNaOMhOaHamNazMhzdnadTmbaDcdthvawcdthiindnalIdbgXaecwfIdbaP:tgxaxNaeIdbaz:tgmamNaeclfIdbaO:tgsasNMM:rgHMgQaC9ETmbJbbbbhAdnaHJbbbb9ETmbaQaC:taHaHM:vhAkaAaxNaPMhPaAasNaOMhOaAamNazMhzaXaCaHMMJbbbZNhCkaeavfhealaifhladcufgdmbkkabaCUdxabaPUdwabaOUdlabazUdbkjeeiu8Jjjjjbcj8W9Rgr8Kjjjjbaici2hwdnaiTmbawceawce0EhDarhiinaiaeadRbbcdtfydbBdbadcefhdaiclfhiaDcufgDmbkkabarawaladaoz:hjjjbarcj8Wf8Kjjjjbk:3lequ8JjjjjbcjP9Rgl8Kjjjjbcbhvalcjxfcbaiz:njjjb8AdndnadTmbcjehoaehrincuhwarhDcuhqavhkdninawakaoalcjxfaDcefRbbfRbb9RcFeGci6aoalcjxfaDRbbfRbb9RcFeGci6faoalcjxfaDcdfRbbfRbb9RcFeGci6fgxaq9mgmEhwdnammbaxce0mdkaxaqaxaq9kEhqaDcifhDadakcefgk9hmbkkaeawci2fgDcdfRbbhqaDcefRbbhxaDRbbhkaeavci2fgDcifaDawav9Rci2z:qjjjb8Aakalcjxffaocefgo86bbaxalcjxffao86bbaDcdfaq86bbaDcefax86bbaDak86bbaqalcjxffao86bbarcifhravcefgvad9hmbkalcFeaicetz:njjjbhoadci2gDceaDce0EhqcbhxindnaoaeRbbgkcetfgw8UebgDcu9kmbawax87ebaocjlfaxcdtfabakcdtfydbBdbaxhDaxcefhxkaeaD86bbaecefheaqcufgqmbkaxcdthDxekcbhDkabalcjlfaDz:mjjjb8AalcjPf8Kjjjjbk9teiucbcbyd11jjbgeabcifc98GfgbBd11jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik;teeeudndnaeabVciGTmbabhixekdndnadcz9pmbabhixekabhiinaiaeydbBdbaiaeydlBdlaiaeydwBdwaiaeydxBdxaeczfheaiczfhiadc9Wfgdcs0mbkkadcl6mbinaiaeydbBdbaeclfheaiclfhiadc98fgdci0mbkkdnadTmbinaiaeRbb86bbaicefhiaecefheadcufgdmbkkabk:3eedudndnabciGTmbabhixekaecFeGc:b:c:ew2hldndnadcz9pmbabhixekabhiinaialBdxaialBdwaialBdlaialBdbaiczfhiadc9Wfgdcs0mbkkadcl6mbinaialBdbaiclfhiadc98fgdci0mbkkdnadTmbinaiae86bbaicefhiadcufgdmbkkabk9teiucbcbyd11jjbgeabcrfc94GfgbBd11jjbdndnabZbcztgd9nmbcuhiabad9RcFFifcz4nbcuSmekaehikaik9:eiuZbhedndncbyd11jjbgdaecztgi9nmbcuheadai9RcFFifcz4nbcuSmekadhekcbabae9Rcifc98Gcbyd11jjbfgdBd11jjbdnadZbcztge9nmbadae9RcFFifcz4nb8Akk:;Deludndndnadch9pmbabaeSmdaeabadfgi9Rcbadcet9R0mekabaead;8qbbxekaeab7ciGhldndndnabae9pmbdnalTmbadhvabhixikdnabciGmbadhvabhixdkadTmiabaeRbb86bbadcufhvdnabcefgiciGmbaecefhexdkavTmiabaeRbe86beadc9:fhvdnabcdfgiciGmbaecdfhexdkavTmiabaeRbd86bdadc99fhvdnabcifgiciGmbaecifhexdkavTmiabaeRbi86biabclfhiaeclfheadc98fhvxekdnalmbdnaiciGTmbadTmlabadcufgifglaeaifRbb86bbdnalciGmbaihdxekaiTmlabadc9:fgifglaeaifRbb86bbdnalciGmbaihdxekaiTmlabadc99fgifglaeaifRbb86bbdnalciGmbaihdxekaiTmlabadc98fgdfaeadfRbb86bbkadcl6mbdnadc98fgocd4cefciGgiTmbaec98fhlabc98fhvinavadfaladfydbBdbadc98fhdaicufgimbkkaocx6mbaec9Wfhvabc9WfhoinaoadfgicxfavadfglcxfydbBdbaicwfalcwfydbBdbaiclfalclfydbBdbaialydbBdbadc9Wfgdci0mbkkadTmdadhidnadciGglTmbaecufhvabcufhoadhiinaoaifavaifRbb86bbaicufhialcufglmbkkadcl6mdaec98fhlabc98fhvinavaifgecifalaifgdcifRbb86bbaecdfadcdfRbb86bbaecefadcefRbb86bbaeadRbb86bbaic98fgimbxikkavcl6mbdnavc98fglcd4cefcrGgdTmbavadcdt9RhvinaiaeydbBdbaeclfheaiclfhiadcufgdmbkkalc36mbinaiaeydbBdbaiaeydlBdlaiaeydwBdwaiaeydxBdxaiaeydzBdzaiaeydCBdCaiaeydKBdKaiaeyd3Bd3aecafheaicafhiavc9Gfgvci0mbkkavTmbdndnavcrGgdmbavhlxekavc94GhlinaiaeRbb86bbaicefhiaecefheadcufgdmbkkavcw6mbinaiaeRbb86bbaiaeRbe86beaiaeRbd86bdaiaeRbi86biaiaeRbl86blaiaeRbv86bvaiaeRbo86boaiaeRbr86braicwfhiaecwfhealc94fglmbkkabkkAebcjwkxebbbdbbbzNbb",t=new Uint8Array([32,0,65,2,1,106,34,33,3,128,11,4,13,64,6,253,10,7,15,116,127,5,8,12,40,16,19,54,20,9,27,255,113,17,42,67,24,23,146,148,18,14,22,45,70,69,56,114,101,21,25,63,75,136,108,28,118,29,73,115]);if(typeof WebAssembly!="object")return{supported:!1};var n,i=WebAssembly.instantiate(o(e),{}).then(function(f){n=f.instance,n.exports.__wasm_call_ctors()});function o(f){for(var y=new Uint8Array(f.length),x=0;x<f.length;++x){var S=f.charCodeAt(x);y[x]=S>96?S-97:S>64?S-39:S+4}for(var C=0,x=0;x<f.length;++x)y[C++]=y[x]<60?t[y[x]]:(y[x]-60)*64+y[++x];return y.buffer.slice(0,C)}function r(f){if(!f)throw new Error("Assertion failed")}function s(f){return new Uint8Array(f.buffer,f.byteOffset,f.byteLength)}var a=48,c=16;function d(f,y){var x=f.meshlets[y*4+0],S=f.meshlets[y*4+1],C=f.meshlets[y*4+2],V=f.meshlets[y*4+3];return{vertices:f.vertices.subarray(x,x+C),triangles:f.triangles.subarray(S,S+V*3)}}function u(f,y,x,S,C,V,L){var Z=n.exports.sbrk,E=n.exports.meshopt_buildMeshletsBound(f.length,C,V),P=Z(E*c),W=Z(E*C*4),v=Z(E*V*3),A=Z(f.byteLength),b=Z(y.byteLength),R=new Uint8Array(n.exports.memory.buffer);R.set(s(f),A),R.set(s(y),b);var G=n.exports.meshopt_buildMeshlets(P,W,v,A,f.length,b,x,S,C,V,L);R=new Uint8Array(n.exports.memory.buffer);for(var I=R.subarray(P,P+G*c),w=new Uint32Array(I.buffer,I.byteOffset,I.byteLength/4).slice(),M=0;M<G;++M){var B=w[M*4+0],k=w[M*4+1],x=w[M*4+2],O=w[M*4+3];n.exports.meshopt_optimizeMeshlet(W+B*4,v+k,O,x)}var N=w[(G-1)*4+0],z=w[(G-1)*4+1],K=w[(G-1)*4+2],te=w[(G-1)*4+3],H=N+K,j=z+(te*3+3&-4),ee={meshlets:w,vertices:new Uint32Array(R.buffer,W,H).slice(),triangles:new Uint8Array(R.buffer,v,j*3).slice(),meshletCount:G};return Z(P-Z(0)),ee}function h(f){var y=new Float32Array(n.exports.memory.buffer,f,a/4);return{centerX:y[0],centerY:y[1],centerZ:y[2],radius:y[3],coneApexX:y[4],coneApexY:y[5],coneApexZ:y[6],coneAxisX:y[7],coneAxisY:y[8],coneAxisZ:y[9],coneCutoff:y[10]}}function p(f,y,x,S){var C=n.exports.sbrk,V=[],L=C(y.byteLength),Z=C(f.vertices.byteLength),E=C(f.triangles.byteLength),P=C(a),W=new Uint8Array(n.exports.memory.buffer);W.set(s(y),L),W.set(s(f.vertices),Z),W.set(s(f.triangles),E);for(var v=0;v<f.meshletCount;++v){var A=f.meshlets[v*4+0],b=f.meshlets[v*4+0+1],R=f.meshlets[v*4+0+3];n.exports.meshopt_computeMeshletBounds(P,Z+A*4,E+b,R,L,x,S),V.push(h(P))}return C(L-C(0)),V}function g(f,y,x,S){var C=n.exports.sbrk,V=C(a),L=C(f.byteLength),Z=C(y.byteLength),E=new Uint8Array(n.exports.memory.buffer);E.set(s(f),L),E.set(s(y),Z),n.exports.meshopt_computeClusterBounds(V,L,f.length,Z,x,S);var P=h(V);return C(V-C(0)),P}return{ready:i,supported:!0,buildMeshlets:function(f,y,x,S,C,V){r(f.length%3==0),r(y instanceof Float32Array),r(y.length%x==0),r(x>=3),r(S<=256||S>0),r(C<=512),r(C%4==0),V=V||0;var L=f.BYTES_PER_ELEMENT==4?f:new Uint32Array(f);return u(L,y,y.length/x,x*4,S,C,V)},computeClusterBounds:function(f,y,x){r(f.length%3==0),r(f.length/3<=512),r(y instanceof Float32Array),r(y.length%x==0),r(x>=3);var S=f.BYTES_PER_ELEMENT==4?f:new Uint32Array(f);return g(S,y,y.length/x,x*4)},computeMeshletBounds:function(f,y,x){return r(f.meshletCount!=0),r(y instanceof Float32Array),r(y.length%x==0),r(x>=3),p(f,y,y.length/x,x*4)},extractMeshlet:function(f,y){return r(y>=0&&y<f.meshletCount),d(f,y)}}}();function s_(e){e=e??Y.EMPTY_OBJECT;let t=e.resourceCache,n=e.gltf,i=e.bufferViewId,o=e.gltfResource,r=e.baseResource,s=e.cacheKey,a=n.bufferViews[i],c=a.buffer,d=a.byteOffset,u=a.byteLength,h=!1,p,g,f,y;if(ri(a,"EXT_meshopt_compression")){let S=a.extensions.EXT_meshopt_compression;c=S.buffer,d=S.byteOffset??0,u=S.byteLength,h=!0,p=S.byteStride,g=S.count,f=S.mode,y=S.filter??"NONE"}let x=n.buffers[c];this._hasMeshopt=h,this._meshoptByteStride=p,this._meshoptCount=g,this._meshoptMode=f,this._meshoptFilter=y,this._resourceCache=t,this._gltfResource=o,this._baseResource=r,this._buffer=x,this._bufferId=c,this._byteOffset=d,this._byteLength=u,this._cacheKey=s,this._bufferLoader=void 0,this._typedArray=void 0,this._state=yt.UNLOADED,this._promise=void 0}l(Object.create)&&(s_.prototype=Object.create(Ki.prototype),s_.prototype.constructor=s_);Object.defineProperties(s_.prototype,{cacheKey:{get:function(){return this._cacheKey}},typedArray:{get:function(){return this._typedArray}}});async function z9e(e){try{let t=H9e(e);if(e._bufferLoader=t,await t.load(),e.isDestroyed())return;let n=t.typedArray,i=new Uint8Array(n.buffer,n.byteOffset+e._byteOffset,e._byteLength);if(e.unload(),e._typedArray=i,e._hasMeshopt){let o=e._meshoptCount,r=e._meshoptByteStride,s=new Uint8Array(o*r);zoe.decodeGltfBuffer(s,o,r,e._typedArray,e._meshoptMode,e._meshoptFilter),e._typedArray=s}return e._state=yt.READY,e}catch(t){if(e.isDestroyed())return;throw e.unload(),e._state=yt.FAILED,e.getError("Failed to load buffer view",t)}}s_.prototype.load=async function(){return l(this._promise)?this._promise:(this._state=yt.LOADING,this._promise=z9e(this),this._promise)};function H9e(e){let t=e._resourceCache,n=e._buffer;if(l(n.uri)){let o=e._baseResource.getDerivedResource({url:n.uri});return t.getExternalBufferLoader({resource:o})}return t.getEmbeddedBufferLoader({parentResource:e._gltfResource,bufferId:e._bufferId})}s_.prototype.unload=function(){l(this._bufferLoader)&&!this._bufferLoader.isDestroyed()&&this._resourceCache.unload(this._bufferLoader),this._bufferLoader=void 0,this._typedArray=void 0};var RC=s_;var bcn=_(T(),1);var ocn=_(T(),1);function wr(){}wr._maxDecodingConcurrency=Math.max(Bt.hardwareConcurrency-1,1);wr._decoderTaskProcessor=void 0;wr._taskProcessorReady=!1;wr._error=void 0;wr._getDecoderTaskProcessor=function(){if(!l(wr._decoderTaskProcessor)){let e=new xi("decodeDraco",wr._maxDecodingConcurrency);e.initWebAssemblyModule({wasmBinaryFile:"ThirdParty/draco_decoder.wasm"}).then(function(t){t?wr._taskProcessorReady=!0:wr._error=new ae("Draco decoder could not be initialized.")}).catch(t=>{wr._error=t}),wr._decoderTaskProcessor=e}return wr._decoderTaskProcessor};wr.decodePointCloud=function(e){let t=wr._getDecoderTaskProcessor();if(l(wr._error))throw wr._error;if(wr._taskProcessorReady)return t.scheduleTask(e,[e.buffer.buffer])};wr.decodeBufferView=function(e){let t=wr._getDecoderTaskProcessor();if(l(wr._error))throw wr._error;if(wr._taskProcessorReady)return t.scheduleTask(e,[e.array.buffer])};var eb=wr;var acn=_(T(),1);var si={POSITION:"POSITION",NORMAL:"NORMAL",TANGENT:"TANGENT",TEXCOORD:"TEXCOORD",COLOR:"COLOR",JOINTS:"JOINTS",WEIGHTS:"WEIGHTS",FEATURE_ID:"_FEATURE_ID"};function K9e(e){switch(e){case si.POSITION:return"positionMC";case si.NORMAL:return"normalMC";case si.TANGENT:return"tangentMC";case si.TEXCOORD:return"texCoord";case si.COLOR:return"color";case si.JOINTS:return"joints";case si.WEIGHTS:return"weights";case si.FEATURE_ID:return"featureId"}}si.hasSetIndex=function(e){switch(e){case si.POSITION:case si.NORMAL:case si.TANGENT:return!1;case si.TEXCOORD:case si.COLOR:case si.JOINTS:case si.WEIGHTS:case si.FEATURE_ID:return!0}};si.fromGltfSemantic=function(e){let t=e,i=/^(\w+)_\d+$/.exec(e);switch(i!==null&&(t=i[1]),t){case"POSITION":return si.POSITION;case"NORMAL":return si.NORMAL;case"TANGENT":return si.TANGENT;case"TEXCOORD":return si.TEXCOORD;case"COLOR":return si.COLOR;case"JOINTS":return si.JOINTS;case"WEIGHTS":return si.WEIGHTS;case"_FEATURE_ID":return si.FEATURE_ID}};si.fromPntsSemantic=function(e){switch(e){case"POSITION":case"POSITION_QUANTIZED":return si.POSITION;case"RGBA":case"RGB":case"RGB565":return si.COLOR;case"NORMAL":case"NORMAL_OCT16P":return si.NORMAL;case"BATCH_ID":return si.FEATURE_ID}};si.getGlslType=function(e){switch(e){case si.POSITION:case si.NORMAL:case si.TANGENT:return"vec3";case si.TEXCOORD:return"vec2";case si.COLOR:return"vec4";case si.JOINTS:return"ivec4";case si.WEIGHTS:return"vec4";case si.FEATURE_ID:return"int"}};si.getVariableName=function(e,t){let n=K9e(e);return l(t)&&(n+=`_${t}`),n};var ft=Object.freeze(si);function cg(e){e=e??Y.EMPTY_OBJECT;let t=e.resourceCache,n=e.gltf,i=e.primitive,o=e.draco,r=e.gltfResource,s=e.baseResource,a=e.cacheKey;this._resourceCache=t,this._gltfResource=r,this._baseResource=s,this._gltf=n,this._primitive=i,this._draco=o,this._cacheKey=a,this._bufferViewLoader=void 0,this._bufferViewTypedArray=void 0,this._decodePromise=void 0,this._decodedData=void 0,this._state=yt.UNLOADED,this._promise=void 0,this._dracoError=void 0}l(Object.create)&&(cg.prototype=Object.create(Ki.prototype),cg.prototype.constructor=cg);Object.defineProperties(cg.prototype,{cacheKey:{get:function(){return this._cacheKey}},decodedData:{get:function(){return this._decodedData}}});async function J9e(e){let t=e._resourceCache;try{let n=t.getBufferViewLoader({gltf:e._gltf,bufferViewId:e._draco.bufferView,gltfResource:e._gltfResource,baseResource:e._baseResource});return e._bufferViewLoader=n,await n.load(),e.isDestroyed()?void 0:(e._bufferViewTypedArray=n.typedArray,e._state=yt.PROCESSING,e)}catch(n){if(e.isDestroyed())return;Hoe(e,n)}}cg.prototype.load=async function(){return l(this._promise)?this._promise:(this._state=yt.LOADING,this._promise=J9e(this),this._promise)};function Hoe(e,t){throw e.unload(),e._state=yt.FAILED,e.getError("Failed to load Draco",t)}async function Q9e(e,t){try{let n=await t;return e.isDestroyed()?void 0:(e.unload(),e._decodedData={indices:n.indexArray,vertexAttributes:n.attributeData},e._state=yt.READY,e._baseResource)}catch(n){if(e.isDestroyed())return;e._dracoError=n}}var a_={};a_[ft.POSITION]="POSITION";a_[ft.NORMAL]="NORMAL";a_[ft.COLOR]="COLOR";a_[ft.TEXCOORD]="TEX_COORD";function j9e(e){for(let t in a_)if(a_.hasOwnProperty(t)&&e.startsWith(t))return a_[t]}cg.prototype.process=function(e){if(this._state===yt.READY)return!0;if(this._state!==yt.PROCESSING||(l(this._dracoError)&&Hoe(this,this._dracoError),!l(this._bufferViewTypedArray))||l(this._decodePromise))return!1;let t=this._draco,n=this._primitive,i=this._gltf,o=i.bufferViews,r=t.bufferView,s=o[r],a=t.attributes,c=[];for(let h in n.attributes)if(n.attributes.hasOwnProperty(h)){let p=j9e(h);l(p)&&i.accessors[n.attributes[h]].componentType===Q.FLOAT&&(c.includes(p)||c.push(p))}let d={array:new Uint8Array(this._bufferViewTypedArray),bufferView:s,compressedAttributes:a,dequantizeInShader:!0,attributesToSkipTransform:c},u=eb.decodeBufferView(d);if(!l(u))return!1;this._decodePromise=Q9e(this,u)};cg.prototype.unload=function(){l(this._bufferViewLoader)&&this._resourceCache.unload(this._bufferViewLoader),this._bufferViewLoader=void 0,this._bufferViewTypedArray=void 0,this._decodedData=void 0,this._gltf=void 0,this._primitive=void 0};var ZC=cg;var Ecn=_(T(),1);var _cn=_(T(),1);function q9e(e){let t=e.uint8Array,n=e.format,i=e.request,o=e.flipY??!1,r=e.skipColorSpaceConversion??!1,s=new Blob([t],{type:n}),a;return Ze.supportsImageBitmapOptions().then(function(c){return c?Promise.resolve(Ze.createImageBitmapFromBlob(s,{flipY:o,premultiplyAlpha:!1,skipColorSpaceConversion:r})):(a=window.URL.createObjectURL(s),new Ze({url:a,request:i}).fetchImage({flipY:o,skipColorSpaceConversion:r}))}).then(function(c){return l(a)&&window.URL.revokeObjectURL(a),c}).catch(function(c){return l(a)&&window.URL.revokeObjectURL(a),Promise.reject(c)})}var c_=q9e;function tb(e){e=e??Y.EMPTY_OBJECT;let t=e.resourceCache,n=e.gltf,i=e.imageId,o=e.gltfResource,r=e.baseResource,s=e.cacheKey,a=n.images[i],c=a.bufferView,d=a.uri;this._resourceCache=t,this._gltfResource=o,this._baseResource=r,this._gltf=n,this._bufferViewId=c,this._uri=d,this._cacheKey=s,this._bufferViewLoader=void 0,this._image=void 0,this._mipLevels=void 0,this._state=yt.UNLOADED,this._promise=void 0}l(Object.create)&&(tb.prototype=Object.create(Ki.prototype),tb.prototype.constructor=tb);Object.defineProperties(tb.prototype,{cacheKey:{get:function(){return this._cacheKey}},image:{get:function(){return this._image}},mipLevels:{get:function(){return this._mipLevels}}});tb.prototype.load=function(){return l(this._promise)?this._promise:l(this._bufferViewId)?(this._promise=$9e(this),this._promise):(this._promise=eAe(this),this._promise)};function Koe(e){let t;return Array.isArray(e)&&(t=e.slice(1,e.length).map(function(n){return n.bufferView}),e=e[0]),{image:e,mipLevels:t}}async function $9e(e){e._state=yt.LOADING;let t=e._resourceCache;try{let n=t.getBufferViewLoader({gltf:e._gltf,bufferViewId:e._bufferViewId,gltfResource:e._gltfResource,baseResource:e._baseResource});if(e._bufferViewLoader=n,await n.load(),e.isDestroyed())return;let i=n.typedArray,o=await nAe(i);if(e.isDestroyed())return;let r=Koe(o);return e.unload(),e._image=r.image,e._mipLevels=r.mipLevels,e._state=yt.READY,e}catch(n){return e.isDestroyed()?void 0:Joe(e,n,"Failed to load embedded image")}}async function eAe(e){e._state=yt.LOADING;let t=e._baseResource,n=e._uri,i=t.getDerivedResource({url:n});try{let o=await oAe(i);if(e.isDestroyed())return;let r=Koe(o);return e.unload(),e._image=r.image,e._mipLevels=r.mipLevels,e._state=yt.READY,e}catch(o){return e.isDestroyed()?void 0:Joe(e,o,`Failed to load image: ${n}`)}}function Joe(e,t,n){return e.unload(),e._state=yt.FAILED,Promise.reject(e.getError(n,t))}function tAe(e){let t=e.subarray(0,2),n=e.subarray(0,4),i=e.subarray(8,12);if(t[0]===255&&t[1]===216)return"image/jpeg";if(t[0]===137&&t[1]===80)return"image/png";if(t[0]===171&&t[1]===75)return"image/ktx2";if(n[0]===82&&n[1]===73&&n[2]===70&&n[3]===70&&i[0]===87&&i[1]===69&&i[2]===66&&i[3]===80)return"image/webp";throw new ae("Image format is not recognized")}async function nAe(e){let t=tAe(e);if(t==="image/ktx2"){let n=new Uint8Array(e);return Zl(n)}return tb._loadImageFromTypedArray({uint8Array:e,format:t,flipY:!1,skipColorSpaceConversion:!0})}var iAe=/(^data:image\/ktx2)|(\.ktx2$)/i;function oAe(e){let t=e.getUrlComponent(!1,!0);return iAe.test(t)?Zl(e):e.fetchImage({skipColorSpaceConversion:!0,preferImageBitmap:!0})}tb.prototype.unload=function(){l(this._bufferViewLoader)&&!this._bufferViewLoader.isDestroyed()&&this._resourceCache.unload(this._bufferViewLoader),this._bufferViewLoader=void 0,this._uri=void 0,this._image=void 0,this._mipLevels=void 0,this._gltf=void 0};tb._loadImageFromTypedArray=c_;var GC=tb;var Bcn=_(T(),1);var Xcn=_(T(),1),rAe={TEXTURE:0,PROGRAM:1,BUFFER:2,NUMBER_OF_JOB_TYPES:3},Ma=Object.freeze(rAe);function lg(e){e=e??Y.EMPTY_OBJECT;let t=e.resourceCache,n=e.gltf,i=e.accessorId,o=e.gltfResource,r=e.baseResource,s=e.primitive,a=e.draco,c=e.cacheKey,d=e.asynchronous??!0,u=e.loadBuffer??!1,h=e.loadTypedArray??!1,p=n.accessors[i].componentType;this._resourceCache=t,this._gltfResource=o,this._baseResource=r,this._gltf=n,this._accessorId=i,this._indexDatatype=p,this._primitive=s,this._draco=a,this._cacheKey=c,this._asynchronous=d,this._loadBuffer=u,this._loadTypedArray=h,this._bufferViewLoader=void 0,this._dracoLoader=void 0,this._typedArray=void 0,this._buffer=void 0,this._state=yt.UNLOADED,this._promise=void 0}l(Object.create)&&(lg.prototype=Object.create(Ki.prototype),lg.prototype.constructor=lg);Object.defineProperties(lg.prototype,{cacheKey:{get:function(){return this._cacheKey}},buffer:{get:function(){return this._buffer}},typedArray:{get:function(){return this._typedArray}},indexDatatype:{get:function(){return this._indexDatatype}}});var sAe=new Iz;lg.prototype.load=async function(){return l(this._promise)?this._promise:l(this._draco)?(this._promise=aAe(this),this._promise):(this._promise=cAe(this),this._promise)};async function aAe(e){e._state=yt.LOADING;let t=e._resourceCache;try{let n=t.getDracoLoader({gltf:e._gltf,primitive:e._primitive,draco:e._draco,gltfResource:e._gltfResource,baseResource:e._baseResource});return e._dracoLoader=n,await n.load(),e.isDestroyed()?void 0:(e._state=yt.LOADED,e)}catch(n){if(e.isDestroyed())return;Ez(e,n)}}async function cAe(e){let t=e._gltf,n=e._accessorId,o=t.accessors[n].bufferView;e._state=yt.LOADING;let r=e._resourceCache;try{let s=r.getBufferViewLoader({gltf:t,bufferViewId:o,gltfResource:e._gltfResource,baseResource:e._baseResource});if(e._bufferViewLoader=s,await s.load(),e.isDestroyed())return;let a=s.typedArray;return e._typedArray=lAe(e,a),e._state=yt.PROCESSING,e}catch(s){if(e.isDestroyed())return;Ez(e,s)}}function lAe(e,t){let n=e._gltf,i=e._accessorId,o=n.accessors[i],r=o.count,s=o.componentType,a=Ae.getSizeInBytes(s),c=t.buffer,d=t.byteOffset+o.byteOffset;if(d%a!==0){let h=r*a,p=new Uint8Array(c,d,h);c=new Uint8Array(p).buffer,d=0,Vs("index-buffer-unaligned",`The index array is not aligned to a ${a}-byte boundary.`)}let u;return s===Ae.UNSIGNED_BYTE?u=new Uint8Array(c,d,r):s===Ae.UNSIGNED_SHORT?u=new Uint16Array(c,d,r):s===Ae.UNSIGNED_INT&&(u=new Uint32Array(c,d,r)),u}function Ez(e,t){throw e.unload(),e._state=yt.FAILED,e.getError("Failed to load index buffer",t)}function Iz(){this.typedArray=void 0,this.indexDatatype=void 0,this.context=void 0,this.buffer=void 0}Iz.prototype.set=function(e,t,n){this.typedArray=e,this.indexDatatype=t,this.context=n};Iz.prototype.execute=function(){this.buffer=Qoe(this.typedArray,this.indexDatatype,this.context)};function Qoe(e,t,n){let i=xt.createIndexBuffer({typedArray:e,context:n,usage:Me.STATIC_DRAW,indexDatatype:t});return i.vertexArrayDestroyable=!1,i}lg.prototype.process=function(e){if(this._state===yt.READY)return!0;if(this._state!==yt.LOADED&&this._state!==yt.PROCESSING)return!1;let t=this._typedArray,n=this._indexDatatype;if(l(this._dracoLoader))try{this._dracoLoader.process(e)&&(t=this._dracoLoader.decodedData.indices.typedArray,this._typedArray=t,n=Q.fromTypedArray(t),this._indexDatatype=n)}catch(o){Ez(this,o)}if(!l(t))return!1;let i;if(this._loadBuffer&&this._asynchronous){let o=sAe;if(o.set(t,n,e.context),!e.jobScheduler.execute(o,Ma.BUFFER))return!1;i=o.buffer}else this._loadBuffer&&(i=Qoe(t,n,e.context));return this.unload(),this._buffer=i,this._typedArray=this._loadTypedArray?t:void 0,this._state=yt.READY,this._resourceCache.statistics.addGeometryLoader(this),!0};lg.prototype.unload=function(){l(this._buffer)&&this._buffer.destroy();let e=this._resourceCache;l(this._bufferViewLoader)&&!this._bufferViewLoader.isDestroyed()&&e.unload(this._bufferViewLoader),l(this._dracoLoader)&&e.unload(this._dracoLoader),this._bufferViewLoader=void 0,this._dracoLoader=void 0,this._typedArray=void 0,this._buffer=void 0,this._gltf=void 0,this._primitive=void 0};var EC=lg;var Hun=_(T(),1);var hln=_(T(),1);var Ycn=_(T(),1);function dAe(e,t,n){if(n=n??!1,n){let i=e.indexOf(t);if(i>-1)return i}return e.push(t),e.length-1}var Ls=dAe;var qcn=_(T(),1);var Kcn=_(T(),1);function uAe(e,t){return l(e.extensionsUsed)&&e.extensionsUsed.indexOf(t)>=0}var ar=uAe;function Kt(){}Kt.objectLegacy=function(e,t){if(l(e)){for(let n in e)if(Object.prototype.hasOwnProperty.call(e,n)){let i=e[n],o=t(i,n);if(l(o))return o}}};Kt.object=function(e,t){if(l(e)){let n=e.length;for(let i=0;i<n;i++){let o=e[i],r=t(o,i);if(l(r))return r}}};Kt.topLevel=function(e,t,n){let i=e[t];return l(i)&&!Array.isArray(i)?Kt.objectLegacy(i,n):Kt.object(i,n)};Kt.accessor=function(e,t){return Kt.topLevel(e,"accessors",t)};Kt.accessorWithSemantic=function(e,t,n){let i={};return Kt.mesh(e,function(o){return Kt.meshPrimitive(o,function(r){let s=Kt.meshPrimitiveAttribute(r,function(a,c){if(c.indexOf(t)===0&&!l(i[a])){i[a]=!0;let d=n(a);if(l(d))return d}});return l(s)?s:Kt.meshPrimitiveTarget(r,function(a){return Kt.meshPrimitiveTargetAttribute(a,function(c,d){if(d.indexOf(t)===0&&!l(i[c])){i[c]=!0;let u=n(c);if(l(u))return u}})})})})};Kt.accessorContainingVertexAttributeData=function(e,t){let n={};return Kt.mesh(e,function(i){return Kt.meshPrimitive(i,function(o){let r=Kt.meshPrimitiveAttribute(o,function(s){if(!l(n[s])){n[s]=!0;let a=t(s);if(l(a))return a}});return l(r)?r:Kt.meshPrimitiveTarget(o,function(s){return Kt.meshPrimitiveTargetAttribute(s,function(a){if(!l(n[a])){n[a]=!0;let c=t(a);if(l(c))return c}})})})})};Kt.accessorContainingIndexData=function(e,t){let n={};return Kt.mesh(e,function(i){return Kt.meshPrimitive(i,function(o){let r=o.indices;if(l(r)&&!l(n[r])){n[r]=!0;let s=t(r);if(l(s))return s}})})};Kt.animation=function(e,t){return Kt.topLevel(e,"animations",t)};Kt.animationChannel=function(e,t){let n=e.channels;return Kt.object(n,t)};Kt.animationSampler=function(e,t){let n=e.samplers;return Kt.object(n,t)};Kt.buffer=function(e,t){return Kt.topLevel(e,"buffers",t)};Kt.bufferView=function(e,t){return Kt.topLevel(e,"bufferViews",t)};Kt.camera=function(e,t){return Kt.topLevel(e,"cameras",t)};Kt.image=function(e,t){return Kt.topLevel(e,"images",t)};Kt.material=function(e,t){return Kt.topLevel(e,"materials",t)};Kt.materialValue=function(e,t){let n=e.values;l(e.extensions)&&l(e.extensions.KHR_techniques_webgl)&&(n=e.extensions.KHR_techniques_webgl.values);for(let i in n)if(Object.prototype.hasOwnProperty.call(n,i)){let o=t(n[i],i);if(l(o))return o}};Kt.mesh=function(e,t){return Kt.topLevel(e,"meshes",t)};Kt.meshPrimitive=function(e,t){let n=e.primitives;if(l(n)){let i=n.length;for(let o=0;o<i;o++){let r=n[o],s=t(r,o);if(l(s))return s}}};Kt.meshPrimitiveAttribute=function(e,t){let n=e.attributes;for(let i in n)if(Object.prototype.hasOwnProperty.call(n,i)){let o=t(n[i],i);if(l(o))return o}};Kt.meshPrimitiveTarget=function(e,t){let n=e.targets;if(l(n)){let i=n.length;for(let o=0;o<i;++o){let r=t(n[o],o);if(l(r))return r}}};Kt.meshPrimitiveTargetAttribute=function(e,t){for(let n in e)if(Object.prototype.hasOwnProperty.call(e,n)){let i=e[n],o=t(i,n);if(l(o))return o}};Kt.node=function(e,t){return Kt.topLevel(e,"nodes",t)};Kt.nodeInTree=function(e,t,n){let i=e.nodes;if(l(i)){let o=t.length;for(let r=0;r<o;r++){let s=t[r],a=i[s];if(l(a)){let c=n(a,s);if(l(c))return c;let d=a.children;if(l(d)&&(c=Kt.nodeInTree(e,d,n),l(c)))return c}}}};Kt.nodeInScene=function(e,t,n){let i=t.nodes;if(l(i))return Kt.nodeInTree(e,i,n)};Kt.program=function(e,t){return ar(e,"KHR_techniques_webgl")?Kt.object(e.extensions.KHR_techniques_webgl.programs,t):Kt.topLevel(e,"programs",t)};Kt.sampler=function(e,t){return Kt.topLevel(e,"samplers",t)};Kt.scene=function(e,t){return Kt.topLevel(e,"scenes",t)};Kt.shader=function(e,t){return ar(e,"KHR_techniques_webgl")?Kt.object(e.extensions.KHR_techniques_webgl.shaders,t):Kt.topLevel(e,"shaders",t)};Kt.skin=function(e,t){return Kt.topLevel(e,"skins",t)};Kt.skinJoint=function(e,t){let n=e.joints;if(l(n)){let i=n.length;for(let o=0;o<i;o++){let r=n[o],s=t(r);if(l(s))return s}}};Kt.techniqueAttribute=function(e,t){let n=e.attributes;for(let i in n)if(Object.prototype.hasOwnProperty.call(n,i)){let o=t(n[i],i);if(l(o))return o}};Kt.techniqueUniform=function(e,t){let n=e.uniforms;for(let i in n)if(Object.prototype.hasOwnProperty.call(n,i)){let o=t(n[i],i);if(l(o))return o}};Kt.techniqueParameter=function(e,t){let n=e.parameters;for(let i in n)if(Object.prototype.hasOwnProperty.call(n,i)){let o=t(n[i],i);if(l(o))return o}};Kt.technique=function(e,t){return ar(e,"KHR_techniques_webgl")?Kt.object(e.extensions.KHR_techniques_webgl.techniques,t):Kt.topLevel(e,"techniques",t)};Kt.texture=function(e,t){return Kt.topLevel(e,"textures",t)};var We=Kt;var rln=_(T(),1);var eln=_(T(),1);function mAe(e){switch(e){case"SCALAR":return 1;case"VEC2":return 2;case"VEC3":return 3;case"VEC4":case"MAT2":return 4;case"MAT3":return 9;case"MAT4":return 16}}var Cd=mAe;function hAe(e,t){let n=t.bufferView;if(l(n)){let i=e.bufferViews[n];if(l(i.byteStride)&&i.byteStride>0)return i.byteStride}return Q.getSizeInBytes(t.componentType)*Cd(t.type)}var Fl=hAe;function fAe(e){We.accessor(e,function(n){l(n.bufferView)&&(n.byteOffset=n.byteOffset??0)}),We.bufferView(e,function(n){l(n.buffer)&&(n.byteOffset=n.byteOffset??0)}),We.mesh(e,function(n){We.meshPrimitive(n,function(i){if(i.mode=i.mode??ie.TRIANGLES,!l(i.material)){l(e.materials)||(e.materials=[]);let o={name:"default"};i.material=Ls(e.materials,o)}})}),We.accessorContainingVertexAttributeData(e,function(n){let i=e.accessors[n],o=i.bufferView;if(i.normalized=i.normalized??!1,l(o)){let r=e.bufferViews[o];r.byteStride=Fl(e,i),r.target=ie.ARRAY_BUFFER}}),We.accessorContainingIndexData(e,function(n){let o=e.accessors[n].bufferView;if(l(o)){let r=e.bufferViews[o];r.target=ie.ELEMENT_ARRAY_BUFFER}}),We.material(e,function(n){let i=n.extensions??Y.EMPTY_OBJECT,o=i.KHR_materials_common;if(l(o)){let c=o.technique,d=l(o.values)?o.values:{};o.values=d,d.ambient=l(d.ambient)?d.ambient:[0,0,0,1],d.emission=l(d.emission)?d.emission:[0,0,0,1],d.transparency=d.transparency??1,c!=="CONSTANT"&&(d.diffuse=l(d.diffuse)?d.diffuse:[0,0,0,1],c!=="LAMBERT"&&(d.specular=l(d.specular)?d.specular:[0,0,0,1],d.shininess=d.shininess??0)),o.transparent=o.transparent??!1,o.doubleSided=o.doubleSided??!1;return}n.emissiveFactor=n.emissiveFactor??[0,0,0],n.alphaMode=n.alphaMode??"OPAQUE",n.doubleSided=n.doubleSided??!1,n.alphaMode==="MASK"&&(n.alphaCutoff=n.alphaCutoff??.5);let r=i.KHR_techniques_webgl;l(r)&&We.materialValue(n,function(c){l(c.index)&&l_(c)}),l_(n.emissiveTexture),l_(n.normalTexture),l_(n.occlusionTexture);let s=n.pbrMetallicRoughness;l(s)&&(s.baseColorFactor=s.baseColorFactor??[1,1,1,1],s.metallicFactor=s.metallicFactor??1,s.roughnessFactor=s.roughnessFactor??1,l_(s.baseColorTexture),l_(s.metallicRoughnessTexture));let a=i.KHR_materials_pbrSpecularGlossiness;l(a)&&(a.diffuseFactor=a.diffuseFactor??[1,1,1,1],a.specularFactor=a.specularFactor??[1,1,1],a.glossinessFactor=a.glossinessFactor??1,l_(a.specularGlossinessTexture))}),We.animation(e,function(n){We.animationSampler(n,function(i){i.interpolation=i.interpolation??"LINEAR"})});let t=pAe(e);return We.node(e,function(n,i){l(t[i])||l(n.translation)||l(n.rotation)||l(n.scale)?(n.translation=n.translation??[0,0,0],n.rotation=n.rotation??[0,0,0,1],n.scale=n.scale??[1,1,1]):n.matrix=n.matrix??[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]}),We.sampler(e,function(n){n.wrapS=n.wrapS??ie.REPEAT,n.wrapT=n.wrapT??ie.REPEAT}),l(e.scenes)&&!l(e.scene)&&(e.scene=0),e}function pAe(e){let t={};return We.animation(e,function(n){We.animationChannel(n,function(i){let o=i.target,r=o.node,s=o.path;(s==="translation"||s==="rotation"||s==="scale")&&(t[r]=!0)})}),t}function l_(e){l(e)&&(e.texCoord=e.texCoord??0)}var UI=fAe;var gln=_(T(),1);function bAe(e){return We.shader(e,function(t){R5(t)}),We.buffer(e,function(t){R5(t)}),We.image(e,function(t){R5(t)}),R5(e),e}function R5(e){e.extras=l(e.extras)?e.extras:{},e.extras._pipeline=l(e.extras._pipeline)?e.extras._pipeline:{}}var dg=bAe;var Wln=_(T(),1);var Vln=_(T(),1);var _ln=_(T(),1);function gAe(e,t){let n=e.extensionsRequired;if(l(n)){let i=n.indexOf(t);i>=0&&n.splice(i,1),n.length===0&&delete e.extensionsRequired}}var DI=gAe;function yAe(e,t){let n=e.extensionsUsed;if(l(n)){let i=n.indexOf(t);i>=0&&n.splice(i,1),DI(e,t),n.length===0&&delete e.extensionsUsed}}var d_=yAe;var xAe=4;function _Ae(e){if(zm(e)!=="glTF")throw new ae("File is not valid binary glTF");let n=joe(e,0,5),i=n[1];if(i!==1&&i!==2)throw new ae("Binary glTF version is not 1 or 2");return i===1?TAe(e,n):SAe(e,n)}function joe(e,t,n){let i=new DataView(e.buffer),o=new Array(n);for(let r=0;r<n;++r)o[r]=i.getUint32(e.byteOffset+t+r*xAe,!0);return o}function TAe(e,t){let n=t[2],i=t[3];if(t[4]!==0)throw new ae("Binary glTF scene format is not JSON");let r=20,s=r+i,a=Pl(e,r,i),c=JSON.parse(a);dg(c);let d=e.subarray(s,n),u=c.buffers;if(l(u)&&Object.keys(u).length>0){let h=u.binary_glTF??u.KHR_binary_glTF;l(h)&&(h.extras._pipeline.source=d,delete h.uri)}return d_(c,"KHR_binary_glTF"),c}function SAe(e,t){let n=t[2],i=12,o,r;for(;i<n;){let s=joe(e,i,2),a=s[0],c=s[1];i+=8;let d=e.subarray(i,i+a);if(i+=a,c===1313821514){let u=Pl(d);o=JSON.parse(u),dg(o)}else c===5130562&&(r=d)}if(l(o)&&l(r)){let s=o.buffers;if(l(s)&&s.length>0){let a=s[0];a.extras._pipeline.source=r}}return o}var BI=_Ae;var Fln=_(T(),1);function CAe(e){return We.shader(e,function(t){Z5(t)}),We.buffer(e,function(t){Z5(t)}),We.image(e,function(t){Z5(t)}),Z5(e),e}function Z5(e){l(e.extras)&&(l(e.extras._pipeline)&&delete e.extras._pipeline,Object.keys(e.extras).length===0&&delete e.extras)}var OI=CAe;var pun=_(T(),1);var kln=_(T(),1);function VAe(e,t){let n=e.extensionsUsed;l(n)||(n=[],e.extensionsUsed=n),Ls(n,t,!0)}var vu=VAe;var Qln=_(T(),1);var Bln=_(T(),1);function LAe(e){switch(e){case Q.BYTE:return function(t,n,i,o,r){for(let s=0;s<i;++s)r[s]=t.getInt8(n+s*o)};case Q.UNSIGNED_BYTE:return function(t,n,i,o,r){for(let s=0;s<i;++s)r[s]=t.getUint8(n+s*o)};case Q.SHORT:return function(t,n,i,o,r){for(let s=0;s<i;++s)r[s]=t.getInt16(n+s*o,!0)};case Q.UNSIGNED_SHORT:return function(t,n,i,o,r){for(let s=0;s<i;++s)r[s]=t.getUint16(n+s*o,!0)};case Q.INT:return function(t,n,i,o,r){for(let s=0;s<i;++s)r[s]=t.getInt32(n+s*o,!0)};case Q.UNSIGNED_INT:return function(t,n,i,o,r){for(let s=0;s<i;++s)r[s]=t.getUint32(n+s*o,!0)};case Q.FLOAT:return function(t,n,i,o,r){for(let s=0;s<i;++s)r[s]=t.getFloat32(n+s*o,!0)};case Q.DOUBLE:return function(t,n,i,o,r){for(let s=0;s<i;++s)r[s]=t.getFloat64(n+s*o,!0)}}}var nb=LAe;function RAe(e,t){let n=e.bufferViews,i=e.buffers,o=t.bufferView,r=Cd(t.type);if(!l(t.bufferView))return{min:new Array(r).fill(0),max:new Array(r).fill(0)};let s=new Array(r).fill(Number.POSITIVE_INFINITY),a=new Array(r).fill(Number.NEGATIVE_INFINITY),c=n[o],d=c.buffer,h=i[d].extras._pipeline.source,p=t.count,g=Fl(e,t),f=t.byteOffset+c.byteOffset+h.byteOffset,y=t.componentType,x=Q.getSizeInBytes(y),S=new DataView(h.buffer),C=new Array(r),V=nb(y);for(let L=0;L<p;L++){V(S,f,r,x,C);for(let Z=0;Z<r;Z++){let E=C[Z];s[Z]=Math.min(s[Z],E),a[Z]=Math.max(a[Z],E)}f+=g}return{min:s,max:a}}var u_=RAe;var ndn=_(T(),1);var ZAe=[ie.FUNC_ADD,ie.FUNC_ADD],GAe=[ie.ONE,ie.ZERO,ie.ONE,ie.ZERO];function qoe(e,t){let n=e.enable;return l(n)?n.indexOf(t)>-1:!1}var EAe=[ie.ZERO,ie.ONE,ie.SRC_COLOR,ie.ONE_MINUS_SRC_COLOR,ie.SRC_ALPHA,ie.ONE_MINUS_SRC_ALPHA,ie.DST_ALPHA,ie.ONE_MINUS_DST_ALPHA,ie.DST_COLOR,ie.ONE_MINUS_DST_COLOR];function IAe(e,t){if(!l(e))return t;for(let n=0;n<4;n++)if(EAe.indexOf(e[n])===-1)return t;return e}function XAe(e){let t={},n={},i=e.techniques;return l(i)&&(We.technique(e,function(o,r){let s=o.states;if(l(s)){let a=n[r]={};if(qoe(s,ie.BLEND)){a.alphaMode="BLEND";let c=s.functions;l(c)&&(l(c.blendEquationSeparate)||l(c.blendFuncSeparate))&&(t[r]={blendEquation:c.blendEquationSeparate??ZAe,blendFactors:IAe(c.blendFuncSeparate,GAe)})}qoe(s,ie.CULL_FACE)||(a.doubleSided=!0),delete o.states}}),Object.keys(t).length>0&&(l(e.extensions)||(e.extensions={}),vu(e,"KHR_blend")),We.material(e,function(o){if(l(o.technique)){let r=n[o.technique];We.objectLegacy(r,function(a,c){o[c]=a});let s=t[o.technique];l(s)&&(l(o.extensions)||(o.extensions={}),o.extensions.KHR_blend=s)}})),e}var YI=XAe;var fdn=_(T(),1);var adn=_(T(),1);function WAe(e,t){let n=e.extensionsRequired;l(n)||(n=[],e.extensionsRequired=n),Ls(n,t,!0),vu(e,t)}var zI=WAe;function PAe(e){let t=e.techniques,n={},i={},o={};if(l(t)){let r={programs:[],shaders:[],techniques:[]},s=e.glExtensionsUsed;delete e.glExtensionsUsed,We.technique(e,function(a,c){let d={name:a.name,program:void 0,attributes:{},uniforms:{}},u;if(We.techniqueAttribute(a,function(h,p){u=a.parameters[h],d.attributes[p]={semantic:u.semantic}}),We.techniqueUniform(a,function(h,p){u=a.parameters[h],d.uniforms[p]={count:u.count,node:u.node,type:u.type,semantic:u.semantic,value:u.value},l(n[c])||(n[c]={}),n[c][h]=p}),l(o[a.program]))d.program=o[a.program];else{let h=e.programs[a.program],p={name:h.name,fragmentShader:void 0,vertexShader:void 0,glExtensions:s},g=e.shaders[h.fragmentShader];p.fragmentShader=Ls(r.shaders,g,!0);let f=e.shaders[h.vertexShader];p.vertexShader=Ls(r.shaders,f,!0),d.program=Ls(r.programs,p),o[a.program]=d.program}i[c]=Ls(r.techniques,d)}),r.techniques.length>0&&(l(e.extensions)||(e.extensions={}),e.extensions.KHR_techniques_webgl=r,vu(e,"KHR_techniques_webgl"),zI(e,"KHR_techniques_webgl"))}return We.material(e,function(r){if(l(r.technique)){let s={technique:i[r.technique]};We.objectLegacy(r.values,function(a,c){l(s.values)||(s.values={});let d=n[r.technique][c];l(d)&&(s.values[d]=a)}),l(r.extensions)||(r.extensions={}),r.extensions.KHR_techniques_webgl=s}delete r.technique,delete r.values}),delete e.techniques,delete e.programs,delete e.shaders,e}var HI=PAe;var Ldn=_(T(),1);var xdn=_(T(),1);function vAe(e,t){yo.typeOf.object("material",e),yo.defined("handler",t);let n=e.pbrMetallicRoughness;if(l(n)){if(l(n.baseColorTexture)){let r=n.baseColorTexture,s=t(r.index,r);if(l(s))return s}if(l(n.metallicRoughnessTexture)){let r=n.metallicRoughnessTexture,s=t(r.index,r);if(l(s))return s}}let{extensions:i}=e;if(l(i)){let r=i.KHR_materials_pbrSpecularGlossiness;if(l(r)){if(l(r.diffuseTexture)){let c=r.diffuseTexture,d=t(c.index,c);if(l(d))return d}if(l(r.specularGlossinessTexture)){let c=r.specularGlossinessTexture,d=t(c.index,c);if(l(d))return d}}let s=i.KHR_materials_specular;if(l(s)){let{specularTexture:c,specularColorTexture:d}=s;if(l(c)){let u=t(c.index,c);if(l(u))return u}if(l(d)){let u=t(d.index,d);if(l(u))return u}}let a=i.KHR_materials_common;if(l(a)&&l(a.values)){let{diffuse:c,ambient:d,emission:u,specular:h}=a.values;if(l(c)&&l(c.index)){let p=t(c.index,c);if(l(p))return p}if(l(d)&&l(d.index)){let p=t(d.index,d);if(l(p))return p}if(l(u)&&l(u.index)){let p=t(u.index,u);if(l(p))return p}if(l(h)&&l(h.index)){let p=t(h.index,h);if(l(p))return p}}}let o=We.materialValue(e,function(r){if(l(r.index)){let s=t(r.index,r);if(l(s))return s}});if(l(o))return o;if(l(e.emissiveTexture)){let r=e.emissiveTexture,s=t(r.index,r);if(l(s))return s}if(l(e.normalTexture)){let r=e.normalTexture,s=t(r.index,r);if(l(s))return s}if(l(e.occlusionTexture)){let r=e.occlusionTexture,s=t(r.index,r);if(l(s))return s}}var IC=vAe;var $oe=["mesh","node","material","accessor","bufferView","buffer","texture","sampler","image"];function wAe(e,t){return t=t??$oe,$oe.forEach(function(n){t.indexOf(n)>-1&&AAe(e,n)}),e}var FAe={accessor:"accessors",buffer:"buffers",bufferView:"bufferViews",image:"images",node:"nodes",material:"materials",mesh:"meshes",sampler:"samplers",texture:"textures"};function AAe(e,t){let n=FAe[t],i=e[n];if(l(i)){let o=0,r=_f[t](e),s=i.length;for(let a=0;a<s;++a)r[a]||(xf[t](e,a-o),o++)}}function xf(){}xf.accessor=function(e,t){e.accessors.splice(t,1),We.mesh(e,function(i){We.meshPrimitive(i,function(o){We.meshPrimitiveAttribute(o,function(a,c){a>t&&o.attributes[c]--}),We.meshPrimitiveTarget(o,function(a){We.meshPrimitiveTargetAttribute(a,function(c,d){c>t&&a[d]--})});let r=o.indices;l(r)&&r>t&&o.indices--;let s=o.extensions;l(s)&&l(s.CESIUM_primitive_outline)&&s.CESIUM_primitive_outline.indices>t&&--s.CESIUM_primitive_outline.indices})}),We.skin(e,function(i){l(i.inverseBindMatrices)&&i.inverseBindMatrices>t&&i.inverseBindMatrices--}),We.animation(e,function(i){We.animationSampler(i,function(o){l(o.input)&&o.input>t&&o.input--,l(o.output)&&o.output>t&&o.output--})})};xf.buffer=function(e,t){e.buffers.splice(t,1),We.bufferView(e,function(i){l(i.buffer)&&i.buffer>t&&i.buffer--,l(i.extensions)&&l(i.extensions.EXT_meshopt_compression)&&i.extensions.EXT_meshopt_compression.buffer--})};xf.bufferView=function(e,t){if(e.bufferViews.splice(t,1),We.accessor(e,function(i){l(i.bufferView)&&i.bufferView>t&&i.bufferView--}),We.shader(e,function(i){l(i.bufferView)&&i.bufferView>t&&i.bufferView--}),We.image(e,function(i){l(i.bufferView)&&i.bufferView>t&&i.bufferView--}),ar(e,"KHR_draco_mesh_compression")&&We.mesh(e,function(i){We.meshPrimitive(i,function(o){l(o.extensions)&&l(o.extensions.KHR_draco_mesh_compression)&&o.extensions.KHR_draco_mesh_compression.bufferView>t&&o.extensions.KHR_draco_mesh_compression.bufferView--})}),ar(e,"EXT_feature_metadata")){let o=e.extensions.EXT_feature_metadata.featureTables;for(let r in o)if(o.hasOwnProperty(r)){let a=o[r].properties;if(l(a)){for(let c in a)if(a.hasOwnProperty(c)){let d=a[c];l(d.bufferView)&&d.bufferView>t&&d.bufferView--,l(d.arrayOffsetBufferView)&&d.arrayOffsetBufferView>t&&d.arrayOffsetBufferView--,l(d.stringOffsetBufferView)&&d.stringOffsetBufferView>t&&d.stringOffsetBufferView--}}}}if(ar(e,"EXT_structural_metadata")){let o=e.extensions.EXT_structural_metadata.propertyTables;if(l(o)){let r=o.length;for(let s=0;s<r;++s){let c=o[s].properties;for(let d in c)if(c.hasOwnProperty(d)){let u=c[d];l(u.values)&&u.values>t&&u.values--,l(u.arrayOffsets)&&u.arrayOffsets>t&&u.arrayOffsets--,l(u.stringOffsets)&&u.stringOffsets>t&&u.stringOffsets--}}}}};xf.image=function(e,t){e.images.splice(t,1),We.texture(e,function(i){l(i.source)&&i.source>t&&--i.source;let o=i.extensions;l(o)&&l(o.EXT_texture_webp)&&o.EXT_texture_webp.source>t?--i.extensions.EXT_texture_webp.source:l(o)&&l(o.KHR_texture_basisu)&&o.KHR_texture_basisu.source>t&&--i.extensions.KHR_texture_basisu.source})};xf.mesh=function(e,t){e.meshes.splice(t,1),We.node(e,function(i){l(i.mesh)&&(i.mesh>t?i.mesh--:i.mesh===t&&delete i.mesh)})};xf.node=function(e,t){e.nodes.splice(t,1),We.skin(e,function(i){l(i.skeleton)&&i.skeleton>t&&i.skeleton--,i.joints=i.joints.map(function(o){return o>t?o-1:o})}),We.animation(e,function(i){We.animationChannel(i,function(o){l(o.target)&&l(o.target.node)&&o.target.node>t&&o.target.node--})}),We.technique(e,function(i){We.techniqueUniform(i,function(o){l(o.node)&&o.node>t&&o.node--})}),We.node(e,function(i){l(i.children)&&(i.children=i.children.filter(function(o){return o!==t}).map(function(o){return o>t?o-1:o}))}),We.scene(e,function(i){i.nodes=i.nodes.filter(function(o){return o!==t}).map(function(o){return o>t?o-1:o})})};xf.material=function(e,t){e.materials.splice(t,1),We.mesh(e,function(i){We.meshPrimitive(i,function(o){l(o.material)&&o.material>t&&o.material--})})};xf.sampler=function(e,t){e.samplers.splice(t,1),We.texture(e,function(i){l(i.sampler)&&i.sampler>t&&--i.sampler})};xf.texture=function(e,t){if(e.textures.splice(t,1),We.material(e,function(i){IC(i,function(o,r){r.index>t&&--r.index})}),ar(e,"EXT_feature_metadata")){We.mesh(e,function(r){We.meshPrimitive(r,function(s){let a=s.extensions;if(l(a)&&l(a.EXT_feature_metadata)){let d=a.EXT_feature_metadata.featureIdTextures;if(l(d)){let u=d.length;for(let h=0;h<u;++h){let g=d[h].featureIds.texture;g.index>t&&--g.index}}}})});let o=e.extensions.EXT_feature_metadata.featureTextures;for(let r in o)if(o.hasOwnProperty(r)){let a=o[r].properties;if(l(a)){for(let c in a)if(a.hasOwnProperty(c)){let u=a[c].texture;u.index>t&&--u.index}}}}if(ar(e,"EXT_mesh_features")&&We.mesh(e,function(i){We.meshPrimitive(i,function(o){let r=o.extensions;if(l(r)&&l(r.EXT_mesh_features)){let a=r.EXT_mesh_features.featureIds;if(l(a)){let c=a.length;for(let d=0;d<c;++d){let u=a[d];l(u.texture)&&u.texture.index>t&&--u.texture.index}}}})}),ar(e,"EXT_structural_metadata")){let o=e.extensions.EXT_structural_metadata.propertyTextures;if(l(o)){let r=o.length;for(let s=0;s<r;++s){let c=o[s].properties;for(let d in c)if(c.hasOwnProperty(d)){let u=c[d];u.index>t&&--u.index}}}}};function _f(){}_f.accessor=function(e){let t={};return We.mesh(e,function(n){We.meshPrimitive(n,function(i){We.meshPrimitiveAttribute(i,function(r){t[r]=!0}),We.meshPrimitiveTarget(i,function(r){We.meshPrimitiveTargetAttribute(r,function(s){t[s]=!0})});let o=i.indices;l(o)&&(t[o]=!0)})}),We.skin(e,function(n){l(n.inverseBindMatrices)&&(t[n.inverseBindMatrices]=!0)}),We.animation(e,function(n){We.animationSampler(n,function(i){l(i.input)&&(t[i.input]=!0),l(i.output)&&(t[i.output]=!0)})}),ar(e,"EXT_mesh_gpu_instancing")&&We.node(e,function(n){l(n.extensions)&&l(n.extensions.EXT_mesh_gpu_instancing)&&Object.keys(n.extensions.EXT_mesh_gpu_instancing.attributes).forEach(function(i){let o=n.extensions.EXT_mesh_gpu_instancing.attributes[i];t[o]=!0})}),ar(e,"CESIUM_primitive_outline")&&We.mesh(e,function(n){We.meshPrimitive(n,function(i){let o=i.extensions;if(l(o)&&l(o.CESIUM_primitive_outline)){let s=o.CESIUM_primitive_outline.indices;l(s)&&(t[s]=!0)}})}),t};_f.buffer=function(e){let t={};return We.bufferView(e,function(n){l(n.buffer)&&(t[n.buffer]=!0),l(n.extensions)&&l(n.extensions.EXT_meshopt_compression)&&(t[n.extensions.EXT_meshopt_compression.buffer]=!0)}),t};_f.bufferView=function(e){let t={};if(We.accessor(e,function(n){l(n.bufferView)&&(t[n.bufferView]=!0)}),We.shader(e,function(n){l(n.bufferView)&&(t[n.bufferView]=!0)}),We.image(e,function(n){l(n.bufferView)&&(t[n.bufferView]=!0)}),ar(e,"KHR_draco_mesh_compression")&&We.mesh(e,function(n){We.meshPrimitive(n,function(i){l(i.extensions)&&l(i.extensions.KHR_draco_mesh_compression)&&(t[i.extensions.KHR_draco_mesh_compression.bufferView]=!0)})}),ar(e,"EXT_feature_metadata")){let i=e.extensions.EXT_feature_metadata.featureTables;for(let o in i)if(i.hasOwnProperty(o)){let s=i[o].properties;if(l(s)){for(let a in s)if(s.hasOwnProperty(a)){let c=s[a];l(c.bufferView)&&(t[c.bufferView]=!0),l(c.arrayOffsetBufferView)&&(t[c.arrayOffsetBufferView]=!0),l(c.stringOffsetBufferView)&&(t[c.stringOffsetBufferView]=!0)}}}}if(ar(e,"EXT_structural_metadata")){let i=e.extensions.EXT_structural_metadata.propertyTables;if(l(i)){let o=i.length;for(let r=0;r<o;++r){let a=i[r].properties;for(let c in a)if(a.hasOwnProperty(c)){let d=a[c];l(d.values)&&(t[d.values]=!0),l(d.arrayOffsets)&&(t[d.arrayOffsets]=!0),l(d.stringOffsets)&&(t[d.stringOffsets]=!0)}}}}return t};_f.image=function(e){let t={};return We.texture(e,function(n){l(n.source)&&(t[n.source]=!0),l(n.extensions)&&l(n.extensions.EXT_texture_webp)?t[n.extensions.EXT_texture_webp.source]=!0:l(n.extensions)&&l(n.extensions.KHR_texture_basisu)&&(t[n.extensions.KHR_texture_basisu.source]=!0)}),t};_f.mesh=function(e){let t={};return We.node(e,function(n){if(l(n.mesh&&l(e.meshes))){let i=e.meshes[n.mesh];l(i)&&l(i.primitives)&&i.primitives.length>0&&(t[n.mesh]=!0)}}),t};function ere(e,t,n){let i=e.nodes[t];return l(i.mesh)||l(i.camera)||l(i.skin)||l(i.weights)||l(i.extras)||l(i.extensions)&&Object.keys(i.extensions).length!==0||l(n[t])?!1:!l(i.children)||i.children.filter(function(o){return!ere(e,o,n)}).length===0}_f.node=function(e){let t={};return We.skin(e,function(n){l(n.skeleton)&&(t[n.skeleton]=!0),We.skinJoint(n,function(i){t[i]=!0})}),We.animation(e,function(n){We.animationChannel(n,function(i){l(i.target)&&l(i.target.node)&&(t[i.target.node]=!0)})}),We.technique(e,function(n){We.techniqueUniform(n,function(i){l(i.node)&&(t[i.node]=!0)})}),We.node(e,function(n,i){ere(e,i,t)||(t[i]=!0)}),t};_f.material=function(e){let t={};return We.mesh(e,function(n){We.meshPrimitive(n,function(i){l(i.material)&&(t[i.material]=!0)})}),t};_f.texture=function(e){let t={};if(We.material(e,function(n){IC(n,function(i){t[i]=!0})}),ar(e,"EXT_feature_metadata")){We.mesh(e,function(o){We.meshPrimitive(o,function(r){let s=r.extensions;if(l(s)&&l(s.EXT_feature_metadata)){let c=s.EXT_feature_metadata.featureIdTextures;if(l(c)){let d=c.length;for(let u=0;u<d;++u){let p=c[u].featureIds.texture;t[p.index]=!0}}}})});let i=e.extensions.EXT_feature_metadata.featureTextures;for(let o in i)if(i.hasOwnProperty(o)){let s=i[o].properties;if(l(s)){for(let a in s)if(s.hasOwnProperty(a)){let d=s[a].texture;t[d.index]=!0}}}}if(ar(e,"EXT_mesh_features")&&We.mesh(e,function(n){We.meshPrimitive(n,function(i){let o=i.extensions;if(l(o)&&l(o.EXT_mesh_features)){let s=o.EXT_mesh_features.featureIds;if(l(s)){let a=s.length;for(let c=0;c<a;++c){let d=s[c];l(d.texture)&&(t[d.texture.index]=!0)}}}})}),ar(e,"EXT_structural_metadata")){let i=e.extensions.EXT_structural_metadata.propertyTextures;if(l(i)){let o=i.length;for(let r=0;r<o;++r){let a=i[r].properties;for(let c in a)if(a.hasOwnProperty(c)){let d=a[c];t[d.index]=!0}}}}return t};_f.sampler=function(e){let t={};return We.texture(e,function(n){l(n.sampler)&&(t[n.sampler]=!0)}),t};var KI=wAe;var Ddn=_(T(),1);var Gdn=_(T(),1);function MAe(e,t){let n={byteLength:t.length,extras:{_pipeline:{source:t}}},o={buffer:Ls(e.buffers,n),byteOffset:0,byteLength:t.length};return Ls(e.bufferViews,o)}var JI=MAe;var wdn=_(T(),1);function NAe(e,t){let n=Fl(e,t),i=Q.getSizeInBytes(t.componentType),o=Cd(t.type),r=t.count,s=new Array(o*r);if(!l(t.bufferView))return s.fill(0);let a=e.bufferViews[t.bufferView],c=e.buffers[a.buffer].extras._pipeline.source,d=t.byteOffset+a.byteOffset+c.byteOffset,u=new DataView(c.buffer),h=new Array(o),p=nb(t.componentType);for(let g=0;g<r;++g){p(u,d,o,i,h);for(let f=0;f<o;++f)s[g*o+f]=h[f];d+=n}return s}var QI=NAe;function kAe(e){let t;return We.accessorWithSemantic(e,"JOINTS_0",function(n){let i=e.accessors[n];t=i.componentType,t===ie.BYTE?G5(e,i,Q.UNSIGNED_BYTE):t!==ie.UNSIGNED_BYTE&&t!==ie.UNSIGNED_SHORT&&G5(e,i,Q.UNSIGNED_SHORT)}),We.accessorWithSemantic(e,"WEIGHTS_0",function(n){let i=e.accessors[n];t=i.componentType,t===ie.BYTE?G5(e,i,Q.UNSIGNED_BYTE):t===ie.SHORT&&G5(e,i,Q.UNSIGNED_SHORT)}),e}function G5(e,t,n){let i=Q.createTypedArray(n,QI(e,t)),o=new Uint8Array(i.buffer);t.bufferView=JI(e,o),t.componentType=n,t.byteOffset=0}var jI=kAe;var Hdn=_(T(),1);function UAe(e,t){return d_(e,t),t==="CESIUM_RTC"&&DAe(e),Xz(e,t)}function DAe(e){We.technique(e,function(t){We.techniqueUniform(t,function(n){n.semantic==="CESIUM_RTC_MODELVIEW"&&(n.semantic="MODELVIEW")})})}function Xz(e,t){if(Array.isArray(e)){let n=e.length;for(let i=0;i<n;++i)Xz(e[i],t)}else if(e!==null&&typeof e=="object"&&e.constructor===Object){let n=e.extensions,i;l(n)&&(i=n[t],l(i)&&(delete n[t],Object.keys(n).length===0&&delete e.extensions));for(let o in e)Object.prototype.hasOwnProperty.call(e,o)&&Xz(e[o],t);return i}}var m_=UAe;var E5={.8:KAe,"1.0":pMe,"2.0":void 0};function BAe(e,t){t=t??Y.EMPTY_OBJECT;let n=t.targetVersion,i=e.version;e.asset=e.asset??{version:"1.0"},e.asset.version=e.asset.version??"1.0",i=(i??e.asset.version).toString(),Object.prototype.hasOwnProperty.call(E5,i)||(l(i)&&(i=i.substring(0,3)),Object.prototype.hasOwnProperty.call(E5,i)||(i="1.0"));let o=E5[i];for(;l(o)&&i!==n;)o(e,t),i=e.asset.version,o=E5[i];return t.keepLegacyExtensions||(yMe(e,t),xMe(e)),e}function ire(e){let t=e.materials;for(let n in t)if(Object.prototype.hasOwnProperty.call(t,n)){let i=t[n],o=i.instanceTechnique;l(o)&&(i.technique=o.technique,i.values=o.values,delete i.instanceTechnique)}}function OAe(e){let t=e.meshes;for(let n in t)if(Object.prototype.hasOwnProperty.call(t,n)){let o=t[n].primitives;if(l(o)){let r=o.length;for(let s=0;s<r;++s){let a=o[s],c=a.primitive??ie.TRIANGLES;a.mode=a.mode??c,delete a.primitive}}}}function YAe(e){let t=e.nodes,n=new m,i=new ve;for(let o in t)if(Object.prototype.hasOwnProperty.call(t,o)){let r=t[o];if(l(r.rotation)){let a=r.rotation;m.fromArray(a,0,n),ve.fromAxisAngle(n,a[3],i),r.rotation=[i.x,i.y,i.z,i.w]}let s=r.instanceSkin;l(s)&&(r.skeletons=s.skeletons,r.skin=s.skin,r.meshes=s.meshes,delete r.instanceSkin)}}function zAe(e){let t=e.animations,n=e.accessors,i=e.bufferViews,o=e.buffers,r={},s=new m,a=new ve;for(let c in t)if(Object.prototype.hasOwnProperty.call(t,c)){let d=t[c],u=d.channels,h=d.parameters,p=d.samplers;if(l(u)){let g=u.length;for(let f=0;f<g;++f){let y=u[f];if(y.target.path==="rotation"){let x=h[p[y.sampler].output];if(l(r[x]))continue;r[x]=!0;let S=n[x],C=i[S.bufferView],L=o[C.buffer].extras._pipeline.source,Z=L.byteOffset+C.byteOffset+S.byteOffset,E=S.componentType,P=S.count,W=Cd(S.type),v=S.count*W,A=Q.createArrayBufferView(E,L.buffer,Z,v);for(let b=0;b<P;b++){let R=b*W;m.unpack(A,R,s);let G=A[R+3];ve.fromAxisAngle(s,G,a),ve.pack(a,A,R)}}}}}}function HAe(e){let t=e.techniques;for(let n in t)if(Object.prototype.hasOwnProperty.call(t,n)){let i=t[n],o=i.passes;if(l(o)){let r=i.pass??"defaultPass";if(Object.prototype.hasOwnProperty.call(o,r)){let s=o[r],a=s.instanceProgram;i.attributes=i.attributes??a.attributes,i.program=i.program??a.program,i.uniforms=i.uniforms??a.uniforms,i.states=i.states??s.states}delete i.passes,delete i.pass}}}function KAe(e){l(e.asset)||(e.asset={});let t=e.asset;if(t.version="1.0",typeof t.profile=="string"){let n=t.profile.split(" ");t.profile={api:n[0],version:n[1]}}else t.profile={};if(l(e.version)&&delete e.version,ire(e),OAe(e),YAe(e),zAe(e),HAe(e),l(e.allExtensions)&&(e.extensionsUsed=e.allExtensions,delete e.allExtensions),l(e.lights)){let n=e.extensions??{};e.extensions=n;let i=n.KHR_materials_common??{};n.KHR_materials_common=i,i.lights=e.lights,delete e.lights,vu(e,"KHR_materials_common")}}function JAe(e){let t=e.animations;for(let n in t)if(Object.prototype.hasOwnProperty.call(t,n)){let i=t[n],o=i.parameters;if(l(o)){let r=i.samplers;for(let s in r)if(Object.prototype.hasOwnProperty.call(r,s)){let a=r[s];a.input=o[a.input],a.output=o[a.output]}delete i.parameters}}}function tre(e,t){let n=[];for(let i in e)if(Object.prototype.hasOwnProperty.call(e,i)){let o=e[i];t[i]=n.length,n.push(o),l(o.name)||(o.name=i)}return n}function QAe(e){let t,n={accessors:{},animations:{},buffers:{},bufferViews:{},cameras:{},images:{},materials:{},meshes:{},nodes:{},programs:{},samplers:{},scenes:{},shaders:{},skins:{},textures:{},techniques:{}},i,o={},r=e.nodes;for(let s in r)Object.prototype.hasOwnProperty.call(r,s)&&(i=r[s].jointName,l(i)&&(o[i]=s));for(let s in e)if(Object.prototype.hasOwnProperty.call(e,s)&&l(n[s])){let a={},c=e[s];e[s]=tre(c,a),n[s]=a}for(i in o)Object.prototype.hasOwnProperty.call(o,i)&&(o[i]=n.nodes[o[i]]);l(e.scene)&&(e.scene=n.scenes[e.scene]),We.bufferView(e,function(s){l(s.buffer)&&(s.buffer=n.buffers[s.buffer])}),We.accessor(e,function(s){l(s.bufferView)&&(s.bufferView=n.bufferViews[s.bufferView])}),We.shader(e,function(s){let a=s.extensions;if(l(a)){let c=a.KHR_binary_glTF;l(c)&&(s.bufferView=n.bufferViews[c.bufferView],delete a.KHR_binary_glTF),Object.keys(a).length===0&&delete s.extensions}}),We.program(e,function(s){l(s.vertexShader)&&(s.vertexShader=n.shaders[s.vertexShader]),l(s.fragmentShader)&&(s.fragmentShader=n.shaders[s.fragmentShader])}),We.technique(e,function(s){l(s.program)&&(s.program=n.programs[s.program]),We.techniqueParameter(s,function(a){l(a.node)&&(a.node=n.nodes[a.node]);let c=a.value;typeof c=="string"&&(a.value={index:n.textures[c]})})}),We.mesh(e,function(s){We.meshPrimitive(s,function(a){l(a.indices)&&(a.indices=n.accessors[a.indices]),We.meshPrimitiveAttribute(a,function(c,d){a.attributes[d]=n.accessors[c]}),l(a.material)&&(a.material=n.materials[a.material])})}),We.node(e,function(s){let a=s.children;if(l(a)){let c=a.length;for(t=0;t<c;++t)a[t]=n.nodes[a[t]]}if(l(s.meshes)){let c=s.meshes,d=c.length;if(d>0)for(s.mesh=n.meshes[c[0]],t=1;t<d;++t){let u={mesh:n.meshes[c[t]]},h=Ls(e.nodes,u);l(a)||(a=[],s.children=a),a.push(h)}delete s.meshes}if(l(s.camera)&&(s.camera=n.cameras[s.camera]),l(s.skin)&&(s.skin=n.skins[s.skin]),l(s.skeletons)){let c=s.skeletons;if(c.length>0&&l(s.skin)){let u=e.skins[s.skin];u.skeleton=n.nodes[c[0]]}delete s.skeletons}l(s.jointName)&&delete s.jointName}),We.skin(e,function(s){l(s.inverseBindMatrices)&&(s.inverseBindMatrices=n.accessors[s.inverseBindMatrices]);let a=s.jointNames;if(l(a)){let c=[],d=a.length;for(t=0;t<d;++t)c[t]=o[a[t]];s.joints=c,delete s.jointNames}}),We.scene(e,function(s){let a=s.nodes;if(l(a)){let c=a.length;for(t=0;t<c;++t)a[t]=n.nodes[a[t]]}}),We.animation(e,function(s){let a={};s.samplers=tre(s.samplers,a),We.animationSampler(s,function(c){c.input=n.accessors[c.input],c.output=n.accessors[c.output]}),We.animationChannel(s,function(c){c.sampler=a[c.sampler];let d=c.target;l(d)&&(d.node=n.nodes[d.id],delete d.id)})}),We.material(e,function(s){l(s.technique)&&(s.technique=n.techniques[s.technique]),We.materialValue(s,function(c,d){typeof c=="string"&&(s.values[d]={index:n.textures[c]})});let a=s.extensions;if(l(a)){let c=a.KHR_materials_common;l(c)&&l(c.values)&&We.materialValue(c,function(d,u){typeof d=="string"&&(c.values[u]={index:n.textures[d]})})}}),We.image(e,function(s){let a=s.extensions;if(l(a)){let c=a.KHR_binary_glTF;l(c)&&(s.bufferView=n.bufferViews[c.bufferView],s.mimeType=c.mimeType,delete a.KHR_binary_glTF),Object.keys(a).length===0&&delete s.extensions}}),We.texture(e,function(s){l(s.sampler)&&(s.sampler=n.samplers[s.sampler]),l(s.source)&&(s.source=n.images[s.source])})}function jAe(e){We.animation(e,function(t){We.animationSampler(t,function(n){delete n.name})})}function qAe(e){for(let t in e)if(Object.prototype.hasOwnProperty.call(e,t)){let n=e[t];Array.isArray(n)&&n.length===0&&delete e[t]}We.node(e,function(t){l(t.children)&&t.children.length===0&&delete t.children})}function $Ae(e){let t=e.asset;delete t.profile,delete t.premultipliedAlpha}var eMe={CESIUM_RTC:!0,KHR_materials_common:!0,WEB3D_quantized_attributes:!0};function tMe(e){let t=e.extensionsUsed;if(e.extensionsRequired=e.extensionsRequired??[],l(t)){let n=t.length;for(let i=0;i<n;++i){let o=t[i];l(eMe[o])&&e.extensionsRequired.push(o)}}}function nMe(e){We.buffer(e,function(t){delete t.type})}function iMe(e){We.texture(e,function(t){delete t.format,delete t.internalFormat,delete t.target,delete t.type})}function oMe(e){We.mesh(e,function(t){We.meshPrimitive(t,function(n){We.meshPrimitiveAttribute(n,function(i,o){o==="TEXCOORD"?n.attributes.TEXCOORD_0=i:o==="COLOR"&&(n.attributes.COLOR_0=i)}),delete n.attributes.TEXCOORD,delete n.attributes.COLOR})}),We.technique(e,function(t){We.techniqueParameter(t,function(n){let i=n.semantic;l(i)&&(i==="TEXCOORD"?n.semantic="TEXCOORD_0":i==="COLOR"&&(n.semantic="COLOR_0"))})})}var rMe={POSITION:!0,NORMAL:!0,TANGENT:!0},sMe={COLOR:"COLOR",JOINT:"JOINTS",JOINTS:"JOINTS",TEXCOORD:"TEXCOORD",WEIGHT:"WEIGHTS",WEIGHTS:"WEIGHTS"};function aMe(e){let t={};We.mesh(e,function(n){We.meshPrimitive(n,function(i){We.meshPrimitiveAttribute(i,function(o,r){if(r.charAt(0)!=="_"){let s=r.search(/_[0-9]+/g),a=r,c="_0";s>=0&&(a=r.substring(0,s),c=r.substring(s));let d,u=sMe[a];l(u)?(d=u+c,t[r]=d):l(rMe[a])||(d=`_${r}`,t[r]=d)}});for(let o in t)if(Object.prototype.hasOwnProperty.call(t,o)){let r=t[o],s=i.attributes[o];l(s)&&(delete i.attributes[o],i.attributes[r]=s)}})}),We.technique(e,function(n){We.techniqueParameter(n,function(i){let o=t[i.semantic];l(o)&&(i.semantic=o)})})}function cMe(e){We.camera(e,function(t){let n=t.perspective;if(l(n)){let i=n.aspectRatio;l(i)&&i===0&&delete n.aspectRatio;let o=n.yfov;l(o)&&o===0&&(n.yfov=1)}})}function Pz(e,t){return l(t.byteStride)&&t.byteStride!==0?t.byteStride:Fl(e,t)}function lMe(e){We.buffer(e,function(t){l(t.byteLength)||(t.byteLength=t.extras._pipeline.source.length)}),We.accessor(e,function(t){let n=t.bufferView;if(l(n)){let i=e.bufferViews[n],o=Pz(e,t),r=t.byteOffset+t.count*o;i.byteLength=Math.max(i.byteLength??0,r)}})}function dMe(e){let t,n,i,o=e.bufferViews,r={};We.accessorContainingVertexAttributeData(e,function(a){let c=e.accessors[a];l(c.bufferView)&&(r[c.bufferView]=!0)});let s={};We.accessor(e,function(a){l(a.bufferView)&&(s[a.bufferView]=s[a.bufferView]??[],s[a.bufferView].push(a))});for(let a in s)if(Object.prototype.hasOwnProperty.call(s,a)){i=o[a];let c=s[a];c.sort(function(p,g){return p.byteOffset-g.byteOffset});let d=0,u=0,h=c.length;for(t=0;t<h;++t){let p=c[t],g=Pz(e,p),f=p.byteOffset,y=p.count*g;delete p.byteStride;let x=t<h-1,S=x?Pz(e,c[t+1]):void 0;if(g!==S){let C=Ye(i,!0);r[a]&&(C.byteStride=g),C.byteOffset+=d,C.byteLength=f+y-d;let V=Ls(o,C);for(n=u;n<=t;++n)p=c[n],p.bufferView=V,p.byteOffset=p.byteOffset-d;d=x?c[t+1].byteOffset:void 0,u=t+1}}}KI(e,["accessor","bufferView","buffer"])}function uMe(e){We.accessorWithSemantic(e,"POSITION",function(t){let n=e.accessors[t];if(!l(n.min)||!l(n.max)){let i=u_(e,n);n.min=i.min,n.max=i.max}})}function ore(e){return(!l(e.children)||e.children.length===0)&&(!l(e.meshes)||e.meshes.length===0)&&!l(e.camera)&&!l(e.skin)&&!l(e.skeletons)&&!l(e.jointName)&&(!l(e.translation)||m.fromArray(e.translation).equals(m.ZERO))&&(!l(e.scale)||m.fromArray(e.scale).equals(new m(1,1,1)))&&(!l(e.rotation)||se.fromArray(e.rotation).equals(new se(0,0,0,1)))&&(!l(e.matrix)||F.fromColumnMajorArray(e.matrix).equals(F.IDENTITY))&&!l(e.extensions)&&!l(e.extras)}function rre(e,t){We.scene(e,function(n){let i=n.nodes;if(l(i)){let o=i.length;for(let r=o;r>=0;--r)if(i[r]===t){i.splice(r,1);return}}}),We.node(e,function(n,i){if(l(n.children)){let o=n.children.indexOf(t);o>-1&&(n.children.splice(o,1),ore(n)&&rre(e,i))}}),delete e.nodes[t]}function mMe(e){return We.node(e,function(t,n){ore(t)&&rre(e,n)}),e}function hMe(e){We.animation(e,function(t){We.animationSampler(t,function(n){let i=e.accessors[n.input];if(!l(i.min)||!l(i.max)){let o=u_(e,i);i.min=o.min,i.max=o.max}})})}function fMe(e){We.accessor(e,function(t){if(l(t.min)||l(t.max)){let n=u_(e,t);l(t.min)&&(t.min=n.min),l(t.max)&&(t.max=n.max)}})}function pMe(e){e.asset=e.asset??{},e.asset.version="2.0",ire(e),JAe(e),mMe(e),QAe(e),jAe(e),$Ae(e),tMe(e),lMe(e),dMe(e),uMe(e),hMe(e),fMe(e),nMe(e),iMe(e),oMe(e),aMe(e),jI(e),cMe(e),YI(e),HI(e),qAe(e)}var bMe=["u_tex","u_diffuse","u_emission","u_diffuse_tex"],gMe=["u_diffuse","u_diffuse_mat"];function vz(e){e.pbrMetallicRoughness=l(e.pbrMetallicRoughness)?e.pbrMetallicRoughness:{},e.pbrMetallicRoughness.roughnessFactor=1,e.pbrMetallicRoughness.metallicFactor=0}function wz(e){return l(e.index)}function Fz(e){return Array.isArray(e)&&e.length===4}function sre(e){let t=new Array(4);t[3]=e[3];for(let n=0;n<3;n++){let i=e[n];i<=.04045?t[n]=e[n]*.07739938080495357:t[n]=Math.pow((i+.055)*.9478672985781991,2.4)}return t}function yMe(e,t){t=t??Y.EMPTY_OBJECT;let n=t.baseColorTextureNames??bMe,i=t.baseColorFactorNames??gMe;We.material(e,function(o){We.materialValue(o,function(r,s){n.indexOf(s)!==-1&&wz(r)?(vz(o),o.pbrMetallicRoughness.baseColorTexture=r):i.indexOf(s)!==-1&&Fz(r)&&(vz(o),o.pbrMetallicRoughness.baseColorFactor=sre(r))})}),m_(e,"KHR_techniques_webgl"),m_(e,"KHR_blend")}function Wz(e,t){l(t)&&(Fz(t)?e.pbrMetallicRoughness.baseColorFactor=sre(t):wz(t)&&(e.pbrMetallicRoughness.baseColorTexture=t))}function nre(e,t){l(t)&&(Fz(t)?e.emissiveFactor=t.slice(0,3):wz(t)&&(e.emissiveTexture=t))}function xMe(e){We.material(e,function(t){let n=(t.extensions??Y.EMPTY_OBJECT).KHR_materials_common;if(!l(n))return;let i=n.values??{},o=i.ambient,r=i.diffuse,s=i.emission,a=i.transparency,c=n.doubleSided,d=n.transparent;vz(t),n.technique==="CONSTANT"?(vu(e,"KHR_materials_unlit"),t.extensions=l(t.extensions)?t.extensions:{},t.extensions.KHR_materials_unlit={},Wz(t,s),Wz(t,o)):(Wz(t,r),nre(t,o),nre(t,s)),l(c)&&(t.doubleSided=c),l(a)&&(l(t.pbrMetallicRoughness.baseColorFactor)?t.pbrMetallicRoughness.baseColorFactor[3]*=a:t.pbrMetallicRoughness.baseColorFactor=[1,1,1,a]),l(d)&&(t.alphaMode=d?"BLEND":"OPAQUE")}),m_(e,"KHR_materials_common")}var qI=BAe;var Gun=_(T(),1);function mc(){}mc.getError=function(e,t,n){let i=`Failed to load ${e}: ${t}`;l(n)&&l(n.message)&&(i+=` ${n.message}`);let o=new ae(i);return l(n)&&(o.stack=`Original stack: ${n.stack} Handler stack: ${o.stack}`),o};mc.getNodeTransform=function(e){return l(e.matrix)?e.matrix:F.fromTranslationQuaternionRotationScale(l(e.translation)?e.translation:m.ZERO,l(e.rotation)?e.rotation:ve.IDENTITY,l(e.scale)?e.scale:m.ONE)};mc.getAttributeBySemantic=function(e,t,n){let i=e.attributes,o=i.length;for(let r=0;r<o;++r){let s=i[r],a=l(n)?s.setIndex===n:!0;if(s.semantic===t&&a)return s}};mc.getAttributeByName=function(e,t){let n=e.attributes,i=n.length;for(let o=0;o<i;++o){let r=n[o];if(r.name===t)return r}};mc.getFeatureIdsByLabel=function(e,t){for(let n=0;n<e.length;n++){let i=e[n];if(i.positionalLabel===t||i.label===t)return i}};mc.hasQuantizedAttributes=function(e){if(!l(e))return!1;for(let t=0;t<e.length;t++){let n=e[t];if(l(n.quantization))return!0}return!1};mc.getAttributeInfo=function(e){let t=e.semantic,n=e.setIndex,i,o=!1;l(t)?(i=ft.getVariableName(t,n),o=!0):(i=e.name,i=i.replace(/^_/,""),i=i.toLowerCase());let r=/^color_\d+$/.test(i),s=e.type,a=on.getGlslType(s);r&&(a="vec4");let c=l(e.quantization),d;return c&&(d=r?"vec4":on.getGlslType(e.quantization.type)),{attribute:e,isQuantized:c,variableName:i,hasSemantic:o,glslType:a,quantizedGlslType:d}};var _Me=new m,TMe=new m;mc.getPositionMinMax=function(e,t,n){let i=mc.getAttributeBySemantic(e,"POSITION"),o=i.max,r=i.min;return l(n)&&l(t)&&(r=m.add(r,t,TMe),o=m.add(o,n,_Me)),{min:r,max:o}};mc.getAxisCorrectionMatrix=function(e,t,n){return n=F.clone(F.IDENTITY,n),e===Po.Y?n=F.clone(Po.Y_UP_TO_Z_UP,n):e===Po.X&&(n=F.clone(Po.X_UP_TO_Z_UP,n)),t===Po.Z&&(n=F.multiplyTransformation(n,Po.Z_UP_TO_X_UP,n)),n};var SMe=new $;mc.getCullFace=function(e,t){if(!we.isTriangles(t))return Ti.BACK;let n=F.getMatrix3(e,SMe);return $.determinant(n)<0?Ti.FRONT:Ti.BACK};mc.sanitizeGlslIdentifier=function(e){let t=e.replaceAll(/[^A-Za-z0-9]+/g,"_");return t=t.replace(/^gl_/,""),/^\d/.test(t)&&(t=`_${t}`),t};mc.supportedExtensions={AGI_articulations:!0,CESIUM_primitive_outline:!0,CESIUM_RTC:!0,EXT_feature_metadata:!0,EXT_implicit_cylinder_region:!0,EXT_implicit_ellipsoid_region:!0,EXT_instance_features:!0,EXT_mesh_features:!0,EXT_mesh_gpu_instancing:!0,EXT_meshopt_compression:!0,EXT_primitive_voxels:!0,EXT_structural_metadata:!0,EXT_texture_webp:!0,KHR_blend:!0,KHR_draco_mesh_compression:!0,KHR_implicit_shapes:!0,KHR_materials_common:!0,KHR_materials_pbrSpecularGlossiness:!0,KHR_materials_specular:!0,KHR_materials_anisotropy:!0,KHR_materials_clearcoat:!0,KHR_materials_unlit:!0,KHR_mesh_quantization:!0,KHR_techniques_webgl:!0,KHR_texture_basisu:!0,KHR_texture_transform:!0,WEB3D_quantized_attributes:!0};mc.checkSupportedExtensions=function(e){let t=e.length;for(let n=0;n<t;n++){let i=e[n];if(!mc.supportedExtensions[i])throw new ae(`Unsupported glTF Extension: ${i}`)}};var Qt=mc;function ug(e){e=e??Y.EMPTY_OBJECT;let t=e.resourceCache,n=e.gltfResource,i=e.baseResource,o=e.typedArray,r=e.gltfJson,s=e.cacheKey;this._resourceCache=t,this._gltfResource=n,this._baseResource=i,this._typedArray=o,this._gltfJson=r,this._cacheKey=s,this._gltf=void 0,this._bufferLoaders=[],this._state=yt.UNLOADED,this._promise=void 0}l(Object.create)&&(ug.prototype=Object.create(Ki.prototype),ug.prototype.constructor=ug);Object.defineProperties(ug.prototype,{cacheKey:{get:function(){return this._cacheKey}},gltf:{get:function(){return this._gltf}}});ug.prototype.load=async function(){return l(this._promise)?this._promise:(this._state=yt.LOADING,l(this._gltfJson)?(this._promise=are(this,this._gltfJson),this._promise):l(this._typedArray)?(this._promise=cre(this,this._typedArray),this._promise):(this._promise=CMe(this),this._promise))};async function CMe(e){let t;try{let n=await e._fetchGltf();if(e.isDestroyed())return;t=new Uint8Array(n)}catch(n){if(e.isDestroyed())return;Az(e,n)}return cre(e,t)}function Az(e,t){e.unload(),e._state=yt.FAILED;let n=`Failed to load glTF: ${e._gltfResource.url}`;throw e.getError(n,t)}async function VMe(e,t){if(l(t.asset)&&t.asset.version==="2.0"&&!ar(t,"KHR_techniques_webgl")&&!ar(t,"KHR_materials_common"))return Promise.resolve();let n=[];We.buffer(t,function(i){if(!l(i.extras._pipeline.source)&&l(i.uri)){let o=e._baseResource.getDerivedResource({url:i.uri}),s=e._resourceCache.getExternalBufferLoader({resource:o});e._bufferLoaders.push(s),n.push(s.load().then(function(){s.isDestroyed()||(i.extras._pipeline.source=s.typedArray)}))}}),await Promise.all(n),qI(t)}function LMe(e){let t=[];return We.buffer(e,function(n){let i=n.uri;!l(n.extras._pipeline.source)&&l(i)&&Sp(i)&&(delete n.uri,t.push(Ze.fetchArrayBuffer(i).then(function(o){n.extras._pipeline.source=new Uint8Array(o)})))}),Promise.all(t)}function RMe(e,t){let n=[];return We.buffer(t,function(i,o){let r=i.extras._pipeline.source;if(l(r)&&!l(i.uri)){let a=e._resourceCache.getEmbeddedBufferLoader({parentResource:e._gltfResource,bufferId:o,typedArray:r});e._bufferLoaders.push(a),n.push(a.load())}}),Promise.all(n)}async function are(e,t){try{dg(t),await LMe(t),await VMe(e,t),UI(t),await RMe(e,t),OI(t);let n=t.asset.version;if(n!=="1.0"&&n!=="2.0")throw new ae(`Unsupported glTF version: ${n}`);let i=t.extensionsRequired;return l(i)&&Qt.checkSupportedExtensions(i),e._gltf=t,e._state=yt.READY,e}catch(n){if(e.isDestroyed())return;Az(e,n)}}async function cre(e,t){let n;try{zm(t)==="glTF"?n=BI(t):n=qo(t)}catch(i){if(e.isDestroyed())return;Az(e,i)}return are(e,n)}ug.prototype.unload=function(){let e=this._bufferLoaders,t=e.length;for(let n=0;n<t;++n)e[n]=!e[n].isDestroyed()&&this._resourceCache.unload(e[n]);this._bufferLoaders.length=0,this._gltf=void 0};ug.prototype._fetchGltf=function(){return this._gltfResource.fetchArrayBuffer()};var XC=ug;var Imn=_(T(),1);var hmn=_(T(),1);var nmn=_(T(),1);var Jun=_(T(),1),ZMe={OPAQUE:"OPAQUE",MASK:"MASK",BLEND:"BLEND"},Tf=Object.freeze(ZMe);var Vo={};function GMe(){this.octEncoded=!1,this.octEncodedZXY=!1,this.normalizationRange=void 0,this.quantizedVolumeOffset=void 0,this.quantizedVolumeDimensions=void 0,this.quantizedVolumeStepSize=void 0,this.componentDatatype=void 0,this.type=void 0}function EMe(){this.name=void 0,this.semantic=void 0,this.setIndex=void 0,this.componentDatatype=void 0,this.type=void 0,this.normalized=!1,this.count=void 0,this.min=void 0,this.max=void 0,this.constant=void 0,this.quantization=void 0,this.typedArray=void 0,this.buffer=void 0,this.byteOffset=0,this.byteStride=void 0}function IMe(){this.indexDatatype=void 0,this.count=void 0,this.buffer=void 0,this.typedArray=void 0}function XMe(){this.featureCount=void 0,this.nullFeatureId=void 0,this.propertyTableId=void 0,this.setIndex=void 0,this.label=void 0,this.positionalLabel=void 0}function WMe(){this.featureCount=void 0,this.nullFeatureId=void 0,this.propertyTableId=void 0,this.offset=0,this.repeat=void 0,this.label=void 0,this.positionalLabel=void 0}function PMe(){this.featureCount=void 0,this.nullFeatureId=void 0,this.propertyTableId=void 0,this.textureReader=void 0,this.label=void 0,this.positionalLabel=void 0}function vMe(){this.attributes=[]}function wMe(){this.attributes=[],this.morphTargets=[],this.indices=void 0,this.material=void 0,this.primitiveType=void 0,this.featureIds=[],this.propertyTextureIds=[],this.propertyAttributeIds=[],this.outlineCoordinates=void 0}function FMe(){this.attributes=[],this.featureIds=[],this.transformInWorldSpace=!1}function AMe(){this.index=void 0,this.joints=[],this.inverseBindMatrices=[]}function MMe(){this.name=void 0,this.index=void 0,this.children=[],this.primitives=[],this.instances=void 0,this.skin=void 0,this.matrix=void 0,this.translation=void 0,this.rotation=void 0,this.scale=void 0,this.morphWeights=[],this.articulationName=void 0}function NMe(){this.nodes=[]}var kMe={TRANSLATION:"translation",ROTATION:"rotation",SCALE:"scale",WEIGHTS:"weights"};function UMe(){this.input=[],this.interpolation=void 0,this.output=[]}function DMe(){this.node=void 0,this.path=void 0}function BMe(){this.sampler=void 0,this.target=void 0}function OMe(){this.name=void 0,this.samplers=[],this.channels=[]}function YMe(){this.name=void 0,this.type=void 0,this.minimumValue=void 0,this.maximumValue=void 0,this.initialValue=void 0}function zMe(){this.name=void 0,this.stages=[]}function lre(){this.credits=[]}function HMe(){this.asset=new lre,this.scene=void 0,this.nodes=[],this.skins=[],this.animations=[],this.articulations=[],this.structuralMetadata=void 0,this.upAxis=void 0,this.forwardAxis=void 0,this.transform=F.clone(F.IDENTITY),this.extensions={}}function KMe(){this.texture=void 0,this.index=void 0,this.texCoord=0,this.transform=$.clone($.IDENTITY),this.scale=1,this.channels=void 0}function mg(){this.baseColorTexture=void 0,this.metallicRoughnessTexture=void 0,this.baseColorFactor=se.clone(mg.DEFAULT_BASE_COLOR_FACTOR),this.metallicFactor=mg.DEFAULT_METALLIC_FACTOR,this.roughnessFactor=mg.DEFAULT_ROUGHNESS_FACTOR}mg.DEFAULT_BASE_COLOR_FACTOR=se.ONE;mg.DEFAULT_METALLIC_FACTOR=1;mg.DEFAULT_ROUGHNESS_FACTOR=1;function h_(){this.diffuseTexture=void 0,this.specularGlossinessTexture=void 0,this.diffuseFactor=se.clone(h_.DEFAULT_DIFFUSE_FACTOR),this.specularFactor=m.clone(h_.DEFAULT_SPECULAR_FACTOR),this.glossinessFactor=h_.DEFAULT_GLOSSINESS_FACTOR}h_.DEFAULT_DIFFUSE_FACTOR=se.ONE;h_.DEFAULT_SPECULAR_FACTOR=m.ONE;h_.DEFAULT_GLOSSINESS_FACTOR=1;function $I(){this.specularFactor=$I.DEFAULT_SPECULAR_FACTOR,this.specularTexture=void 0,this.specularColorFactor=m.clone($I.DEFAULT_SPECULAR_COLOR_FACTOR),this.specularColorTexture=void 0}$I.DEFAULT_SPECULAR_FACTOR=1;$I.DEFAULT_SPECULAR_COLOR_FACTOR=m.ONE;function eX(){this.anisotropyStrength=eX.DEFAULT_ANISOTROPY_STRENGTH,this.anisotropyRotation=eX.DEFAULT_ANISOTROPY_ROTATION,this.anisotropyTexture=void 0}eX.DEFAULT_ANISOTROPY_STRENGTH=0;eX.DEFAULT_ANISOTROPY_ROTATION=0;function tX(){this.clearcoatFactor=tX.DEFAULT_CLEARCOAT_FACTOR,this.clearcoatTexture=void 0,this.clearcoatRoughnessFactor=tX.DEFAULT_CLEARCOAT_ROUGHNESS_FACTOR,this.clearcoatRoughnessTexture=void 0,this.clearcoatNormalTexture=void 0}tX.DEFAULT_CLEARCOAT_FACTOR=0;tX.DEFAULT_CLEARCOAT_ROUGHNESS_FACTOR=0;function Mz(){this.metallicRoughness=new mg,this.specularGlossiness=void 0,this.specular=void 0,this.anisotropy=void 0,this.clearcoat=void 0,this.emissiveTexture=void 0,this.normalTexture=void 0,this.occlusionTexture=void 0,this.emissiveFactor=m.clone(Mz.DEFAULT_EMISSIVE_FACTOR),this.alphaMode=Tf.OPAQUE,this.alphaCutoff=.5,this.doubleSided=!1,this.unlit=!1}Mz.DEFAULT_EMISSIVE_FACTOR=m.ZERO;Vo.Quantization=GMe;Vo.Attribute=EMe;Vo.Indices=IMe;Vo.FeatureIdAttribute=XMe;Vo.FeatureIdTexture=PMe;Vo.FeatureIdImplicitRange=WMe;Vo.MorphTarget=vMe;Vo.Primitive=wMe;Vo.Instances=FMe;Vo.Skin=AMe;Vo.Node=MMe;Vo.Scene=NMe;Vo.AnimatedPropertyType=Object.freeze(kMe);Vo.AnimationSampler=UMe;Vo.AnimationTarget=DMe;Vo.AnimationChannel=BMe;Vo.Animation=OMe;Vo.ArticulationStage=YMe;Vo.Articulation=zMe;Vo.Asset=lre;Vo.Components=HMe;Vo.TextureReader=KMe;Vo.MetallicRoughness=mg;Vo.SpecularGlossiness=h_;Vo.Specular=$I;Vo.Anisotropy=eX;Vo.Clearcoat=tX;Vo.Material=Mz;var Tn=Vo;var I5={};I5.getImageIdFromTexture=function(e){e=e??Y.EMPTY_OBJECT;let{gltf:t,textureId:n,supportedImageFormats:i}=e,o=t.textures[n],r=o.extensions;if(l(r)){if(i.webp&&l(r.EXT_texture_webp))return r.EXT_texture_webp.source;if(i.basis&&l(r.KHR_texture_basisu))return r.KHR_texture_basisu.source}return o.source};I5.createSampler=function(e){e=e??Y.EMPTY_OBJECT;let{gltf:t,textureInfo:n,compressedTextureNoMipmap:i=!1}=e,o=Vn.REPEAT,r=Vn.REPEAT,s=jt.LINEAR,a=hi.LINEAR,c=n.index,u=t.textures[c].sampler;if(l(u)){let h=t.samplers[u];o=h.wrapS??o,r=h.wrapT??r,s=h.minFilter??s,a=h.magFilter??a}return i&&s!==jt.LINEAR&&s!==jt.NEAREST&&(s===jt.NEAREST_MIPMAP_NEAREST||s===jt.NEAREST_MIPMAP_LINEAR?s=jt.NEAREST:s=jt.LINEAR),new qt({wrapS:o,wrapT:r,minificationFilter:s,magnificationFilter:a})};var JMe=new U(1,1);I5.createModelTextureReader=function(e){e=e??Y.EMPTY_OBJECT;let{textureInfo:t,channels:n,texture:i}=e,o=t.texCoord??0,r,s=t.extensions?.KHR_texture_transform;if(l(s)){o=s.texCoord??o;let c=l(s.offset)?U.unpack(s.offset):U.ZERO,d=s.rotation??0,u=l(s.scale)?U.unpack(s.scale):JMe;d=-d,r=new $(Math.cos(d)*u.x,-Math.sin(d)*u.y,c.x,Math.sin(d)*u.x,Math.cos(d)*u.y,c.y,0,0,1)}let a=new Tn.TextureReader;return a.index=t.index,a.texture=i,a.texCoord=o,a.scale=t.scale,a.transform=r,a.channels=n,a};var Al=I5;var bmn=_(T(),1);function QMe(e){let t=document.createElement("canvas");return t.width=X.nextPowerOfTwo(e.width),t.height=X.nextPowerOfTwo(e.height),t.getContext("2d").drawImage(e,0,0,e.width,e.height,0,0,t.width,t.height),t}var hg=QMe;function fg(e){e=e??Y.EMPTY_OBJECT;let t=e.resourceCache,n=e.gltf,i=e.textureInfo,o=e.gltfResource,r=e.baseResource,s=e.supportedImageFormats,a=e.cacheKey,c=e.asynchronous??!0,d=i.index,u=Al.getImageIdFromTexture({gltf:n,textureId:d,supportedImageFormats:s});this._resourceCache=t,this._gltf=n,this._textureInfo=i,this._imageId=u,this._gltfResource=o,this._baseResource=r,this._cacheKey=a,this._asynchronous=c,this._imageLoader=void 0,this._image=void 0,this._mipLevels=void 0,this._texture=void 0,this._state=yt.UNLOADED,this._promise=void 0}l(Object.create)&&(fg.prototype=Object.create(Ki.prototype),fg.prototype.constructor=fg);Object.defineProperties(fg.prototype,{cacheKey:{get:function(){return this._cacheKey}},texture:{get:function(){return this._texture}}});var jMe=new Nz;async function qMe(e){let t=e._resourceCache;try{let n=t.getImageLoader({gltf:e._gltf,imageId:e._imageId,gltfResource:e._gltfResource,baseResource:e._baseResource});return e._imageLoader=n,await n.load(),e.isDestroyed()?void 0:(e._image=n.image,e._mipLevels=n.mipLevels,e._state=yt.LOADED,e)}catch(n){if(e.isDestroyed())return;throw e.unload(),e._state=yt.FAILED,e.getError("Failed to load texture",n)}}fg.prototype.load=async function(){return l(this._promise)?this._promise:(this._state=yt.LOADING,this._promise=qMe(this),this._promise)};function Nz(){this.gltf=void 0,this.textureInfo=void 0,this.textureId=void 0,this.image=void 0,this.context=void 0,this.texture=void 0}Nz.prototype.set=function(e,t,n,i,o,r){this.gltf=e,this.textureInfo=t,this.textureId=n,this.image=i,this.mipLevels=o,this.context=r};Nz.prototype.execute=function(){this.texture=dre(this.gltf,this.textureInfo,this.textureId,this.image,this.mipLevels,this.context)};function dre(e,t,n,i,o,r){let s=i.internalFormat,a=!1;it.isCompressedFormat(s)&&!l(o)&&(a=!0);let c=Al.createSampler({gltf:e,textureInfo:t,compressedTextureNoMipmap:a}),d=c.minificationFilter,u=c.wrapS,h=c.wrapT,p=d===jt.NEAREST_MIPMAP_NEAREST||d===jt.NEAREST_MIPMAP_LINEAR||d===jt.LINEAR_MIPMAP_NEAREST||d===jt.LINEAR_MIPMAP_LINEAR,g=!l(s)&&p,f=g||u===Vn.REPEAT||u===Vn.MIRRORED_REPEAT||h===Vn.REPEAT||h===Vn.MIRRORED_REPEAT,y=!X.isPowerOfTwo(i.width)||!X.isPowerOfTwo(i.height),x=f&&y,S;return l(s)?(!r.webgl2&&it.isCompressedFormat(s)&&y&&f&&console.warn("Compressed texture uses REPEAT or MIRRORED_REPEAT texture wrap mode and dimensions are not powers of two. The texture may be rendered incorrectly."),S=vt.create({id:n,context:r,source:{arrayBufferView:i.bufferView,mipLevels:o},width:i.width,height:i.height,pixelFormat:i.internalFormat,sampler:c})):(x&&(i=hg(i)),S=vt.create({id:n,context:r,source:i,sampler:c,flipY:!1,skipColorSpaceConversion:!0})),g&&S.generateMipmap(),S}fg.prototype.process=function(e){if(this._state===yt.READY)return!0;if(this._state!==yt.LOADED&&this._state!==yt.PROCESSING||l(this._texture)||!l(this._image))return!1;this._state=yt.PROCESSING;let t;if(this._asynchronous){let n=jMe;if(n.set(this._gltf,this._textureInfo,this._cacheKey,this._image,this._mipLevels,e.context),!e.jobScheduler.execute(n,Ma.TEXTURE))return;t=n.texture}else t=dre(this._gltf,this._textureInfo,this._cacheKey,this._image,this._mipLevels,e.context);return this.unload(),this._texture=t,this._state=yt.READY,this._resourceCache.statistics.addTextureLoader(this),!0};fg.prototype.unload=function(){l(this._texture)&&this._texture.destroy(),l(this._imageLoader)&&!this._imageLoader.isDestroyed()&&this._resourceCache.unload(this._imageLoader),this._imageLoader=void 0,this._image=void 0,this._mipLevels=void 0,this._texture=void 0,this._gltf=void 0};var WC=fg;var Umn=_(T(),1);function pg(e){e=e??Y.EMPTY_OBJECT;let t=e.resourceCache,n=e.gltf,i=e.gltfResource,o=e.baseResource,r=e.bufferViewId,s=e.primitive,a=e.draco,c=e.attributeSemantic,d=e.accessorId,u=e.cacheKey,h=e.asynchronous??!0,p=e.loadBuffer??!1,g=e.loadTypedArray??!1;this._resourceCache=t,this._gltfResource=i,this._baseResource=o,this._gltf=n,this._bufferViewId=r,this._primitive=s,this._draco=a,this._attributeSemantic=c,this._accessorId=d,this._cacheKey=u,this._asynchronous=h,this._loadBuffer=p,this._loadTypedArray=g,this._bufferViewLoader=void 0,this._dracoLoader=void 0,this._quantization=void 0,this._typedArray=void 0,this._buffer=void 0,this._state=yt.UNLOADED,this._promise=void 0}l(Object.create)&&(pg.prototype=Object.create(Ki.prototype),pg.prototype.constructor=pg);Object.defineProperties(pg.prototype,{cacheKey:{get:function(){return this._cacheKey}},buffer:{get:function(){return this._buffer}},typedArray:{get:function(){return this._typedArray}},quantization:{get:function(){return this._quantization}}});function $Me(e,t){return l(e)&&l(e.attributes)&&l(e.attributes[t])}pg.prototype.load=async function(){return l(this._promise)?this._promise:$Me(this._draco,this._attributeSemantic)?(this._promise=tNe(this),this._promise):(this._promise=iNe(this),this._promise)};function eNe(e,t,n,i){let r=(1<<e.quantizationBits)-1,s=1/r,a=new Tn.Quantization;if(a.componentDatatype=t,a.octEncoded=e.octEncoded,a.octEncodedZXY=!0,a.type=i,a.octEncoded)a.type=on.VEC2,a.normalizationRange=r;else{let c=on.getMathType(i);if(c===Number){let d=e.range;a.quantizedVolumeOffset=e.minValues[0],a.quantizedVolumeDimensions=d,a.normalizationRange=r,a.quantizedVolumeStepSize=d*s}else{a.quantizedVolumeOffset=c.unpack(e.minValues),a.normalizationRange=c.unpack(new Array(n).fill(r));let d=new Array(n).fill(e.range);a.quantizedVolumeDimensions=c.unpack(d);let u=d.map(function(h){return h*s});a.quantizedVolumeStepSize=c.unpack(u)}}return a}async function tNe(e){e._state=yt.LOADING;let t=e._resourceCache;try{let n=t.getDracoLoader({gltf:e._gltf,primitive:e._primitive,draco:e._draco,gltfResource:e._gltfResource,baseResource:e._baseResource});return e._dracoLoader=n,await n.load(),e.isDestroyed()?void 0:(e._state=yt.LOADED,e)}catch{if(e.isDestroyed())return;kz(e)}}function nNe(e){e._state=yt.PROCESSING;let n=e._dracoLoader.decodedData.vertexAttributes,i=e._attributeSemantic,o=n[i],r=e._accessorId,a=e._gltf.accessors[r].type,c=o.array,d=o.data.quantization;l(d)&&(e._quantization=eNe(d,o.data.componentDatatype,o.data.componentsPerAttribute,a)),e._typedArray=new Uint8Array(c.buffer,c.byteOffset,c.byteLength)}async function iNe(e){e._state=yt.LOADING;let t=e._resourceCache;try{let n=t.getBufferViewLoader({gltf:e._gltf,bufferViewId:e._bufferViewId,gltfResource:e._gltfResource,baseResource:e._baseResource});return e._bufferViewLoader=n,await n.load(),e.isDestroyed()?void 0:(e._typedArray=n.typedArray,e._state=yt.PROCESSING,e)}catch(n){if(e.isDestroyed())return;kz(e,n)}}function kz(e,t){throw e.unload(),e._state=yt.FAILED,e.getError("Failed to load vertex buffer",t)}function Uz(){this.typedArray=void 0,this.context=void 0,this.buffer=void 0}Uz.prototype.set=function(e,t){this.typedArray=e,this.context=t};Uz.prototype.execute=function(){this.buffer=ure(this.typedArray,this.context)};function ure(e,t){let n=xt.createVertexBuffer({typedArray:e,context:t,usage:Me.STATIC_DRAW});return n.vertexArrayDestroyable=!1,n}var oNe=new Uz;pg.prototype.process=function(e){if(this._state===yt.READY)return!0;if(this._state!==yt.LOADED&&this._state!==yt.PROCESSING)return!1;if(l(this._dracoLoader)){try{if(!this._dracoLoader.process(e))return!1}catch(i){kz(this,i)}nNe(this)}let t,n=this._typedArray;if(this._loadBuffer&&this._asynchronous){let i=oNe;if(i.set(n,e.context),!e.jobScheduler.execute(i,Ma.BUFFER))return!1;t=i.buffer}else this._loadBuffer&&(t=ure(n,e.context));return this.unload(),this._buffer=t,this._typedArray=this._loadTypedArray?n:void 0,this._state=yt.READY,this._resourceCache.statistics.addGeometryLoader(this),!0};pg.prototype.unload=function(){l(this._buffer)&&this._buffer.destroy();let e=this._resourceCache;l(this._bufferViewLoader)&&!this._bufferViewLoader.isDestroyed()&&e.unload(this._bufferViewLoader),l(this._dracoLoader)&&e.unload(this._dracoLoader),this._bufferViewLoader=void 0,this._dracoLoader=void 0,this._typedArray=void 0,this._buffer=void 0,this._gltf=void 0,this._primitive=void 0};var PC=pg;var ghn=_(T(),1);var dhn=_(T(),1);var Hmn=_(T(),1);function nX(e){e=e??Y.EMPTY_OBJECT;let t=e.id,n=e.properties??{},i={};for(let o in n)if(n.hasOwnProperty(o)){let r=n[o];l(r.semantic)&&(i[r.semantic]=r)}this._id=t,this._name=e.name,this._description=e.description,this._properties=n,this._propertiesBySemantic=i,this._extras=Ye(e.extras,!0),this._extensions=Ye(e.extensions,!0)}nX.fromJson=function(e){e=e??Y.EMPTY_OBJECT;let t=e.id,n=e.class,i={};for(let o in n.properties)if(n.properties.hasOwnProperty(o)){let r=yf.fromJson({id:o,property:n.properties[o],enums:e.enums});i[o]=r}return new nX({id:t,name:n.name,description:n.description,properties:i,extras:n.extras,extensions:n.extensions})};Object.defineProperties(nX.prototype,{properties:{get:function(){return this._properties}},propertiesBySemantic:{get:function(){return this._propertiesBySemantic}},id:{get:function(){return this._id}},name:{get:function(){return this._name}},description:{get:function(){return this._description}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});nX.BATCH_TABLE_CLASS_NAME="_batchTable";var Jm=nX;var ihn=_(T(),1);var jmn=_(T(),1);function X5(e){e=e??Y.EMPTY_OBJECT;let t=e.value,n=e.name;this._value=t,this._name=n,this._description=e.description,this._extras=Ye(e.extras,!0),this._extensions=Ye(e.extensions,!0)}X5.fromJson=function(e){return new X5({value:e.value,name:e.name,description:e.description,extras:e.extras,extensions:e.extensions})};Object.defineProperties(X5.prototype,{value:{get:function(){return this._value}},name:{get:function(){return this._name}},description:{get:function(){return this._description}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});var iX=X5;function W5(e){e=e??Y.EMPTY_OBJECT;let t=e.id,n=e.values,i={},o={},r=n.length;for(let a=0;a<r;++a){let c=n[a];i[c.value]=c.name,o[c.name]=c.value}let s=e.valueType??Ft.UINT16;this._values=n,this._namesByValue=i,this._valuesByName=o,this._valueType=s,this._id=t,this._name=e.name,this._description=e.description,this._extras=Ye(e.extras,!0),this._extensions=Ye(e.extensions,!0)}W5.fromJson=function(e){e=e??Y.EMPTY_OBJECT;let t=e.id,n=e.enum,i=n.values.map(function(o){return iX.fromJson(o)});return new W5({id:t,values:i,valueType:Ft[n.valueType],name:n.name,description:n.description,extras:n.extras,extensions:n.extensions})};Object.defineProperties(W5.prototype,{values:{get:function(){return this._values}},namesByValue:{get:function(){return this._namesByValue}},valuesByName:{get:function(){return this._valuesByName}},valueType:{get:function(){return this._valueType}},id:{get:function(){return this._id}},name:{get:function(){return this._name}},description:{get:function(){return this._description}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});var oX=W5;function P5(e){e=e??Y.EMPTY_OBJECT;let t=e.classes??{},n=e.enums??{};this._classes=t,this._enums=n,this._id=e.id,this._name=e.name,this._description=e.description,this._version=e.version,this._extras=Ye(e.extras,!0),this._extensions=Ye(e.extensions,!0)}P5.fromJson=function(e){let t={};if(l(e.enums))for(let i in e.enums)e.enums.hasOwnProperty(i)&&(t[i]=oX.fromJson({id:i,enum:e.enums[i]}));let n={};if(l(e.classes))for(let i in e.classes)e.classes.hasOwnProperty(i)&&(n[i]=Jm.fromJson({id:i,class:e.classes[i],enums:t}));return new P5({id:e.id,name:e.name,description:e.description,version:e.version,classes:n,enums:t,extras:e.extras,extensions:e.extensions})};Object.defineProperties(P5.prototype,{classes:{get:function(){return this._classes}},enums:{get:function(){return this._enums}},id:{get:function(){return this._id}},name:{get:function(){return this._name}},description:{get:function(){return this._description}},version:{get:function(){return this._version}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});var Vd=P5;function f_(e){e=e??Y.EMPTY_OBJECT;let t=e.schema,n=e.resource,i=e.cacheKey;this._schema=l(t)?Vd.fromJson(t):void 0,this._resource=n,this._cacheKey=i,this._state=yt.UNLOADED,this._promise=void 0}l(Object.create)&&(f_.prototype=Object.create(Ki.prototype),f_.prototype.constructor=f_);Object.defineProperties(f_.prototype,{cacheKey:{get:function(){return this._cacheKey}},schema:{get:function(){return this._schema}}});f_.prototype.load=async function(){return l(this._promise)?this._promise:l(this._schema)?(this._promise=Promise.resolve(this),this._promise):(this._promise=rNe(this),this._promise)};async function rNe(e){let t=e._resource;e._state=yt.LOADING;try{let n=await t.fetchJson();return e.isDestroyed()?void 0:(e._schema=Vd.fromJson(n),e._state=yt.READY,e)}catch(n){if(e.isDestroyed())return;e._state=yt.FAILED;let i=`Failed to load schema: ${t.url}`;throw e.getError(i,n)}}f_.prototype.unload=function(){this._schema=void 0};var vC=f_;var Vhn=_(T(),1);var Qm={};function wC(e){return $h(e.url)}function v5(e){let{byteOffset:t,byteLength:n}=e;if(ri(e,"EXT_meshopt_compression")){let i=e.extensions.EXT_meshopt_compression;t=i.byteOffset??0,n=i.byteLength}return`${t}-${t+n}`}function sNe(e,t){let n=t.byteOffset+e.byteOffset,{componentType:i,type:o,count:r}=e;return`${n}-${i}-${o}-${r}`}function mre(e,t){return`${wC(e)}-buffer-id-${t}`}function rX(e,t,n,i){if(l(e.uri)){let o=i.getDerivedResource({url:e.uri});return wC(o)}return mre(n,t)}function Dz(e,t,n,i){let o=t.bufferView,r=e.bufferViews[o],s=r.buffer,a=e.buffers[s],c=rX(a,s,n,i),d=v5(r);return`${c}-range-${d}`}function hre(e,t,n,i){let o=e.images[t],r=o.bufferView,s=o.uri;if(l(s)){let p=i.getDerivedResource({url:s});return wC(p)}let a=e.bufferViews[r],c=a.buffer,d=e.buffers[c],u=rX(d,c,n,i),h=v5(a);return`${u}-range-${h}`}function aNe(e,t){let n=Al.createSampler({gltf:e,textureInfo:t});return`${n.wrapS}-${n.wrapT}-${n.minificationFilter}-${n.magnificationFilter}`}Qm.getSchemaCacheKey=function(e){let{schema:t,resource:n}=e;return l(t)?`embedded-schema:${JSON.stringify(t)}`:`external-schema:${wC(n)}`};Qm.getExternalBufferCacheKey=function(e){e=e??Y.EMPTY_OBJECT;let{resource:t}=e;return`external-buffer:${wC(t)}`};Qm.getEmbeddedBufferCacheKey=function(e){e=e??Y.EMPTY_OBJECT;let{parentResource:t,bufferId:n}=e;return`embedded-buffer:${mre(t,n)}`};Qm.getGltfCacheKey=function(e){e=e??Y.EMPTY_OBJECT;let{gltfResource:t}=e;return`gltf:${wC(t)}`};Qm.getBufferViewCacheKey=function(e){e=e??Y.EMPTY_OBJECT;let{gltf:t,bufferViewId:n,gltfResource:i,baseResource:o}=e,r=t.bufferViews[n],s=r.buffer,a=t.buffers[s];ri(r,"EXT_meshopt_compression")&&(s=r.extensions.EXT_meshopt_compression.buffer);let c=rX(a,s,i,o),d=v5(r);return`buffer-view:${c}-range-${d}`};Qm.getDracoCacheKey=function(e){e=e??Y.EMPTY_OBJECT;let{gltf:t,draco:n,gltfResource:i,baseResource:o}=e;return`draco:${Dz(t,n,i,o)}`};Qm.getVertexBufferCacheKey=function(e){e=e??Y.EMPTY_OBJECT;let{gltf:t,gltfResource:n,baseResource:i,frameState:o,bufferViewId:r,draco:s,attributeSemantic:a,dequantize:c=!1,loadBuffer:d=!1,loadTypedArray:u=!1}=e,h="";if(c&&(h+="-dequantize"),d&&(h+="-buffer",h+=`-context-${o.context.id}`),u&&(h+="-typed-array"),l(s))return`vertex-buffer:${Dz(t,s,n,i)}-draco-${a}${h}`;let p=t.bufferViews[r],g=p.buffer,f=t.buffers[g],y=rX(f,g,n,i),x=v5(p);return`vertex-buffer:${y}-range-${x}${h}`};Qm.getIndexBufferCacheKey=function(e){e=e??Y.EMPTY_OBJECT;let{gltf:t,accessorId:n,gltfResource:i,baseResource:o,frameState:r,draco:s,loadBuffer:a=!1,loadTypedArray:c=!1}=e,d="";if(a&&(d+="-buffer",d+=`-context-${r.context.id}`),c&&(d+="-typed-array"),l(s))return`index-buffer:${Dz(t,s,i,o)}-draco${d}`;let u=t.accessors[n],h=u.bufferView,p=t.bufferViews[h],g=p.buffer,f=t.buffers[g],y=rX(f,g,i,o),x=sNe(u,p);return`index-buffer:${y}-accessor-${x}${d}`};Qm.getImageCacheKey=function(e){e=e??Y.EMPTY_OBJECT;let{gltf:t,imageId:n,gltfResource:i,baseResource:o}=e;return`image:${hre(t,n,i,o)}`};Qm.getTextureCacheKey=function(e){e=e??Y.EMPTY_OBJECT;let{gltf:t,textureInfo:n,gltfResource:i,baseResource:o,supportedImageFormats:r,frameState:s}=e,a=n.index,c=Al.getImageIdFromTexture({gltf:t,textureId:a,supportedImageFormats:r}),d=hre(t,c,i,o),u=aNe(t,n);return`texture:${d}-sampler-${u}-context-${s.context.id}`};var Ml=Qm;var Zhn=_(T(),1);function sX(){this.geometryByteLength=0,this.texturesByteLength=0,this._geometrySizes={},this._textureSizes={}}sX.prototype.clear=function(){this.geometryByteLength=0,this.texturesByteLength=0,this._geometrySizes={},this._textureSizes={}};sX.prototype.addGeometryLoader=function(e){let t=e.cacheKey;if(this._geometrySizes.hasOwnProperty(t))return;this._geometrySizes[t]=0;let n=e.buffer,i=e.typedArray,o=0;l(n)&&(o+=n.sizeInBytes),l(i)&&(o+=i.byteLength),this.geometryByteLength+=o,this._geometrySizes[t]=o};sX.prototype.addTextureLoader=function(e){let t=e.cacheKey;if(this._textureSizes.hasOwnProperty(t))return;this._textureSizes[t]=0;let n=e.texture.sizeInBytes;this.texturesByteLength+=e.texture.sizeInBytes,this._textureSizes[t]=n};sX.prototype.removeLoader=function(e){let t=e.cacheKey,n=this._geometrySizes[t];delete this._geometrySizes[t],l(n)&&(this.geometryByteLength-=n);let i=this._textureSizes[t];delete this._textureSizes[t],l(i)&&(this.texturesByteLength-=i)};var aX=sX;function Mn(){}Mn.cacheEntries={};Mn.statistics=new aX;function cNe(e){this.referenceCount=1,this.resourceLoader=e,this._statisticsPromise=void 0}Mn.get=function(e){let t=Mn.cacheEntries[e];if(l(t))return++t.referenceCount,t.resourceLoader};Mn.add=function(e){let t=e.cacheKey;return Mn.cacheEntries[t]=new cNe(e),e};Mn.unload=function(e){let t=e.cacheKey,n=Mn.cacheEntries[t];--n.referenceCount,n.referenceCount===0&&(Mn.statistics.removeLoader(e),e.destroy(),delete Mn.cacheEntries[t])};Mn.getSchemaLoader=function(e){e=e??Y.EMPTY_OBJECT;let{schema:t,resource:n}=e,i=Ml.getSchemaCacheKey({schema:t,resource:n}),o=Mn.get(i);return l(o)?o:(o=new vC({schema:t,resource:n,cacheKey:i}),Mn.add(o))};Mn.getEmbeddedBufferLoader=function(e){e=e??Y.EMPTY_OBJECT;let{parentResource:t,bufferId:n,typedArray:i}=e,o=Ml.getEmbeddedBufferCacheKey({parentResource:t,bufferId:n}),r=Mn.get(o);return l(r)?r:(r=new r_({typedArray:i,cacheKey:o}),Mn.add(r))};Mn.getExternalBufferLoader=function(e){e=e??Y.EMPTY_OBJECT;let{resource:t}=e,n=Ml.getExternalBufferCacheKey({resource:t}),i=Mn.get(n);return l(i)?i:(i=new r_({resource:t,cacheKey:n}),Mn.add(i))};Mn.getGltfJsonLoader=function(e){e=e??Y.EMPTY_OBJECT;let{gltfResource:t,baseResource:n,typedArray:i,gltfJson:o}=e,r=Ml.getGltfCacheKey({gltfResource:t}),s=Mn.get(r);return l(s)?s:(s=new XC({resourceCache:Mn,gltfResource:t,baseResource:n,typedArray:i,gltfJson:o,cacheKey:r}),Mn.add(s))};Mn.getBufferViewLoader=function(e){e=e??Y.EMPTY_OBJECT;let{gltf:t,bufferViewId:n,gltfResource:i,baseResource:o}=e,r=Ml.getBufferViewCacheKey({gltf:t,bufferViewId:n,gltfResource:i,baseResource:o}),s=Mn.get(r);return l(s)?s:(s=new RC({resourceCache:Mn,gltf:t,bufferViewId:n,gltfResource:i,baseResource:o,cacheKey:r}),Mn.add(s))};Mn.getDracoLoader=function(e){e=e??Y.EMPTY_OBJECT;let{gltf:t,primitive:n,draco:i,gltfResource:o,baseResource:r}=e,s=Ml.getDracoCacheKey({gltf:t,draco:i,gltfResource:o,baseResource:r}),a=Mn.get(s);return l(a)?a:(a=new ZC({resourceCache:Mn,gltf:t,primitive:n,draco:i,gltfResource:o,baseResource:r,cacheKey:s}),Mn.add(a))};Mn.getVertexBufferLoader=function(e){e=e??Y.EMPTY_OBJECT;let{gltf:t,gltfResource:n,baseResource:i,frameState:o,bufferViewId:r,primitive:s,draco:a,attributeSemantic:c,accessorId:d,asynchronous:u=!0,dequantize:h=!1,loadBuffer:p=!1,loadTypedArray:g=!1}=e,f=Ml.getVertexBufferCacheKey({gltf:t,gltfResource:n,baseResource:i,frameState:o,bufferViewId:r,draco:a,attributeSemantic:c,dequantize:h,loadBuffer:p,loadTypedArray:g}),y=Mn.get(f);return l(y)?y:(y=new PC({resourceCache:Mn,gltf:t,gltfResource:n,baseResource:i,bufferViewId:r,primitive:s,draco:a,attributeSemantic:c,accessorId:d,cacheKey:f,asynchronous:u,dequantize:h,loadBuffer:p,loadTypedArray:g}),Mn.add(y))};Mn.getIndexBufferLoader=function(e){e=e??Y.EMPTY_OBJECT;let{gltf:t,accessorId:n,gltfResource:i,baseResource:o,frameState:r,primitive:s,draco:a,asynchronous:c=!0,loadBuffer:d=!1,loadTypedArray:u=!1}=e,h=Ml.getIndexBufferCacheKey({gltf:t,accessorId:n,gltfResource:i,baseResource:o,frameState:r,draco:a,loadBuffer:d,loadTypedArray:u}),p=Mn.get(h);return l(p)?p:(p=new EC({resourceCache:Mn,gltf:t,accessorId:n,gltfResource:i,baseResource:o,primitive:s,draco:a,cacheKey:h,asynchronous:c,loadBuffer:d,loadTypedArray:u}),Mn.add(p))};Mn.getImageLoader=function(e){e=e??Y.EMPTY_OBJECT;let{gltf:t,imageId:n,gltfResource:i,baseResource:o}=e,r=Ml.getImageCacheKey({gltf:t,imageId:n,gltfResource:i,baseResource:o}),s=Mn.get(r);return l(s)?s:(s=new GC({resourceCache:Mn,gltf:t,imageId:n,gltfResource:i,baseResource:o,cacheKey:r}),Mn.add(s))};Mn.getTextureLoader=function(e){e=e??Y.EMPTY_OBJECT;let{gltf:t,textureInfo:n,gltfResource:i,baseResource:o,supportedImageFormats:r,frameState:s,asynchronous:a=!0}=e,c=Ml.getTextureCacheKey({gltf:t,textureInfo:n,gltfResource:i,baseResource:o,supportedImageFormats:r,frameState:s}),d=Mn.get(c);return l(d)?d:(d=new WC({resourceCache:Mn,gltf:t,textureInfo:n,gltfResource:i,baseResource:o,supportedImageFormats:r,cacheKey:c,asynchronous:a}),Mn.add(d))};Mn.clearForSpecs=function(){let e=[PC,EC,ZC,WC,GC,RC,r_,vC,XC],t,n=Mn.cacheEntries,i=[];for(t in n)n.hasOwnProperty(t)&&i.push(n[t]);i.sort(function(r,s){let a=e.indexOf(r.resourceLoader.constructor),c=e.indexOf(s.resourceLoader.constructor);return a-c});let o=i.length;for(let r=0;r<o;++r){let s=i[r];t=s.resourceLoader.cacheKey,l(n[t])&&(s.resourceLoader.destroy(),delete n[t])}Mn.statistics.clear()};var Ri=Mn;function pa(e,t,n){this._resource=e,this._subtreeJson=void 0,this._bufferLoader=void 0,this._tileAvailability=void 0,this._contentAvailabilityBitstreams=[],this._childSubtreeAvailability=void 0,this._implicitCoordinates=n,this._subtreeLevels=t.subtreeLevels,this._subdivisionScheme=t.subdivisionScheme,this._branchingFactor=t.branchingFactor,this._metadata=void 0,this._tileMetadataTable=void 0,this._tilePropertyTableJson=void 0,this._contentMetadataTables=[],this._contentPropertyTableJsons=[],this._tileJumpBuffer=void 0,this._contentJumpBuffers=[],this._ready=!1}Object.defineProperties(pa.prototype,{ready:{get:function(){return this._ready}},metadata:{get:function(){return this._metadata}},tileMetadataTable:{get:function(){return this._tileMetadataTable}},tilePropertyTableJson:{get:function(){return this._tilePropertyTableJson}},contentMetadataTables:{get:function(){return this._contentMetadataTables}},contentPropertyTableJsons:{get:function(){return this._contentPropertyTableJsons}},implicitCoordinates:{get:function(){return this._implicitCoordinates}}});pa.prototype.tileIsAvailableAtIndex=function(e){return this._tileAvailability.getBit(e)};pa.prototype.tileIsAvailableAtCoordinates=function(e){let t=this.getTileIndex(e);return this.tileIsAvailableAtIndex(t)};pa.prototype.contentIsAvailableAtIndex=function(e,t){return t=t??0,this._contentAvailabilityBitstreams[t].getBit(e)};pa.prototype.contentIsAvailableAtCoordinates=function(e,t){let n=this.getTileIndex(e);return this.contentIsAvailableAtIndex(n,t)};pa.prototype.childSubtreeIsAvailableAtIndex=function(e){return this._childSubtreeAvailability.getBit(e)};pa.prototype.childSubtreeIsAvailableAtCoordinates=function(e){let t=this.getChildSubtreeIndex(e);return this.childSubtreeIsAvailableAtIndex(t)};pa.prototype.getLevelOffset=function(e){let t=this._branchingFactor;return(Math.pow(t,e)-1)/(t-1)};pa.prototype.getParentMortonIndex=function(e){let t=2;return this._subdivisionScheme===$r.OCTREE&&(t=3),e>>t};pa.fromSubtreeJson=async function(e,t,n,i,o){let r=new pa(e,i,o),s;l(t)?s={json:t,binary:void 0}:s=lNe(n);let a=s.json;r._subtreeJson=a;let c;if(ri(a,"3DTILES_metadata"))c=a.extensions["3DTILES_metadata"];else if(l(a.tileMetadata)){let C=a.tileMetadata;c=a.propertyTables[C]}let d=[];if(l(a.contentMetadata)){let C=a.contentMetadata.length;for(let V=0;V<C;V++){let L=a.contentMetadata[V];d.push(a.propertyTables[L])}}let u,h=i.metadataSchema,p=a.subtreeMetadata;if(l(p)){let C=p.class,V=h.classes[C];u=new MI({subtreeMetadata:p,class:V})}r._metadata=u,r._tilePropertyTableJson=c,r._contentPropertyTableJsons=d;let g={constant:0};a.contentAvailabilityHeaders=[],ri(a,"3DTILES_multiple_contents")?a.contentAvailabilityHeaders=a.extensions["3DTILES_multiple_contents"].contentAvailability:Array.isArray(a.contentAvailability)?a.contentAvailabilityHeaders=a.contentAvailability:a.contentAvailabilityHeaders.push(a.contentAvailability??g);let f=dNe(a.buffers),y=uNe(a.bufferViews,f);mNe(a,y),l(c)&&fre(c,y);for(let C=0;C<d.length;C++){let V=d[C];fre(V,y)}let x=await hNe(r,f,s.binary),S=pNe(y,x);return bNe(r,a,i,S),l(c)&&(gNe(r,i,S),xNe(r)),yNe(r,i,S),_Ne(r),r._ready=!0,r};function lNe(e){let n=new DataView(e.buffer,e.byteOffset),i=8,o=n.getUint32(i,!0);i+=8;let r=n.getUint32(i,!0);i+=8;let s=qo(e,i,o);i+=o;let a=e.subarray(i,i+r);return{json:s,binary:a}}function dNe(e){e=l(e)?e:[];for(let t=0;t<e.length;t++){let n=e[t];n.isExternal=l(n.uri),n.isActive=!1}return e}function uNe(e,t){e=l(e)?e:[];for(let n=0;n<e.length;n++){let i=e[n],o=t[i.buffer];i.bufferHeader=o,i.isActive=!1}return e}function mNe(e,t){let n,i=e.tileAvailability;l(i.bitstream)?n=t[i.bitstream]:l(i.bufferView)&&(n=t[i.bufferView]),l(n)&&(n.isActive=!0,n.bufferHeader.isActive=!0);let o=e.contentAvailabilityHeaders;for(let s=0;s<o.length;s++)n=void 0,l(o[s].bitstream)?n=t[o[s].bitstream]:l(o[s].bufferView)&&(n=t[o[s].bufferView]),l(n)&&(n.isActive=!0,n.bufferHeader.isActive=!0);n=void 0;let r=e.childSubtreeAvailability;l(r.bitstream)?n=t[r.bitstream]:l(r.bufferView)&&(n=t[r.bufferView]),l(n)&&(n.isActive=!0,n.bufferHeader.isActive=!0)}function fre(e,t){let n=e.properties,i;for(let o in n)if(n.hasOwnProperty(o)){let r=n[o],s=r.values??r.bufferView;i=t[s],i.isActive=!0,i.bufferHeader.isActive=!0;let a=r.stringOffsets??r.stringOffsetBufferView;l(a)&&(i=t[a],i.isActive=!0,i.bufferHeader.isActive=!0);let c=r.arrayOffsets??r.arrayOffsetBufferView;l(c)&&(i=t[c],i.isActive=!0,i.bufferHeader.isActive=!0)}}function hNe(e,t,n){let i=[];for(let o=0;o<t.length;o++){let r=t[o];if(!r.isActive)i.push(Promise.resolve(void 0));else if(r.isExternal){let s=fNe(e,r);i.push(s)}else i.push(Promise.resolve(n))}return Promise.all(i).then(function(o){let r={};for(let s=0;s<o.length;s++){let a=o[s];l(a)&&(r[s]=a)}return r})}async function fNe(e,t){let i=e._resource.getDerivedResource({url:t.uri}),o=Ri.getExternalBufferLoader({resource:i});e._bufferLoader=o;try{await o.load()}catch(r){if(o.isDestroyed())return;throw r}return o.typedArray}function pNe(e,t){let n={};for(let i=0;i<e.length;i++){let o=e[i];if(!o.isActive)continue;let r=o.byteOffset,s=r+o.byteLength,c=t[o.buffer].subarray(r,s);n[i]=c}return n}function bNe(e,t,n,i){let o=n.branchingFactor,r=n.subtreeLevels,s=(Math.pow(o,r)-1)/(o-1),a=Math.pow(o,r),c=ri(t,"3DTILES_metadata"),d=l(e._tilePropertyTableJson),u=c||d;e._tileAvailability=Bz(t.tileAvailability,i,s,u);let h=e._contentPropertyTableJsons.length>0;u=u||h;for(let p=0;p<t.contentAvailabilityHeaders.length;p++){let g=Bz(t.contentAvailabilityHeaders[p],i,s,u);e._contentAvailabilityBitstreams.push(g)}e._childSubtreeAvailability=Bz(t.childSubtreeAvailability,i,a)}function Bz(e,t,n,i){if(l(e.constant))return new VC({constant:!!e.constant,lengthBits:n,availableCount:e.availableCount});let o;return l(e.bitstream)?o=t[e.bitstream]:l(e.bufferView)&&(o=t[e.bufferView]),new VC({bitstream:o,lengthBits:n,availableCount:e.availableCount,computeAvailableCountEnabled:i})}function gNe(e,t,n){let i=e._tilePropertyTableJson,o=e._tileAvailability.availableCount,r=t.metadataSchema,s=i.class,a=r.classes[s];e._tileMetadataTable=new Pu({class:a,count:o,properties:i.properties,bufferViews:n})}function yNe(e,t,n){let i=e._contentPropertyTableJsons,o=e._contentAvailabilityBitstreams,r=t.metadataSchema,s=e._contentMetadataTables;for(let a=0;a<i.length;a++){let c=i[a],u=o[a].availableCount,h=c.class,p=r.classes[h],g=new Pu({class:p,count:u,properties:c.properties,bufferViews:n});s.push(g)}}function pre(e){let t=0,n=e.lengthBits,i=e.availableCount,o;i<256?o=new Uint8Array(n):i<65536?o=new Uint16Array(n):o=new Uint32Array(n);for(let r=0;r<e.lengthBits;r++)e.getBit(r)&&(o[r]=t,t++);return o}function xNe(e){let t=pre(e._tileAvailability);e._tileJumpBuffer=t}function _Ne(e){let t=e._contentJumpBuffers,n=e._contentAvailabilityBitstreams;for(let i=0;i<n.length;i++){let o=n[i],r=pre(o);t.push(r)}}pa.prototype.getTileIndex=function(e){let t=e.level-this._implicitCoordinates.level;if(t<0||this._subtreeLevels<=t)throw new ae("level is out of bounds for this subtree");return e.getSubtreeCoordinates().getOffsetCoordinates(e).tileIndex};pa.prototype.getChildSubtreeIndex=function(e){if(e.level-this._implicitCoordinates.level!==this._implicitCoordinates.subtreeLevels)throw new ae("level is out of bounds for this subtree");return e.getParentSubtreeCoordinates().getOffsetCoordinates(e).mortonIndex};function TNe(e,t){if(!l(e._tileMetadataTable))return;let n=e.getTileIndex(t);if(e._tileAvailability.getBit(n))return e._tileJumpBuffer[n]}function SNe(e,t,n){let i=e._contentMetadataTables;if(!l(i))return;let o=i[n];if(!l(o))return;let r=e._contentAvailabilityBitstreams[n],s=e.getTileIndex(t);if(r.getBit(s))return e._contentJumpBuffers[n][s]}pa.prototype.getTileMetadataView=function(e){let t=TNe(this,e);if(!l(t))return;let n=this._tileMetadataTable;return new LC({class:n.class,metadataTable:n,entityId:t,propertyTableJson:this._tilePropertyTableJson})};pa.prototype.getContentMetadataView=function(e,t){let n=SNe(this,e,t);if(!l(n))return;let i=this._contentMetadataTables[t],o=this._contentPropertyTableJsons[t];return new LC({class:i.class,metadataTable:i,entityId:n,contentIndex:t,propertyTableJson:o})};pa.prototype.isDestroyed=function(){return!1};pa.prototype.destroy=function(){return l(this._bufferLoader)&&Ri.unload(this._bufferLoader),me(this)};var p_=pa;var ifn=_(T(),1),CNe={ID:"ID",NAME:"NAME",DESCRIPTION:"DESCRIPTION",TILESET_TILE_COUNT:"TILESET_TILE_COUNT",TILE_BOUNDING_BOX:"TILE_BOUNDING_BOX",TILE_BOUNDING_REGION:"TILE_BOUNDING_REGION",TILE_BOUNDING_SPHERE:"TILE_BOUNDING_SPHERE",TILE_MINIMUM_HEIGHT:"TILE_MINIMUM_HEIGHT",TILE_MAXIMUM_HEIGHT:"TILE_MAXIMUM_HEIGHT",TILE_HORIZON_OCCLUSION_POINT:"TILE_HORIZON_OCCLUSION_POINT",TILE_GEOMETRIC_ERROR:"TILE_GEOMETRIC_ERROR",CONTENT_BOUNDING_BOX:"CONTENT_BOUNDING_BOX",CONTENT_BOUNDING_REGION:"CONTENT_BOUNDING_REGION",CONTENT_BOUNDING_SPHERE:"CONTENT_BOUNDING_SPHERE",CONTENT_MINIMUM_HEIGHT:"CONTENT_MINIMUM_HEIGHT",CONTENT_MAXIMUM_HEIGHT:"CONTENT_MAXIMUM_HEIGHT",CONTENT_HORIZON_OCCLUSION_POINT:"CONTENT_HORIZON_OCCLUSION_POINT"},b_=Object.freeze(CNe);var sfn=_(T(),1);var jm={};jm.parseAllBoundingVolumeSemantics=function(e){return{tile:{boundingVolume:jm.parseBoundingVolumeSemantic("TILE",e),minimumHeight:jm._parseMinimumHeight("TILE",e),maximumHeight:jm._parseMaximumHeight("TILE",e)},content:{boundingVolume:jm.parseBoundingVolumeSemantic("CONTENT",e),minimumHeight:jm._parseMinimumHeight("CONTENT",e),maximumHeight:jm._parseMaximumHeight("CONTENT",e)}}};jm.parseBoundingVolumeSemantic=function(e,t){let n=`${e}_BOUNDING_BOX`,i=t.getPropertyBySemantic(n);if(l(i))return{box:i};let o=`${e}_BOUNDING_REGION`,r=t.getPropertyBySemantic(o);if(l(r))return{region:r};let s=`${e}_BOUNDING_SPHERE`,a=t.getPropertyBySemantic(s);if(l(a))return{sphere:a}};jm._parseMinimumHeight=function(e,t){let n=`${e}_MINIMUM_HEIGHT`;return t.getPropertyBySemantic(n)};jm._parseMaximumHeight=function(e,t){let n=`${e}_MAXIMUM_HEIGHT`;return t.getPropertyBySemantic(n)};var g_=jm;function el(e,t,n){let i=t.implicitTileset,o=t.implicitCoordinates;this._implicitTileset=i,this._implicitCoordinates=o,this._implicitSubtree=void 0,this._tileset=e,this._tile=t,this._resource=n,this._metadata=void 0,this.featurePropertiesDirty=!1,this._group=void 0;let r=o.getTemplateValues(),s=i.subtreeUriTemplate.getDerivedResource({templateValues:r});this._url=s.getUrlComponent(!0),this._ready=!1}Object.defineProperties(el.prototype,{featuresLength:{get:function(){return 0}},pointsLength:{get:function(){return 0}},trianglesLength:{get:function(){return 0}},geometryByteLength:{get:function(){return 0}},texturesByteLength:{get:function(){return 0}},batchTableByteLength:{get:function(){return 0}},innerContents:{get:function(){}},ready:{get:function(){return this._ready}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){return this._url}},metadata:{get:function(){},set:function(){}},batchTable:{get:function(){}},group:{get:function(){return this._group},set:function(e){this._group=e}}});el.fromSubtreeJson=async function(e,t,n,i,o,r){r=r??0;let s;l(o)&&(s=new Uint8Array(o,r));let a=t.implicitTileset,c=t.implicitCoordinates,d=await p_.fromSubtreeJson(n,i,s,a,c),u=new el(e,t,n);return u._implicitSubtree=d,VNe(u,d),u._ready=!0,u};function VNe(e,t){let n=e._tile,i=e._implicitCoordinates.childIndex,o=RNe(e,t,n,i),r=e._tileset.statistics;n.children.push(o.rootTile),r.numberOfTilesTotal++;let s=LNe(e,t,o.bottomRow);for(let a=0;a<s.length;a++){let c=s[a],d=c.tile,u=wNe(e,d,c.childIndex);d.children.push(u),r.numberOfTilesTotal++}}function LNe(e,t,n){let i=[],o=e._implicitTileset.branchingFactor;for(let r=0;r<n.length;r++){let s=n[r];if(l(s))for(let a=0;a<o;a++){let c=r*o+a;t.childSubtreeIsAvailableAtIndex(c)&&i.push({tile:s,childIndex:a})}}return i}function RNe(e,t,n,i){let s=bre(e,t,n,i,0,!0),a=e._tileset.statistics,c=[s],d=[],u=e._implicitTileset;for(let h=1;h<u.subtreeLevels;h++){let p=t.getLevelOffset(h),g=u.branchingFactor*c.length;for(let f=0;f<g;f++){let y=p+f;if(!t.tileIsAvailableAtIndex(y)){d.push(void 0);continue}let x=t.getParentMortonIndex(f),S=c[x],C=f%u.branchingFactor,V=bre(e,t,S,C,y);S.children.push(V),a.numberOfTilesTotal++,d.push(V)}c=d,d=[]}return{rootTile:s,bottomRow:c}}function gre(e,t,n){let i=b_.TILE_GEOMETRIC_ERROR;return l(e)&&e.hasPropertyBySemantic(i)?e.getPropertyBySemantic(i):t.geometricError/Math.pow(2,n.level)}function bre(e,t,n,i,o,r){let s=e._implicitTileset,a;r??!1?a=n.implicitCoordinates:a=n.implicitCoordinates.getChildCoordinates(i);let c,d,u;if(l(t.tilePropertyTableJson)){c=t.getTileMetadataView(a);let E=g_.parseAllBoundingVolumeSemantics(c);d=E.tile,u=E.content}let p=t.contentPropertyTableJsons.length,g=!1;for(let E=0;E<p;E++)if(t.contentIsAvailableAtCoordinates(a,E)){g=!0;break}let f=ENe(s,a,i,r,n,d),y=[];for(let E=0;E<s.contentCount;E++){if(!t.contentIsAvailableAtIndex(o,E))continue;let v={uri:s.contentUriTemplates[E].getDerivedResource({templateValues:a.getTemplateValues()}).url},A=INe(f,u);l(A)&&(v.boundingVolume=A),y.push(St(v,s.contentHeaders[E]))}let x=gre(c,s,a),S={boundingVolume:f,geometricError:x,refine:s.refine,contents:y},C=!0,V=Ye(s.tileHeader,C);delete V.boundingVolume,delete V.transform,delete V.metadata;let L=St(S,V,C),Z=Sre(e,s.baseResource,L,n);return Z.implicitCoordinates=a,Z.implicitSubtree=t,Z.metadata=c,Z.hasImplicitContentMetadata=g,Z}function w5(e,t){return l(e)&&l(t)&&(l(t.minimumHeight)||l(t.maximumHeight))&&(ri(e,"3DTILES_bounding_volume_S2")||l(e.region))}function Yz(e,t){l(t)&&(ri(e,"3DTILES_bounding_volume_S2")?GNe(e.extensions["3DTILES_bounding_volume_S2"],t.minimumHeight,t.maximumHeight):l(e.region)&&ZNe(e.region,t.minimumHeight,t.maximumHeight))}function ZNe(e,t,n){l(t)&&(e[4]=t),l(n)&&(e[5]=n)}function GNe(e,t,n){l(t)&&(e.minimumHeight=t),l(n)&&(e.maximumHeight=n)}function ENe(e,t,n,i,o,r){let s;return!l(r)||!l(r.boundingVolume)||!w5(r.boundingVolume,r)&&w5(e.boundingVolume,r)?s=yre(e,t,n,i??!1,o):s=r.boundingVolume,Yz(s,r),s}function INe(e,t){let n;return l(t)&&(n=t.boundingVolume),w5(n,t)?Yz(n,t):w5(e,t)&&(n=Ye(e,!0),Yz(n,t)),n}function yre(e,t,n,i,o){let r=e.boundingVolume;return ri(r,"3DTILES_bounding_volume_S2")?xre(i,o,n,t.level,t.x,t.y,t.z):l(r.region)?{region:Tre(r.region,t.level,t.x,t.y,t.z)}:{box:_re(r.box,t.level,t.x,t.y,t.z)}}function xre(e,t,n,i,o,r,s){let a=t._boundingVolume;if(e)return{extensions:{"3DTILES_bounding_volume_S2":{token:Qp.getTokenFromId(a.s2Cell._cellId),minimumHeight:a.minimumHeight,maximumHeight:a.maximumHeight}}};let c=Number(t._boundingVolume.s2Cell._cellId>>BigInt(61)),d=c%2===0?SC.encode2D(i,o,r):SC.encode2D(i,r,o),u=Qp.fromFacePositionLevel(c,BigInt(d),i),h,p;if(l(s)){let g=(a.maximumHeight+a.minimumHeight)/2;h=n<4?a.minimumHeight:g,p=n<4?g:a.maximumHeight}else h=a.minimumHeight,p=a.maximumHeight;return{extensions:{"3DTILES_bounding_volume_S2":{token:Qp.getTokenFromId(u._cellId),minimumHeight:h,maximumHeight:p}}}}var XNe=new m,WNe=new m,Oz=new m,PNe=new $;function _re(e,t,n,i,o){if(t===0)return e;let r=m.unpack(e,0,WNe),s=$.unpack(e,3,PNe),a=Math.pow(2,-t),c=-1+(2*n+1)*a,d=-1+(2*i+1)*a,u=0,h=m.fromElements(a,a,1,XNe);l(o)&&(u=-1+(2*o+1)*a,h.z=a);let p=m.fromElements(c,d,u,Oz);p=$.multiplyByVector(s,p,Oz),p=m.add(p,r,Oz);let g=$.clone(s);g=$.multiplyByScale(g,h,g);let f=new Array(12);return m.pack(p,f),$.pack(g,f,3),f}var vNe=new ce;function Tre(e,t,n,i,o){if(t===0)return e.slice();let r=ce.unpack(e,0,vNe),s=e[4],a=e[5],c=Math.pow(2,-t),d=c*r.width,u=X.negativePiToPi(r.west+n*d),h=X.negativePiToPi(u+d),p=c*r.height,g=X.negativePiToPi(r.south+i*p),f=X.negativePiToPi(g+p),y=s,x=a;if(l(o)){let S=c*(a-s);y+=o*S,x=y+S}return[u,g,h,f,y,x]}function wNe(e,t,n){let i=e._implicitTileset,o=t.implicitCoordinates.getChildCoordinates(n),r=yre(i,o,n,!1,t),s=gre(void 0,i,o),a=i.subtreeUriTemplate.getDerivedResource({templateValues:o.getTemplateValues()}).url,c={boundingVolume:r,geometricError:s,refine:i.refine,contents:[{uri:a}]},d=Sre(e,i.baseResource,c,t);return d.implicitTileset=i,d.implicitCoordinates=o,d}function Sre(e,t,n,i){let o=e._tile.constructor;return new o(e._tileset,t,n,i)}el.prototype.hasProperty=function(e,t){return!1};el.prototype.getFeature=function(e){};el.prototype.applyDebugSettings=function(e,t){};el.prototype.applyStyle=function(e){};el.prototype.update=function(e,t){};el.prototype.pick=function(e,t,n){};el.prototype.isDestroyed=function(){return!1};el.prototype.destroy=function(){return this._implicitSubtree=this._implicitSubtree&&this._implicitSubtree.destroy(),me(this)};el._deriveBoundingBox=_re;el._deriveBoundingRegion=Tre;el._deriveBoundingVolumeS2=xre;var FC=el;var uvn=_(T(),1);var Vfn=_(T(),1),FNe={NONE:0,REPEAT:1,MIRRORED_REPEAT:2},Nl=Object.freeze(FNe);var tvn=_(T(),1);var Kfn=_(T(),1);var Gfn=_(T(),1);function AC(e,t){this._distance=t,this._normal=new Cre(e,this),this.onChangeCallback=void 0,this.index=-1}Object.defineProperties(AC.prototype,{distance:{get:function(){return this._distance},set:function(e){l(this.onChangeCallback)&&e!==this._distance&&this.onChangeCallback(this.index),this._distance=e}},normal:{get:function(){return this._normal},set:function(e){l(this.onChangeCallback)&&!m.equals(this._normal._cartesian3,e)&&this.onChangeCallback(this.index),m.clone(e,this._normal._cartesian3)}}});AC.fromPlane=function(e,t){return l(t)?(t.normal=e.normal,t.distance=e.distance):t=new AC(e.normal,e.distance),t};AC.clone=function(e,t){return l(t)?(t.normal=e.normal,t.distance=e.distance,t):new AC(e.normal,e.distance)};function Cre(e,t){this._clippingPlane=t,this._cartesian3=m.clone(e)}Object.defineProperties(Cre.prototype,{x:{get:function(){return this._cartesian3.x},set:function(e){l(this._clippingPlane.onChangeCallback)&&e!==this._cartesian3.x&&this._clippingPlane.onChangeCallback(this._clippingPlane.index),this._cartesian3.x=e}},y:{get:function(){return this._cartesian3.y},set:function(e){l(this._clippingPlane.onChangeCallback)&&e!==this._cartesian3.y&&this._clippingPlane.onChangeCallback(this._clippingPlane.index),this._cartesian3.y=e}},z:{get:function(){return this._cartesian3.z},set:function(e){l(this._clippingPlane.onChangeCallback)&&e!==this._cartesian3.z&&this._clippingPlane.onChangeCallback(this._clippingPlane.index),this._cartesian3.z=e}}});var y_=AC;function hc(e){e=e??Y.EMPTY_OBJECT,this._planes=[],this._dirtyIndex=-1,this._multipleDirtyPlanes=!1,this._enabled=e.enabled??!0,this.modelMatrix=F.clone(e.modelMatrix??F.IDENTITY),this.edgeColor=D.clone(e.edgeColor??D.WHITE),this.edgeWidth=e.edgeWidth??0,this.planeAdded=new be,this.planeRemoved=new be,this._owner=void 0;let t=e.unionClippingRegions??!1;this._unionClippingRegions=t,this._testIntersection=t?Gre:Ere,this._uint8View=void 0,this._float32View=void 0,this._clippingPlanesTexture=void 0;let n=e.planes;if(l(n)){let i=n.length;for(let o=0;o<i;++o)this.add(n[o])}}function Gre(e){return e===zt.OUTSIDE}function Ere(e){return e===zt.INSIDE}Object.defineProperties(hc.prototype,{length:{get:function(){return this._planes.length}},unionClippingRegions:{get:function(){return this._unionClippingRegions},set:function(e){this._unionClippingRegions!==e&&(this._unionClippingRegions=e,this._testIntersection=e?Gre:Ere)}},enabled:{get:function(){return this._enabled},set:function(e){this._enabled!==e&&(this._enabled=e)}},texture:{get:function(){return this._clippingPlanesTexture}},owner:{get:function(){return this._owner}},clippingPlanesState:{get:function(){return this._unionClippingRegions?this._planes.length:-this._planes.length}}});function Vre(e,t){e._multipleDirtyPlanes=e._multipleDirtyPlanes||e._dirtyIndex!==-1&&e._dirtyIndex!==t,e._dirtyIndex=t}hc.prototype.add=function(e){let t=this._planes.length,n=this;e.onChangeCallback=function(i){Vre(n,i)},e.index=t,Vre(this,t),this._planes.push(e),this.planeAdded.raiseEvent(e,t)};hc.prototype.get=function(e){return this._planes[e]};function Ire(e,t){let n=e.length;for(let i=0;i<n;++i)if(sn.equals(e[i],t))return i;return-1}hc.prototype.contains=function(e){return Ire(this._planes,e)!==-1};hc.prototype.remove=function(e){let t=this._planes,n=Ire(t,e);if(n===-1)return!1;e instanceof y_&&(e.onChangeCallback=void 0,e.index=-1);let i=t.length-1;for(let o=n;o<i;++o){let r=t[o+1];t[o]=r,r instanceof y_&&(r.index=o)}return this._multipleDirtyPlanes=!0,t.length=i,this.planeRemoved.raiseEvent(e,n),!0};hc.prototype.removeAll=function(){let e=this._planes,t=e.length;for(let n=0;n<t;++n){let i=e[n];i instanceof y_&&(i.onChangeCallback=void 0,i.index=-1),this.planeRemoved.raiseEvent(i,n)}this._multipleDirtyPlanes=!0,this._planes=[]};var ANe=new se,MNe=new se;function Lre(e,t,n){let i=e._uint8View,o=e._planes,r=0;for(let s=t;s<n;++s){let a=o[s],c=wn.octEncodeToCartesian4(a.normal,MNe);i[r]=c.x,i[r+1]=c.y,i[r+2]=c.z,i[r+3]=c.w;let d=se.packFloat(a.distance,ANe);i[r+4]=d.x,i[r+5]=d.y,i[r+6]=d.z,i[r+7]=d.w,r+=8}}function Rre(e,t,n){let i=e._float32View,o=e._planes,r=0;for(let s=t;s<n;++s){let a=o[s],c=a.normal;i[r]=c.x,i[r+1]=c.y,i[r+2]=c.z,i[r+3]=a.distance,r+=4}}function Xre(e,t){let n=Nt.maximumTextureSize;return t.x=Math.min(e,n),t.y=Math.ceil(e/t.x),t}var NNe=new U;hc.prototype.update=function(e){let t=this._clippingPlanesTexture,n=e.context,i=hc.useFloatTexture(n),o=i?this.length:this.length*2;if(l(t)){let s=t.width*t.height;(s<o||o<.25*s)&&(t.destroy(),t=void 0,this._clippingPlanesTexture=void 0)}if(this.length===0)return;if(!l(t)){let s=Xre(o,NNe);s.y*=2,i?(t=new vt({context:n,width:s.x,height:s.y,pixelFormat:it.RGBA,pixelDatatype:je.FLOAT,sampler:qt.NEAREST,flipY:!1}),this._float32View=new Float32Array(s.x*s.y*4)):(t=new vt({context:n,width:s.x,height:s.y,pixelFormat:it.RGBA,pixelDatatype:je.UNSIGNED_BYTE,sampler:qt.NEAREST,flipY:!1}),this._uint8View=new Uint8Array(s.x*s.y*4)),this._clippingPlanesTexture=t,this._multipleDirtyPlanes=!0}let r=this._dirtyIndex;if(!(!this._multipleDirtyPlanes&&r===-1)){if(this._multipleDirtyPlanes)i?(Rre(this,0,this._planes.length),t.copyFrom({source:{width:t.width,height:t.height,arrayBufferView:this._float32View}})):(Lre(this,0,this._planes.length),t.copyFrom({source:{width:t.width,height:t.height,arrayBufferView:this._uint8View}}));else{let s=0,a=0;i?(a=Math.floor(r/t.width),s=Math.floor(r-a*t.width),Rre(this,r,r+1),t.copyFrom({source:{width:1,height:1,arrayBufferView:this._float32View},xOffset:s,yOffset:a})):(a=Math.floor(r*2/t.width),s=Math.floor(r*2-a*t.width),Lre(this,r,r+1),t.copyFrom({source:{width:2,height:1,arrayBufferView:this._uint8View},xOffset:s,yOffset:a}))}this._multipleDirtyPlanes=!1,this._dirtyIndex=-1}};var kNe=new F,Zre=new sn(m.UNIT_X,0);hc.prototype.computeIntersectionWithBoundingVolume=function(e,t){let n=this._planes,i=n.length,o=this.modelMatrix;l(t)&&(o=F.multiply(t,o,kNe));let r=zt.INSIDE;!this.unionClippingRegions&&i>0&&(r=zt.OUTSIDE);for(let s=0;s<i;++s){let a=n[s];sn.transform(a,o,Zre);let c=e.intersectPlane(Zre);if(c===zt.INTERSECTING)r=c;else if(this._testIntersection(c))return c}return r};hc.setOwner=function(e,t,n){e!==t[n]&&(t[n]=t[n]&&t[n].destroy(),l(e)&&(e._owner=t,t[n]=e))};hc.useFloatTexture=function(e){return e.floatingPointTexture};hc.getTextureResolution=function(e,t,n){let i=e.texture;if(l(i))return n.x=i.width,n.y=i.height,n;let o=hc.useFloatTexture(t)?e.length:e.length*2,r=Xre(o,n);return r.y*=2,r};hc.prototype.isDestroyed=function(){return!1};hc.prototype.destroy=function(){return this._clippingPlanesTexture=this._clippingPlanesTexture&&this._clippingPlanesTexture.destroy(),me(this)};var fs=hc;var i0n=_(T(),1);var Pbn=_(T(),1);var Vbn=_(T(),1);var Npn=_(T(),1);var upn=_(T(),1);var Qfn=_(T(),1);function Kz(e,t,n=2){let i=t&&t.length,o=i?t[0]*n:e.length,r=Pre(e,0,o,n,!0),s=[];if(!r||r.next===r.prev)return s;let a,c,d;if(i&&(r=YNe(e,t,r,n)),e.length>80*n){a=1/0,c=1/0;let u=-1/0,h=-1/0;for(let p=n;p<o;p+=n){let g=e[p],f=e[p+1];g<a&&(a=g),f<c&&(c=f),g>u&&(u=g),f>h&&(h=f)}d=Math.max(u-a,h-c),d=d!==0?32767/d:0}return lX(r,s,n,a,c,d,0),s}function Pre(e,t,n,i,o){let r;if(o===n5e(e,t,n,i)>0)for(let s=t;s<n;s+=i)r=Wre(s/i|0,e[s],e[s+1],r);else for(let s=n-i;s>=t;s-=i)r=Wre(s/i|0,e[s],e[s+1],r);return r&&MC(r,r.next)&&(uX(r),r=r.next),r}function x_(e,t){if(!e)return e;t||(t=e);let n=e,i;do if(i=!1,!n.steiner&&(MC(n,n.next)||Fr(n.prev,n,n.next)===0)){if(uX(n),n=t=n.prev,n===n.next)break;i=!0}else n=n.next;while(i||n!==t);return t}function lX(e,t,n,i,o,r,s){if(!e)return;!s&&r&&QNe(e,i,o,r);let a=e;for(;e.prev!==e.next;){let c=e.prev,d=e.next;if(r?DNe(e,i,o,r):UNe(e)){t.push(c.i,e.i,d.i),uX(e),e=d.next,a=d.next;continue}if(e=d,e===a){s?s===1?(e=BNe(x_(e),t),lX(e,t,n,i,o,r,2)):s===2&&ONe(e,t,n,i,o,r):lX(x_(e),t,n,i,o,r,1);break}}}function UNe(e){let t=e.prev,n=e,i=e.next;if(Fr(t,n,i)>=0)return!1;let o=t.x,r=n.x,s=i.x,a=t.y,c=n.y,d=i.y,u=Math.min(o,r,s),h=Math.min(a,c,d),p=Math.max(o,r,s),g=Math.max(a,c,d),f=i.next;for(;f!==t;){if(f.x>=u&&f.x<=p&&f.y>=h&&f.y<=g&&cX(o,a,r,c,s,d,f.x,f.y)&&Fr(f.prev,f,f.next)>=0)return!1;f=f.next}return!0}function DNe(e,t,n,i){let o=e.prev,r=e,s=e.next;if(Fr(o,r,s)>=0)return!1;let a=o.x,c=r.x,d=s.x,u=o.y,h=r.y,p=s.y,g=Math.min(a,c,d),f=Math.min(u,h,p),y=Math.max(a,c,d),x=Math.max(u,h,p),S=zz(g,f,t,n,i),C=zz(y,x,t,n,i),V=e.prevZ,L=e.nextZ;for(;V&&V.z>=S&&L&&L.z<=C;){if(V.x>=g&&V.x<=y&&V.y>=f&&V.y<=x&&V!==o&&V!==s&&cX(a,u,c,h,d,p,V.x,V.y)&&Fr(V.prev,V,V.next)>=0||(V=V.prevZ,L.x>=g&&L.x<=y&&L.y>=f&&L.y<=x&&L!==o&&L!==s&&cX(a,u,c,h,d,p,L.x,L.y)&&Fr(L.prev,L,L.next)>=0))return!1;L=L.nextZ}for(;V&&V.z>=S;){if(V.x>=g&&V.x<=y&&V.y>=f&&V.y<=x&&V!==o&&V!==s&&cX(a,u,c,h,d,p,V.x,V.y)&&Fr(V.prev,V,V.next)>=0)return!1;V=V.prevZ}for(;L&&L.z<=C;){if(L.x>=g&&L.x<=y&&L.y>=f&&L.y<=x&&L!==o&&L!==s&&cX(a,u,c,h,d,p,L.x,L.y)&&Fr(L.prev,L,L.next)>=0)return!1;L=L.nextZ}return!0}function BNe(e,t){let n=e;do{let i=n.prev,o=n.next.next;!MC(i,o)&&wre(i,n,n.next,o)&&dX(i,o)&&dX(o,i)&&(t.push(i.i,n.i,o.i),uX(n),uX(n.next),n=e=o),n=n.next}while(n!==e);return x_(n)}function ONe(e,t,n,i,o,r){let s=e;do{let a=s.next.next;for(;a!==s.prev;){if(s.i!==a.i&&$Ne(s,a)){let c=Fre(s,a);s=x_(s,s.next),c=x_(c,c.next),lX(s,t,n,i,o,r,0),lX(c,t,n,i,o,r,0);return}a=a.next}s=s.next}while(s!==e)}function YNe(e,t,n,i){let o=[];for(let r=0,s=t.length;r<s;r++){let a=t[r]*i,c=r<s-1?t[r+1]*i:e.length,d=Pre(e,a,c,i,!1);d===d.next&&(d.steiner=!0),o.push(qNe(d))}o.sort(zNe);for(let r=0;r<o.length;r++)n=HNe(o[r],n);return n}function zNe(e,t){let n=e.x-t.x;if(n===0&&(n=e.y-t.y,n===0)){let i=(e.next.y-e.y)/(e.next.x-e.x),o=(t.next.y-t.y)/(t.next.x-t.x);n=i-o}return n}function HNe(e,t){let n=KNe(e,t);if(!n)return t;let i=Fre(n,e);return x_(i,i.next),x_(n,n.next)}function KNe(e,t){let n=t,i=e.x,o=e.y,r=-1/0,s;if(MC(e,n))return n;do{if(MC(e,n.next))return n.next;if(o<=n.y&&o>=n.next.y&&n.next.y!==n.y){let h=n.x+(o-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(h<=i&&h>r&&(r=h,s=n.x<n.next.x?n:n.next,h===i))return s}n=n.next}while(n!==t);if(!s)return null;let a=s,c=s.x,d=s.y,u=1/0;n=s;do{if(i>=n.x&&n.x>=c&&i!==n.x&&vre(o<d?i:r,o,c,d,o<d?r:i,o,n.x,n.y)){let h=Math.abs(o-n.y)/(i-n.x);dX(n,e)&&(h<u||h===u&&(n.x>s.x||n.x===s.x&&JNe(s,n)))&&(s=n,u=h)}n=n.next}while(n!==a);return s}function JNe(e,t){return Fr(e.prev,e,t.prev)<0&&Fr(t.next,e,e.next)<0}function QNe(e,t,n,i){let o=e;do o.z===0&&(o.z=zz(o.x,o.y,t,n,i)),o.prevZ=o.prev,o.nextZ=o.next,o=o.next;while(o!==e);o.prevZ.nextZ=null,o.prevZ=null,jNe(o)}function jNe(e){let t,n=1;do{let i=e,o;e=null;let r=null;for(t=0;i;){t++;let s=i,a=0;for(let d=0;d<n&&(a++,s=s.nextZ,!!s);d++);let c=n;for(;a>0||c>0&&s;)a!==0&&(c===0||!s||i.z<=s.z)?(o=i,i=i.nextZ,a--):(o=s,s=s.nextZ,c--),r?r.nextZ=o:e=o,o.prevZ=r,r=o;i=s}r.nextZ=null,n*=2}while(t>1);return e}function zz(e,t,n,i,o){return e=(e-n)*o|0,t=(t-i)*o|0,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,t=(t|t<<8)&16711935,t=(t|t<<4)&252645135,t=(t|t<<2)&858993459,t=(t|t<<1)&1431655765,e|t<<1}function qNe(e){let t=e,n=e;do(t.x<n.x||t.x===n.x&&t.y<n.y)&&(n=t),t=t.next;while(t!==e);return n}function vre(e,t,n,i,o,r,s,a){return(o-s)*(t-a)>=(e-s)*(r-a)&&(e-s)*(i-a)>=(n-s)*(t-a)&&(n-s)*(r-a)>=(o-s)*(i-a)}function cX(e,t,n,i,o,r,s,a){return!(e===s&&t===a)&&vre(e,t,n,i,o,r,s,a)}function $Ne(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!e5e(e,t)&&(dX(e,t)&&dX(t,e)&&t5e(e,t)&&(Fr(e.prev,e,t.prev)||Fr(e,t.prev,t))||MC(e,t)&&Fr(e.prev,e,e.next)>0&&Fr(t.prev,t,t.next)>0)}function Fr(e,t,n){return(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y)}function MC(e,t){return e.x===t.x&&e.y===t.y}function wre(e,t,n,i){let o=A5(Fr(e,t,n)),r=A5(Fr(e,t,i)),s=A5(Fr(n,i,e)),a=A5(Fr(n,i,t));return!!(o!==r&&s!==a||o===0&&F5(e,n,t)||r===0&&F5(e,i,t)||s===0&&F5(n,e,i)||a===0&&F5(n,t,i))}function F5(e,t,n){return t.x<=Math.max(e.x,n.x)&&t.x>=Math.min(e.x,n.x)&&t.y<=Math.max(e.y,n.y)&&t.y>=Math.min(e.y,n.y)}function A5(e){return e>0?1:e<0?-1:0}function e5e(e,t){let n=e;do{if(n.i!==e.i&&n.next.i!==e.i&&n.i!==t.i&&n.next.i!==t.i&&wre(n,n.next,e,t))return!0;n=n.next}while(n!==e);return!1}function dX(e,t){return Fr(e.prev,e,e.next)<0?Fr(e,t,e.next)>=0&&Fr(e,e.prev,t)>=0:Fr(e,t,e.prev)<0||Fr(e,e.next,t)<0}function t5e(e,t){let n=e,i=!1,o=(e.x+t.x)/2,r=(e.y+t.y)/2;do n.y>r!=n.next.y>r&&n.next.y!==n.y&&o<(n.next.x-n.x)*(r-n.y)/(n.next.y-n.y)+n.x&&(i=!i),n=n.next;while(n!==e);return i}function Fre(e,t){let n=Hz(e.i,e.x,e.y),i=Hz(t.i,t.x,t.y),o=e.next,r=t.prev;return e.next=t,t.prev=e,n.next=o,o.prev=n,i.next=n,n.prev=i,r.next=i,i.prev=r,i}function Wre(e,t,n,i){let o=Hz(e,t,n);return i?(o.next=i.next,o.prev=i,i.next.prev=o,i.next=o):(o.prev=o,o.next=o),o}function uX(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function Hz(e,t,n){return{i:e,x:t,y:n,prev:null,next:null,z:0,prevZ:null,nextZ:null,steiner:!1}}function n5e(e,t,n,i){let o=0;for(let r=t,s=n-i;r<n;r+=i)o+=(e[s]-e[r])*(e[r+1]+e[s+1]),s=r;return o}var i5e=new m,o5e=new m,bg={};bg.computeArea2D=function(e){let t=e.length,n=0;for(let i=t-1,o=0;o<t;i=o++){let r=e[i],s=e[o];n+=r.x*s.y-s.x*r.y}return n*.5};bg.computeWindingOrder2D=function(e){return bg.computeArea2D(e)>0?us.COUNTER_CLOCKWISE:us.CLOCKWISE};bg.triangulate=function(e,t){let n=U.packArray(e);return Kz(n,t,2)};var kre=new m,Ure=new m,Dre=new m,Are=new m,Mre=new m,Nre=new m,ib=new m,Bre=new U,Ore=new U,Yre=new U,NC=new U;bg.computeSubdivision=function(e,t,n,i,o){o=o??X.RADIANS_PER_DEGREE;let r=l(i),s=n.slice(0),a,c=t.length,d=new Array(c*3),u=new Array(c*2),h=0,p=0;for(a=0;a<c;a++){let V=t[a];if(d[h++]=V.x,d[h++]=V.y,d[h++]=V.z,r){let L=i[a];u[p++]=L.x,u[p++]=L.y}}let g=[],f={},y=e.maximumRadius,x=X.chordLength(o,y),S=x*x;for(;s.length>0;){let V=s.pop(),L=s.pop(),Z=s.pop(),E=m.fromArray(d,Z*3,kre),P=m.fromArray(d,L*3,Ure),W=m.fromArray(d,V*3,Dre),v,A,b;r&&(v=U.fromArray(u,Z*2,Bre),A=U.fromArray(u,L*2,Ore),b=U.fromArray(u,V*2,Yre));let R=m.multiplyByScalar(m.normalize(E,Are),y,Are),G=m.multiplyByScalar(m.normalize(P,Mre),y,Mre),I=m.multiplyByScalar(m.normalize(W,Nre),y,Nre),w=m.magnitudeSquared(m.subtract(R,G,ib)),M=m.magnitudeSquared(m.subtract(G,I,ib)),B=m.magnitudeSquared(m.subtract(I,R,ib)),k=Math.max(w,M,B),O,N,z;k>S?w===k?(O=`${Math.min(Z,L)} ${Math.max(Z,L)}`,a=f[O],l(a)||(N=m.add(E,P,ib),m.multiplyByScalar(N,.5,N),d.push(N.x,N.y,N.z),a=d.length/3-1,f[O]=a,r&&(z=U.add(v,A,NC),U.multiplyByScalar(z,.5,z),u.push(z.x,z.y))),s.push(Z,a,V),s.push(a,L,V)):M===k?(O=`${Math.min(L,V)} ${Math.max(L,V)}`,a=f[O],l(a)||(N=m.add(P,W,ib),m.multiplyByScalar(N,.5,N),d.push(N.x,N.y,N.z),a=d.length/3-1,f[O]=a,r&&(z=U.add(A,b,NC),U.multiplyByScalar(z,.5,z),u.push(z.x,z.y))),s.push(L,a,Z),s.push(a,V,Z)):B===k&&(O=`${Math.min(V,Z)} ${Math.max(V,Z)}`,a=f[O],l(a)||(N=m.add(W,E,ib),m.multiplyByScalar(N,.5,N),d.push(N.x,N.y,N.z),a=d.length/3-1,f[O]=a,r&&(z=U.add(b,v,NC),U.multiplyByScalar(z,.5,z),u.push(z.x,z.y))),s.push(V,a,L),s.push(a,Z,L)):(g.push(Z),g.push(L),g.push(V))}let C={attributes:{position:new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:d})},indices:g,primitiveType:we.TRIANGLES};return r&&(C.attributes.st=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:u})),new lt(C)};var r5e=new he,s5e=new he,a5e=new he,Jz=new he;bg.computeRhumbLineSubdivision=function(e,t,n,i,o){o=o??X.RADIANS_PER_DEGREE;let r=l(i),s=n.slice(0),a,c=t.length,d=new Array(c*3),u=new Array(c*2),h=0,p=0;for(a=0;a<c;a++){let Z=t[a];if(d[h++]=Z.x,d[h++]=Z.y,d[h++]=Z.z,r){let E=i[a];u[p++]=E.x,u[p++]=E.y}}let g=[],f={},y=e.maximumRadius,x=X.chordLength(o,y),S=new wa(void 0,void 0,e),C=new wa(void 0,void 0,e),V=new wa(void 0,void 0,e);for(;s.length>0;){let Z=s.pop(),E=s.pop(),P=s.pop(),W=m.fromArray(d,P*3,kre),v=m.fromArray(d,E*3,Ure),A=m.fromArray(d,Z*3,Dre),b,R,G;r&&(b=U.fromArray(u,P*2,Bre),R=U.fromArray(u,E*2,Ore),G=U.fromArray(u,Z*2,Yre));let I=e.cartesianToCartographic(W,r5e),w=e.cartesianToCartographic(v,s5e),M=e.cartesianToCartographic(A,a5e);S.setEndPoints(I,w);let B=S.surfaceDistance;C.setEndPoints(w,M);let k=C.surfaceDistance;V.setEndPoints(M,I);let O=V.surfaceDistance,N=Math.max(B,k,O),z,K,te,H,j;N>x?B===N?(z=`${Math.min(P,E)} ${Math.max(P,E)}`,a=f[z],l(a)||(K=S.interpolateUsingFraction(.5,Jz),te=(I.height+w.height)*.5,H=m.fromRadians(K.longitude,K.latitude,te,e,ib),d.push(H.x,H.y,H.z),a=d.length/3-1,f[z]=a,r&&(j=U.add(b,R,NC),U.multiplyByScalar(j,.5,j),u.push(j.x,j.y))),s.push(P,a,Z),s.push(a,E,Z)):k===N?(z=`${Math.min(E,Z)} ${Math.max(E,Z)}`,a=f[z],l(a)||(K=C.interpolateUsingFraction(.5,Jz),te=(w.height+M.height)*.5,H=m.fromRadians(K.longitude,K.latitude,te,e,ib),d.push(H.x,H.y,H.z),a=d.length/3-1,f[z]=a,r&&(j=U.add(R,G,NC),U.multiplyByScalar(j,.5,j),u.push(j.x,j.y))),s.push(E,a,P),s.push(a,Z,P)):O===N&&(z=`${Math.min(Z,P)} ${Math.max(Z,P)}`,a=f[z],l(a)||(K=V.interpolateUsingFraction(.5,Jz),te=(M.height+I.height)*.5,H=m.fromRadians(K.longitude,K.latitude,te,e,ib),d.push(H.x,H.y,H.z),a=d.length/3-1,f[z]=a,r&&(j=U.add(G,b,NC),U.multiplyByScalar(j,.5,j),u.push(j.x,j.y))),s.push(Z,a,E),s.push(a,P,E)):(g.push(P),g.push(E),g.push(Z))}let L={attributes:{position:new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:d})},indices:g,primitiveType:we.TRIANGLES};return r&&(L.attributes.st=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:u})),new lt(L)};bg.scaleToGeodeticHeight=function(e,t,n,i){n=n??ne.default;let o=i5e,r=o5e;if(t=t??0,i=i??!0,l(e)){let s=e.length;for(let a=0;a<s;a+=3)m.fromArray(e,a,r),i&&(r=n.scaleToGeodeticSurface(r,r)),t!==0&&(o=n.geodeticSurfaceNormal(r,o),m.multiplyByScalar(o,t,o),m.add(r,o,r)),e[a]=r.x,e[a+1]=r.y,e[a+2]=r.z}return e};var ai=bg;var hpn=_(T(),1);function gg(){this._array=[],this._offset=0,this._length=0}Object.defineProperties(gg.prototype,{length:{get:function(){return this._length}}});gg.prototype.enqueue=function(e){this._array.push(e),this._length++};gg.prototype.dequeue=function(){if(this._length===0)return;let e=this._array,t=this._offset,n=e[t];return e[t]=void 0,t++,t>10&&t*2>e.length&&(this._array=e.slice(t),t=0),this._offset=t,this._length--,n};gg.prototype.peek=function(){if(this._length!==0)return this._array[this._offset]};gg.prototype.contains=function(e){return this._array.indexOf(e)!==-1};gg.prototype.clear=function(){this._array.length=this._offset=this._length=0};gg.prototype.sort=function(e){this._offset>0&&(this._array=this._array.slice(this._offset),this._offset=0),this._array.sort(e)};var yg=gg;var $o={};$o.computeHierarchyPackedLength=function(e,t){let n=0,i=[e];for(;i.length>0;){let o=i.pop();if(!l(o))continue;n+=2;let r=o.positions,s=o.holes;if(l(r)&&r.length>0&&(n+=r.length*t.packedLength),l(s)){let a=s.length;for(let c=0;c<a;++c)i.push(s[c])}}return n};$o.packPolygonHierarchy=function(e,t,n,i){let o=[e];for(;o.length>0;){let r=o.pop();if(!l(r))continue;let s=r.positions,a=r.holes;if(t[n++]=l(s)?s.length:0,t[n++]=l(a)?a.length:0,l(s)){let c=s.length;for(let d=0;d<c;++d,n+=i.packedLength)i.pack(s[d],t,n)}if(l(a)){let c=a.length;for(let d=0;d<c;++d)o.push(a[d])}}return n};$o.unpackPolygonHierarchy=function(e,t,n){let i=e[t++],o=e[t++],r=new Array(i),s=o>0?new Array(o):void 0;for(let a=0;a<i;++a,t+=n.packedLength)r[a]=n.unpack(e,t);for(let a=0;a<o;++a)s[a]=$o.unpackPolygonHierarchy(e,t,n),t=s[a].startingIndex,delete s[a].startingIndex;return{positions:r,holes:s,startingIndex:t}};var __=new U;function Kre(e,t,n,i){return U.subtract(t,e,__),U.multiplyByScalar(__,n/i,__),U.add(e,__,__),[__.x,__.y]}var xg=new m;function c5e(e,t,n,i){return m.subtract(t,e,xg),m.multiplyByScalar(xg,n/i,xg),m.add(e,xg,xg),[xg.x,xg.y,xg.z]}$o.subdivideLineCount=function(e,t,n){let o=m.distance(e,t)/n,r=Math.max(0,Math.ceil(X.log2(o)));return Math.pow(2,r)};var N5=new he,k5=new he,l5e=new he,d5e=new m,M5=new wa;$o.subdivideRhumbLineCount=function(e,t,n,i){let o=e.cartesianToCartographic(t,N5),r=e.cartesianToCartographic(n,k5),a=new wa(o,r,e).surfaceDistance/i,c=Math.max(0,Math.ceil(X.log2(a)));return Math.pow(2,c)};$o.subdivideTexcoordLine=function(e,t,n,i,o,r){let s=$o.subdivideLineCount(n,i,o),a=U.distance(e,t),c=a/s,d=r;d.length=s*2;let u=0;for(let h=0;h<s;h++){let p=Kre(e,t,h*c,a);d[u++]=p[0],d[u++]=p[1]}return d};$o.subdivideLine=function(e,t,n,i){let o=$o.subdivideLineCount(e,t,n),r=m.distance(e,t),s=r/o;l(i)||(i=[]);let a=i;a.length=o*3;let c=0;for(let d=0;d<o;d++){let u=c5e(e,t,d*s,r);a[c++]=u[0],a[c++]=u[1],a[c++]=u[2]}return a};$o.subdivideTexcoordRhumbLine=function(e,t,n,i,o,r,s){let a=n.cartesianToCartographic(i,N5),c=n.cartesianToCartographic(o,k5);M5.setEndPoints(a,c);let d=M5.surfaceDistance/r,u=Math.max(0,Math.ceil(X.log2(d))),h=Math.pow(2,u),p=U.distance(e,t),g=p/h,f=s;f.length=h*2;let y=0;for(let x=0;x<h;x++){let S=Kre(e,t,x*g,p);f[y++]=S[0],f[y++]=S[1]}return f};$o.subdivideRhumbLine=function(e,t,n,i,o){let r=e.cartesianToCartographic(t,N5),s=e.cartesianToCartographic(n,k5),a=new wa(r,s,e);if(l(o)||(o=[]),a.surfaceDistance<=i)return o.length=3,o[0]=t.x,o[1]=t.y,o[2]=t.z,o;let c=a.surfaceDistance/i,d=Math.max(0,Math.ceil(X.log2(c))),u=Math.pow(2,d),h=a.surfaceDistance/u,p=o;p.length=u*3;let g=0;for(let f=0;f<u;f++){let y=a.interpolateUsingSurfaceDistance(f*h,l5e),x=e.cartographicToCartesian(y,d5e);p[g++]=x.x,p[g++]=x.y,p[g++]=x.z}return p};var u5e=new m,m5e=new m,h5e=new m,f5e=new m;$o.scaleToGeodeticHeightExtruded=function(e,t,n,i,o){i=i??ne.default;let r=u5e,s=m5e,a=h5e,c=f5e;if(l(e)&&l(e.attributes)&&l(e.attributes.position)){let d=e.attributes.position.values,u=d.length/2;for(let h=0;h<u;h+=3)m.fromArray(d,h,a),i.geodeticSurfaceNormal(a,r),c=i.scaleToGeodeticSurface(a,c),s=m.multiplyByScalar(r,n,s),s=m.add(c,s,s),d[h+u]=s.x,d[h+1+u]=s.y,d[h+2+u]=s.z,o&&(c=m.clone(a,c)),s=m.multiplyByScalar(r,t,s),s=m.add(c,s,s),d[h]=s.x,d[h+1]=s.y,d[h+2]=s.z}return e};$o.polygonOutlinesFromHierarchy=function(e,t,n){let i=[],o=new yg;o.enqueue(e);let r,s,a;for(;o.length!==0;){let c=o.dequeue(),d=c.positions;if(t)for(a=d.length,r=0;r<a;r++)n.scaleToGeodeticSurface(d[r],d[r]);if(d=_o(d,m.equalsEpsilon,!0),d.length<3)continue;let u=c.holes?c.holes.length:0;for(r=0;r<u;r++){let h=c.holes[r],p=h.positions;if(t)for(a=p.length,s=0;s<a;++s)n.scaleToGeodeticSurface(p[s],p[s]);if(p=_o(p,m.equalsEpsilon,!0),p.length<3)continue;i.push(p);let g=0;for(l(h.holes)&&(g=h.holes.length),s=0;s<g;s++)o.enqueue(h.holes[s])}i.push(d)}return i};var p5e=new he;function b5e(e,t,n){let i=n.cartesianToCartographic(e,N5),o=n.cartesianToCartographic(t,k5);if(Math.sign(i.latitude)===Math.sign(o.latitude))return;M5.setEndPoints(i,o);let r=M5.findIntersectionWithLatitude(0,p5e);if(!l(r))return;let s=Math.min(i.longitude,o.longitude),a=Math.max(i.longitude,o.longitude);if(Math.abs(a-s)>X.PI){let c=s;s=a,a=c}if(!(r.longitude<s||r.longitude>a))return n.cartographicToCartesian(r)}function g5e(e,t,n,i){if(i===en.RHUMB)return b5e(e,t,n);let o=qn.lineSegmentPlane(e,t,sn.ORIGIN_XY_PLANE);if(l(o))return n.scaleToGeodeticSurface(o,o)}var y5e=new he;function x5e(e,t,n){let i=[],o,r,s,a,c,d=0;for(;d<e.length;){o=e[d],r=e[(d+1)%e.length],s=X.sign(o.z),a=X.sign(r.z);let u=h=>t.cartesianToCartographic(h,y5e).longitude;if(s===0)i.push({position:d,type:s,visited:!1,next:a,theta:u(o)});else if(a!==0){if(c=g5e(o,r,t,n),++d,!l(c))continue;e.splice(d,0,c),i.push({position:d,type:s,visited:!1,next:a,theta:u(c)})}++d}return i}function Jre(e,t,n,i,o,r,s){let a=[],c=r,d=h=>p=>p.position===h,u=[];do{let h=n[c];a.push(h);let p=i.findIndex(d(c)),g=i[p];if(!l(g)){++c;continue}let{visited:f,type:y,next:x}=g;if(g.visited=!0,y===0){if(x===0){let L=i[p-(s?1:-1)];if(L?.position===c+1)L.visited=!0;else{++c;continue}}if(!f&&s&&x>0||r===c&&!s&&x<0){++c;continue}}if(!(s?y>=0:y<=0)){++c;continue}f||u.push(c);let C=p+(s?1:-1),V=i[C];if(!l(V)){++c;continue}c=V.position}while(c<n.length&&c>=0&&c!==r&&a.length<n.length);e.splice(t,o,a);for(let h of u)t=Jre(e,++t,n,i,0,h,!s);return t}$o.splitPolygonsOnEquator=function(e,t,n,i){l(i)||(i=[]),i.splice(0,0,...e),i.length=e.length;let o=0;for(;o<i.length;){let r=i[o],s=r.slice();if(r.length<3){i[o]=s,++o;continue}let a=x5e(s,t,n);if(s.length===r.length||a.length<=1){i[o]=s,++o;continue}a.sort((d,u)=>d.theta-u.theta);let c=s[0].z>=0;o=Jre(i,o,s,a,1,0,c)}return i};$o.polygonsFromHierarchy=function(e,t,n,i,o,r){let s=[],a=[],c=new yg;c.enqueue(e);let d=l(r);for(;c.length!==0;){let u=c.dequeue(),h=u.positions,p=u.holes,g,f;if(i)for(f=h.length,g=0;g<f;g++)o.scaleToGeodeticSurface(h[g],h[g]);if(t||(h=_o(h,m.equalsEpsilon,!0)),h.length<3)continue;let y=n(h);if(!l(y))continue;let x=[],S=ai.computeWindingOrder2D(y);if(S===us.CLOCKWISE&&(y.reverse(),h=h.slice().reverse()),d){d=!1;let E=[h];if(E=r(E,E),E.length>1){for(let P of E)c.enqueue(new Fa(P,p));continue}}let C=h.slice(),V=l(p)?p.length:0,L=[],Z;for(g=0;g<V;g++){let E=p[g],P=E.positions;if(i)for(f=P.length,Z=0;Z<f;++Z)o.scaleToGeodeticSurface(P[Z],P[Z]);if(t||(P=_o(P,m.equalsEpsilon,!0)),P.length<3)continue;let W=n(P);if(!l(W))continue;S=ai.computeWindingOrder2D(W),S===us.CLOCKWISE&&(W.reverse(),P=P.slice().reverse()),L.push(P),x.push(C.length),C=C.concat(P),y=y.concat(W);let v=0;for(l(E.holes)&&(v=E.holes.length),Z=0;Z<v;Z++)c.enqueue(E.holes[Z])}s.push({outerRing:h,holes:L}),a.push({positions:C,positions2D:y,holes:x})}return{hierarchy:s,polygons:a}};var _5e=new U,T5e=new m,S5e=new ve,C5e=new $;$o.computeBoundingRectangle=function(e,t,n,i,o){let r=ve.fromAxisAngle(e,i,S5e),s=$.fromQuaternion(r,C5e),a=Number.POSITIVE_INFINITY,c=Number.NEGATIVE_INFINITY,d=Number.POSITIVE_INFINITY,u=Number.NEGATIVE_INFINITY,h=n.length;for(let p=0;p<h;++p){let g=m.clone(n[p],T5e);$.multiplyByVector(s,g,g);let f=t(g,_5e);l(f)&&(a=Math.min(a,f.x),c=Math.max(c,f.x),d=Math.min(d,f.y),u=Math.max(u,f.y))}return o.x=a,o.y=d,o.width=c-a,o.height=u-d,o};$o.createGeometryFromPositions=function(e,t,n,i,o,r,s){let a=ai.triangulate(t.positions2D,t.holes);a.length<3&&(a=[0,1,2]);let c=t.positions,d=l(n),u=d?n.positions:void 0;if(o){let h=c.length,p=new Array(h*3),g=0;for(let x=0;x<h;x++){let S=c[x];p[g++]=S.x,p[g++]=S.y,p[g++]=S.z}let f={attributes:{position:new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:p})},indices:a,primitiveType:we.TRIANGLES};d&&(f.attributes.st=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:U.packArray(u)}));let y=new lt(f);return r.normal?Fn.computeNormal(y):y}if(s===en.GEODESIC)return ai.computeSubdivision(e,c,a,u,i);if(s===en.RHUMB)return ai.computeRhumbLineSubdivision(e,c,a,u,i)};var zre=[],Hre=[],V5e=new m,L5e=new m;$o.computeWallGeometry=function(e,t,n,i,o,r){let s,a,c,d,u,h,p,g,f,y=e.length,x=0,S=0,C=l(t),V=C?t.positions:void 0;if(o)for(a=y*3*2,s=new Array(a*2),C&&(f=y*2*2,g=new Array(f*2)),c=0;c<y;c++)d=e[c],u=e[(c+1)%y],s[x]=s[x+a]=d.x,++x,s[x]=s[x+a]=d.y,++x,s[x]=s[x+a]=d.z,++x,s[x]=s[x+a]=u.x,++x,s[x]=s[x+a]=u.y,++x,s[x]=s[x+a]=u.z,++x,C&&(h=V[c],p=V[(c+1)%y],g[S]=g[S+f]=h.x,++S,g[S]=g[S+f]=h.y,++S,g[S]=g[S+f]=p.x,++S,g[S]=g[S+f]=p.y,++S);else{let W=X.chordLength(i,n.maximumRadius),v=0;if(r===en.GEODESIC)for(c=0;c<y;c++)v+=$o.subdivideLineCount(e[c],e[(c+1)%y],W);else if(r===en.RHUMB)for(c=0;c<y;c++)v+=$o.subdivideRhumbLineCount(n,e[c],e[(c+1)%y],W);for(a=(v+y)*3,s=new Array(a*2),C&&(f=(v+y)*2,g=new Array(f*2)),c=0;c<y;c++){d=e[c],u=e[(c+1)%y];let A,b;C&&(h=V[c],p=V[(c+1)%y]),r===en.GEODESIC?(A=$o.subdivideLine(d,u,W,Hre),C&&(b=$o.subdivideTexcoordLine(h,p,d,u,W,zre))):r===en.RHUMB&&(A=$o.subdivideRhumbLine(n,d,u,W,Hre),C&&(b=$o.subdivideTexcoordRhumbLine(h,p,n,d,u,W,zre)));let R=A.length;for(let G=0;G<R;++G,++x)s[x]=A[G],s[x+a]=A[G];if(s[x]=u.x,s[x+a]=u.x,++x,s[x]=u.y,s[x+a]=u.y,++x,s[x]=u.z,s[x+a]=u.z,++x,C){let G=b.length;for(let I=0;I<G;++I,++S)g[S]=b[I],g[S+f]=b[I];g[S]=p.x,g[S+f]=p.x,++S,g[S]=p.y,g[S+f]=p.y,++S}}}y=s.length;let L=Ae.createTypedArray(y/3,y-e.length*6),Z=0;for(y/=6,c=0;c<y;c++){let W=c,v=W+1,A=W+y,b=A+1;d=m.fromArray(s,W*3,V5e),u=m.fromArray(s,v*3,L5e),!m.equalsEpsilon(d,u,X.EPSILON10,X.EPSILON10)&&(L[Z++]=W,L[Z++]=A,L[Z++]=v,L[Z++]=v,L[Z++]=A,L[Z++]=b)}let E={attributes:new mn({position:new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:s})}),indices:L,primitiveType:we.TRIANGLES};return C&&(E.attributes.st=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:g})),new lt(E)};var Bn=$o;var Qpn=_(T(),1);function Ar(e,t){this.position=e,l(this.position)||(this.position=new U),this.tangentPlane=t,l(this.tangentPlane)||(this.tangentPlane=Ar.NORTH_POLE_TANGENT_PLANE)}Object.defineProperties(Ar.prototype,{ellipsoid:{get:function(){return this.tangentPlane.ellipsoid}},x:{get:function(){return this.position.x}},y:{get:function(){return this.position.y}},conformalLatitude:{get:function(){let e=U.magnitude(this.position),t=2*this.ellipsoid.maximumRadius;return this.tangentPlane.plane.normal.z*(X.PI_OVER_TWO-2*Math.atan2(e,t))}},longitude:{get:function(){let e=X.PI_OVER_TWO+Math.atan2(this.y,this.x);return e>Math.PI&&(e-=X.TWO_PI),e}}});var kC=new he,R5e=new m;Ar.prototype.getLatitude=function(e){l(e)||(e=ne.default),kC.latitude=this.conformalLatitude,kC.longitude=this.longitude,kC.height=0;let t=this.ellipsoid.cartographicToCartesian(kC,R5e);return e.cartesianToCartographic(t,kC),kC.latitude};var Z5e=new pn,G5e=new m,E5e=new m;Ar.fromCartesian=function(e,t){let n=X.signNotZero(e.z),i=Ar.NORTH_POLE_TANGENT_PLANE,o=Ar.SOUTH_POLE;n<0&&(i=Ar.SOUTH_POLE_TANGENT_PLANE,o=Ar.NORTH_POLE);let r=Z5e;r.origin=i.ellipsoid.scaleToGeocentricSurface(e,r.origin),r.direction=m.subtract(r.origin,o,G5e),m.normalize(r.direction,r.direction);let s=qn.rayPlane(r,i.plane,E5e),a=m.subtract(s,o,s),c=m.dot(i.xAxis,a),d=n*m.dot(i.yAxis,a);return l(t)?(t.position=new U(c,d),t.tangentPlane=i,t):new Ar(new U(c,d),i)};Ar.fromCartesianArray=function(e,t){let n=e.length;l(t)?t.length=n:t=new Array(n);for(let i=0;i<n;i++)t[i]=Ar.fromCartesian(e[i],t[i]);return t};Ar.clone=function(e,t){if(l(e))return l(t)?(t.position=e.position,t.tangentPlane=e.tangentPlane,t):new Ar(e.position,e.tangentPlane)};Ar.HALF_UNIT_SPHERE=Object.freeze(new ne(.5,.5,.5));Ar.NORTH_POLE=Object.freeze(new m(0,0,.5));Ar.SOUTH_POLE=Object.freeze(new m(0,0,-.5));Ar.NORTH_POLE_TANGENT_PLANE=Object.freeze(new Qr(Ar.NORTH_POLE,Ar.HALF_UNIT_SPHERE));Ar.SOUTH_POLE_TANGENT_PLANE=Object.freeze(new Qr(Ar.SOUTH_POLE,Ar.HALF_UNIT_SPHERE));var fc=Ar;var I5e=new he,Qre=new he;function X5e(e,t,n,i){let r=i.cartesianToCartographic(e,I5e).height,s=i.cartesianToCartographic(t,Qre);s.height=r,i.cartographicToCartesian(s,t);let a=i.cartesianToCartographic(n,Qre);a.height=r-100,i.cartographicToCartesian(a,n)}var jre=new Ke,W5e=new m,P5e=new m,v5e=new m,w5e=new m,F5e=new m,A5e=new m,U5=new m,Sf=new m,UC=new m,M5e=new U,N5e=new U,k5e=new m,qre=new ve,U5e=new $,D5e=new $;function Qz(e){let t=e.vertexFormat,n=e.geometry,i=e.shadowVolume,o=n.attributes.position.values,r=l(n.attributes.st)?n.attributes.st.values:void 0,s=o.length,a=e.wall,c=e.top||a,d=e.bottom||a;if(t.st||t.normal||t.tangent||t.bitangent||i){let u=e.boundingRectangle,h=e.rotationAxis,p=e.projectTo2d,g=e.ellipsoid,f=e.stRotation,y=e.perPositionHeight,x=M5e;x.x=u.x,x.y=u.y;let S=t.st?new Float32Array(2*(s/3)):void 0,C;t.normal&&(y&&c&&!a?C=n.attributes.normal.values:C=new Float32Array(s));let V=t.tangent?new Float32Array(s):void 0,L=t.bitangent?new Float32Array(s):void 0,Z=i?new Float32Array(s):void 0,E=0,P=0,W=P5e,v=v5e,A=w5e,b=!0,R=U5e,G=D5e;if(f!==0){let M=ve.fromAxisAngle(h,f,qre);R=$.fromQuaternion(M,R),M=ve.fromAxisAngle(h,-f,qre),G=$.fromQuaternion(M,G)}else R=$.clone($.IDENTITY,R),G=$.clone($.IDENTITY,G);let I=0,w=0;c&&d&&(I=s/2,w=s/3,s/=2);for(let M=0;M<s;M+=3){let B=m.fromArray(o,M,k5e);if(t.st&&!l(r)){let k=$.multiplyByVector(R,B,W5e);k=g.scaleToGeodeticSurface(k,k);let O=p([k],N5e)[0];U.subtract(O,x,O);let N=X.clamp(O.x/u.width,0,1),z=X.clamp(O.y/u.height,0,1);d&&(S[E+w]=N,S[E+1+w]=z),c&&(S[E]=N,S[E+1]=z),E+=2}if(t.normal||t.tangent||t.bitangent||i){let k=P+1,O=P+2;if(a){if(M+3<s){let N=m.fromArray(o,M+3,F5e);if(b){let z=m.fromArray(o,M+s,A5e);y&&X5e(B,N,z,g),m.subtract(N,B,N),m.subtract(z,B,z),W=m.normalize(m.cross(z,N,W),W),b=!1}m.equalsEpsilon(N,B,X.EPSILON10)&&(b=!0)}(t.tangent||t.bitangent)&&(A=g.geodeticSurfaceNormal(B,A),t.tangent&&(v=m.normalize(m.cross(A,W,v),v)))}else W=g.geodeticSurfaceNormal(B,W),(t.tangent||t.bitangent)&&(y&&(U5=m.fromArray(C,P,U5),Sf=m.cross(m.UNIT_Z,U5,Sf),Sf=m.normalize($.multiplyByVector(G,Sf,Sf),Sf),t.bitangent&&(UC=m.normalize(m.cross(U5,Sf,UC),UC))),v=m.cross(m.UNIT_Z,W,v),v=m.normalize($.multiplyByVector(G,v,v),v),t.bitangent&&(A=m.normalize(m.cross(W,v,A),A)));t.normal&&(e.wall?(C[P+I]=W.x,C[k+I]=W.y,C[O+I]=W.z):d&&(C[P+I]=-W.x,C[k+I]=-W.y,C[O+I]=-W.z),(c&&!y||a)&&(C[P]=W.x,C[k]=W.y,C[O]=W.z)),i&&(a&&(W=g.geodeticSurfaceNormal(B,W)),Z[P+I]=-W.x,Z[k+I]=-W.y,Z[O+I]=-W.z),t.tangent&&(e.wall?(V[P+I]=v.x,V[k+I]=v.y,V[O+I]=v.z):d&&(V[P+I]=-v.x,V[k+I]=-v.y,V[O+I]=-v.z),c&&(y?(V[P]=Sf.x,V[k]=Sf.y,V[O]=Sf.z):(V[P]=v.x,V[k]=v.y,V[O]=v.z))),t.bitangent&&(d&&(L[P+I]=A.x,L[k+I]=A.y,L[O+I]=A.z),c&&(y?(L[P]=UC.x,L[k]=UC.y,L[O]=UC.z):(L[P]=A.x,L[k]=A.y,L[O]=A.z))),P+=3}}t.st&&!l(r)&&(n.attributes.st=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:S})),t.normal&&(n.attributes.normal=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:C})),t.tangent&&(n.attributes.tangent=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:V})),t.bitangent&&(n.attributes.bitangent=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:L})),i&&(n.attributes.extrudeDirection=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:Z}))}if(e.extrude&&l(e.offsetAttribute)){let u=o.length/3,h=new Uint8Array(u);if(e.offsetAttribute===rn.TOP)c&&d||a?h=h.fill(1,0,u/2):c&&(h=h.fill(1));else{let p=e.offsetAttribute===rn.NONE?0:1;h=h.fill(p)}n.attributes.applyOffset=new Ge({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:h})}return n}var $re=[];function B5e(e,t,n,i,o,r,s,a,c,d){let u={walls:[]},h;if(s||a){let C=Bn.createGeometryFromPositions(e,t,n,i,r,c,d),V=C.attributes.position.values,L=C.indices,Z,E;if(s&&a){let P=V.concat(V);Z=P.length/3,E=Ae.createTypedArray(Z,L.length*2),E.set(L);let W=L.length,v=Z/2;for(h=0;h<W;h+=3){let A=E[h]+v,b=E[h+1]+v,R=E[h+2]+v;E[h+W]=R,E[h+1+W]=b,E[h+2+W]=A}if(C.attributes.position.values=P,r&&c.normal){let A=C.attributes.normal.values;C.attributes.normal.values=new Float32Array(P.length),C.attributes.normal.values.set(A)}if(c.st&&l(n)){let A=C.attributes.st.values;C.attributes.st.values=new Float32Array(Z*2),C.attributes.st.values=A.concat(A)}C.indices=E}else if(a){for(Z=V.length/3,E=Ae.createTypedArray(Z,L.length),h=0;h<L.length;h+=3)E[h]=L[h+2],E[h+1]=L[h+1],E[h+2]=L[h];C.indices=E}u.topAndBottom=new Et({geometry:C})}let p=o.outerRing,g=Qr.fromPoints(p,e),f=g.projectPointsOntoPlane(p,$re),y=ai.computeWindingOrder2D(f);y===us.CLOCKWISE&&(p=p.slice().reverse());let x=Bn.computeWallGeometry(p,n,e,i,r,d);u.walls.push(new Et({geometry:x}));let S=o.holes;for(h=0;h<S.length;h++){let C=S[h];f=g.projectPointsOntoPlane(C,$re),y=ai.computeWindingOrder2D(f),y===us.COUNTER_CLOCKWISE&&(C=C.slice().reverse()),x=Bn.computeWallGeometry(C,n,e,i,r,d),u.walls.push(new Et({geometry:x}))}return u}function Fu(e){let t=e.polygonHierarchy,n=e.vertexFormat??Xe.DEFAULT,i=e.ellipsoid??ne.default,o=e.granularity??X.RADIANS_PER_DEGREE,r=e.stRotation??0,s=e.textureCoordinates,a=e.perPositionHeight??!1,c=a&&l(e.extrudedHeight),d=e.height??0,u=e.extrudedHeight??d;if(!c){let h=Math.max(d,u);u=Math.min(d,u),d=h}this._vertexFormat=Xe.clone(n),this._ellipsoid=ne.clone(i),this._granularity=o,this._stRotation=r,this._height=d,this._extrudedHeight=u,this._closeTop=e.closeTop??!0,this._closeBottom=e.closeBottom??!0,this._polygonHierarchy=t,this._perPositionHeight=a,this._perPositionHeightExtrude=c,this._shadowVolume=e.shadowVolume??!1,this._workerName="createPolygonGeometry",this._offsetAttribute=e.offsetAttribute,this._arcType=e.arcType??en.GEODESIC,this._rectangle=void 0,this._textureCoordinateRotationPoints=void 0,this._textureCoordinates=s,this.packedLength=Bn.computeHierarchyPackedLength(t,m)+ne.packedLength+Xe.packedLength+(s?Bn.computeHierarchyPackedLength(s,U):1)+12}Fu.fromPositions=function(e){e=e??Y.EMPTY_OBJECT;let t={polygonHierarchy:{positions:e.positions},height:e.height,extrudedHeight:e.extrudedHeight,vertexFormat:e.vertexFormat,stRotation:e.stRotation,ellipsoid:e.ellipsoid,granularity:e.granularity,perPositionHeight:e.perPositionHeight,closeTop:e.closeTop,closeBottom:e.closeBottom,offsetAttribute:e.offsetAttribute,arcType:e.arcType,textureCoordinates:e.textureCoordinates};return new Fu(t)};Fu.pack=function(e,t,n){return n=n??0,n=Bn.packPolygonHierarchy(e._polygonHierarchy,t,n,m),ne.pack(e._ellipsoid,t,n),n+=ne.packedLength,Xe.pack(e._vertexFormat,t,n),n+=Xe.packedLength,t[n++]=e._height,t[n++]=e._extrudedHeight,t[n++]=e._granularity,t[n++]=e._stRotation,t[n++]=e._perPositionHeightExtrude?1:0,t[n++]=e._perPositionHeight?1:0,t[n++]=e._closeTop?1:0,t[n++]=e._closeBottom?1:0,t[n++]=e._shadowVolume?1:0,t[n++]=e._offsetAttribute??-1,t[n++]=e._arcType,l(e._textureCoordinates)?n=Bn.packPolygonHierarchy(e._textureCoordinates,t,n,U):t[n++]=-1,t[n++]=e.packedLength,t};var O5e=ne.clone(ne.UNIT_SPHERE),Y5e=new Xe,z5e={polygonHierarchy:{}};Fu.unpack=function(e,t,n){t=t??0;let i=Bn.unpackPolygonHierarchy(e,t,m);t=i.startingIndex,delete i.startingIndex;let o=ne.unpack(e,t,O5e);t+=ne.packedLength;let r=Xe.unpack(e,t,Y5e);t+=Xe.packedLength;let s=e[t++],a=e[t++],c=e[t++],d=e[t++],u=e[t++]===1,h=e[t++]===1,p=e[t++]===1,g=e[t++]===1,f=e[t++]===1,y=e[t++],x=e[t++],S=e[t]===-1?void 0:Bn.unpackPolygonHierarchy(e,t,U);l(S)?(t=S.startingIndex,delete S.startingIndex):t++;let C=e[t++];return l(n)||(n=new Fu(z5e)),n._polygonHierarchy=i,n._ellipsoid=ne.clone(o,n._ellipsoid),n._vertexFormat=Xe.clone(r,n._vertexFormat),n._height=s,n._extrudedHeight=a,n._granularity=c,n._stRotation=d,n._perPositionHeightExtrude=u,n._perPositionHeight=h,n._closeTop=p,n._closeBottom=g,n._shadowVolume=f,n._offsetAttribute=y===-1?void 0:y,n._arcType=x,n._textureCoordinates=S,n.packedLength=C,n};var H5e=new U,K5e=new U,J5e=new fc;function ese(e,t,n,i,o,r){let s=e.longitude,a=s>=0?s:s+X.TWO_PI;o.westOverIdl=Math.min(o.westOverIdl,a),o.eastOverIdl=Math.max(o.eastOverIdl,a),r.west=Math.min(r.west,s),r.east=Math.max(r.east,s);let c=e.getLatitude(n),d=c;if(r.south=Math.min(r.south,c),r.north=Math.max(r.north,c),i!==en.RHUMB){let p=U.subtract(t.position,e.position,H5e),g=U.dot(t.position,p)/U.dot(p,p);if(g>0&&g<1){let f=U.add(t.position,U.multiplyByScalar(p,-g,p),K5e),y=fc.clone(t,J5e);y.position=f;let x=y.getLatitude(n);r.south=Math.min(r.south,x),r.north=Math.max(r.north,x),Math.abs(c)>Math.abs(x)&&(d=x)}}let u=t.x*e.y-e.x*t.y,h=Math.sign(u);h!==0&&(h*=U.angleBetween(t.position,e.position)),d>=0&&(o.northAngle+=h),d<=0&&(o.southAngle+=h)}var tse=new fc,Q5e=new fc,wu={northAngle:0,southAngle:0,westOverIdl:0,eastOverIdl:0};Fu.computeRectangleFromPositions=function(e,t,n,i){if(l(i)||(i=new ce),e.length<3)return i;i.west=Number.POSITIVE_INFINITY,i.east=Number.NEGATIVE_INFINITY,i.south=Number.POSITIVE_INFINITY,i.north=Number.NEGATIVE_INFINITY,wu.northAngle=0,wu.southAngle=0,wu.westOverIdl=Number.POSITIVE_INFINITY,wu.eastOverIdl=Number.NEGATIVE_INFINITY;let o=e.length,r=fc.fromCartesian(e[0],Q5e);for(let s=1;s<o;s++){let a=fc.fromCartesian(e[s],tse);ese(a,r,t,n,wu,i),r=fc.clone(a,r)}return ese(fc.fromCartesian(e[0],tse),r,t,n,wu,i),i.east-i.west>wu.eastOverIdl-wu.westOverIdl&&(i.west=wu.westOverIdl,i.east=wu.eastOverIdl,i.east>X.PI&&(i.east=i.east-X.TWO_PI),i.west>X.PI&&(i.west=i.west-X.TWO_PI)),X.equalsEpsilon(Math.abs(wu.northAngle),X.TWO_PI,X.EPSILON10)&&(i.north=X.PI_OVER_TWO,i.east=X.PI,i.west=-X.PI),X.equalsEpsilon(Math.abs(wu.southAngle),X.TWO_PI,X.EPSILON10)&&(i.south=-X.PI_OVER_TWO,i.east=X.PI,i.west=-X.PI),i};var j5e=new fc;function q5e(e,t,n){return e.height>=X.PI||e.width>=X.PI?fc.fromCartesian(t[0],j5e).tangentPlane:Qr.fromPoints(t,n)}var nse=new he;function $5e(e,t,n){return(i,o)=>{if(e.height>=X.PI||e.width>=X.PI){if(e.south<0&&e.north>0){l(o)||(o=[]);for(let s=0;s<i.length;++s){let a=n.cartesianToCartographic(i[s],nse);o[s]=new U(a.longitude/X.PI,a.latitude/X.PI_OVER_TWO)}return o.length=i.length,o}return fc.fromCartesianArray(i,o)}return Qr.fromPoints(t,n).projectPointsOntoPlane(i,o)}}function eke(e,t,n){if(e.height>=X.PI||e.width>=X.PI)return(o,r)=>{if(e.south<0&&e.north>0){let s=n.cartesianToCartographic(o,nse);return l(r)||(r=new U),r.x=s.longitude/X.PI,r.y=s.latitude/X.PI_OVER_TWO,r}return fc.fromCartesian(o,r)};let i=Qr.fromPoints(t,n);return(o,r)=>i.projectPointsOntoPlane(o,r)}function tke(e,t,n,i){return(o,r)=>!i&&(e.height>=X.PI_OVER_TWO||e.width>=2*X.PI_OVER_THREE)?Bn.splitPolygonsOnEquator(o,t,n,r):o}function nke(e,t,n,i){if(t.height>=X.PI||t.width>=X.PI)return Ke.fromRectangle(t,void 0,jre);let o=e,r=Qr.fromPoints(o,n);return Bn.computeBoundingRectangle(r.plane.normal,r.projectPointOntoPlane.bind(r),o,i,jre)}Fu.createGeometry=function(e){let t=e._vertexFormat,n=e._ellipsoid,i=e._granularity,o=e._stRotation,r=e._polygonHierarchy,s=e._perPositionHeight,a=e._closeTop,c=e._closeBottom,d=e._arcType,u=e._textureCoordinates,h=l(u),p=r.positions;if(p.length<3)return;let g=e.rectangle,f=Bn.polygonsFromHierarchy(r,h,$5e(g,p,n),!s,n,tke(g,n,d,s)),y=f.hierarchy,x=f.polygons,S=function(I){return I},C=h?Bn.polygonsFromHierarchy(u,!0,S,!1,n).polygons:void 0;if(y.length===0)return;let V=y[0].outerRing,L=nke(V,g,n,o),Z=[],E=e._height,P=e._extrudedHeight,W=e._perPositionHeightExtrude||!X.equalsEpsilon(E,P,0,X.EPSILON2),v={perPositionHeight:s,vertexFormat:t,geometry:void 0,rotationAxis:q5e(g,V,n).plane.normal,projectTo2d:eke(g,V,n),boundingRectangle:L,ellipsoid:n,stRotation:o,textureCoordinates:void 0,bottom:!1,top:!0,wall:!1,extrude:!1,arcType:d},A;if(W)for(v.extrude=!0,v.top=a,v.bottom=c,v.shadowVolume=e._shadowVolume,v.offsetAttribute=e._offsetAttribute,A=0;A<x.length;A++){let I=B5e(n,x[A],h?C[A]:void 0,i,y[A],s,a,c,t,d),w;a&&c?(w=I.topAndBottom,v.geometry=Bn.scaleToGeodeticHeightExtruded(w.geometry,E,P,n,s)):a?(w=I.topAndBottom,w.geometry.attributes.position.values=ai.scaleToGeodeticHeight(w.geometry.attributes.position.values,E,n,!s),v.geometry=w.geometry):c&&(w=I.topAndBottom,w.geometry.attributes.position.values=ai.scaleToGeodeticHeight(w.geometry.attributes.position.values,P,n,!0),v.geometry=w.geometry),(a||c)&&(v.wall=!1,w.geometry=Qz(v),Z.push(w));let M=I.walls;v.wall=!0;for(let B=0;B<M.length;B++){let k=M[B];v.geometry=Bn.scaleToGeodeticHeightExtruded(k.geometry,E,P,n,s),k.geometry=Qz(v),Z.push(k)}}else for(A=0;A<x.length;A++){let I=new Et({geometry:Bn.createGeometryFromPositions(n,x[A],h?C[A]:void 0,i,s,t,d)});if(I.geometry.attributes.position.values=ai.scaleToGeodeticHeight(I.geometry.attributes.position.values,E,n,!s),v.geometry=I.geometry,I.geometry=Qz(v),l(e._offsetAttribute)){let w=I.geometry.attributes.position.values.length,M=e._offsetAttribute===rn.NONE?0:1,B=new Uint8Array(w/3).fill(M);I.geometry.attributes.applyOffset=new Ge({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:B})}Z.push(I)}let b=Fn.combineInstances(Z)[0];b.attributes.position.values=new Float64Array(b.attributes.position.values),b.indices=Ae.createTypedArray(b.attributes.position.values.length/3,b.indices);let R=b.attributes,G=le.fromVertices(R.position.values);return t.position||delete R.position,new lt({attributes:R,indices:b.indices,primitiveType:b.primitiveType,boundingSphere:G,offsetAttribute:e._offsetAttribute})};Fu.createShadowVolume=function(e,t,n){let i=e._granularity,o=e._ellipsoid,r=t(i,o),s=n(i,o);return new Fu({polygonHierarchy:e._polygonHierarchy,ellipsoid:o,stRotation:e._stRotation,granularity:i,perPositionHeight:!1,extrudedHeight:r,height:s,vertexFormat:Xe.POSITION_ONLY,shadowVolume:!0,arcType:e._arcType})};function ike(e){let t=-e._stRotation;if(t===0)return[0,0,0,1,1,0];let n=e._ellipsoid,i=e._polygonHierarchy.positions,o=e.rectangle;return lt._textureCoordinateRotationPoints(i,t,n,o)}Object.defineProperties(Fu.prototype,{rectangle:{get:function(){if(!l(this._rectangle)){let e=this._polygonHierarchy.positions;this._rectangle=Fu.computeRectangleFromPositions(e,this._ellipsoid,this._arcType)}return this._rectangle}},textureCoordinateRotationPoints:{get:function(){return l(this._textureCoordinateRotationPoints)||(this._textureCoordinateRotationPoints=ike(this)),this._textureCoordinateRotationPoints}}});var ob=Fu;function T_(e){this._ellipsoid=e.ellipsoid??ne.default,this._positions=[...e.positions]}Object.defineProperties(T_.prototype,{length:{get:function(){return this._positions.length}},positions:{get:function(){return this._positions}},ellipsoid:{get:function(){return this._ellipsoid}}});T_.clone=function(e,t){return l(t)?(t._ellipsoid=e.ellipsoid,t._positions.length=0,t._positions.push(...e.positions),t):new T_({positions:e.positions,ellipsoid:e.ellipsoid})};T_.equals=function(e,t){return e.ellipsoid.equals(t.ellipsoid)&&e.positions===t.positions};T_.prototype.computeRectangle=function(e){return ob.computeRectangleFromPositions(this.positions,this.ellipsoid,void 0,e)};var oke=new ce,ise=new m;T_.prototype.computeSphericalExtents=function(e){l(e)||(e=new ce);let t=this.computeRectangle(oke),n=he.toCartesian(ce.southwest(t),this.ellipsoid,ise),i=Math.sqrt(n.x*n.x+n.y*n.y),o=X.fastApproximateAtan2(i,n.z),r=X.fastApproximateAtan2(n.x,n.y);return e.south=o,e.west=r,n=he.toCartesian(ce.northeast(t),this.ellipsoid,ise),i=Math.sqrt(n.x*n.x+n.y*n.y),o=X.fastApproximateAtan2(i,n.z),r=X.fastApproximateAtan2(n.x,n.y),e.north=o,e.east=r,e};var DC=T_;var wbn=_(T(),1),mX=`in vec2 v_textureCoordinates; uniform int u_polygonsLength; uniform int u_extentsLength; uniform highp sampler2D u_polygonTexture; uniform highp sampler2D u_extentsTexture; int getPolygonIndex(float dimension, vec2 coord) { vec2 uv = coord.xy * dimension; return int(floor(uv.y) * dimension + floor(uv.x)); } vec2 getLookupUv(ivec2 dimensions, int i) { int pixY = i / dimensions.x; int pixX = i - (pixY * dimensions.x); float pixelWidth = 1.0 / float(dimensions.x); float pixelHeight = 1.0 / float(dimensions.y); float u = (float(pixX) + 0.5) * pixelWidth; // sample from center of pixel float v = (float(pixY) + 0.5) * pixelHeight; return vec2(u, v); } vec4 getExtents(int i) { return texture(u_extentsTexture, getLookupUv(textureSize(u_extentsTexture, 0), i)); } ivec2 getPositionsLengthAndExtentsIndex(int i) { vec2 uv = getLookupUv(textureSize(u_polygonTexture, 0), i); vec4 value = texture(u_polygonTexture, uv); return ivec2(int(value.x), int(value.y)); } vec2 getPolygonPosition(int i) { vec2 uv = getLookupUv(textureSize(u_polygonTexture, 0), i); return texture(u_polygonTexture, uv).xy; } vec2 getCoordinates(vec2 textureCoordinates, vec4 extents) { float latitude = mix(extents.x, extents.x + 1.0 / extents.z, textureCoordinates.y); float longitude = mix(extents.y, extents.y + 1.0 / extents.w, textureCoordinates.x); return vec2(latitude, longitude); } void main() { int lastPolygonIndex = 0; out_FragColor = vec4(1.0); // Get the relevant region of the texture float dimension = float(u_extentsLength); if (u_extentsLength > 2) { dimension = ceil(log2(float(u_extentsLength))); } int regionIndex = getPolygonIndex(dimension, v_textureCoordinates); for (int polygonIndex = 0; polygonIndex < u_polygonsLength; polygonIndex++) { ivec2 positionsLengthAndExtents = getPositionsLengthAndExtentsIndex(lastPolygonIndex); int positionsLength = positionsLengthAndExtents.x; int polygonExtentsIndex = positionsLengthAndExtents.y; lastPolygonIndex += 1; // Only compute signed distance for the relevant part of the atlas if (polygonExtentsIndex == regionIndex) { float clipAmount = czm_infinity; vec4 extents = getExtents(polygonExtentsIndex); vec2 textureOffset = vec2(mod(float(polygonExtentsIndex), dimension), floor(float(polygonExtentsIndex) / dimension)) / dimension; vec2 p = getCoordinates((v_textureCoordinates - textureOffset) * dimension, extents); float s = 1.0; // Check each edge for absolute distance for (int i = 0, j = positionsLength - 1; i < positionsLength; j = i, i++) { vec2 a = getPolygonPosition(lastPolygonIndex + i); vec2 b = getPolygonPosition(lastPolygonIndex + j); vec2 ab = b - a; vec2 pa = p - a; float t = dot(pa, ab) / dot(ab, ab); t = clamp(t, 0.0, 1.0); vec2 pq = pa - t * ab; float d = length(pq); // Inside / outside computation to determine sign bvec3 cond = bvec3(p.y >= a.y, p.y < b.y, ab.x * pa.y > ab.y * pa.x); if (all(cond) || all(not(cond))) s = -s; if (abs(d) < abs(clipAmount)) { clipAmount = d; } } // Normalize the range to [0,1] vec4 result = (s * vec4(clipAmount * length(extents.zw))) / 2.0 + 0.5; // In the case where we've iterated through multiple polygons, take the minimum out_FragColor = min(out_FragColor, result); } lastPolygonIndex += positionsLength; } }`;function es(e){e=e??Y.EMPTY_OBJECT,this._polygons=[],this._totalPositions=0,this.enabled=e.enabled??!0,this.inverse=e.inverse??!1,this.polygonAdded=new be,this.polygonRemoved=new be,this._owner=void 0,this._float32View=void 0,this._extentsFloat32View=void 0,this._extentsCount=0,this._polygonsTexture=void 0,this._extentsTexture=void 0,this._signedDistanceTexture=void 0,this._signedDistanceComputeCommand=void 0;let t=e.polygons;if(l(t)){let n=t.length;for(let i=0;i<n;++i)this._polygons.push(t[i])}}Object.defineProperties(es.prototype,{length:{get:function(){return this._polygons.length}},totalPositions:{get:function(){return this._totalPositions}},extentsTexture:{get:function(){return this._extentsTexture}},extentsCount:{get:function(){return this._extentsCount}},pixelsNeededForExtents:{get:function(){return this.length}},pixelsNeededForPolygonPositions:{get:function(){return this.totalPositions+this.length}},clippingTexture:{get:function(){return this._signedDistanceTexture}},owner:{get:function(){return this._owner}},clippingPolygonsState:{get:function(){return this.inverse?-this.extentsCount:this.extentsCount}}});es.prototype.add=function(e){let t=this._polygons.length;return this._polygons.push(e),this.polygonAdded.raiseEvent(e,t),e};es.prototype.get=function(e){return this._polygons[e]};es.prototype.contains=function(e){return this._polygons.some(t=>DC.equals(t,e))};es.prototype.remove=function(e){let t=this._polygons,n=t.findIndex(i=>DC.equals(i,e));return n===-1?!1:(t.splice(n,1),this.polygonRemoved.raiseEvent(e,n),!0)};var rke=new ce;function ske(e){let t=[],n=[],i=e.length;for(let r=0;r<i;++r){let a=e[r].computeSphericalExtents(),c=Math.max(a.height*2.5,.001),d=Math.max(a.width*2.5,.001),u=ce.clone(a);u.south-=c,u.west-=d,u.north+=c,u.east+=d,u.south=Math.max(u.south,-Math.PI),u.west=Math.max(u.west,-Math.PI),u.north=Math.min(u.north,Math.PI),u.east=Math.min(u.east,Math.PI);let h=[r];for(let p=0;p<t.length;++p){let g=t[p];if(l(g)&&l(ce.simpleIntersection(g,u))&&!ce.equals(g,u)){let f=n[p];h.push(...f),f.reduce((y,x)=>ce.union(e[x].computeSphericalExtents(rke),y,y),a),t[p]=void 0,n[p]=void 0,c=Math.max(a.height*2.5,.001),d=Math.max(a.width*2.5,.001),u=ce.clone(a,u),u.south-=c,u.west-=d,u.north+=c,u.east+=d,u.south=Math.max(u.south,-Math.PI),u.west=Math.max(u.west,-Math.PI),u.north=Math.min(u.north,Math.PI),u.east=Math.min(u.east,Math.PI),p=-1}}t.push(u),n.push(h)}let o=new Map;return n.filter(l).forEach((r,s)=>r.forEach(a=>o.set(a,s))),{extentsList:t.filter(l),extentsIndexByPolygon:o}}es.prototype.removeAll=function(){let e=this._polygons,t=e.length;for(let n=0;n<t;++n){let i=e[n];this.polygonRemoved.raiseEvent(i,n)}this._polygons=[]};function ake(e){let t=e._float32View,n=e._extentsFloat32View,i=e._polygons,{extentsList:o,extentsIndexByPolygon:r}=ske(i),s=0;for(let[c,d]of i.entries()){let u=d.length;t[s++]=u,t[s++]=r.get(c);for(let h=0;h<u;++h){let p=d.positions[h],g=Math.hypot(p.x,p.y),f=X.fastApproximateAtan2(g,p.z),y=X.fastApproximateAtan2(p.x,p.y);t[s++]=f,t[s++]=y}}let a=0;for(let c of o){let d=1/(c.east-c.west),u=1/(c.north-c.south);n[a++]=c.south,n[a++]=c.west,n[a++]=u,n[a++]=d}e._extentsCount=o.length}var jz=new U;es.prototype.update=function(e){let t=e.context;if(!es.isSupported(e))throw new ae("ClippingPolygonCollections are only supported for WebGL 2.");let n=this._polygons.reduce((s,a)=>s+a.length,0);if(n===this.totalPositions||(this._totalPositions=n,this.length===0))return;l(this._signedDistanceComputeCommand)&&(this._signedDistanceComputeCommand.canceled=!0,this._signedDistanceComputeCommand=void 0);let i=this._polygonsTexture,o=this._extentsTexture,r=this._signedDistanceTexture;if(l(i)){let s=i.width*i.height;(s<this.pixelsNeededForPolygonPositions||this.pixelsNeededForPolygonPositions<.25*s)&&(i.destroy(),i=void 0,this._polygonsTexture=void 0)}if(!l(i)){let s=es.getTextureResolution(i,this.pixelsNeededForPolygonPositions,jz);i=new vt({context:t,width:s.x,height:s.y,pixelFormat:it.RG,pixelDatatype:je.FLOAT,sampler:qt.NEAREST,flipY:!1}),this._float32View=new Float32Array(s.x*s.y*2),this._polygonsTexture=i}if(l(o)){let s=o.width*o.height;(s<this.pixelsNeededForExtents||this.pixelsNeededForExtents<.25*s)&&(o.destroy(),o=void 0,this._extentsTexture=void 0)}if(!l(o)){let s=es.getTextureResolution(o,this.pixelsNeededForExtents,jz);o=new vt({context:t,width:s.x,height:s.y,pixelFormat:it.RGBA,pixelDatatype:je.FLOAT,sampler:qt.NEAREST,flipY:!1}),this._extentsFloat32View=new Float32Array(s.x*s.y*4),this._extentsTexture=o}if(ake(this),o.copyFrom({source:{width:o.width,height:o.height,arrayBufferView:this._extentsFloat32View}}),i.copyFrom({source:{width:i.width,height:i.height,arrayBufferView:this._float32View}}),!l(r)){let s=es.getClippingDistanceTextureResolution(this,jz);r=new vt({context:t,width:s.x,height:s.y,pixelFormat:t.webgl2?it.RED:it.LUMINANCE,pixelDatatype:je.FLOAT,sampler:new qt({wrapS:Vn.CLAMP_TO_EDGE,wrapT:Vn.CLAMP_TO_EDGE,minificationFilter:jt.LINEAR,magnificationFilter:hi.LINEAR}),flipY:!1}),this._signedDistanceTexture=r}this._signedDistanceComputeCommand=cke(this)};es.prototype.queueCommands=function(e){l(this._signedDistanceComputeCommand)&&e.commandList.push(this._signedDistanceComputeCommand)};function cke(e){let t=e._polygonsTexture,n=e._extentsTexture;return new Fc({fragmentShaderSource:mX,outputTexture:e._signedDistanceTexture,uniformMap:{u_polygonsLength:function(){return e.length},u_extentsLength:function(){return e.extentsCount},u_extentsTexture:function(){return n},u_polygonTexture:function(){return t}},persists:!1,owner:e,postExecute:()=>{e._signedDistanceComputeCommand=void 0}})}var ose=new ce,lke=new ce;es.prototype.computeIntersectionWithBoundingVolume=function(e,t){let n=this._polygons,i=n.length,o=zt.OUTSIDE;this.inverse&&(o=zt.INSIDE);for(let r=0;r<i;++r){let a=n[r].computeRectangle(),c=e.rectangle;if(!l(c)&&l(e.boundingVolume?.computeCorners)){let u=e.boundingVolume.computeCorners();c=ce.fromCartesianArray(u,t,ose)}l(c)||(c=ce.fromBoundingSphere(e.boundingSphere,t,ose));let d=ce.simpleIntersection(c,a,lke);l(d)&&(o=zt.INTERSECTING)}return o};es.setOwner=function(e,t,n){e!==t[n]&&(t[n]=t[n]&&t[n].destroy(),l(e)&&(e._owner=t,t[n]=e))};es.isSupported=function(e){return e?.context.webgl2};es.getTextureResolution=function(e,t,n){if(l(e))return n.x=e.width,n.y=e.height,n;let i=Nt.maximumTextureSize;return n.x=Math.min(t,i),n.y=Math.ceil(t/n.x),n.y*=2,n};es.getClippingDistanceTextureResolution=function(e,t){let n=e.signedDistanceTexture;return l(n)?(t.x=n.width,t.y=n.height,t):(t.x=Math.min(Nt.maximumTextureSize,4096),t.y=Math.min(Nt.maximumTextureSize,4096),t)};es.getClippingExtentsTextureResolution=function(e,t){let n=e.extentsTexture;return l(n)?(t.x=n.width,t.y=n.height,t):es.getTextureResolution(n,e.pixelsNeededForExtents,t)};es.prototype.isDestroyed=function(){return!1};es.prototype.destroy=function(){return l(this._signedDistanceComputeCommand)&&(this._signedDistanceComputeCommand.canceled=!0),this._polygonsTexture=this._polygonsTexture&&this._polygonsTexture.destroy(),this._extentsTexture=this._extentsTexture&&this._extentsTexture.destroy(),this._signedDistanceTexture=this._signedDistanceTexture&&this._signedDistanceTexture.destroy(),me(this)};var qm=es;var j0n=_(T(),1);var d0n=_(T(),1);var r0n=_(T(),1),hX={NONE:0,SCENE_LIGHT:1,SUNLIGHT:2};hX.fromGlobeFlags=function(e){return e.enableLighting&&e.dynamicAtmosphereLighting?e.dynamicAtmosphereLightingFromSun?hX.SUNLIGHT:hX.SCENE_LIGHT:hX.NONE};var rb=Object.freeze(hX);function rse(){this.lightIntensity=10,this.rayleighCoefficient=new m(55e-7,13e-6,284e-7),this.mieCoefficient=new m(21e-6,21e-6,21e-6),this.rayleighScaleHeight=1e4,this.mieScaleHeight=3200,this.mieAnisotropy=.9,this.hueShift=0,this.saturationShift=0,this.brightnessShift=0,this.dynamicLighting=rb.NONE}rse.requiresColorCorrect=function(e){return!(X.equalsEpsilon(e.hueShift,0,X.EPSILON7)&&X.equalsEpsilon(e.saturationShift,0,X.EPSILON7)&&X.equalsEpsilon(e.brightnessShift,0,X.EPSILON7))};var S_=rse;var m0n=_(T(),1),$m=`uniform vec3 u_radiiAndDynamicAtmosphereColor; uniform float u_atmosphereLightIntensity; uniform float u_atmosphereRayleighScaleHeight; uniform float u_atmosphereMieScaleHeight; uniform float u_atmosphereMieAnisotropy; uniform vec3 u_atmosphereRayleighCoefficient; uniform vec3 u_atmosphereMieCoefficient; const float ATMOSPHERE_THICKNESS = 111e3; // The thickness of the atmosphere in meters. const int PRIMARY_STEPS_MAX = 16; // Maximum number of times the ray from the camera to the world position (primary ray) is sampled. const int LIGHT_STEPS_MAX = 4; // Maximum number of times the light is sampled from the light source's intersection with the atmosphere to a sample position on the primary ray. /** * This function computes the colors contributed by Rayliegh and Mie scattering on a given ray, as well as * the transmittance value for the ray. * * @param {czm_ray} primaryRay The ray from the camera to the position. * @param {float} primaryRayLength The length of the primary ray. * @param {vec3} lightDirection The direction of the light to calculate the scattering from. * @param {vec3} rayleighColor The variable the Rayleigh scattering will be written to. * @param {vec3} mieColor The variable the Mie scattering will be written to. * @param {float} opacity The variable the transmittance will be written to. * @glslFunction */ void computeScattering( czm_ray primaryRay, float primaryRayLength, vec3 lightDirection, float atmosphereInnerRadius, out vec3 rayleighColor, out vec3 mieColor, out float opacity ) { // Initialize the default scattering amounts to 0. rayleighColor = vec3(0.0); mieColor = vec3(0.0); opacity = 0.0; float atmosphereOuterRadius = atmosphereInnerRadius + ATMOSPHERE_THICKNESS; vec3 origin = vec3(0.0); // Calculate intersection from the camera to the outer ring of the atmosphere. czm_raySegment primaryRayAtmosphereIntersect = czm_raySphereIntersectionInterval(primaryRay, origin, atmosphereOuterRadius); // Return empty colors if no intersection with the atmosphere geometry. if (primaryRayAtmosphereIntersect == czm_emptyRaySegment) { return; } // To deal with smaller values of PRIMARY_STEPS (e.g. 4) // we implement a split strategy: sky or horizon. // For performance reasons, instead of a if/else branch // a soft choice is implemented through a weight 0.0 <= w_stop_gt_lprl <= 1.0 float x = 1e-7 * primaryRayAtmosphereIntersect.stop / length(primaryRayLength); // Value close to 0.0: close to the horizon // Value close to 1.0: above in the sky float w_stop_gt_lprl = 0.5 * (1.0 + czm_approximateTanh(x)); // The ray should start from the first intersection with the outer atmopshere, or from the camera position, if it is inside the atmosphere. float start_0 = primaryRayAtmosphereIntersect.start; primaryRayAtmosphereIntersect.start = max(primaryRayAtmosphereIntersect.start, 0.0); // The ray should end at the exit from the atmosphere or at the distance to the vertex, whichever is smaller. primaryRayAtmosphereIntersect.stop = min(primaryRayAtmosphereIntersect.stop, length(primaryRayLength)); // For the number of ray steps, distinguish inside or outside atmosphere (outer space) // (1) from outer space we have to use more ray steps to get a realistic rendering // (2) within atmosphere we need fewer steps for faster rendering float x_o_a = start_0 - ATMOSPHERE_THICKNESS; // ATMOSPHERE_THICKNESS used as an ad-hoc constant, no precise meaning here, only the order of magnitude matters float w_inside_atmosphere = 1.0 - 0.5 * (1.0 + czm_approximateTanh(x_o_a)); int PRIMARY_STEPS = PRIMARY_STEPS_MAX - int(w_inside_atmosphere * 12.0); // Number of times the ray from the camera to the world position (primary ray) is sampled. int LIGHT_STEPS = LIGHT_STEPS_MAX - int(w_inside_atmosphere * 2.0); // Number of times the light is sampled from the light source's intersection with the atmosphere to a sample position on the primary ray. // Setup for sampling positions along the ray - starting from the intersection with the outer ring of the atmosphere. float rayPositionLength = primaryRayAtmosphereIntersect.start; // (1) Outside the atmosphere: constant rayStepLength // (2) Inside atmosphere: variable rayStepLength to compensate the rough rendering of the smaller number of ray steps float totalRayLength = primaryRayAtmosphereIntersect.stop - rayPositionLength; float rayStepLengthIncrease = w_inside_atmosphere * ((1.0 - w_stop_gt_lprl) * totalRayLength / (float(PRIMARY_STEPS * (PRIMARY_STEPS + 1)) / 2.0)); float rayStepLength = max(1.0 - w_inside_atmosphere, w_stop_gt_lprl) * totalRayLength / max(7.0 * w_inside_atmosphere, float(PRIMARY_STEPS)); vec3 rayleighAccumulation = vec3(0.0); vec3 mieAccumulation = vec3(0.0); vec2 opticalDepth = vec2(0.0); vec2 heightScale = vec2(u_atmosphereRayleighScaleHeight, u_atmosphereMieScaleHeight); // Sample positions on the primary ray. for (int i = 0; i < PRIMARY_STEPS_MAX; ++i) { // The loop should be: for (int i = 0; i < PRIMARY_STEPS; ++i) {...} but WebGL1 cannot // loop with non-constant condition, so it has to break early instead if (i >= PRIMARY_STEPS) { break; } // Calculate sample position along viewpoint ray. vec3 samplePosition = primaryRay.origin + primaryRay.direction * (rayPositionLength + rayStepLength); // Calculate height of sample position above ellipsoid. float sampleHeight = length(samplePosition) - atmosphereInnerRadius; // Calculate and accumulate density of particles at the sample position. vec2 sampleDensity = exp(-sampleHeight / heightScale) * rayStepLength; opticalDepth += sampleDensity; // Generate ray from the sample position segment to the light source, up to the outer ring of the atmosphere. czm_ray lightRay = czm_ray(samplePosition, lightDirection); czm_raySegment lightRayAtmosphereIntersect = czm_raySphereIntersectionInterval(lightRay, origin, atmosphereOuterRadius); float lightStepLength = lightRayAtmosphereIntersect.stop / float(LIGHT_STEPS); float lightPositionLength = 0.0; vec2 lightOpticalDepth = vec2(0.0); // Sample positions along the light ray, to accumulate incidence of light on the latest sample segment. for (int j = 0; j < LIGHT_STEPS_MAX; ++j) { // The loop should be: for (int j = 0; i < LIGHT_STEPS; ++j) {...} but WebGL1 cannot // loop with non-constant condition, so it has to break early instead if (j >= LIGHT_STEPS) { break; } // Calculate sample position along light ray. vec3 lightPosition = samplePosition + lightDirection * (lightPositionLength + lightStepLength * 0.5); // Calculate height of the light sample position above ellipsoid. float lightHeight = length(lightPosition) - atmosphereInnerRadius; // Calculate density of photons at the light sample position. lightOpticalDepth += exp(-lightHeight / heightScale) * lightStepLength; // Increment distance on light ray. lightPositionLength += lightStepLength; } // Compute attenuation via the primary ray and the light ray. vec3 attenuation = exp(-((u_atmosphereMieCoefficient * (opticalDepth.y + lightOpticalDepth.y)) + (u_atmosphereRayleighCoefficient * (opticalDepth.x + lightOpticalDepth.x)))); // Accumulate the scattering. rayleighAccumulation += sampleDensity.x * attenuation; mieAccumulation += sampleDensity.y * attenuation; // Increment distance on primary ray. rayPositionLength += (rayStepLength += rayStepLengthIncrease); } // Compute the scattering amount. rayleighColor = u_atmosphereRayleighCoefficient * rayleighAccumulation; mieColor = u_atmosphereMieCoefficient * mieAccumulation; // Compute the transmittance i.e. how much light is passing through the atmosphere. opacity = length(exp(-((u_atmosphereMieCoefficient * opticalDepth.y) + (u_atmosphereRayleighCoefficient * opticalDepth.x)))); } vec4 computeAtmosphereColor( vec3 positionWC, vec3 lightDirection, vec3 rayleighColor, vec3 mieColor, float opacity ) { // Setup the primary ray: from the camera position to the vertex position. vec3 cameraToPositionWC = positionWC - czm_viewerPositionWC; vec3 cameraToPositionWCDirection = normalize(cameraToPositionWC); float cosAngle = dot(cameraToPositionWCDirection, lightDirection); float cosAngleSq = cosAngle * cosAngle; float G = u_atmosphereMieAnisotropy; float GSq = G * G; // The Rayleigh phase function. float rayleighPhase = 3.0 / (50.2654824574) * (1.0 + cosAngleSq); // The Mie phase function. float miePhase = 3.0 / (25.1327412287) * ((1.0 - GSq) * (cosAngleSq + 1.0)) / (pow(1.0 + GSq - 2.0 * cosAngle * G, 1.5) * (2.0 + GSq)); // The final color is generated by combining the effects of the Rayleigh and Mie scattering. vec3 rayleigh = rayleighPhase * rayleighColor; vec3 mie = miePhase * mieColor; vec3 color = (rayleigh + mie) * u_atmosphereLightIntensity; return vec4(color, opacity); } `;var f0n=_(T(),1),fX=`uniform samplerCube u_radianceMap; in vec2 v_textureCoordinates; const float twoSqrtPi = 2.0 * sqrt(czm_pi); // Coutesy of https://www.ppsloan.org/publications/StupidSH36.pdf float computeShBasis(int index, vec3 s) { if (index == 0) { // l = 0, m = 0 return 1.0 / twoSqrtPi; } if (index == 1) { // l = 1, m = -1 return -sqrt(3.0) * s.y / twoSqrtPi; } if (index == 2) { // l = 1, m = 0 return sqrt(3.0) * s.z / twoSqrtPi; } if (index == 3) { // l = 1, m = 1 return -sqrt(3.0) * s.x / twoSqrtPi; } if (index == 4) { // l = 2, m = -2 return sqrt(15.0) * s.y * s.x / twoSqrtPi; } if (index == 5) { // l = 2, m = -1 return -sqrt(15.0) * s.y * s.z / twoSqrtPi; } if (index == 6) { // l = 2, m = 0 return sqrt(5.0) * (3.0 * s.z * s.z - 1.0) / 2.0 / twoSqrtPi; } if (index == 7) { // l = 2, m = 1 return -sqrt(15.0) * s.x * s.z / twoSqrtPi; } if (index == 8) { // l = 2, m = 2 return sqrt(15.0) * (s.x * s.x - s.y * s.y) / 2.0 / twoSqrtPi; } return 0.0; } float vdcRadicalInverse(int i) { float r; float base = 2.0; float value = 0.0; float invBase = 1.0 / base; float invBi = invBase; for (int x = 0; x < 100; x++) { if (i <= 0) { break; } r = mod(float(i), base); value += r * invBi; invBi *= invBase; i = int(float(i) * invBase); } return value; } vec2 hammersley2D(int i, int N) { return vec2(float(i) / float(N), vdcRadicalInverse(i)); } // Sample count is relatively low for the sake of performance, but should still be enough to capture directionality needed for third-order harmonics const int samples = 256; const float solidAngle = 1.0 / float(samples); void main() { // Get the current coefficient based on the uv vec2 uv = v_textureCoordinates.xy * 3.0; int coefficientIndex = int(floor(uv.y) * 3.0 + floor(uv.x)); for (int i = 0; i < samples; ++i) { vec2 xi = hammersley2D(i, samples); float phi = czm_twoPi * xi.x; float cosTheta = 1.0 - 2.0 * sqrt(1.0 - xi.y * xi.y); float sinTheta = sqrt(1.0 - cosTheta * cosTheta); vec3 direction = normalize(vec3(sinTheta * cos(phi), cosTheta, sinTheta * sin(phi))); // Generate the spherical harmonics basis from the direction float Ylm = computeShBasis(coefficientIndex, direction); vec3 lookupDirection = -direction.xyz; lookupDirection.z = -lookupDirection.z; vec4 color = czm_textureCube(u_radianceMap, lookupDirection, 0.0); // Use the relevant function for this coefficient out_FragColor += Ylm * color * solidAngle * sinTheta; } } `;var b0n=_(T(),1),pX=`precision highp float; in vec2 v_textureCoordinates; uniform vec3 u_faceDirection; // Current cubemap face uniform vec3 u_positionWC; uniform mat4 u_enuToFixedFrame; uniform vec4 u_brightnessSaturationGammaIntensity; uniform vec4 u_groundColor; // alpha component represent albedo vec4 getCubeMapDirection(vec2 uv, vec3 faceDir) { vec2 scaledUV = uv * 2.0 - 1.0; if (faceDir.x != 0.0) { return vec4(faceDir.x, scaledUV.x * faceDir.x, -scaledUV.y, 0.0); } else if (faceDir.y != 0.0) { return vec4(scaledUV.x, -scaledUV.y * faceDir.y, faceDir.y, 0.0); } else { return vec4(scaledUV.x * faceDir.z, -faceDir.z, -scaledUV.y, 0.0); } } void main() { float height = length(u_positionWC); float atmosphereInnerRadius = u_radiiAndDynamicAtmosphereColor.y; float ellipsoidHeight = max(height - atmosphereInnerRadius, 0.0); // Scale the position to ensure the sky color is present, even when underground. vec3 positionWC = u_positionWC / height * (ellipsoidHeight + atmosphereInnerRadius); float atmosphereOuterRadius = u_radiiAndDynamicAtmosphereColor.x; float atmosphereHeight = atmosphereOuterRadius - atmosphereInnerRadius; vec3 direction = (u_enuToFixedFrame * getCubeMapDirection(v_textureCoordinates, u_faceDirection)).xyz; vec3 normalizedDirection = normalize(direction); czm_ray ray = czm_ray(positionWC, normalizedDirection); czm_raySegment intersection = czm_raySphereIntersectionInterval(ray, vec3(0.0), atmosphereInnerRadius); if (!czm_isEmpty(intersection)) { intersection = czm_rayEllipsoidIntersectionInterval(ray, vec3(0.0), czm_ellipsoidInverseRadii); } bool onEllipsoid = intersection.start >= 0.0; float rayLength = czm_branchFreeTernary(onEllipsoid, intersection.start, atmosphereOuterRadius); // Compute sky color for each position on a sphere at radius centered around the provided position's origin vec3 skyPositionWC = positionWC + normalizedDirection * rayLength; float lightEnum = u_radiiAndDynamicAtmosphereColor.z; vec3 lightDirectionWC = normalize(czm_getDynamicAtmosphereLightDirection(skyPositionWC, lightEnum)); vec3 mieColor; vec3 rayleighColor; float opacity; czm_computeScattering( ray, rayLength, lightDirectionWC, atmosphereInnerRadius, rayleighColor, mieColor, opacity ); vec4 atmopshereColor = czm_computeAtmosphereColor(ray, lightDirectionWC, rayleighColor, mieColor, opacity); #ifdef ATMOSPHERE_COLOR_CORRECT const bool ignoreBlackPixels = true; atmopshereColor.rgb = czm_applyHSBShift(atmopshereColor.rgb, czm_atmosphereHsbShift, ignoreBlackPixels); #endif vec3 lookupDirection = -normalizedDirection; // Flipping the X vector is a cheap way to get the inverse of czm_temeToPseudoFixed, since that's a rotation about Z. lookupDirection.x = -lookupDirection.x; lookupDirection = -normalize(czm_temeToPseudoFixed * lookupDirection); lookupDirection.x = -lookupDirection.x; // Values outside the atmopshere are rendered as black, when they should be treated as transparent float skyAlpha = clamp((1.0 - ellipsoidHeight / atmosphereHeight) * atmopshereColor.a, 0.0, 1.0); skyAlpha = czm_branchFreeTernary(length(atmopshereColor.rgb) <= czm_epsilon7, 0.0, skyAlpha); // Treat black as transparent // Blend starmap with atmopshere scattering float intensity = u_brightnessSaturationGammaIntensity.w; vec4 sceneSkyBoxColor = czm_textureCube(czm_environmentMap, lookupDirection); vec3 skyBackgroundColor = mix(czm_backgroundColor.rgb, sceneSkyBoxColor.rgb, sceneSkyBoxColor.a); vec4 combinedSkyColor = vec4(mix(skyBackgroundColor, atmopshereColor.rgb * intensity, skyAlpha), 1.0); // Compute ground color based on amount of reflected light, then blend it with ground atmosphere based on height vec3 up = normalize(positionWC); float occlusion = max(dot(lightDirectionWC, up), 0.05); vec4 groundColor = vec4(u_groundColor.rgb * u_groundColor.a * (vec3(intensity * occlusion) + atmopshereColor.rgb), 1.0); vec4 blendedGroundColor = mix(groundColor, atmopshereColor, clamp(ellipsoidHeight / atmosphereHeight, 0.0, 1.0)); vec4 color = czm_branchFreeTernary(onEllipsoid, blendedGroundColor, combinedSkyColor); float brightness = u_brightnessSaturationGammaIntensity.x; float saturation = u_brightnessSaturationGammaIntensity.y; float gamma = u_brightnessSaturationGammaIntensity.z; #ifdef ENVIRONMENT_COLOR_CORRECT color.rgb = mix(vec3(0.0), color.rgb, brightness); color.rgb = czm_saturation(color.rgb, saturation); #endif color.rgb = pow(color.rgb, vec3(gamma)); // Normally this would be in the ifdef above, but there is a precision issue with the atmopshere scattering transmittance (alpha). Having this line is a workaround for that issue, even when gamma is 1.0. color.rgb = czm_gammaCorrect(color.rgb); out_FragColor = color; } `;var y0n=_(T(),1),bX=`precision highp float; in vec3 v_textureCoordinates; uniform float u_roughness; uniform samplerCube u_radianceTexture; uniform vec3 u_faceDirection; float vdcRadicalInverse(int i) { float r; float base = 2.0; float value = 0.0; float invBase = 1.0 / base; float invBi = invBase; for (int x = 0; x < 100; x++) { if (i <= 0) { break; } r = mod(float(i), base); value += r * invBi; invBi *= invBase; i = int(float(i) * invBase); } return value; } vec2 hammersley2D(int i, int N) { return vec2(float(i) / float(N), vdcRadicalInverse(i)); } vec3 importanceSampleGGX(vec2 xi, float alphaRoughness, vec3 N) { float alphaRoughnessSquared = alphaRoughness * alphaRoughness; float phi = czm_twoPi * xi.x; float cosTheta = sqrt((1.0 - xi.y) / (1.0 + (alphaRoughnessSquared - 1.0) * xi.y)); float sinTheta = sqrt(1.0 - cosTheta * cosTheta); vec3 H = vec3(sinTheta * cos(phi), sinTheta * sin(phi), cosTheta); vec3 upVector = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0); vec3 tangentX = normalize(cross(upVector, N)); vec3 tangentY = cross(N, tangentX); return tangentX * H.x + tangentY * H.y + N * H.z; } // Sample count is relatively low for the sake of performance, but should still be enough to prevent artifacting in lower roughnesses const int samples = 128; void main() { vec3 normal = u_faceDirection; vec3 V = normalize(v_textureCoordinates); float roughness = u_roughness; vec4 color = vec4(0.0); float weight = 0.0; for (int i = 0; i < samples; ++i) { vec2 xi = hammersley2D(i, samples); vec3 H = importanceSampleGGX(xi, roughness, V); vec3 L = 2.0 * dot(V, H) * H - V; // reflected vector float NdotL = max(dot(V, L), 0.0); if (NdotL > 0.0) { color += vec4(czm_textureCube(u_radianceTexture, L).rgb, 1.0) * NdotL; weight += NdotL; } } out_FragColor = color / weight; } `;var _0n=_(T(),1),gX=`in vec3 position; out vec3 v_textureCoordinates; uniform vec3 u_faceDirection; vec3 getCubeMapDirection(vec2 uv, vec3 faceDir) { vec2 scaledUV = uv; if (faceDir.x != 0.0) { return vec3(faceDir.x, scaledUV.y, scaledUV.x * faceDir.x); } else if (faceDir.y != 0.0) { return vec3(scaledUV.x, -faceDir.y, -scaledUV.y * faceDir.y); } else { return vec3(scaledUV.x * faceDir.z, scaledUV.y, -faceDir.z); } } void main() { v_textureCoordinates = getCubeMapDirection(position.xy, u_faceDirection); v_textureCoordinates.y = -v_textureCoordinates.y; v_textureCoordinates.z = -v_textureCoordinates.z; gl_Position = vec4(position, 1.0); } `;function $n(e){this._position=void 0,this._radianceMapDirty=!1,this._radianceCommandsDirty=!1,this._convolutionsCommandsDirty=!1,this._irradianceCommandDirty=!1,this._irradianceTextureDirty=!1,this._sphericalHarmonicCoefficientsDirty=!1,this._shouldRegenerateShaders=!1,this._shouldReset=!1,e=e??Y.EMPTY_OBJECT;let t=Math.min(e.mipmapLevels??7,Math.log2(Nt.maximumCubeMapSize));this._mipmapLevels=t,this._radianceMapComputeCommands=new Array(6),this._convolutionComputeCommands=new Array((t-1)*6),this._irradianceComputeCommand=void 0,this._radianceMapFS=void 0,this._irradianceMapFS=void 0,this._convolveSP=void 0,this._va=void 0,this._radianceMapTextures=new Array(6),this._specularMapTextures=new Array((t-1)*6),this._radianceCubeMap=void 0,this._irradianceMapTexture=void 0,this._sphericalHarmonicCoefficients=$n.DEFAULT_SPHERICAL_HARMONIC_COEFFICIENTS.slice(),this._lastTime=new q;let n=Math.pow(2,t-1);this._textureDimensions=new U(n,n),this._radiiAndDynamicAtmosphereColor=new m,this._sceneEnvironmentMap=void 0,this._backgroundColor=void 0,this._owner=void 0,this.enabled=e.enabled??!0,this.shouldUpdate=!0,this.maximumSecondsDifference=e.maximumSecondsDifference??60*60,this.maximumPositionEpsilon=e.maximumPositionEpsilon??1e3,this.atmosphereScatteringIntensity=e.atmosphereScatteringIntensity??2,this.gamma=e.gamma??1,this.brightness=e.brightness??1,this.saturation=e.saturation??1,this.groundColor=e.groundColor??$n.AVERAGE_EARTH_GROUND_COLOR,this.groundAlbedo=e.groundAlbedo??.31}Object.defineProperties($n.prototype,{owner:{get:function(){return this._owner}},shouldRegenerateShaders:{get:function(){return this._shouldRegenerateShaders}},position:{get:function(){return this._position},set:function(e){m.equalsEpsilon(e,this._position,0,this.maximumPositionEpsilon)||(this._position=m.clone(e,this._position),this._shouldReset=!0)}},radianceCubeMap:{get:function(){return this._radianceCubeMap}},maximumMipmapLevel:{get:function(){return this._mipmapLevels}},sphericalHarmonicCoefficients:{get:function(){return this._sphericalHarmonicCoefficients}}});$n._maximumComputeCommandCount=8;$n._activeComputeCommandCount=0;$n._nextFrameCommandQueue=[];$n._queueCommand=(e,t)=>{if($n._activeComputeCommandCount>=$n._maximumComputeCommandCount){$n._nextFrameCommandQueue.push(e);return}t.commandList.push(e),$n._activeComputeCommandCount++};$n._updateCommandQueue=e=>{if($n._maximumComputeCommandCount=Math.log2(Nt.maximumCubeMapSize),$n._nextFrameCommandQueue.length>0&&$n._activeComputeCommandCount<$n._maximumComputeCommandCount){let t=$n._nextFrameCommandQueue.shift();for(;l(t)&&$n._activeComputeCommandCount<$n._maximumComputeCommandCount;){if(t.owner.isDestroyed()||t.canceled){t=$n._nextFrameCommandQueue.shift();continue}e.commandList.push(t),$n._activeComputeCommandCount++,t=$n._nextFrameCommandQueue.shift()}l(t)&&$n._nextFrameCommandQueue.push(t)}};$n.setOwner=function(e,t,n){e!==t[n]&&(t[n]=t[n]&&t[n].destroy(),l(e)&&(e._owner=t,t[n]=e))};$n.prototype.reset=function(){let e=this._radianceMapComputeCommands.length;for(let t=0;t<e;++t)l(this._radianceMapComputeCommands[t])&&(this._radianceMapComputeCommands[t].canceled=!0),this._radianceMapComputeCommands[t]=void 0;e=this._convolutionComputeCommands.length;for(let t=0;t<e;++t)l(this._convolutionComputeCommands[t])&&(this._convolutionComputeCommands[t].canceled=!0),this._convolutionComputeCommands[t]=void 0;l(this._irradianceComputeCommand)&&(this._irradianceComputeCommand.canceled=!0,this._irradianceComputeCommand=void 0),this._radianceMapDirty=!0,this._radianceCommandsDirty=!0,this._convolutionsCommandsDirty=!1,this._irradianceCommandDirty=!1};var dke=new m,uke=new m;function mke(e,t){let n=e._position,i=t.atmosphere,o=t.mapProjection.ellipsoid,r=o.scaleToGeodeticSurface(n,uke),s=1.025,a=dke,c=l(r)?m.magnitude(r):o.maximumRadius;return a.x=c*s,a.y=c,a.z=i.dynamicLighting,!m.equalsEpsilon(e._radiiAndDynamicAtmosphereColor,a)||t.environmentMap!==e._sceneEnvironmentMap||t.backgroundColor!==e._backgroundColor?(m.clone(a,e._radiiAndDynamicAtmosphereColor),e._sceneEnvironmentMap=t.environmentMap,e._backgroundColor=t.backgroundColor,!0):!1}var sse=new m,hke=new F,fke=new se,pke=new D;function bke(e,t){let n=t.context,i=e._textureDimensions;if(l(e._radianceCubeMap)||(e._radianceCubeMap=new xr({context:n,width:i.x,height:i.y,pixelDatatype:je.UNSIGNED_BYTE,pixelFormat:it.RGBA})),e._radianceCommandsDirty){let o=e._radianceMapFS;l(o)||(o=new De({sources:[$m,pX]}),e._radianceMapFS=o),S_.requiresColorCorrect(t.atmosphere)&&o.defines.push("ATMOSPHERE_COLOR_CORRECT");let r=e._position,s=e._radiiAndDynamicAtmosphereColor,a=t.mapProjection.ellipsoid,c=Pt.eastNorthUpToFixedFrame(r,a,hke),d=fke;d.x=e.brightness,d.y=e.saturation,d.z=e.gamma,d.w=e.atmosphereScatteringIntensity,(e.brightness!==1||e.saturation!==1||e.gamma!==1)&&o.defines.push("ENVIRONMENT_COLOR_CORRECT");let u=0;for(let h of xr.faceNames()){let p=e._radianceMapTextures[u];l(p)&&!p.isDestroyed()&&p.destroy(),p=new vt({context:n,width:i.x,height:i.y,pixelDatatype:je.UNSIGNED_BYTE,pixelFormat:it.RGBA}),e._radianceMapTextures[u]=p;let g=u,f=new Fc({fragmentShaderSource:o,outputTexture:p,uniformMap:{u_radiiAndDynamicAtmosphereColor:()=>s,u_enuToFixedFrame:()=>c,u_faceDirection:()=>xr.getDirection(h,sse),u_positionWC:()=>r,u_brightnessSaturationGammaIntensity:()=>d,u_groundColor:()=>e.groundColor.withAlpha(e.groundAlbedo,pke)},owner:e});f.postExecute=()=>{if(e.isDestroyed()||f.canceled){$n._activeComputeCommandCount--;return}let y=e._radianceMapComputeCommands;y[g]=void 0;let x=new Wr({context:n,colorTextures:[e._radianceMapTextures[g]]});x._bind(),e._radianceCubeMap[h].copyFromFramebuffer(),x._unBind(),x.destroy(),$n._activeComputeCommandCount--,y.some(l)||(e._convolutionsCommandsDirty=!0,e._shouldRegenerateShaders=!0)},e._radianceMapComputeCommands[u]=f,$n._queueCommand(f,t),u++}e._radianceCommandsDirty=!1}}function gke(e,t){let n=e._radianceCubeMap;n.generateMipmap();let i=e._mipmapLevels,o=e._textureDimensions,r=o.x/2,s=o.y/2,a=t.context,c=0,d=(h,p,g,f,y)=>()=>{if(e.isDestroyed()||h.canceled){$n._activeComputeCommandCount--;return}let x=e._convolutionComputeCommands;x[p]=void 0,n.copyFace(t,g,f,y),c++,$n._activeComputeCommandCount--,g.destroy(),e._specularMapTextures[p]=void 0;let S=e._specularMapTextures.length;c>=S&&(e._irradianceCommandDirty=!0,n.sampler=new qt({minificationFilter:jt.LINEAR_MIPMAP_LINEAR}),e._shouldRegenerateShaders=!0,e._va.destroy(),e._va=void 0,e._convolveSP.destroy(),e._convolveSP=void 0)},u=0;for(let h=1;h<i;++h){for(let p of xr.faceNames()){l(e._specularMapTextures[u])&&e._specularMapTextures[u].destroy();let g=e._specularMapTextures[u]=new vt({context:a,width:r,height:s,pixelDatatype:je.UNSIGNED_BYTE,pixelFormat:it.RGBA}),f=e._va;l(f)||(f=xr.createVertexArray(a,p),e._va=f);let y=e._convolveSP;l(y)||(y=$t.fromCache({context:a,vertexShaderSource:gX,fragmentShaderSource:bX,attributeLocations:{positions:0}}),e._convolveSP=y);let x=new Fc({shaderProgram:y,vertexArray:f,outputTexture:g,persists:!0,owner:e,uniformMap:{u_roughness:()=>h/(i-1),u_radianceTexture:()=>n??a.defaultTexture,u_faceDirection:()=>xr.getDirection(p,sse)}});x.postExecute=d(x,u,g,p,h),e._convolutionComputeCommands[u]=x,$n._queueCommand(x,t),++u}r/=2,s/=2}}var ase=new U(3,3);function yke(e,t){let n=t.context,i=ase,o=e._irradianceMapTexture;l(o)&&!o.isDestroyed()&&o.destroy(),o=new vt({context:n,width:i.x,height:i.y,pixelDatatype:je.FLOAT,pixelFormat:it.RGBA}),e._irradianceMapTexture=o;let r=e._irradianceMapFS;l(r)||(r=new De({sources:[fX]}),e._irradianceMapFS=r);let s=new Fc({fragmentShaderSource:r,outputTexture:o,owner:e,uniformMap:{u_radianceMap:()=>e._radianceCubeMap??n.defaultTexture}});s.postExecute=()=>{if(e.isDestroyed()||s.canceled){$n._activeComputeCommandCount--;return}e._irradianceTextureDirty=!1,e._irradianceComputeCommand=void 0,e._sphericalHarmonicCoefficientsDirty=!0,e._irradianceMapFS=void 0,$n._activeComputeCommandCount--},e._irradianceComputeCommand=s,$n._queueCommand(s,t),e._irradianceTextureDirty=!0}function xke(e,t){let n=t.context;if(!l(e._irradianceMapTexture))return;let i=new Wr({context:n,colorTextures:[e._irradianceMapTexture],destroyAttachments:!1}),o=ase,r=n.readPixels({x:0,y:0,width:o.x,height:o.y,framebuffer:i});for(let s=0;s<9;++s)e._sphericalHarmonicCoefficients[s]=m.unpack(r,s*4),m.multiplyByScalar(e._sphericalHarmonicCoefficients[s],e.atmosphereScatteringIntensity,e._sphericalHarmonicCoefficients[s]);i.destroy(),e._irradianceMapTexture.destroy(),e._irradianceMapTexture=void 0,e._shouldRegenerateShaders=!0}$n.prototype.update=function(e){let t=e.mode;if(!$n.isDynamicUpdateSupported(e)||!this.enabled||!this.shouldUpdate||!l(this._position)||t===oe.MORPHING){this._shouldRegenerateShaders=!1;return}$n._updateCommandQueue(e);let i=e.atmosphere.dynamicLighting,o=mke(this,e)||i===rb.SUNLIGHT&&!q.equalsEpsilon(e.time,this._lastTime,this.maximumSecondsDifference);if(this._shouldReset||o){this.reset(),this._shouldReset=!1,this._lastTime=q.clone(e.time,this._lastTime);return}if(this._radianceMapDirty&&(bke(this,e),this._radianceMapDirty=!1),this._convolutionsCommandsDirty&&(gke(this,e),this._convolutionsCommandsDirty=!1),this._irradianceCommandDirty&&(yke(this,e),this._irradianceCommandDirty=!1),this._irradianceTextureDirty){this._shouldRegenerateShaders=!1;return}if(this._sphericalHarmonicCoefficientsDirty){xke(this,e),this._sphericalHarmonicCoefficientsDirty=!1;return}this._shouldRegenerateShaders=!1};$n.prototype.isDestroyed=function(){return!1};$n.prototype.destroy=function(){let e=this._radianceMapComputeCommands.length;for(let t=0;t<e;++t)this._radianceMapComputeCommands[t]=void 0;e=this._convolutionComputeCommands.length;for(let t=0;t<e;++t)this._convolutionComputeCommands[t]=void 0;this._irradianceMapComputeCommand=void 0,e=this._radianceMapTextures.length;for(let t=0;t<e;++t)this._radianceMapTextures[t]=this._radianceMapTextures[t]&&!this._radianceMapTextures[t].isDestroyed()&&this._radianceMapTextures[t].destroy();e=this._specularMapTextures.length;for(let t=0;t<e;++t)this._specularMapTextures[t]=this._specularMapTextures[t]&&!this._specularMapTextures[t].isDestroyed()&&this._specularMapTextures[t].destroy();return this._radianceCubeMap=this._radianceCubeMap&&this._radianceCubeMap.destroy(),this._irradianceMapTexture=this._irradianceMapTexture&&!this._irradianceMapTexture.isDestroyed()&&this._irradianceMapTexture.destroy(),l(this._va)&&this._va.destroy(),l(this._convolveSP)&&this._convolveSP.destroy(),me(this)};$n.isDynamicUpdateSupported=function(e){let t=e.context;return t.halfFloatingPointTexture||t.colorBufferFloat};$n.AVERAGE_EARTH_GROUND_COLOR=Object.freeze(D.fromCssColorString("#717145"));$n.DEFAULT_SPHERICAL_HARMONIC_COEFFICIENTS=Object.freeze([Object.freeze(new m(.35449,.35449,.35449)),m.ZERO,m.ZERO,m.ZERO,m.ZERO,m.ZERO,m.ZERO,m.ZERO,m.ZERO]);var sb=$n;var egn=_(T(),1);var yX={HIGHLIGHT:0,REPLACE:1,MIX:2};yX.getColorBlend=function(e,t){if(e===yX.HIGHLIGHT)return 0;if(e===yX.REPLACE)return 1;if(e===yX.MIX)return X.clamp(t,X.EPSILON4,1)};var pc=Object.freeze(yX);var c_n=_(T(),1);var ngn=_(T(),1),_ke={XTRANSLATE:"xTranslate",YTRANSLATE:"yTranslate",ZTRANSLATE:"zTranslate",XROTATE:"xRotate",YROTATE:"yRotate",ZROTATE:"zRotate",XSCALE:"xScale",YSCALE:"yScale",ZSCALE:"zScale",UNIFORMSCALE:"uniformScale"},bc=Object.freeze(_ke);var ogn=_(T(),1),Tke={STEP:0,LINEAR:1,CUBICSPLINE:2},eh=Object.freeze(Tke);var hyn=_(T(),1);var Jgn=_(T(),1);var fgn=_(T(),1);var lgn=_(T(),1);var cse={};function xX(e){this._count=e.count,this._properties=Ye(e.properties,!0)}xX.prototype.hasProperty=function(e){return Nn.hasProperty(e,this._properties,cse)};xX.prototype.getPropertyIds=function(e){return Nn.getPropertyIds(this._properties,cse,e)};xX.prototype.getProperty=function(e,t){let n=this._properties[t];if(l(n))return Ye(n[e],!0)};xX.prototype.setProperty=function(e,t,n){let i=this._properties[t];l(i)||(i=new Array(this._count),this._properties[t]=i),i[e]=Ye(n,!0)};var ab=xX;function gc(e){e=e??Y.EMPTY_OBJECT,this._name=e.name,this._id=e.id,this._count=e.count,this._extras=e.extras,this._extensions=e.extensions,this._metadataTable=e.metadataTable,this._jsonMetadataTable=e.jsonMetadataTable,this._batchTableHierarchy=e.batchTableHierarchy}Object.defineProperties(gc.prototype,{name:{get:function(){return this._name}},id:{get:function(){return this._id}},count:{get:function(){return this._count}},class:{get:function(){if(l(this._metadataTable))return this._metadataTable.class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}},byteLength:{get:function(){let e=0;return l(this._metadataTable)&&(e+=this._metadataTable.byteLength),l(this._batchTableHierarchy)&&(e+=this._batchTableHierarchy.byteLength),e}}});gc.prototype.hasProperty=function(e,t){return!!(l(this._metadataTable)&&this._metadataTable.hasProperty(t)||l(this._batchTableHierarchy)&&this._batchTableHierarchy.hasProperty(e,t)||l(this._jsonMetadataTable)&&this._jsonMetadataTable.hasProperty(t))};gc.prototype.hasPropertyBySemantic=function(e,t){return l(this._metadataTable)?this._metadataTable.hasPropertyBySemantic(t):!1};gc.prototype.propertyExists=function(e){return!!(l(this._metadataTable)&&this._metadataTable.hasProperty(e)||l(this._batchTableHierarchy)&&this._batchTableHierarchy.propertyExists(e)||l(this._jsonMetadataTable)&&this._jsonMetadataTable.hasProperty(e))};gc.prototype.propertyExistsBySemantic=function(e){return l(this._metadataTable)?this._metadataTable.hasPropertyBySemantic(e):!1};var qz=[];gc.prototype.getPropertyIds=function(e,t){return t=l(t)?t:[],t.length=0,l(this._metadataTable)&&t.push.apply(t,this._metadataTable.getPropertyIds(qz)),l(this._batchTableHierarchy)&&t.push.apply(t,this._batchTableHierarchy.getPropertyIds(e,qz)),l(this._jsonMetadataTable)&&t.push.apply(t,this._jsonMetadataTable.getPropertyIds(qz)),t};gc.prototype.getProperty=function(e,t){let n;if(l(this._metadataTable)&&(n=this._metadataTable.getProperty(e,t),l(n))||l(this._batchTableHierarchy)&&(n=this._batchTableHierarchy.getProperty(e,t),l(n))||l(this._jsonMetadataTable)&&(n=this._jsonMetadataTable.getProperty(e,t),l(n)))return n};gc.prototype.setProperty=function(e,t,n){l(this._metadataTable)&&this._metadataTable.setProperty(e,t,n)||l(this._batchTableHierarchy)&&this._batchTableHierarchy.setProperty(e,t,n)||(l(this._jsonMetadataTable)||(this._jsonMetadataTable=new ab({count:this._count,properties:{}})),this._jsonMetadataTable.setProperty(e,t,n))};gc.prototype.getPropertyBySemantic=function(e,t){if(l(this._metadataTable))return this._metadataTable.getPropertyBySemantic(e,t)};gc.prototype.setPropertyBySemantic=function(e,t,n){return l(this._metadataTable)?this._metadataTable.setPropertyBySemantic(e,t,n):!1};gc.prototype.getPropertyTypedArray=function(e){if(l(this._metadataTable))return this._metadataTable.getPropertyTypedArray(e)};gc.prototype.getPropertyTypedArrayBySemantic=function(e){if(l(this._metadataTable))return this._metadataTable.getPropertyTypedArrayBySemantic(e)};gc.prototype.isClass=function(e,t){let n=this._batchTableHierarchy;return l(n)?n.isClass(e,t):!1};gc.prototype.isExactClass=function(e,t){return this.getExactClassName(e)===t};gc.prototype.getExactClassName=function(e){let t=this._batchTableHierarchy;if(l(t))return t.getClassName(e)};var tl=gc;var Zgn=_(T(),1);var Sgn=_(T(),1);function _X(e){e=e??Y.EMPTY_OBJECT;let t=e.property,n=e.classProperty,i=e.textures,o=l(t.channels)?t.channels:[0],r=t,s=Al.createModelTextureReader({textureInfo:r,channels:Vke(o),texture:i[r.index]});this._min=t.min,this._max=t.max;let a=t.offset,c=t.scale,d=n.hasValueTransform||l(a)||l(c);a=a??n.offset,c=c??n.scale,a=n.unpackVectorAndMatrixTypes(a),c=n.unpackVectorAndMatrixTypes(c),this._offset=a,this._scale=c,this._hasValueTransform=d,this._textureReader=s,this._classProperty=n,this._extras=t.extras,this._extensions=t.extensions}Object.defineProperties(_X.prototype,{textureReader:{get:function(){return this._textureReader}},hasValueTransform:{get:function(){return this._hasValueTransform}},offset:{get:function(){return this._offset}},scale:{get:function(){return this._scale}},classProperty:{get:function(){return this._classProperty}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});_X.prototype.isGpuCompatible=function(){let e=this._classProperty,t=e.type,n=e.componentType;return e.isArray?e.isVariableLengthArray?(_t(`Property texture property ${e.id} is a variable-length array, which is not supported`),!1):e.arrayLength>4?(_t(`Property texture property ${e.id} is an array of length ${e.arrayLength}, but may have at most a length of 4`),!1):t!==ct.SCALAR?(_t(`Property texture property ${e.id} is an array of type ${t}, but only SCALAR is supported`),!1):n!==Ft.UINT8?(_t(`Property texture property ${e.id} is an array with component type ${n}, but only UINT8 is supported`),!1):!0:ct.isVectorType(t)||t===ct.SCALAR?n!==Ft.UINT8?(_t(`Property texture property ${e.id} has component type ${n}, but only UINT8 is supported`),!1):!0:(_t(`Property texture property ${e.id} has an unsupported type`),!1)};var Ske=[void 0,"float","vec2","vec3","vec4"],Cke=[void 0,"int","ivec2","ivec3","ivec4"];_X.prototype.getGlslType=function(){let e=this._classProperty,t=ct.getComponentCount(e.type);return e.isArray&&(t=e.arrayLength),e.normalized?Ske[t]:Cke[t]};_X.prototype.unpackInShader=function(e){return this._classProperty.normalized?e:`${this.getGlslType()}(255.0 * ${e})`};function Vke(e){return e.map(function(t){return"rgba".charAt(t)}).join("")}var TX=_X;function $z(e){e=e??Y.EMPTY_OBJECT;let t=e.propertyTexture,n=e.class,i=e.textures,o=t.extensions,r=t.extras,s={};if(l(t.properties))for(let a in t.properties)t.properties.hasOwnProperty(a)&&(s[a]=new TX({property:t.properties[a],classProperty:n.properties[a],textures:i}));this._name=e.name,this._id=e.id,this._class=n,this._properties=s,this._extras=r,this._extensions=o}Object.defineProperties($z.prototype,{name:{get:function(){return this._name}},id:{get:function(){return this._id}},class:{get:function(){return this._class}},properties:{get:function(){return this._properties}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});$z.prototype.getProperty=function(e){return this._properties[e]};var cb=$z;var Fgn=_(T(),1);var Xgn=_(T(),1);function lse(e){e=e??Y.EMPTY_OBJECT;let t=e.property,n=e.classProperty;this._attribute=t.attribute,this._classProperty=n,this._min=t.min,this._max=t.max;let i=t.offset,o=t.scale,r=n.hasValueTransform||l(i)||l(o);i=i??n.offset,o=o??n.scale,i=n.unpackVectorAndMatrixTypes(i),o=n.unpackVectorAndMatrixTypes(o),this._offset=i,this._scale=o,this._hasValueTransform=r,this._extras=t.extras,this._extensions=t.extensions}Object.defineProperties(lse.prototype,{attribute:{get:function(){return this._attribute}},hasValueTransform:{get:function(){return this._hasValueTransform}},offset:{get:function(){return this._offset}},scale:{get:function(){return this._scale}},classProperty:{get:function(){return this._classProperty}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});var SX=lse;function eH(e){e=e??Y.EMPTY_OBJECT;let t=e.propertyAttribute,n=e.class,i={};if(l(t.properties))for(let o in t.properties)t.properties.hasOwnProperty(o)&&(i[o]=new SX({property:t.properties[o],classProperty:n.properties[o]}));this._name=e.name,this._id=e.id,this._class=n,this._properties=i,this._extras=t.extras,this._extensions=t.extensions}Object.defineProperties(eH.prototype,{name:{get:function(){return this._name}},id:{get:function(){return this._id}},class:{get:function(){return this._class}},properties:{get:function(){return this._properties}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});eH.prototype.getProperty=function(e){return this._properties[e]};var C_=eH;var kgn=_(T(),1);function CX(e){e=e??Y.EMPTY_OBJECT,this._schema=e.schema;let t=e.propertyTables;this._propertyTableCount=l(t)?t.length:0,this._propertyTables=t,this._propertyTextures=e.propertyTextures,this._propertyAttributes=e.propertyAttributes,this._statistics=e.statistics,this._extras=e.extras,this._extensions=e.extensions}Object.defineProperties(CX.prototype,{schema:{get:function(){return this._schema}},statistics:{get:function(){return this._statistics}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}},propertyTableCount:{get:function(){return this._propertyTableCount}},propertyTables:{get:function(){return this._propertyTables}},propertyTextures:{get:function(){return this._propertyTextures}},propertyAttributes:{get:function(){return this._propertyAttributes}},propertyTablesByteLength:{get:function(){if(!l(this._propertyTables))return 0;let e=0,t=this._propertyTables.length;for(let n=0;n<t;n++)e+=this._propertyTables[n].byteLength;return e}}});CX.prototype.getPropertyTable=function(e){return this._propertyTables[e]};CX.prototype.getPropertyTexture=function(e){return this._propertyTextures[e]};CX.prototype.getPropertyAttribute=function(e){return this._propertyAttributes[e]};var Ys=CX;function Lke(e){e=e??Y.EMPTY_OBJECT;let t=e.extension,n=e.schema,i=[];if(l(t.propertyTables))for(let s=0;s<t.propertyTables.length;s++){let a=t.propertyTables[s],c=n.classes[a.class],d=new Pu({count:a.count,properties:a.properties,class:c,bufferViews:e.bufferViews});i.push(new tl({id:s,name:a.name,count:a.count,metadataTable:d,extras:a.extras,extensions:a.extensions}))}let o=[];if(l(t.propertyTextures))for(let s=0;s<t.propertyTextures.length;s++){let a=t.propertyTextures[s];o.push(new cb({id:s,name:a.name,propertyTexture:a,class:n.classes[a.class],textures:e.textures}))}let r=[];if(l(t.propertyAttributes))for(let s=0;s<t.propertyAttributes.length;s++){let a=t.propertyAttributes[s];r.push(new C_({id:s,name:a.name,class:n.classes[a.class],propertyAttribute:a}))}return new Ys({schema:n,propertyTables:i,propertyTextures:o,propertyAttributes:r,statistics:t.statistics,extras:t.extras,extensions:t.extensions})}var VX=Lke;var oyn=_(T(),1);function Rke(e){e=e??Y.EMPTY_OBJECT;let t=e.extension,n=e.schema,i,o=[],r;if(l(t.featureTables))for(r=Object.keys(t.featureTables).sort(),i=0;i<r.length;i++){let a=r[i],c=t.featureTables[a],d=n.classes[c.class],u=new Pu({count:c.count,properties:c.properties,class:d,bufferViews:e.bufferViews});o.push(new tl({id:a,count:c.count,metadataTable:u,extras:c.extras,extensions:c.extensions}))}let s=[];if(l(t.featureTextures))for(r=Object.keys(t.featureTextures).sort(),i=0;i<r.length;i++){let a=r[i],c=t.featureTextures[a];s.push(new cb({id:a,propertyTexture:Zke(c),class:n.classes[c.class],textures:e.textures}))}return new Ys({schema:n,propertyTables:o,propertyTextures:s,statistics:t.statistics,extras:t.extras,extensions:t.extensions})}function Zke(e){let t={class:e.class,properties:{}},n=e.properties;for(let i in n)if(n.hasOwnProperty(i)){let o=n[i],r={channels:Gke(o.channels),extras:o.extras,extensions:o.extensions};t.properties[i]=St(o.texture,r,!0)}return t}function Gke(e){let t=e.length,n=new Array(t);for(let i=0;i<t;i++)n[i]="rgba".indexOf(e[i]);return n}var LX=Rke;function _g(e){e=e??Y.EMPTY_OBJECT;let{gltf:t,extension:n,extensionLegacy:i,gltfResource:o,baseResource:r,supportedImageFormats:s,frameState:a,cacheKey:c,asynchronous:d=!0}=e;this._gltfResource=o,this._baseResource=r,this._gltf=t,this._extension=n,this._extensionLegacy=i,this._supportedImageFormats=s,this._frameState=a,this._cacheKey=c,this._asynchronous=d,this._bufferViewLoaders=[],this._bufferViewIds=[],this._textureLoaders=[],this._textureIds=[],this._schemaLoader=void 0,this._structuralMetadata=void 0,this._state=yt.UNLOADED,this._promise=void 0}l(Object.create)&&(_g.prototype=Object.create(Ki.prototype),_g.prototype.constructor=_g);Object.defineProperties(_g.prototype,{cacheKey:{get:function(){return this._cacheKey}},structuralMetadata:{get:function(){return this._structuralMetadata}}});async function Eke(e){try{let t=vke(e),n=Nke(e),i=kke(e);return await Promise.all([t,n,i]),e.isDestroyed()?void 0:(e._gltf=void 0,e._state=yt.LOADED,e)}catch(t){if(e.isDestroyed())return;throw e.unload(),e._state=yt.FAILED,e.getError("Failed to load structural metadata",t)}}_g.prototype.load=function(){return l(this._promise)?this._promise:(this._state=yt.LOADING,this._promise=Eke(this),this._promise)};function Ike(e,t){for(let n in e)if(e.hasOwnProperty(n)){let i=e[n],o=i.values,r=i.arrayOffsets,s=i.stringOffsets;l(o)&&(t[o]=!0),l(r)&&(t[r]=!0),l(s)&&(t[s]=!0)}}function Xke(e,t){for(let n in e)if(e.hasOwnProperty(n)){let i=e[n],o=i.bufferView,r=i.arrayOffsetBufferView,s=i.stringOffsetBufferView;l(o)&&(t[o]=!0),l(r)&&(t[r]=!0),l(s)&&(t[s]=!0)}}function Wke(e){let t=e.propertyTables,n={};if(l(t))for(let i=0;i<t.length;i++){let o=t[i];Ike(o.properties,n)}return n}function Pke(e){let t=e.featureTables,n={};if(l(t)){for(let i in t)if(t.hasOwnProperty(i)){let r=t[i].properties;l(r)&&Xke(r,n)}}return n}async function vke(e){let t;l(e._extension)?t=Wke(e._extension):t=Pke(e._extensionLegacy);let n=[];for(let i in t)if(t.hasOwnProperty(i)){let o=Ri.getBufferViewLoader({gltf:e._gltf,bufferViewId:parseInt(i),gltfResource:e._gltfResource,baseResource:e._baseResource});e._bufferViewLoaders.push(o),e._bufferViewIds.push(i),n.push(o.load())}return Promise.all(n)}function wke(e){let t={},n=e.propertyTextures;if(l(n))for(let i=0;i<n.length;i++){let r=n[i].properties;l(r)&&Fke(r,t)}return t}function Fke(e,t){for(let n in e)if(e.hasOwnProperty(n)){let i=e[n];t[i.index]=i}}function Ake(e){let t={},n=e.featureTextures;if(l(n)){for(let i in n)if(n.hasOwnProperty(i)){let r=n[i].properties;l(r)&&Mke(r,t)}}return t}function Mke(e,t){for(let n in e)if(e.hasOwnProperty(n)){let o=e[n].texture;t[o.index]=o}}function Nke(e){let t;l(e._extension)?t=wke(e._extension):t=Ake(e._extensionLegacy);let n=e._gltf,i=e._gltfResource,o=e._baseResource,r=e._supportedImageFormats,s=e._frameState,a=e._asynchronous,c=[];for(let d in t)if(t.hasOwnProperty(d)){let u=Ri.getTextureLoader({gltf:n,textureInfo:t[d],gltfResource:i,baseResource:o,supportedImageFormats:r,frameState:s,asynchronous:a});e._textureLoaders.push(u),e._textureIds.push(d),c.push(u.load())}return Promise.all(c)}async function kke(e){let t=e._extension??e._extensionLegacy,n;if(l(t.schemaUri)){let i=e._baseResource.getDerivedResource({url:t.schemaUri});n=Ri.getSchemaLoader({resource:i})}else n=Ri.getSchemaLoader({schema:t.schema});if(e._schemaLoader=n,await n.load(),!n.isDestroyed())return n.schema}_g.prototype.process=function(e){if(this._state===yt.READY)return!0;if(this._state!==yt.LOADED)return!1;let t=this._textureLoaders,n=t.length,i=!0;for(let a=0;a<n;++a){let d=t[a].process(e);i=i&&d}if(!i)return!1;let o=this._schemaLoader.schema,r={};for(let a=0;a<this._bufferViewIds.length;++a){let c=this._bufferViewIds[a],d=this._bufferViewLoaders[a];if(!d.isDestroyed()){let u=new Uint8Array(d.typedArray);r[c]=u}}let s={};for(let a=0;a<this._textureIds.length;++a){let c=this._textureIds[a],d=t[a];d.isDestroyed()||(s[c]=d.texture)}return l(this._extension)?this._structuralMetadata=VX({extension:this._extension,schema:o,bufferViews:r,textures:s}):this._structuralMetadata=LX({extension:this._extensionLegacy,schema:o,bufferViews:r,textures:s}),dse(this),this._state=yt.READY,!0};function dse(e){let t=e._bufferViewLoaders,n=t.length;for(let i=0;i<n;++i)Ri.unload(t[i]);e._bufferViewLoaders.length=0,e._bufferViewIds.length=0}function Uke(e){let t=e._textureLoaders,n=t.length;for(let i=0;i<n;++i)Ri.unload(t[i]);e._textureLoaders.length=0,e._textureIds.length=0}_g.prototype.unload=function(){dse(this),Uke(this),l(this._schemaLoader)&&Ri.unload(this._schemaLoader),this._schemaLoader=void 0,this._structuralMetadata=void 0};var RX=_g;var pyn=_(T(),1);var BC={TRANSLATION:"TRANSLATION",ROTATION:"ROTATION",SCALE:"SCALE",FEATURE_ID:"_FEATURE_ID"};BC.fromGltfSemantic=function(e){let t=e,i=/^(\w+)_\d+$/.exec(e);switch(i!==null&&(t=i[1]),t){case"TRANSLATION":return BC.TRANSLATION;case"ROTATION":return BC.ROTATION;case"SCALE":return BC.SCALE;case"_FEATURE_ID":return BC.FEATURE_ID}};var ts=Object.freeze(BC);var Fyn=_(T(),1);var Ryn=_(T(),1);var Dke=65534,Bke=255;function D5(e){e=e??Y.EMPTY_OBJECT;let t=e.triangleIndices,n=e.outlineIndices,i=e.originalVertexCount;this._triangleIndices=t,this._originalVertexCount=i,this._edges=new hse(n,i),this._outlineCoordinatesTypedArray=void 0,this._extraVertices=[],Oke(this)}Object.defineProperties(D5.prototype,{updatedTriangleIndices:{get:function(){return this._triangleIndices}},outlineCoordinates:{get:function(){return this._outlineCoordinatesTypedArray}}});function Oke(e){let t=e._triangleIndices,n=e._edges,i=[],o=e._extraVertices,r=e._originalVertexCount,s={};for(let a=0;a<t.length;a+=3){let c=t[a],d=t[a+1],u=t[a+2],h=!1,p=h||n.hasEdge(c,d),g=h||n.hasEdge(d,u),f=h||n.hasEdge(u,c),y=use(i,c,d,u,p,g,f);for(;l(y);){let x=s[y];if(!l(x)){x=r+o.length;let S=y;for(;S>=r;)S=o[S-r];o.push(S),s[y]=x}x>Dke&&(t instanceof Uint16Array||t instanceof Uint8Array)?t=new Uint32Array(t):x>Bke&&t instanceof Uint8Array&&(t=new Uint16Array(t)),y===c?(c=x,t[a]=x):y===d?(d=x,t[a+1]=x):(u=x,t[a+2]=x),y=use(i,c,d,u,p,g,f)}}e._triangleIndices=t,e._outlineCoordinatesTypedArray=new Float32Array(i)}function use(e,t,n,i,o,r,s){let a=s?1:0,c=o?1:0,d=0,u=tH(e,t,a,c,d);if(u===0)return t;let h=0,p=o?1:0,g=r?1:0,f=tH(e,n,h,p,g);if(f===0)return n;let y=s?1:0,x=0,S=r?1:0,C=tH(e,i,y,x,S);if(C===0)return i;let V=u&f&C,L,Z,E;if(V&1)L=0,Z=1,E=2;else if(V&2)L=0,E=1,Z=2;else if(V&4)Z=0,L=1,E=2;else if(V&8)Z=0,E=1,L=2;else if(V&16)E=0,L=1,Z=2;else if(V&32)E=0,Z=1,L=2;else{let A=nH(u),b=nH(f),R=nH(C);return A<b&&A<R?t:b<R?n:i}let P=t*3;e[P+L]=a,e[P+Z]=c,e[P+E]=d;let W=n*3;e[W+L]=h,e[W+Z]=p,e[W+E]=g;let v=i*3;e[v+L]=y,e[v+Z]=x,e[v+E]=S}function tH(e,t,n,i,o){let r=t*3,s=e[r],a=e[r+1],c=e[r+2];return l(s)?(s===n&&a===i&&c===o)<<0|(s===n&&a===o&&c===i)<<1|(s===i&&a===n&&c===o)<<2|(s===i&&a===o&&c===n)<<3|(s===o&&a===n&&c===i)<<4|(s===o&&a===i&&c===n)<<5:63}function nH(e){return(e&1)+(e>>1&1)+(e>>2&1)+(e>>3&1)+(e>>4&1)+(e>>5&1)}D5.prototype.updateAttribute=function(e){let t=this._extraVertices,n=e.length,i=n/this._originalVertexCount,o=t.length,r=e.constructor,s=new r(e.length+o*i);s.set(e);for(let a=0;a<o;a++){let c=t[a]*i,d=n+a*i;for(let u=0;u<i;u++)s[d+u]=s[c+u]}return s};D5.createTexture=function(e){let t=e.cache.modelOutliningCache;if(l(t)||(t=e.cache.modelOutliningCache={}),l(t.outlineTexture))return t.outlineTexture;let n=Math.min(4096,Nt.maximumTextureSize),i=n,o=mse(i),r=[];for(;i>1;)i>>=1,r.push(mse(i));let s=new vt({context:e,source:{arrayBufferView:o,mipLevels:r},width:n,height:1,pixelFormat:it.LUMINANCE,sampler:new qt({wrapS:Vn.CLAMP_TO_EDGE,wrapT:Vn.CLAMP_TO_EDGE,minificationFilter:jt.LINEAR_MIPMAP_LINEAR,magnificationFilter:hi.LINEAR})});return t.outlineTexture=s,s};function mse(e){let t=new Uint8Array(e);return t[e-1]=192,e===8?t[e-1]=96:e===4?t[e-1]=48:e===2?t[e-1]=24:e===1&&(t[e-1]=12),t}function hse(e,t){this._originalVertexCount=t,this._edges=new Set;for(let n=0;n<e.length;n+=2){let i=e[n],o=e[n+1],r=Math.min(i,o),s=Math.max(i,o),a=r*this._originalVertexCount+s;this._edges.add(a)}}hse.prototype.hasEdge=function(e,t){let n=Math.min(e,t),i=Math.max(e,t),o=n*this._originalVertexCount+i;return this._edges.has(o)};var V_=D5;function fse(e){this.attribute=e,this.loadBuffer=!1,this.loadTypedArray=!1}function Yke(e){this.indices=e,this.loadBuffer=!1,this.loadTypedArray=!1}function B5(e){this.primitive=e,this.attributePlans=[],this.indicesPlan=void 0,this.needsOutlines=!1,this.outlineIndices=void 0}B5.prototype.postProcess=function(e){this.needsOutlines&&(zke(this),Kke(this,e))};function zke(e){let t=e.primitive,n=t.indices,i=t.attributes[0].count,o=new V_({triangleIndices:n.typedArray,outlineIndices:e.outlineIndices,originalVertexCount:i});n.typedArray=o.updatedTriangleIndices,n.indexDatatype=Ae.fromTypedArray(n.typedArray);let r=Hke(o.outlineCoordinates),s=new fse(r);s.loadBuffer=!0,s.loadTypedArray=!1,e.attributePlans.push(s),t.outlineCoordinates=s.attribute;let a=e.attributePlans,c=e.attributePlans.length;for(let d=0;d<c;d++){let u=a[d].attribute;u.typedArray=o.updateAttribute(u.typedArray)}}function Hke(e){let t=new Tn.Attribute;return t.name="_OUTLINE_COORDINATES",t.typedArray=e,t.componentDatatype=Q.FLOAT,t.type=on.VEC3,t.normalized=!1,t.count=e.length/3,t}function Kke(e,t){Jke(e.attributePlans,t),l(e.indicesPlan)&&Qke(e.indicesPlan,t)}function Jke(e,t){let n=e.length;for(let i=0;i<n;i++){let o=e[i],r=o.attribute,s=r.typedArray;if(o.loadBuffer){let a=xt.createVertexBuffer({typedArray:s,context:t,usage:Me.STATIC_DRAW});a.vertexArrayDestroyable=!1,r.buffer=a}o.loadTypedArray||(r.typedArray=void 0)}}function Qke(e,t){let n=e.indices;if(e.loadBuffer){let i=xt.createIndexBuffer({typedArray:n.typedArray,context:t,usage:Me.STATIC_DRAW,indexDatatype:n.indexDatatype});n.buffer=i,i.vertexArrayDestroyable=!1}e.loadTypedArray||(n.typedArray=void 0)}B5.AttributeLoadPlan=fse;B5.IndicesLoadPlan=Yke;var L_=B5;var Nyn=_(T(),1);function jke(e){e=e??Y.EMPTY_OBJECT,this.webp=e.webp??!1,this.basis=e.basis??!1}var ZX=jke;var cxn=_(T(),1);var Uyn=_(T(),1);function pse(e){this._position=e.position,this._adjustmentParams=e.adjustmentParams}Object.defineProperties(pse.prototype,{position:{get:function(){return this._position}},adjustmentParams:{get:function(){return this._adjustmentParams}}});var GX=pse;var Byn=_(T(),1);function bse(e){this._position=e.position,this._adjustmentParams=e.adjustmentParams,this._covarianceMatrix=e.covarianceMatrix}Object.defineProperties(bse.prototype,{position:{get:function(){return this._position}},adjustmentParams:{get:function(){return this._adjustmentParams}},covarianceMatrix:{get:function(){return this._covarianceMatrix}}});var EX=bse;var Yyn=_(T(),1);function gse(e){this._groupFlags=e.groupFlags,this._rotationThetas=e.rotationThetas,this._params=e.params}Object.defineProperties(gse.prototype,{groupFlags:{get:function(){return this._groupFlags}},rotationThetas:{get:function(){return this._rotationThetas}},params:{get:function(){return this._params}}});var IX=gse;var Jyn=_(T(),1);var Hyn=_(T(),1),qke={Direct:"Direct",Indirect:"Indirect"},Tg=Object.freeze(qke);function yse(e){this._storageType=e.storageType,this._anchorPointsIndirect=e.anchorPointsIndirect,this._anchorPointsDirect=e.anchorPointsDirect,this._intraTileCorrelationGroups=e.intraTileCorrelationGroups,this._covarianceDirect=e.covarianceDirect}Object.defineProperties(yse.prototype,{storageType:{get:function(){return this._storageType}},anchorPointsIndirect:{get:function(){return this._anchorPointsIndirect}},anchorPointsDirect:{get:function(){return this._anchorPointsDirect}},intraTileCorrelationGroups:{get:function(){return this._intraTileCorrelationGroups}},covarianceDirect:{get:function(){return this._covarianceDirect}}});var OC=yse;var jyn=_(T(),1);function xse(e){this._A=e.A,this._alpha=e.alpha,this._beta=e.beta,this._T=e.T}Object.defineProperties(xse.prototype,{A:{get:function(){return this._A}},alpha:{get:function(){return this._alpha}},beta:{get:function(){return this._beta}},T:{get:function(){return this._T}}});var XX=xse;function YC(){}function _se(e){return new $(e[0],e[1],e[3],e[1],e[2],e[4],e[3],e[4],e[5])}function $ke(e){let t=m.fromArray(e.position,0,new m),n=m.fromArray(e.adjustmentParams,0,new m);return new GX({position:t,adjustmentParams:n})}function eUe(e){let t=m.fromArray(e.position,0,new m),n=m.fromArray(e.adjustmentParams,0,new m),i=_se(e.covarianceMatrix);return new EX({position:t,adjustmentParams:n,covarianceMatrix:i})}function tUe(e){let t=e.groupFlags,n=m.fromArray(e.rotationThetas,0,new m),i=[];for(let r of e.params){let s=new XX({A:r.A,alpha:r.alpha,beta:r.beta,T:r.T});i.push(s)}return new IX({groupFlags:t,rotationThetas:n,params:i})}YC.load=function(e){let t=e.storageType;if(t===Tg.Direct)return YC.loadDirect(e);if(t===Tg.Indirect)return YC.loadIndirect(e);throw new ae(`Invalid storage type in NGA_gpm_local - expected 'Direct' or 'Indirect', but found ${t}`)};YC.loadDirect=function(e){let t=[],n=e.anchorPointsDirect;for(let r of n){let s=$ke(r);t.push(s)}let i=_se(e.covarianceDirectUpperTriangle);return new OC({storageType:Tg.Direct,anchorPointsDirect:t,covarianceDirect:i})};YC.loadIndirect=function(e){let t=[],n=e.anchorPointsIndirect;for(let s of n){let a=eUe(s);t.push(a)}let i=e.intraTileCorrelationGroups,o=[];for(let s of i){let a=tUe(s);o.push(a)}return new OC({storageType:Tg.Indirect,anchorPointsIndirect:t,intraTileCorrelationGroups:o})};var WX=YC;var Zxn=_(T(),1);var dxn=_(T(),1);function Tse(e){this._traits=e.traits,this._noData=e.noData,this._offset=e.offset,this._scale=e.scale,this._index=e.index,this._texCoord=e.texCoord}Object.defineProperties(Tse.prototype,{traits:{get:function(){return this._traits}},noData:{get:function(){return this._noData}},offset:{get:function(){return this._offset}},scale:{get:function(){return this._scale}},index:{get:function(){return this._index}},texCoord:{get:function(){return this._texCoord}}});var PX=Tse;var mxn=_(T(),1);function Sse(e){this._min=e.min,this._max=e.max,this._source=e.source}Object.defineProperties(Sse.prototype,{min:{get:function(){return this._min}},max:{get:function(){return this._max}},source:{get:function(){return this._source}}});var vX=Sse;var fxn=_(T(),1);function Cse(e){this._ppeTextures=e}Object.defineProperties(Cse.prototype,{ppeTextures:{get:function(){return this._ppeTextures}}});var wX=Cse;function Vr(e){e=e??Y.EMPTY_OBJECT;let t=e.gltf,n=e.extension,i=e.gltfResource,o=e.baseResource,r=e.supportedImageFormats,s=e.frameState,a=e.cacheKey,c=e.asynchronous??!0;this._gltfResource=i,this._baseResource=o,this._gltf=t,this._extension=n,this._supportedImageFormats=r,this._frameState=s,this._cacheKey=a,this._asynchronous=c,this._textureLoaders=[],this._textureIds=[],this._meshPrimitiveGpmLocal=void 0,this._structuralMetadata=void 0,this._state=yt.UNLOADED,this._promise=void 0}l(Object.create)&&(Vr.prototype=Object.create(Ki.prototype),Vr.prototype.constructor=Vr);Object.defineProperties(Vr.prototype,{cacheKey:{get:function(){return this._cacheKey}},meshPrimitiveGpmLocal:{get:function(){return this._meshPrimitiveGpmLocal}},structuralMetadata:{get:function(){return this._structuralMetadata}}});Vr.prototype._loadResources=async function(){try{return await this._loadTextures(),this.isDestroyed()?void 0:(this._gltf=void 0,this._state=yt.LOADED,this)}catch(e){if(this.isDestroyed())return;throw this.unload(),this._state=yt.FAILED,this.getError("Failed to load GPM data",e)}};Vr.prototype.load=function(){return l(this._promise)?this._promise:(this._state=yt.LOADING,this._promise=this._loadResources(this),this._promise)};function nUe(e){let t={},n=e.ppeTextures;if(l(n))for(let i=0;i<n.length;i++){let o=n[i];t[o.index]=o}return t}Vr.prototype._loadTextures=function(){let e;l(this._extension)&&(e=nUe(this._extension));let t=this._gltf,n=this._gltfResource,i=this._baseResource,o=this._supportedImageFormats,r=this._frameState,s=this._asynchronous,a=[];for(let c in e)if(e.hasOwnProperty(c)){let d=Ri.getTextureLoader({gltf:t,textureInfo:e[c],gltfResource:n,baseResource:i,supportedImageFormats:o,frameState:r,asynchronous:s});this._textureLoaders.push(d),this._textureIds.push(c),a.push(d.load())}return Promise.all(a)};Vr.ppeTexturesMetadataSchemaCache=new Map;Vr._createPpeTextureClassJson=function(e,t){let n=e.traits,i=n.source,o=e.offset??0,r=(e.scale??1)*255;return{name:`PPE texture class ${t}`,properties:{[i]:{name:"PPE",type:"SCALAR",componentType:"UINT8",normalized:!0,offset:o,scale:r,min:n.min,max:n.max}}}};Vr._obtainPpeTexturesMetadataSchema=function(e){let n=Vr._collectPpeTexturePropertyIdentifiers(e).toString(),i=Vr.ppeTexturesMetadataSchemaCache.get(n);if(l(i))return i;let r={id:`PPE_TEXTURE_SCHEMA_${Vr.ppeTexturesMetadataSchemaCache.size}`,classes:{}},s=e.ppeTextures;for(let a=0;a<s.length;a++){let c=s[a],d=`ppeTexture_${a}`,u=Vr._createPpeTextureClassJson(c,a);r.classes[d]=u}return i=Vd.fromJson(r),Vr.ppeTexturesMetadataSchemaCache.set(n,i),i};Vr._collectPpeTexturePropertyIdentifiers=function(e){let t=[],n=e.ppeTextures;for(let i=0;i<n.length;i++){let o=n[i],r=Vr._createPpeTextureClassJson(o,i),s=JSON.stringify(r);t.push(s)}return t};Vr._convertToStructuralMetadata=function(e,t){let n=[],i=Vr._obtainPpeTexturesMetadataSchema(e),o=e.ppeTextures;for(let s=0;s<o.length;s++){let a=o[s],c=`ppeTexture_${s}`,u=a.traits.source,h=i.classes[c],p={class:c,properties:{[u]:{index:a.index,texCoord:a.texCoord}}};n.push(new cb({id:s,name:a.name,propertyTexture:p,class:h,textures:t}))}return new Ys({schema:i,propertyTables:[],propertyTextures:n,propertyAttributes:[]})};Vr.prototype.process=function(e){if(this._state===yt.READY)return!0;if(this._state!==yt.LOADED)return!1;let t=this._textureLoaders,n=t.length,i=!0;for(let d=0;d<n;++d){let h=t[d].process(e);i=i&&h}if(!i)return!1;let o={};for(let d=0;d<this._textureIds.length;++d){let u=this._textureIds[d],h=t[d];h.isDestroyed()||(o[u]=h.texture)}let r=[],s=this._extension;if(l(s.ppeTextures)){let d=s.ppeTextures;for(let u of d){let h=u.traits,p=new vX({min:h.min,max:h.max,source:h.source}),g=new PX({traits:p,noData:u.noData,offset:u.offset,scale:u.scale,index:u.index,texCoord:u.texCoord});r.push(g)}}let a=new wX(r);this._meshPrimitiveGpmLocal=a;let c=Vr._convertToStructuralMetadata(a,o);return this._structuralMetadata=c,this._state=yt.READY,!0};Vr.prototype._unloadTextures=function(){let e=this._textureLoaders,t=e.length;for(let n=0;n<t;++n)Ri.unload(e[n]);this._textureLoaders.length=0,this._textureIds.length=0};Vr.prototype.unload=function(){this._unloadTextures(),this._gltf=void 0,this._extension=void 0,this._structuralMetadata=void 0};var FX=Vr;var{Attribute:iUe,Indices:oUe,FeatureIdAttribute:Vse,FeatureIdTexture:Lse,FeatureIdImplicitRange:Rse,MorphTarget:rUe,Primitive:sUe,Instances:aUe,Skin:cUe,Node:lUe,AnimatedPropertyType:dUe,AnimationSampler:uUe,AnimationTarget:mUe,AnimationChannel:hUe,Animation:fUe,ArticulationStage:pUe,Articulation:bUe,Asset:gUe,Scene:yUe,Components:xUe,MetallicRoughness:_Ue,SpecularGlossiness:TUe,Specular:SUe,Anisotropy:iH,Clearcoat:oH,Material:CUe}=Tn,vo={NOT_LOADED:0,LOADING:1,LOADED:2,PROCESSING:3,POST_PROCESSING:4,PROCESSED:5,READY:6,FAILED:7,UNLOADED:8};function th(e){e=e??Y.EMPTY_OBJECT;let{gltfResource:t,typedArray:n,releaseGltfJson:i=!1,asynchronous:o=!0,incrementallyLoadTextures:r=!0,upAxis:s=Po.Y,forwardAxis:a=Po.Z,loadAttributesAsTypedArray:c=!1,loadAttributesFor2D:d=!1,enablePick:u=!1,loadIndicesForWireframe:h=!1,loadPrimitiveOutline:p=!0,loadForClassification:g=!1,renameBatchIdSemantic:f=!1}=e,{baseResource:y=t.clone()}=e;this._gltfJson=e.gltfJson,this._gltfResource=t,this._baseResource=y,this._typedArray=n,this._releaseGltfJson=i,this._asynchronous=o,this._incrementallyLoadTextures=r,this._upAxis=s,this._forwardAxis=a,this._loadAttributesAsTypedArray=c,this._loadAttributesFor2D=d,this._enablePick=u,this._loadIndicesForWireframe=h,this._loadPrimitiveOutline=p,this._loadForClassification=g,this._renameBatchIdSemantic=f,this._sortedPropertyTableIds=void 0,this._sortedFeatureTextureIds=void 0,this._gltfJsonLoader=void 0,this._state=vo.NOT_LOADED,this._textureState=vo.NOT_LOADED,this._promise=void 0,this._processError=void 0,this._textureErrors=[],this._primitiveLoadPlans=[],this._loaderPromises=[],this._textureLoaders=[],this._texturesPromises=[],this._textureCallbacks=[],this._bufferViewLoaders=[],this._geometryLoaders=[],this._geometryCallbacks=[],this._structuralMetadataLoader=void 0,this._meshPrimitiveGpmLoader=void 0,this._loadResourcesPromise=void 0,this._resourcesLoaded=!1,this._texturesLoaded=!1,this._supportedImageFormats=void 0,this._postProcessBuffers=[],this._components=void 0}l(Object.create)&&(th.prototype=Object.create(Ki.prototype),th.prototype.constructor=th);Object.defineProperties(th.prototype,{cacheKey:{get:function(){}},components:{get:function(){return this._components}},gltfJson:{get:function(){return l(this._gltfJsonLoader)?this._gltfJsonLoader.gltf:this._gltfJson}},incrementallyLoadTextures:{get:function(){return this._incrementallyLoadTextures}},texturesLoaded:{get:function(){return this._texturesLoaded}}});async function VUe(e){e._state=vo.LOADING,e._textureState=vo.LOADING;try{let t=Ri.getGltfJsonLoader({gltfResource:e._gltfResource,baseResource:e._baseResource,typedArray:e._typedArray,gltfJson:e._gltfJson});return e._gltfJsonLoader=t,await t.load(),e.isDestroyed()||e.isUnloaded()||t.isDestroyed()?void 0:(e._state=vo.LOADED,e._textureState=vo.LOADED,e)}catch(t){if(e.isDestroyed())return;e._state=vo.FAILED,e._textureState=vo.FAILED,O5(e,t)}}async function LUe(e,t){Bt.supportsWebP.initialized||await Bt.supportsWebP.initialize(),e._supportedImageFormats=new ZX({webp:Bt.supportsWebP(),basis:t.context.supportsBasis});let n=GDe(e,t);return e._state=vo.PROCESSING,e._textureState=vo.PROCESSING,l(e._gltfJsonLoader)&&e._releaseGltfJson&&(Ri.unload(e._gltfJsonLoader),e._gltfJsonLoader=void 0),n}th.prototype.load=async function(){return l(this._promise)?this._promise:(this._promise=VUe(this),this._promise)};function O5(e,t){throw e.unload(),e.getError("Failed to load glTF",t)}function RUe(e,t){let n=!0,i=e._geometryLoaders;for(let s=0;s<i.length;++s){let a=i[s].process(t);a&&l(e._geometryCallbacks[s])&&(e._geometryCallbacks[s](),e._geometryCallbacks[s]=void 0),n=n&&a}let o=e._structuralMetadataLoader;if(l(o)){let s=o.process(t);s&&(e._components.structuralMetadata=o.structuralMetadata),n=n&&s}let r=e._meshPrimitiveGpmLoader;if(l(r)){let s=r.process(t);s&&(l(e._components.structuralMetadata)&&_t("structural-metadata-gpm","The model defines both the 'EXT_structural_metadata' extension and the 'NGA_gpm_local' extension. The data from the 'EXT_structural_metadata' extension will be replaced with the data from the 'NGA_gpm_local' extension, and will no longer be available for styling and picking."),e._components.structuralMetadata=r.structuralMetadata),n=n&&s}n&&(e._state=vo.POST_PROCESSING)}function ZUe(e,t){let n=e._primitiveLoadPlans;for(let i=0;i<n.length;i++){let o=n[i];o.postProcess(t),o.needsOutlines&&GUe(e,o)}}function GUe(e,t){let n=e._postProcessBuffers,i=t.primitive,o=i.outlineCoordinates;l(o)&&n.push(o.buffer);let r=i.attributes;for(let a=0;a<r.length;a++){let c=r[a];l(c.buffer)&&n.push(c.buffer)}let s=i.indices;l(s)&&l(s.buffer)&&n.push(s.buffer)}th.prototype._process=function(e){return this._state===vo.READY?!0:(this._state===vo.PROCESSING&&RUe(this,e),this._resourcesLoaded&&this._state===vo.POST_PROCESSING&&(ZUe(this,e.context),this._state=vo.PROCESSED),this._resourcesLoaded&&this._state===vo.PROCESSED?(wse(this),this._typedArray=void 0,this._state=vo.READY,!0):!1)};th.prototype._processTextures=function(e){if(this._textureState===vo.READY)return!0;if(this._textureState!==vo.PROCESSING)return!1;let t=!0,n=this._textureLoaders;for(let i=0;i<n.length;++i){let o=n[i].process(e);o&&l(this._textureCallbacks[i])&&(this._textureCallbacks[i](),this._textureCallbacks[i]=void 0),t=t&&o}return t?(this._textureState=vo.READY,this._texturesLoaded=!0,!0):!1};th.prototype.process=function(e){if(this._state===vo.LOADED&&!l(this._loadResourcesPromise)&&(this._loadResourcesPromise=LUe(this,e).then(()=>{this._resourcesLoaded=!0}).catch(o=>{this._processError=o})),l(this._processError)){this._state=vo.FAILED;let o=this._processError;this._processError=void 0,O5(this,o)}let t=this._textureErrors.pop();if(l(t)){let o=this.getError("Failed to load glTF texture",t);throw o.name="TextureError",o}if(this._state===vo.FAILED)return!1;let n=!1;try{n=this._process(e)}catch(o){this._state=vo.FAILED,O5(this,o)}let i=!1;try{i=this._processTextures(e)}catch(o){this._textureState=vo.FAILED,O5(this,o)}return this._incrementallyLoadTextures?n:n&&i};function EUe(e,t,n,i,o,r,s,a){let c=e.gltfJson,u=c.accessors[t].bufferView;return Ri.getVertexBufferLoader({gltf:c,gltfResource:e._gltfResource,baseResource:e._baseResource,frameState:a,bufferViewId:u,primitive:i,draco:o,attributeSemantic:n,accessorId:t,asynchronous:e._asynchronous,loadBuffer:r,loadTypedArray:s})}function IUe(e,t,n,i,o,r,s){return Ri.getIndexBufferLoader({gltf:e.gltfJson,accessorId:t,gltfResource:e._gltfResource,baseResource:e._baseResource,frameState:s,primitive:n,draco:i,asynchronous:e._asynchronous,loadBuffer:o,loadTypedArray:r})}function XUe(e,t){let n=Ri.getBufferViewLoader({gltf:e.gltfJson,bufferViewId:t,gltfResource:e._gltfResource,baseResource:e._baseResource});return e._bufferViewLoaders.push(n),n}function Zse(e,t,n){let i=t.byteOffset,o=Fl(e,t),r=t.count,s=Cd(t.type),a=t.componentType,c=Q.getSizeInBytes(a),d=c*s,u=r*s;if(o===d)return n=new Uint8Array(n),Q.createArrayBufferView(a,n.buffer,n.byteOffset+i,u);let h=Q.createTypedArray(a,u),p=new DataView(n.buffer),g=new Array(s),f=nb(t.componentType);i=n.byteOffset+i;for(let y=0;y<r;++y){f(p,i,s,c,g);for(let x=0;x<s;++x)h[y*s+x]=g[x];i+=o}return h}function WUe(e,t){let n=e.type;if(n===on.SCALAR)return t.fill(0);let i=on.getMathType(n);return t.fill(i.clone(i.ZERO))}function PUe(e,t,n,i){let o=e.type,r=e.count;if(o===on.SCALAR)for(let s=0;s<r;s++)n[s]=t[s];else if(o===on.VEC4&&i)for(let s=0;s<r;s++)n[s]=ve.unpack(t,s*4);else{let s=on.getMathType(o),a=on.getNumberOfComponents(o);for(let c=0;c<r;c++)n[c]=s.unpack(t,c*a)}return n}async function vUe(e,t,n,i,o){let{gltfJson:r}=e;if(await t.load(),e.isDestroyed())return;let s=Zse(r,n,t.typedArray);i=i??!1,PUe(n,s,o,i)}function Y5(e,t,n){let i=new Array(t.count),o=t.bufferView;if(l(o)){let r=XUe(e,o),s=vUe(e,r,t,n,i);return e._loaderPromises.push(s),i}return WUe(t,i)}function Ld(e,t){if(l(t))return e===Number?t[0]:e.unpack(t)}function wUe(e){return e===Number?0:new e}function FUe(e){switch(e){case Q.BYTE:return 127;case Q.UNSIGNED_BYTE:return 255;case Q.SHORT:return 32767;case Q.UNSIGNED_SHORT:return 65535;default:return 1}}var AUe={VEC2:new U(-1,-1),VEC3:new m(-1,-1,-1),VEC4:new se(-1,-1,-1,-1)};function MUe(e,t){let n=FUe(e.componentDatatype),i=AUe[e.type],o=e.min;l(o)&&(o=t.divideByScalar(o,n,o),o=t.maximumByComponent(o,i,o));let r=e.max;l(r)&&(r=t.divideByScalar(r,n,r),r=t.maximumByComponent(r,i,r)),e.min=o,e.max=r}function NUe(e,t,n){let i=e.decodeMatrix,o=Ld(n,e.decodedMin),r=Ld(n,e.decodedMax);l(o)&&l(r)&&(t.min=o,t.max=r);let s=new Tn.Quantization;s.componentDatatype=t.componentDatatype,s.type=t.type,i.length===4?(s.quantizedVolumeOffset=i[2],s.quantizedVolumeStepSize=i[0]):i.length===9?(s.quantizedVolumeOffset=new U(i[6],i[7]),s.quantizedVolumeStepSize=new U(i[0],i[4])):i.length===16?(s.quantizedVolumeOffset=new m(i[12],i[13],i[14]),s.quantizedVolumeStepSize=new m(i[0],i[5],i[10])):i.length===25&&(s.quantizedVolumeOffset=new se(i[20],i[21],i[22],i[23]),s.quantizedVolumeStepSize=new se(i[0],i[6],i[12],i[18])),t.quantization=s}function kUe(e,t,n,i,o){let r=e.accessors[t],s=on.getMathType(r.type),a=r.normalized??!1,c=new iUe;c.name=n,c.semantic=i,c.setIndex=o,c.constant=wUe(s),c.componentDatatype=r.componentType,c.normalized=a,c.count=r.count,c.type=r.type,c.min=Ld(s,r.min),c.max=Ld(s,r.max),c.byteOffset=r.byteOffset,c.byteStride=Fl(e,r),ri(r,"WEB3D_quantized_attributes")&&NUe(r.extensions.WEB3D_quantized_attributes,c,s);let d=c.semantic===ft.POSITION||c.semantic===ft.NORMAL||c.semantic===ft.TANGENT||c.semantic===ft.TEXCOORD;return e.extensionsRequired?.includes("KHR_mesh_quantization")&&a&&d&&MUe(c,s),c}function Gse(e){let n=/^\w+_(\d+)$/.exec(e);if(n!==null)return parseInt(n[1])}var UUe={gltfSemantic:void 0,renamedSemantic:void 0,modelSemantic:void 0};function rH(e,t,n){let i=n;e._renameBatchIdSemantic&&(n==="_BATCHID"||n==="BATCHID")&&(i="_FEATURE_ID_0");let o=t.fromGltfSemantic(i),r=UUe;return r.gltfSemantic=n,r.renamedSemantic=i,r.modelSemantic=o,r}function DUe(e){let t=e===ft.POSITION,n=e===ft.FEATURE_ID,i=e===ft.TEXCOORD;return t||n||i}function BUe(e,t,n,i){if(e.byteOffset=0,e.byteStride=void 0,e.quantization=t.quantization,n&&(e.buffer=t.buffer),i){let o=l(t.quantization)?t.quantization.componentDatatype:e.componentDatatype;e.typedArray=Q.createArrayBufferView(o,t.typedArray.buffer)}}function OUe(e,t,n,i,o,r){if(o&&(n.buffer=i.buffer),r){let s=i.typedArray;n.typedArray=Zse(e,t,s),o||(n.byteOffset=0,n.byteStride=void 0)}}function Ese(e,t,n,i,o,r,s,a){let c=e.gltfJson,d=c.accessors[t],u=d.bufferView,h=n.gltfSemantic,p=n.renamedSemantic,g=n.modelSemantic,f=l(g)?Gse(p):void 0,x=kUe(c,t,h,g,f);if(!l(o)&&!l(u))return x;let S=EUe(e,t,h,i,o,r,s,a),C=e._geometryLoaders.length;e._geometryLoaders.push(S);let V=S.load();return e._loaderPromises.push(V),e._geometryCallbacks[C]=()=>{l(o)&&l(o.attributes)&&l(o.attributes[h])?BUe(x,S,r,s):OUe(c,d,x,S,r,s)},x}function Ise(e,t,n,i,o,r,s,a){let c=n.modelSemantic,d=c===ft.POSITION,u=c===ft.FEATURE_ID,h=d&&!r&&e._loadAttributesFor2D&&!a.scene3DOnly,p=d&&e._enablePick&&!a.context.webgl2,g=e._loadForClassification&&u,f=e._loadAttributesAsTypedArray,y=!f,x=f||h||p||g,V=Ese(e,t,n,i,o,s?!1:y,s?!0:x,a),L=new L_.AttributeLoadPlan(V);return L.loadBuffer=y,L.loadTypedArray=x,L}function YUe(e,t,n,i,o){let r=e.gltfJson.accessors,s=l(n.ROTATION),a=l(n.TRANSLATION)&&l(r[n.TRANSLATION].min)&&l(r[n.TRANSLATION].max),c=rH(e,ts,i),d=c.modelSemantic,u=d===ts.TRANSLATION||d===ts.ROTATION||d===ts.SCALE,h=d===ts.TRANSLATION,p=e._loadAttributesAsTypedArray||s&&u||!o.context.instancedArrays,g=e._enablePick&&!o.context.webgl2,f=!p,y=e._loadAttributesFor2D&&!o.scene3DOnly;return Ese(e,t,c,void 0,void 0,f,p||h&&(!a||y||g),o)}function zUe(e,t,n,i,o,r,s){let a=e.gltfJson.accessors[t],c=a.bufferView;if(!l(i)&&!l(c))return;let d=new oUe;d.count=a.count;let u=e._loadAttributesAsTypedArray,h=(e._loadIndicesForWireframe||e._enablePick)&&!s.context.webgl2,p=e._loadForClassification&&o,f=!u,y=u||h||p,C=IUe(e,t,n,i,r?!1:f,r?!0:y,s),V=e._geometryLoaders.length;e._geometryLoaders.push(C);let L=C.load();e._loaderPromises.push(L),e._geometryCallbacks[V]=()=>{d.indexDatatype=C.indexDatatype,d.buffer=C.buffer,d.typedArray=C.typedArray};let Z=new L_.IndicesLoadPlan(d);return Z.loadBuffer=f,Z.loadTypedArray=y,Z}function nl(e,t,n,i){let o=e.gltfJson,r=Al.getImageIdFromTexture({gltf:o,textureId:t.index,supportedImageFormats:e._supportedImageFormats});if(!l(r))return;let s=Ri.getTextureLoader({gltf:o,textureInfo:t,gltfResource:e._gltfResource,baseResource:e._baseResource,supportedImageFormats:e._supportedImageFormats,frameState:n,asynchronous:e._asynchronous}),a=Al.createModelTextureReader({textureInfo:t}),c=e._textureLoaders.length;e._textureLoaders.push(s);let d=s.load().catch(u=>{if(!e.isDestroyed()){if(!e._incrementallyLoadTextures)throw u;e._textureState=vo.FAILED,e._textureErrors.push(u)}});return e._texturesPromises.push(d),e._textureCallbacks[c]=()=>{a.texture=s.texture,l(i)&&(a.texture.sampler=i)},a}function HUe(e,t,n){let{diffuseTexture:i,specularGlossinessTexture:o,diffuseFactor:r,specularFactor:s,glossinessFactor:a}=t,c=new TUe;return l(i)&&(c.diffuseTexture=nl(e,i,n)),l(o)&&(c.specularGlossinessTexture=nl(e,o,n)),c.diffuseFactor=Ld(se,r),c.specularFactor=Ld(m,s),c.glossinessFactor=a,c}function KUe(e,t,n){let{baseColorTexture:i,metallicRoughnessTexture:o,baseColorFactor:r,metallicFactor:s,roughnessFactor:a}=t,c=new _Ue;return l(i)&&(c.baseColorTexture=nl(e,i,n)),l(o)&&(c.metallicRoughnessTexture=nl(e,o,n)),c.baseColorFactor=Ld(se,r),c.metallicFactor=s,c.roughnessFactor=a,c}function JUe(e,t,n){let{specularFactor:i,specularTexture:o,specularColorFactor:r,specularColorTexture:s}=t,a=new SUe;return l(o)&&(a.specularTexture=nl(e,o,n)),l(s)&&(a.specularColorTexture=nl(e,s,n)),a.specularFactor=i,a.specularColorFactor=Ld(m,r),a}function QUe(e,t,n){let{anisotropyStrength:i=iH.DEFAULT_ANISOTROPY_STRENGTH,anisotropyRotation:o=iH.DEFAULT_ANISOTROPY_ROTATION,anisotropyTexture:r}=t,s=new iH;return l(r)&&(s.anisotropyTexture=nl(e,r,n)),s.anisotropyStrength=i,s.anisotropyRotation=o,s}function jUe(e,t,n){let{clearcoatFactor:i=oH.DEFAULT_CLEARCOAT_FACTOR,clearcoatTexture:o,clearcoatRoughnessFactor:r=oH.DEFAULT_CLEARCOAT_ROUGHNESS_FACTOR,clearcoatRoughnessTexture:s,clearcoatNormalTexture:a}=t,c=new oH;return l(o)&&(c.clearcoatTexture=nl(e,o,n)),l(s)&&(c.clearcoatRoughnessTexture=nl(e,s,n)),l(a)&&(c.clearcoatNormalTexture=nl(e,a,n)),c.clearcoatFactor=i,c.clearcoatRoughnessFactor=r,c}function qUe(e,t,n){let i=new CUe,o=t.extensions??Y.EMPTY_OBJECT,r=o.KHR_materials_pbrSpecularGlossiness,s=o.KHR_materials_specular,a=o.KHR_materials_anisotropy,c=o.KHR_materials_clearcoat,d=t.pbrMetallicRoughness;return i.unlit=l(o.KHR_materials_unlit),l(r)?i.specularGlossiness=HUe(e,r,n):(l(d)&&(i.metallicRoughness=KUe(e,d,n)),l(s)&&!i.unlit&&(i.specular=JUe(e,s,n)),l(a)&&!i.unlit&&(i.anisotropy=QUe(e,a,n)),l(c)&&!i.unlit&&(i.clearcoat=jUe(e,c,n))),l(t.emissiveTexture)&&(i.emissiveTexture=nl(e,t.emissiveTexture,n)),l(t.normalTexture)&&!e._loadForClassification&&(i.normalTexture=nl(e,t.normalTexture,n)),l(t.occlusionTexture)&&(i.occlusionTexture=nl(e,t.occlusionTexture,n)),i.emissiveFactor=Ld(m,t.emissiveFactor),i.alphaMode=t.alphaMode,i.alphaCutoff=t.alphaCutoff,i.doubleSided=t.doubleSided,i}function Xse(e,t){let n=new Vse;return n.featureCount=e.featureCount,n.nullFeatureId=e.nullFeatureId,n.propertyTableId=e.propertyTable,n.setIndex=e.attribute,n.label=e.label,n.positionalLabel=t,n}function Wse(e,t,n,i){let o=new Vse,r=e.featureIds;return o.featureCount=n,o.propertyTableId=t,o.setIndex=Gse(r.attribute),o.positionalLabel=i,o}function Pse(e,t){let n=new Rse;return n.propertyTableId=e.propertyTable,n.featureCount=e.featureCount,n.nullFeatureId=e.nullFeatureId,n.label=e.label,n.positionalLabel=t,n.offset=0,n.repeat=1,n}function vse(e,t,n,i){let o=new Rse,r=e.featureIds;o.propertyTableId=t,o.featureCount=n,o.offset=r.constant??0;let s=r.divisor??0;return o.repeat=s===0?void 0:s,o.positionalLabel=i,o}function $Ue(e,t,n,i){let o=new Lse;o.featureCount=t.featureCount,o.nullFeatureId=t.nullFeatureId,o.propertyTableId=t.propertyTable,o.label=t.label,o.positionalLabel=i;let r=t.texture;o.textureReader=nl(e,r,n,qt.NEAREST);let a=(l(r.channels)?r.channels:[0]).map(function(c){return"rgba".charAt(c)}).join("");return o.textureReader.channels=a,o}function eDe(e,t,n,i,o,r){let s=new Lse,a=t.featureIds,c=a.texture;return s.featureCount=o,s.propertyTableId=n,s.textureReader=nl(e,c,i,qt.NEAREST),s.textureReader.channels=a.channels,s.positionalLabel=r,s}function tDe(e,t,n,i,o){let r=new rUe,s=void 0,a=void 0,c=!1;for(let d in t){if(!t.hasOwnProperty(d))continue;let u=t[d],h=rH(e,ft,d),p=Ise(e,u,h,s,a,c,n,o);r.attributes.push(p.attribute),i.attributePlans.push(p)}return r}function nDe(e,t,n,i){let o=new sUe,r=new L_(o);e._primitiveLoadPlans.push(r);let s=t.material;l(s)&&(o.material=qUe(e,e.gltfJson.materials[s],i));let a=t.extensions??Y.EMPTY_OBJECT,c=!1,d=a.CESIUM_primitive_outline;e._loadPrimitiveOutline&&l(d)&&(c=!0,r.needsOutlines=!0,r.outlineIndices=iDe(e,d,r));let u=e._loadForClassification,h=a.KHR_draco_mesh_compression,p=!1,g=t.attributes;if(l(g))for(let Z in g){if(!g.hasOwnProperty(Z))continue;let E=g[Z],P=rH(e,ft,Z),W=P.modelSemantic;if(u&&!DUe(W))continue;W===ft.FEATURE_ID&&(p=!0);let v=Ise(e,E,P,t,h,n,c,i);r.attributePlans.push(v),o.attributes.push(v.attribute)}let f=t.targets;if(l(f)&&!u)for(let Z=0;Z<f.length;++Z)o.morphTargets.push(tDe(e,f[Z],c,r,i));let y=t.indices;if(l(y)){let Z=zUe(e,y,t,h,p,c,i);l(Z)&&(r.indicesPlan=Z,o.indices=Z.indices)}let x=a.EXT_structural_metadata,S=a.EXT_mesh_features,C=a.EXT_feature_metadata,V=l(C);l(S)?oDe(e,o,S,i):V&&rDe(e,o,C,i),l(x)?sDe(o,x):V&&aDe(e,o,C);let L=t.mode;if(u&&L!==we.TRIANGLES)throw new ae("Only triangle meshes can be used for classification.");return o.primitiveType=L,o}function iDe(e,t){let n=t.indices,i=e.gltfJson.accessors[n];return Y5(e,i,!1)}function oDe(e,t,n,i){let o;l(n)&&l(n.featureIds)?o=n.featureIds:o=[];for(let r=0;r<o.length;r++){let s=o[r],a=`featureId_${r}`,c;l(s.texture)?c=$Ue(e,s,i,a):l(s.attribute)?c=Xse(s,a):c=Pse(s,a),t.featureIds.push(c)}}function rDe(e,t,n,i){let{featureTables:o}=e.gltfJson.extensions.EXT_feature_metadata,r=0,s=n.featureIdAttributes;if(l(s))for(let c=0;c<s.length;++c){let d=s[c],u=d.featureTable,h=e._sortedPropertyTableIds.indexOf(u),p=o[u].count,g=`featureId_${r}`;r++;let f;l(d.featureIds.attribute)?f=Wse(d,h,p,g):f=vse(d,h,p,g),t.featureIds.push(f)}let a=n.featureIdTextures;if(l(a))for(let c=0;c<a.length;++c){let d=a[c],u=d.featureTable,h=e._sortedPropertyTableIds.indexOf(u),p=o[u].count,g=`featureId_${r}`;r++;let f=eDe(e,d,h,i,p,g);t.featureIds.push(f)}}function sDe(e,t){if(!l(t))return;let{propertyTextures:n,propertyAttributes:i}=t;l(n)&&(e.propertyTextureIds=n),l(i)&&(e.propertyAttributeIds=i)}function aDe(e,t,n){l(n.featureTextures)&&(t.propertyTextureIds=n.featureTextures.map(function(i){return e._sortedFeatureTextureIds.indexOf(i)}))}function cDe(e,t,n){let i=t.EXT_mesh_gpu_instancing,o=new aUe,r=i.attributes;if(l(r))for(let d in r){if(!r.hasOwnProperty(d))continue;let u=r[d];o.attributes.push(YUe(e,u,r,d,n))}let s=i.extensions??Y.EMPTY_OBJECT,a=t.EXT_instance_features,c=s.EXT_feature_metadata;return l(a)?lDe(o,a):l(c)&&dDe(e.gltfJson,o,c,e._sortedPropertyTableIds),o}function lDe(e,t){let n=t.featureIds;for(let i=0;i<n.length;i++){let o=n[i],r=`instanceFeatureId_${i}`,s;l(o.attribute)?s=Xse(o,r):s=Pse(o,r),e.featureIds.push(s)}}function dDe(e,t,n,i){let o=e.extensions.EXT_feature_metadata.featureTables,r=n.featureIdAttributes;if(l(r))for(let s=0;s<r.length;++s){let a=r[s],c=a.featureTable,d=i.indexOf(c),u=o[c].count,h=`instanceFeatureId_${s}`,p;l(a.featureIds.attribute)?p=Wse(a,d,u,h):p=vse(a,d,u,h),t.featureIds.push(p)}}function uDe(e,t,n){let i=new lUe;i.name=t.name,i.matrix=Ld(F,t.matrix),i.translation=Ld(m,t.translation),i.rotation=Ld(ve,t.rotation),i.scale=Ld(m,t.scale);let o=t.extensions??Y.EMPTY_OBJECT,r=o.EXT_mesh_gpu_instancing,s=o.AGI_articulations;if(l(r)){if(e._loadForClassification)throw new ae("Models with the EXT_mesh_gpu_instancing extension cannot be used for classification.");i.instances=cDe(e,o,n)}l(s)&&(i.articulationName=s.articulationName);let a=t.mesh;if(l(a)){let c=e.gltfJson.meshes[a],d=c.primitives;for(let p=0;p<d.length;++p)i.primitives.push(nDe(e,d[p],l(i.instances),n));let u=t.weights??c.weights,h=i.primitives[0].morphTargets;i.morphWeights=l(u)?u.slice():new Array(h.length).fill(0)}return i}function mDe(e,t){let n=e.gltfJson.nodes;if(!l(n))return[];let i=n.map(function(o,r){let s=uDe(e,o,t);return s.index=r,s});for(let o=0;o<i.length;++o){let r=n[o].children;if(l(r))for(let s=0;s<r.length;++s)i[o].children.push(i[r[s]])}return i}function hDe(e,t,n){let i=new cUe,o=t.joints;i.joints=o.map(s=>n[s]);let r=t.inverseBindMatrices;if(l(r)){let s=e.gltfJson.accessors[r];i.inverseBindMatrices=Y5(e,s)}else i.inverseBindMatrices=new Array(o.length).fill(F.IDENTITY);return i}function fDe(e,t){let n=e.gltfJson.skins;if(e._loadForClassification||!l(n))return[];let i=n.map(function(r,s){let a=hDe(e,r,t);return a.index=s,a}),o=e.gltfJson.nodes;for(let r=0;r<t.length;++r){let s=o[r].skin;l(s)&&(t[r].skin=i[s])}return i}async function pDe(e,t,n,i){let o=new RX({gltf:e.gltfJson,extension:t,extensionLegacy:n,gltfResource:e._gltfResource,baseResource:e._baseResource,supportedImageFormats:e._supportedImageFormats,frameState:i,asynchronous:e._asynchronous});return e._structuralMetadataLoader=o,o.load()}async function bDe(e,t,n,i){let o=new FX({gltf:t,extension:n,gltfResource:e._gltfResource,baseResource:e._baseResource,supportedImageFormats:e._supportedImageFormats,frameState:i,asynchronous:e._asynchronous});return e._meshPrimitiveGpmLoader=o,o.load()}function gDe(e,t){let n=new uUe,i=e.gltfJson.accessors,o=i[t.input];n.input=Y5(e,o);let r=t.interpolation;n.interpolation=eh[r]??eh.LINEAR;let s=i[t.output];return n.output=Y5(e,s,!0),n}function yDe(e,t){let n=new mUe,i=e.node;if(!l(i))return;n.node=t[i];let o=e.path.toUpperCase();return n.path=dUe[o],n}function xDe(e,t,n){let i=new hUe,o=e.sampler;return i.sampler=t[o],i.target=yDe(e.target,n),i}function _De(e,t,n){let i=new fUe;i.name=t.name;let o=t.samplers.map(function(s,a){let c=gDe(e,s);return c.index=a,c}),r=t.channels.map(function(s){return xDe(s,o,n)});return i.samplers=o,i.channels=r,i}function TDe(e,t){let n=e.gltfJson.animations;return e._loadForClassification||!l(n)?[]:n.map(function(o,r){let s=_De(e,o,t);return s.index=r,s})}function SDe(e){let t=new pUe;t.name=e.name;let n=e.type.toUpperCase();return t.type=bc[n],t.minimumValue=e.minimumValue,t.maximumValue=e.maximumValue,t.initialValue=e.initialValue,t}function CDe(e){let t=new bUe;return t.name=e.name,t.stages=e.stages.map(SDe),t}function VDe(e){let n=(e.extensions??Y.EMPTY_OBJECT).AGI_articulations?.articulations;return l(n)?n.map(CDe):[]}function LDe(e){let t;return l(e.scenes)&&l(e.scene)&&(t=e.scenes[e.scene].nodes),t=t??e.nodes,t=l(t)?t:[],t}function RDe(e,t){let n=new yUe,i=LDe(e);return n.nodes=i.map(function(o){return t[o]}),n}var ZDe=new m;function GDe(e,t){let n=e.gltfJson,i=n.extensions??Y.EMPTY_OBJECT,o=i.EXT_structural_metadata,r=i.EXT_feature_metadata,s=i.CESIUM_RTC;if(l(r)){let C=r.featureTables,V=r.featureTextures,L=l(C)?C:[],Z=l(V)?V:[];e._sortedPropertyTableIds=Object.keys(L).sort(),e._sortedFeatureTextureIds=Object.keys(Z).sort()}let a=mDe(e,t),c=fDe(e,a),d=TDe(e,a),u=VDe(n),h=RDe(n,a),p=new xUe,g=new gUe,f=n.asset.copyright;if(l(f)){let C=f.split(";").map(function(V){return new Ct(V.trim())});g.credits=C}if(p.asset=g,p.scene=h,p.nodes=a,p.skins=c,p.animations=d,p.articulations=u,p.upAxis=e._upAxis,p.forwardAxis=e._forwardAxis,l(s)){let C=m.fromArray(s.center,0,ZDe);p.transform=F.fromTranslation(C,p.transform)}if(e._components=p,l(o)||l(r)){let C=pDe(e,o,r,t);e._loaderPromises.push(C)}let y=i.NGA_gpm_local;if(l(y)){let C=WX.load(y);e._components.extensions.NGA_gpm_local=C}let x=n.meshes;if(l(x))for(let C of x){let V=C.primitives;if(l(V))for(let L of V){let Z=L.extensions;if(l(Z)){let E=Z.NGA_gpm_local;if(l(E)){let P=bDe(e,n,E,t);e._loaderPromises.push(P)}}}}let S=[];return S.push.apply(S,e._loaderPromises),e._incrementallyLoadTextures||S.push.apply(S,e._texturesPromises),Promise.all(S)}function EDe(e){let t=e._textureLoaders;for(let n=0;n<t.length;++n)t[n]=!t[n].isDestroyed()&&Ri.unload(t[n]);e._textureLoaders.length=0}function wse(e){let t=e._bufferViewLoaders;for(let n=0;n<t.length;++n)t[n]=!t[n].isDestroyed()&&Ri.unload(t[n]);e._bufferViewLoaders.length=0}function IDe(e){let t=e._geometryLoaders;for(let n=0;n<t.length;++n)t[n]=!t[n].isDestroyed()&&Ri.unload(t[n]);e._geometryLoaders.length=0}function XDe(e){let t=e._postProcessBuffers;for(let n=0;n<t.length;n++){let i=t[n];i.isDestroyed()||i.destroy()}t.length=0}function WDe(e){l(e._structuralMetadataLoader)&&!e._structuralMetadataLoader.isDestroyed()&&(e._structuralMetadataLoader.destroy(),e._structuralMetadataLoader=void 0)}function PDe(e){l(e._meshPrimitiveGpmLoader)&&!e._meshPrimitiveGpmLoader.isDestroyed()&&(e._meshPrimitiveGpmLoader.destroy(),e._meshPrimitiveGpmLoader=void 0)}th.prototype.isUnloaded=function(){return this._state===vo.UNLOADED};th.prototype.unload=function(){l(this._gltfJsonLoader)&&!this._gltfJsonLoader.isDestroyed()&&Ri.unload(this._gltfJsonLoader),this._gltfJsonLoader=void 0,EDe(this),wse(this),IDe(this),XDe(this),WDe(this),PDe(this),this._components=void 0,this._typedArray=void 0,this._state=vo.UNLOADED};var nh=th;var E_n=_(T(),1);var R_n=_(T(),1);var d_n=_(T(),1),AX=`uniform sampler2D u_pointCloud_colorGBuffer; uniform sampler2D u_pointCloud_depthGBuffer; uniform vec2 u_distanceAndEdlStrength; in vec2 v_textureCoordinates; vec2 neighborContribution(float log2Depth, vec2 offset) { float dist = u_distanceAndEdlStrength.x; vec2 texCoordOrig = v_textureCoordinates + offset * dist; vec2 texCoord0 = v_textureCoordinates + offset * floor(dist); vec2 texCoord1 = v_textureCoordinates + offset * ceil(dist); float depthOrLogDepth0 = czm_unpackDepth(texture(u_pointCloud_depthGBuffer, texCoord0)); float depthOrLogDepth1 = czm_unpackDepth(texture(u_pointCloud_depthGBuffer, texCoord1)); // ignore depth values that are the clear depth if (depthOrLogDepth0 == 0.0 || depthOrLogDepth1 == 0.0) { return vec2(0.0); } // interpolate the two adjacent depth values float depthMix = mix(depthOrLogDepth0, depthOrLogDepth1, fract(dist)); vec4 eyeCoordinate = czm_windowToEyeCoordinates(texCoordOrig, depthMix); return vec2(max(0.0, log2Depth - log2(-eyeCoordinate.z / eyeCoordinate.w)), 1.0); } void main() { float depthOrLogDepth = czm_unpackDepth(texture(u_pointCloud_depthGBuffer, v_textureCoordinates)); vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, depthOrLogDepth); eyeCoordinate /= eyeCoordinate.w; float log2Depth = log2(-eyeCoordinate.z); if (depthOrLogDepth == 0.0) // 0.0 is the clear value for the gbuffer { discard; } vec4 color = texture(u_pointCloud_colorGBuffer, v_textureCoordinates); // sample from neighbors left, right, down, up vec2 texelSize = 1.0 / czm_viewport.zw; vec2 responseAndCount = vec2(0.0); responseAndCount += neighborContribution(log2Depth, vec2(-texelSize.x, 0.0)); responseAndCount += neighborContribution(log2Depth, vec2(+texelSize.x, 0.0)); responseAndCount += neighborContribution(log2Depth, vec2(0.0, -texelSize.y)); responseAndCount += neighborContribution(log2Depth, vec2(0.0, +texelSize.y)); float response = responseAndCount.x / responseAndCount.y; float strength = u_distanceAndEdlStrength.y; float shade = exp(-response * 300.0 * strength); color.rgb *= shade; out_FragColor = vec4(color); // Input and output depth are the same. gl_FragDepth = depthOrLogDepth; } `;function zC(){this._framebuffer=new fi({colorAttachmentsLength:2,depth:!0,supportsDepthTexture:!0}),this._drawCommand=void 0,this._clearCommand=void 0,this._strength=1,this._radius=1}Object.defineProperties(zC.prototype,{framebuffer:{get:function(){return this._framebuffer.framebuffer}},colorGBuffer:{get:function(){return this._framebuffer.getColorTexture(0)}},depthGBuffer:{get:function(){return this._framebuffer.getColorTexture(1)}}});function vDe(e){e._framebuffer.destroy(),e._drawCommand=void 0,e._clearCommand=void 0}var sH=new U;function wDe(e,t){let n=new De({defines:["LOG_DEPTH_WRITE"],sources:[AX]}),i={u_pointCloud_colorGBuffer:function(){return e.colorGBuffer},u_pointCloud_depthGBuffer:function(){return e.depthGBuffer},u_distanceAndEdlStrength:function(){return sH.x=e._radius,sH.y=e._strength,sH}},o=Ue.fromCache({blending:un.ALPHA_BLEND,depthMask:!0,depthTest:{enabled:!0},stencilTest:Ut.setCesium3DTileBit(),stencilMask:Ut.CESIUM_3D_TILE_MASK});e._drawCommand=t.createViewportQuadCommand(n,{uniformMap:i,renderState:o,pass:Ee.CESIUM_3D_TILE,owner:e}),e._clearCommand=new ti({framebuffer:e.framebuffer,color:new D(0,0,0,0),depth:1,renderState:Ue.fromCache(),pass:Ee.CESIUM_3D_TILE,owner:e})}function FDe(e,t){let n=t.drawingBufferWidth,i=t.drawingBufferHeight;e._framebuffer.update(t,n,i),wDe(e,t)}function Fse(e){return e.drawBuffers&&e.fragmentDepth}zC.isSupported=Fse;function ADe(e,t){let n=e.shaderCache.getDerivedShaderProgram(t,"EC");if(!l(n)){let i=t._attributeLocations,o=t.fragmentShaderSource.clone();o.sources.splice(0,0,`layout (location = 0) out vec4 out_FragData_0; layout (location = 1) out vec4 out_FragData_1;`),o.sources=o.sources.map(function(r){return r=De.replaceMain(r,"czm_point_cloud_post_process_main"),r=r.replaceAll(/out_FragColor/g,"out_FragData_0"),r}),o.sources.push(`void main() { czm_point_cloud_post_process_main(); #ifdef LOG_DEPTH czm_writeLogDepth(); out_FragData_1 = czm_packDepth(gl_FragDepth); #else out_FragData_1 = czm_packDepth(gl_FragCoord.z); #endif }`),n=e.shaderCache.createDerivedShaderProgram(t,"EC",{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:o,attributeLocations:i})}return n}zC.prototype.update=function(e,t,n,i){if(!Fse(e.context))return;this._strength=n.eyeDomeLightingStrength,this._radius=n.eyeDomeLightingRadius*e.pixelRatio,FDe(this,e.context);let o,r=e.commandList,s=r.length;for(o=t;o<s;++o){let d=r[o];if(d.primitiveType!==we.POINTS||d.pass===Ee.TRANSLUCENT)continue;let u,h,p=d.derivedCommands.pointCloudProcessor;l(p)&&(u=p.command,h=p.originalShaderProgram),(!l(u)||d.dirty||h!==d.shaderProgram||u.framebuffer!==this.framebuffer)&&(u=$e.shallowClone(d,u),u.framebuffer=this.framebuffer,u.shaderProgram=ADe(e.context,d.shaderProgram),u.castShadows=!1,u.receiveShadows=!1,l(p)||(p={command:u,originalShaderProgram:d.shaderProgram},d.derivedCommands.pointCloudProcessor=p),p.originalShaderProgram=d.shaderProgram),r[o]=u}let a=this._clearCommand,c=this._drawCommand;c.boundingVolume=i,r.push(c),r.push(a)};zC.prototype.isDestroyed=function(){return!1};zC.prototype.destroy=function(){return vDe(this),me(this)};var lb=zC;function Ase(e){let t=e??{};this.attenuation=t.attenuation??!1,this.geometricErrorScale=t.geometricErrorScale??1,this.maximumAttenuation=t.maximumAttenuation,this.baseResolution=t.baseResolution,this.eyeDomeLighting=t.eyeDomeLighting??!0,this.eyeDomeLightingStrength=t.eyeDomeLightingStrength??1,this.eyeDomeLightingRadius=t.eyeDomeLightingRadius??1,this.backFaceCulling=t.backFaceCulling??!1,this.normalShading=t.normalShading??!0}Ase.isSupported=function(e){return lb.isSupported(e.context)};var Cf=Ase;var B_n=_(T(),1);var Na={},MDe=new se(0,0,0,1),yc=new se,NDe=new Ke,aH=new U,cH=new U;Na.worldToWindowCoordinates=function(e,t,n){return Na.worldWithEyeOffsetToWindowCoordinates(e,t,m.ZERO,n)};var Mse=new se,Nse=new m;function MX(e,t,n,i){let o=n.viewMatrix,r=F.multiplyByVector(o,se.fromElements(e.x,e.y,e.z,1,Mse),Mse),s=m.multiplyComponents(t,m.normalize(r,Nse),Nse);return r.x+=t.x+s.x,r.y+=t.y+s.y,r.z+=s.z,F.multiplyByVector(n.frustum.projectionMatrix,r,i)}var kDe=new he(Math.PI,X.PI_OVER_TWO),UDe=new m,DDe=new m;Na.worldWithEyeOffsetToWindowCoordinates=function(e,t,n,i){let o=e.frameState,r=Na.computeActualEllipsoidPosition(o,t,MDe);if(!l(r))return;let s=e.canvas,a=NDe;a.x=0,a.y=0,a.width=s.clientWidth,a.height=s.clientHeight;let c=e.camera,d=!1;if(o.mode===oe.SCENE2D){let u=e.mapProjection,h=kDe,p=u.project(h,UDe),g=m.clone(c.position,DDe),f=c.frustum.clone(),y=F.computeViewportTransformation(a,0,1,new F),x=c.frustum.projectionMatrix,S=c.positionWC.y,C=m.fromElements(X.sign(S)*p.x-S,0,-c.positionWC.x),V=Pt.pointToGLWindowCoordinates(x,y,C);if(S===0||V.x<=0||V.x>=s.clientWidth)d=!0;else{if(V.x>s.clientWidth*.5){a.width=V.x,c.frustum.right=p.x-S,yc=MX(r,n,c,yc),Na.clipToGLWindowCoordinates(a,yc,aH),a.x+=V.x,c.position.x=-c.position.x;let L=c.frustum.right;c.frustum.right=-c.frustum.left,c.frustum.left=-L,yc=MX(r,n,c,yc),Na.clipToGLWindowCoordinates(a,yc,cH)}else{a.x+=V.x,a.width-=V.x,c.frustum.left=-p.x-S,yc=MX(r,n,c,yc),Na.clipToGLWindowCoordinates(a,yc,aH),a.x=a.x-a.width,c.position.x=-c.position.x;let L=c.frustum.left;c.frustum.left=-c.frustum.right,c.frustum.right=-L,yc=MX(r,n,c,yc),Na.clipToGLWindowCoordinates(a,yc,cH)}m.clone(g,c.position),c.frustum=f.clone(),i=U.clone(aH,i),(i.x<0||i.x>s.clientWidth)&&(i.x=cH.x)}}if(o.mode!==oe.SCENE2D||d){if(yc=MX(r,n,c,yc),yc.z<0&&!(c.frustum instanceof an)&&!(c.frustum instanceof Pr))return;i=Na.clipToGLWindowCoordinates(a,yc,i)}return i.y=s.clientHeight-i.y,i};Na.worldToDrawingBufferCoordinates=function(e,t,n){if(n=Na.worldToWindowCoordinates(e,t,n),!!l(n))return Na.transformWindowToDrawingBuffer(e,n,n)};var db=new m,BDe=new he;Na.computeActualEllipsoidPosition=function(e,t,n){let i=e.mode;if(i===oe.SCENE3D)return m.clone(t,n);let o=e.mapProjection,r=o.ellipsoid.cartesianToCartographic(t,BDe);if(!l(r))return;if(o.project(r,db),i===oe.COLUMBUS_VIEW)return m.fromElements(db.z,db.x,db.y,n);if(i===oe.SCENE2D)return m.fromElements(0,db.x,db.y,n);let s=e.morphTime;return m.fromElements(X.lerp(db.z,t.x,s),X.lerp(db.x,t.y,s),X.lerp(db.y,t.z,s),n)};var kse=new m,Use=new m,Dse=new F;Na.clipToGLWindowCoordinates=function(e,t,n){return m.divideByScalar(t,t.w,kse),F.computeViewportTransformation(e,0,1,Dse),F.multiplyByPoint(Dse,kse,Use),U.fromCartesian3(Use,n)};Na.transformWindowToDrawingBuffer=function(e,t,n){let i=e.canvas,o=e.drawingBufferWidth/i.clientWidth,r=e.drawingBufferHeight/i.clientHeight;return U.fromElements(t.x*o,t.y*r,n)};var ODe=new se,Bse=new se;Na.drawingBufferToWorldCoordinates=function(e,t,n,i){let r=e.context.uniformState,s=r.currentFrustum,a=s.x,c=s.y;if(e.frameState.useLogDepth){let g=n*r.log2FarDepthFromNearPlusOne,f=Math.pow(2,g)-1;n=c*(1-a/(f+a))/(c-a)}let d=e.view.passState.viewport,u=se.clone(se.UNIT_W,ODe);u.x=(t.x-d.x)/d.width*2-1,u.y=(t.y-d.y)/d.height*2-1,u.z=n*2-1,u.w=1;let h,p=e.camera.frustum;if(l(p.fovy)){h=F.multiplyByVector(r.inverseViewProjection,u,Bse);let g=1/h.w;m.multiplyByScalar(h,g,h)}else{let g=p.offCenterFrustum;l(g)&&(p=g),h=Bse,h.x=(u.x*(p.right-p.left)+p.left+p.right)*.5,h.y=(u.y*(p.top-p.bottom)+p.bottom+p.top)*.5,h.z=(u.z*(a-c)-a-c)*.5,h.w=1,h=F.multiplyByVector(r.inverseView,h,h)}return m.fromCartesian4(h,i)};var Ui=Na;var wTn=_(T(),1);var K_n=_(T(),1);var HC={};HC._deprecationWarning=Vs;var ub=Uint32Array.BYTES_PER_ELEMENT;HC.parse=function(e,t){let n=t??0;t=n;let i=new Uint8Array(e),o=new DataView(e);t+=ub;let r=o.getUint32(t,!0);if(r!==1)throw new ae(`Only Batched 3D Model version 1 is supported. Version ${r} is not.`);t+=ub;let s=o.getUint32(t,!0);t+=ub;let a=o.getUint32(t,!0);t+=ub;let c=o.getUint32(t,!0);t+=ub;let d=o.getUint32(t,!0);t+=ub;let u=o.getUint32(t,!0);t+=ub;let h;d>=570425344?(t-=ub*2,h=a,d=c,u=0,a=0,c=0,HC._deprecationWarning("b3dm-legacy-header","This b3dm header is using the legacy format [batchLength] [batchTableByteLength]. The new format is [featureTableJsonByteLength] [featureTableBinaryByteLength] [batchTableJsonByteLength] [batchTableBinaryByteLength] from https://github.com/CesiumGS/3d-tiles/tree/main/specification/TileFormats/Batched3DModel.")):u>=570425344&&(t-=ub,h=d,d=a,u=c,a=0,c=0,HC._deprecationWarning("b3dm-legacy-header","This b3dm header is using the legacy format [batchTableJsonByteLength] [batchTableBinaryByteLength] [batchLength]. The new format is [featureTableJsonByteLength] [featureTableBinaryByteLength] [batchTableJsonByteLength] [batchTableBinaryByteLength] from https://github.com/CesiumGS/3d-tiles/tree/main/specification/TileFormats/Batched3DModel."));let p;a===0?p={BATCH_LENGTH:h??0}:(p=qo(i,t,a),t+=a);let g=new Uint8Array(e,t,c);t+=c;let f,y;d>0&&(f=qo(i,t,d),t+=d,u>0&&(y=new Uint8Array(e,t,u),y=new Uint8Array(y),t+=u));let x=n+s-t;if(x===0)throw new ae("glTF byte length must be greater than 0.");let S;return t%4===0?S=new Uint8Array(e,t,x):(HC._deprecationWarning("b3dm-glb-unaligned","The embedded glb is not aligned to a 4-byte boundary."),S=new Uint8Array(i.subarray(t,t+x))),{batchLength:h,featureTableJson:p,featureTableBinary:g,batchTableJson:f,batchTableBinary:y,gltf:S}};var NX=HC;var q_n=_(T(),1);function kX(e,t){this.json=e,this.buffer=t,this._cachedTypedArrays={},this.featuresLength=0}function Ose(e,t,n,i,o,r){let s=e._cachedTypedArrays,a=s[t];return l(a)||(a=Q.createArrayBufferView(n,e.buffer.buffer,e.buffer.byteOffset+r,o*i),s[t]=a),a}function YDe(e,t,n,i){let o=e._cachedTypedArrays,r=o[t];return l(r)||(r=Q.createTypedArray(n,i),o[t]=r),r}kX.prototype.getGlobalProperty=function(e,t,n){let i=this.json[e];if(l(i))return l(i.byteOffset)?(t=t??Q.UNSIGNED_INT,n=n??1,Ose(this,e,t,n,1,i.byteOffset)):i};kX.prototype.hasProperty=function(e){return l(this.json[e])};kX.prototype.getPropertyArray=function(e,t,n){let i=this.json[e];if(l(i))return l(i.byteOffset)?(l(i.componentType)&&(t=Q.fromName(i.componentType)),Ose(this,e,t,n,this.featuresLength,i.byteOffset)):YDe(this,e,t,i)};kX.prototype.getProperty=function(e,t,n,i,o){let r=this.json[e];if(!l(r))return;let s=this.getPropertyArray(e,t,n);if(n===1)return s[i];for(let a=0;a<n;++a)o[a]=s[n*i+a];return o};var ih=kX;var bTn=_(T(),1);function UX(e){let t=e.count,n=e.batchTable,i=e.binaryBody,o=e.parseAsPropertyAttributes??!1,r=e.customAttributeOutput,s=zDe(n),a;l(s.jsonProperties)&&(a=new ab({count:t,properties:s.jsonProperties}));let c;l(s.hierarchy)&&(c=new $x({extension:s.hierarchy,binaryBody:i}));let d=Jm.BATCH_TABLE_CLASS_NAME,u=s.binaryProperties,h,p,g;if(o){let x=KDe(t,d,u,i,r);g=x.transcodedSchema,p=[new C_({propertyAttribute:x.propertyAttributeJson,class:x.transcodedClass})]}else{let x=HDe(t,d,u,i);g=x.transcodedSchema;let S=x.featureTableJson;h=new Pu({count:S.count,properties:S.properties,class:x.transcodedClass,bufferViews:x.bufferViewsTypedArrays}),p=[]}let f=[];if(l(h)||l(a)||l(c)){let x=new tl({id:0,name:"Batch Table",count:t,metadataTable:h,jsonMetadataTable:a,batchTableHierarchy:c});f.push(x)}let y={schema:g,propertyTables:f,propertyAttributes:p,extensions:s.extensions,extras:s.extras};return new Ys(y)}function zDe(e){let t=e.HIERARCHY,n=e.extras,i=e.extensions,o;l(t)?(UX._deprecationWarning("batchTableHierarchyExtension","The batch table HIERARCHY property has been moved to an extension. Use extensions.3DTILES_batch_table_hierarchy instead."),o=t):l(i)&&(o=i["3DTILES_batch_table_hierarchy"]);let r,s={};for(let a in e){if(!e.hasOwnProperty(a)||a==="HIERARCHY"||a==="extensions"||a==="extras")continue;let c=e[a];Array.isArray(c)?(r=l(r)?r:{},r[a]=c):s[a]=c}return{binaryProperties:s,jsonProperties:r,hierarchy:o,extras:n,extensions:i}}function HDe(e,t,n,i){let o={},r={},s={},a=0;for(let h in n){if(!n.hasOwnProperty(h))continue;if(!l(i))throw new ae(`Property ${h} requires a batch table binary.`);let p=n[h],g=Td(p);r[h]={bufferView:a},o[h]=Yse(p),s[a]=g.createArrayBufferView(i.buffer,i.byteOffset+p.byteOffset,e),a++}let c={classes:{}};c.classes[t]={properties:o};let d=Vd.fromJson(c);return{featureTableJson:{class:t,count:e,properties:r},bufferViewsTypedArrays:s,transcodedSchema:d,transcodedClass:d.classes[t]}}function KDe(e,t,n,i,o){let r={},s={},a=0;for(let h in n){if(!n.hasOwnProperty(h))continue;let p=n[h];if(!l(i)&&!l(p.typedArray))throw new ae(`Property ${h} requires a batch table binary.`);let g=Qt.sanitizeGlslIdentifier(h);(g===""||r.hasOwnProperty(g))&&(g=`property_${a}`,a++);let f=Yse(p);f.name=h,r[g]=f;let y=g.toUpperCase();y.startsWith("_")||(y=`_${y}`);let x=p.typedArray;l(x)||(x=Td(p).createArrayBufferView(i.buffer,i.byteOffset+p.byteOffset,e));let S=new Tn.Attribute;S.name=y,S.count=e,S.type=p.type;let C=Q.fromTypedArray(x);(C===Q.INT||C===Q.UNSIGNED_INT||C===Q.DOUBLE)&&(UX._oneTimeWarning("Cast pnts property to floats",`Point cloud property "${y}" will be cast to a float array because INT, UNSIGNED_INT, and DOUBLE are not valid WebGL vertex attribute types. Some precision may be lost.`),x=new Float32Array(x)),S.componentDatatype=Q.fromTypedArray(x),S.typedArray=x,o.push(S),s[g]={attribute:y}}let c={classes:{}};c.classes[t]={properties:r};let d=Vd.fromJson(c);return{class:t,propertyAttributeJson:{properties:s},transcodedSchema:d,transcodedClass:d.classes[t]}}function Yse(e){let t=JDe(e.componentType);return{type:e.type,componentType:t}}function JDe(e){switch(e){case"BYTE":return"INT8";case"UNSIGNED_BYTE":return"UINT8";case"SHORT":return"INT16";case"UNSIGNED_SHORT":return"UINT16";case"INT":return"INT32";case"UNSIGNED_INT":return"UINT32";case"FLOAT":return"FLOAT32";case"DOUBLE":return"FLOAT64"}}UX._deprecationWarning=Vs;UX._oneTimeWarning=_t;var mb=UX;var R_={UNLOADED:0,LOADING:1,PROCESSING:2,READY:3,FAILED:4},QDe=Tn.FeatureIdAttribute;function Sg(e){e=e??Y.EMPTY_OBJECT;let t=e.b3dmResource,n=e.baseResource,i=e.arrayBuffer,o=e.byteOffset??0,r=e.releaseGltfJson??!1,s=e.asynchronous??!0,a=e.incrementallyLoadTextures??!0,c=e.upAxis??Po.Y,d=e.forwardAxis??Po.X,u=e.loadAttributesAsTypedArray??!1,h=e.loadAttributesFor2D??!1,p=e.enablePick??!1,g=e.loadIndicesForWireframe??!1,f=e.loadPrimitiveOutline??!0,y=e.loadForClassification??!1;n=l(n)?n:t.clone(),this._b3dmResource=t,this._baseResource=n,this._arrayBuffer=i,this._byteOffset=o,this._releaseGltfJson=r,this._asynchronous=s,this._incrementallyLoadTextures=a,this._upAxis=c,this._forwardAxis=d,this._loadAttributesAsTypedArray=u,this._loadAttributesFor2D=h,this._enablePick=p,this._loadIndicesForWireframe=g,this._loadPrimitiveOutline=f,this._loadForClassification=y,this._state=R_.UNLOADED,this._promise=void 0,this._gltfLoader=void 0,this._batchLength=0,this._propertyTable=void 0,this._batchTable=void 0,this._components=void 0,this._transform=F.IDENTITY}l(Object.create)&&(Sg.prototype=Object.create(Ki.prototype),Sg.prototype.constructor=Sg);Object.defineProperties(Sg.prototype,{texturesLoaded:{get:function(){return this._gltfLoader?.texturesLoaded}},cacheKey:{get:function(){}},components:{get:function(){return this._components}}});Sg.prototype.load=function(){if(l(this._promise))return this._promise;let e=NX.parse(this._arrayBuffer,this._byteOffset),t=e.batchLength,n=e.featureTableJson,i=e.featureTableBinary,o=e.batchTableJson,r=e.batchTableBinary,s=new ih(n,i);t=s.getGlobalProperty("BATCH_LENGTH"),this._batchLength=t;let a=s.getGlobalProperty("RTC_CENTER",Q.FLOAT,3);l(a)&&(this._transform=F.fromTranslation(m.fromArray(a))),this._batchTable={json:o,binary:r};let c=new nh({typedArray:e.gltf,upAxis:this._upAxis,forwardAxis:this._forwardAxis,gltfResource:this._b3dmResource,baseResource:this._baseResource,releaseGltfJson:this._releaseGltfJson,incrementallyLoadTextures:this._incrementallyLoadTextures,loadAttributesAsTypedArray:this._loadAttributesAsTypedArray,loadAttributesFor2D:this._loadAttributesFor2D,enablePick:this._enablePick,loadIndicesForWireframe:this._loadIndicesForWireframe,loadPrimitiveOutline:this._loadPrimitiveOutline,loadForClassification:this._loadForClassification,renameBatchIdSemantic:!0});this._gltfLoader=c,this._state=R_.LOADING;let d=this;return this._promise=c.load().then(function(){if(!d.isDestroyed())return d._state=R_.PROCESSING,d}).catch(function(u){if(!d.isDestroyed())return jDe(d,u)}),this._promise};function jDe(e,t){return e.unload(),e._state=R_.FAILED,t=e.getError("Failed to load b3dm",t),Promise.reject(t)}Sg.prototype.process=function(e){if(this._state===R_.READY)return!0;if(this._state!==R_.PROCESSING||!this._gltfLoader.process(e))return!1;let n=this._gltfLoader.components;return n.transform=F.multiplyTransformation(this._transform,n.transform,n.transform),qDe(this,n),this._components=n,this._arrayBuffer=void 0,this._state=R_.READY,!0};function qDe(e,t){let n=e._batchTable,i=e._batchLength;if(i===0)return;let o;if(l(n.json))o=mb({count:i,batchTable:n.json,binaryBody:n.binary});else{let a=new tl({name:Jm.BATCH_TABLE_CLASS_NAME,count:i});o=new Ys({schema:{},propertyTables:[a]})}let r=t.scene.nodes,s=r.length;for(let a=0;a<s;a++)zse(r[a]);t.structuralMetadata=o}function zse(e){let t=e.children.length;for(let i=0;i<t;i++)zse(e.children[i]);let n=e.primitives.length;for(let i=0;i<n;i++){let o=e.primitives[i],r=Qt.getAttributeBySemantic(o,ft.FEATURE_ID);if(l(r)){r.setIndex=0;let s=new QDe;s.propertyTableId=0,s.setIndex=0,s.positionalLabel="featureId_0",o.featureIds.push(s)}}}Sg.prototype.unload=function(){l(this._gltfLoader)&&!this._gltfLoader.isDestroyed()&&this._gltfLoader.unload(),this._components=void 0,this._arrayBuffer=void 0};var DX=Sg;var iSn=_(T(),1);function Cg(e){e=e??Y.EMPTY_OBJECT,this._geoJson=e.geoJson,this._components=void 0}l(Object.create)&&(Cg.prototype=Object.create(Ki.prototype),Cg.prototype.constructor=Cg);Object.defineProperties(Cg.prototype,{cacheKey:{get:function(){}},components:{get:function(){return this._components}}});Cg.prototype.load=function(){return Promise.resolve(this)};Cg.prototype.process=function(e){return l(this._components)||(this._components=u3e(this._geoJson,e),this._geoJson=void 0),!0};function $De(){this.lines=void 0,this.points=void 0,this.properties=void 0}function e3e(){this.features=[]}function lH(e){let t=e[0],n=e[1],i=e[2]??0;return new m(t,n,i)}function dH(e){let t=e.length,n=new Array(t);for(let o=0;o<t;o++)n[o]=lH(e[o]);return[n]}function t3e(e){let t=e.length,n=new Array(t);for(let i=0;i<t;i++)n[i]=dH(e[i])[0];return n}function Hse(e){let t=e.length,n=new Array(t);for(let i=0;i<t;i++)n[i]=dH(e[i])[0];return n}function n3e(e){let t=e.length,n=[];for(let i=0;i<t;i++)Array.prototype.push.apply(n,Hse(e[i]));return n}function i3e(e){return[lH(e)]}function o3e(e){let t=e.length,n=new Array(t);for(let i=0;i<t;i++)n[i]=lH(e[i]);return n}var r3e={LineString:dH,MultiLineString:t3e,MultiPolygon:n3e,Polygon:Hse,MultiPoint:o3e,Point:i3e},s3e={LineString:we.LINES,MultiLineString:we.LINES,MultiPolygon:we.LINES,Polygon:we.LINES,MultiPoint:we.POINTS,Point:we.POINTS};function Kse(e,t){if(!l(e.geometry))return;let n=e.geometry.type,i=r3e[n],o=s3e[n],r=e.geometry.coordinates;if(!l(i)||!l(r))return;let s=new $De;o===we.LINES?s.lines=i(r):o===we.POINTS&&(s.points=i(r)),s.properties=e.properties,t.features.push(s)}function a3e(e,t){let n=e.features,i=n.length;for(let o=0;o<i;o++)Kse(n[o],t)}var c3e={FeatureCollection:a3e,Feature:Kse},z5=new m;function l3e(e,t,n){let i=0,o=0,r=e.length;for(let v=0;v<r;v++){let A=e[v];if(l(A.lines)){let b=A.lines.length;for(let R=0;R<b;R++){let G=A.lines[R];i+=G.length,o+=(G.length-1)*2}}}let s=new Float32Array(i*3),a=new Float32Array(i),c=Ae.createTypedArray(i,o),d=Ae.fromTypedArray(c),u=new m(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),h=new m(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY),p=0,g=0;for(let v=0;v<r;v++){let A=e[v];if(!l(A.lines))continue;let b=A.lines.length;for(let R=0;R<b;R++){let G=A.lines[R],I=G.length;for(let w=0;w<I;w++){let M=G[w],B=m.fromDegrees(M.x,M.y,M.z,ne.WGS84,z5),k=F.multiplyByPoint(t,B,z5);m.minimumByComponent(u,k,u),m.maximumByComponent(h,k,h),m.pack(k,s,p*3),a[p]=v,w<I-1&&(c[g*2]=p,c[g*2+1]=p+1,g++),p++}}}let f=xt.createVertexBuffer({typedArray:s,context:n.context,usage:Me.STATIC_DRAW});f.vertexArrayDestroyable=!1;let y=xt.createVertexBuffer({typedArray:a,context:n.context,usage:Me.STATIC_DRAW});y.vertexArrayDestroyable=!1;let x=xt.createIndexBuffer({typedArray:c,context:n.context,usage:Me.STATIC_DRAW,indexDatatype:d});x.vertexArrayDestroyable=!1;let S=new Tn.Attribute;S.semantic=ft.POSITION,S.componentDatatype=Q.FLOAT,S.type=on.VEC3,S.count=i,S.min=u,S.max=h,S.buffer=f;let C=new Tn.Attribute;C.semantic=ft.FEATURE_ID,C.setIndex=0,C.componentDatatype=Q.FLOAT,C.type=on.SCALAR,C.count=i,C.buffer=y;let V=[S,C],L=new Tn.Material;L.unlit=!0;let Z=new Tn.Indices;Z.indexDatatype=d,Z.count=c.length,Z.buffer=x;let E=new Tn.FeatureIdAttribute;E.featureCount=r,E.propertyTableId=0,E.setIndex=0,E.positionalLabel="featureId_0";let P=[E],W=new Tn.Primitive;return W.attributes=V,W.indices=Z,W.featureIds=P,W.primitiveType=we.LINES,W.material=L,W}function d3e(e,t,n){let i=0,o=e.length;for(let V=0;V<o;V++){let L=e[V];l(L.points)&&(i+=L.points.length)}let r=new Float32Array(i*3),s=new Float32Array(i),a=new m(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),c=new m(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY),d=0;for(let V=0;V<o;V++){let L=e[V];if(!l(L.points))continue;let Z=L.points.length;for(let E=0;E<Z;E++){let P=L.points[E],W=m.fromDegrees(P.x,P.y,P.z,ne.WGS84,z5),v=F.multiplyByPoint(t,W,z5);m.minimumByComponent(a,v,a),m.maximumByComponent(c,v,c),m.pack(v,r,d*3),s[d]=V,d++}}let u=xt.createVertexBuffer({typedArray:r,context:n.context,usage:Me.STATIC_DRAW});u.vertexArrayDestroyable=!1;let h=xt.createVertexBuffer({typedArray:s,context:n.context,usage:Me.STATIC_DRAW});h.vertexArrayDestroyable=!1;let p=new Tn.Attribute;p.semantic=ft.POSITION,p.componentDatatype=Q.FLOAT,p.type=on.VEC3,p.count=i,p.min=a,p.max=c,p.buffer=u;let g=new Tn.Attribute;g.semantic=ft.FEATURE_ID,g.setIndex=0,g.componentDatatype=Q.FLOAT,g.type=on.SCALAR,g.count=i,g.buffer=h;let f=[p,g],y=new Tn.Material;y.unlit=!0;let x=new Tn.FeatureIdAttribute;x.featureCount=o,x.propertyTableId=0,x.setIndex=0,x.positionalLabel="featureId_0";let S=[x],C=new Tn.Primitive;return C.attributes=f,C.featureIds=S,C.primitiveType=we.POINTS,C.material=y,C}function u3e(e,t){let n=new e3e,i=c3e[e.type];l(i)&&i(e,n);let o=n.features,r=o.length;if(r===0)throw new ae("GeoJSON must have at least one feature");let s={};for(let v=0;v<r;v++){let b=o[v].properties??Y.EMPTY_OBJECT;for(let R in b)b.hasOwnProperty(R)&&(l(s[R])||(s[R]=new Array(r)))}for(let v=0;v<r;v++){let A=o[v];for(let b in s)if(s.hasOwnProperty(b)){let R=A.properties[b]??"";s[b][v]=R}}let a=new ab({count:r,properties:s}),d=[new tl({id:0,count:r,jsonMetadataTable:a})],u=Vd.fromJson({}),h=new Ys({schema:u,propertyTables:d}),p=new m(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY),g=new m(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY),f=!1,y=!1;for(let v=0;v<r;v++){let A=o[v];if(l(A.lines)){f=!0;let b=A.lines.length;for(let R=0;R<b;R++){let G=A.lines[R],I=G.length;for(let w=0;w<I;w++)m.minimumByComponent(p,G[w],p),m.maximumByComponent(g,G[w],g)}}if(l(A.points)){y=!0;let b=A.points.length;for(let R=0;R<b;R++){let G=A.points[R];m.minimumByComponent(p,G,p),m.maximumByComponent(g,G,g)}}}let x=m.midpoint(p,g,new m),S=m.fromDegrees(x.x,x.y,x.z,ne.WGS84,new m),C=Pt.eastNorthUpToFixedFrame(S,ne.WGS84,new F),V=F.inverseTransformation(C,new F),L=[];f&&L.push(l3e(o,V,t)),y&&L.push(d3e(o,V,t));let Z=new Tn.Node;Z.index=0,Z.primitives=L;let E=[Z],P=new Tn.Scene;P.nodes=E;let W=new Tn.Components;return W.scene=P,W.nodes=E,W.transform=C,W.structuralMetadata=h,W}Cg.prototype.unload=function(){this._components=void 0};var BX=Cg;var MSn=_(T(),1);var cSn=_(T(),1);var H5={};H5._deprecationWarning=Vs;var Vg=Uint32Array.BYTES_PER_ELEMENT;H5.parse=function(e,t){let n=t??0;t=n;let i=new Uint8Array(e),o=new DataView(e);t+=Vg;let r=o.getUint32(t,!0);if(r!==1)throw new ae(`Only Instanced 3D Model version 1 is supported. Version ${r} is not.`);t+=Vg;let s=o.getUint32(t,!0);t+=Vg;let a=o.getUint32(t,!0);if(a===0)throw new ae("featureTableJsonByteLength is zero, the feature table must be defined.");t+=Vg;let c=o.getUint32(t,!0);t+=Vg;let d=o.getUint32(t,!0);t+=Vg;let u=o.getUint32(t,!0);t+=Vg;let h=o.getUint32(t,!0);if(h!==1&&h!==0)throw new ae(`Only glTF format 0 (uri) or 1 (embedded) are supported. Format ${h} is not.`);t+=Vg;let p=qo(i,t,a);t+=a;let g=new Uint8Array(e,t,c);t+=c;let f,y;d>0&&(f=qo(i,t,d),t+=d,u>0&&(y=new Uint8Array(e,t,u),y=new Uint8Array(y),t+=u));let x=n+s-t;if(x===0)throw new ae("glTF byte length must be greater than 0.");let S;return t%4===0?S=new Uint8Array(e,t,x):(H5._deprecationWarning("i3dm-glb-unaligned","The embedded glb is not aligned to a 4-byte boundary."),S=new Uint8Array(i.subarray(t,t+x))),{gltfFormat:h,featureTableJson:p,featureTableBinary:g,batchTableJson:f,batchTableBinary:y,gltf:S}};var OX=H5;var hb={NOT_LOADED:0,LOADING:1,PROCESSING:2,POST_PROCESSING:3,READY:4,FAILED:5,UNLOADED:6},K5=Tn.Attribute,m3e=Tn.FeatureIdAttribute,Qse=Tn.Instances;function fb(e){e=e??Y.EMPTY_OBJECT;let t=e.i3dmResource,n=e.arrayBuffer,i=e.baseResource,o=e.byteOffset??0,r=e.releaseGltfJson??!1,s=e.asynchronous??!0,a=e.incrementallyLoadTextures??!0,c=e.upAxis??Po.Y,d=e.forwardAxis??Po.X,u=e.loadAttributesAsTypedArray??!1,h=e.loadIndicesForWireframe??!1,p=e.loadPrimitiveOutline??!0,g=e.enablePick??!1;i=l(i)?i:t.clone(),this._i3dmResource=t,this._baseResource=i,this._arrayBuffer=n,this._byteOffset=o,this._releaseGltfJson=r,this._asynchronous=s,this._incrementallyLoadTextures=a,this._upAxis=c,this._forwardAxis=d,this._loadAttributesAsTypedArray=u,this._loadIndicesForWireframe=h,this._loadPrimitiveOutline=p,this._enablePick=g,this._state=hb.NOT_LOADED,this._promise=void 0,this._gltfLoader=void 0,this._buffers=[],this._components=void 0,this._transform=F.IDENTITY,this._batchTable=void 0,this._featureTable=void 0,this._instancesLength=0}l(Object.create)&&(fb.prototype=Object.create(Ki.prototype),fb.prototype.constructor=fb);Object.defineProperties(fb.prototype,{texturesLoaded:{get:function(){return this._gltfLoader?.texturesLoaded}},cacheKey:{get:function(){}},components:{get:function(){return this._components}}});fb.prototype.load=function(){if(l(this._promise))return this._promise;let e=OX.parse(this._arrayBuffer,this._byteOffset),t=e.featureTableJson,n=e.featureTableBinary,i=e.batchTableJson,o=e.batchTableBinary,r=e.gltfFormat,s=new ih(t,n);this._featureTable=s;let a=s.getGlobalProperty("INSTANCES_LENGTH");if(s.featuresLength=a,!l(a))throw new ae("Feature table global property: INSTANCES_LENGTH must be defined");this._instancesLength=a;let c=s.getGlobalProperty("RTC_CENTER",Q.FLOAT,3);l(c)&&(this._transform=F.fromTranslation(m.fromArray(c))),this._batchTable={json:i,binary:o};let d={upAxis:this._upAxis,forwardAxis:this._forwardAxis,releaseGltfJson:this._releaseGltfJson,incrementallyLoadTextures:this._incrementallyLoadTextures,loadAttributesAsTypedArray:this._loadAttributesAsTypedArray,enablePick:this._enablePick,loadIndicesForWireframe:this._loadIndicesForWireframe,loadPrimitiveOutline:this._loadPrimitiveOutline};if(r===0){let h=Pl(e.gltf);h=h.replace(/[\s\0]+$/,"");let p=this._baseResource.getDerivedResource({url:h});d.gltfResource=p,d.baseResource=p}else d.gltfResource=this._i3dmResource,d.typedArray=e.gltf;let u=new nh(d);return this._gltfLoader=u,this._state=hb.LOADING,this._promise=u.load().then(()=>{if(!this.isDestroyed())return this._state=hb.PROCESSING,this}).catch(h=>{if(!this.isDestroyed())throw h3e(this,h)}),this._promise};function h3e(e,t){return e.unload(),e._state=hb.FAILED,e.getError("Failed to load i3dm",t)}fb.prototype.process=function(e){if(this._state===hb.READY)return!0;let t=this._gltfLoader,n=!1;if(this._state===hb.PROCESSING&&(n=t.process(e)),!n)return!1;let i=t.components;return i.transform=F.multiplyTransformation(this._transform,i.transform,i.transform),b3e(this,i,e),f3e(this,i),this._components=i,this._arrayBuffer=void 0,this._state=hb.READY,!0};function f3e(e,t){let n=e._batchTable,i=e._instancesLength;if(i===0)return;let o;if(l(n.json))o=mb({count:i,batchTable:n.json,binaryBody:n.binary});else{let r=new tl({name:Jm.BATCH_TABLE_CLASS_NAME,count:i});o=new Ys({schema:{},propertyTables:[r]})}t.structuralMetadata=o}var J5=new m,uH=new Array(4),p3e=new F;function b3e(e,t,n){let i,o=e._featureTable,r=e._instancesLength;if(r===0)return;let s=o.getGlobalProperty("RTC_CENTER",Q.FLOAT,3),a=o.getGlobalProperty("EAST_NORTH_UP"),c=o.hasProperty("NORMAL_UP")||o.hasProperty("NORMAL_UP_OCT32P")||a,d=o.hasProperty("SCALE")||o.hasProperty("SCALE_NON_UNIFORM"),u=y3e(o,r),h;c&&(h=new Float32Array(4*r));let p;d&&(p=new Float32Array(3*r));let g=new Float32Array(r),f=m.unpackArray(u),y=new m,x=new m,S=new m,C=new m,V=new $,L=new ve,Z=new Array(4),E=new m,P=new Array(3),W=new F;if(!l(s)||m.equals(m.unpack(s),m.ZERO)){let k=le.fromPoints(f);for(i=0;i<f.length;i++)m.subtract(f[i],k.center,J5),u[3*i+0]=J5.x,u[3*i+1]=J5.y,u[3*i+2]=J5.z;let O=F.fromTranslation(k.center,p3e);t.transform=F.multiplyTransformation(O,t.transform,t.transform)}for(i=0;i<r;i++){y=m.clone(f[i]),l(s)&&m.add(y,m.unpack(s),y),c&&(x3e(o,a,i,L,y,S,x,C,V,W),ve.pack(L,Z,0),h[4*i+0]=Z[0],h[4*i+1]=Z[1],h[4*i+2]=Z[2],h[4*i+3]=Z[3]),d&&(_3e(o,i,E),m.pack(E,P,0),p[3*i+0]=P[0],p[3*i+1]=P[1],p[3*i+2]=P[2]);let k=o.getProperty("BATCH_ID",Q.UNSIGNED_SHORT,1,i);l(k)||(k=i),g[i]=k}let v=new Qse;v.transformInWorldSpace=!0;let A=e._buffers,b=new K5;if(b.name="Instance Translation",b.semantic=ts.TRANSLATION,b.componentDatatype=Q.FLOAT,b.type=on.VEC3,b.count=r,b.typedArray=u,!c){let k=xt.createVertexBuffer({context:n.context,typedArray:u,usage:Me.STATIC_DRAW});k.vertexArrayDestroyable=!1,A.push(k),b.buffer=k}if(v.attributes.push(b),c){let k=new K5;k.name="Instance Rotation",k.semantic=ts.ROTATION,k.componentDatatype=Q.FLOAT,k.type=on.VEC4,k.count=r,k.typedArray=h,v.attributes.push(k)}if(d){let k=new K5;if(k.name="Instance Scale",k.semantic=ts.SCALE,k.componentDatatype=Q.FLOAT,k.type=on.VEC3,k.count=r,c)k.typedArray=p;else{let O=xt.createVertexBuffer({context:n.context,typedArray:p,usage:Me.STATIC_DRAW});O.vertexArrayDestroyable=!1,A.push(O),k.buffer=O}v.attributes.push(k)}let R=new K5;R.name="Instance Feature ID",R.setIndex=0,R.semantic=ts.FEATURE_ID,R.componentDatatype=Q.FLOAT,R.type=on.SCALAR,R.count=r;let G=xt.createVertexBuffer({context:n.context,typedArray:g,usage:Me.STATIC_DRAW});G.vertexArrayDestroyable=!1,A.push(G),R.buffer=G,v.attributes.push(R);let I=new m3e;I.propertyTableId=0,I.setIndex=0,I.positionalLabel="instanceFeatureId_0",v.featureIds.push(I);let w=t.nodes,M=w.length,B=!1;for(i=0;i<M;i++){let k=w[i];k.primitives.length>0&&(k.instances=B?g3e(v):v,B=!0)}}function g3e(e){let t=new Qse;t.transformInWorldSpace=e.transformInWorldSpace;let n=e.attributes,i=n.length;for(let o=0;o<i;o++){let r=Ye(n[o],!1);t.attributes.push(r)}return t.featureIds=e.featureIds,t}function y3e(e,t){if(e.hasProperty("POSITION"))return e.getPropertyArray("POSITION",Q.FLOAT,3);if(e.hasProperty("POSITION_QUANTIZED")){let n=e.getPropertyArray("POSITION_QUANTIZED",Q.UNSIGNED_SHORT,3),i=e.getGlobalProperty("QUANTIZED_VOLUME_OFFSET",Q.FLOAT,3);if(!l(i))throw new ae("Global property: QUANTIZED_VOLUME_OFFSET must be defined for quantized positions.");let o=e.getGlobalProperty("QUANTIZED_VOLUME_SCALE",Q.FLOAT,3);if(!l(o))throw new ae("Global property: QUANTIZED_VOLUME_SCALE must be defined for quantized positions.");let r=new Float32Array(n.length);for(let s=0;s<n.length/3;s++)for(let a=0;a<3;a++){let c=3*s+a;r[c]=n[c]/65535*o[a]+i[a]}return r}else throw new ae("Either POSITION or POSITION_QUANTIZED must be defined for each instance.")}var Jse=new Array(4);function x3e(e,t,n,i,o,r,s,a,c,d){let u=e.getProperty("NORMAL_UP",Q.FLOAT,3,n,uH),h=e.getProperty("NORMAL_RIGHT",Q.FLOAT,3,n,Jse),p=!1;if(l(u)){if(!l(h))throw new ae("To define a custom orientation, both NORMAL_UP and NORMAL_RIGHT must be defined.");m.unpack(u,0,r),m.unpack(h,0,s),p=!0}else{let g=e.getProperty("NORMAL_UP_OCT32P",Q.UNSIGNED_SHORT,2,n,uH),f=e.getProperty("NORMAL_RIGHT_OCT32P",Q.UNSIGNED_SHORT,2,n,Jse);if(l(g)){if(!l(f))throw new ae("To define a custom orientation with oct-encoded vectors, both NORMAL_UP_OCT32P and NORMAL_RIGHT_OCT32P must be defined.");wn.octDecodeInRange(g[0],g[1],65535,r),wn.octDecodeInRange(f[0],f[1],65535,s),p=!0}else t?(Pt.eastNorthUpToFixedFrame(o,ne.WGS84,d),F.getMatrix3(d,c)):$.clone($.IDENTITY,c)}p&&(m.cross(s,r,a),m.normalize(a,a),$.setColumn(c,0,s,c),$.setColumn(c,1,r,c),$.setColumn(c,2,a,c)),ve.fromRotationMatrix(c,i)}function _3e(e,t,n){n=m.fromElements(1,1,1,n);let i=e.getProperty("SCALE",Q.FLOAT,1,t);l(i)&&m.multiplyByScalar(n,i,n);let o=e.getProperty("SCALE_NON_UNIFORM",Q.FLOAT,3,t,uH);l(o)&&(n.x*=o[0],n.y*=o[1],n.z*=o[2])}function T3e(e){let t=e._buffers,n=t.length;for(let i=0;i<n;i++){let o=t[i];o.isDestroyed()||o.destroy()}t.length=0}fb.prototype.isUnloaded=function(){return this._state===hb.UNLOADED};fb.prototype.unload=function(){l(this._gltfLoader)&&!this._gltfLoader.isDestroyed()&&this._gltfLoader.unload(),T3e(this),this._components=void 0,this._arrayBuffer=void 0,this._state=hb.UNLOADED};var YX=fb;var n1n=_(T(),1);var zCn=_(T(),1);var kSn=_(T(),1),S3e={STOPPED:0,ANIMATING:1},oh=Object.freeze(S3e);var MCn=_(T(),1);var JSn=_(T(),1);var zSn=_(T(),1);function KC(){this.times=void 0,this.points=void 0,pe.throwInstantiationError()}KC.getPointType=function(e){if(typeof e=="number")return Number;if(e instanceof m)return m;if(e instanceof ve)return ve};KC.prototype.evaluate=pe.throwInstantiationError;KC.prototype.findTimeInterval=function(e,t){let n=this.times,i=n.length;if(t=t??0,e>=n[t]){if(t+1<i&&e<n[t+1])return t;if(t+2<i&&e<n[t+2])return t+1}else if(t-1>=0&&e>=n[t-1])return t-1;let o;if(e>n[t])for(o=t;o<i-1&&!(e>=n[o]&&e<n[o+1]);++o);else for(o=t-1;o>=0&&!(e>=n[o]&&e<n[o+1]);--o);return o===i-1&&(o=i-2),o};KC.prototype.wrapTime=function(e){let t=this.times,n=t[t.length-1],i=t[0],o=n-i,r;return e<i&&(r=Math.floor((i-e)/o)+1,e+=r*o),e>n&&(r=Math.floor((e-n)/o)+1,e-=r*o),e};KC.prototype.clampTime=function(e){let t=this.times;return X.clamp(e,t[0],t[t.length-1])};var io=KC;function JC(e){this._value=e,this._valueType=io.getPointType(e)}Object.defineProperties(JC.prototype,{value:{get:function(){return this._value}}});JC.prototype.findTimeInterval=function(e){};JC.prototype.wrapTime=function(e){return 0};JC.prototype.clampTime=function(e){return 0};JC.prototype.evaluate=function(e,t){let n=this._value,i=this._valueType;return i===Number?n:i.clone(n,t)};var zX=JC;var fCn=_(T(),1);var tCn=_(T(),1);function QC(e){e=e??Y.EMPTY_OBJECT;let t=e.points,n=e.times;this._times=n,this._points=t,this._pointType=io.getPointType(t[0]),this._lastTimeIndex=0}Object.defineProperties(QC.prototype,{times:{get:function(){return this._times}},points:{get:function(){return this._points}}});QC.prototype.findTimeInterval=io.prototype.findTimeInterval;QC.prototype.wrapTime=io.prototype.wrapTime;QC.prototype.clampTime=io.prototype.clampTime;QC.prototype.evaluate=function(e,t){let n=this.points,i=this.times,o=this._lastTimeIndex=this.findTimeInterval(e,this._lastTimeIndex),r=(e-i[o])/(i[o+1]-i[o]);return this._pointType===Number?(1-r)*n[o]+r*n[o+1]:(l(t)||(t=new m),m.lerp(n[o],n[o+1],r,t))};var Lg=QC;var oCn=_(T(),1);var jse={};jse.solve=function(e,t,n,i){let o=new Array(n.length),r=new Array(i.length),s=new Array(i.length),a;for(a=0;a<r.length;a++)r[a]=new m,s[a]=new m;o[0]=n[0]/t[0],r[0]=m.multiplyByScalar(i[0],1/t[0],r[0]);let c;for(a=1;a<o.length;++a)c=1/(t[a]-o[a-1]*e[a-1]),o[a]=n[a]*c,r[a]=m.subtract(i[a],m.multiplyByScalar(r[a-1],e[a-1],r[a]),r[a]),r[a]=m.multiplyByScalar(r[a],c,r[a]);for(c=1/(t[a]-o[a-1]*e[a-1]),r[a]=m.subtract(i[a],m.multiplyByScalar(r[a-1],e[a-1],r[a]),r[a]),r[a]=m.multiplyByScalar(r[a],c,r[a]),s[s.length-1]=r[r.length-1],a=s.length-2;a>=0;--a)s[a]=m.subtract(r[a],m.multiplyByScalar(s[a+1],o[a],s[a]),s[a]);return s};var jC=jse;var qse=[],$se=[],eae=[],tae=[];function C3e(e,t,n){let i=qse,o=eae,r=$se,s=tae;i.length=o.length=e.length-1,r.length=s.length=e.length;let a;i[0]=r[0]=1,o[0]=0;let c=s[0];for(l(c)||(c=s[0]=new m),m.clone(t,c),a=1;a<i.length-1;++a)i[a]=o[a]=1,r[a]=4,c=s[a],l(c)||(c=s[a]=new m),m.subtract(e[a+1],e[a-1],c),m.multiplyByScalar(c,3,c);return i[a]=0,o[a]=1,r[a]=4,c=s[a],l(c)||(c=s[a]=new m),m.subtract(e[a+1],e[a-1],c),m.multiplyByScalar(c,3,c),r[a+1]=1,c=s[a+1],l(c)||(c=s[a+1]=new m),m.clone(n,c),jC.solve(i,r,o,s)}function V3e(e){let t=qse,n=eae,i=$se,o=tae;t.length=n.length=e.length-1,i.length=o.length=e.length;let r;t[0]=n[0]=1,i[0]=2;let s=o[0];for(l(s)||(s=o[0]=new m),m.subtract(e[1],e[0],s),m.multiplyByScalar(s,3,s),r=1;r<t.length;++r)t[r]=n[r]=1,i[r]=4,s=o[r],l(s)||(s=o[r]=new m),m.subtract(e[r+1],e[r-1],s),m.multiplyByScalar(s,3,s);return i[r]=2,s=o[r],l(s)||(s=o[r]=new m),m.subtract(e[r],e[r-1],s),m.multiplyByScalar(s,3,s),jC.solve(t,i,n,o)}function kl(e){e=e??Y.EMPTY_OBJECT;let t=e.points,n=e.times,i=e.inTangents,o=e.outTangents;this._times=n,this._points=t,this._pointType=io.getPointType(t[0]),this._inTangents=i,this._outTangents=o,this._lastTimeIndex=0}Object.defineProperties(kl.prototype,{times:{get:function(){return this._times}},points:{get:function(){return this._points}},inTangents:{get:function(){return this._inTangents}},outTangents:{get:function(){return this._outTangents}}});kl.createC1=function(e){e=e??Y.EMPTY_OBJECT;let t=e.times,n=e.points,i=e.tangents,o=i.slice(0,i.length-1),r=i.slice(1,i.length);return new kl({times:t,points:n,inTangents:r,outTangents:o})};kl.createNaturalCubic=function(e){e=e??Y.EMPTY_OBJECT;let t=e.times,n=e.points;if(n.length<3)return new Lg({points:n,times:t});let i=V3e(n),o=i.slice(0,i.length-1),r=i.slice(1,i.length);return new kl({times:t,points:n,inTangents:r,outTangents:o})};kl.createClampedCubic=function(e){e=e??Y.EMPTY_OBJECT;let t=e.times,n=e.points,i=e.firstTangent,o=e.lastTangent,r=io.getPointType(n[0]);if(n.length<3)return new Lg({points:n,times:t});let s=C3e(n,i,o),a=s.slice(0,s.length-1),c=s.slice(1,s.length);return new kl({times:t,points:n,inTangents:c,outTangents:a})};kl.hermiteCoefficientMatrix=new F(2,-3,0,1,-2,3,0,0,1,-2,1,0,1,-1,0,0);kl.prototype.findTimeInterval=io.prototype.findTimeInterval;var L3e=new se,qC=new m;kl.prototype.wrapTime=io.prototype.wrapTime;kl.prototype.clampTime=io.prototype.clampTime;kl.prototype.evaluate=function(e,t){let n=this.points,i=this.times,o=this.inTangents,r=this.outTangents;this._lastTimeIndex=this.findTimeInterval(e,this._lastTimeIndex);let s=this._lastTimeIndex,a=i[s+1]-i[s],c=(e-i[s])/a,d=L3e;d.z=c,d.y=c*c,d.x=d.y*c,d.w=1;let u=F.multiplyByVector(kl.hermiteCoefficientMatrix,d,d);u.z*=a,u.w*=a;let h=this._pointType;return h===Number?n[s]*u.x+n[s+1]*u.y+r[s]*u.z+o[s]*u.w:(l(t)||(t=new h),t=h.multiplyByScalar(n[s],u.x,t),h.multiplyByScalar(n[s+1],u.y,qC),h.add(t,qC,t),h.multiplyByScalar(r[s],u.z,qC),h.add(t,qC,t),h.multiplyByScalar(o[s],u.w,qC),h.add(t,qC,t))};var Rg=kl;var xCn=_(T(),1);function $C(e){e=e??Y.EMPTY_OBJECT;let t=e.points,n=e.times;this._times=n,this._points=t,this._pointType=io.getPointType(t[0]),this._lastTimeIndex=0}Object.defineProperties($C.prototype,{times:{get:function(){return this._times}},points:{get:function(){return this._points}}});$C.prototype.findTimeInterval=io.prototype.findTimeInterval;$C.prototype.wrapTime=io.prototype.wrapTime;$C.prototype.clampTime=io.prototype.clampTime;$C.prototype.evaluate=function(e,t){let n=this.points;this._lastTimeIndex=this.findTimeInterval(e,this._lastTimeIndex);let i=this._lastTimeIndex,o=this._pointType;return o===Number?n[i]:(l(t)||(t=new o),o.clone(n[i],t))};var HX=$C;var LCn=_(T(),1);function R3e(e){let t=e.points,n=e.times;return function(i,o){l(o)||(o=new ve);let r=e._lastTimeIndex=e.findTimeInterval(i,e._lastTimeIndex),s=(i-n[r])/(n[r+1]-n[r]),a=t[r],c=t[r+1];return ve.fastSlerp(a,c,s,o)}}function e1(e){e=e??Y.EMPTY_OBJECT;let t=e.points,n=e.times;this._times=n,this._points=t,this._evaluateFunction=R3e(this),this._lastTimeIndex=0}Object.defineProperties(e1.prototype,{times:{get:function(){return this._times}},points:{get:function(){return this._points}}});e1.prototype.findTimeInterval=io.prototype.findTimeInterval;e1.prototype.wrapTime=io.prototype.wrapTime;e1.prototype.clampTime=io.prototype.clampTime;e1.prototype.evaluate=function(e,t){return this._evaluateFunction(e,t)};var KX=e1;var t1=Tn.AnimatedPropertyType;function mH(e){e=e??Y.EMPTY_OBJECT;let t=e.channel,n=e.runtimeAnimation,i=e.runtimeNode;this._channel=t,this._runtimeAnimation=n,this._runtimeNode=i,this._splines=[],this._path=void 0,X3e(this)}Object.defineProperties(mH.prototype,{channel:{get:function(){return this._channel}},runtimeAnimation:{get:function(){return this._runtimeAnimation}},runtimeNode:{get:function(){return this._runtimeNode}},splines:{get:function(){return this._splines}}});function Z3e(e,t){let n=[],i=[],o=[],r=t.length;for(let s=0;s<r;s+=3)i.push(t[s]),n.push(t[s+1]),o.push(t[s+2]);return i.splice(0,1),o.length=o.length-1,new Rg({times:e,points:n,inTangents:i,outTangents:o})}function nae(e,t,n,i){if(e.length===1&&t.length===1)return new zX(t[0]);switch(n){case eh.STEP:return new HX({times:e,points:t});case eh.CUBICSPLINE:return Z3e(e,t);case eh.LINEAR:return i===t1.ROTATION?new KX({times:e,points:t}):new Lg({times:e,points:t})}}function G3e(e,t,n,i,o){let r=[];if(i===t1.WEIGHTS){let a=t.length/o,c,d;for(c=0;c<o;c++){let u=new Array(a),h=c;if(n===eh.CUBICSPLINE)for(d=0;d<a;d+=3)u[d]=t[h],u[d+1]=t[h+o],u[d+2]=t[h+2*o],h+=o*3;else for(d=0;d<a;d++)u[d]=t[h],h+=o;r.push(nae(e,u,n,i))}}else r.push(nae(e,t,n,i));return r}var E3e=new m,I3e=new ve;function X3e(e){let t=e._channel,n=t.sampler,i=n.input,o=n.output,r=n.interpolation,a=t.target.path,c=e._runtimeNode,d=l(c.morphWeights)?c.morphWeights.length:1,u=G3e(i,o,r,a,d);e._splines=u,e._path=a}mH.prototype.animate=function(e){let t=this._splines,n=this._path,i=this._runtimeAnimation.model,o=this._runtimeNode;if(n===t1.WEIGHTS){let r=o.morphWeights,s=r.length;for(let a=0;a<s;a++){let c=t[a],d=i.clampAnimations?c.clampTime(e):c.wrapTime(e);r[a]=c.evaluate(d)}}else{if(o.userAnimated)return;{let r=t[0],s=i.clampAnimations?r.clampTime(e):r.wrapTime(e);n===t1.TRANSLATION||n===t1.SCALE?o[n]=r.evaluate(s,E3e):n===t1.ROTATION&&(o[n]=r.evaluate(s,I3e))}}};var JX=mH;function hH(e,t,n){this._animation=t,this._name=t.name,this._runtimeChannels=void 0,this._startTime=q.clone(n.startTime),this._delay=n.delay??0,this._stopTime=q.clone(n.stopTime),this.removeOnStop=n.removeOnStop??!1,this._multiplier=n.multiplier??1,this._reverse=n.reverse??!1,this._loop=n.loop??Nl.NONE,this._animationTime=n.animationTime,this._prevAnimationDelta=void 0,this.start=new be,this.update=new be,this.stop=new be,this._state=oh.STOPPED,this._computedStartTime=void 0,this._duration=void 0;let i=this;this._raiseStartEvent=function(){i.start.raiseEvent(e,i)},this._updateEventTime=0,this._raiseUpdateEvent=function(){i.update.raiseEvent(e,i,i._updateEventTime)},this._raiseStopEvent=function(){i.stop.raiseEvent(e,i)},this._model=e,this._localStartTime=void 0,this._localStopTime=void 0,W3e(this)}Object.defineProperties(hH.prototype,{animation:{get:function(){return this._animation}},name:{get:function(){return this._name}},runtimeChannels:{get:function(){return this._runtimeChannels}},model:{get:function(){return this._model}},localStartTime:{get:function(){return this._localStartTime}},localStopTime:{get:function(){return this._localStopTime}},startTime:{get:function(){return this._startTime}},delay:{get:function(){return this._delay}},stopTime:{get:function(){return this._stopTime}},multiplier:{get:function(){return this._multiplier}},reverse:{get:function(){return this._reverse}},loop:{get:function(){return this._loop}},animationTime:{get:function(){return this._animationTime}}});function W3e(e){let t=Number.MAX_VALUE,n=-Number.MAX_VALUE,i=e._model.sceneGraph,r=e._animation.channels,s=r.length,a=[];for(let c=0;c<s;c++){let d=r[c],u=d.target;if(!l(u))continue;let h=u.node.index,p=i._runtimeNodes[h],g=new JX({channel:d,runtimeAnimation:e,runtimeNode:p}),f=d.sampler.input;t=Math.min(t,f[0]),n=Math.max(n,f[f.length-1]),a.push(g)}e._runtimeChannels=a,e._localStartTime=t,e._localStopTime=n}hH.prototype.animate=function(e){let t=this._runtimeChannels,n=t.length;for(let i=0;i<n;i++)t[i].animate(e)};var QX=hH;function pb(e){this.animationAdded=new be,this.animationRemoved=new be,this.animateWhilePaused=!1,this._model=e,this._runtimeAnimations=[],this._previousTime=void 0}Object.defineProperties(pb.prototype,{length:{get:function(){return this._runtimeAnimations.length}},model:{get:function(){return this._model}}});function fH(e,t,n){let i=e._model,o=new QX(i,t,n);return e._runtimeAnimations.push(o),e.animationAdded.raiseEvent(i,o),o}pb.prototype.add=function(e){e=e??Y.EMPTY_OBJECT;let n=this._model.sceneGraph.components.animations,i=e.index;if(l(i))return fH(this,n[i],e);let o=n.length;for(let r=0;r<o;++r)if(n[r].name===e.name){i=r;break}return fH(this,n[i],e)};pb.prototype.addAll=function(e){e=e??Y.EMPTY_OBJECT;let n=this._model.sceneGraph.components.animations,i=[],o=n.length;for(let r=0;r<o;++r){let s=fH(this,n[r],e);i.push(s)}return i};pb.prototype.remove=function(e){if(!l(e))return!1;let t=this._runtimeAnimations,n=t.indexOf(e);return n!==-1?(t.splice(n,1),this.animationRemoved.raiseEvent(this._model,e),!0):!1};pb.prototype.removeAll=function(){let e=this._model,t=this._runtimeAnimations,n=t.length;this._runtimeAnimations.length=0;for(let i=0;i<n;++i)this.animationRemoved.raiseEvent(e,t[i])};pb.prototype.contains=function(e){return l(e)?this._runtimeAnimations.indexOf(e)!==-1:!1};pb.prototype.get=function(e){return this._runtimeAnimations[e]};var Q5=[];function P3e(e,t,n){return function(){e.animationRemoved.raiseEvent(t,n)}}pb.prototype.update=function(e){let t=this._runtimeAnimations,n=t.length;if(n===0)return this._previousTime=void 0,!1;if(!this.animateWhilePaused&&q.equals(e.time,this._previousTime))return!1;this._previousTime=q.clone(e.time,this._previousTime);let i=!1,o=e.time,r=this._model;for(let s=0;s<n;++s){let a=t[s];l(a._computedStartTime)||(a._computedStartTime=q.addSeconds(a.startTime??o,a.delay,new q)),l(a._duration)||(a._duration=a.localStopTime*(1/a.multiplier));let c=a._computedStartTime,d=a._duration,u=a.stopTime,h=q.lessThanOrEquals(c,o),p=l(u)&&q.greaterThan(o,u),g=0;if(d!==0){let x=q.secondsDifference(p?u:o,c);g=l(a._animationTime)?a._animationTime(d,x):x/d}let f=a.loop===Nl.REPEAT||a.loop===Nl.MIRRORED_REPEAT,y=(h||f&&!l(a.startTime))&&(g<=1||f)&&!p;if(g===a._prevAnimationDelta){let x=a._state===oh.STOPPED;if(y!==x)continue}if(a._prevAnimationDelta=g,y||a._state===oh.ANIMATING){if(y&&a._state===oh.STOPPED&&(a._state=oh.ANIMATING,a.start.numberOfListeners>0&&e.afterRender.push(a._raiseStartEvent)),a.loop===Nl.REPEAT)g=g-Math.floor(g);else if(a.loop===Nl.MIRRORED_REPEAT){let S=Math.floor(g),C=g-S;g=S%2===1?1-C:C}a.reverse&&(g=1-g);let x=g*d*a.multiplier;x=X.clamp(x,a.localStartTime,a.localStopTime),a.animate(x),a.update.numberOfListeners>0&&(a._updateEventTime=x,e.afterRender.push(a._raiseUpdateEvent)),i=!0,y||(a._state=oh.STOPPED,a.stop.numberOfListeners>0&&e.afterRender.push(a._raiseStopEvent),a.removeOnStop&&Q5.push(a))}}n=Q5.length;for(let s=0;s<n;++s){let a=Q5[s];t.splice(t.indexOf(a),1),e.afterRender.push(P3e(this,r,a))}return Q5.length=0,i};var jX=pb;var _1n=_(T(),1);var s1n=_(T(),1);function Z_(e){this._model=e.model,this._featureTable=e.featureTable,this._featureId=e.featureId,this._color=void 0}Object.defineProperties(Z_.prototype,{show:{get:function(){return this._featureTable.getShow(this._featureId)},set:function(e){this._featureTable.setShow(this._featureId,e)}},color:{get:function(){return l(this._color)||(this._color=new D),this._featureTable.getColor(this._featureId,this._color)},set:function(e){this._featureTable.setColor(this._featureId,e)}},primitive:{get:function(){return this._model}},featureTable:{get:function(){return this._featureTable}},featureId:{get:function(){return this._featureId}}});Z_.prototype.hasProperty=function(e){return this._featureTable.hasProperty(this._featureId,e)};Z_.prototype.getProperty=function(e){return this._featureTable.getProperty(this._featureId,e)};Z_.prototype.getPropertyInherited=function(e){return this._featureTable.hasPropertyBySemantic(this._featureId,e)?this._featureTable.getPropertyBySemantic(this._featureId,e):this._featureTable.getProperty(this._featureId,e)};Z_.prototype.getPropertyIds=function(e){return this._featureTable.getPropertyIds(e)};Z_.prototype.setProperty=function(e,t){return this._featureTable.setProperty(this._featureId,e,t)};var qX=Z_;var c1n=_(T(),1),$X={ALL_OPAQUE:0,ALL_TRANSLUCENT:1,OPAQUE_AND_TRANSLUCENT:2};$X.getStyleCommandsNeeded=function(e,t){return t===0?$X.ALL_OPAQUE:t===e?$X.ALL_TRANSLUCENT:$X.OPAQUE_AND_TRANSLUCENT};var rh=Object.freeze($X);var d1n=_(T(),1);var Zg={GLTF:"GLTF",TILE_GLTF:"TILE_GLTF",TILE_B3DM:"B3DM",TILE_I3DM:"I3DM",TILE_PNTS:"PNTS",TILE_GEOJSON:"TILE_GEOJSON"};Zg.is3DTiles=function(e){switch(e){case Zg.TILE_GLTF:case Zg.TILE_B3DM:case Zg.TILE_I3DM:case Zg.TILE_PNTS:case Zg.TILE_GEOJSON:return!0;case Zg.GLTF:return!1}};var cr=Object.freeze(Zg);function Mr(e){let t=e.model,n=e.propertyTable;this._propertyTable=n,this._model=t,this._features=void 0,this._featuresLength=0,this._batchTexture=void 0,this._styleCommandsNeededDirty=!1,this._styleCommandsNeeded=rh.ALL_OPAQUE,v3e(this)}Object.defineProperties(Mr.prototype,{batchTexture:{get:function(){return this._batchTexture}},featuresLength:{get:function(){return this._featuresLength}},batchTextureByteLength:{get:function(){return l(this._batchTexture)?this._batchTexture.byteLength:0}},styleCommandsNeededDirty:{get:function(){return this._styleCommandsNeededDirty}}});function v3e(e){let t=e._model,n=cr.is3DTiles(t.type),i=e._propertyTable.count;if(i===0)return;let o,r=new Array(i);if(n){let s=t.content;for(o=0;o<i;o++)r[o]=new Bs(s,o)}else for(o=0;o<i;o++)r[o]=new qX({model:t,featureId:o,featureTable:e});e._features=r,e._featuresLength=i,e._batchTexture=new $c({featuresLength:i,owner:e,statistics:n?t.content.tileset.statistics:void 0})}Mr.prototype.update=function(e){this._styleCommandsNeededDirty=!1,this._batchTexture.update(void 0,e);let t=rh.getStyleCommandsNeeded(this._featuresLength,this._batchTexture.translucentFeaturesLength);this._styleCommandsNeeded!==t&&(this._styleCommandsNeededDirty=!0,this._styleCommandsNeeded=t)};Mr.prototype.setShow=function(e,t){this._batchTexture.setShow(e,t)};Mr.prototype.setAllShow=function(e){this._batchTexture.setAllShow(e)};Mr.prototype.getShow=function(e){return this._batchTexture.getShow(e)};Mr.prototype.setColor=function(e,t){this._batchTexture.setColor(e,t)};Mr.prototype.setAllColor=function(e){this._batchTexture.setAllColor(e)};Mr.prototype.getColor=function(e,t){return this._batchTexture.getColor(e,t)};Mr.prototype.getPickColor=function(e){return this._batchTexture.getPickColor(e)};Mr.prototype.getFeature=function(e){return this._features[e]};Mr.prototype.hasProperty=function(e,t){return this._propertyTable.hasProperty(e,t)};Mr.prototype.hasPropertyBySemantic=function(e,t){return this._propertyTable.hasPropertyBySemantic(e,t)};Mr.prototype.getProperty=function(e,t){return this._propertyTable.getProperty(e,t)};Mr.prototype.getPropertyBySemantic=function(e,t){return this._propertyTable.getPropertyBySemantic(e,t)};Mr.prototype.getPropertyIds=function(e){return this._propertyTable.getPropertyIds(e)};Mr.prototype.setProperty=function(e,t,n){return this._propertyTable.setProperty(e,t,n)};Mr.prototype.isClass=function(e,t){return this._propertyTable.isClass(e,t)};Mr.prototype.isExactClass=function(e,t){return this._propertyTable.isExactClass(e,t)};Mr.prototype.getExactClassName=function(e){return this._propertyTable.getExactClassName(e)};var w3e=new D;Mr.prototype.applyStyle=function(e){if(!l(e)){this.setAllColor($c.DEFAULT_COLOR_VALUE),this.setAllShow($c.DEFAULT_SHOW_VALUE);return}for(let t=0;t<this._featuresLength;t++){let n=this.getFeature(t),i=l(e.color)?e.color.evaluateColor(n,w3e)??$c.DEFAULT_COLOR_VALUE:$c.DEFAULT_COLOR_VALUE,o=l(e.show)?e.show.evaluate(n)??$c.DEFAULT_SHOW_VALUE:$c.DEFAULT_SHOW_VALUE;this.setColor(t,i),this.setShow(t,o)}};Mr.prototype.isDestroyed=function(){return!1};Mr.prototype.destroy=function(e){this._batchTexture=this._batchTexture&&this._batchTexture.destroy(),me(this)};var eW=Mr;var cPn=_(T(),1);var R1n=_(T(),1);var iae={name:"TilesetPipelineStage"};iae.process=function(e,t,n){if(t.hasSkipLevelOfDetail(n)){e.shaderBuilder.addDefine("POLYGON_OFFSET",void 0,ye.FRAGMENT);let r={u_polygonOffset:function(){return U.ZERO}};e.uniformMap=St(r,e.uniformMap),e.hasSkipLevelOfDetail=!0}let i=e.renderStateOptions;i.stencilTest=Ut.setCesium3DTileBit(),i.stencilMask=Ut.CESIUM_3D_TILE_MASK};var tW=iae;var A1n=_(T(),1);var G1n=_(T(),1),nW=`// robust iterative solution without trig functions // https://github.com/0xfaded/ellipse_demo/issues/1 // https://stackoverflow.com/questions/22959698/distance-from-given-point-to-given-ellipse // // This version uses only a single iteration for best performance. For fog // rendering, the difference is negligible. vec2 nearestPointOnEllipseFast(vec2 pos, vec2 radii) { vec2 p = abs(pos); vec2 inverseRadii = 1.0 / radii; vec2 evoluteScale = (radii.x * radii.x - radii.y * radii.y) * vec2(1.0, -1.0) * inverseRadii; // We describe the ellipse parametrically: v = radii * vec2(cos(t), sin(t)) // but store the cos and sin of t in a vec2 for efficiency. // Initial guess: t = cos(pi/4) vec2 tTrigs = vec2(0.70710678118); vec2 v = radii * tTrigs; // Find the evolute of the ellipse (center of curvature) at v. vec2 evolute = evoluteScale * tTrigs * tTrigs * tTrigs; // Find the (approximate) intersection of p - evolute with the ellipsoid. vec2 q = normalize(p - evolute) * length(v - evolute); // Update the estimate of t. tTrigs = (q + evolute) * inverseRadii; tTrigs = normalize(clamp(tTrigs, 0.0, 1.0)); v = radii * tTrigs; return v * sign(pos); } vec3 computeEllipsoidPositionWC(vec3 positionMC) { // Get the world-space position and project onto a meridian plane of // the ellipsoid vec3 positionWC = (czm_model * vec4(positionMC, 1.0)).xyz; vec2 positionEllipse = vec2(length(positionWC.xy), positionWC.z); vec2 nearestPoint = nearestPointOnEllipseFast(positionEllipse, czm_ellipsoidRadii.xz); // Reconstruct a 3D point in world space return vec3(nearestPoint.x * normalize(positionWC.xy), nearestPoint.y); } void applyFog(inout vec4 color, vec4 groundAtmosphereColor, vec3 lightDirection, float distanceToCamera) { vec3 fogColor = groundAtmosphereColor.rgb; // If there is dynamic lighting, apply that to the fog. const float NONE = 0.0; if (czm_atmosphereDynamicLighting != NONE) { float darken = clamp(dot(normalize(czm_viewerPositionWC), lightDirection), czm_fogMinimumBrightness, 1.0); fogColor *= darken; } // Tonemap if HDR rendering is disabled #ifndef HDR fogColor.rgb = czm_pbrNeutralTonemapping(fogColor.rgb); fogColor.rgb = czm_inverseGamma(fogColor.rgb); #endif vec3 withFog = czm_fog(distanceToCamera, color.rgb, fogColor, czm_fogVisualDensityScalar); color = vec4(withFog, color.a); } void atmosphereStage(inout vec4 color, in ProcessedAttributes attributes) { vec3 rayleighColor; vec3 mieColor; float opacity; vec3 positionWC; vec3 lightDirection; // When the camera is in space, compute the position per-fragment for // more accurate ground atmosphere. All other cases will use // // The if condition will be added in https://github.com/CesiumGS/cesium/issues/11717 if (false) { positionWC = computeEllipsoidPositionWC(attributes.positionMC); lightDirection = czm_getDynamicAtmosphereLightDirection(positionWC, czm_atmosphereDynamicLighting); // The fog color is derived from the ground atmosphere color czm_computeGroundAtmosphereScattering( positionWC, lightDirection, rayleighColor, mieColor, opacity ); } else { positionWC = attributes.positionWC; lightDirection = czm_getDynamicAtmosphereLightDirection(positionWC, czm_atmosphereDynamicLighting); rayleighColor = v_atmosphereRayleighColor; mieColor = v_atmosphereMieColor; opacity = v_atmosphereOpacity; } //color correct rayleigh and mie colors const bool ignoreBlackPixels = true; rayleighColor = czm_applyHSBShift(rayleighColor, czm_atmosphereHsbShift, ignoreBlackPixels); mieColor = czm_applyHSBShift(mieColor, czm_atmosphereHsbShift, ignoreBlackPixels); vec4 groundAtmosphereColor = czm_computeAtmosphereColor(positionWC, lightDirection, rayleighColor, mieColor, opacity); if (u_isInFog) { float distanceToCamera = length(attributes.positionEC); applyFog(color, groundAtmosphereColor, lightDirection, distanceToCamera); } else { // Ground atmosphere } } `;var I1n=_(T(),1),iW=`void atmosphereStage(ProcessedAttributes attributes) { vec3 lightDirection = czm_getDynamicAtmosphereLightDirection(v_positionWC, czm_atmosphereDynamicLighting); czm_computeGroundAtmosphereScattering( // This assumes the geometry stage came before this. v_positionWC, lightDirection, v_atmosphereRayleighColor, v_atmosphereMieColor, v_atmosphereOpacity ); } `;var oae={name:"AtmospherePipelineStage"};oae.process=function(e,t,n){let i=e.shaderBuilder;i.addDefine("HAS_ATMOSPHERE",void 0,ye.BOTH),i.addDefine("COMPUTE_POSITION_WC_ATMOSPHERE",void 0,ye.BOTH),i.addVarying("vec3","v_atmosphereRayleighColor"),i.addVarying("vec3","v_atmosphereMieColor"),i.addVarying("float","v_atmosphereOpacity"),i.addVertexLines([iW]),i.addFragmentLines([nW]),i.addUniform("bool","u_isInFog",ye.FRAGMENT),e.uniformMap.u_isInFog=function(){let o=m.distance(n.camera.positionWC,t.boundingSphere.center);return X.fog(o,n.fog.density)>X.EPSILON3}};var oW=oae;var H1n=_(T(),1);var N1n=_(T(),1),rW=`#ifdef DIFFUSE_IBL vec3 sampleDiffuseEnvironment(vec3 cubeDir) { #ifdef CUSTOM_SPHERICAL_HARMONICS return czm_sphericalHarmonics(cubeDir, model_sphericalHarmonicCoefficients); #else return czm_sphericalHarmonics(cubeDir, czm_sphericalHarmonicCoefficients); #endif } #endif #ifdef SPECULAR_IBL vec3 sampleSpecularEnvironment(vec3 cubeDir, float roughness) { #ifdef CUSTOM_SPECULAR_IBL float lod = roughness * model_specularEnvironmentMapsMaximumLOD; return czm_textureCube(model_specularEnvironmentMaps, cubeDir, lod).rgb; #else float lod = roughness * czm_specularEnvironmentMapsMaximumLOD; return czm_textureCube(czm_specularEnvironmentMaps, cubeDir, lod).rgb; #endif } vec3 computeSpecularIBL(vec3 cubeDir, float NdotV, vec3 f0, float roughness) { // see https://bruop.github.io/ibl/ at Single Scattering Results // Roughness dependent fresnel, from Fdez-Aguera vec3 f90 = max(vec3(1.0 - roughness), f0); vec3 F = fresnelSchlick2(f0, f90, NdotV); vec2 brdfLut = texture(czm_brdfLut, vec2(NdotV, roughness)).rg; vec3 specularSample = sampleSpecularEnvironment(cubeDir, roughness); return specularSample * (F * brdfLut.x + brdfLut.y); } #endif #if defined(DIFFUSE_IBL) || defined(SPECULAR_IBL) /** * Compute the light contributions from environment maps and spherical harmonic coefficients. * See Fdez-Aguera, https://www.jcgt.org/published/0008/01/03/paper.pdf, for explanation * of the single- and multi-scattering terms. * * @param {vec3} viewDirectionEC Unit vector pointing from the fragment to the eye position. * @param {vec3} normalEC The surface normal in eye coordinates. * @param {czm_modelMaterial} The material properties. * @return {vec3} The computed HDR color. */ vec3 textureIBL(vec3 viewDirectionEC, vec3 normalEC, czm_modelMaterial material) { vec3 f0 = material.specular; float roughness = material.roughness; float specularWeight = 1.0; #ifdef USE_SPECULAR specularWeight = material.specularWeight; #endif float NdotV = clamp(dot(normalEC, viewDirectionEC), 0.0, 1.0); // see https://bruop.github.io/ibl/ at Single Scattering Results // Roughness dependent fresnel, from Fdez-Aguera vec3 f90 = max(vec3(1.0 - roughness), f0); vec3 singleScatterFresnel = fresnelSchlick2(f0, f90, NdotV); vec2 brdfLut = texture(czm_brdfLut, vec2(NdotV, roughness)).rg; vec3 FssEss = specularWeight * (singleScatterFresnel * brdfLut.x + brdfLut.y); #ifdef DIFFUSE_IBL vec3 normalMC = normalize(model_iblReferenceFrameMatrix * normalEC); vec3 irradiance = sampleDiffuseEnvironment(normalMC); vec3 averageFresnel = f0 + (1.0 - f0) / 21.0; float Ems = specularWeight * (1.0 - brdfLut.x - brdfLut.y); vec3 FmsEms = FssEss * averageFresnel * Ems / (1.0 - averageFresnel * Ems); vec3 dielectricScattering = (1.0 - FssEss - FmsEms) * material.diffuse; vec3 diffuseContribution = irradiance * (FmsEms + dielectricScattering) * model_iblFactor.x; #else vec3 diffuseContribution = vec3(0.0); #endif #ifdef USE_ANISOTROPY // Bend normal to account for anisotropic distortion of specular reflection vec3 anisotropyDirection = material.anisotropicB; vec3 anisotropicTangent = cross(anisotropyDirection, viewDirectionEC); vec3 anisotropicNormal = cross(anisotropicTangent, anisotropyDirection); float bendFactor = 1.0 - material.anisotropyStrength * (1.0 - roughness); float bendFactorPow4 = bendFactor * bendFactor * bendFactor * bendFactor; vec3 bentNormal = normalize(mix(anisotropicNormal, normalEC, bendFactorPow4)); vec3 reflectEC = reflect(-viewDirectionEC, bentNormal); #else vec3 reflectEC = reflect(-viewDirectionEC, normalEC); #endif #ifdef SPECULAR_IBL vec3 reflectMC = normalize(model_iblReferenceFrameMatrix * reflectEC); vec3 radiance = sampleSpecularEnvironment(reflectMC, roughness); vec3 specularContribution = radiance * FssEss * model_iblFactor.y; #else vec3 specularContribution = vec3(0.0); #endif return diffuseContribution + specularContribution; } #endif `;var rae={name:"ImageBasedLightingPipelineStage"},F3e=new U;rae.process=function(e,t,n){let i=t.imageBasedLighting,o=t.environmentMapManager,r=e.shaderBuilder,s;l(i.specularEnvironmentMaps)||(s=o.radianceCubeMap);let a=i.sphericalHarmonicCoefficients??o.sphericalHarmonicCoefficients;r.addDefine("USE_IBL_LIGHTING",void 0,ye.FRAGMENT),r.addUniform("vec2","model_iblFactor",ye.FRAGMENT),Om.isSupported(n.context)&&((i.useSphericalHarmonics||i.useSpecularEnvironmentMaps||i.enabled)&&r.addUniform("mat3","model_iblReferenceFrameMatrix",ye.FRAGMENT),l(s)&&r.addDefine("COMPUTE_POSITION_WC_ATMOSPHERE",void 0,ye.BOTH),l(a)&&l(a[0])?(r.addDefine("DIFFUSE_IBL",void 0,ye.FRAGMENT),r.addDefine("CUSTOM_SPHERICAL_HARMONICS",void 0,ye.FRAGMENT),r.addUniform("vec3","model_sphericalHarmonicCoefficients[9]",ye.FRAGMENT)):i.useDefaultSphericalHarmonics&&r.addDefine("DIFFUSE_IBL",void 0,ye.FRAGMENT),l(i.specularEnvironmentCubeMap)&&i.specularEnvironmentCubeMap.ready||l(s)?(r.addDefine("SPECULAR_IBL",void 0,ye.FRAGMENT),r.addDefine("CUSTOM_SPECULAR_IBL",void 0,ye.FRAGMENT),r.addUniform("samplerCube","model_specularEnvironmentMaps",ye.FRAGMENT),r.addUniform("float","model_specularEnvironmentMapsMaximumLOD",ye.FRAGMENT)):t.useDefaultSpecularMaps&&r.addDefine("SPECULAR_IBL",void 0,ye.FRAGMENT)),r.addFragmentLines(rW);let c={model_iblFactor:function(){return U.multiplyByScalar(i.imageBasedLightingFactor,o?.intensity||1,F3e)},model_iblReferenceFrameMatrix:function(){return t._iblReferenceFrameMatrix},model_sphericalHarmonicCoefficients:function(){return a},model_specularEnvironmentMaps:function(){return i.specularEnvironmentCubeMap.texture},model_specularEnvironmentMapsMaximumLOD:function(){return i.specularEnvironmentCubeMap.maximumMipmapLevel}};l(s)&&(c.model_specularEnvironmentMaps=function(){return s},c.model_specularEnvironmentMapsMaximumLOD=function(){return o.maximumMipmapLevel}),e.uniformMap=St(c,e.uniformMap)};var sW=rae;var aVn=_(T(),1);var tVn=_(T(),1);var A3e=X.EPSILON16;function bH(e){e=e??Y.EMPTY_OBJECT;let t=e.stage,n=e.runtimeArticulation;this._stage=t,this._runtimeArticulation=n,this._name=t.name,this._type=t.type,this._minimumValue=t.minimumValue,this._maximumValue=t.maximumValue,this._currentValue=t.initialValue}Object.defineProperties(bH.prototype,{stage:{get:function(){return this._stage}},runtimeArticulation:{get:function(){return this._runtimeArticulation}},name:{get:function(){return this._name}},type:{get:function(){return this._type}},minimumValue:{get:function(){return this._minimumValue}},maximumValue:{get:function(){return this._maximumValue}},currentValue:{get:function(){return this._currentValue},set:function(e){e=X.clamp(e,this.minimumValue,this.maximumValue),X.equalsEpsilon(this._currentValue,e,A3e)||(this._currentValue=e,this.runtimeArticulation._dirty=!0)}}});var M3e=new m,pH=new $;bH.prototype.applyStageToMatrix=function(e){let t=this.type,n=this.currentValue,i=M3e,o;switch(t){case bc.XROTATE:o=$.fromRotationX(X.toRadians(n),pH),e=F.multiplyByMatrix3(e,o,e);break;case bc.YROTATE:o=$.fromRotationY(X.toRadians(n),pH),e=F.multiplyByMatrix3(e,o,e);break;case bc.ZROTATE:o=$.fromRotationZ(X.toRadians(n),pH),e=F.multiplyByMatrix3(e,o,e);break;case bc.XTRANSLATE:i.x=n,i.y=0,i.z=0,e=F.multiplyByTranslation(e,i,e);break;case bc.YTRANSLATE:i.x=0,i.y=n,i.z=0,e=F.multiplyByTranslation(e,i,e);break;case bc.ZTRANSLATE:i.x=0,i.y=0,i.z=n,e=F.multiplyByTranslation(e,i,e);break;case bc.XSCALE:i.x=n,i.y=1,i.z=1,e=F.multiplyByScale(e,i,e);break;case bc.YSCALE:i.x=1,i.y=n,i.z=1,e=F.multiplyByScale(e,i,e);break;case bc.ZSCALE:i.x=1,i.y=1,i.z=n,e=F.multiplyByScale(e,i,e);break;case bc.UNIFORMSCALE:e=F.multiplyByUniformScale(e,n,e);break;default:break}return e};var aW=bH;function j5(e){e=e??Y.EMPTY_OBJECT;let t=e.articulation,n=e.sceneGraph;this._articulation=t,this._sceneGraph=n,this._name=t.name,this._runtimeStages=[],this._runtimeStagesByName={},this._runtimeNodes=[],this._dirty=!0,N3e(this)}Object.defineProperties(j5.prototype,{articulation:{get:function(){return this._articulation}},sceneGraph:{get:function(){return this._sceneGraph}},name:{get:function(){return this._name}},runtimeStages:{get:function(){return this._runtimeStages}},runtimeNodes:{get:function(){return this._runtimeNodes}}});function N3e(e){let n=e.articulation.stages,i=n.length,o=e._runtimeStages,r=e._runtimeStagesByName;for(let s=0;s<i;s++){let a=n[s],c=new aW({stage:a,runtimeArticulation:e});o.push(c);let d=a.name;r[d]=c}}j5.prototype.setArticulationStage=function(e,t){let n=this._runtimeStagesByName[e];l(n)&&(n.currentValue=t)};var k3e=new F,U3e=new F;j5.prototype.apply=function(){if(!this._dirty)return;this._dirty=!1;let e=F.clone(F.IDENTITY,k3e),t,n=this._runtimeStages,i=n.length;for(t=0;t<i;t++)e=n[t].applyStageToMatrix(e);let o=this._runtimeNodes,r=o.length;for(t=0;t<r;t++){let s=o[t],a=F.multiplyTransformation(s.originalTransform,e,U3e);s.transform=a}};var cW=j5;var bVn=_(T(),1);var lVn=_(T(),1),lW=`void modelColorStage(inout czm_modelMaterial material) { material.diffuse = mix(material.diffuse, model_color.rgb, model_colorBlend); float highlight = ceil(model_colorBlend); material.diffuse *= mix(model_color.rgb, vec3(1.0), highlight); material.alpha *= model_color.a; } `;var n1={name:"ModelColorPipelineStage",COLOR_UNIFORM_NAME:"model_color",COLOR_BLEND_UNIFORM_NAME:"model_colorBlend"};n1.process=function(e,t,n){let i=e.shaderBuilder;i.addDefine("HAS_MODEL_COLOR",void 0,ye.FRAGMENT),i.addFragmentLines(lW);let o={},r=t.color;r.alpha===0&&!t.hasSilhouette(n)&&(e.renderStateOptions.colorMask={red:!1,green:!1,blue:!1,alpha:!1}),r.alpha<1&&(e.alphaOptions.pass=Ee.TRANSLUCENT),i.addUniform("vec4",n1.COLOR_UNIFORM_NAME,ye.FRAGMENT),o[n1.COLOR_UNIFORM_NAME]=function(){return t.color},i.addUniform("float",n1.COLOR_BLEND_UNIFORM_NAME,ye.FRAGMENT),o[n1.COLOR_BLEND_UNIFORM_NAME]=function(){return pc.getColorBlend(t.colorBlendMode,t.colorBlendAmount)},e.uniformMap=St(o,e.uniformMap)};var Gg=n1;var RVn=_(T(),1);var yVn=_(T(),1),dW=`#ifdef USE_CLIPPING_PLANES_FLOAT_TEXTURE vec4 getClippingPlane( highp sampler2D packedClippingPlanes, int clippingPlaneNumber, mat4 transform ) { int pixY = clippingPlaneNumber / CLIPPING_PLANES_TEXTURE_WIDTH; int pixX = clippingPlaneNumber - (pixY * CLIPPING_PLANES_TEXTURE_WIDTH); float pixelWidth = 1.0 / float(CLIPPING_PLANES_TEXTURE_WIDTH); float pixelHeight = 1.0 / float(CLIPPING_PLANES_TEXTURE_HEIGHT); float u = (float(pixX) + 0.5) * pixelWidth; // sample from center of pixel float v = (float(pixY) + 0.5) * pixelHeight; vec4 plane = texture(packedClippingPlanes, vec2(u, v)); return czm_transformPlane(plane, transform); } #else // Handle uint8 clipping texture instead vec4 getClippingPlane( highp sampler2D packedClippingPlanes, int clippingPlaneNumber, mat4 transform ) { int clippingPlaneStartIndex = clippingPlaneNumber * 2; // clipping planes are two pixels each int pixY = clippingPlaneStartIndex / CLIPPING_PLANES_TEXTURE_WIDTH; int pixX = clippingPlaneStartIndex - (pixY * CLIPPING_PLANES_TEXTURE_WIDTH); float pixelWidth = 1.0 / float(CLIPPING_PLANES_TEXTURE_WIDTH); float pixelHeight = 1.0 / float(CLIPPING_PLANES_TEXTURE_HEIGHT); float u = (float(pixX) + 0.5) * pixelWidth; // sample from center of pixel float v = (float(pixY) + 0.5) * pixelHeight; vec4 oct32 = texture(packedClippingPlanes, vec2(u, v)) * 255.0; vec2 oct = vec2(oct32.x * 256.0 + oct32.y, oct32.z * 256.0 + oct32.w); vec4 plane; plane.xyz = czm_octDecode(oct, 65535.0); plane.w = czm_unpackFloat(texture(packedClippingPlanes, vec2(u + pixelWidth, v))); return czm_transformPlane(plane, transform); } #endif float clip(vec4 fragCoord, sampler2D clippingPlanes, mat4 clippingPlanesMatrix) { vec4 position = czm_windowToEyeCoordinates(fragCoord); vec3 clipNormal = vec3(0.0); vec3 clipPosition = vec3(0.0); float pixelWidth = czm_metersPerPixel(position); #ifdef UNION_CLIPPING_REGIONS float clipAmount; // For union planes, we want to get the min distance. So we set the initial value to the first plane distance in the loop below. #else float clipAmount = 0.0; bool clipped = true; #endif for (int i = 0; i < CLIPPING_PLANES_LENGTH; ++i) { vec4 clippingPlane = getClippingPlane(clippingPlanes, i, clippingPlanesMatrix); clipNormal = clippingPlane.xyz; clipPosition = -clippingPlane.w * clipNormal; float amount = dot(clipNormal, (position.xyz - clipPosition)) / pixelWidth; #ifdef UNION_CLIPPING_REGIONS clipAmount = czm_branchFreeTernary(i == 0, amount, min(amount, clipAmount)); if (amount <= 0.0) { discard; } #else clipAmount = max(amount, clipAmount); clipped = clipped && (amount <= 0.0); #endif } #ifndef UNION_CLIPPING_REGIONS if (clipped) { discard; } #endif return clipAmount; } void modelClippingPlanesStage(inout vec4 color) { float clipDistance = clip(gl_FragCoord, model_clippingPlanes, model_clippingPlanesMatrix); vec4 clippingPlanesEdgeColor = vec4(1.0); clippingPlanesEdgeColor.rgb = model_clippingPlanesEdgeStyle.rgb; float clippingPlanesEdgeWidth = model_clippingPlanesEdgeStyle.a; if (clipDistance > 0.0 && clipDistance < clippingPlanesEdgeWidth) { color = clippingPlanesEdgeColor; } } `;var sae={name:"ModelClippingPlanesPipelineStage"},D3e=new U;sae.process=function(e,t,n){let i=t.clippingPlanes,o=n.context,r=e.shaderBuilder;r.addDefine("HAS_CLIPPING_PLANES",void 0,ye.FRAGMENT),r.addDefine("CLIPPING_PLANES_LENGTH",i.length,ye.FRAGMENT),i.unionClippingRegions&&r.addDefine("UNION_CLIPPING_REGIONS",void 0,ye.FRAGMENT),fs.useFloatTexture(o)&&r.addDefine("USE_CLIPPING_PLANES_FLOAT_TEXTURE",void 0,ye.FRAGMENT);let s=fs.getTextureResolution(i,o,D3e);r.addDefine("CLIPPING_PLANES_TEXTURE_WIDTH",s.x,ye.FRAGMENT),r.addDefine("CLIPPING_PLANES_TEXTURE_HEIGHT",s.y,ye.FRAGMENT),r.addUniform("sampler2D","model_clippingPlanes",ye.FRAGMENT),r.addUniform("vec4","model_clippingPlanesEdgeStyle",ye.FRAGMENT),r.addUniform("mat4","model_clippingPlanesMatrix",ye.FRAGMENT),r.addFragmentLines(dW);let a={model_clippingPlanes:function(){return i.texture},model_clippingPlanesEdgeStyle:function(){let c=D.clone(i.edgeColor);return c.alpha=i.edgeWidth,c},model_clippingPlanesMatrix:function(){return t._clippingPlanesMatrix}};e.uniformMap=St(a,e.uniformMap)};var uW=sae;var FVn=_(T(),1);var GVn=_(T(),1),mW=`void modelClippingPolygonsStage(ProcessedAttributes attributes) { vec2 sphericalLatLong = czm_approximateSphericalCoordinates(v_positionWC); sphericalLatLong.y = czm_branchFreeTernary(sphericalLatLong.y < czm_pi, sphericalLatLong.y, sphericalLatLong.y - czm_twoPi); vec2 minDistance = vec2(czm_infinity); v_regionIndex = -1; v_clippingPosition = vec2(czm_infinity); for (int regionIndex = 0; regionIndex < CLIPPING_POLYGON_REGIONS_LENGTH; regionIndex++) { vec4 extents = czm_unpackClippingExtents(model_clippingExtents, regionIndex); vec2 rectUv = (sphericalLatLong.yx - extents.yx) * extents.wz; vec2 clamped = clamp(rectUv, vec2(0.0), vec2(1.0)); vec2 distance = abs(rectUv - clamped) * extents.wz; if (minDistance.x > distance.x || minDistance.y > distance.y) { minDistance = distance; v_clippingPosition = rectUv; } float threshold = 0.01; if (rectUv.x > threshold && rectUv.y > threshold && rectUv.x < 1.0 - threshold && rectUv.y < 1.0 - threshold) { v_regionIndex = regionIndex; } } } `;var IVn=_(T(),1),hW=`void modelClippingPolygonsStage() { vec2 clippingPosition = v_clippingPosition; int regionIndex = v_regionIndex; czm_clipPolygons(model_clippingDistance, CLIPPING_POLYGON_REGIONS_LENGTH, clippingPosition, regionIndex); } `;var aae={name:"ModelClippingPolygonsPipelineStage"};aae.process=function(e,t,n){let i=t.clippingPolygons,o=e.shaderBuilder;o.addDefine("ENABLE_CLIPPING_POLYGONS",void 0,ye.BOTH),i.inverse&&o.addDefine("CLIPPING_INVERSE",void 0,ye.FRAGMENT),o.addDefine("CLIPPING_POLYGON_REGIONS_LENGTH",i.extentsCount,ye.BOTH),o.addUniform("sampler2D","model_clippingDistance",ye.FRAGMENT),o.addUniform("sampler2D","model_clippingExtents",ye.VERTEX),o.addVarying("vec2","v_clippingPosition"),o.addVarying("int","v_regionIndex","flat"),o.addVertexLines(mW),o.addFragmentLines(hW);let r={model_clippingDistance:function(){return i.clippingTexture},model_clippingExtents:function(){return i.extentsTexture}};e.uniformMap=St(r,e.uniformMap)};var fW=aae;var NVn=_(T(),1);function cae(e,t){this._model=e,this._runtimeNode=t}Object.defineProperties(cae.prototype,{name:{get:function(){return this._runtimeNode._name}},id:{get:function(){return this._runtimeNode._id}},show:{get:function(){return this._runtimeNode.show},set:function(e){this._runtimeNode.show=e}},matrix:{get:function(){return this._runtimeNode.transform},set:function(e){l(e)?(this._runtimeNode.transform=e,this._runtimeNode.userAnimated=!0,this._model._userAnimationDirty=!0):(this._runtimeNode.transform=this.originalMatrix,this._runtimeNode.userAnimated=!1)}},originalMatrix:{get:function(){return this._runtimeNode.originalTransform}}});var pW=cae;var WLn=_(T(),1);var hLn=_(T(),1);var UVn=_(T(),1),bW=`mat4 getInstancingTransform() { mat4 instancingTransform; #ifdef HAS_INSTANCE_MATRICES instancingTransform = mat4( a_instancingTransformRow0.x, a_instancingTransformRow1.x, a_instancingTransformRow2.x, 0.0, // Column 1 a_instancingTransformRow0.y, a_instancingTransformRow1.y, a_instancingTransformRow2.y, 0.0, // Column 2 a_instancingTransformRow0.z, a_instancingTransformRow1.z, a_instancingTransformRow2.z, 0.0, // Column 3 a_instancingTransformRow0.w, a_instancingTransformRow1.w, a_instancingTransformRow2.w, 1.0 // Column 4 ); #else vec3 translation = vec3(0.0, 0.0, 0.0); vec3 scale = vec3(1.0, 1.0, 1.0); #ifdef HAS_INSTANCE_TRANSLATION translation = a_instanceTranslation; #endif #ifdef HAS_INSTANCE_SCALE scale = a_instanceScale; #endif instancingTransform = mat4( scale.x, 0.0, 0.0, 0.0, 0.0, scale.y, 0.0, 0.0, 0.0, 0.0, scale.z, 0.0, translation.x, translation.y, translation.z, 1.0 ); #endif return instancingTransform; } #ifdef USE_2D_INSTANCING mat4 getInstancingTransform2D() { mat4 instancingTransform2D; #ifdef HAS_INSTANCE_MATRICES instancingTransform2D = mat4( a_instancingTransform2DRow0.x, a_instancingTransform2DRow1.x, a_instancingTransform2DRow2.x, 0.0, // Column 1 a_instancingTransform2DRow0.y, a_instancingTransform2DRow1.y, a_instancingTransform2DRow2.y, 0.0, // Column 2 a_instancingTransform2DRow0.z, a_instancingTransform2DRow1.z, a_instancingTransform2DRow2.z, 0.0, // Column 3 a_instancingTransform2DRow0.w, a_instancingTransform2DRow1.w, a_instancingTransform2DRow2.w, 1.0 // Column 4 ); #else vec3 translation2D = vec3(0.0, 0.0, 0.0); vec3 scale = vec3(1.0, 1.0, 1.0); #ifdef HAS_INSTANCE_TRANSLATION translation2D = a_instanceTranslation2D; #endif #ifdef HAS_INSTANCE_SCALE scale = a_instanceScale; #endif instancingTransform2D = mat4( scale.x, 0.0, 0.0, 0.0, 0.0, scale.y, 0.0, 0.0, 0.0, 0.0, scale.z, 0.0, translation2D.x, translation2D.y, translation2D.z, 1.0 ); #endif return instancingTransform2D; } #endif `;var BVn=_(T(),1),gW=`void instancingStage(inout ProcessedAttributes attributes) { vec3 positionMC = attributes.positionMC; mat4 instancingTransform = getInstancingTransform(); attributes.positionMC = (instancingTransform * vec4(positionMC, 1.0)).xyz; #ifdef HAS_NORMALS vec3 normalMC = attributes.normalMC; attributes.normalMC = (instancingTransform * vec4(normalMC, 0.0)).xyz; #endif #ifdef USE_2D_INSTANCING mat4 instancingTransform2D = getInstancingTransform2D(); attributes.position2D = (instancingTransform2D * vec4(positionMC, 1.0)).xyz; #endif } `;var YVn=_(T(),1),yW=`void legacyInstancingStage( inout ProcessedAttributes attributes, out mat4 instanceModelView, out mat3 instanceModelViewInverseTranspose) { vec3 positionMC = attributes.positionMC; mat4 instancingTransform = getInstancingTransform(); mat4 instanceModel = instancingTransform * u_instance_nodeTransform; instanceModelView = u_instance_modifiedModelView; instanceModelViewInverseTranspose = mat3(u_instance_modifiedModelView * instanceModel); attributes.positionMC = (instanceModel * vec4(positionMC, 1.0)).xyz; #ifdef USE_2D_INSTANCING mat4 instancingTransform2D = getInstancingTransform2D(); attributes.position2D = (instancingTransform2D * vec4(positionMC, 1.0)).xyz; #endif } `;var q5=new F,B3e=new F,O3e=new F,dae={name:"InstancingPipelineStage",_getInstanceTransformsAsMatrices:pae,_transformsToTypedArray:yH};dae.process=function(e,t,n){let i=t.instances,o=i.attributes[0].count,r=e.shaderBuilder;r.addDefine("HAS_INSTANCING"),r.addVertexLines(bW);let s=e.model,a=s.sceneGraph,c=e.runtimeNode,d=n.mode!==oe.SCENE3D&&!n.scene3DOnly&&s._projectTo2D,u=s._enablePick&&!n.context.webgl2,h=[];rBe(e,n,i,h,d,u),cBe(e,n,i,h);let p={};if(i.transformInWorldSpace?(r.addDefine("USE_LEGACY_INSTANCING",void 0,ye.VERTEX),r.addUniform("mat4","u_instance_modifiedModelView",ye.VERTEX),r.addUniform("mat4","u_instance_nodeTransform",ye.VERTEX),p.u_instance_modifiedModelView=function(){let g=F.multiplyTransformation(s.modelMatrix,a.components.transform,q5);return d?F.multiplyTransformation(n.context.uniformState.view3D,g,q5):(n.mode!==oe.SCENE3D&&(g=Pt.basisTo2D(n.mapProjection,g,q5)),F.multiplyTransformation(n.context.uniformState.view,g,q5))},p.u_instance_nodeTransform=function(){return F.multiplyTransformation(a.axisCorrectionMatrix,c.computedTransform,B3e)},r.addVertexLines(yW)):r.addVertexLines(gW),d){r.addDefine("USE_2D_INSTANCING",void 0,ye.VERTEX),r.addUniform("mat4","u_modelView2D",ye.VERTEX);let g=n.context,f=F.fromTranslation(c.instancingReferencePoint2D,new F);p.u_modelView2D=function(){return F.multiplyTransformation(g.uniformState.view,f,O3e)}}e.uniformMap=St(p,e.uniformMap),e.instanceCount=o,e.attributes.push.apply(e.attributes,h)};var xW=new F,Y3e=new m;function z3e(e,t,n,i,o){let r=F.multiplyTransformation(t,e,xW);return r=F.multiplyTransformation(r,n,xW),o=Pt.basisTo2D(i.mapProjection,r,o),o}function H3e(e,t,n,i,o){let r=F.fromTranslation(e,xW),s=F.multiplyTransformation(t,r,xW);s=F.multiplyTransformation(s,n,xW);let a=F.getTranslation(s,Y3e);return o=Ui.computeActualEllipsoidPosition(i,a,o),o}function uae(e,t,n){let i=e.model,o=i.sceneGraph;e.runtimeNode.node.instances.transformInWorldSpace?(t=F.multiplyTransformation(i.modelMatrix,o.components.transform,t),n=F.multiplyTransformation(o.axisCorrectionMatrix,e.runtimeNode.computedTransform,n)):(t=F.clone(o.computedModelMatrix,t),t=F.multiplyTransformation(t,e.runtimeNode.computedTransform,t),n=F.clone(F.IDENTITY,n))}var mae=new F,hae=new F,K3e=new F,J3e=new m;function Q3e(e,t,n,i){let o=mae,r=hae;uae(t,o,r);let a=t.runtimeNode.instancingReferencePoint2D,c=e.length;for(let d=0;d<c;d++){let u=e[d],h=z3e(u,o,r,n,K3e),p=F.getTranslation(h,J3e),g=m.subtract(p,a,p);i[d]=F.setTranslation(h,g,i[d])}return i}function j3e(e,t,n,i){let o=mae,r=hae;uae(t,o,r);let a=t.runtimeNode.instancingReferencePoint2D,c=e.length;for(let d=0;d<c;d++){let u=e[d],h=H3e(u,o,r,n,u);i[d]=m.subtract(h,a,i[d])}return i}var q3e=new m,$3e=new m;function fae(e,t){let n=e.runtimeNode,i=e.model.sceneGraph.computedModelMatrix,o=F.multiplyByPoint(i,n.instancingTranslationMin,q3e),r=Ui.computeActualEllipsoidPosition(t,o,o),s=F.multiplyByPoint(i,n.instancingTranslationMax,$3e),a=Ui.computeActualEllipsoidPosition(t,s,s);n.instancingReferencePoint2D=m.lerp(r,a,.5,new m)}function yH(e){let n=e.length,i=new Float32Array(n*12);for(let o=0;o<n;o++){let r=e[o],s=12*o;i[s+0]=r[0],i[s+1]=r[4],i[s+2]=r[8],i[s+3]=r[12],i[s+4]=r[1],i[s+5]=r[5],i[s+6]=r[9],i[s+7]=r[13],i[s+8]=r[2],i[s+9]=r[6],i[s+10]=r[10],i[s+11]=r[14]}return i}function eBe(e){let n=e.length,i=new Float32Array(n*3);for(let o=0;o<n;o++){let r=e[o],s=3*o;i[s+0]=r[0],i[s+1]=r[4],i[s+2]=r[8]}return i}var tBe=new m,nBe=new ve,iBe=new m;function pae(e,t,n){let i=new Array(t),o=Qt.getAttributeBySemantic(e,ts.TRANSLATION),r=Qt.getAttributeBySemantic(e,ts.ROTATION),s=Qt.getAttributeBySemantic(e,ts.SCALE),a=new m(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE),c=new m(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),d=l(o),u=l(r),h=l(s),p=d?o.typedArray:new Float32Array(t*3),g=u?r.typedArray:new Float32Array(t*4);u&&r.normalized&&(g=wn.dequantize(g,r.componentDatatype,r.type,t));let f;h?f=s.typedArray:(f=new Float32Array(t*3),f.fill(1));for(let x=0;x<t;x++){let S=new m(p[x*3],p[x*3+1],p[x*3+2],tBe);m.maximumByComponent(a,S,a),m.minimumByComponent(c,S,c);let C=new ve(g[x*4],g[x*4+1],g[x*4+2],u?g[x*4+3]:1,nBe),V=new m(f[x*3],f[x*3+1],f[x*3+2],iBe),L=F.fromTranslationQuaternionRotationScale(S,C,V,new F);i[x]=L}let y=n.runtimeNode;return y.instancingTranslationMin=c,y.instancingTranslationMax=a,d&&(o.typedArray=void 0),u&&(r.typedArray=void 0),h&&(s.typedArray=void 0),i}function oBe(e,t,n){let i=new Array(t),o=e.typedArray,r=new m(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE),s=new m(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE);for(let c=0;c<t;c++){let d=new m(o[c*3],o[c*3+1],o[c*3+2]);i[c]=d,m.minimumByComponent(r,d,r),m.maximumByComponent(s,d,s)}let a=n.runtimeNode;return a.instancingTranslationMin=r,a.instancingTranslationMax=s,e.typedArray=void 0,i}function xH(e,t){let n=xt.createVertexBuffer({context:t.context,typedArray:e,usage:Me.STATIC_DRAW});return n.vertexArrayDestroyable=!1,n}function rBe(e,t,n,i,o,r){let s=Qt.getAttributeBySemantic(n,ts.ROTATION);l(s)?sBe(e,n,i,t,o,r):aBe(e,n,i,t,o)}function sBe(e,t,n,i,o,r){let s=e.shaderBuilder,a=t.attributes[0].count,c=e.model,d=e.runtimeNode;s.addDefine("HAS_INSTANCE_MATRICES");let u="Transform",h,p=d.instancingTransformsBuffer;if(!l(p)){h=pae(t,a,e);let x=yH(h);p=xH(x,i),c._modelResources.push(p),r&&(d.transformsTypedArray=x),d.instancingTransformsBuffer=p}if(lae(e,p,n,u),!o)return;let g=Ye(i);g.mode=oe.COLUMBUS_VIEW,fae(e,g);let f=d.instancingTransformsBuffer2D;if(!l(f)){let x=Q3e(h,e,g,h),S=yH(x);f=xH(S,i),c._modelResources.push(f),d.instancingTransformsBuffer2D=f}lae(e,f,n,"Transform2D")}function aBe(e,t,n,i,o,r){let s=e.shaderBuilder,a=e.runtimeNode,c=Qt.getAttributeBySemantic(t,ts.TRANSLATION),d=Qt.getAttributeBySemantic(t,ts.SCALE);if(l(d)&&(s.addDefine("HAS_INSTANCE_SCALE"),gH(e,d.buffer,d.byteOffset,d.byteStride,n,"Scale")),!l(c))return;let u,h=c.typedArray;if(l(h)?u=oBe(c,c.count,e):l(a.instancingTranslationMin)||(a.instancingTranslationMin=c.min,a.instancingTranslationMax=c.max),s.addDefine("HAS_INSTANCE_TRANSLATION"),gH(e,c.buffer,c.byteOffset,c.byteStride,n,"Translation"),!o&&!r)return;let g=Ye(i);g.mode=oe.COLUMBUS_VIEW,fae(e,g);let f=a.instancingTranslationBuffer2D;if(!l(f)){let C=j3e(u,e,g,u),V=eBe(C);r&&(a.transformsTypedArray=V),f=xH(V,i),e.model._modelResources.push(f),a.instancingTranslationBuffer2D=f}if(!o)return;gH(e,f,0,void 0,n,"Translation2D")}function lae(e,t,n,i){let r=Q.getSizeInBytes(Q.FLOAT),s=r*12,a=[{index:e.attributeIndex++,vertexBuffer:t,componentsPerAttribute:4,componentDatatype:Q.FLOAT,normalize:!1,offsetInBytes:0,strideInBytes:s,instanceDivisor:1},{index:e.attributeIndex++,vertexBuffer:t,componentsPerAttribute:4,componentDatatype:Q.FLOAT,normalize:!1,offsetInBytes:r*4,strideInBytes:s,instanceDivisor:1},{index:e.attributeIndex++,vertexBuffer:t,componentsPerAttribute:4,componentDatatype:Q.FLOAT,normalize:!1,offsetInBytes:r*8,strideInBytes:s,instanceDivisor:1}],c=e.shaderBuilder;c.addAttribute("vec4",`a_instancing${i}Row0`),c.addAttribute("vec4",`a_instancing${i}Row1`),c.addAttribute("vec4",`a_instancing${i}Row2`),n.push.apply(n,a)}function gH(e,t,n,i,o,r){o.push({index:e.attributeIndex++,vertexBuffer:t,componentsPerAttribute:3,componentDatatype:Q.FLOAT,normalize:!1,offsetInBytes:n,strideInBytes:i,instanceDivisor:1}),e.shaderBuilder.addAttribute("vec3",`a_instance${r}`)}function cBe(e,t,n,i){let o=n.attributes,r=e.shaderBuilder;for(let s=0;s<o.length;s++){let a=o[s];a.semantic===ts.FEATURE_ID&&(a.setIndex>=e.featureIdVertexAttributeSetIndex&&(e.featureIdVertexAttributeSetIndex=a.setIndex+1),i.push({index:e.attributeIndex++,vertexBuffer:a.buffer,componentsPerAttribute:on.getNumberOfComponents(a.type),componentDatatype:a.componentDatatype,normalize:!1,offsetInBytes:a.byteOffset,strideInBytes:a.byteStride,instanceDivisor:1}),r.addAttribute("float",`a_instanceFeatureId_${a.setIndex}`))}}var _W=dae;var yLn=_(T(),1);var _H={};_H.name="ModelMatrixUpdateStage";_H.update=function(e,t,n){let i=n.mode!==oe.SCENE3D;if(!(i&&t._model._projectTo2D)&&e._transformDirty){let o=i?t._computedModelMatrix2D:t._computedModelMatrix;bae(e,t,o,e.transformToRoot),e._transformDirty=!1}};function lBe(e,t,n){e.modelMatrix=F.multiplyTransformation(t,n,e.modelMatrix),e.cullFace=Qt.getCullFace(e.modelMatrix,e.primitiveType)}function bae(e,t,n,i){let o;i=F.multiplyTransformation(i,e.transform,new F),e.updateComputedTransform();let r=e.runtimePrimitives.length;for(o=0;o<r;o++){let a=e.runtimePrimitives[o];lBe(a.drawCommand,n,i)}let s=e.children.length;for(o=0;o<s;o++){let a=t._runtimeNodes[e.children[o]];a._transformToRoot=F.clone(i,a._transformToRoot),bae(a,t,n,i),a._transformDirty=!1}}var TW=_H;var TLn=_(T(),1);var gae={name:"NodeStatisticsPipelineStage",_countInstancingAttributes:yae,_countGeneratedBuffers:xae};gae.process=function(e,t,n){let i=e.model.statistics,o=t.instances,r=e.runtimeNode;yae(i,o),xae(i,r)};function yae(e,t){if(!l(t))return;let n=t.attributes,i=n.length;for(let o=0;o<i;o++){let r=n[o];l(r.buffer)&&e.addBuffer(r.buffer,!1)}}function xae(e,t){l(t.instancingTransformsBuffer)&&e.addBuffer(t.instancingTransformsBuffer,!1),l(t.instancingTransformsBuffer2D)&&e.addBuffer(t.instancingTransformsBuffer2D,!1),l(t.instancingTranslationBuffer2D)&&e.addBuffer(t.instancingTranslationBuffer2D,!1)}var SW=gae;function i1(e){e=e??Y.EMPTY_OBJECT;let t=e.node,n=e.transform,i=e.transformToRoot,o=e.sceneGraph,r=e.children;this._node=t,this._name=t.name,this._id=t.index,this._sceneGraph=o,this._children=r,this._originalTransform=F.clone(n,this._originalTransform),this._transform=F.clone(n,this._transform),this._transformToRoot=F.clone(i,this._transformToRoot),this._computedTransform=new F,this._transformDirty=!1,this._transformParameters=void 0,this._morphWeights=[],this._runtimeSkin=void 0,this._computedJointMatrices=[],this.show=!0,this.userAnimated=!1,this.pipelineStages=[],this.runtimePrimitives=[],this.updateStages=[],this.instancingTranslationMin=void 0,this.instancingTranslationMax=void 0,this.instancingTransformsBuffer=void 0,this.instancingTransformsBuffer2D=void 0,this.instancingTranslationBuffer2D=void 0,this.instancingReferencePoint2D=void 0,dBe(this)}Object.defineProperties(i1.prototype,{node:{get:function(){return this._node}},sceneGraph:{get:function(){return this._sceneGraph}},children:{get:function(){return this._children}},transform:{get:function(){return this._transform},set:function(e){this._transformDirty=!0,this._transform=F.clone(e,this._transform)}},transformToRoot:{get:function(){return this._transformToRoot}},computedTransform:{get:function(){return this._computedTransform}},originalTransform:{get:function(){return this._originalTransform}},translation:{get:function(){return l(this._transformParameters)?this._transformParameters.translation:void 0},set:function(e){let t=this._transformParameters,n=t.translation;m.equals(n,e)||(t.translation=m.clone(e,t.translation),TH(this,t))}},rotation:{get:function(){return l(this._transformParameters)?this._transformParameters.rotation:void 0},set:function(e){let t=this._transformParameters,n=t.rotation;ve.equals(n,e)||(t.rotation=ve.clone(e,t.rotation),TH(this,t))}},scale:{get:function(){return l(this._transformParameters)?this._transformParameters.scale:void 0},set:function(e){let t=this._transformParameters,n=t.scale;m.equals(n,e)||(t.scale=m.clone(e,t.scale),TH(this,t))}},morphWeights:{get:function(){return this._morphWeights},set:function(e){let t=e.length;for(let n=0;n<t;n++)this._morphWeights[n]=e[n]}},runtimeSkin:{get:function(){return this._runtimeSkin}},computedJointMatrices:{get:function(){return this._computedJointMatrices}}});function dBe(e){let t=e.transform,n=e.transformToRoot,i=e._computedTransform;e._computedTransform=F.multiply(n,t,i);let o=e.node;l(o.matrix)||(e._transformParameters=new $0(o.translation,o.rotation,o.scale)),l(o.morphWeights)&&(e._morphWeights=o.morphWeights.slice());let r=o.articulationName;if(l(r)){let c=e.sceneGraph._runtimeArticulations[r];l(c)&&c.runtimeNodes.push(e)}}function TH(e,t){e._transformDirty=!0,e._transform=F.fromTranslationRotationScale(t,e._transform)}i1.prototype.getChild=function(e){return this.sceneGraph._runtimeNodes[this.children[e]]};i1.prototype.configurePipeline=function(){let e=this.node,t=this.pipelineStages;t.length=0;let n=this.updateStages;n.length=0,l(e.instances)&&t.push(_W),t.push(SW),n.push(TW)};i1.prototype.updateComputedTransform=function(){this._computedTransform=F.multiply(this._transformToRoot,this._transform,this._computedTransform)};i1.prototype.updateJointMatrices=function(){let e=this._runtimeSkin;if(!l(e))return;e.updateJointMatrices();let t=this._computedJointMatrices,n=e.jointMatrices,i=n.length;for(let o=0;o<i;o++){l(t[o])||(t[o]=new F);let r=F.multiplyTransformation(this.transformToRoot,this.transform,t[o]),s=F.inverseTransformation(r,t[o]);t[o]=F.multiplyTransformation(s,n[o],t[o])}};var CW=i1;var UIn=_(T(),1);var MLn=_(T(),1);var _ae={name:"AlphaPipelineStage"};_ae.process=function(e,t,n){let i=e.alphaOptions,o=e.model;i.pass=i.pass??o.opaquePass;let r=e.renderStateOptions;i.pass===Ee.TRANSLUCENT&&(r.cull.enabled=!1,r.depthMask=!1,r.blending=un.ALPHA_BLEND);let s=e.shaderBuilder,a=e.uniformMap;l(i.alphaCutoff)&&(s.addDefine("ALPHA_MODE_MASK",void 0,ye.FRAGMENT),s.addUniform("float","u_alphaCutoff",ye.FRAGMENT),a.u_alphaCutoff=function(){return i.alphaCutoff})};var VW=_ae;var ULn=_(T(),1);var Tae={name:"BatchTexturePipelineStage"};Tae.process=function(e,t,n){let i=e.shaderBuilder,o={},r=e.model,s=r.featureTables[r.featureTableId],a=s.featuresLength;i.addUniform("int","model_featuresLength"),o.model_featuresLength=function(){return a};let c=s.batchTexture;i.addUniform("sampler2D","model_batchTexture"),o.model_batchTexture=function(){return c.batchTexture??c.defaultTexture},i.addUniform("vec4","model_textureStep"),o.model_textureStep=function(){return c.textureStep},c.textureDimensions.y>1&&(i.addDefine("MULTILINE_BATCH_TEXTURE"),i.addUniform("vec2","model_textureDimensions"),o.model_textureDimensions=function(){return c.textureDimensions}),e.uniformMap=St(o,e.uniformMap)};var LW=Tae;var KLn=_(T(),1);var Sae={name:"ClassificationPipelineStage"};Sae.process=function(e,t,n){e.shaderBuilder.addDefine("HAS_CLASSIFICATION",void 0,ye.BOTH);let o=e.runtimePrimitive;l(o.batchLengths)||uBe(t,o)};function uBe(e,t){let n=Qt.getAttributeBySemantic(e,ft.POSITION);if(!l(n))throw new ae("Primitives must have a position attribute to be used for classification.");let i,o=e.indices,r=l(o);r&&(i=o.typedArray,o.typedArray=void 0);let s=r?o.count:n.count,a=Qt.getAttributeBySemantic(e,ft.FEATURE_ID,0);if(!l(a)){t.batchLengths=[s],t.batchOffsets=[0];return}let c=a.typedArray;a.typedArray=void 0;let d=[],u=[0],h=r?i[0]:0,p=c[h],g=0;for(let y=1;y<s;y++){let x=r?i[y]:y,S=c[x];if(S!==p){let C=y-g,V=y;d.push(C),u.push(V),g=V,p=S}}let f=s-g;d.push(f),t.batchLengths=d,t.batchOffsets=u}var RW=Sae;var aRn=_(T(),1);var QLn=_(T(),1),ZW=`void filterByPassType(inout vec3 positionMC, vec4 featureColor) { bool styleTranslucent = (featureColor.a != 1.0); // Only render translucent features in the translucent pass (if the style or the original command has translucency). if (czm_pass == czm_passTranslucent && !styleTranslucent && !model_commandTranslucent) { // If the model has a translucent silhouette, it needs to render during the silhouette color command, // (i.e. the command where model_silhouettePass = true), even if the model isn't translucent. #ifdef HAS_SILHOUETTE positionMC *= float(model_silhouettePass); #else positionMC *= 0.0; #endif } // If the current pass is not the translucent pass and the style is not translucent, don't render the feature. else if (czm_pass != czm_passTranslucent && styleTranslucent) { positionMC *= 0.0; } } void cpuStylingStage(inout vec3 positionMC, inout SelectedFeature feature) { float show = ceil(feature.color.a); positionMC *= show; #if defined(HAS_SELECTED_FEATURE_ID_ATTRIBUTE) && !defined(HAS_CLASSIFICATION) filterByPassType(positionMC, feature.color); #endif } `;var qLn=_(T(),1),GW=`void filterByPassType(vec4 featureColor) { bool styleTranslucent = (featureColor.a != 1.0); // Only render translucent features in the translucent pass (if the style or the original command has translucency). if (czm_pass == czm_passTranslucent && !styleTranslucent && !model_commandTranslucent) { // If the model has a translucent silhouette, it needs to render during the silhouette color command, // (i.e. the command where model_silhouettePass = true), even if the model isn't translucent. #ifdef HAS_SILHOUETTE if(!model_silhouettePass) { discard; } #else discard; #endif } // If the current pass is not the translucent pass and the style is not translucent, don't render the feature. else if (czm_pass != czm_passTranslucent && styleTranslucent) { discard; } } void cpuStylingStage(inout czm_modelMaterial material, SelectedFeature feature) { vec4 featureColor = feature.color; if (featureColor.a == 0.0) { discard; } // If a feature ID vertex attribute is used, the pass type filter is applied in the vertex shader. // So, we only apply in in the fragment shader if the feature ID texture is used. #if defined(HAS_SELECTED_FEATURE_ID_TEXTURE) && !defined(HAS_CLASSIFICATION) filterByPassType(featureColor); #endif featureColor = czm_gammaCorrect(featureColor); // Classification models compute the diffuse differently. #ifdef HAS_CLASSIFICATION material.diffuse = featureColor.rgb * featureColor.a; #else float highlight = ceil(model_colorBlend); material.diffuse *= mix(featureColor.rgb, vec3(1.0), highlight); #endif material.alpha *= featureColor.a; } `;var Cae={name:"CPUStylingPipelineStage"};Cae.process=function(e,t,n){let i=e.model,o=e.shaderBuilder;o.addVertexLines(ZW),o.addFragmentLines(GW),o.addDefine("USE_CPU_STYLING",void 0,ye.BOTH),l(i.color)||(o.addUniform("float",Gg.COLOR_BLEND_UNIFORM_NAME,ye.FRAGMENT),e.uniformMap[Gg.COLOR_BLEND_UNIFORM_NAME]=function(){return pc.getColorBlend(i.colorBlendMode,i.colorBlendAmount)}),o.addUniform("bool","model_commandTranslucent",ye.BOTH),e.uniformMap.model_commandTranslucent=function(){return e.alphaOptions.pass===Ee.TRANSLUCENT}};var EW=Cae;var lRn=_(T(),1),Vae={MODIFY_MATERIAL:"MODIFY_MATERIAL",REPLACE_MATERIAL:"REPLACE_MATERIAL"};Vae.getDefineName=function(e){return`CUSTOM_SHADER_${e}`};var bb=Object.freeze(Vae);var rZn=_(T(),1);var uRn=_(T(),1),IW=`void customShaderStage( inout czm_modelVertexOutput vsOutput, inout ProcessedAttributes attributes, FeatureIds featureIds, Metadata metadata, MetadataClass metadataClass, MetadataStatistics metadataStatistics ) { // VertexInput and initializeInputStruct() are dynamically generated in JS, // see CustomShaderPipelineStage.js VertexInput vsInput; initializeInputStruct(vsInput, attributes); vsInput.featureIds = featureIds; vsInput.metadata = metadata; vsInput.metadataClass = metadataClass; vsInput.metadataStatistics = metadataStatistics; vertexMain(vsInput, vsOutput); attributes.positionMC = vsOutput.positionMC; } `;var hRn=_(T(),1),XW=`void customShaderStage( inout czm_modelMaterial material, ProcessedAttributes attributes, FeatureIds featureIds, Metadata metadata, MetadataClass metadataClass, MetadataStatistics metadataStatistics ) { // FragmentInput and initializeInputStruct() are dynamically generated in JS, // see CustomShaderPipelineStage.js FragmentInput fsInput; initializeInputStruct(fsInput, attributes); fsInput.featureIds = featureIds; fsInput.metadata = metadata; fsInput.metadataClass = metadataClass; fsInput.metadataStatistics = metadataStatistics; fragmentMain(fsInput, material); } `;var IRn=_(T(),1);var pRn=_(T(),1),WW=`void featureIdStage(out FeatureIds featureIds, ProcessedAttributes attributes) { initializeFeatureIds(featureIds, attributes); initializeFeatureIdAliases(featureIds); } `;var gRn=_(T(),1),PW=`void featureIdStage(out FeatureIds featureIds, ProcessedAttributes attributes) { initializeFeatureIds(featureIds, attributes); initializeFeatureIdAliases(featureIds); setFeatureIdVaryings(); } `;var Di={name:"FeatureIdPipelineStage",STRUCT_ID_FEATURE_IDS_VS:"FeatureIdsVS",STRUCT_ID_FEATURE_IDS_FS:"FeatureIdsFS",STRUCT_NAME_FEATURE_IDS:"FeatureIds",FUNCTION_ID_INITIALIZE_FEATURE_IDS_VS:"initializeFeatureIdsVS",FUNCTION_ID_INITIALIZE_FEATURE_IDS_FS:"initializeFeatureIdsFS",FUNCTION_ID_INITIALIZE_FEATURE_ID_ALIASES_VS:"initializeFeatureIdAliasesVS",FUNCTION_ID_INITIALIZE_FEATURE_ID_ALIASES_FS:"initializeFeatureIdAliasesFS",FUNCTION_SIGNATURE_INITIALIZE_FEATURE_IDS:"void initializeFeatureIds(out FeatureIds featureIds, ProcessedAttributes attributes)",FUNCTION_SIGNATURE_INITIALIZE_FEATURE_ID_ALIASES:"void initializeFeatureIdAliases(inout FeatureIds featureIds)",FUNCTION_ID_SET_FEATURE_ID_VARYINGS:"setFeatureIdVaryings",FUNCTION_SIGNATURE_SET_FEATURE_ID_VARYINGS:"void setFeatureIdVaryings()"};Di.process=function(e,t,n){let i=e.shaderBuilder;mBe(i);let o=e.runtimeNode.node.instances;l(o)&&hBe(e,o,n),fBe(e,t,n),i.addVertexLines(PW),i.addFragmentLines(WW)};function mBe(e){e.addStruct(Di.STRUCT_ID_FEATURE_IDS_VS,Di.STRUCT_NAME_FEATURE_IDS,ye.VERTEX),e.addStruct(Di.STRUCT_ID_FEATURE_IDS_FS,Di.STRUCT_NAME_FEATURE_IDS,ye.FRAGMENT),e.addFunction(Di.FUNCTION_ID_INITIALIZE_FEATURE_IDS_VS,Di.FUNCTION_SIGNATURE_INITIALIZE_FEATURE_IDS,ye.VERTEX),e.addFunction(Di.FUNCTION_ID_INITIALIZE_FEATURE_IDS_FS,Di.FUNCTION_SIGNATURE_INITIALIZE_FEATURE_IDS,ye.FRAGMENT),e.addFunction(Di.FUNCTION_ID_INITIALIZE_FEATURE_ID_ALIASES_VS,Di.FUNCTION_SIGNATURE_INITIALIZE_FEATURE_ID_ALIASES,ye.VERTEX),e.addFunction(Di.FUNCTION_ID_INITIALIZE_FEATURE_ID_ALIASES_FS,Di.FUNCTION_SIGNATURE_INITIALIZE_FEATURE_ID_ALIASES,ye.FRAGMENT),e.addFunction(Di.FUNCTION_ID_SET_FEATURE_ID_VARYINGS,Di.FUNCTION_SIGNATURE_SET_FEATURE_ID_VARYINGS,ye.VERTEX)}function hBe(e,t,n){let i=t.featureIds,o=t.attributes[0].count;for(let r=0;r<i.length;r++){let s=i[r],a=s.positionalLabel;s instanceof Tn.FeatureIdAttribute?pBe(e,s,a):Lae(e,s,a,o,1,n);let c=s.label;l(c)&&Rae(e,a,c,ye.BOTH)}}function fBe(e,t,n){let i=t.featureIds,r=Qt.getAttributeBySemantic(t,ft.POSITION).count;for(let s=0;s<i.length;s++){let a=i[s],c=a.positionalLabel,d=ye.BOTH;a instanceof Tn.FeatureIdAttribute?bBe(e,a,c):a instanceof Tn.FeatureIdImplicitRange?Lae(e,a,c,r,void 0,n):(gBe(e,a,c,s,n),d=ye.FRAGMENT);let u=a.label;l(u)&&Rae(e,c,u,d)}}function pBe(e,t,n){let i=e.shaderBuilder;i.addStructField(Di.STRUCT_ID_FEATURE_IDS_VS,"int",n),i.addStructField(Di.STRUCT_ID_FEATURE_IDS_FS,"int",n);let o=t.setIndex,r=n.replace(/_\d+$/,"_"),s=`a_${r}${o}`,a=`v_${r}${o}`,c=`featureIds.${n} = int(czm_round(${s}));`,d=`featureIds.${n} = int(czm_round(${a}));`;i.addFunctionLines(Di.FUNCTION_ID_INITIALIZE_FEATURE_IDS_VS,[c]),i.addFunctionLines(Di.FUNCTION_ID_INITIALIZE_FEATURE_IDS_FS,[d]),i.addVarying("float",a),i.addFunctionLines(Di.FUNCTION_ID_SET_FEATURE_ID_VARYINGS,[`${a} = ${s};`])}function bBe(e,t,n){let i=e.shaderBuilder;i.addStructField(Di.STRUCT_ID_FEATURE_IDS_VS,"int",n),i.addStructField(Di.STRUCT_ID_FEATURE_IDS_FS,"int",n);let o=t.setIndex,r=n.replace(/_\d+$/,"_"),s=[`featureIds.${n} = int(czm_round(attributes.${r}${o}));`];i.addFunctionLines(Di.FUNCTION_ID_INITIALIZE_FEATURE_IDS_VS,s),i.addFunctionLines(Di.FUNCTION_ID_INITIALIZE_FEATURE_IDS_FS,s)}function Lae(e,t,n,i,o,r){yBe(e,t,i,o,r);let s=e.shaderBuilder,a=`a_implicit_${n}`;s.addAttribute("float",a);let c=`v_implicit_${n}`;s.addVarying("float",c),s.addStructField(Di.STRUCT_ID_FEATURE_IDS_VS,"int",n),s.addStructField(Di.STRUCT_ID_FEATURE_IDS_FS,"int",n),s.addFunctionLines(Di.FUNCTION_ID_SET_FEATURE_ID_VARYINGS,[`${c} = ${a};`]),s.addFunctionLines(Di.FUNCTION_ID_INITIALIZE_FEATURE_IDS_VS,[`featureIds.${n} = int(czm_round(${a}));`]),s.addFunctionLines(Di.FUNCTION_ID_INITIALIZE_FEATURE_IDS_FS,[`featureIds.${n} = int(czm_round(${c}));`])}function gBe(e,t,n,i,o){let r=`u_featureIdTexture_${i}`,s=e.uniformMap,a=t.textureReader;s[r]=function(){return a.texture??o.context.defaultTexture};let c=a.channels,d=e.shaderBuilder;d.addStructField(Di.STRUCT_ID_FEATURE_IDS_FS,"int",n),d.addUniform("sampler2D",r,ye.FRAGMENT);let h=`v_texCoord_${a.texCoord}`,p=h,g=a.transform;if(l(g)&&!$.equals(g,$.IDENTITY)){let x=`${r}Transform`;d.addUniform("mat3",x,ye.FRAGMENT),s[x]=function(){return g},p=`vec2(${x} * vec3(${h}, 1.0))`}let f=`texture(${r}, ${p}).${c}`,y=`featureIds.${n} = czm_unpackUint(${f});`;d.addFunctionLines(Di.FUNCTION_ID_INITIALIZE_FEATURE_IDS_FS,[y])}function Rae(e,t,n,i){let o=e.shaderBuilder,r=ye.includesVertexShader(i);r&&o.addStructField(Di.STRUCT_ID_FEATURE_IDS_VS,"int",n),o.addStructField(Di.STRUCT_ID_FEATURE_IDS_FS,"int",n);let s=[`featureIds.${n} = featureIds.${t};`];r&&o.addFunctionLines(Di.FUNCTION_ID_INITIALIZE_FEATURE_ID_ALIASES_VS,s),o.addFunctionLines(Di.FUNCTION_ID_INITIALIZE_FEATURE_ID_ALIASES_FS,s)}function yBe(e,t,n,i,o){let r=e.model,s,a;if(l(t.repeat)){let d=xBe(t,n);s=xt.createVertexBuffer({context:o.context,typedArray:d,usage:Me.STATIC_DRAW}),s.vertexArrayDestroyable=!1,r._pipelineResources.push(s),r.statistics.addBuffer(s,!1)}else a=[t.offset];let c={index:e.attributeIndex++,instanceDivisor:i,value:a,vertexBuffer:s,normalize:!1,componentsPerAttribute:1,componentDatatype:Q.FLOAT,strideInBytes:Q.getSizeInBytes(Q.FLOAT),offsetInBytes:0};e.attributes.push(c)}function xBe(e,t){let n=e.offset,i=e.repeat,o=new Float32Array(t);for(let r=0;r<t;r++)o[r]=n+Math.floor(r/i);return o}var Eg=Di;var BRn=_(T(),1);var WRn=_(T(),1),vW=`void metadataStage( out Metadata metadata, out MetadataClass metadataClass, out MetadataStatistics metadataStatistics, ProcessedAttributes attributes ) { initializeMetadata(metadata, metadataClass, metadataStatistics, attributes); } `;var vRn=_(T(),1),wW=`void metadataStage( out Metadata metadata, out MetadataClass metadataClass, out MetadataStatistics metadataStatistics, ProcessedAttributes attributes ) { initializeMetadata(metadata, metadataClass, metadataStatistics, attributes); setMetadataVaryings(); } `;var Zi={name:"MetadataPipelineStage",STRUCT_ID_METADATA_VS:"MetadataVS",STRUCT_ID_METADATA_FS:"MetadataFS",STRUCT_NAME_METADATA:"Metadata",STRUCT_ID_METADATA_CLASS_VS:"MetadataClassVS",STRUCT_ID_METADATA_CLASS_FS:"MetadataClassFS",STRUCT_NAME_METADATA_CLASS:"MetadataClass",STRUCT_ID_METADATA_STATISTICS_VS:"MetadataStatisticsVS",STRUCT_ID_METADATA_STATISTICS_FS:"MetadataStatisticsFS",STRUCT_NAME_METADATA_STATISTICS:"MetadataStatistics",FUNCTION_ID_INITIALIZE_METADATA_VS:"initializeMetadataVS",FUNCTION_ID_INITIALIZE_METADATA_FS:"initializeMetadataFS",FUNCTION_SIGNATURE_INITIALIZE_METADATA:"void initializeMetadata(out Metadata metadata, out MetadataClass metadataClass, out MetadataStatistics metadataStatistics, ProcessedAttributes attributes)",FUNCTION_ID_SET_METADATA_VARYINGS:"setMetadataVaryings",FUNCTION_SIGNATURE_SET_METADATA_VARYINGS:"void setMetadataVaryings()",METADATA_CLASS_FIELDS:[{specName:"noData",shaderName:"noData"},{specName:"default",shaderName:"defaultValue"},{specName:"min",shaderName:"minValue"},{specName:"max",shaderName:"maxValue"}],METADATA_STATISTICS_FIELDS:[{specName:"min",shaderName:"minValue"},{specName:"max",shaderName:"maxValue"},{specName:"mean",shaderName:"mean",type:"float"},{specName:"median",shaderName:"median"},{specName:"standardDeviation",shaderName:"standardDeviation",type:"float"},{specName:"variance",shaderName:"variance",type:"float"},{specName:"sum",shaderName:"sum"}]};Zi.process=function(e,t,n){let{shaderBuilder:i,model:o}=e,{structuralMetadata:r={},content:s}=o,a=s?.tileset.metadataExtension?.statistics,c=_Be(r.propertyAttributes,t,a),d=SBe(r.propertyTextures,a),u=c.concat(d);VBe(i,u),ZBe(i),i.addVertexLines(wW),i.addFragmentLines(vW);for(let h=0;h<c.length;h++){let p=c[h];GBe(e,p)}for(let h=0;h<d.length;h++){let p=d[h];IBe(e,p)}};function _Be(e,t,n){return l(e)?e.flatMap(i=>TBe(i,t,n)):[]}function TBe(e,t,n){let{getAttributeByName:i,getAttributeInfo:o,sanitizeGlslIdentifier:r}=Qt,s=e.class.id,a=n?.classes[s],c=Object.entries(e.properties),d=new Array(c.length);for(let u=0;u<c.length;u++){let[h,p]=c[u],g=i(t,p.attribute),{glslType:f,variableName:y}=o(g);d[u]={metadataVariable:r(h),property:p,type:p.classProperty.type,glslType:f,variableName:y,propertyStatistics:a?.properties[h],shaderDestination:ye.BOTH}}return d}function SBe(e,t){return l(e)?e.flatMap(n=>CBe(n,t)):[]}function CBe(e,t){let{sanitizeGlslIdentifier:n}=Qt,i=e.class.id,o=t?.classes[i],r=Object.entries(e.properties).filter(([a,c])=>c.isGpuCompatible()),s=new Array(r.length);for(let a=0;a<r.length;a++){let[c,d]=r[a];s[a]={metadataVariable:n(c),property:d,type:d.classProperty.type,glslType:d.getGlslType(),propertyStatistics:o?.properties[c],shaderDestination:ye.FRAGMENT}}return s}function VBe(e,t){let n=new Set,i=new Set;for(let a=0;a<t.length;a++){let{type:c,glslType:d,propertyStatistics:u}=t[a];n.add(d),l(u)&&c!==ct.ENUM&&i.add(d)}let o=Zi.METADATA_CLASS_FIELDS;for(let a of n){let c=`${a}MetadataClass`;s(c,a,o)}let r=Zi.METADATA_STATISTICS_FIELDS;for(let a of i){let c=`${a}MetadataStatistics`;s(c,a,r)}function s(a,c,d){e.addStruct(a,a,ye.BOTH);for(let u=0;u<d.length;u++){let{shaderName:h}=d[u],p=d[u].type==="float"?RBe(c):c;e.addStructField(a,p,h)}}}var LBe={int:"float",ivec2:"vec2",ivec3:"vec3",ivec4:"vec4"};function RBe(e){let t=LBe[e];return l(t)?t:e}function ZBe(e){e.addStruct(Zi.STRUCT_ID_METADATA_VS,Zi.STRUCT_NAME_METADATA,ye.VERTEX),e.addStruct(Zi.STRUCT_ID_METADATA_FS,Zi.STRUCT_NAME_METADATA,ye.FRAGMENT),e.addStruct(Zi.STRUCT_ID_METADATA_CLASS_VS,Zi.STRUCT_NAME_METADATA_CLASS,ye.VERTEX),e.addStruct(Zi.STRUCT_ID_METADATA_CLASS_FS,Zi.STRUCT_NAME_METADATA_CLASS,ye.FRAGMENT),e.addStruct(Zi.STRUCT_ID_METADATA_STATISTICS_VS,Zi.STRUCT_NAME_METADATA_STATISTICS,ye.VERTEX),e.addStruct(Zi.STRUCT_ID_METADATA_STATISTICS_FS,Zi.STRUCT_NAME_METADATA_STATISTICS,ye.FRAGMENT),e.addFunction(Zi.FUNCTION_ID_INITIALIZE_METADATA_VS,Zi.FUNCTION_SIGNATURE_INITIALIZE_METADATA,ye.VERTEX),e.addFunction(Zi.FUNCTION_ID_INITIALIZE_METADATA_FS,Zi.FUNCTION_SIGNATURE_INITIALIZE_METADATA,ye.FRAGMENT),e.addFunction(Zi.FUNCTION_ID_SET_METADATA_VARYINGS,Zi.FUNCTION_SIGNATURE_SET_METADATA_VARYINGS,ye.VERTEX)}function GBe(e,t){EBe(e,t),Zae(e.shaderBuilder,t),Gae(e.shaderBuilder,t)}function EBe(e,t){let{shaderBuilder:n}=e,{metadataVariable:i,property:o,glslType:r}=t,s=Iae({valueExpression:`attributes.${t.variableName}`,renderResources:e,glslType:r,metadataVariable:i,shaderDestination:ye.BOTH,property:o});n.addStructField(Zi.STRUCT_ID_METADATA_VS,r,i),n.addStructField(Zi.STRUCT_ID_METADATA_FS,r,i);let a=`metadata.${i} = ${s};`;n.addFunctionLines(Zi.FUNCTION_ID_INITIALIZE_METADATA_VS,[a]),n.addFunctionLines(Zi.FUNCTION_ID_INITIALIZE_METADATA_FS,[a])}function IBe(e,t){XBe(e,t),Zae(e.shaderBuilder,t),Gae(e.shaderBuilder,t)}function XBe(e,t){let{shaderBuilder:n,uniformMap:i}=e,{metadataVariable:o,glslType:r,property:s}=t,{texCoord:a,channels:c,index:d,texture:u,transform:h}=s.textureReader,p=`u_propertyTexture_${d}`;i.hasOwnProperty(p)||(n.addUniform("sampler2D",p,ye.FRAGMENT),i[p]=()=>u),n.addStructField(Zi.STRUCT_ID_METADATA_FS,r,o);let g=`attributes.texCoord_${a}`,f=g;if(l(h)&&!$.equals(h,$.IDENTITY)){let V=`${p}Transform`;n.addUniform("mat3",V,ye.FRAGMENT),i[V]=function(){return h},f=`vec2(${V} * vec3(${g}, 1.0))`}let y=`texture(${p}, ${f}).${c}`,x=s.unpackInShader(y),S=Iae({valueExpression:x,renderResources:e,glslType:r,metadataVariable:o,shaderDestination:ye.FRAGMENT,property:s}),C=`metadata.${o} = ${S};`;n.addFunctionLines(Zi.FUNCTION_ID_INITIALIZE_METADATA_FS,[C])}function Zae(e,t){let{classProperty:n}=t.property,{metadataVariable:i,glslType:o,shaderDestination:r}=t,s=Eae(Zi.METADATA_CLASS_FIELDS,n,`metadataClass.${i}`,o),a=`${o}MetadataClass`;e.addStructField(Zi.STRUCT_ID_METADATA_CLASS_FS,a,i),e.addFunctionLines(Zi.FUNCTION_ID_INITIALIZE_METADATA_FS,s),ye.includesVertexShader(r)&&(e.addStructField(Zi.STRUCT_ID_METADATA_CLASS_VS,a,i),e.addFunctionLines(Zi.FUNCTION_ID_INITIALIZE_METADATA_VS,s))}function Gae(e,t){let{propertyStatistics:n}=t;if(!l(n))return;let{metadataVariable:i,type:o,glslType:r}=t;if(o===ct.ENUM)return;let s=Zi.METADATA_STATISTICS_FIELDS,a=`metadataStatistics.${i}`,c=Eae(s,n,a,r),d=`${r}MetadataStatistics`;e.addStructField(Zi.STRUCT_ID_METADATA_STATISTICS_FS,d,i),e.addFunctionLines(Zi.FUNCTION_ID_INITIALIZE_METADATA_FS,c),ye.includesVertexShader(t.shaderDestination)&&(e.addStructField(Zi.STRUCT_ID_METADATA_STATISTICS_VS,d,i),e.addFunctionLines(Zi.FUNCTION_ID_INITIALIZE_METADATA_VS,c))}function Eae(e,t,n,i){function o(r){let s=t[r.specName];if(l(s))return`${n}.${r.shaderName} = ${i}(${s});`}return l(t)?e.map(o).filter(l):[]}function Iae(e){let{valueExpression:t,property:n}=e;if(!n.hasValueTransform)return t;let i=e.metadataVariable,o=`u_${i}_offset`,r=`u_${i}_scale`,{shaderBuilder:s,uniformMap:a}=e.renderResources,{glslType:c,shaderDestination:d}=e;s.addUniform(c,o,d),s.addUniform(c,r,d);let{offset:u,scale:h}=n;return a[o]=()=>u,a[r]=()=>h,`czm_valueTransform(${o}, ${r}, ${t})`}var Au=Zi;var YRn=_(T(),1),WBe={INHERIT:0,OPAQUE:1,TRANSLUCENT:2},Ig=Object.freeze(WBe);var ba={name:"CustomShaderPipelineStage",STRUCT_ID_ATTRIBUTES_VS:"AttributesVS",STRUCT_ID_ATTRIBUTES_FS:"AttributesFS",STRUCT_NAME_ATTRIBUTES:"Attributes",STRUCT_ID_VERTEX_INPUT:"VertexInput",STRUCT_NAME_VERTEX_INPUT:"VertexInput",STRUCT_ID_FRAGMENT_INPUT:"FragmentInput",STRUCT_NAME_FRAGMENT_INPUT:"FragmentInput",FUNCTION_ID_INITIALIZE_INPUT_STRUCT_VS:"initializeInputStructVS",FUNCTION_SIGNATURE_INITIALIZE_INPUT_STRUCT_VS:"void initializeInputStruct(out VertexInput vsInput, ProcessedAttributes attributes)",FUNCTION_ID_INITIALIZE_INPUT_STRUCT_FS:"initializeInputStructFS",FUNCTION_SIGNATURE_INITIALIZE_INPUT_STRUCT_FS:"void initializeInputStruct(out FragmentInput fsInput, ProcessedAttributes attributes)",_oneTimeWarning:_t};ba.process=function(e,t,n){let{shaderBuilder:i,model:o,alphaOptions:r}=e,{customShader:s}=o,{lightingModel:a,translucencyMode:c}=s;l(a)&&(e.lightingOptions.lightingModel=a),c===Ig.TRANSLUCENT?r.pass=Ee.TRANSLUCENT:c===Ig.OPAQUE&&(r.pass=void 0);let d=kBe(s,t);if(!d.customShaderEnabled)return;if(OBe(i,s,d),d.shouldComputePositionWC&&i.addDefine("COMPUTE_POSITION_WC_CUSTOM_SHADER",void 0,ye.BOTH),l(s.vertexShaderText)&&i.addDefine("HAS_CUSTOM_VERTEX_SHADER",void 0,ye.VERTEX),l(s.fragmentShaderText)){i.addDefine("HAS_CUSTOM_FRAGMENT_SHADER",void 0,ye.FRAGMENT);let p=bb.getDefineName(s.mode);i.addDefine(p,void 0,ye.FRAGMENT)}let u=s.uniforms;for(let p in u)if(u.hasOwnProperty(p)){let g=u[p];i.addUniform(g.type,p)}let h=s.varyings;for(let p in h)if(h.hasOwnProperty(p)){let g=h[p];i.addVarying(g,p)}e.uniformMap=St(e.uniformMap,s.uniformMap)};function PBe(e){let t={};for(let n=0;n<e.length;n++){let i=Qt.getAttributeInfo(e[n]);t[i.variableName]=i}return t}var vBe={position:"vec3",normal:"vec3",tangent:"vec3",bitangent:"vec3",texCoord:"vec2",color:"vec4",joints:"ivec4",weights:"vec4"},wBe={position:"vec3(0.0)",normal:"vec3(0.0, 0.0, 1.0)",tangent:"vec3(1.0, 0.0, 0.0)",bitangent:"vec3(0.0, 1.0, 0.0)",texCoord:"vec2(0.0)",color:"vec4(1.0)",joints:"ivec4(0)",weights:"vec4(0.0)"};function Xae(e){let t=e.replace(/_[0-9]+$/,"");t=t.replace(/(MC|EC)$/,"");let n=vBe[t],i=wBe[t];if(l(n))return{attributeField:[n,e],value:i}}function FBe(e,t){if(!l(e.vertexShaderText))return{enabled:!1};let n=e.usedVariablesVertex.attributeSet,i=Wae(t,n,!1),o=Pae(t,n,!1),r,s=[],a=[];for(let c in i){if(!i.hasOwnProperty(c))continue;let u=[i[c].glslType,c];s.push(u),r=`vsInput.attributes.${c} = attributes.${c};`,a.push(r)}for(let c=0;c<o.length;c++){let d=o[c],u=Xae(d);if(!l(u))return ba._oneTimeWarning("CustomShaderPipelineStage.incompatiblePrimitiveVS",`Primitive is missing attribute ${d}, disabling custom vertex shader`),{enabled:!1};s.push(u.attributeField),r=`vsInput.attributes.${d} = ${u.value};`,a.push(r)}return{enabled:!0,attributeFields:s,initializationLines:a}}function ABe(e){let t=[],n=[],i=e.usedVariablesFragment.attributeSet;return i.hasOwnProperty("positionWC")&&(t.push(["vec3","positionWC"]),n.push("fsInput.attributes.positionWC = attributes.positionWC;")),i.hasOwnProperty("positionEC")&&(t.push(["vec3","positionEC"]),n.push("fsInput.attributes.positionEC = attributes.positionEC;")),{attributeFields:t,initializationLines:n}}function MBe(e,t){if(!l(e.fragmentShaderText))return{enabled:!1};let n=e.usedVariablesFragment.attributeSet,i=Wae(t,n,!0),o=Pae(t,n,!0),r,s=[],a=[];for(let d in i){if(!i.hasOwnProperty(d))continue;let h=[i[d].glslType,d];s.push(h),r=`fsInput.attributes.${d} = attributes.${d};`,a.push(r)}for(let d=0;d<o.length;d++){let u=o[d],h=Xae(u);if(!l(h))return ba._oneTimeWarning("CustomShaderPipelineStage.incompatiblePrimitiveFS",`Primitive is missing attribute ${u}, disabling custom fragment shader.`),{enabled:!1};s.push(h.attributeField),r=`fsInput.attributes.${u} = ${h.value};`,a.push(r)}let c=ABe(e);return{enabled:!0,attributeFields:s.concat(c.attributeFields),initializationLines:c.initializationLines.concat(a)}}var NBe={positionWC:!0,positionEC:!0};function Wae(e,t,n){let i={};for(let o in e){if(!e.hasOwnProperty(o))continue;let r=e[o],s=o;n&&o==="normalMC"?s="normalEC":n&&o==="tangentMC"&&(s="tangentEC",r.glslType="vec3"),t.hasOwnProperty(s)&&(i[s]=r)}return i}function Pae(e,t,n){let i=[];for(let o in t){if(!t.hasOwnProperty(o)||NBe.hasOwnProperty(o))continue;let r=o;n&&o==="normalEC"?r="normalMC":n&&o==="tangentEC"&&(r="tangentMC"),e.hasOwnProperty(r)||i.push(o)}return i}function kBe(e,t){let n=PBe(t.attributes),i=FBe(e,n),o=MBe(e,n),s=e.usedVariablesFragment.attributeSet.hasOwnProperty("positionWC")&&o.enabled;return{vertexLines:i,fragmentLines:o,customShaderEnabled:i.enabled||o.enabled,shouldComputePositionWC:s}}function UBe(e,t){let n=ba.STRUCT_ID_ATTRIBUTES_VS;e.addStruct(n,ba.STRUCT_NAME_ATTRIBUTES,ye.VERTEX);let{attributeFields:i,initializationLines:o}=t;for(let s=0;s<i.length;s++){let[a,c]=i[s];e.addStructField(n,a,c)}n=ba.STRUCT_ID_VERTEX_INPUT,e.addStruct(n,ba.STRUCT_NAME_VERTEX_INPUT,ye.VERTEX),e.addStructField(n,ba.STRUCT_NAME_ATTRIBUTES,"attributes"),e.addStructField(n,Eg.STRUCT_NAME_FEATURE_IDS,"featureIds"),e.addStructField(n,Au.STRUCT_NAME_METADATA,"metadata"),e.addStructField(n,Au.STRUCT_NAME_METADATA_CLASS,"metadataClass"),e.addStructField(n,Au.STRUCT_NAME_METADATA_STATISTICS,"metadataStatistics");let r=ba.FUNCTION_ID_INITIALIZE_INPUT_STRUCT_VS;e.addFunction(r,ba.FUNCTION_SIGNATURE_INITIALIZE_INPUT_STRUCT_VS,ye.VERTEX),e.addFunctionLines(r,o)}function DBe(e,t){let n=ba.STRUCT_ID_ATTRIBUTES_FS;e.addStruct(n,ba.STRUCT_NAME_ATTRIBUTES,ye.FRAGMENT);let{attributeFields:i,initializationLines:o}=t;for(let s=0;s<i.length;s++){let[a,c]=i[s];e.addStructField(n,a,c)}n=ba.STRUCT_ID_FRAGMENT_INPUT,e.addStruct(n,ba.STRUCT_NAME_FRAGMENT_INPUT,ye.FRAGMENT),e.addStructField(n,ba.STRUCT_NAME_ATTRIBUTES,"attributes"),e.addStructField(n,Eg.STRUCT_NAME_FEATURE_IDS,"featureIds"),e.addStructField(n,Au.STRUCT_NAME_METADATA,"metadata"),e.addStructField(n,Au.STRUCT_NAME_METADATA_CLASS,"metadataClass"),e.addStructField(n,Au.STRUCT_NAME_METADATA_STATISTICS,"metadataStatistics");let r=ba.FUNCTION_ID_INITIALIZE_INPUT_STRUCT_FS;e.addFunction(r,ba.FUNCTION_SIGNATURE_INITIALIZE_INPUT_STRUCT_FS,ye.FRAGMENT),e.addFunctionLines(r,o)}var BBe=[];function OBe(e,t,n){let{vertexLines:i,fragmentLines:o}=n,r=BBe;i.enabled&&(UBe(e,i),r.length=0,r.push("#line 0",t.vertexShaderText,IW),e.addVertexLines(r)),o.enabled&&(DBe(e,o),r.length=0,r.push("#line 0",t.fragmentShaderText,XW),e.addFragmentLines(r))}var FW=ba;var mZn=_(T(),1);var AW={name:"DequantizationPipelineStage",FUNCTION_ID_DEQUANTIZATION_STAGE_VS:"dequantizationStage",FUNCTION_SIGNATURE_DEQUANTIZATION_STAGE_VS:"void dequantizationStage(inout ProcessedAttributes attributes)"};AW.process=function(e,t,n){let i=e.shaderBuilder,o=e.model,r=l(o.classificationType);i.addDefine("USE_DEQUANTIZATION",void 0,ye.VERTEX),i.addFunction(AW.FUNCTION_ID_DEQUANTIZATION_STAGE_VS,AW.FUNCTION_SIGNATURE_DEQUANTIZATION_STAGE_VS,ye.VERTEX);let s=t.attributes;for(let a=0;a<s.length;a++){let c=s[a],d=c.quantization;if(!l(d))continue;let u=c.semantic===ft.POSITION,h=c.semantic===ft.TEXCOORD;if(r&&!u&&!h)continue;let p=Qt.getAttributeInfo(c);zBe(i,p),YBe(e,p)}};function YBe(e,t){let n=e.shaderBuilder,i=e.uniformMap,o=t.variableName,r=t.attribute.quantization;if(r.octEncoded){let s=`model_normalizationRange_${o}`;n.addUniform("float",s,ye.VERTEX),i[s]=function(){return r.normalizationRange}}else{let s=`model_quantizedVolumeOffset_${o}`,a=`model_quantizedVolumeStepSize_${o}`,c=t.glslType;n.addUniform(c,s,ye.VERTEX),n.addUniform(c,a,ye.VERTEX);let d=r.quantizedVolumeOffset,u=r.quantizedVolumeStepSize;/^color_\d+$/.test(o)&&(d=vae(d,0),u=vae(u,1)),i[s]=function(){return d},i[a]=function(){return u}}}function vae(e,t){return e instanceof se?e:new se(e.x,e.y,e.z,t)}function zBe(e,t){let n=t.variableName,i=t.attribute.quantization,o;i.octEncoded?o=HBe(n,i):o=KBe(n),e.addFunctionLines(AW.FUNCTION_ID_DEQUANTIZATION_STAGE_VS,[o])}function HBe(e,t){let n=`attributes.${e}`,i=`a_quantized_${e}`,o=`model_normalizationRange_${e}`,r=t.octEncodedZXY?".zxy":".xyz";return`${n} = czm_octDecode(${i}, ${o})${r};`}function KBe(e){let t=`attributes.${e}`,n=`a_quantized_${e}`,i=`model_quantizedVolumeOffset_${e}`,o=`model_quantizedVolumeStepSize_${e}`;return`${t} = ${i} + ${n} * ${o};`}var MW=AW;var NZn=_(T(),1);var fZn=_(T(),1),NW=`void geometryStage(out ProcessedAttributes attributes) { attributes.positionMC = v_positionMC; attributes.positionEC = v_positionEC; #if defined(COMPUTE_POSITION_WC_CUSTOM_SHADER) || defined(COMPUTE_POSITION_WC_STYLE) || defined(COMPUTE_POSITION_WC_ATMOSPHERE) attributes.positionWC = v_positionWC; #endif #ifdef HAS_NORMALS // renormalize after interpolation attributes.normalEC = normalize(v_normalEC); #endif #ifdef HAS_TANGENTS attributes.tangentEC = normalize(v_tangentEC); #endif #ifdef HAS_BITANGENTS attributes.bitangentEC = normalize(v_bitangentEC); #endif // Everything else is dynamically generated in GeometryPipelineStage setDynamicVaryings(attributes); } `;var bZn=_(T(),1),kW=`vec4 geometryStage(inout ProcessedAttributes attributes, mat4 modelView, mat3 normal) { vec4 computedPosition; // Compute positions in different coordinate systems vec3 positionMC = attributes.positionMC; v_positionMC = positionMC; v_positionEC = (modelView * vec4(positionMC, 1.0)).xyz; #if defined(USE_2D_POSITIONS) || defined(USE_2D_INSTANCING) vec3 position2D = attributes.position2D; vec3 positionEC = (u_modelView2D * vec4(position2D, 1.0)).xyz; computedPosition = czm_projection * vec4(positionEC, 1.0); #else computedPosition = czm_projection * vec4(v_positionEC, 1.0); #endif // Sometimes the custom shader and/or style needs this #if defined(COMPUTE_POSITION_WC_CUSTOM_SHADER) || defined(COMPUTE_POSITION_WC_STYLE) || defined(COMPUTE_POSITION_WC_ATMOSPHERE) || defined(ENABLE_CLIPPING_POLYGONS) // Note that this is a 32-bit position which may result in jitter on small // scales. v_positionWC = (czm_model * vec4(positionMC, 1.0)).xyz; #endif #ifdef HAS_NORMALS v_normalEC = normalize(normal * attributes.normalMC); #endif #ifdef HAS_TANGENTS v_tangentEC = normalize(normal * attributes.tangentMC); #endif #ifdef HAS_BITANGENTS v_bitangentEC = normalize(normal * attributes.bitangentMC); #endif // All other varyings need to be dynamically generated in // GeometryPipelineStage setDynamicVaryings(attributes); return computedPosition; } `;var LZn=_(T(),1);var yZn=_(T(),1),o1=`vec2 computeSt(float featureId) { float stepX = model_textureStep.x; float centerX = model_textureStep.y; #ifdef MULTILINE_BATCH_TEXTURE float stepY = model_textureStep.z; float centerY = model_textureStep.w; float xId = mod(featureId, model_textureDimensions.x); float yId = floor(featureId / model_textureDimensions.x); return vec2(centerX + (xId * stepX), centerY + (yId * stepY)); #else return vec2(centerX + (featureId * stepX), 0.5); #endif } void selectedFeatureIdStage(out SelectedFeature feature, FeatureIds featureIds) { int featureId = featureIds.SELECTED_FEATURE_ID; if (featureId < model_featuresLength) { vec2 featureSt = computeSt(float(featureId)); feature.id = featureId; feature.st = featureSt; feature.color = texture(model_batchTexture, featureSt); } // Floating point comparisons can be unreliable in GLSL, so we // increment the feature ID to make sure it's always greater // then the model_featuresLength - a condition we check for in the // pick ID, to avoid sampling the pick texture if the feature ID is // greater than the number of features. else { feature.id = model_featuresLength + 1; feature.st = vec2(0.0); feature.color = vec4(1.0); } #ifdef HAS_NULL_FEATURE_ID if (featureId == model_nullFeatureId) { feature.id = featureId; feature.st = vec2(0.0); feature.color = vec4(1.0); } #endif } `;var UW={name:"SelectedFeatureIdPipelineStage",STRUCT_ID_SELECTED_FEATURE:"SelectedFeature",STRUCT_NAME_SELECTED_FEATURE:"SelectedFeature"};UW.process=function(e,t,n){let i=e.shaderBuilder;e.hasPropertyTable=!0;let o=e.model,r=e.runtimeNode.node,s=JBe(o,r,t),a=s.shaderDestination;i.addDefine("HAS_SELECTED_FEATURE_ID",void 0,a),i.addDefine("SELECTED_FEATURE_ID",s.variableName,a),i.addDefine(s.featureIdDefine,void 0,a),QBe(i);let c=s.featureIds.nullFeatureId,d=e.uniformMap;l(c)&&(i.addDefine("HAS_NULL_FEATURE_ID",void 0,a),i.addUniform("int","model_nullFeatureId",a),d.model_nullFeatureId=function(){return c}),s.shaderDestination===ye.BOTH&&i.addVertexLines(o1),i.addFragmentLines(o1)};function wae(e){return e instanceof Tn.FeatureIdTexture?"HAS_SELECTED_FEATURE_ID_TEXTURE":"HAS_SELECTED_FEATURE_ID_ATTRIBUTE"}function Fae(e){return e instanceof Tn.FeatureIdTexture?ye.FRAGMENT:ye.BOTH}function JBe(e,t,n){let i,o;return l(t.instances)&&(o=Qt.getFeatureIdsByLabel(t.instances.featureIds,e.instanceFeatureIdLabel),l(o))?(i=o.label??o.positionalLabel,{featureIds:o,variableName:i,shaderDestination:Fae(o),featureIdDefine:wae(o)}):(o=Qt.getFeatureIdsByLabel(n.featureIds,e.featureIdLabel),i=o.label??o.positionalLabel,{featureIds:o,variableName:i,shaderDestination:Fae(o),featureIdDefine:wae(o)})}function QBe(e){e.addStructField(UW.STRUCT_ID_SELECTED_FEATURE,"int","id"),e.addStructField(UW.STRUCT_ID_SELECTED_FEATURE,"vec2","st"),e.addStructField(UW.STRUCT_ID_SELECTED_FEATURE,"vec4","color")}var Xg=UW;var zs={name:"GeometryPipelineStage",STRUCT_ID_PROCESSED_ATTRIBUTES_VS:"ProcessedAttributesVS",STRUCT_ID_PROCESSED_ATTRIBUTES_FS:"ProcessedAttributesFS",STRUCT_NAME_PROCESSED_ATTRIBUTES:"ProcessedAttributes",FUNCTION_ID_INITIALIZE_ATTRIBUTES:"initializeAttributes",FUNCTION_SIGNATURE_INITIALIZE_ATTRIBUTES:"void initializeAttributes(out ProcessedAttributes attributes)",FUNCTION_ID_SET_DYNAMIC_VARYINGS_VS:"setDynamicVaryingsVS",FUNCTION_ID_SET_DYNAMIC_VARYINGS_FS:"setDynamicVaryingsFS",FUNCTION_SIGNATURE_SET_DYNAMIC_VARYINGS:"void setDynamicVaryings(inout ProcessedAttributes attributes)"};zs.process=function(e,t,n){let{shaderBuilder:i,model:o}=e;i.addStruct(zs.STRUCT_ID_PROCESSED_ATTRIBUTES_VS,"ProcessedAttributes",ye.VERTEX),i.addStruct(zs.STRUCT_ID_PROCESSED_ATTRIBUTES_FS,"ProcessedAttributes",ye.FRAGMENT),i.addStruct(Xg.STRUCT_ID_SELECTED_FEATURE,Xg.STRUCT_NAME_SELECTED_FEATURE,ye.BOTH),i.addFunction(zs.FUNCTION_ID_INITIALIZE_ATTRIBUTES,zs.FUNCTION_SIGNATURE_INITIALIZE_ATTRIBUTES,ye.VERTEX),i.addVarying("vec3","v_positionWC"),i.addVarying("vec3","v_positionEC"),i.addStructField(zs.STRUCT_ID_PROCESSED_ATTRIBUTES_FS,"vec3","positionWC"),i.addStructField(zs.STRUCT_ID_PROCESSED_ATTRIBUTES_FS,"vec3","positionEC"),i.addFunction(zs.FUNCTION_ID_SET_DYNAMIC_VARYINGS_VS,zs.FUNCTION_SIGNATURE_SET_DYNAMIC_VARYINGS,ye.VERTEX),i.addFunction(zs.FUNCTION_ID_SET_DYNAMIC_VARYINGS_FS,zs.FUNCTION_SIGNATURE_SET_DYNAMIC_VARYINGS,ye.FRAGMENT),o.type===cr.TILE_PNTS&&i.addDefine("HAS_SRGB_COLOR",void 0,ye.FRAGMENT);let r=n.mode!==oe.SCENE3D&&!n.scene3DOnly&&o._projectTo2D,s=l(e.runtimeNode.node.instances),a=r&&!s,c=t.attributes.length;for(let d=0;d<c;d++){let u=t.attributes[d],h=on.getAttributeLocationCount(u.type),p=u.semantic===ft.POSITION,g;h>1?(g=e.attributeIndex,e.attributeIndex+=h):p&&!a?g=0:g=e.attributeIndex++,jBe(e,u,g,h,r,s)}sOe(i,t.attributes),t.primitiveType===we.POINTS&&i.addDefine("PRIMITIVE_TYPE_POINTS"),i.addVertexLines(kW),i.addFragmentLines(NW)};function jBe(e,t,n,i,o,r){let s=e.shaderBuilder,a=Qt.getAttributeInfo(t),c=o&&!r;i>1?eOe(e,t,n,i):$Be(e,t,n,c),nOe(s,a,c),tOe(s,a),l(t.semantic)&&qBe(s,t),iOe(s,a,o),oOe(s,a,c),rOe(s,a)}function qBe(e,t){let{semantic:n,setIndex:i}=t;switch(n){case ft.NORMAL:e.addDefine("HAS_NORMALS");break;case ft.TANGENT:e.addDefine("HAS_TANGENTS");break;case ft.FEATURE_ID:e.addDefine(`HAS${n}_${i}`);break;case ft.TEXCOORD:case ft.COLOR:e.addDefine(`HAS_${n}_${i}`)}}function $Be(e,t,n,i){let{quantization:o,semantic:r,setIndex:s}=t,{type:a,componentDatatype:c}=l(o)?o:t;r===ft.FEATURE_ID&&s>=e.featureIdVertexAttributeSetIndex&&(e.featureIdVertexAttributeSetIndex=s+1);let d=r===ft.POSITION,u=d?0:n,h=on.getNumberOfComponents(a),p={index:u,value:l(t.buffer)?void 0:t.constant,vertexBuffer:t.buffer,count:t.count,componentsPerAttribute:h,componentDatatype:c,offsetInBytes:t.byteOffset,strideInBytes:t.byteStride,normalize:t.normalized};if(e.attributes.push(p),!d||!i)return;let g=e.runtimePrimitive.positionBuffer2D,f={index:n,vertexBuffer:g,count:t.count,componentsPerAttribute:h,componentDatatype:Q.FLOAT,offsetInBytes:0,strideInBytes:void 0,normalize:t.normalized};e.attributes.push(f)}function eOe(e,t,n,i){let{quantization:o,normalized:r}=t,{type:s,componentDatatype:a}=l(o)?o:t,d=on.getNumberOfComponents(s)/i,u=Q.getSizeInBytes(a),h=d*u,p=t.byteStride;for(let g=0;g<i;g++){let f=t.byteOffset+g*h,y={index:n+g,vertexBuffer:t.buffer,componentsPerAttribute:d,componentDatatype:a,offsetInBytes:f,strideInBytes:p,normalize:r};e.attributes.push(y)}}function tOe(e,t){let n=t.variableName,i=`v_${n}`,o;n==="normalMC"?(i="v_normalEC",o=t.glslType):n==="tangentMC"?(o="vec3",i="v_tangentEC"):o=t.glslType,e.addVarying(o,i)}function nOe(e,t,n){let i=t.attribute.semantic,o=t.variableName,r,s;t.isQuantized?(r=`a_quantized_${o}`,s=t.quantizedGlslType):(r=`a_${o}`,s=t.glslType);let a=i===ft.POSITION;a?e.setPositionAttribute(s,r):e.addAttribute(s,r),a&&n&&e.addAttribute("vec3","a_position2D")}function iOe(e,t,n){let i=zs.STRUCT_ID_PROCESSED_ATTRIBUTES_VS,o=zs.STRUCT_ID_PROCESSED_ATTRIBUTES_FS,{variableName:r,glslType:s}=t;r==="tangentMC"?(e.addStructField(i,"vec3","tangentMC"),e.addStructField(i,"float","tangentSignMC"),e.addStructField(o,"vec3","tangentEC")):r==="normalMC"?(e.addStructField(i,"vec3","normalMC"),e.addStructField(o,"vec3","normalEC")):(e.addStructField(i,s,r),e.addStructField(o,s,r)),r==="positionMC"&&n&&e.addStructField(i,"vec3","position2D")}function oOe(e,t,n){let i=zs.FUNCTION_ID_INITIALIZE_ATTRIBUTES,o=t.variableName;if(o==="positionMC"&&n&&e.addFunctionLines(i,["attributes.position2D = a_position2D;"]),t.isQuantized)return;let s=[];o==="tangentMC"?(s.push("attributes.tangentMC = a_tangentMC.xyz;"),s.push("attributes.tangentSignMC = a_tangentMC.w;")):s.push(`attributes.${o} = a_${o};`),e.addFunctionLines(i,s)}function rOe(e,t){let{semantic:n,setIndex:i}=t.attribute;if(l(n)&&!l(i))return;let o=zs.FUNCTION_ID_SET_DYNAMIC_VARYINGS_VS,r=t.variableName,s=`v_${r} = attributes.${r};`;e.addFunctionLines(o,[s]),o=zs.FUNCTION_ID_SET_DYNAMIC_VARYINGS_FS,s=`attributes.${r} = v_${r};`,e.addFunctionLines(o,[s])}function sOe(e,t){let n=!1,i=!1;for(let o=0;o<t.length;o++){let r=t[o];r.semantic===ft.NORMAL?n=!0:r.semantic===ft.TANGENT&&(i=!0)}!n||!i||(e.addDefine("HAS_BITANGENTS"),e.addVarying("vec3","v_bitangentEC"),e.addStructField(zs.STRUCT_ID_PROCESSED_ATTRIBUTES_VS,"vec3","bitangentMC"),e.addStructField(zs.STRUCT_ID_PROCESSED_ATTRIBUTES_FS,"vec3","bitangentEC"))}var DW=zs;var JZn=_(T(),1);var UZn=_(T(),1),BW=`#ifdef USE_IBL_LIGHTING vec3 computeIBL(vec3 position, vec3 normal, vec3 lightDirection, vec3 lightColorHdr, czm_modelMaterial material) { #if defined(DIFFUSE_IBL) || defined(SPECULAR_IBL) // Environment maps were provided, use them for IBL vec3 viewDirection = -normalize(position); vec3 iblColor = textureIBL(viewDirection, normal, material); return iblColor; #endif return vec3(0.0); } #endif #ifdef USE_CLEARCOAT vec3 addClearcoatReflection(vec3 baseLayerColor, vec3 position, vec3 lightDirection, vec3 lightColorHdr, czm_modelMaterial material) { vec3 viewDirection = -normalize(position); vec3 halfwayDirection = normalize(viewDirection + lightDirection); vec3 normal = material.clearcoatNormal; float NdotL = clamp(dot(normal, lightDirection), 0.001, 1.0); // clearcoatF0 = vec3(pow((ior - 1.0) / (ior + 1.0), 2.0)), but without KHR_materials_ior, ior is a constant 1.5. vec3 f0 = vec3(0.04); vec3 f90 = vec3(1.0); // Note: clearcoat Fresnel computed with dot(n, v) instead of dot(v, h). // This is to make it energy conserving with a simple layering function. float NdotV = clamp(dot(normal, viewDirection), 0.0, 1.0); vec3 F = fresnelSchlick2(f0, f90, NdotV); // compute specular reflection from direct lighting float roughness = material.clearcoatRoughness; float alphaRoughness = roughness * roughness; float directStrength = computeDirectSpecularStrength(normal, lightDirection, viewDirection, halfwayDirection, alphaRoughness); vec3 directReflection = F * directStrength * NdotL; vec3 color = lightColorHdr * directReflection; #ifdef SPECULAR_IBL // Find the direction in which to sample the environment map vec3 reflectMC = normalize(model_iblReferenceFrameMatrix * reflect(-viewDirection, normal)); vec3 iblColor = computeSpecularIBL(reflectMC, NdotV, f0, roughness); color += iblColor * material.occlusion; #endif float clearcoatFactor = material.clearcoatFactor; vec3 clearcoatColor = color * clearcoatFactor; // Dim base layer based on transmission loss through clearcoat return baseLayerColor * (1.0 - clearcoatFactor * F) + clearcoatColor; } #endif #if defined(LIGHTING_PBR) && defined(HAS_NORMALS) vec3 computePbrLighting(in czm_modelMaterial material, in vec3 position) { #ifdef USE_CUSTOM_LIGHT_COLOR vec3 lightColorHdr = model_lightColorHdr; #else vec3 lightColorHdr = czm_lightColorHdr; #endif vec3 viewDirection = -normalize(position); vec3 normal = material.normalEC; vec3 lightDirection = normalize(czm_lightDirectionEC); vec3 directLighting = czm_pbrLighting(viewDirection, normal, lightDirection, material); vec3 directColor = lightColorHdr * directLighting; // Accumulate colors from base layer vec3 color = directColor + material.emissive; #ifdef USE_IBL_LIGHTING color += computeIBL(position, normal, lightDirection, lightColorHdr, material); #endif #ifdef USE_CLEARCOAT color = addClearcoatReflection(color, position, lightDirection, lightColorHdr, material); #endif return color; } #endif /** * Compute the material color under the current lighting conditions. * All other material properties are passed through so further stages * have access to them. * * @param {czm_modelMaterial} material The material properties from {@MaterialStageFS} * @param {ProcessedAttributes} attributes */ void lightingStage(inout czm_modelMaterial material, ProcessedAttributes attributes) { #ifdef LIGHTING_PBR #ifdef HAS_NORMALS vec3 color = computePbrLighting(material, attributes.positionEC); #else vec3 color = material.diffuse * material.occlusion + material.emissive; #endif // In HDR mode, the frame buffer is in linear color space. The // post-processing stages (see PostProcessStageCollection) will handle // tonemapping. However, if HDR is not enabled, we must tonemap else large // values may be clamped to 1.0 #ifndef HDR color = czm_pbrNeutralTonemapping(color); #endif #else // unlit vec3 color = material.diffuse; #endif #ifdef HAS_POINT_CLOUD_COLOR_STYLE // The colors resulting from point cloud styles are adjusted differently. color = czm_gammaCorrect(color); #elif !defined(HDR) // If HDR is not enabled, the frame buffer stores sRGB colors rather than // linear colors so the linear value must be converted. color = czm_linearToSrgb(color); #endif material.diffuse = color; } `;var BZn=_(T(),1),aOe={UNLIT:0,PBR:1},Vf=Object.freeze(aOe);var Aae={name:"LightingPipelineStage"};Aae.process=function(e,t){let{model:n,lightingOptions:i,shaderBuilder:o}=e;if(l(n.lightColor)){o.addDefine("USE_CUSTOM_LIGHT_COLOR",void 0,ye.FRAGMENT),o.addUniform("vec3","model_lightColorHdr",ye.FRAGMENT);let s=e.uniformMap;s.model_lightColorHdr=function(){return n.lightColor}}let{lightingModel:r}=i;r===Vf.PBR?o.addDefine("LIGHTING_PBR",void 0,ye.FRAGMENT):o.addDefine("LIGHTING_UNLIT",void 0,ye.FRAGMENT),o.addFragmentLines(BW)};var OW=Aae;var uGn=_(T(),1);var jZn=_(T(),1),YW=`// If the style color is white, it implies the feature has not been styled. bool isDefaultStyleColor(vec3 color) { return all(greaterThan(color, vec3(1.0 - czm_epsilon3))); } vec3 blend(vec3 sourceColor, vec3 styleColor, float styleColorBlend) { vec3 blendColor = mix(sourceColor, styleColor, styleColorBlend); vec3 color = isDefaultStyleColor(styleColor.rgb) ? sourceColor : blendColor; return color; } vec2 computeTextureTransform(vec2 texCoord, mat3 textureTransform) { return vec2(textureTransform * vec3(texCoord, 1.0)); } #ifdef HAS_NORMAL_TEXTURE vec2 getNormalTexCoords() { vec2 texCoord = TEXCOORD_NORMAL; #ifdef HAS_NORMAL_TEXTURE_TRANSFORM texCoord = vec2(u_normalTextureTransform * vec3(texCoord, 1.0)); #endif return texCoord; } #endif #if defined(HAS_NORMAL_TEXTURE) || defined(HAS_CLEARCOAT_NORMAL_TEXTURE) vec3 computeTangent(in vec3 position, in vec2 normalTexCoords) { vec2 tex_dx = dFdx(normalTexCoords); vec2 tex_dy = dFdy(normalTexCoords); float determinant = tex_dx.x * tex_dy.y - tex_dy.x * tex_dx.y; vec3 tangent = tex_dy.t * dFdx(position) - tex_dx.t * dFdy(position); return tangent / determinant; } #endif #ifdef USE_ANISOTROPY struct NormalInfo { vec3 tangent; vec3 bitangent; vec3 normal; vec3 geometryNormal; }; NormalInfo getNormalInfo(ProcessedAttributes attributes) { vec3 geometryNormal = attributes.normalEC; #ifdef HAS_NORMAL_TEXTURE vec2 normalTexCoords = getNormalTexCoords(); #endif #ifdef HAS_BITANGENTS vec3 tangent = attributes.tangentEC; vec3 bitangent = attributes.bitangentEC; #else // Assume HAS_NORMAL_TEXTURE vec3 tangent = computeTangent(attributes.positionEC, normalTexCoords); tangent = normalize(tangent - geometryNormal * dot(geometryNormal, tangent)); vec3 bitangent = normalize(cross(geometryNormal, tangent)); #endif #ifdef HAS_NORMAL_TEXTURE mat3 tbn = mat3(tangent, bitangent, geometryNormal); vec3 normalSample = texture(u_normalTexture, normalTexCoords).rgb; normalSample = 2.0 * normalSample - 1.0; #ifdef HAS_NORMAL_TEXTURE_SCALE normalSample.xy *= u_normalTextureScale; #endif vec3 normal = normalize(tbn * normalSample); #else vec3 normal = geometryNormal; #endif #ifdef HAS_DOUBLE_SIDED_MATERIAL if (czm_backFacing()) { tangent *= -1.0; bitangent *= -1.0; normal *= -1.0; geometryNormal *= -1.0; } #endif NormalInfo normalInfo; normalInfo.tangent = tangent; normalInfo.bitangent = bitangent; normalInfo.normal = normal; normalInfo.geometryNormal = geometryNormal; return normalInfo; } #endif #if defined(HAS_NORMAL_TEXTURE) && !defined(HAS_WIREFRAME) vec3 getNormalFromTexture(ProcessedAttributes attributes, vec3 geometryNormal) { vec2 normalTexCoords = getNormalTexCoords(); // If HAS_BITANGENTS is set, then HAS_TANGENTS is also set #ifdef HAS_BITANGENTS vec3 t = attributes.tangentEC; vec3 b = attributes.bitangentEC; #else vec3 t = computeTangent(attributes.positionEC, normalTexCoords); t = normalize(t - geometryNormal * dot(geometryNormal, t)); vec3 b = normalize(cross(geometryNormal, t)); #endif mat3 tbn = mat3(t, b, geometryNormal); vec3 normalSample = texture(u_normalTexture, normalTexCoords).rgb; normalSample = 2.0 * normalSample - 1.0; #ifdef HAS_NORMAL_TEXTURE_SCALE normalSample.xy *= u_normalTextureScale; #endif return normalize(tbn * normalSample); } #endif #ifdef HAS_CLEARCOAT_NORMAL_TEXTURE vec3 getClearcoatNormalFromTexture(ProcessedAttributes attributes, vec3 geometryNormal) { vec2 normalTexCoords = TEXCOORD_CLEARCOAT_NORMAL; #ifdef HAS_CLEARCOAT_NORMAL_TEXTURE_TRANSFORM normalTexCoords = vec2(u_clearcoatNormalTextureTransform * vec3(normalTexCoords, 1.0)); #endif // If HAS_BITANGENTS is set, then HAS_TANGENTS is also set #ifdef HAS_BITANGENTS vec3 t = attributes.tangentEC; vec3 b = attributes.bitangentEC; #else vec3 t = computeTangent(attributes.positionEC, normalTexCoords); t = normalize(t - geometryNormal * dot(geometryNormal, t)); vec3 b = normalize(cross(geometryNormal, t)); #endif mat3 tbn = mat3(t, b, geometryNormal); vec3 normalSample = texture(u_clearcoatNormalTexture, normalTexCoords).rgb; normalSample = 2.0 * normalSample - 1.0; #ifdef HAS_CLEARCOAT_NORMAL_TEXTURE_SCALE normalSample.xy *= u_clearcoatNormalTextureScale; #endif return normalize(tbn * normalSample); } #endif #ifdef HAS_NORMALS vec3 computeNormal(ProcessedAttributes attributes) { // Geometry normal. This is already normalized vec3 normal = attributes.normalEC; #if defined(HAS_NORMAL_TEXTURE) && !defined(HAS_WIREFRAME) normal = getNormalFromTexture(attributes, normal); #endif #ifdef HAS_DOUBLE_SIDED_MATERIAL if (czm_backFacing()) { normal = -normal; } #endif return normal; } #endif #ifdef HAS_BASE_COLOR_TEXTURE vec4 getBaseColorFromTexture() { vec2 baseColorTexCoords = TEXCOORD_BASE_COLOR; #ifdef HAS_BASE_COLOR_TEXTURE_TRANSFORM baseColorTexCoords = computeTextureTransform(baseColorTexCoords, u_baseColorTextureTransform); #endif vec4 baseColorWithAlpha = czm_srgbToLinear(texture(u_baseColorTexture, baseColorTexCoords)); #ifdef HAS_BASE_COLOR_FACTOR baseColorWithAlpha *= u_baseColorFactor; #endif return baseColorWithAlpha; } #endif #ifdef HAS_EMISSIVE_TEXTURE vec3 getEmissiveFromTexture() { vec2 emissiveTexCoords = TEXCOORD_EMISSIVE; #ifdef HAS_EMISSIVE_TEXTURE_TRANSFORM emissiveTexCoords = computeTextureTransform(emissiveTexCoords, u_emissiveTextureTransform); #endif vec3 emissive = czm_srgbToLinear(texture(u_emissiveTexture, emissiveTexCoords).rgb); #ifdef HAS_EMISSIVE_FACTOR emissive *= u_emissiveFactor; #endif return emissive; } #endif #if defined(LIGHTING_PBR) && defined(USE_SPECULAR_GLOSSINESS) void setSpecularGlossiness(inout czm_modelMaterial material) { #ifdef HAS_SPECULAR_GLOSSINESS_TEXTURE vec2 specularGlossinessTexCoords = TEXCOORD_SPECULAR_GLOSSINESS; #ifdef HAS_SPECULAR_GLOSSINESS_TEXTURE_TRANSFORM specularGlossinessTexCoords = computeTextureTransform(specularGlossinessTexCoords, u_specularGlossinessTextureTransform); #endif vec4 specularGlossiness = czm_srgbToLinear(texture(u_specularGlossinessTexture, specularGlossinessTexCoords)); vec3 specular = specularGlossiness.rgb; float glossiness = specularGlossiness.a; #ifdef HAS_LEGACY_SPECULAR_FACTOR specular *= u_legacySpecularFactor; #endif #ifdef HAS_GLOSSINESS_FACTOR glossiness *= u_glossinessFactor; #endif #else #ifdef HAS_LEGACY_SPECULAR_FACTOR vec3 specular = clamp(u_legacySpecularFactor, vec3(0.0), vec3(1.0)); #else vec3 specular = vec3(1.0); #endif #ifdef HAS_GLOSSINESS_FACTOR float glossiness = clamp(u_glossinessFactor, 0.0, 1.0); #else float glossiness = 1.0; #endif #endif #ifdef HAS_DIFFUSE_TEXTURE vec2 diffuseTexCoords = TEXCOORD_DIFFUSE; #ifdef HAS_DIFFUSE_TEXTURE_TRANSFORM diffuseTexCoords = computeTextureTransform(diffuseTexCoords, u_diffuseTextureTransform); #endif vec4 diffuse = czm_srgbToLinear(texture(u_diffuseTexture, diffuseTexCoords)); #ifdef HAS_DIFFUSE_FACTOR diffuse *= u_diffuseFactor; #endif #elif defined(HAS_DIFFUSE_FACTOR) vec4 diffuse = clamp(u_diffuseFactor, vec4(0.0), vec4(1.0)); #else vec4 diffuse = vec4(1.0); #endif material.diffuse = diffuse.rgb * (1.0 - czm_maximumComponent(specular)); // the specular glossiness extension's alpha overrides anything set // by the base material. material.alpha = diffuse.a; material.specular = specular; // glossiness is the opposite of roughness, but easier for artists to use. material.roughness = 1.0 - glossiness; } #elif defined(LIGHTING_PBR) float setMetallicRoughness(inout czm_modelMaterial material) { #ifdef HAS_METALLIC_ROUGHNESS_TEXTURE vec2 metallicRoughnessTexCoords = TEXCOORD_METALLIC_ROUGHNESS; #ifdef HAS_METALLIC_ROUGHNESS_TEXTURE_TRANSFORM metallicRoughnessTexCoords = computeTextureTransform(metallicRoughnessTexCoords, u_metallicRoughnessTextureTransform); #endif vec3 metallicRoughness = texture(u_metallicRoughnessTexture, metallicRoughnessTexCoords).rgb; float metalness = clamp(metallicRoughness.b, 0.0, 1.0); float roughness = clamp(metallicRoughness.g, 0.0, 1.0); #ifdef HAS_METALLIC_FACTOR metalness = clamp(metalness * u_metallicFactor, 0.0, 1.0); #endif #ifdef HAS_ROUGHNESS_FACTOR roughness = clamp(roughness * u_roughnessFactor, 0.0, 1.0); #endif #else #ifdef HAS_METALLIC_FACTOR float metalness = clamp(u_metallicFactor, 0.0, 1.0); #else float metalness = 1.0; #endif #ifdef HAS_ROUGHNESS_FACTOR float roughness = clamp(u_roughnessFactor, 0.0, 1.0); #else float roughness = 1.0; #endif #endif // dielectrics use f0 = 0.04, metals use albedo as f0 const vec3 REFLECTANCE_DIELECTRIC = vec3(0.04); vec3 f0 = mix(REFLECTANCE_DIELECTRIC, material.baseColor.rgb, metalness); material.specular = f0; // diffuse only applies to dielectrics. material.diffuse = mix(material.baseColor.rgb, vec3(0.0), metalness); // This is perceptual roughness. The square of this value is used for direct lighting material.roughness = roughness; return metalness; } #ifdef USE_SPECULAR void setSpecular(inout czm_modelMaterial material, in float metalness) { #ifdef HAS_SPECULAR_TEXTURE vec2 specularTexCoords = TEXCOORD_SPECULAR; #ifdef HAS_SPECULAR_TEXTURE_TRANSFORM specularTexCoords = computeTextureTransform(specularTexCoords, u_specularTextureTransform); #endif float specularWeight = texture(u_specularTexture, specularTexCoords).a; #ifdef HAS_SPECULAR_FACTOR specularWeight *= u_specularFactor; #endif #else #ifdef HAS_SPECULAR_FACTOR float specularWeight = u_specularFactor; #else float specularWeight = 1.0; #endif #endif #ifdef HAS_SPECULAR_COLOR_TEXTURE vec2 specularColorTexCoords = TEXCOORD_SPECULAR_COLOR; #ifdef HAS_SPECULAR_COLOR_TEXTURE_TRANSFORM specularColorTexCoords = computeTextureTransform(specularColorTexCoords, u_specularColorTextureTransform); #endif vec3 specularColorSample = texture(u_specularColorTexture, specularColorTexCoords).rgb; vec3 specularColorFactor = czm_srgbToLinear(specularColorSample); #ifdef HAS_SPECULAR_COLOR_FACTOR specularColorFactor *= u_specularColorFactor; #endif #else #ifdef HAS_SPECULAR_COLOR_FACTOR vec3 specularColorFactor = u_specularColorFactor; #else vec3 specularColorFactor = vec3(1.0); #endif #endif material.specularWeight = specularWeight; vec3 f0 = material.specular; vec3 dielectricSpecularF0 = min(f0 * specularColorFactor, vec3(1.0)); material.specular = mix(dielectricSpecularF0, material.baseColor.rgb, metalness); } #endif #ifdef USE_ANISOTROPY void setAnisotropy(inout czm_modelMaterial material, in NormalInfo normalInfo) { mat2 rotation = mat2(u_anisotropy.xy, -u_anisotropy.y, u_anisotropy.x); float anisotropyStrength = u_anisotropy.z; vec2 direction = vec2(1.0, 0.0); #ifdef HAS_ANISOTROPY_TEXTURE vec2 anisotropyTexCoords = TEXCOORD_ANISOTROPY; #ifdef HAS_ANISOTROPY_TEXTURE_TRANSFORM anisotropyTexCoords = computeTextureTransform(anisotropyTexCoords, u_anisotropyTextureTransform); #endif vec3 anisotropySample = texture(u_anisotropyTexture, anisotropyTexCoords).rgb; direction = anisotropySample.rg * 2.0 - vec2(1.0); anisotropyStrength *= anisotropySample.b; #endif direction = rotation * direction; mat3 tbn = mat3(normalInfo.tangent, normalInfo.bitangent, normalInfo.normal); vec3 anisotropicT = tbn * normalize(vec3(direction, 0.0)); vec3 anisotropicB = cross(normalInfo.geometryNormal, anisotropicT); material.anisotropicT = anisotropicT; material.anisotropicB = anisotropicB; material.anisotropyStrength = anisotropyStrength; } #endif #ifdef USE_CLEARCOAT void setClearcoat(inout czm_modelMaterial material, in ProcessedAttributes attributes) { #ifdef HAS_CLEARCOAT_TEXTURE vec2 clearcoatTexCoords = TEXCOORD_CLEARCOAT; #ifdef HAS_CLEARCOAT_TEXTURE_TRANSFORM clearcoatTexCoords = computeTextureTransform(clearcoatTexCoords, u_clearcoatTextureTransform); #endif float clearcoatFactor = texture(u_clearcoatTexture, clearcoatTexCoords).r; #ifdef HAS_CLEARCOAT_FACTOR clearcoatFactor *= u_clearcoatFactor; #endif #else #ifdef HAS_CLEARCOAT_FACTOR float clearcoatFactor = u_clearcoatFactor; #else // PERFORMANCE_IDEA: this case should turn the whole extension off float clearcoatFactor = 0.0; #endif #endif #ifdef HAS_CLEARCOAT_ROUGHNESS_TEXTURE vec2 clearcoatRoughnessTexCoords = TEXCOORD_CLEARCOAT_ROUGHNESS; #ifdef HAS_CLEARCOAT_ROUGHNESS_TEXTURE_TRANSFORM clearcoatRoughnessTexCoords = computeTextureTransform(clearcoatRoughnessTexCoords, u_clearcoatRoughnessTextureTransform); #endif float clearcoatRoughness = texture(u_clearcoatRoughnessTexture, clearcoatRoughnessTexCoords).g; #ifdef HAS_CLEARCOAT_ROUGHNESS_FACTOR clearcoatRoughness *= u_clearcoatRoughnessFactor; #endif #else #ifdef HAS_CLEARCOAT_ROUGHNESS_FACTOR float clearcoatRoughness = u_clearcoatRoughnessFactor; #else float clearcoatRoughness = 0.0; #endif #endif material.clearcoatFactor = clearcoatFactor; // This is perceptual roughness. The square of this value is used for direct lighting material.clearcoatRoughness = clearcoatRoughness; #ifdef HAS_CLEARCOAT_NORMAL_TEXTURE material.clearcoatNormal = getClearcoatNormalFromTexture(attributes, attributes.normalEC); #else material.clearcoatNormal = attributes.normalEC; #endif } #endif #endif void materialStage(inout czm_modelMaterial material, ProcessedAttributes attributes, SelectedFeature feature) { #ifdef USE_ANISOTROPY NormalInfo normalInfo = getNormalInfo(attributes); material.normalEC = normalInfo.normal; #elif defined(HAS_NORMALS) material.normalEC = computeNormal(attributes); #endif vec4 baseColorWithAlpha = vec4(1.0); // Regardless of whether we use PBR, set a base color #ifdef HAS_BASE_COLOR_TEXTURE baseColorWithAlpha = getBaseColorFromTexture(); #elif defined(HAS_BASE_COLOR_FACTOR) baseColorWithAlpha = u_baseColorFactor; #endif #ifdef HAS_POINT_CLOUD_COLOR_STYLE baseColorWithAlpha = v_pointCloudColor; #elif defined(HAS_COLOR_0) vec4 color = attributes.color_0; // .pnts files store colors in the sRGB color space #ifdef HAS_SRGB_COLOR color = czm_srgbToLinear(color); #endif baseColorWithAlpha *= color; #endif #ifdef USE_CPU_STYLING baseColorWithAlpha.rgb = blend(baseColorWithAlpha.rgb, feature.color.rgb, model_colorBlend); #endif material.baseColor = baseColorWithAlpha; material.diffuse = baseColorWithAlpha.rgb; material.alpha = baseColorWithAlpha.a; #ifdef HAS_OCCLUSION_TEXTURE vec2 occlusionTexCoords = TEXCOORD_OCCLUSION; #ifdef HAS_OCCLUSION_TEXTURE_TRANSFORM occlusionTexCoords = computeTextureTransform(occlusionTexCoords, u_occlusionTextureTransform); #endif material.occlusion = texture(u_occlusionTexture, occlusionTexCoords).r; #endif #ifdef HAS_EMISSIVE_TEXTURE material.emissive = getEmissiveFromTexture(); #elif defined(HAS_EMISSIVE_FACTOR) material.emissive = u_emissiveFactor; #endif #if defined(LIGHTING_PBR) && defined(USE_SPECULAR_GLOSSINESS) setSpecularGlossiness(material); #elif defined(LIGHTING_PBR) float metalness = setMetallicRoughness(material); #ifdef USE_SPECULAR setSpecular(material, metalness); #endif #ifdef USE_ANISOTROPY setAnisotropy(material, normalInfo); #endif #ifdef USE_CLEARCOAT setClearcoat(material, attributes); #endif #endif } `;var{Material:cOe,MetallicRoughness:SH,SpecularGlossiness:CH,Specular:Mae,Clearcoat:Nae}=Tn,kae={name:"MaterialPipelineStage",_processTexture:Ul,_processTextureTransform:Uae};kae.process=function(e,t,n){let i=t.material,{model:o,uniformMap:r,shaderBuilder:s}=e,a=l(o.classificationType),c=a,{defaultTexture:d,defaultNormalTexture:u,defaultEmissiveTexture:h}=n.context;dOe(i,r,s,d,u,h,c),l(i.specularGlossiness)?uOe(i.specularGlossiness,r,s,d,c):(l(i.specular)&&Qt.supportedExtensions.KHR_materials_specular&&mOe(i.specular,r,s,d,c),l(i.anisotropy)&&Qt.supportedExtensions.KHR_materials_anisotropy&&fOe(i.anisotropy,r,s,d,c),l(i.clearcoat)&&Qt.supportedExtensions.KHR_materials_clearcoat&&pOe(i.clearcoat,r,s,d,c),bOe(i.metallicRoughness,r,s,d,c));let p=Qt.getAttributeBySemantic(t,ft.NORMAL),g=e.lightingOptions;i.unlit||!p||a?g.lightingModel=Vf.UNLIT:g.lightingModel=Vf.PBR;let f=o.backFaceCulling&&!i.doubleSided;e.renderStateOptions.cull.enabled=f;let y=e.alphaOptions;i.alphaMode===Tf.BLEND?y.pass=Ee.TRANSLUCENT:i.alphaMode===Tf.MASK&&(y.alphaCutoff=i.alphaCutoff),s.addFragmentLines(YW),i.doubleSided&&s.addDefine("HAS_DOUBLE_SIDED_MATERIAL",void 0,ye.BOTH)};function Uae(e,t,n,i,o){let r=`HAS_${o}_TEXTURE_TRANSFORM`;e.addDefine(r,void 0,ye.FRAGMENT);let s=`${i}Transform`;e.addUniform("mat3",s,ye.FRAGMENT),t[s]=function(){return n.transform}}function lOe(e,t,n,i,o){let r=`HAS_${o}_TEXTURE_SCALE`;e.addDefine(r,void 0,ye.FRAGMENT);let s=`${i}Scale`;e.addUniform("float",s,ye.FRAGMENT),t[s]=function(){return n.scale}}function Ul(e,t,n,i,o,r){e.addUniform("sampler2D",i,ye.FRAGMENT),t[i]=function(){return n.texture??r};let s=`HAS_${o}_TEXTURE`;e.addDefine(s,void 0,ye.FRAGMENT);let c=`v_texCoord_${n.texCoord}`,d=`TEXCOORD_${o}`;e.addDefine(d,c,ye.FRAGMENT);let u=n.transform;l(u)&&!$.equals(u,$.IDENTITY)&&Uae(e,t,n,i,o);let{scale:h}=n;l(h)&&h!==1&&lOe(e,t,n,i,o)}function dOe(e,t,n,i,o,r,s){let{emissiveFactor:a,emissiveTexture:c,normalTexture:d,occlusionTexture:u}=e;l(a)&&!m.equals(a,cOe.DEFAULT_EMISSIVE_FACTOR)&&(n.addUniform("vec3","u_emissiveFactor",ye.FRAGMENT),t.u_emissiveFactor=function(){return e.emissiveFactor},n.addDefine("HAS_EMISSIVE_FACTOR",void 0,ye.FRAGMENT),l(c)&&!s&&Ul(n,t,c,"u_emissiveTexture","EMISSIVE",r)),l(d)&&!s&&Ul(n,t,d,"u_normalTexture","NORMAL",o),l(u)&&!s&&Ul(n,t,u,"u_occlusionTexture","OCCLUSION",i)}function uOe(e,t,n,i,o){let{diffuseTexture:r,diffuseFactor:s,specularGlossinessTexture:a,specularFactor:c,glossinessFactor:d}=e;n.addDefine("USE_SPECULAR_GLOSSINESS",void 0,ye.FRAGMENT),l(r)&&!o&&Ul(n,t,r,"u_diffuseTexture","DIFFUSE",i),l(s)&&!se.equals(s,CH.DEFAULT_DIFFUSE_FACTOR)&&(n.addUniform("vec4","u_diffuseFactor",ye.FRAGMENT),t.u_diffuseFactor=function(){return e.diffuseFactor},n.addDefine("HAS_DIFFUSE_FACTOR",void 0,ye.FRAGMENT)),l(a)&&!o&&Ul(n,t,a,"u_specularGlossinessTexture","SPECULAR_GLOSSINESS",i),l(c)&&!m.equals(c,CH.DEFAULT_SPECULAR_FACTOR)&&(n.addUniform("vec3","u_legacySpecularFactor",ye.FRAGMENT),t.u_legacySpecularFactor=function(){return e.specularFactor},n.addDefine("HAS_LEGACY_SPECULAR_FACTOR",void 0,ye.FRAGMENT)),l(d)&&d!==CH.DEFAULT_GLOSSINESS_FACTOR&&(n.addUniform("float","u_glossinessFactor",ye.FRAGMENT),t.u_glossinessFactor=function(){return e.glossinessFactor},n.addDefine("HAS_GLOSSINESS_FACTOR",void 0,ye.FRAGMENT))}function mOe(e,t,n,i,o){let{specularTexture:r,specularFactor:s,specularColorTexture:a,specularColorFactor:c}=e;n.addDefine("USE_SPECULAR",void 0,ye.FRAGMENT),l(r)&&!o&&Ul(n,t,r,"u_specularTexture","SPECULAR",i),l(s)&&s!==Mae.DEFAULT_SPECULAR_FACTOR&&(n.addUniform("float","u_specularFactor",ye.FRAGMENT),t.u_specularFactor=function(){return e.specularFactor},n.addDefine("HAS_SPECULAR_FACTOR",void 0,ye.FRAGMENT)),l(a)&&!o&&Ul(n,t,a,"u_specularColorTexture","SPECULAR_COLOR",i),l(c)&&!m.equals(c,Mae.DEFAULT_SPECULAR_COLOR_FACTOR)&&(n.addUniform("vec3","u_specularColorFactor",ye.FRAGMENT),t.u_specularColorFactor=function(){return e.specularColorFactor},n.addDefine("HAS_SPECULAR_COLOR_FACTOR",void 0,ye.FRAGMENT))}var hOe=new m;function fOe(e,t,n,i,o){let{anisotropyStrength:r,anisotropyRotation:s,anisotropyTexture:a}=e;n.addDefine("USE_ANISOTROPY",void 0,ye.FRAGMENT),l(a)&&!o&&Ul(n,t,a,"u_anisotropyTexture","ANISOTROPY",i);let c=Math.cos(s),d=Math.sin(s);n.addUniform("vec3","u_anisotropy",ye.FRAGMENT),t.u_anisotropy=function(){return m.fromElements(c,d,r,hOe)}}function pOe(e,t,n,i,o){let{clearcoatFactor:r,clearcoatTexture:s,clearcoatRoughnessFactor:a,clearcoatRoughnessTexture:c,clearcoatNormalTexture:d}=e;n.addDefine("USE_CLEARCOAT",void 0,ye.FRAGMENT),l(r)&&r!==Nae.DEFAULT_CLEARCOAT_FACTOR&&(n.addUniform("float","u_clearcoatFactor",ye.FRAGMENT),t.u_clearcoatFactor=function(){return e.clearcoatFactor},n.addDefine("HAS_CLEARCOAT_FACTOR",void 0,ye.FRAGMENT)),l(s)&&!o&&Ul(n,t,s,"u_clearcoatTexture","CLEARCOAT",i),l(a)&&r!==Nae.DEFAULT_CLEARCOAT_ROUGHNESS_FACTOR&&(n.addUniform("float","u_clearcoatRoughnessFactor",ye.FRAGMENT),t.u_clearcoatRoughnessFactor=function(){return e.clearcoatRoughnessFactor},n.addDefine("HAS_CLEARCOAT_ROUGHNESS_FACTOR",void 0,ye.FRAGMENT)),l(c)&&!o&&Ul(n,t,c,"u_clearcoatRoughnessTexture","CLEARCOAT_ROUGHNESS",i),l(d)&&!o&&Ul(n,t,d,"u_clearcoatNormalTexture","CLEARCOAT_NORMAL",i)}function bOe(e,t,n,i,o){n.addDefine("USE_METALLIC_ROUGHNESS",void 0,ye.FRAGMENT);let r=e.baseColorTexture;l(r)&&!o&&Ul(n,t,r,"u_baseColorTexture","BASE_COLOR",i);let s=e.baseColorFactor;l(s)&&!se.equals(s,SH.DEFAULT_BASE_COLOR_FACTOR)&&(n.addUniform("vec4","u_baseColorFactor",ye.FRAGMENT),t.u_baseColorFactor=function(){return e.baseColorFactor},n.addDefine("HAS_BASE_COLOR_FACTOR",void 0,ye.FRAGMENT));let a=e.metallicRoughnessTexture;l(a)&&!o&&Ul(n,t,a,"u_metallicRoughnessTexture","METALLIC_ROUGHNESS",i);let c=e.metallicFactor;l(c)&&c!==SH.DEFAULT_METALLIC_FACTOR&&(n.addUniform("float","u_metallicFactor",ye.FRAGMENT),t.u_metallicFactor=function(){return e.metallicFactor},n.addDefine("HAS_METALLIC_FACTOR",void 0,ye.FRAGMENT));let d=e.roughnessFactor;l(d)&&d!==SH.DEFAULT_ROUGHNESS_FACTOR&&(n.addUniform("float","u_roughnessFactor",ye.FRAGMENT),t.u_roughnessFactor=function(){return e.roughnessFactor},n.addDefine("HAS_ROUGHNESS_FACTOR",void 0,ye.FRAGMENT))}var zW=kae;var fGn=_(T(),1);var il={name:"MetadataPickingPipelineStage",METADATA_PICKING_ENABLED:"METADATA_PICKING_ENABLED",METADATA_PICKING_VALUE_TYPE:"METADATA_PICKING_VALUE_TYPE",METADATA_PICKING_VALUE_STRING:"METADATA_PICKING_VALUE_STRING",METADATA_PICKING_VALUE_COMPONENT_X:"METADATA_PICKING_VALUE_COMPONENT_X",METADATA_PICKING_VALUE_COMPONENT_Y:"METADATA_PICKING_VALUE_COMPONENT_Y",METADATA_PICKING_VALUE_COMPONENT_Z:"METADATA_PICKING_VALUE_COMPONENT_Z",METADATA_PICKING_VALUE_COMPONENT_W:"METADATA_PICKING_VALUE_COMPONENT_W"};il.process=function(e,t,n){let i=e.shaderBuilder;i.addDefine(il.METADATA_PICKING_VALUE_TYPE,"float",ye.FRAGMENT),i.addDefine(il.METADATA_PICKING_VALUE_STRING,"0.0",ye.FRAGMENT),i.addDefine(il.METADATA_PICKING_VALUE_COMPONENT_X,"0.0",ye.FRAGMENT),i.addDefine(il.METADATA_PICKING_VALUE_COMPONENT_Y,"0.0",ye.FRAGMENT),i.addDefine(il.METADATA_PICKING_VALUE_COMPONENT_Z,"0.0",ye.FRAGMENT),i.addDefine(il.METADATA_PICKING_VALUE_COMPONENT_W,"0.0",ye.FRAGMENT),i.addFunction("metadataPickingStage","void metadataPickingStage(Metadata metadata, MetadataClass metadataClass, inout vec4 metadataValues)",ye.FRAGMENT),i.addFunctionLines("metadataPickingStage",[`${il.METADATA_PICKING_VALUE_TYPE} value = ${il.METADATA_PICKING_VALUE_TYPE}(${il.METADATA_PICKING_VALUE_STRING});`,`metadataValues.x = ${il.METADATA_PICKING_VALUE_COMPONENT_X};`,`metadataValues.y = ${il.METADATA_PICKING_VALUE_COMPONENT_Y};`,`metadataValues.z = ${il.METADATA_PICKING_VALUE_COMPONENT_Z};`,`metadataValues.w = ${il.METADATA_PICKING_VALUE_COMPONENT_W};`],ye.FRAGMENT)};var Rd=il;var VGn=_(T(),1);var bGn=_(T(),1),HW=`void morphTargetsStage(inout ProcessedAttributes attributes) { vec3 positionMC = attributes.positionMC; attributes.positionMC = getMorphedPosition(positionMC); #ifdef HAS_NORMALS vec3 normalMC = attributes.normalMC; attributes.normalMC = getMorphedNormal(normalMC); #endif #ifdef HAS_TANGENTS vec3 tangentMC = attributes.tangentMC; attributes.tangentMC = getMorphedTangent(tangentMC); #endif }`;var ka={name:"MorphTargetsPipelineStage",FUNCTION_ID_GET_MORPHED_POSITION:"getMorphedPosition",FUNCTION_SIGNATURE_GET_MORPHED_POSITION:"vec3 getMorphedPosition(in vec3 position)",FUNCTION_ID_GET_MORPHED_NORMAL:"getMorphedNormal",FUNCTION_SIGNATURE_GET_MORPHED_NORMAL:"vec3 getMorphedNormal(in vec3 normal)",FUNCTION_ID_GET_MORPHED_TANGENT:"getMorphedTangent",FUNCTION_SIGNATURE_GET_MORPHED_TANGENT:"vec3 getMorphedTangent(in vec3 tangent)"};ka.process=function(e,t){let n=e.shaderBuilder;n.addDefine("HAS_MORPH_TARGETS",void 0,ye.VERTEX),SOe(n);let i=t.morphTargets.length;for(let a=0;a<i;a++){let c=t.morphTargets[a].attributes,d=c.length;for(let u=0;u<d;u++){let h=c[u],p=h.semantic;p!==ft.POSITION&&p!==ft.NORMAL&&p!==ft.TANGENT||(yOe(e,h,e.attributeIndex,a),e.attributeIndex++)}}COe(n);let r=e.runtimeNode.morphWeights.length;n.addUniform("float",`u_morphWeights[${r}]`,ye.VERTEX),n.addVertexLines(HW);let s={u_morphWeights:function(){return e.runtimeNode.morphWeights}};e.uniformMap=St(s,e.uniformMap)};var gOe={attributeString:void 0,functionId:void 0};function yOe(e,t,n,i){let o=e.shaderBuilder;xOe(e,t,n);let r=_Oe(t,gOe);TOe(o,r,i)}function xOe(e,t,n){let i={index:n,value:l(t.buffer)?void 0:t.constant,vertexBuffer:t.buffer,componentsPerAttribute:on.getNumberOfComponents(t.type),componentDatatype:t.componentDatatype,offsetInBytes:t.byteOffset,strideInBytes:t.byteStride,normalize:t.normalized};e.attributes.push(i)}function _Oe(e,t){switch(e.semantic){case ft.POSITION:t.attributeString="Position",t.functionId=ka.FUNCTION_ID_GET_MORPHED_POSITION;break;case ft.NORMAL:t.attributeString="Normal",t.functionId=ka.FUNCTION_ID_GET_MORPHED_NORMAL;break;case ft.TANGENT:t.attributeString="Tangent",t.functionId=ka.FUNCTION_ID_GET_MORPHED_TANGENT;break;default:break}return t}function TOe(e,t,n){let i=t.attributeString,o=`a_target${i}_${n}`,r=`morphed${i} += u_morphWeights[${n}] * a_target${i}_${n};`;e.addAttribute("vec3",o),e.addFunctionLines(t.functionId,[r])}function SOe(e){e.addFunction(ka.FUNCTION_ID_GET_MORPHED_POSITION,ka.FUNCTION_SIGNATURE_GET_MORPHED_POSITION,ye.VERTEX),e.addFunctionLines(ka.FUNCTION_ID_GET_MORPHED_POSITION,["vec3 morphedPosition = position;"]),e.addFunction(ka.FUNCTION_ID_GET_MORPHED_NORMAL,ka.FUNCTION_SIGNATURE_GET_MORPHED_NORMAL,ye.VERTEX),e.addFunctionLines(ka.FUNCTION_ID_GET_MORPHED_NORMAL,["vec3 morphedNormal = normal;"]),e.addFunction(ka.FUNCTION_ID_GET_MORPHED_TANGENT,ka.FUNCTION_SIGNATURE_GET_MORPHED_TANGENT,ye.VERTEX),e.addFunctionLines(ka.FUNCTION_ID_GET_MORPHED_TANGENT,["vec3 morphedTangent = tangent;"])}function COe(e){e.addFunctionLines(ka.FUNCTION_ID_GET_MORPHED_POSITION,["return morphedPosition;"]),e.addFunctionLines(ka.FUNCTION_ID_GET_MORPHED_NORMAL,["return morphedNormal;"]),e.addFunctionLines(ka.FUNCTION_ID_GET_MORPHED_TANGENT,["return morphedTangent;"])}var KW=ka;var vGn=_(T(),1);var Dae={name:"PickingPipelineStage"};Dae.process=function(e,t,n){let i=n.context,o=e.runtimeNode,r=e.shaderBuilder,s=e.model,a=o.node.instances;if(e.hasPropertyTable)VOe(e,t,a,i);else if(l(a))LOe(e,i);else{let c=Bae(e),d=i.createPickId(c);s._pipelineResources.push(d),s._pickIds.push(d),r.addUniform("vec4","czm_pickColor",ye.FRAGMENT);let u=e.uniformMap;u.czm_pickColor=function(){return d.color},e.pickId="czm_pickColor"}};function Bae(e,t){let n=e.model;if(l(n.pickObject))return n.pickObject;let i={model:n,node:e.runtimeNode,primitive:e.runtimePrimitive},o;if(cr.is3DTiles(n.type)){let r=n.content;o={content:r,primitive:r.tileset,detail:i}}else o={primitive:n,detail:i};return o.id=n.id,l(t)&&(o.instanceId=t),o}function VOe(e,t,n){let i=e.model,o,r,s=i.featureIdLabel,a=i.instanceFeatureIdLabel;l(i.featureTableId)?o=i.featureTableId:l(n)?(r=Qt.getFeatureIdsByLabel(n.featureIds,a),o=r.propertyTableId):(r=Qt.getFeatureIdsByLabel(t.featureIds,s),o=r.propertyTableId);let c=i.featureTables[o];e.shaderBuilder.addUniform("sampler2D","model_pickTexture",ye.FRAGMENT);let u=c.batchTexture;e.uniformMap.model_pickTexture=function(){return u.pickTexture??u.defaultTexture},e.pickId="((selectedFeature.id < int(model_featuresLength)) ? texture(model_pickTexture, selectedFeature.st) : vec4(0.0))"}function LOe(e,t){let n=e.instanceCount,i=new Array(n),o=new Uint8Array(n*4),r=e.model,s=r._pipelineResources;for(let h=0;h<n;h++){let p=Bae(e,h),g=t.createPickId(p);s.push(g),i[h]=g;let f=g.color;o[h*4+0]=D.floatToByte(f.red),o[h*4+1]=D.floatToByte(f.green),o[h*4+2]=D.floatToByte(f.blue),o[h*4+3]=D.floatToByte(f.alpha)}r._pickIds=i;let a=xt.createVertexBuffer({context:t,typedArray:o,usage:Me.STATIC_DRAW});a.vertexArrayDestroyable=!1,r.statistics.addBuffer(a,!1),s.push(a);let d={index:e.attributeIndex++,vertexBuffer:a,componentsPerAttribute:4,componentDatatype:Q.UNSIGNED_BYTE,normalize:!0,offsetInBytes:0,strideInBytes:0,instanceDivisor:1};e.attributes.push(d);let u=e.shaderBuilder;u.addDefine("USE_PICKING",void 0,ye.BOTH),u.addAttribute("vec4","a_pickColor"),u.addVarying("vec4","v_pickColor"),e.pickId="v_pickColor"}var JW=Dae;var nEn=_(T(),1);var FGn=_(T(),1),ROe={ADD:0,REPLACE:1},Uo=Object.freeze(ROe);var MGn=_(T(),1),QW=`float getPointSizeFromAttenuation(vec3 positionEC) { // Variables are packed into a single vector to minimize gl.uniformXXX() calls float pointSize = model_pointCloudParameters.x; float geometricError = model_pointCloudParameters.y; float depthMultiplier = model_pointCloudParameters.z; float depth = -positionEC.z; return min((geometricError / depth) * depthMultiplier, pointSize); } #ifdef HAS_POINT_CLOUD_SHOW_STYLE float pointCloudShowStylingStage(in ProcessedAttributes attributes, in Metadata metadata) { float tiles3d_tileset_time = model_pointCloudParameters.w; return float(getShowFromStyle(attributes, metadata, tiles3d_tileset_time)); } #endif #ifdef HAS_POINT_CLOUD_COLOR_STYLE vec4 pointCloudColorStylingStage(in ProcessedAttributes attributes, in Metadata metadata) { float tiles3d_tileset_time = model_pointCloudParameters.w; return getColorFromStyle(attributes, metadata, tiles3d_tileset_time); } #endif #ifdef HAS_POINT_CLOUD_POINT_SIZE_STYLE float pointCloudPointSizeStylingStage(in ProcessedAttributes attributes, in Metadata metadata) { float tiles3d_tileset_time = model_pointCloudParameters.w; return float(getPointSizeFromStyle(attributes, metadata, tiles3d_tileset_time)); } #elif defined(HAS_POINT_CLOUD_ATTENUATION) float pointCloudPointSizeStylingStage(in ProcessedAttributes attributes, in Metadata metadata) { return getPointSizeFromAttenuation(v_positionEC); } #endif #ifdef HAS_POINT_CLOUD_BACK_FACE_CULLING float pointCloudBackFaceCullingStage() { #if defined(HAS_NORMALS) && !defined(HAS_DOUBLE_SIDED_MATERIAL) // This needs to be computed in eye coordinates so we can't use attributes.normalMC return step(-v_normalEC.z, 0.0); #else return 1.0; #endif } #endif`;var ZOe=new se,Yae={name:"PointCloudStylingPipelineStage"};Yae.process=function(e,t,n){let i=e.shaderBuilder,o=e.model,r=o.style,s=o.structuralMetadata,a=l(s)?s.propertyAttributes:void 0,c=l(o.featureTableId)&&o.featureTables[o.featureTableId].featuresLength>0,d=!l(a)&&c;if(l(r)&&!d){let y=XOe(a),x=WOe(r,y);POe(i,x);let C=vOe(x).indexOf("normalMC")>=0,V=Qt.getAttributeBySemantic(t,ft.NORMAL);if(C&&!V)throw new ae("Style references the NORMAL semantic but the point cloud does not have normals");i.addDefine("COMPUTE_POSITION_WC_STYLE",void 0,ye.VERTEX),x.styleTranslucent&&(e.alphaOptions.pass=Ee.TRANSLUCENT)}let u=o.pointCloudShading;u.attenuation&&i.addDefine("HAS_POINT_CLOUD_ATTENUATION",void 0,ye.VERTEX),u.backFaceCulling&&i.addDefine("HAS_POINT_CLOUD_BACK_FACE_CULLING",void 0,ye.VERTEX);let h,p,g;cr.is3DTiles(o.type)&&(p=!0,h=o.content,g=h.tile.refine===Uo.ADD),i.addUniform("vec4","model_pointCloudParameters",ye.VERTEX),i.addVertexLines(QW);let f=e.uniformMap;f.model_pointCloudParameters=function(){let y=ZOe,x=1;p&&(x=g?5:h.tileset.memoryAdjustedScreenSpaceError),y.x=u.maximumAttenuation??x,y.x*=n.pixelRatio;let S=GOe(e,t,u,h);y.y=S*u.geometricErrorScale;let C=n.context,V=n.camera.frustum,L;return n.mode===oe.SCENE2D||V instanceof an?L=Number.POSITIVE_INFINITY:L=C.drawingBufferHeight/n.camera.frustum.sseDenominator,y.z=L,p&&(y.w=h.tileset.timeSinceLoad),y}};var Oae=new m;function GOe(e,t,n,i){if(l(i)){let u=i.tile.geometricError;if(u>0)return u}if(l(n.baseResolution))return n.baseResolution;let o=Qt.getAttributeBySemantic(t,ft.POSITION),r=o.count,s=e.runtimeNode.transform,a=m.subtract(o.max,o.min,Oae);a=F.multiplyByPointAsVector(s,a,Oae);let c=a.x*a.y*a.z;return X.cbrt(c/r)}var EOe={colorStyleFunction:void 0,showStyleFunction:void 0,pointSizeStyleFunction:void 0,styleTranslucent:!1},IOe={POSITION:"attributes.positionMC",POSITION_ABSOLUTE:"v_positionWC",COLOR:"attributes.color_0",NORMAL:"attributes.normalMC"};function XOe(e){let t=Ye(IOe);if(!l(e))return t;for(let n=0;n<e.length;n++){let o=e[n].properties;for(let r in o)o.hasOwnProperty(r)&&(t[r]=`metadata.${r}`)}return t}var VH="ProcessedAttributes attributes, Metadata metadata, float tiles3d_tileset_time";function WOe(e,t){let n=EOe,i={translucent:!1};return n.colorStyleFunction=e.getColorShaderFunction(`getColorFromStyle(${VH})`,t,i),n.showStyleFunction=e.getShowShaderFunction(`getShowFromStyle(${VH})`,t,i),n.pointSizeStyleFunction=e.getPointSizeShaderFunction(`getPointSizeFromStyle(${VH})`,t,i),n.styleTranslucent=l(n.colorStyleFunction)&&i.translucent,n}function POe(e,t){let n=t.colorStyleFunction;l(n)&&(e.addDefine("HAS_POINT_CLOUD_COLOR_STYLE",void 0,ye.BOTH),e.addVertexLines(n),e.addVarying("vec4","v_pointCloudColor"));let i=t.showStyleFunction;l(i)&&(e.addDefine("HAS_POINT_CLOUD_SHOW_STYLE",void 0,ye.BOTH),e.addVertexLines(i),e.addVarying("float","v_pointCloudShow"));let o=t.pointSizeStyleFunction;l(o)&&(e.addDefine("HAS_POINT_CLOUD_POINT_SIZE_STYLE",void 0,ye.VERTEX),e.addVertexLines(o))}function LH(e,t){let n=/attributes\.(\w+)/g,i=n.exec(e);for(;i!==null;){let o=i[1];t.indexOf(o)===-1&&t.push(o),i=n.exec(e)}}function vOe(e){let t=e.colorStyleFunction,n=e.showStyleFunction,i=e.pointSizeStyleFunction,o=[];return l(t)&&LH(t,o),l(n)&&LH(n,o),l(i)&&LH(i,o),o}var jW=Yae;var hEn=_(T(),1);var oEn=_(T(),1),qW=`void primitiveOutlineStage() { v_outlineCoordinates = a_outlineCoordinates; } `;var sEn=_(T(),1),$W=`void primitiveOutlineStage(inout czm_modelMaterial material) { if (!model_showOutline) { return; } float outlineX = texture(model_outlineTexture, vec2(v_outlineCoordinates.x, 0.5)).r; float outlineY = texture(model_outlineTexture, vec2(v_outlineCoordinates.y, 0.5)).r; float outlineZ = texture(model_outlineTexture, vec2(v_outlineCoordinates.z, 0.5)).r; float outlineness = max(outlineX, max(outlineY, outlineZ)); material.diffuse = mix(material.diffuse, model_outlineColor.rgb, model_outlineColor.a * outlineness); } `;var zae={name:"PrimitiveOutlinePipelineStage"};zae.process=function(e,t,n){let i=e.shaderBuilder,o=e.uniformMap;i.addDefine("HAS_PRIMITIVE_OUTLINE",void 0,ye.BOTH),i.addAttribute("vec3","a_outlineCoordinates"),i.addVarying("vec3","v_outlineCoordinates");let r=t.outlineCoordinates,s={index:e.attributeIndex++,vertexBuffer:r.buffer,componentsPerAttribute:on.getNumberOfComponents(r.type),componentDatatype:r.componentDatatype,offsetInBytes:r.byteOffset,strideInBytes:r.byteStride,normalize:r.normalized};e.attributes.push(s),i.addUniform("sampler2D","model_outlineTexture",ye.FRAGMENT);let a=V_.createTexture(n.context);o.model_outlineTexture=function(){return a};let c=e.model;i.addUniform("vec4","model_outlineColor",ye.FRAGMENT),o.model_outlineColor=function(){return c.outlineColor},i.addUniform("bool","model_showOutline",ye.FRAGMENT),o.model_showOutline=function(){return c.showOutline},i.addVertexLines(qW),i.addFragmentLines($W)};var eP=zae;var xEn=_(T(),1);var Hae={name:"PrimitiveStatisticsPipelineStage",_countGeometry:Kae,_count2DPositions:Jae,_countMorphTargetAttributes:Qae,_countMaterialTextures:jae,_countFeatureIdTextures:qae,_countBinaryMetadata:$ae};Hae.process=function(e,t,n){let i=e.model,o=i.statistics;Kae(o,t),Jae(o,e.runtimePrimitive),Qae(o,t),jae(o,t.material),qae(o,t.featureIds),$ae(o,i)};function Kae(e,t){let n=l(t.indices)?t.indices.count:Qt.getAttributeBySemantic(t,"POSITION").count,i=t.primitiveType;i===we.POINTS?e.pointsLength+=n:we.isTriangles(i)&&(e.trianglesLength+=wOe(i,n));let o=t.attributes,r=o.length;for(let c=0;c<r;c++){let d=o[c];if(l(d.buffer)){let u=l(d.typedArray);e.addBuffer(d.buffer,u)}}let s=t.outlineCoordinates;l(s)&&l(s.buffer)&&e.addBuffer(s.buffer,!1);let a=t.indices;if(l(a)&&l(a.buffer)){let c=l(a.typedArray);e.addBuffer(a.buffer,c)}}function wOe(e,t){switch(e){case we.TRIANGLES:return t/3;case we.TRIANGLE_STRIP:case we.TRIANGLE_FAN:return Math.max(t-2,0);default:return 0}}function Jae(e,t){let n=t.positionBuffer2D;l(n)&&e.addBuffer(n,!0)}function Qae(e,t){let n=t.morphTargets;if(!l(n))return;let i=!1,o=n.length;for(let r=0;r<o;r++){let s=n[r].attributes,a=s.length;for(let c=0;c<a;c++){let d=s[c];l(d.buffer)&&e.addBuffer(d.buffer,i)}}}function jae(e,t){let n=FOe(t),i=n.length;for(let o=0;o<i;o++){let r=n[o];l(r)&&l(r.texture)&&e.addTexture(r.texture)}}function FOe(e){let t=e.metallicRoughness,n=[e.emissiveTexture,e.normalTexture,e.occlusionTexture,t.baseColorTexture,t.metallicRoughnessTexture],i=e.specularGlossiness;return l(i)&&(n.push(i.diffuseTexture),n.push(i.specularGlossinessTexture)),n}function qae(e,t){let n=t.length;for(let i=0;i<n;i++){let o=t[i];if(o instanceof Tn.FeatureIdTexture){let r=o.textureReader;l(r.texture)&&e.addTexture(r.texture)}}}function $ae(e,t){let n=t.structuralMetadata;l(n)&&(AOe(e,n),e.propertyTablesByteLength+=n.propertyTablesByteLength);let i=t.featureTables;if(!l(i))return;let o=i.length;for(let r=0;r<o;r++){let s=i[r];e.addBatchTexture(s.batchTexture)}}function AOe(e,t){let n=t.propertyTextures;if(!l(n))return;let i=n.length;for(let o=0;o<i;o++){let s=n[o].properties;for(let a in s)if(s.hasOwnProperty(a)){let d=s[a].textureReader;l(d.texture)&&e.addTexture(d.texture)}}}var tP=Hae;var vEn=_(T(),1);var MOe=new F,NOe=new F,ece={name:"SceneMode2DPipelineStage"};ece.process=function(e,t,n){let i=Qt.getAttributeBySemantic(t,ft.POSITION),o=e.shaderBuilder,r=e.model,s=r.sceneGraph.computedModelMatrix,a=e.runtimeNode.computedTransform,c=F.multiplyTransformation(s,a,MOe),d=DOe(e,c,n),u=e.runtimePrimitive;u.boundingSphere2D=d;let h=e.runtimeNode.node.instances;if(l(h))return;if(l(i.typedArray)){let y=YOe(i,c,d,n);u.positionBuffer2D=y,r._modelResources.push(y),i.typedArray=void 0}o.addDefine("USE_2D_POSITIONS",void 0,ye.VERTEX),o.addUniform("mat4","u_modelView2D",ye.VERTEX);let p=F.fromTranslation(d.center,new F),g=n.context,f={u_modelView2D:function(){return F.multiplyTransformation(g.uniformState.view,p,NOe)}};e.uniformMap=St(f,e.uniformMap)};var kOe=new m,UOe=new m;function DOe(e,t,n){let i=F.multiplyByPoint(t,e.positionMin,kOe),o=Ui.computeActualEllipsoidPosition(n,i,i),r=F.multiplyByPoint(t,e.positionMax,UOe),s=Ui.computeActualEllipsoidPosition(n,r,r);return le.fromCornerPoints(o,s,new le)}var tce=new m;function BOe(e,t){let n=e.length,i=new Float32Array(n),o=t.quantizedVolumeOffset,r=t.quantizedVolumeStepSize;for(let s=0;s<n;s+=3){let a=m.fromArray(e,s,tce),c=m.multiplyComponents(a,r,a),d=m.add(c,o,c);i[s]=d.x,i[s+1]=d.y,i[s+2]=d.z}return i}function OOe(e,t,n,i){let o;l(e.quantization)?o=BOe(e.typedArray,e.quantization):o=e.typedArray.slice();let r=e.byteOffset/Float32Array.BYTES_PER_ELEMENT,s=o.length,a=l(e.byteStride)?e.byteStride/Float32Array.BYTES_PER_ELEMENT:3;for(let c=r;c<s;c+=a){let d=m.fromArray(o,c,tce);if(isNaN(d.x)||isNaN(d.y)||isNaN(d.z))continue;let u=F.multiplyByPoint(t,d,d),h=Ui.computeActualEllipsoidPosition(i,u,u),p=m.subtract(h,n,h);o[c]=p.x,o[c+1]=p.y,o[c+2]=p.z}return o}function YOe(e,t,n,i){let o=Ye(i);o.mode=oe.COLUMBUS_VIEW;let r=n.center,s=OOe(e,t,r,o),a=xt.createVertexBuffer({context:i.context,typedArray:s,usage:Me.STATIC_DRAW});return a.vertexArrayDestroyable=!1,a}var nP=ece;var DEn=_(T(),1);var FEn=_(T(),1),iP=`void skinningStage(inout ProcessedAttributes attributes) { mat4 skinningMatrix = getSkinningMatrix(); mat3 skinningMatrixMat3 = mat3(skinningMatrix); vec4 positionMC = vec4(attributes.positionMC, 1.0); attributes.positionMC = vec3(skinningMatrix * positionMC); #ifdef HAS_NORMALS vec3 normalMC = attributes.normalMC; attributes.normalMC = skinningMatrixMat3 * normalMC; #endif #ifdef HAS_TANGENTS vec3 tangentMC = attributes.tangentMC; attributes.tangentMC = skinningMatrixMat3 * tangentMC; #endif }`;var G_={name:"SkinningPipelineStage",FUNCTION_ID_GET_SKINNING_MATRIX:"getSkinningMatrix",FUNCTION_SIGNATURE_GET_SKINNING_MATRIX:"mat4 getSkinningMatrix()"};G_.process=function(e,t){let n=e.shaderBuilder;n.addDefine("HAS_SKINNING",void 0,ye.VERTEX),HOe(n,t);let i=e.runtimeNode,o=i.computedJointMatrices;n.addUniform("mat4",`u_jointMatrices[${o.length}]`,ye.VERTEX),n.addVertexLines(iP);let r={u_jointMatrices:function(){return i.computedJointMatrices}};e.uniformMap=St(r,e.uniformMap)};function zOe(e){let t=-1,n=e.attributes,i=n.length;for(let o=0;o<i;o++){let r=n[o];(r.semantic===ft.JOINTS||r.semantic===ft.WEIGHTS)&&(t=Math.max(t,r.setIndex))}return t}function HOe(e,t){e.addFunction(G_.FUNCTION_ID_GET_SKINNING_MATRIX,G_.FUNCTION_SIGNATURE_GET_SKINNING_MATRIX,ye.VERTEX),e.addFunctionLines(G_.FUNCTION_ID_GET_SKINNING_MATRIX,["mat4 skinnedMatrix = mat4(0);"]);let i,o,r=["x","y","z","w"],s=zOe(t);for(i=0;i<=s;i++)for(o=0;o<=3;o++){let c=r[o],d=`skinnedMatrix += a_weights_${i}.${c} * u_jointMatrices[int(a_joints_${i}.${c})];`;e.addFunctionLines(G_.FUNCTION_ID_GET_SKINNING_MATRIX,[d])}e.addFunctionLines(G_.FUNCTION_ID_GET_SKINNING_MATRIX,["return skinnedMatrix;"])}var oP=G_;var JEn=_(T(),1);var OEn=_(T(),1),rP=`void verticalExaggerationStage( inout ProcessedAttributes attributes ) { // Compute the distance from the camera to the local center of curvature. vec4 vertexPositionENU = czm_modelToEnu * vec4(attributes.positionMC, 1.0); vec2 vertexAzimuth = normalize(vertexPositionENU.xy); // Curvature = 1 / radius of curvature. float azimuthalCurvature = dot(vertexAzimuth * vertexAzimuth, czm_eyeEllipsoidCurvature); float eyeToCenter = 1.0 / azimuthalCurvature + czm_eyeHeight; // Compute the approximate ellipsoid normal at the vertex position. // Uses a circular approximation for the Earth curvature along the geodesic. vec3 vertexPositionEC = (czm_modelView * vec4(attributes.positionMC, 1.0)).xyz; vec3 centerToVertex = eyeToCenter * czm_eyeEllipsoidNormalEC + vertexPositionEC; vec3 vertexNormal = normalize(centerToVertex); // Estimate the (sine of the) angle between the camera direction and the vertex normal float verticalDistance = dot(vertexPositionEC, czm_eyeEllipsoidNormalEC); float horizontalDistance = length(vertexPositionEC - verticalDistance * czm_eyeEllipsoidNormalEC); float sinTheta = horizontalDistance / (eyeToCenter + verticalDistance); bool isSmallAngle = clamp(sinTheta, 0.0, 0.05) == sinTheta; // Approximate the change in height above the ellipsoid, from camera to vertex position. float exactVersine = 1.0 - dot(czm_eyeEllipsoidNormalEC, vertexNormal); float smallAngleVersine = 0.5 * sinTheta * sinTheta; float versine = isSmallAngle ? smallAngleVersine : exactVersine; float dHeight = dot(vertexPositionEC, vertexNormal) - eyeToCenter * versine; float vertexHeight = czm_eyeHeight + dHeight; // Transform the approximate vertex normal to model coordinates. vec3 vertexNormalMC = (czm_inverseModelView * vec4(vertexNormal, 0.0)).xyz; vertexNormalMC = normalize(vertexNormalMC); // Compute the exaggeration and apply it along the approximate vertex normal. float stretch = u_verticalExaggerationAndRelativeHeight.x; float shift = u_verticalExaggerationAndRelativeHeight.y; float exaggeration = (vertexHeight - shift) * (stretch - 1.0); attributes.positionMC += exaggeration * vertexNormalMC; } `;var nce={name:"VerticalExaggerationPipelineStage"},KOe=new U;nce.process=function(e,t,n){let{shaderBuilder:i,uniformMap:o}=e;i.addVertexLines(rP),i.addDefine("HAS_VERTICAL_EXAGGERATION",void 0,ye.VERTEX),i.addUniform("vec2","u_verticalExaggerationAndRelativeHeight",ye.VERTEX),o.u_verticalExaggerationAndRelativeHeight=function(){return U.fromElements(n.verticalExaggeration,n.verticalExaggerationRelativeHeight,KOe)}};var sP=nce;var uIn=_(T(),1);var eIn=_(T(),1);var RH={};function JOe(e){let t=Ae.createTypedArray(e,e*2),n=e,i=0;for(let o=0;o<n;o+=3)t[i++]=o,t[i++]=o+1,t[i++]=o+1,t[i++]=o+2,t[i++]=o+2,t[i++]=o;return t}function QOe(e,t){let n=t.length,i=Ae.createTypedArray(e,n*2),o=0;for(let r=0;r<n;r+=3){let s=t[r],a=t[r+1],c=t[r+2];i[o++]=s,i[o++]=a,i[o++]=a,i[o++]=c,i[o++]=c,i[o++]=s}return i}function jOe(e){let t=e-2,n=2+t*4,i=Ae.createTypedArray(e,n),o=0;i[o++]=0,i[o++]=1;for(let r=0;r<t;r++)i[o++]=r+1,i[o++]=r+2,i[o++]=r+2,i[o++]=r;return i}function qOe(e,t){let i=t.length-2,o=2+i*4,r=Ae.createTypedArray(e,o),s=0;r[s++]=t[0],r[s++]=t[1];for(let a=0;a<i;a++){let c=t[a],d=t[a+1],u=t[a+2];r[s++]=d,r[s++]=u,r[s++]=u,r[s++]=c}return r}function $Oe(e){let t=e-2,n=2+t*4,i=Ae.createTypedArray(e,n),o=0;i[o++]=0,i[o++]=1;for(let r=0;r<t;r++)i[o++]=r+1,i[o++]=r+2,i[o++]=r+2,i[o++]=0;return i}function eYe(e,t){let i=t.length-2,o=2+i*4,r=Ae.createTypedArray(e,o),s=0,a=t[0];r[s++]=a,r[s++]=t[1];for(let c=0;c<i;c++){let d=t[c+1],u=t[c+2];r[s++]=d,r[s++]=u,r[s++]=u,r[s++]=a}return r}RH.createWireframeIndices=function(e,t,n){let i=l(n);if(e===we.TRIANGLES)return i?QOe(t,n):JOe(t);if(e===we.TRIANGLE_STRIP)return i?qOe(t,n):jOe(t);if(e===we.TRIANGLE_FAN)return i?eYe(t,n):$Oe(t)};RH.getWireframeIndicesCount=function(e,t){return e===we.TRIANGLES?t*2:e===we.TRIANGLE_STRIP||e===we.TRIANGLE_FAN?2+(t-2)*4:t};var r1=RH;var ice={name:"WireframePipelineStage"};ice.process=function(e,t,n){e.shaderBuilder.addDefine("HAS_WIREFRAME",void 0,ye.FRAGMENT);let o=e.model,r=tYe(t,e.indices,n);o._pipelineResources.push(r),e.wireframeIndexBuffer=r,o.statistics.addBuffer(r,!1);let a=e.primitiveType,c=e.count;e.primitiveType=we.LINES,e.count=r1.getWireframeIndicesCount(a,c)};function tYe(e,t,n){let o=Qt.getAttributeBySemantic(e,ft.POSITION).count,r=n.context.webgl2,s;if(l(t)){let u=t.buffer,h=t.count;l(u)&&r?(s=u.sizeInBytes===h?new Uint8Array(h):Ae.createTypedArray(o,h),u.getBufferData(s)):s=t.typedArray}let a=e.primitiveType,c=r1.createWireframeIndices(a,o,s),d=Ae.fromSizeInBytes(c.BYTES_PER_ELEMENT);return xt.createIndexBuffer({context:n.context,typedArray:c,usage:Me.STATIC_DRAW,indexDatatype:d})}var aP=ice;function oce(e){e=e??Y.EMPTY_OBJECT;let t=e.primitive,n=e.node,i=e.model;this.primitive=t,this.node=n,this.model=i,this.pipelineStages=[],this.drawCommand=void 0,this.boundingSphere=void 0,this.boundingSphere2D=void 0,this.positionBuffer2D=void 0,this.batchLengths=void 0,this.batchOffsets=void 0,this.updateStages=[]}oce.prototype.configurePipeline=function(e){let t=this.pipelineStages;t.length=0;let n=this.primitive,i=this.node,o=this.model,r=o.customShader,s=o.style,a=e.context.webgl2,d=e.mode!==oe.SCENE3D&&!e.scene3DOnly&&o._projectTo2D,u=e.verticalExaggeration!==1&&o.hasVerticalExaggeration,h=l(n.morphTargets)&&n.morphTargets.length>0,p=l(i.skin),g=l(r),y=!(g&&l(r.fragmentShaderText))||r.mode!==bb.REPLACE_MATERIAL,x=Qt.hasQuantizedAttributes(n.attributes),S=o.debugWireframe&&we.isTriangles(n.primitiveType)&&(o._enableDebugWireframe||a),C=o.pointCloudShading,V=l(C)&&C.attenuation,L=l(C)&&C.backFaceCulling,Z=n.primitiveType===we.POINTS&&(l(s)||V||L),E=o._enableShowOutline&&l(n.outlineCoordinates),P=nYe(o,i,n),W=l(o.classificationType);d&&t.push(nP),t.push(DW),S&&t.push(aP),W&&t.push(RW),h&&t.push(KW),p&&t.push(oP),Z&&t.push(jW),x&&t.push(MW),y&&t.push(zW),t.push(Eg),t.push(Au),t.push(Rd),P.hasPropertyTable&&(t.push(Xg),t.push(LW),t.push(EW)),u&&t.push(sP),g&&t.push(FW),t.push(OW),o.allowPicking&&t.push(JW),E&&t.push(eP),t.push(VW),t.push(tP)};function nYe(e,t,n){let i;return l(t.instances)&&(i=Qt.getFeatureIdsByLabel(t.instances.featureIds,e.instanceFeatureIdLabel),l(i))?{hasFeatureIds:!0,hasPropertyTable:l(i.propertyTableId)}:(i=Qt.getFeatureIdsByLabel(n.featureIds,e.featureIdLabel),l(i)?{hasFeatureIds:!0,hasPropertyTable:l(i.propertyTableId)}:{hasFeatureIds:!1,hasPropertyTable:!1})}var cP=oce;var YIn=_(T(),1);function ZH(e){e=e??Y.EMPTY_OBJECT,this._sceneGraph=e.sceneGraph;let t=e.skin;this._skin=t,this._inverseBindMatrices=void 0,this._joints=[],this._jointMatrices=[],iYe(this)}Object.defineProperties(ZH.prototype,{skin:{get:function(){return this._skin}},sceneGraph:{get:function(){return this._sceneGraph}},inverseBindMatrices:{get:function(){return this._inverseBindMatrices}},joints:{get:function(){return this._joints}},jointMatrices:{get:function(){return this._jointMatrices}}});function iYe(e){let t=e.skin,n=t.inverseBindMatrices;e._inverseBindMatrices=n;let i=t.joints,o=i.length,r=e.sceneGraph._runtimeNodes,s=e.joints,a=e._jointMatrices;for(let c=0;c<o;c++){let d=i[c].index,u=r[d];s.push(u);let h=n[c],p=rce(u,h,new F);a.push(p)}}function rce(e,t,n){let i=F.multiplyTransformation(e.transformToRoot,e.transform,n);return n=F.multiplyTransformation(i,t,n),n}ZH.prototype.updateJointMatrices=function(){let e=this._jointMatrices,t=e.length;for(let n=0;n<t;n++){let i=this.joints[n],o=this.inverseBindMatrices[n];e[n]=rce(i,o,e[n])}};var lP=ZH;var $In=_(T(),1);var HIn=_(T(),1);function oYe(){this.pass=void 0,this.alphaCutoff=void 0}var dP=oYe;function rYe(e){this.shaderBuilder=new Cx,this.model=e,this.uniformMap={},this.alphaOptions=new dP,this.renderStateOptions=Ue.getState(Ue.fromCache({depthTest:{enabled:!0,func:cc.LESS_OR_EQUAL}})),this.hasSilhouette=!1,this.hasSkipLevelOfDetail=!1}var uP=rYe;var dXn=_(T(),1);var tXn=_(T(),1),mP=`void silhouetteStage(inout vec4 color) { if(model_silhouettePass) { color = czm_gammaCorrect(model_silhouetteColor); } }`;var iXn=_(T(),1),hP=`void silhouetteStage(in ProcessedAttributes attributes, inout vec4 positionClip) { #ifdef HAS_NORMALS if(model_silhouettePass) { vec3 normal = normalize(czm_normal3D * attributes.normalMC); normal.x *= czm_projection[0][0]; normal.y *= czm_projection[1][1]; positionClip.xy += normal.xy * positionClip.w * model_silhouetteSize * czm_pixelRatio / czm_viewport.z; } #endif } `;var $5={name:"ModelSilhouettePipelineStage"};$5.silhouettesLength=0;$5.process=function(e,t,n){l(t._silhouetteId)||(t._silhouetteId=++$5.silhouettesLength);let i=e.shaderBuilder;i.addDefine("HAS_SILHOUETTE",void 0,ye.BOTH),i.addVertexLines(hP),i.addFragmentLines(mP),i.addUniform("vec4","model_silhouetteColor",ye.FRAGMENT),i.addUniform("float","model_silhouetteSize",ye.VERTEX),i.addUniform("bool","model_silhouettePass",ye.BOTH);let o={model_silhouetteColor:function(){return t.silhouetteColor},model_silhouetteSize:function(){return t.silhouetteSize},model_silhouettePass:function(){return!1}};e.uniformMap=St(o,e.uniformMap),e.hasSilhouette=!0};var fP=$5;var gXn=_(T(),1);var mXn=_(T(),1),pP=`void modelSplitterStage() { // Don't split when rendering the shadow map, because it is rendered from // the perspective of a totally different camera. #ifndef SHADOW_MAP if (model_splitDirection < 0.0 && gl_FragCoord.x > czm_splitPosition) discard; if (model_splitDirection > 0.0 && gl_FragCoord.x < czm_splitPosition) discard; #endif } `;var ek={name:"ModelSplitterPipelineStage",SPLIT_DIRECTION_UNIFORM_NAME:"model_splitDirection"};ek.process=function(e,t,n){let i=e.shaderBuilder;i.addDefine("HAS_MODEL_SPLITTER",void 0,ye.FRAGMENT),i.addFragmentLines(pP);let o={};i.addUniform("float",ek.SPLIT_DIRECTION_UNIFORM_NAME,ye.FRAGMENT),o[ek.SPLIT_DIRECTION_UNIFORM_NAME]=function(){return t.splitDirection},e.uniformMap=St(o,e.uniformMap)};var bP=ek;var _Xn=_(T(),1);function sYe(e,t){this.model=e.model,this.shaderBuilder=e.shaderBuilder.clone(),this.uniformMap=Ye(e.uniformMap),this.alphaOptions=Ye(e.alphaOptions),this.renderStateOptions=Ye(e.renderStateOptions,!0),this.hasSilhouette=e.hasSilhouette,this.hasSkipLevelOfDetail=e.hasSkipLevelOfDetail,this.runtimeNode=t,this.attributes=[],this.attributeIndex=1,this.featureIdVertexAttributeSetIndex=0,this.instanceCount=0}var gP=sYe;var WXn=_(T(),1);var VXn=_(T(),1);function aYe(e){e=e??Y.EMPTY_OBJECT,this.lightingModel=e.lightingModel??Vf.UNLIT}var yP=aYe;function cYe(e,t){this.model=e.model,this.runtimeNode=e.runtimeNode,this.attributes=e.attributes.slice(),this.attributeIndex=e.attributeIndex,this.featureIdVertexAttributeSetIndex=e.featureIdVertexAttributeSetIndex,this.uniformMap=Ye(e.uniformMap),this.alphaOptions=Ye(e.alphaOptions),this.renderStateOptions=Ye(e.renderStateOptions,!0),this.hasSilhouette=e.hasSilhouette,this.hasSkipLevelOfDetail=e.hasSkipLevelOfDetail,this.shaderBuilder=e.shaderBuilder.clone(),this.instanceCount=e.instanceCount,this.runtimePrimitive=t;let n=t.primitive;this.count=l(n.indices)?n.indices.count:Qt.getAttributeBySemantic(n,"POSITION").count,this.hasPropertyTable=!1,this.indices=n.indices,this.wireframeIndexBuffer=void 0,this.primitiveType=n.primitiveType;let i=Qt.getPositionMinMax(n,this.runtimeNode.instancingTranslationMin,this.runtimeNode.instancingTranslationMax);this.positionMin=m.clone(i.min,new m),this.positionMax=m.clone(i.max,new m),this.boundingSphere=le.fromCornerPoints(this.positionMin,this.positionMax,new le),this.lightingOptions=new yP,this.pickId=void 0}var xP=cYe;var PWn=_(T(),1);var zXn=_(T(),1);function EH(e){e=e??Y.EMPTY_OBJECT;let t=e.command,n=e.primitiveRenderResources,i=n.model;this._command=t,this._model=i,this._runtimePrimitive=n.runtimePrimitive,this._modelMatrix=t.modelMatrix,this._boundingVolume=t.boundingVolume,this._cullFace=t.renderState.cull.face;let o=i.classificationType;this._classificationType=o,this._classifiesTerrain=o!==Un.CESIUM_3D_TILE,this._classifies3DTiles=o!==Un.TERRAIN,this._useDebugWireframe=i._enableDebugWireframe&&i.debugWireframe,this._pickId=n.pickId,this._commandListTerrain=[],this._commandList3DTiles=[],this._commandListIgnoreShow=[],this._commandListDebugWireframe=[],this._commandListTerrainPicking=[],this._commandList3DTilesPicking=[],mYe(this)}function lYe(e){return{colorMask:{red:!1,green:!1,blue:!1,alpha:!1},stencilTest:{enabled:!0,frontFunction:e,frontOperation:{fail:ht.KEEP,zFail:ht.DECREMENT_WRAP,zPass:ht.KEEP},backFunction:e,backOperation:{fail:ht.KEEP,zFail:ht.INCREMENT_WRAP,zPass:ht.KEEP},reference:Ut.CESIUM_3D_TILE_MASK,mask:Ut.CESIUM_3D_TILE_MASK},stencilMask:Ut.CLASSIFICATION_MASK,depthTest:{enabled:!0,func:cc.LESS_OR_EQUAL},depthMask:!1}}var dYe={stencilTest:{enabled:!0,frontFunction:Dn.NOT_EQUAL,frontOperation:{fail:ht.ZERO,zFail:ht.ZERO,zPass:ht.ZERO},backFunction:Dn.NOT_EQUAL,backOperation:{fail:ht.ZERO,zFail:ht.ZERO,zPass:ht.ZERO},reference:0,mask:Ut.CLASSIFICATION_MASK},stencilMask:Ut.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1,blending:un.PRE_MULTIPLIED_ALPHA_BLEND},uYe={stencilTest:{enabled:!0,frontFunction:Dn.NOT_EQUAL,frontOperation:{fail:ht.ZERO,zFail:ht.ZERO,zPass:ht.ZERO},backFunction:Dn.NOT_EQUAL,backOperation:{fail:ht.ZERO,zFail:ht.ZERO,zPass:ht.ZERO},reference:0,mask:Ut.CLASSIFICATION_MASK},stencilMask:Ut.CLASSIFICATION_MASK,depthTest:{enabled:!1},depthMask:!1},cce=[];function mYe(e){let t=e._command,n=cce;if(e._useDebugWireframe){t.pass=Ee.OPAQUE,n.length=0,n.push(t),e._commandListDebugWireframe=_P(e,n,e._commandListDebugWireframe);let r=e._commandListDebugWireframe,s=r.length;for(let a=0;a<s;a++){let c=r[a];c.count*=2,c.offset*=2}return}let o=e.model.allowPicking;if(e._classifiesTerrain){let r=Ee.TERRAIN_CLASSIFICATION,s=GH(t,r),a=sce(t,r);n.length=0,n.push(s,a),e._commandListTerrain=_P(e,n,e._commandListTerrain),o&&(e._commandListTerrainPicking=ace(e,n,e._commandListTerrainPicking))}if(e._classifies3DTiles){let r=Ee.CESIUM_3D_TILE_CLASSIFICATION,s=GH(t,r),a=sce(t,r);n.length=0,n.push(s,a),e._commandList3DTiles=_P(e,n,e._commandList3DTiles),o&&(e._commandList3DTilesPicking=ace(e,n,e._commandList3DTilesPicking))}}function _P(e,t,n){let i=e._runtimePrimitive,o=i.batchLengths,r=i.batchOffsets,s=o.length,a=t.length;for(let c=0;c<s;c++){let d=o[c],u=r[c];for(let h=0;h<a;h++){let p=t[h],g=$e.shallowClone(p);g.count=d,g.offset=u,n.push(g)}}return n}function GH(e,t){let n=$e.shallowClone(e);n.cull=!1,n.pass=t;let i=t===Ee.TERRAIN_CLASSIFICATION?Dn.ALWAYS:Dn.EQUAL,o=lYe(i);return n.renderState=Ue.fromCache(o),n}function sce(e,t){let n=$e.shallowClone(e);return n.cull=!1,n.pass=t,n.renderState=Ue.fromCache(dYe),n}var hYe=[];function ace(e,t,n){let i=Ue.fromCache(uYe),o=t[0],r=t[1],s=$e.shallowClone(o);s.cull=!0,s.pickOnly=!0;let a=$e.shallowClone(r);a.cull=!0,a.pickOnly=!0,a.renderState=i,a.pickId=e._pickId;let c=hYe;return c.length=0,c.push(s,a),_P(e,c,n)}Object.defineProperties(EH.prototype,{command:{get:function(){return this._command}},runtimePrimitive:{get:function(){return this._runtimePrimitive}},batchLengths:{get:function(){return this._runtimePrimitive.batchLengths}},batchOffsets:{get:function(){return this._runtimePrimitive.batchOffsets}},model:{get:function(){return this._model}},classificationType:{get:function(){return this._classificationType}},modelMatrix:{get:function(){return this._modelMatrix},set:function(e){this._modelMatrix=F.clone(e,this._modelMatrix);let t=this._runtimePrimitive.boundingSphere;this._boundingVolume=le.transform(t,this._modelMatrix,this._boundingVolume)}},boundingVolume:{get:function(){return this._boundingVolume}},cullFace:{get:function(){return this._cullFace},set:function(e){this._cullFace=e}}});EH.prototype.pushCommands=function(e,t){let n=e.passes;if(n.render){if(this._useDebugWireframe){t.push.apply(t,this._commandListDebugWireframe);return}if(this._classifiesTerrain&&t.push.apply(t,this._commandListTerrain),this._classifies3DTiles&&t.push.apply(t,this._commandList3DTiles),e.invertClassification&&this._classifies3DTiles){if(this._commandListIgnoreShow.length===0){let o=Ee.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW,r=GH(this._command,o),s=cce;s.length=0,s.push(r),this._commandListIgnoreShow=_P(this,s,this._commandListIgnoreShow)}t.push.apply(t,this._commandListIgnoreShow)}}return n.pick&&(this._classifiesTerrain&&t.push.apply(t,this._commandListTerrainPicking),this._classifies3DTiles&&t.push.apply(t,this._commandList3DTilesPicking)),t};var TP=EH;var hWn=_(T(),1);function tk(e){e=e??Y.EMPTY_OBJECT;let t=e.command,n=e.primitiveRenderResources,i=n.model;this._model=i;let o=n.runtimePrimitive;this._runtimePrimitive=o;let r=t.pass===Ee.TRANSLUCENT,a=!o.primitive.material.doubleSided&&!r,c=n.hasSilhouette,d=!r&&!c,u=n.hasSkipLevelOfDetail&&!r,h=c;this._command=t,this._modelMatrix=F.clone(t.modelMatrix),this._boundingVolume=le.clone(t.boundingVolume),this._modelMatrix2D=new F,this._boundingVolume2D=new le,this._modelMatrix2DDirty=!1,this._backFaceCulling=t.renderState.cull.enabled,this._cullFace=t.renderState.cull.face,this._shadows=i.shadows,this._debugShowBoundingVolume=t.debugShowBoundingVolume,this._usesBackFaceCulling=a,this._needsTranslucentCommand=d,this._needsSkipLevelOfDetailCommands=u,this._needsSilhouetteCommands=h,this._originalCommand=void 0,this._translucentCommand=void 0,this._skipLodBackfaceCommand=void 0,this._skipLodStencilCommand=void 0,this._silhouetteModelCommand=void 0,this._silhouetteColorCommand=void 0,this._derivedCommands=[],this._has2DCommands=!1,fYe(this)}function gb(e){this.command=e.command,this.updateShadows=e.updateShadows,this.updateBackFaceCulling=e.updateBackFaceCulling,this.updateCullFace=e.updateCullFace,this.updateDebugShowBoundingVolume=e.updateDebugShowBoundingVolume,this.is2D=e.is2D??!1,this.derivedCommand2D=void 0}gb.clone=function(e){return new gb({command:e.command,updateShadows:e.updateShadows,updateBackFaceCulling:e.updateBackFaceCulling,updateCullFace:e.updateCullFace,updateDebugShowBoundingVolume:e.updateDebugShowBoundingVolume,is2D:e.is2D,derivedCommand2D:e.derivedCommand2D})};function fYe(e){let t=e._command;t.modelMatrix=e._modelMatrix,t.boundingVolume=e._boundingVolume;let n=e._model,i=e._usesBackFaceCulling,o=e._derivedCommands;e._originalCommand=new gb({command:t,updateShadows:!0,updateBackFaceCulling:i,updateCullFace:i,updateDebugShowBoundingVolume:!0,is2D:!1}),o.push(e._originalCommand),e._needsTranslucentCommand&&(e._translucentCommand=new gb({command:TYe(t),updateShadows:!0,updateBackFaceCulling:!1,updateCullFace:!1,updateDebugShowBoundingVolume:!0}),o.push(e._translucentCommand)),e._needsSkipLevelOfDetailCommands&&(e._skipLodBackfaceCommand=new gb({command:ZYe(t),updateShadows:!1,updateBackFaceCulling:!1,updateCullFace:i,updateDebugShowBoundingVolume:!1}),e._skipLodStencilCommand=new gb({command:GYe(t,n),updateShadows:!0,updateBackFaceCulling:i,updateCullFace:i,updateDebugShowBoundingVolume:!0}),o.push(e._skipLodBackfaceCommand),o.push(e._skipLodStencilCommand)),e._needsSilhouetteCommands&&(e._silhouetteModelCommand=new gb({command:SYe(t,n),updateShadows:!0,updateBackFaceCulling:i,updateCullFace:i,updateDebugShowBoundingVolume:!0}),e._silhouetteColorCommand=new gb({command:CYe(t,n),updateShadows:!1,updateBackFaceCulling:!1,updateCullFace:!1,updateDebugShowBoundingVolume:!1}),o.push(e._silhouetteModelCommand),o.push(e._silhouetteColorCommand))}Object.defineProperties(tk.prototype,{command:{get:function(){return this._command}},runtimePrimitive:{get:function(){return this._runtimePrimitive}},model:{get:function(){return this._model}},primitiveType:{get:function(){return this._command.primitiveType}},modelMatrix:{get:function(){return this._modelMatrix},set:function(e){this._modelMatrix=F.clone(e,this._modelMatrix),this._modelMatrix2DDirty=!0,this._boundingVolume=le.transform(this.runtimePrimitive.boundingSphere,this._modelMatrix,this._boundingVolume)}},boundingVolume:{get:function(){return this._boundingVolume}},shadows:{get:function(){return this._shadows},set:function(e){this._shadows=e,bYe(this)}},backFaceCulling:{get:function(){return this._backFaceCulling},set:function(e){this._backFaceCulling!==e&&(this._backFaceCulling=e,gYe(this))}},cullFace:{get:function(){return this._cullFace},set:function(e){this._cullFace!==e&&(this._cullFace=e,yYe(this))}},debugShowBoundingVolume:{get:function(){return this._debugShowBoundingVolume},set:function(e){this._debugShowBoundingVolume!==e&&(this._debugShowBoundingVolume=e,xYe(this))}}});function pYe(e,t){let n=e._modelMatrix;e._modelMatrix2D=F.clone(n,e._modelMatrix2D),e._modelMatrix2D[13]-=X.sign(n[13])*2*X.PI*t.mapProjection.ellipsoid.maximumRadius,e._boundingVolume2D=le.transform(e.runtimePrimitive.boundingSphere,e._modelMatrix2D,e._boundingVolume2D)}function bYe(e){let t=e.shadows,n=_n.castShadows(t),i=_n.receiveShadows(t),o=e._derivedCommands;for(let r=0;r<o.length;++r){let s=o[r];if(s.updateShadows){let a=s.command;a.castShadows=n,a.receiveShadows=i}}}function gYe(e){let t=e.backFaceCulling,n=e._derivedCommands;for(let i=0;i<n.length;++i){let o=n[i];if(o.updateBackFaceCulling){let r=o.command,s=Ye(r.renderState,!0);s.cull.enabled=t,r.renderState=Ue.fromCache(s)}}}function yYe(e){let t=e.cullFace,n=e._derivedCommands;for(let i=0;i<n.length;++i){let o=n[i];if(o.updateCullFace){let r=o.command,s=Ye(r.renderState,!0);s.cull.face=t,r.renderState=Ue.fromCache(s)}}}function xYe(e){let t=e.debugShowBoundingVolume,n=e._derivedCommands;for(let i=0;i<n.length;++i){let o=n[i];if(o.updateDebugShowBoundingVolume){let r=o.command;r.debugShowBoundingVolume=t}}}tk.prototype.pushCommands=function(e,t){let n=lce(this,e);n&&!this._has2DCommands&&(_Ye(this),this._has2DCommands=!0,this._modelMatrix2DDirty=!0),this._modelMatrix2DDirty&&(pYe(this,e),this._modelMatrix2DDirty=!1);let i=this.model.styleCommandsNeeded;if(!(this._needsTranslucentCommand&&l(i)&&(i!==rh.ALL_OPAQUE&&a1(t,this._translucentCommand,n),i===rh.ALL_TRANSLUCENT))){if(this._needsSkipLevelOfDetailCommands){let{tileset:o,tile:r}=this._model.content;if(o.hasMixedContent){r._finalResolution||a1(o._backfaceCommands,this._skipLodBackfaceCommand,n),VYe(this,r,n),a1(t,this._skipLodStencilCommand,n);return}}if(this._needsSilhouetteCommands){a1(t,this._silhouetteModelCommand,n);return}return a1(t,this._originalCommand,n),t}};tk.prototype.pushSilhouetteCommands=function(e,t){let n=lce(this,e);return a1(t,this._silhouetteColorCommand,n),t};function a1(e,t,n){e.push(t.command),n&&e.push(t.derivedCommand2D.command)}function lce(e,t){if(t.mode!==oe.SCENE2D||e.model._projectTo2D)return!1;let i=e.model.sceneGraph._boundingSphere2D,o=i.center.y-i.radius,r=i.center.y+i.radius,s=t.mapProjection.ellipsoid.maximumRadius*X.PI;return o<s&&r>s||o<-s&&r>-s}function s1(e,t){if(!l(t))return;let n=gb.clone(t),i=$e.shallowClone(t.command);return i.modelMatrix=e._modelMatrix2D,i.boundingVolume=e._boundingVolume2D,n.command=i,n.updateShadows=!1,n.is2D=!0,t.derivedCommand2D=n,e._derivedCommands.push(n),n}function _Ye(e){s1(e,e._originalCommand),s1(e,e._translucentCommand),s1(e,e._skipLodBackfaceCommand),s1(e,e._skipLodStencilCommand),s1(e,e._silhouetteModelCommand),s1(e,e._silhouetteColorCommand)}function TYe(e){let t=$e.shallowClone(e);t.pass=Ee.TRANSLUCENT;let n=Ye(e.renderState,!0);return n.cull.enabled=!1,n.depthMask=!1,n.blending=un.ALPHA_BLEND,t.renderState=Ue.fromCache(n),t}function SYe(e,t){let n=t._silhouetteId%255,i=$e.shallowClone(e),o=Ye(e.renderState,!0);return o.stencilTest={enabled:!0,frontFunction:ie.ALWAYS,backFunction:ie.ALWAYS,reference:n,mask:-1,frontOperation:{fail:ie.KEEP,zFail:ie.KEEP,zPass:ie.REPLACE},backOperation:{fail:ie.KEEP,zFail:ie.KEEP,zPass:ie.REPLACE}},t.isInvisible()&&(o.colorMask={red:!1,green:!1,blue:!1,alpha:!1}),i.renderState=Ue.fromCache(o),i}function CYe(e,t){let n=t._silhouetteId%255,i=$e.shallowClone(e),o=Ye(e.renderState,!0);o.cull.enabled=!1,(e.pass===Ee.TRANSLUCENT||t.silhouetteColor.alpha<1)&&(i.pass=Ee.TRANSLUCENT,o.depthMask=!1,o.blending=un.ALPHA_BLEND),o.stencilTest={enabled:!0,frontFunction:ie.NOTEQUAL,backFunction:ie.NOTEQUAL,reference:n,mask:-1,frontOperation:{fail:ie.KEEP,zFail:ie.KEEP,zPass:ie.KEEP},backOperation:{fail:ie.KEEP,zFail:ie.KEEP,zPass:ie.KEEP}};let s=Ye(e.uniformMap);return s.model_silhouettePass=function(){return!0},i.renderState=Ue.fromCache(o),i.uniformMap=s,i.castShadows=!1,i.receiveShadows=!1,i}function VYe(e,t,n){let i=e._skipLodStencilCommand,o=i.command,r=t._selectionDepth,s=LYe(o);if(r!==s){let a=RYe(r),c=Ye(o.renderState,!0);c.stencilTest.reference=a,o.renderState=Ue.fromCache(c),n&&(i.derivedCommand2D.renderState=c)}}function LYe(e){return(e.renderState.stencilTest.reference&Ut.SKIP_LOD_MASK)>>>Ut.SKIP_LOD_BIT_SHIFT}function RYe(e){return Ut.CESIUM_3D_TILE_MASK|e<<Ut.SKIP_LOD_BIT_SHIFT}function ZYe(e){let t=$e.shallowClone(e),n=Ye(e.renderState,!0);n.cull.enabled=!0,n.cull.face=Ti.FRONT,n.colorMask={red:!1,green:!1,blue:!1,alpha:!1},n.polygonOffset={enabled:!0,factor:5,units:5};let i=Ye(t.uniformMap),o=new U(5,5);return i.u_polygonOffset=function(){return o},t.renderState=Ue.fromCache(n),t.uniformMap=i,t.castShadows=!1,t.receiveShadows=!1,t}function GYe(e){let t=$e.shallowClone(e),n=Ye(e.renderState,!0),{stencilTest:i}=n;return i.enabled=!0,i.mask=Ut.SKIP_LOD_MASK,i.reference=Ut.CESIUM_3D_TILE_MASK,i.frontFunction=Dn.GREATER_OR_EQUAL,i.frontOperation.zPass=ht.REPLACE,i.backFunction=Dn.GREATER_OR_EQUAL,i.backOperation.zPass=ht.REPLACE,n.stencilMask=Ut.CESIUM_3D_TILE_MASK|Ut.SKIP_LOD_MASK,t.renderState=Ue.fromCache(n),t}var SP=tk;var pWn=_(T(),1),CP=`precision highp float; czm_modelVertexOutput defaultVertexOutput(vec3 positionMC) { czm_modelVertexOutput vsOutput; vsOutput.positionMC = positionMC; vsOutput.pointSize = 1.0; return vsOutput; } void main() { // Initialize the attributes struct with all // attributes except quantized ones. ProcessedAttributes attributes; initializeAttributes(attributes); // Dequantize the quantized ones and add them to the // attributes struct. #ifdef USE_DEQUANTIZATION dequantizationStage(attributes); #endif #ifdef HAS_MORPH_TARGETS morphTargetsStage(attributes); #endif #ifdef HAS_SKINNING skinningStage(attributes); #endif #ifdef HAS_PRIMITIVE_OUTLINE primitiveOutlineStage(); #endif // Compute the bitangent according to the formula in the glTF spec. // Normal and tangents can be affected by morphing and skinning, so // the bitangent should not be computed until their values are finalized. #ifdef HAS_BITANGENTS attributes.bitangentMC = normalize(cross(attributes.normalMC, attributes.tangentMC) * attributes.tangentSignMC); #endif FeatureIds featureIds; featureIdStage(featureIds, attributes); #ifdef HAS_SELECTED_FEATURE_ID SelectedFeature feature; selectedFeatureIdStage(feature, featureIds); // Handle any show properties that come from the style. cpuStylingStage(attributes.positionMC, feature); #endif #if defined(USE_2D_POSITIONS) || defined(USE_2D_INSTANCING) // The scene mode 2D pipeline stage and instancing stage add a different // model view matrix to accurately project the model to 2D. However, the // output positions and normals should be transformed by the 3D matrices // to keep the data the same for the fragment shader. mat4 modelView = czm_modelView3D; mat3 normal = czm_normal3D; #else // These are used for individual model projection because they will // automatically change based on the scene mode. mat4 modelView = czm_modelView; mat3 normal = czm_normal; #endif // Update the position for this instance in place #ifdef HAS_INSTANCING // The legacy instance stage is used when rendering i3dm models that // encode instances transforms in world space, as opposed to glTF models // that use EXT_mesh_gpu_instancing, where instance transforms are encoded // in object space. #ifdef USE_LEGACY_INSTANCING mat4 instanceModelView; mat3 instanceModelViewInverseTranspose; legacyInstancingStage(attributes, instanceModelView, instanceModelViewInverseTranspose); modelView = instanceModelView; normal = instanceModelViewInverseTranspose; #else instancingStage(attributes); #endif #ifdef USE_PICKING v_pickColor = a_pickColor; #endif #endif Metadata metadata; MetadataClass metadataClass; MetadataStatistics metadataStatistics; metadataStage(metadata, metadataClass, metadataStatistics, attributes); #ifdef HAS_VERTICAL_EXAGGERATION verticalExaggerationStage(attributes); #endif #ifdef HAS_CUSTOM_VERTEX_SHADER czm_modelVertexOutput vsOutput = defaultVertexOutput(attributes.positionMC); customShaderStage(vsOutput, attributes, featureIds, metadata, metadataClass, metadataStatistics); #endif // Compute the final position in each coordinate system needed. // This returns the value that will be assigned to gl_Position. vec4 positionClip = geometryStage(attributes, modelView, normal); // This must go after the geometry stage as it needs v_positionWC #ifdef HAS_ATMOSPHERE atmosphereStage(attributes); #endif #ifdef ENABLE_CLIPPING_POLYGONS modelClippingPolygonsStage(attributes); #endif #ifdef HAS_SILHOUETTE silhouetteStage(attributes, positionClip); #endif #ifdef HAS_POINT_CLOUD_SHOW_STYLE float show = pointCloudShowStylingStage(attributes, metadata); #else float show = 1.0; #endif #ifdef HAS_POINT_CLOUD_BACK_FACE_CULLING show *= pointCloudBackFaceCullingStage(); #endif #ifdef HAS_POINT_CLOUD_COLOR_STYLE v_pointCloudColor = pointCloudColorStylingStage(attributes, metadata); #endif #ifdef PRIMITIVE_TYPE_POINTS #ifdef HAS_CUSTOM_VERTEX_SHADER gl_PointSize = vsOutput.pointSize; #elif defined(HAS_POINT_CLOUD_POINT_SIZE_STYLE) || defined(HAS_POINT_CLOUD_ATTENUATION) gl_PointSize = pointCloudPointSizeStylingStage(attributes, metadata); #else gl_PointSize = 1.0; #endif gl_PointSize *= show; #endif // Important NOT to compute gl_Position = show * positionClip or we hit: // https://github.com/CesiumGS/cesium/issues/11270 // // We will discard points with v_pointCloudShow == 0 in the fragment shader. gl_Position = positionClip; #ifdef HAS_POINT_CLOUD_SHOW_STYLE v_pointCloudShow = show; #endif } `;var gWn=_(T(),1),VP=` precision highp float; czm_modelMaterial defaultModelMaterial() { czm_modelMaterial material; material.diffuse = vec3(0.0); material.specular = vec3(1.0); material.roughness = 1.0; material.occlusion = 1.0; material.normalEC = vec3(0.0, 0.0, 1.0); material.emissive = vec3(0.0); material.alpha = 1.0; return material; } vec4 handleAlpha(vec3 color, float alpha) { #ifdef ALPHA_MODE_MASK if (alpha < u_alphaCutoff) { discard; } #endif return vec4(color, alpha); } SelectedFeature selectedFeature; void main() { #ifdef HAS_POINT_CLOUD_SHOW_STYLE if (v_pointCloudShow == 0.0) { discard; } #endif #ifdef HAS_MODEL_SPLITTER modelSplitterStage(); #endif czm_modelMaterial material = defaultModelMaterial(); ProcessedAttributes attributes; geometryStage(attributes); FeatureIds featureIds; featureIdStage(featureIds, attributes); Metadata metadata; MetadataClass metadataClass; MetadataStatistics metadataStatistics; metadataStage(metadata, metadataClass, metadataStatistics, attributes); //======================================================================== // When not picking metadata START #ifndef METADATA_PICKING_ENABLED #ifdef HAS_SELECTED_FEATURE_ID selectedFeatureIdStage(selectedFeature, featureIds); #endif #ifndef CUSTOM_SHADER_REPLACE_MATERIAL materialStage(material, attributes, selectedFeature); #endif #ifdef HAS_CUSTOM_FRAGMENT_SHADER customShaderStage(material, attributes, featureIds, metadata, metadataClass, metadataStatistics); #endif lightingStage(material, attributes); #ifdef HAS_SELECTED_FEATURE_ID cpuStylingStage(material, selectedFeature); #endif #ifdef HAS_MODEL_COLOR modelColorStage(material); #endif #ifdef HAS_PRIMITIVE_OUTLINE primitiveOutlineStage(material); #endif vec4 color = handleAlpha(material.diffuse, material.alpha); // When not picking metadata END //======================================================================== #else //======================================================================== // When picking metadata START vec4 metadataValues = vec4(0.0, 0.0, 0.0, 0.0); metadataPickingStage(metadata, metadataClass, metadataValues); vec4 color = metadataValues; #endif // When picking metadata END //======================================================================== #ifdef HAS_CLIPPING_PLANES modelClippingPlanesStage(color); #endif #ifdef ENABLE_CLIPPING_POLYGONS modelClippingPolygonsStage(); #endif //======================================================================== // When not picking metadata START #ifndef METADATA_PICKING_ENABLED #if defined(HAS_SILHOUETTE) && defined(HAS_NORMALS) silhouetteStage(color); #endif #ifdef HAS_ATMOSPHERE atmosphereStage(color, attributes); #endif #endif // When not picking metadata END //======================================================================== out_FragColor = color; } `;function dce(){}dce.buildModelDrawCommand=function(e,t){let n=e.shaderBuilder,i=EYe(e,n,t),o=IYe(e,i,t),r=e.model;return l(r.classificationType)?new TP({primitiveRenderResources:e,command:o}):new SP({primitiveRenderResources:e,command:o})};function EYe(e,t,n){t.addVertexLines(CP),t.addFragmentLines(VP);let i=e.model,o=t.buildShaderProgram(n.context);return i._pipelineResources.push(o),o}function IYe(e,t,n){let i=XYe(e),o=new ni({context:n.context,indexBuffer:i,attributes:e.attributes}),r=e.model;r._pipelineResources.push(o);let s=e.alphaOptions.pass,a=r.sceneGraph,c=n.mode===oe.SCENE3D,d,u;if(!c&&!n.scene3DOnly&&r._projectTo2D)d=F.multiplyTransformation(a._computedModelMatrix,e.runtimeNode.computedTransform,new F),u=e.runtimePrimitive.boundingSphere2D;else{let S=c?a._computedModelMatrix:a._computedModelMatrix2D;d=F.multiplyTransformation(S,e.runtimeNode.computedTransform,new F),u=le.transform(e.boundingSphere,d)}let h=Ye(Ue.fromCache(e.renderStateOptions),!0);h.cull.face=Qt.getCullFace(d,e.primitiveType),h=Ue.fromCache(h);let p=l(r.classificationType),g=p?!1:_n.castShadows(r.shadows),f=p?!1:_n.receiveShadows(r.shadows),y=p?void 0:e.pickId;return new $e({boundingVolume:u,modelMatrix:d,uniformMap:e.uniformMap,renderState:h,vertexArray:o,shaderProgram:t,cull:r.cull,pass:s,count:e.count,owner:r,pickId:y,pickMetadataAllowed:!0,instanceCount:e.instanceCount,primitiveType:e.primitiveType,debugShowBoundingVolume:r.debugShowBoundingVolume,castShadows:g,receiveShadows:f})}function XYe(e){let t=e.wireframeIndexBuffer;if(l(t))return t;let n=e.indices;if(l(n))return n.buffer}var LP=dce;function Zd(e){e=e??Y.EMPTY_OBJECT;let t=e.modelComponents;this._model=e.model,this._components=t,this._pipelineStages=[],this._updateStages=[],this._runtimeNodes=[],this._rootNodes=[],this._skinnedNodes=[],this._runtimeSkins=[],this.modelPipelineStages=[],this._boundingSphere=void 0,this._boundingSphere2D=void 0,this._computedModelMatrix=F.clone(F.IDENTITY),this._computedModelMatrix2D=F.clone(F.IDENTITY),this._axisCorrectionMatrix=Qt.getAxisCorrectionMatrix(t.upAxis,t.forwardAxis,new F),this._runtimeArticulations={},WYe(this)}Object.defineProperties(Zd.prototype,{components:{get:function(){return this._components}},computedModelMatrix:{get:function(){return this._computedModelMatrix}},axisCorrectionMatrix:{get:function(){return this._axisCorrectionMatrix}},boundingSphere:{get:function(){return this._boundingSphere}}});function WYe(e){let t=e._components,n=t.scene,o=e._model.modelMatrix;uce(e,o);let r=t.articulations,s=r.length,a=e._runtimeArticulations;for(let C=0;C<s;C++){let V=r[C],L=new cW({articulation:V,sceneGraph:e}),Z=L.name;a[Z]=L}let c=t.nodes,d=c.length;e._runtimeNodes=new Array(d);let h=n.nodes.length,p=F.IDENTITY;for(let C=0;C<h;C++){let V=n.nodes[C],L=mce(e,V,p);e._rootNodes.push(L)}let g=t.skins,f=e._runtimeSkins,y=g.length;for(let C=0;C<y;C++){let V=g[C];f.push(new lP({skin:V,sceneGraph:e}))}let x=e._skinnedNodes,S=x.length;for(let C=0;C<S;C++){let V=x[C],L=e._runtimeNodes[V],E=c[V].skin.index;L._runtimeSkin=f[E],L.updateJointMatrices()}e.applyArticulations()}function uce(e,t){let n=e._components,i=e._model;e._computedModelMatrix=F.multiplyTransformation(t,n.transform,e._computedModelMatrix),e._computedModelMatrix=F.multiplyTransformation(e._computedModelMatrix,e._axisCorrectionMatrix,e._computedModelMatrix),e._computedModelMatrix=F.multiplyByUniformScale(e._computedModelMatrix,i.computedScale,e._computedModelMatrix)}var PYe=new m;function vYe(e,t){let n=e._computedModelMatrix,i=F.getTranslation(n,PYe);if(!m.equals(i,m.ZERO))e._computedModelMatrix2D=Pt.basisTo2D(t.mapProjection,n,e._computedModelMatrix2D);else{let o=e.boundingSphere.center,r=Pt.ellipsoidTo2DModelMatrix(t.mapProjection,o,e._computedModelMatrix2D);e._computedModelMatrix2D=F.multiply(r,n,e._computedModelMatrix2D)}e._boundingSphere2D=le.transform(e._boundingSphere,e._computedModelMatrix2D,e._boundingSphere2D)}function mce(e,t,n){let i=[],o=Qt.getNodeTransform(t),r=t.children.length;for(let u=0;u<r;u++){let h=t.children[u],p=F.multiplyTransformation(n,o,new F),g=mce(e,h,p);i.push(g)}let s=new CW({node:t,transform:o,transformToRoot:n,children:i,sceneGraph:e}),a=t.primitives.length;for(let u=0;u<a;u++)s.runtimePrimitives.push(new cP({primitive:t.primitives[u],node:t,model:e._model}));let c=t.index;e._runtimeNodes[c]=s,l(t.skin)&&e._skinnedNodes.push(c);let d=t.name;if(l(d)){let u=e._model,h=new pW(u,s);u._nodesByName[d]=h}return c}var wYe=new m,FYe=new m,AYe=new m,MYe=new m;Zd.prototype.buildDrawCommands=function(e){let t=this._model,n=new uP(t);t.statistics.clear(),this.configurePipeline(e);let i=this.modelPipelineStages,o,r,s;for(o=0;o<i.length;o++)i[o].process(n,t,e);let a=m.fromElements(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE,wYe),c=m.fromElements(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE,FYe);for(o=0;o<this._runtimeNodes.length;o++){let d=this._runtimeNodes[o];if(!l(d))continue;d.configurePipeline();let u=d.pipelineStages,h=new gP(n,d);for(r=0;r<u.length;r++)u[r].process(h,d.node,e);let p=d.computedTransform;for(r=0;r<d.runtimePrimitives.length;r++){let g=d.runtimePrimitives[r];g.configurePipeline(e);let f=g.pipelineStages,y=new xP(h,g);for(s=0;s<f.length;s++)f[s].process(y,g.primitive,e);g.boundingSphere=le.clone(y.boundingSphere,new le);let x=F.multiplyByPoint(p,y.positionMin,AYe),S=F.multiplyByPoint(p,y.positionMax,MYe);m.minimumByComponent(a,x,a),m.maximumByComponent(c,S,c);let C=LP.buildModelDrawCommand(y,e);g.drawCommand=C}}this._boundingSphere=le.fromCornerPoints(a,c,new le),this._boundingSphere=le.transformWithoutScale(this._boundingSphere,this._axisCorrectionMatrix,this._boundingSphere),this._boundingSphere=le.transform(this._boundingSphere,this._components.transform,this._boundingSphere),t._boundingSphere=le.transform(this._boundingSphere,t.modelMatrix,t._boundingSphere),t._initialRadius=t._boundingSphere.radius,t._boundingSphere.radius*=t._clampedScale};Zd.prototype.configurePipeline=function(e){let t=this.modelPipelineStages;t.length=0;let n=this._model,i=e.fog.enabled&&e.fog.renderable;l(n.color)&&t.push(Gg),!l(n.classificationType)&&(n.imageBasedLighting.enabled&&t.push(sW),n.isClippingEnabled()&&t.push(uW),n.isClippingPolygonsEnabled()&&t.push(fW),n.hasSilhouette(e)&&t.push(fP),l(n.splitDirection)&&n.splitDirection!==vr.NONE&&t.push(bP),cr.is3DTiles(n.type)&&t.push(tW),i&&t.push(oW))};Zd.prototype.update=function(e,t){let n,i,o;for(n=0;n<this._runtimeNodes.length;n++){let r=this._runtimeNodes[n];if(!l(r))continue;for(i=0;i<r.updateStages.length;i++)r.updateStages[i].update(r,this,e);let s=e.mode!==oe.SCENE3D&&this._model._projectTo2D;for(t&&!s&&this.updateJointMatrices(),i=0;i<r.runtimePrimitives.length;i++){let a=r.runtimePrimitives[i];for(o=0;o<a.updateStages.length;o++)a.updateStages[o].update(a,this)}}};Zd.prototype.updateModelMatrix=function(e,t){uce(this,e),t.mode!==oe.SCENE3D&&vYe(this,t);let n=this._rootNodes;for(let i=0;i<n.length;i++){let o=this._runtimeNodes[n[i]];o._transformDirty=!0}};Zd.prototype.updateJointMatrices=function(){let e=this._skinnedNodes,t=e.length;for(let n=0;n<t;n++){let i=e[n];this._runtimeNodes[i].updateJointMatrices()}};function hce(e,t,n,i,o){if(n&&!t.show)return;let r=t.children.length;for(let c=0;c<r;c++){let d=t.getChild(c);hce(e,d,n,i,o)}let s=t.runtimePrimitives,a=s.length;for(let c=0;c<a;c++){let d=s[c];i(d,o)}}function nk(e,t,n,i){let o=e._rootNodes,r=o.length;for(let s=0;s<r;s++){let a=o[s],c=e._runtimeNodes[a];hce(e,c,t,n,i)}}var NYe={backFaceCulling:void 0};Zd.prototype.updateBackFaceCulling=function(e){let t=NYe;t.backFaceCulling=e,nk(this,!1,kYe,t)};function kYe(e,t){let n=e.drawCommand;n.backFaceCulling=t.backFaceCulling}var UYe={shadowMode:void 0};Zd.prototype.updateShadows=function(e){let t=UYe;t.shadowMode=e,nk(this,!1,DYe,t)};function DYe(e,t){let n=e.drawCommand;n.shadows=t.shadowMode}var BYe={debugShowBoundingVolume:void 0};Zd.prototype.updateShowBoundingVolume=function(e){let t=BYe;t.debugShowBoundingVolume=e,nk(this,!1,OYe,t)};function OYe(e,t){let n=e.drawCommand;n.debugShowBoundingVolume=t.debugShowBoundingVolume}var fce=[],YYe={frameState:void 0,hasSilhouette:void 0};Zd.prototype.pushDrawCommands=function(e){let t=fce;t.length=0;let n=YYe;n.hasSilhouette=this._model.hasSilhouette(e),n.frameState=e,nk(this,!0,zYe,n),e.commandList.push.apply(e.commandList,t)};function zYe(e,t){let n=t.frameState,i=t.hasSilhouette,o=n.passes,r=fce,s=e.drawCommand;s.pushCommands(n,n.commandList),i&&!o.pick&&s.pushSilhouetteCommands(n,r)}Zd.prototype.setArticulationStage=function(e,t){let n=e.split(" ");if(n.length!==2)return;let i=n[0],o=n[1],r=this._runtimeArticulations[i];l(r)&&r.setArticulationStage(o,t)};Zd.prototype.applyArticulations=function(){let e=this._runtimeArticulations;for(let t in e)e.hasOwnProperty(t)&&e[t].apply()};var RP=Zd;var uPn=_(T(),1);function Wg(){this.pointsLength=0,this.trianglesLength=0,this.geometryByteLength=0,this.texturesByteLength=0,this.propertyTablesByteLength=0,this._bufferIdSet={},this._textureIdByteLengths={},this._batchTextureIdMap=new Gt}Object.defineProperties(Wg.prototype,{batchTexturesByteLength:{get:function(){let e=this._batchTextureIdMap.length,t=this._batchTextureIdMap.values,n=0;for(let i=0;i<e;i++)n+=t[i].byteLength;return n}}});Wg.prototype.clear=function(){this.pointsLength=0,this.trianglesLength=0,this.geometryByteLength=0,this.texturesByteLength=0,this.propertyTablesByteLength=0,this._bufferIdSet={},this._textureIdByteLengths={},this._batchTextureIdMap.removeAll()};Wg.prototype.addBuffer=function(e,t){if(!this._bufferIdSet.hasOwnProperty(e._id)){let n=t?2:1;this.geometryByteLength+=e.sizeInBytes*n}this._bufferIdSet[e._id]=!0};Wg.prototype.addTexture=function(e){this._textureIdByteLengths.hasOwnProperty(e._id)||(this.texturesByteLength+=e.sizeInBytes,this._textureIdByteLengths[e._id]=e.sizeInBytes)};Wg.prototype.getTextureIds=function(){return Object.keys(this._textureIdByteLengths)};Wg.prototype.getTextureByteLengthById=function(e){return this._textureIdByteLengths[e]};Wg.prototype.addBatchTexture=function(e){this._batchTextureIdMap.contains(e._id)||this._batchTextureIdMap.set(e._id,e)};var ZP=Wg;var HPn=_(T(),1);var yce=_(qM(),1);var CPn=_(T(),1);var pce={},E_=Uint32Array.BYTES_PER_ELEMENT;pce.parse=function(e,t){t=t??0;let n=new Uint8Array(e),i=new DataView(e);t+=E_;let o=i.getUint32(t,!0);if(o!==1)throw new ae(`Only Point Cloud tile version 1 is supported. Version ${o} is not.`);t+=E_,t+=E_;let r=i.getUint32(t,!0);if(r===0)throw new ae("Feature table must have a byte length greater than zero");t+=E_;let s=i.getUint32(t,!0);t+=E_;let a=i.getUint32(t,!0);t+=E_;let c=i.getUint32(t,!0);t+=E_;let d=qo(n,t,r);t+=r;let u=new Uint8Array(e,t,s);t+=s;let h,p;a>0&&(h=qo(n,t,a),t+=a,c>0&&(p=new Uint8Array(e,t,c),t+=c));let g=new ih(d,u),f=g.getGlobalProperty("POINTS_LENGTH");if(g.featuresLength=f,!l(f))throw new ae("Feature table global property: POINTS_LENGTH must be defined");let y=g.getGlobalProperty("RTC_CENTER",Q.FLOAT,3);l(y)&&(y=m.unpack(y));let x=HYe(g,h);if(x.rtcCenter=y,x.pointsLength=f,!x.hasPositions){let S=KYe(g);x.positions=S,x.hasPositions=x.hasPositions||l(S)}if(!x.hasPositions)throw new ae("Either POSITION or POSITION_QUANTIZED must be defined.");if(!x.hasNormals){let S=QYe(g);x.normals=S,x.hasNormals=x.hasNormals||l(S)}if(!x.hasColors){let S=JYe(g);x.colors=S,x.hasColors=x.hasColors||l(S),x.hasConstantColor=l(x.constantColor),x.isTranslucent=l(S)&&S.isTranslucent}if(!x.hasBatchIds){let S=jYe(g);x.batchIds=S,x.hasBatchIds=x.hasBatchIds||l(S)}if(x.hasBatchIds){let S=g.getGlobalProperty("BATCH_LENGTH");if(!l(S))throw new ae("Global property: BATCH_LENGTH must be defined when BATCH_ID is defined.");x.batchLength=S}return l(p)&&(p=new Uint8Array(p),x.batchTableJson=h,x.batchTableBinary=p),x};function HYe(e,t){let n=e.json,i,o,r,s=l(n.extensions)?n.extensions["3DTILES_draco_point_compression"]:void 0,a=l(t)&&l(t.extensions)?t.extensions["3DTILES_draco_point_compression"]:void 0;l(a)&&(r=a.properties);let c,d,u,h,p;if(l(s)){o=s.properties;let f=s.byteOffset,y=s.byteLength;if(!l(o)||!l(f)||!l(y))throw new ae("Draco properties, byteOffset, and byteLength must be defined");i=e.buffer.slice(f,f+y),c=l(o.POSITION),d=l(o.RGB)||l(o.RGBA),u=l(o.NORMAL),h=l(o.BATCH_ID),p=l(o.RGBA)}let g;return l(i)&&(g={buffer:i,featureTableProperties:o,batchTableProperties:r,properties:St(o,r),dequantizeInShader:!0}),{draco:g,hasPositions:c,hasColors:d,isTranslucent:p,hasNormals:u,hasBatchIds:h}}function KYe(e){let t=e.json,n;if(l(t.POSITION))return n=e.getPropertyArray("POSITION",Q.FLOAT,3),{name:ft.POSITION,semantic:ft.POSITION,typedArray:n,isQuantized:!1,componentDatatype:Q.FLOAT,type:on.VEC3};if(l(t.POSITION_QUANTIZED)){n=e.getPropertyArray("POSITION_QUANTIZED",Q.UNSIGNED_SHORT,3);let i=e.getGlobalProperty("QUANTIZED_VOLUME_SCALE",Q.FLOAT,3);if(!l(i))throw new ae("Global property: QUANTIZED_VOLUME_SCALE must be defined for quantized positions.");let o=65535,r=e.getGlobalProperty("QUANTIZED_VOLUME_OFFSET",Q.FLOAT,3);if(!l(r))throw new ae("Global property: QUANTIZED_VOLUME_OFFSET must be defined for quantized positions.");return{name:ft.POSITION,semantic:ft.POSITION,typedArray:n,isQuantized:!0,componentDatatype:Q.FLOAT,type:on.VEC3,quantizedRange:o,quantizedVolumeOffset:m.unpack(r),quantizedVolumeScale:m.unpack(i),quantizedComponentDatatype:Q.UNSIGNED_SHORT,quantizedType:on.VEC3}}}function JYe(e){let t=e.json,n;if(l(t.RGBA))return n=e.getPropertyArray("RGBA",Q.UNSIGNED_BYTE,4),{name:ft.COLOR,semantic:ft.COLOR,setIndex:0,typedArray:n,componentDatatype:Q.UNSIGNED_BYTE,type:on.VEC4,normalized:!0,isRGB565:!1,isTranslucent:!0};if(l(t.RGB))return n=e.getPropertyArray("RGB",Q.UNSIGNED_BYTE,3),{name:"COLOR",semantic:ft.COLOR,setIndex:0,typedArray:n,componentDatatype:Q.UNSIGNED_BYTE,type:on.VEC3,normalized:!0,isRGB565:!1,isTranslucent:!1};if(l(t.RGB565))return n=e.getPropertyArray("RGB565",Q.UNSIGNED_SHORT,1),{name:"COLOR",semantic:ft.COLOR,setIndex:0,typedArray:n,componentDatatype:Q.FLOAT,type:on.VEC3,normalized:!1,isRGB565:!0,isTranslucent:!1};if(l(t.CONSTANT_RGBA)){let i=e.getGlobalProperty("CONSTANT_RGBA",Q.UNSIGNED_BYTE,4),o=i[3],r=D.fromBytes(i[0],i[1],i[2],o),s=o<255;return{name:ft.COLOR,semantic:ft.COLOR,setIndex:0,constantColor:r,componentDatatype:Q.FLOAT,type:on.VEC4,isQuantized:!1,isTranslucent:s}}}function QYe(e){let t=e.json,n;if(l(t.NORMAL))return n=e.getPropertyArray("NORMAL",Q.FLOAT,3),{name:ft.NORMAL,semantic:ft.NORMAL,typedArray:n,octEncoded:!1,octEncodedZXY:!1,componentDatatype:Q.FLOAT,type:on.VEC3};if(l(t.NORMAL_OCT16P))return n=e.getPropertyArray("NORMAL_OCT16P",Q.UNSIGNED_BYTE,2),{name:ft.NORMAL,semantic:ft.NORMAL,typedArray:n,octEncoded:!0,octEncodedZXY:!1,quantizedRange:(1<<8)-1,quantizedType:on.VEC2,quantizedComponentDatatype:Q.UNSIGNED_BYTE,componentDatatype:Q.FLOAT,type:on.VEC3}}function jYe(e){let t=e.json;if(l(t.BATCH_ID)){let n=e.getPropertyArray("BATCH_ID",Q.UNSIGNED_SHORT,1);return{name:ft.FEATURE_ID,semantic:ft.FEATURE_ID,setIndex:0,typedArray:n,componentDatatype:Q.fromTypedArray(n),type:on.SCALAR}}}var I_=pce;var qYe=Tn.Components,$Ye=Tn.Scene,eze=Tn.Node,tze=Tn.Primitive,nze=Tn.Attribute,bce=Tn.Quantization,ize=Tn.FeatureIdAttribute,oze=Tn.Material,rze=Tn.MetallicRoughness;function Pg(e){e=e??Y.EMPTY_OBJECT;let t=e.arrayBuffer,n=e.byteOffset??0;this._arrayBuffer=t,this._byteOffset=n,this._loadAttributesFor2D=e.loadAttributesFor2D??!1,this._parsedContent=void 0,this._decodePromise=void 0,this._decodedAttributes=void 0,this._promise=void 0,this._error=void 0,this._state=yt.UNLOADED,this._buffers=[],this._components=void 0,this._transform=F.IDENTITY}l(Object.create)&&(Pg.prototype=Object.create(Ki.prototype),Pg.prototype.constructor=Pg);Object.defineProperties(Pg.prototype,{cacheKey:{get:function(){}},components:{get:function(){return this._components}},transform:{get:function(){return this._transform}}});Pg.prototype.load=function(){if(l(this._promise))return this._promise;this._parsedContent=I_.parse(this._arrayBuffer,this._byteOffset),this._state=yt.PROCESSING,this._promise=Promise.resolve(this)};Pg.prototype.process=function(e){if(l(this._error)){let t=this._error;throw this._error=void 0,t}if(this._state===yt.READY)return!0;if(this._state===yt.PROCESSING){if(l(this._decodePromise))return!1;this._decodePromise=sze(this,e.context)}return!1};function sze(e,t){let i=e._parsedContent.draco,o;if(l(i)?o=eb.decodePointCloud(i,t):o=Promise.resolve(),!!l(o))return e._decodePromise=o,o.then(function(r){if(!e.isDestroyed())return l(r)&&aze(e,i,r),yze(e,t),e._state=yt.READY,e}).catch(function(r){e.unload(),e._state=yt.FAILED;let s="Failed to load Draco pnts";e._error=e.getError(s,r)})}function aze(e,t,n){e._state=yt.READY;let i=e._parsedContent,o;if(l(n.POSITION)){if(o={name:"POSITION",semantic:ft.POSITION,typedArray:n.POSITION.array,componentDatatype:Q.FLOAT,type:on.VEC3,isQuantized:!1},l(n.POSITION.data.quantization)){let a=n.POSITION.data.quantization,c=a.range,d=m.fromElements(c,c,c),u=m.unpack(a.minValues),h=(1<<a.quantizationBits)-1;o.isQuantized=!0,o.quantizedRange=h,o.quantizedVolumeOffset=u,o.quantizedVolumeScale=d,o.quantizedComponentDatatype=h<=255?Q.UNSIGNED_BYTE:Q.UNSIGNED_SHORT,o.quantizedType=on.VEC3}i.positions=o}if(l(n.NORMAL)){if(o={name:"NORMAL",semantic:ft.NORMAL,typedArray:n.NORMAL.array,componentDatatype:Q.FLOAT,type:on.VEC3,isQuantized:!1,octEncoded:!1,octEncodedZXY:!1},l(n.NORMAL.data.quantization)){let a=(1<<n.NORMAL.data.quantization.quantizationBits)-1;o.quantizedRange=a,o.octEncoded=!0,o.octEncodedZXY=!0,o.quantizedComponentDatatype=Q.UNSIGNED_BYTE,o.quantizedType=on.VEC2}i.normals=o}if(l(n.RGBA)?i.colors={name:"COLOR",semantic:ft.COLOR,setIndex:0,typedArray:n.RGBA.array,componentDatatype:Q.UNSIGNED_BYTE,type:on.VEC4,normalized:!0,isTranslucent:!0}:l(n.RGB)&&(i.colors={name:"COLOR",semantic:ft.COLOR,setIndex:0,typedArray:n.RGB.array,componentDatatype:Q.UNSIGNED_BYTE,type:on.VEC3,normalized:!0,isTranslucent:!1}),l(n.BATCH_ID)){let a=n.BATCH_ID.array;i.batchIds={name:"_FEATURE_ID",semantic:ft.FEATURE_ID,setIndex:0,typedArray:a,componentDatatype:Q.fromTypedArray(a),type:on.SCALAR}}let r=i.batchTableJson,s=t.batchTableProperties;for(let a in s)if(s.hasOwnProperty(a)){let c=n[a];l(r)||(r={}),i.hasDracoBatchTable=!0;let d=c.data;r[a]={byteOffset:d.byteOffset,type:cze(d.componentsPerAttribute),componentType:lze(d.componentDatatype),typedArray:c.array}}i.batchTableJson=r}function cze(e){switch(e){case 1:return"SCALAR";case 2:return"VEC2";case 3:return"VEC3";case 4:return"VEC4"}}function lze(e){switch(e){case ie.BYTE:return"BYTE";case ie.UNSIGNED_BYTE:return"UNSIGNED_BYTE";case ie.SHORT:return"SHORT";case ie.UNSIGNED_SHORT:return"UNSIGNED_SHORT";case ie.INT:return"INT";case ie.UNSIGNED_INT:return"UNSIGNED_INT";case ie.DOUBLE:return"DOUBLE";case ie.FLOAT:return"FLOAT"}}function GP(e,t,n){let i=t.typedArray,o;if(t.octEncoded&&(o=new bce,o.octEncoded=t.octEncoded,o.octEncodedZXY=t.octEncodedZXY,o.normalizationRange=t.quantizedRange,o.type=t.quantizedType,o.componentDatatype=t.quantizedComponentDatatype),t.isQuantized){o=new bce;let a=t.quantizedRange;o.normalizationRange=a,o.quantizedVolumeOffset=m.ZERO;let c=t.quantizedVolumeScale;o.quantizedVolumeDimensions=c,o.quantizedVolumeStepSize=m.divideByScalar(c,a,new m),o.componentDatatype=t.quantizedComponentDatatype,o.type=t.quantizedType}let r=new nze;if(r.name=t.name,r.semantic=t.semantic,r.setIndex=t.setIndex,r.componentDatatype=t.componentDatatype,r.type=t.type,r.normalized=t.normalized??!1,r.min=t.min,r.max=t.max,r.quantization=o,t.isRGB565&&(i=wn.decodeRGB565(i)),l(t.constantColor)){let a=new Array(4);r.constant=D.pack(t.constantColor,a)}else{let a=xt.createVertexBuffer({typedArray:i,context:n,usage:Me.STATIC_DRAW});a.vertexArrayDestroyable=!1,e._buffers.push(a),r.buffer=a}let s=e._loadAttributesFor2D;return r.semantic===ft.POSITION&&s&&(r.typedArray=i),r}var gce,ik;function dze(e){if(!l(ik)){gce=new yce.default(0),ik=new Array(e);for(let t=0;t<e;++t)ik[t]=gce.random()}return ik}var uze=new m,mze=new m,hze=new m;function fze(e){let t=e.typedArray,n=20,i=t.length/3,o=Math.min(i,n),r=dze(n),s=Number.MAX_VALUE,a=-Number.MAX_VALUE,c=m.fromElements(s,s,s,uze),d=m.fromElements(a,a,a,mze),u,h,p;if(e.isQuantized)c=m.ZERO,d=e.quantizedVolumeScale;else for(u=0;u<o;++u)h=Math.floor(r[u]*i),p=m.unpack(t,h*3,hze),m.minimumByComponent(c,p,c),m.maximumByComponent(d,p,d);e.min=m.clone(c),e.max=m.clone(d)}var pze={name:ft.COLOR,semantic:ft.COLOR,setIndex:0,constantColor:D.DARKGRAY,componentDatatype:Q.FLOAT,type:on.VEC4,isQuantized:!1,isTranslucent:!1};function bze(e,t,n){let i=[],o,r=t.positions;return l(r)&&(fze(r),o=GP(e,r,n),o.count=t.pointsLength,i.push(o)),l(t.normals)&&(o=GP(e,t.normals,n),i.push(o)),l(t.colors)?(o=GP(e,t.colors,n),i.push(o)):(o=GP(e,pze,n),i.push(o)),l(t.batchIds)&&(o=GP(e,t.batchIds,n),i.push(o)),i}function gze(e,t){let n=e.batchLength,i=e.pointsLength,o=e.batchTableBinary,r=!l(e.batchIds);return l(o)||e.hasDracoBatchTable?mb({count:n??i,batchTable:e.batchTableJson,binaryBody:o,parseAsPropertyAttributes:r,customAttributeOutput:t}):new Ys({schema:{},propertyTables:[]})}function yze(e,t){let n=e._parsedContent,i=new rze;i.metallicFactor=0,i.roughnessFactor=.9;let o=new oze;o.metallicRoughness=i;let r=n.colors;l(r)&&r.isTranslucent&&(o.alphaMode=Tf.BLEND);let s=!l(n.normals);o.unlit=s;let a=new tze;if(a.attributes=bze(e,n,t),a.primitiveType=we.POINTS,a.material=o,l(n.batchIds)){let g=new ize;g.propertyTableId=0,g.setIndex=0,g.positionalLabel="featureId_0",a.featureIds.push(g)}let c=new eze;c.index=0,c.primitives=[a];let d=new $Ye;d.nodes=[c],d.upAxis=Po.Z,d.forwardAxis=Po.X;let u=new qYe;u.scene=d,u.nodes=[c];let h=[];u.structuralMetadata=gze(n,h),h.length>0&&xze(e,a,h,t),l(n.rtcCenter)&&(u.transform=F.multiplyByTranslation(u.transform,n.rtcCenter,u.transform));let p=n.positions;l(p)&&p.isQuantized&&(u.transform=F.multiplyByTranslation(u.transform,p.quantizedVolumeOffset,u.transform)),e._components=u,e._parsedContent=void 0,e._arrayBuffer=void 0}function xze(e,t,n,i){let o=t.attributes,r=n.length;for(let s=0;s<r;s++){let a=n[s],c=xt.createVertexBuffer({typedArray:a.typedArray,context:i,usage:Me.STATIC_DRAW});c.vertexArrayDestroyable=!1,e._buffers.push(c),a.buffer=c,a.typedArray=void 0,o.push(a)}t.propertyAttributeIds=[0]}Pg.prototype.unload=function(){let e=this._buffers;for(let t=0;t<e.length;t++)e[t].destroy();e.length=0,this._components=void 0,this._parsedContent=void 0,this._arrayBuffer=void 0};var EP=Pg;var m2n=_(T(),1);var _ze=new m,Tze=new m,Sze=new m,Cze=new F,Vze=new F,Lze=new F,Rze=new he,Zze=new le;function c1(e,t,n,i,o,r,s){if(!e._ready||n.mode===oe.MORPHING)return;let a=Number.MAX_VALUE,c=e.sceneGraph,d=c._runtimeNodes;for(let u=0;u<d.length;u++){let h=d[u],p=h.node,g=F.clone(h.computedTransform,Cze),f=F.clone(c.computedModelMatrix,Vze),y=p.instances;l(y)&&y.transformInWorldSpace&&(f=F.multiplyTransformation(e.modelMatrix,c.components.transform,f),g=F.multiplyTransformation(c.axisCorrectionMatrix,h.computedTransform,g));let x=F.multiplyTransformation(f,g,Lze);n.mode!==oe.SCENE3D&&(x=Pt.basisTo2D(n.mapProjection,x,x));let S=[];if(l(y)){let V=y.attributes[0].count,L=y.attributes[0].componentDatatype,Z=12,E=h.transformsTypedArray;if(!l(E)){let P=h.instancingTransformsBuffer;l(P)&&n.context.webgl2&&(E=Q.createTypedArray(L,V*Z),P.getBufferData(E))}if(l(E))for(let P=0;P<V;P++){let W=P*Z,v=new F(E[W],E[W+1],E[W+2],E[W+3],E[W+4],E[W+5],E[W+6],E[W+7],E[W+8],E[W+9],E[W+10],E[W+11],0,0,0,1);y.transformInWorldSpace?(F.multiplyTransformation(v,g,v),F.multiplyTransformation(f,v,v)):F.multiplyTransformation(v,x,v),S.push(v)}}S.length===0&&S.push(x);let C=h.runtimePrimitives.length;for(let V=0;V<C;V++){let L=h.runtimePrimitives[V],Z=L.primitive;if(l(L.boundingSphere)&&!l(y)){let K=le.transform(L.boundingSphere,x,Zze),te=qn.raySphere(t,K);if(!l(te))continue}let E=Qt.getAttributeBySemantic(Z,ft.POSITION),P=E.byteOffset,W=E.byteStride,v=E.count;if(!l(Z.indices))continue;let A=Z.indices.typedArray;if(!l(A)){let K=Z.indices.buffer,te=Z.indices.count,H=Z.indices.indexDatatype;l(K)&&n.context.webgl2&&(H===Ae.UNSIGNED_BYTE?A=new Uint8Array(te):H===Ae.UNSIGNED_SHORT?A=new Uint16Array(te):H===Ae.UNSIGNED_INT&&(A=new Uint32Array(te)),K.getBufferData(A))}let b=E.typedArray,R=E.componentDatatype,G=E.type,I=E.quantization;l(I)&&(R=E.quantization.componentDatatype,G=E.quantization.type);let w=on.getNumberOfComponents(G),M=Q.getSizeInBytes(R),B=!l(b)&&l(W)&&W!==w*M,k=w,O=0;B&&(k=W/M,O=P/M);let N=v*k;if(!l(b)){let K=E.buffer;l(K)&&n.context.webgl2&&(b=Q.createTypedArray(R,N),K.getBufferData(b,B?0:P,0,N)),I&&E.normalized&&(b=wn.dequantize(b,R,G,v))}if(!l(A)||!l(b))return;r=r??ne.default,i=i??1,o=o??0;let z=A.length;for(let K=0;K<z;K+=3){let te=A[K],H=A[K+1],j=A[K+2];for(let ee of S){let fe=IH(b,te,O,k,I,ee,i,o,r,_ze),Te=IH(b,H,O,k,I,ee,i,o,r,Tze),de=IH(b,j,O,k,I,ee,i,o,r,Sze),xe=qn.rayTriangleParametric(t,fe,Te,de,e.backFaceCulling??!0);l(xe)&&xe<a&&xe>=0&&(a=xe)}}}}if(a!==Number.MAX_VALUE){if(s=pn.getPoint(t,a,s),n.mode!==oe.SCENE3D){m.fromElements(s.y,s.z,s.x,s);let u=n.mapProjection,h=u.ellipsoid,p=u.unproject(s,Rze);h.cartographicToCartesian(p,s)}return s}}function IH(e,t,n,i,o,r,s,a,c,d){let u=n+t*i;if(d.x=e[u],d.y=e[u+1],d.z=e[u+2],l(o))if(o.octEncoded){if(d=wn.octDecodeInRange(d,o.normalizationRange,d),o.octEncodedZXY){let h=d.x;d.x=d.z,d.z=d.y,d.y=h}}else d=m.multiplyComponents(d,o.quantizedVolumeStepSize,d),d=m.add(d,o.quantizedVolumeOffset,d);return d=F.multiplyByPoint(r,d,d),s!==1&&Tr.getPosition(d,c,s,a,d),d}function co(e){e=e??Y.EMPTY_OBJECT,this._loader=e.loader,this._resource=e.resource,this.type=e.type??cr.GLTF,this.modelMatrix=F.clone(e.modelMatrix??F.IDENTITY),this._modelMatrix=F.clone(this.modelMatrix),this._scale=e.scale??1,this._minimumPixelSize=e.minimumPixelSize??0,this._maximumScale=e.maximumScale,this._clampedScale=l(this._maximumScale)?Math.min(this._scale,this._maximumScale):this._scale,this._computedScale=this._clampedScale,this._updateModelMatrix=!1,this.referenceMatrix=void 0,this._iblReferenceFrameMatrix=$.clone($.IDENTITY),this._resourcesLoaded=!1,this._drawCommandsBuilt=!1,this._ready=!1,this._customShader=e.customShader,this._content=e.content,this._texturesLoaded=!1,this._defaultTexture=void 0,this._activeAnimations=new jX(this),this._clampAnimations=e.clampAnimations??!0,this._userAnimationDirty=!1,this._id=e.id,this._idDirty=!1,this._color=D.clone(e.color),this._colorBlendMode=e.colorBlendMode??pc.HIGHLIGHT,this._colorBlendAmount=e.colorBlendAmount??.5;let t=e.silhouetteColor??D.RED;this._silhouetteColor=D.clone(t),this._silhouetteSize=e.silhouetteSize??0,this._silhouetteDirty=!1,this._silhouetteId=void 0,this._cull=e.cull??!0,this._opaquePass=e.opaquePass??Ee.OPAQUE,this._allowPicking=e.allowPicking??!0,this._show=e.show??!0,this._style=void 0,this._styleDirty=!1,this._styleCommandsNeeded=void 0;let n=e.featureIdLabel??"featureId_0";typeof n=="number"&&(n=`featureId_${n}`),this._featureIdLabel=n;let i=e.instanceFeatureIdLabel??"instanceFeatureId_0";typeof i=="number"&&(i=`instanceFeatureId_${i}`),this._instanceFeatureIdLabel=i,this._featureTables=[],this._featureTableId=void 0,this._featureTableIdDirty=!0,this._pipelineResources=[],this._modelResources=[],this._pickIds=[],this._boundingSphere=new le,this._initialRadius=void 0,this._heightReference=e.heightReference??Je.NONE,this._heightDirty=this._heightReference!==Je.NONE,this._removeUpdateHeightCallback=void 0,this._enableVerticalExaggeration=e.enableVerticalExaggeration??!0,this._hasVerticalExaggeration=!1,this._clampedModelMatrix=void 0;let o=e.scene;l(o)&&l(o.terrainProviderChanged)&&(this._terrainProviderChangedCallback=o.terrainProviderChanged.addEventListener(()=>{this._heightDirty=!0})),this._scene=o,this._distanceDisplayCondition=e.distanceDisplayCondition;let r=new Cf(e.pointCloudShading);this._pointCloudShading=r,this._attenuation=r.attenuation,this._pointCloudBackFaceCulling=r.backFaceCulling;let s=e.clippingPlanes;l(s)&&s.owner===void 0?fs.setOwner(s,this,"_clippingPlanes"):this._clippingPlanes=s,this._clippingPlanesState=0,this._clippingPlanesMatrix=F.clone(F.IDENTITY);let a=e.clippingPolygons;l(a)&&a.owner===void 0?qm.setOwner(a,this,"_clippingPolygons"):this._clippingPolygons=a,this._clippingPolygonsState=0,this._lightColor=m.clone(e.lightColor),this._imageBasedLighting=l(e.imageBasedLighting)?e.imageBasedLighting:new jx,this._shouldDestroyImageBasedLighting=!l(e.imageBasedLighting),this._environmentMapManager=void 0;let c=new sb(e.environmentMapOptions);sb.setOwner(c,this,"_environmentMapManager"),this._backFaceCulling=e.backFaceCulling??!0,this._backFaceCullingDirty=!1,this._shadows=e.shadows??_n.ENABLED,this._shadowsDirty=!1,this._debugShowBoundingVolumeDirty=!1,this._debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this._enableDebugWireframe=e.enableDebugWireframe??!1,this._enableShowOutline=e.enableShowOutline??!0,this._debugWireframe=e.debugWireframe??!1,this._debugWireframe===!0&&this._enableDebugWireframe===!1&&this.type===cr.GLTF&&_t("model-debug-wireframe-ignored","enableDebugWireframe must be set to true in Model.fromGltf, otherwise debugWireframe will be ignored.");let d=e.credit;typeof d=="string"&&(d=new Ct(d)),this._credits=[],this._credit=d,this._resourceCredits=[],this._gltfCredits=[],this._showCreditsOnScreen=e.showCreditsOnScreen??!1,this._showCreditsOnScreenDirty=!0,this._splitDirection=e.splitDirection??vr.NONE,this._enableShowOutline=e.enableShowOutline??!0,this.showOutline=e.showOutline??!0,this.outlineColor=e.outlineColor??D.BLACK,this._classificationType=e.classificationType,this._statistics=new ZP,this._sceneMode=void 0,this._projectTo2D=e.projectTo2D??!1,this._enablePick=e.enablePick??!1,this._fogRenderable=void 0,this._skipLevelOfDetail=!1,this._ignoreCommands=e.ignoreCommands??!1,this._errorEvent=new be,this._readyEvent=new be,this._texturesReadyEvent=new be,this._sceneGraph=void 0,this._nodesByName={},this.pickObject=e.pickObject}function XH(e,t){if(e._errorEvent.numberOfListeners>0){e._errorEvent.raiseEvent(t);return}console.log(t)}function Gze(e,t){let n=e._featureTables,i=t.propertyTables,o=i.length;for(let r=0;r<o;r++){let s=i[r],a=new eW({model:e,propertyTable:s});n.push(a)}return n}function Eze(e,t){let n=t._featureIdLabel,i=t._instanceFeatureIdLabel,o,r,s,a;for(o=0;o<e.nodes.length;o++)if(a=e.nodes[o],l(a.instances)&&(s=Qt.getFeatureIdsByLabel(a.instances.featureIds,i),l(s)&&l(s.propertyTableId)))return s.propertyTableId;for(o=0;o<e.nodes.length;o++)for(a=e.nodes[o],r=0;r<a.primitives.length;r++){let c=a.primitives[r],d=Qt.getFeatureIdsByLabel(c.featureIds,n);if(l(d))return d.propertyTableId}if(t._featureTables.length===1)return 0}function vH(e,t){if(!l(e)&&!l(t))return!1;if(l(e)!==l(t))return!0;let n=e.alpha,i=t.alpha;return Math.floor(n)!==Math.floor(i)||Math.ceil(n)!==Math.ceil(i)}Object.defineProperties(co.prototype,{ready:{get:function(){return this._ready}},errorEvent:{get:function(){return this._errorEvent}},readyEvent:{get:function(){return this._readyEvent}},incrementallyLoadTextures:{get:function(){return this._loader.incrementallyLoadTextures??!1}},texturesReadyEvent:{get:function(){return this._texturesReadyEvent}},loader:{get:function(){return this._loader}},statistics:{get:function(){return this._statistics}},activeAnimations:{get:function(){return this._activeAnimations}},clampAnimations:{get:function(){return this._clampAnimations},set:function(e){this._clampAnimations=e}},cull:{get:function(){return this._cull}},opaquePass:{get:function(){return this._opaquePass}},pointCloudShading:{get:function(){return this._pointCloudShading},set:function(e){e!==this._pointCloudShading&&this.resetDrawCommands(),this._pointCloudShading=e}},customShader:{get:function(){return this._customShader},set:function(e){e!==this._customShader&&this.resetDrawCommands(),this._customShader=e}},sceneGraph:{get:function(){return this._sceneGraph}},content:{get:function(){return this._content}},heightReference:{get:function(){return this._heightReference},set:function(e){e!==this._heightReference&&(this._heightDirty=!0),this._heightReference=e}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){this._distanceDisplayCondition=wt.clone(e,this._distanceDisplayCondition)}},structuralMetadata:{get:function(){return this._sceneGraph.components.structuralMetadata}},featureTableId:{get:function(){return this._featureTableId},set:function(e){this._featureTableId=e}},featureTables:{get:function(){return this._featureTables},set:function(e){this._featureTables=e}},id:{get:function(){return this._id},set:function(e){e!==this._id&&(this._idDirty=!0),this._id=e}},allowPicking:{get:function(){return this._allowPicking}},style:{get:function(){return this._style},set:function(e){this._style=e,this._styleDirty=!0}},color:{get:function(){return this._color},set:function(e){vH(e,this._color)&&this.resetDrawCommands(),this._color=D.clone(e,this._color)}},colorBlendMode:{get:function(){return this._colorBlendMode},set:function(e){this._colorBlendMode=e}},colorBlendAmount:{get:function(){return this._colorBlendAmount},set:function(e){this._colorBlendAmount=e}},silhouetteColor:{get:function(){return this._silhouetteColor},set:function(e){if(!D.equals(e,this._silhouetteColor)){let t=vH(e,this._silhouetteColor);this._silhouetteDirty=this._silhouetteDirty||t}this._silhouetteColor=D.clone(e,this._silhouetteColor)}},silhouetteSize:{get:function(){return this._silhouetteSize},set:function(e){if(e!==this._silhouetteSize){let t=this._silhouetteSize,n=e>0&&t===0||e===0&&t>0;this._silhouetteDirty=this._silhouetteDirty||n,this._backFaceCullingDirty=this._backFaceCullingDirty||n}this._silhouetteSize=e}},boundingSphere:{get:function(){let e=l(this._clampedModelMatrix)?this._clampedModelMatrix:this.modelMatrix;return Tce(this,e),this._boundingSphere}},debugShowBoundingVolume:{get:function(){return this._debugShowBoundingVolume},set:function(e){this._debugShowBoundingVolume!==e&&(this._debugShowBoundingVolumeDirty=!0),this._debugShowBoundingVolume=e}},debugWireframe:{get:function(){return this._debugWireframe},set:function(e){this._debugWireframe!==e&&this.resetDrawCommands(),this._debugWireframe=e,this._debugWireframe===!0&&this._enableDebugWireframe===!1&&this.type===cr.GLTF&&_t("model-debug-wireframe-ignored","enableDebugWireframe must be set to true in Model.fromGltfAsync, otherwise debugWireframe will be ignored.")}},show:{get:function(){return this._show},set:function(e){this._show=e}},featureIdLabel:{get:function(){return this._featureIdLabel},set:function(e){typeof e=="number"&&(e=`featureId_${e}`),e!==this._featureIdLabel&&(this._featureTableIdDirty=!0),this._featureIdLabel=e}},instanceFeatureIdLabel:{get:function(){return this._instanceFeatureIdLabel},set:function(e){typeof e=="number"&&(e=`instanceFeatureId_${e}`),e!==this._instanceFeatureIdLabel&&(this._featureTableIdDirty=!0),this._instanceFeatureIdLabel=e}},clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){e!==this._clippingPlanes&&(fs.setOwner(e,this,"_clippingPlanes"),this.resetDrawCommands())}},clippingPolygons:{get:function(){return this._clippingPolygons},set:function(e){e!==this._clippingPolygons&&(qm.setOwner(e,this,"_clippingPolygons"),this.resetDrawCommands())}},enableVerticalExaggeration:{get:function(){return this._enableVerticalExaggeration},set:function(e){e!==this._enableVerticalExaggeration&&this.resetDrawCommands(),this._enableVerticalExaggeration=e}},hasVerticalExaggeration:{get:function(){return this._hasVerticalExaggeration}},lightColor:{get:function(){return this._lightColor},set:function(e){l(e)!==l(this._lightColor)&&this.resetDrawCommands(),this._lightColor=m.clone(e,this._lightColor)}},imageBasedLighting:{get:function(){return this._imageBasedLighting},set:function(e){e!==this._imageBasedLighting&&(this._shouldDestroyImageBasedLighting&&!this._imageBasedLighting.isDestroyed()&&this._imageBasedLighting.destroy(),this._imageBasedLighting=e,this._shouldDestroyImageBasedLighting=!1,this.resetDrawCommands())}},environmentMapManager:{get:function(){return this._environmentMapManager},set:function(e){e!==this.environmentMapManager&&(sb.setOwner(e,this,"_environmentMapManager"),this.resetDrawCommands())}},backFaceCulling:{get:function(){return this._backFaceCulling},set:function(e){e!==this._backFaceCulling&&(this._backFaceCullingDirty=!0),this._backFaceCulling=e}},scale:{get:function(){return this._scale},set:function(e){e!==this._scale&&(this._updateModelMatrix=!0),this._scale=e}},computedScale:{get:function(){return this._computedScale}},minimumPixelSize:{get:function(){return this._minimumPixelSize},set:function(e){e!==this._minimumPixelSize&&(this._updateModelMatrix=!0),this._minimumPixelSize=e}},maximumScale:{get:function(){return this._maximumScale},set:function(e){e!==this._maximumScale&&(this._updateModelMatrix=!0),this._maximumScale=e}},shadows:{get:function(){return this._shadows},set:function(e){e!==this._shadows&&(this._shadowsDirty=!0),this._shadows=e}},credit:{get:function(){return this._credit}},showCreditsOnScreen:{get:function(){return this._showCreditsOnScreen},set:function(e){this._showCreditsOnScreen!==e&&(this._showCreditsOnScreenDirty=!0),this._showCreditsOnScreen=e}},splitDirection:{get:function(){return this._splitDirection},set:function(e){this._splitDirection!==e&&this.resetDrawCommands(),this._splitDirection=e}},classificationType:{get:function(){return this._classificationType}},pickIds:{get:function(){return this._pickIds}},styleCommandsNeeded:{get:function(){return this._styleCommandsNeeded}}});co.prototype.getNode=function(e){return this._nodesByName[e]};co.prototype.setArticulationStage=function(e,t){this._sceneGraph.setArticulationStage(e,t)};co.prototype.applyArticulations=function(){this._sceneGraph.applyArticulations()};co.prototype.getExtension=function(e){return this._loader.components.extensions[e]};co.prototype.makeStyleDirty=function(){this._styleDirty=!0};co.prototype.resetDrawCommands=function(){this._drawCommandsBuilt=!1};var Ize=new F,Xze=new $,Wze=new F;co.prototype.update=function(e){let t=!1;try{t=Pze(this,e)}catch(n){if(!this._loader.incrementallyLoadTextures&&n.name==="TextureError")XH(this,n);else{let i=Qt.getError("model",this._resource,n);XH(this,i)}}if(vze(this,e),wze(this,e),Fze(this,e),!this._resourcesLoaded&&t){this._resourcesLoaded=!0;let n=this._loader.components;if(!l(n)){if(this._loader.isUnloaded())return;let r=Qt.getError("model",this._resource,new ae("Failed to load model."));XH(r),this._rejectLoad=this._rejectLoad&&this._rejectLoad(r)}let i=n.structuralMetadata;l(i)&&i.propertyTableCount>0&&Gze(this,i);let o=new RP({model:this,modelComponents:n});this._sceneGraph=o,this._gltfCredits=o.components.asset.credits}if(!(!this._resourcesLoaded||e.mode===oe.MORPHING)){if(Aze(this),Mze(this),Nze(this,e),kze(this),Uze(this,e),Dze(this,e),Bze(this,e),Oze(this,e),Yze(this,e),zze(this,e),Hze(this,e),this._defaultTexture=e.context.defaultTexture,Kze(this,e),Jze(this,e),Qze(this),jze(this,e),tHe(this,e),!this._ready){e.afterRender.push(()=>{this._ready=!0,this._readyEvent.raiseEvent(this)});return}this._loader.incrementallyLoadTextures&&!this._texturesLoaded&&this._loader.texturesLoaded&&(this.resetDrawCommands(),this._texturesLoaded=!0,this._texturesReadyEvent.raiseEvent(this)),$ze(this),nHe(this,e),iHe(this),oHe(this,e)}};function Pze(e,t){return!e._resourcesLoaded||e._loader.incrementallyLoadTextures&&!e._texturesLoaded?(t.afterRender.push(()=>!0),e._loader.process(t)):!0}function vze(e,t){l(e._customShader)&&e._customShader.update(t)}function wze(e,t){let n=e._environmentMapManager,i=t.passes.pick||t.passes.pickVoxel;e._ready&&n.owner===e&&!i&&(n.position=e._boundingSphere.center,n.shouldUpdate=!l(e._imageBasedLighting.sphericalHarmonicCoefficients)||!l(e._imageBasedLighting.specularEnvironmentMaps),n.update(t),n.shouldRegenerateShaders&&e.resetDrawCommands())}function Fze(e,t){e._imageBasedLighting.update(t),e._imageBasedLighting.shouldRegenerateShaders&&e.resetDrawCommands()}function Aze(e){if(!e._featureTableIdDirty)return;e._featureTableIdDirty=!1;let t=e._sceneGraph.components,n=t.structuralMetadata;l(n)&&n.propertyTableCount>0&&(e.featureTableId=Eze(t,e),e._styleDirty=!0,e.resetDrawCommands())}function Mze(e){e._styleDirty&&(e.applyStyle(e._style),e._styleDirty=!1)}function Nze(e,t){let n=e._featureTables,i=n.length,o=!1;for(let r=0;r<i;r++)n[r].update(t),n[r].styleCommandsNeededDirty&&(o=!0);o&&_ce(e)}function _ce(e){let t=e.featureTables[e.featureTableId];e._styleCommandsNeeded=rh.getStyleCommandsNeeded(t.featuresLength,t.batchTexture.translucentFeaturesLength)}function kze(e){let t=e.pointCloudShading;t.attenuation!==e._attenuation&&(e.resetDrawCommands(),e._attenuation=t.attenuation),t.backFaceCulling!==e._pointCloudBackFaceCulling&&(e.resetDrawCommands(),e._pointCloudBackFaceCulling=t.backFaceCulling)}function Uze(e,t){e._silhouetteDirty&&(Sce(t)&&e.resetDrawCommands(),e._silhouetteDirty=!1)}function Dze(e,t){let n=e.hasSkipLevelOfDetail(t);n!==e._skipLevelOfDetail&&(e.resetDrawCommands(),e._skipLevelOfDetail=n)}function Bze(e,t){let n=0;e.isClippingEnabled()&&(e._clippingPlanes.owner===e&&e._clippingPlanes.update(t),n=e._clippingPlanes.clippingPlanesState),n!==e._clippingPlanesState&&(e.resetDrawCommands(),e._clippingPlanesState=n)}function Oze(e,t){let n=0;e.isClippingPolygonsEnabled()&&(e._clippingPolygons.owner===e&&(e._clippingPolygons.update(t),e._clippingPolygons.queueCommands(t)),n=e._clippingPolygons.clippingPolygonsState),n!==e._clippingPolygonsState&&(e.resetDrawCommands(),e._clippingPolygonsState=n)}function Yze(e,t){t.mode!==e._sceneMode&&(e._projectTo2D?e.resetDrawCommands():e._updateModelMatrix=!0,e._sceneMode=t.mode)}function zze(e,t){let n=t.fog.enabled&&t.fog.renderable;n!==e._fogRenderable&&(e.resetDrawCommands(),e._fogRenderable=n)}function Hze(e,t){if(e.enableVerticalExaggeration){let n=t.verticalExaggeration!==1;e.hasVerticalExaggeration!==n&&(e.resetDrawCommands(),e._hasVerticalExaggeration=n)}else e.hasVerticalExaggeration&&(e.resetDrawCommands(),e._hasVerticalExaggeration=!1)}function Kze(e,t){e._drawCommandsBuilt||(e.destroyPipelineResources(),e._sceneGraph.buildDrawCommands(t),e._drawCommandsBuilt=!0)}function Jze(e,t){F.equals(e.modelMatrix,e._modelMatrix)||(e._updateModelMatrix=!0,e._modelMatrix=F.clone(e.modelMatrix,e._modelMatrix))}var vg=new m,WH=new he;function Qze(e){if(!e._updateModelMatrix&&!e._heightDirty&&e._minimumPixelSize===0)return;l(e._removeUpdateHeightCallback)&&(e._removeUpdateHeightCallback(),e._removeUpdateHeightCallback=void 0);let t=e._scene;if(!l(t)||e.heightReference===Je.NONE){e._clampedModelMatrix=void 0;return}let n=t.ellipsoid??ne.default,i=e.modelMatrix;vg.x=i[12],vg.y=i[13],vg.z=i[14];let o=n.cartesianToCartographic(vg);l(e._clampedModelMatrix)||(e._clampedModelMatrix=F.clone(i,new F)),e._removeUpdateHeightCallback=t.updateHeight(o,xce(e,n,o),e.heightReference);let r=t.getHeight(o,e.heightReference);if(l(r)){let s=xce(e,n,o);he.clone(o,WH),WH.height=r,s(WH)}e._heightDirty=!1,e._updateModelMatrix=!0}function jze(e,t){if(!e._updateModelMatrix&&e._minimumPixelSize===0)return;let n=l(e._clampedModelMatrix)?e._clampedModelMatrix:e.modelMatrix;Tce(e,n),qze(e,n,t)}function Tce(e,t){e._clampedScale=l(e._maximumScale)?Math.min(e._scale,e._maximumScale):e._scale,e._boundingSphere.center=m.multiplyByScalar(e._sceneGraph.boundingSphere.center,e._clampedScale,e._boundingSphere.center),e._boundingSphere.radius=e._initialRadius*e._clampedScale,e._boundingSphere=le.transform(e._boundingSphere,t,e._boundingSphere)}function qze(e,t,n){let i=e.scale;if(e.minimumPixelSize!==0&&!e._projectTo2D){let o=n.context,r=Math.max(o.drawingBufferWidth,o.drawingBufferHeight);F.getTranslation(t,vg),e._sceneMode!==oe.SCENE3D&&Ui.computeActualEllipsoidPosition(n,vg,vg);let s=e._boundingSphere.radius,a=rHe(vg,s,n),c=1/a;Math.min(c*(2*s),r)<e.minimumPixelSize&&(i=e.minimumPixelSize*a/(2*e._initialRadius))}e._computedScale=l(e.maximumScale)?Math.min(e.maximumScale,i):i}function $ze(e){if(!e._idDirty)return;e._idDirty=!1;let t=e._id,n=e._pickIds,i=n.length;for(let o=0;o<i;++o)n[o].object.id=t}var eHe=new $(1,0,0,0,0,1,0,-1,0);function tHe(e,t){let n=l(e._clampedModelMatrix)?e._clampedModelMatrix:e.modelMatrix,i=e.referenceMatrix??n,o=t.context,r=Xze,s=Ize;if(s=F.multiply(o.uniformState.view3D,i,s),r=F.getRotation(s,r),r=$.transpose(r,r),e._iblReferenceFrameMatrix=$.multiply(eHe,r,e._iblReferenceFrameMatrix),e.isClippingEnabled()){let a=Wze;a=F.multiply(o.uniformState.view3D,i,a),a=F.multiply(a,e._clippingPlanes.modelMatrix,a),e._clippingPlanesMatrix=F.inverseTranspose(a,e._clippingPlanesMatrix)}}function nHe(e,t){let n=e._sceneGraph;if(e._updateModelMatrix||e._minimumPixelSize!==0){let o=l(e._clampedModelMatrix)?e._clampedModelMatrix:e.modelMatrix;n.updateModelMatrix(o,t),e._updateModelMatrix=!1}e._backFaceCullingDirty&&(n.updateBackFaceCulling(e._backFaceCulling),e._backFaceCullingDirty=!1),e._shadowsDirty&&(n.updateShadows(e._shadows),e._shadowsDirty=!1),e._debugShowBoundingVolumeDirty&&(n.updateShowBoundingVolume(e._debugShowBoundingVolume),e._debugShowBoundingVolumeDirty=!1);let i=!1;l(e.classificationType)||(i=e._userAnimationDirty||e._activeAnimations.update(t)),n.update(t,i),e._userAnimationDirty=!1}function iHe(e){if(!e._showCreditsOnScreenDirty)return;e._showCreditsOnScreenDirty=!1,e._credits.length=0;let t=e._showCreditsOnScreen;if(l(e._credit)){let s=Ct.clone(e._credit);s.showOnScreen=s.showOnScreen||t,e._credits.push(s)}let n=e._resourceCredits,i=n.length;for(let s=0;s<i;s++){let a=Ct.clone(n[s]);a.showOnScreen=a.showOnScreen||t,e._credits.push(a)}let o=e._gltfCredits,r=o.length;for(let s=0;s<r;s++){let a=Ct.clone(o[s]);a.showOnScreen=a.showOnScreen||t,e._credits.push(a)}}function oHe(e,t){let n=aHe(e,t),i=e.isInvisible(),o=e.hasSilhouette(t),r=e._show&&e._computedScale!==0&&n&&(!i||o),s=t.passes,a=s.render||s.pick&&e.allowPicking;r&&!e._ignoreCommands&&a&&(cHe(e,t),e._sceneGraph.pushDrawCommands(t))}var PH=new le;function rHe(e,t,n){return PH.center=e,PH.radius=t,n.camera.getPixelSize(PH,n.context.drawingBufferWidth,n.context.drawingBufferHeight)}var ok=new m;function xce(e,t,n){return function(i){sC(e.heightReference)&&(i.height+=n.height),t.cartographicToCartesian(i,ok);let o=e._clampedModelMatrix;F.clone(e.modelMatrix,o),o[12]=ok.x,o[13]=ok.y,o[14]=ok.z,e._heightDirty=!0}}var sHe=new m;function aHe(e,t){let n=e.distanceDisplayCondition;if(!l(n))return!0;let i=n.near*n.near,o=n.far*n.far,r;if(t.mode===oe.SCENE2D){let a=(t.camera.frustum.right-t.camera.frustum.left)*.5;r=a*a}else{let s=F.getTranslation(e.modelMatrix,sHe);Ui.computeActualEllipsoidPosition(t,s,s),r=m.distanceSquared(s,t.camera.positionWC)}return r>=i&&r<=o}function cHe(e,t){let n=t.creditDisplay,i=e._credits,o=i.length;for(let r=0;r<o;r++)n.addCreditToNextFrame(i[r])}co.prototype.isTranslucent=function(){let e=this.color;return l(e)&&e.alpha>0&&e.alpha<1};co.prototype.isInvisible=function(){let e=this.color;return l(e)&&e.alpha===0};function Sce(e){return e.context.stencilBuffer}co.prototype.hasSilhouette=function(e){return Sce(e)&&this._silhouetteSize>0&&this._silhouetteColor.alpha>0&&!l(this._classificationType)};co.prototype.hasSkipLevelOfDetail=function(e){if(!cr.is3DTiles(this.type))return!1;let t=e.context.stencilBuffer,n=this._content.tileset;return t&&n.isSkippingLevelOfDetail};co.prototype.isClippingEnabled=function(){let e=this._clippingPlanes;return l(e)&&e.enabled&&e.length!==0};co.prototype.pick=function(e,t,n,i,o){return c1(this,e,t,n,i,o)};co.prototype.isClippingPolygonsEnabled=function(){let e=this._clippingPolygons;return l(e)&&e.enabled&&e.length!==0};co.prototype.isDestroyed=function(){return!1};co.prototype.destroy=function(){let e=this._loader;l(e)&&e.destroy();let t=this._featureTables;if(l(t)){let r=t.length;for(let s=0;s<r;s++)t[s].destroy()}this.destroyPipelineResources(),this.destroyModelResources(),l(this._removeUpdateHeightCallback)&&(this._removeUpdateHeightCallback(),this._removeUpdateHeightCallback=void 0),l(this._terrainProviderChangedCallback)&&(this._terrainProviderChangedCallback(),this._terrainProviderChangedCallback=void 0);let n=this._clippingPlanes;l(n)&&!n.isDestroyed()&&n.owner===this&&n.destroy(),this._clippingPlanes=void 0;let i=this._clippingPolygons;l(i)&&!i.isDestroyed()&&i.owner===this&&i.destroy(),this._clippingPolygons=void 0,this._shouldDestroyImageBasedLighting&&!this._imageBasedLighting.isDestroyed()&&this._imageBasedLighting.destroy(),this._imageBasedLighting=void 0;let o=this._environmentMapManager;!o.isDestroyed()&&o.owner===this&&o.destroy(),this._environmentMapManager=void 0,me(this)};co.prototype.destroyPipelineResources=function(){let e=this._pipelineResources;for(let t=0;t<e.length;t++)e[t].destroy();this._pipelineResources.length=0,this._pickIds.length=0};co.prototype.destroyModelResources=function(){let e=this._modelResources;for(let t=0;t<e.length;t++)e[t].destroy();this._modelResources.length=0};co.fromGltfAsync=async function(e){e=e??Y.EMPTY_OBJECT;let t=e.url??e.gltf,n={releaseGltfJson:e.releaseGltfJson,asynchronous:e.asynchronous,incrementallyLoadTextures:e.incrementallyLoadTextures,upAxis:e.upAxis,forwardAxis:e.forwardAxis,loadAttributesFor2D:e.projectTo2D,enablePick:e.enablePick,loadIndicesForWireframe:e.enableDebugWireframe,loadPrimitiveOutline:e.enableShowOutline,loadForClassification:l(e.classificationType)},i=e.basePath??"",o=Ze.createIfNeeded(i);l(t.asset)?(n.gltfJson=t,n.baseResource=o,n.gltfResource=o):t instanceof Uint8Array?(n.typedArray=t,n.baseResource=o,n.gltfResource=o):n.gltfResource=Ze.createIfNeeded(t);let r=new nh(n),a=l(e.content)?cr.TILE_GLTF:cr.GLTF,c=n.gltfResource,d=IP(r,a,e);d.resource=c,d.environmentMapOptions=e.environmentMapOptions;try{await r.load()}catch(g){throw r.destroy(),Qt.getError("model",c,g)}let u=e.gltfCallback;l(u)&&u(r.gltfJson);let h=new co(d),p=h._resource.credits;if(l(p)){let g=p.length;for(let f=0;f<g;f++)h._resourceCredits.push(Ct.clone(p[f]))}return h};co.fromB3dm=async function(e){let t={b3dmResource:e.resource,arrayBuffer:e.arrayBuffer,byteOffset:e.byteOffset,releaseGltfJson:e.releaseGltfJson,asynchronous:e.asynchronous,incrementallyLoadTextures:e.incrementallyLoadTextures,upAxis:e.upAxis,forwardAxis:e.forwardAxis,loadAttributesFor2D:e.projectTo2D,enablePick:e.enablePick,loadIndicesForWireframe:e.enableDebugWireframe,loadPrimitiveOutline:e.enableShowOutline,loadForClassification:l(e.classificationType)},n=new DX(t);try{await n.load();let i=IP(n,cr.TILE_B3DM,e);return new co(i)}catch(i){throw n.destroy(),i}};co.fromPnts=async function(e){let t={arrayBuffer:e.arrayBuffer,byteOffset:e.byteOffset,loadAttributesFor2D:e.projectTo2D},n=new EP(t);try{await n.load();let i=IP(n,cr.TILE_PNTS,e);return new co(i)}catch(i){throw n.destroy(),i}};co.fromI3dm=async function(e){let t={i3dmResource:e.resource,arrayBuffer:e.arrayBuffer,byteOffset:e.byteOffset,releaseGltfJson:e.releaseGltfJson,asynchronous:e.asynchronous,incrementallyLoadTextures:e.incrementallyLoadTextures,upAxis:e.upAxis,forwardAxis:e.forwardAxis,loadAttributesFor2D:e.projectTo2D,enablePick:e.enablePick,loadIndicesForWireframe:e.enableDebugWireframe,loadPrimitiveOutline:e.enableShowOutline},n=new YX(t);try{await n.load();let i=IP(n,cr.TILE_I3DM,e);return new co(i)}catch(i){throw n.destroy(),i}};co.fromGeoJson=async function(e){let t={geoJson:e.geoJson},n=new BX(t),i=IP(n,cr.TILE_GEOJSON,e);return new co(i)};var lHe=new D;co.prototype.applyColorAndShow=function(e){let t=D.clone(this._color,lHe),n=l(e)&&l(e.color),i=l(e)&&l(e.show);this._color=n?e.color.evaluateColor(void 0,this._color):D.clone(D.WHITE,this._color),this._show=i?e.show.evaluate(void 0):!0,vH(t,this._color)&&this.resetDrawCommands()};co.prototype.applyStyle=function(e){let t=this.type===cr.TILE_PNTS,n=l(this.featureTableId)&&this.featureTables[this.featureTableId].featuresLength>0,i=l(this.structuralMetadata)?this.structuralMetadata.propertyAttributes:void 0,o=l(i)&&l(i[0]);if(t&&(!n||o)){this.resetDrawCommands();return}n?(this.featureTables[this.featureTableId].applyStyle(e),_ce(this,e)):(this.applyColorAndShow(e),this._styleCommandsNeeded=void 0)};function IP(e,t,n){return{loader:e,type:t,resource:n.resource,show:n.show,modelMatrix:n.modelMatrix,scale:n.scale,enableVerticalExaggeration:n.enableVerticalExaggeration,minimumPixelSize:n.minimumPixelSize,maximumScale:n.maximumScale,id:n.id,allowPicking:n.allowPicking,clampAnimations:n.clampAnimations,shadows:n.shadows,debugShowBoundingVolume:n.debugShowBoundingVolume,enableDebugWireframe:n.enableDebugWireframe,debugWireframe:n.debugWireframe,cull:n.cull,opaquePass:n.opaquePass,customShader:n.customShader,content:n.content,heightReference:n.heightReference,scene:n.scene,distanceDisplayCondition:n.distanceDisplayCondition,color:n.color,colorBlendAmount:n.colorBlendAmount,colorBlendMode:n.colorBlendMode,silhouetteColor:n.silhouetteColor,silhouetteSize:n.silhouetteSize,enableShowOutline:n.enableShowOutline,showOutline:n.showOutline,outlineColor:n.outlineColor,clippingPlanes:n.clippingPlanes,clippingPolygons:n.clippingPolygons,lightColor:n.lightColor,imageBasedLighting:n.imageBasedLighting,backFaceCulling:n.backFaceCulling,credit:n.credit,showCreditsOnScreen:n.showCreditsOnScreen,splitDirection:n.splitDirection,projectTo2D:n.projectTo2D,enablePick:n.enablePick,featureIdLabel:n.featureIdLabel,instanceFeatureIdLabel:n.instanceFeatureIdLabel,pointCloudShading:n.pointCloudShading,classificationType:n.classificationType,pickObject:n.pickObject}}var sh=co;function Nr(e,t,n){this._tileset=e,this._tile=t,this._resource=n,this._model=void 0,this._metadata=void 0,this._group=void 0,this._ready=!1}Object.defineProperties(Nr.prototype,{featuresLength:{get:function(){let e=this._model,t=e.featureTables,n=e.featureTableId;return l(t)&&l(t[n])?t[n].featuresLength:0}},pointsLength:{get:function(){return this._model.statistics.pointsLength}},trianglesLength:{get:function(){return this._model.statistics.trianglesLength}},geometryByteLength:{get:function(){return this._model.statistics.geometryByteLength}},texturesByteLength:{get:function(){return this._model.statistics.texturesByteLength}},batchTableByteLength:{get:function(){let e=this._model.statistics;return e.propertyTablesByteLength+e.batchTexturesByteLength}},innerContents:{get:function(){}},ready:{get:function(){return this._ready}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){return this._resource.getUrlComponent(!0)}},batchTable:{get:function(){let e=this._model,t=e.featureTables,n=e.featureTableId;if(l(t)&&l(t[n]))return t[n]}},metadata:{get:function(){return this._metadata},set:function(e){this._metadata=e}},group:{get:function(){return this._group},set:function(e){this._group=e}}});Nr.prototype.getTextureIds=function(){return this._model.statistics.getTextureIds()};Nr.prototype.getTextureByteLengthById=function(e){return this._model.statistics.getTextureByteLengthById(e)};Nr.prototype.getExtension=function(e){return this._model.getExtension(e)};Nr.prototype.getFeature=function(e){let t=this._model,n=t.featureTableId;return t.featureTables[n].getFeature(e)};Nr.prototype.hasProperty=function(e,t){let n=this._model,i=n.featureTableId;return l(i)?n.featureTables[i].hasProperty(e,t):!1};Nr.prototype.applyDebugSettings=function(e,t){t=e?t:D.WHITE,this.featuresLength===0?this._model.color=t:l(this.batchTable)&&this.batchTable.setAllColor(t)};Nr.prototype.applyStyle=function(e){this._model.style=e};Nr.prototype.update=function(e,t){let n=this._model,i=this._tile;n.colorBlendAmount=e.colorBlendAmount,n.colorBlendMode=e.colorBlendMode,n.modelMatrix=i.computedTransform,n.customShader=e.customShader,n.featureIdLabel=e.featureIdLabel,n.instanceFeatureIdLabel=e.instanceFeatureIdLabel,n.lightColor=e.lightColor,n.imageBasedLighting=e.imageBasedLighting,n.backFaceCulling=e.backFaceCulling,n.shadows=e.shadows,n.showCreditsOnScreen=e.showCreditsOnScreen,n.splitDirection=e.splitDirection,n.debugWireframe=e.debugWireframe,n.showOutline=e.showOutline,n.outlineColor=e.outlineColor,n.pointCloudShading=e.pointCloudShading;let o=e.clippingPlanes;n.referenceMatrix=e.clippingPlanesOriginMatrix,l(o)&&i.clippingPlanesDirty&&(n._clippingPlanes=o.enabled&&i._isClipped?o:void 0);let r=e.environmentMapManager;n.environmentMapManager!==o&&(n._environmentMapManager=r),l(o)&&l(n._clippingPlanes)&&n._clippingPlanes!==o&&(n._clippingPlanes=o,n._clippingPlanesState=0);let s=e.clippingPolygons;l(s)&&i.clippingPolygonsDirty&&(n._clippingPolygons=s.enabled&&i._isClippedByPolygon?s:void 0),l(s)&&l(n._clippingPolygons)&&n._clippingPolygons!==s&&(n._clippingPolygons=s,n._clippingPolygonsState=0),n.update(t),!this._ready&&n.ready&&(n.activeAnimations.addAll({loop:Nl.REPEAT}),this._ready=!0)};Nr.prototype.isDestroyed=function(){return!1};Nr.prototype.destroy=function(){return this._model=this._model&&this._model.destroy(),me(this)};Nr.fromGltf=async function(e,t,n,i){let o=new Nr(e,t,n),s=XP(e,t,o,{gltf:i,basePath:n}),a=e.vectorClassificationOnly?void 0:e.classificationType;s.classificationType=a;let c=await sh.fromGltfAsync(s);return o._model=c,o};Nr.fromB3dm=async function(e,t,n,i,o){let r=new Nr(e,t,n),a=XP(e,t,r,{arrayBuffer:i,byteOffset:o,resource:n}),c=e.vectorClassificationOnly?void 0:e.classificationType;a.classificationType=c;let d=await sh.fromB3dm(a);return r._model=d,r};Nr.fromI3dm=async function(e,t,n,i,o){let r=new Nr(e,t,n),a=XP(e,t,r,{arrayBuffer:i,byteOffset:o,resource:n}),c=await sh.fromI3dm(a);return r._model=c,r};Nr.fromPnts=async function(e,t,n,i,o){let r=new Nr(e,t,n),a=XP(e,t,r,{arrayBuffer:i,byteOffset:o,resource:n}),c=await sh.fromPnts(a);return r._model=c,r};Nr.fromGeoJson=async function(e,t,n,i){let o=new Nr(e,t,n),s=XP(e,t,o,{geoJson:i,resource:n}),a=await sh.fromGeoJson(s);return o._model=a,o};Nr.prototype.pick=function(e,t,n){if(!l(this._model)||!this._ready)return;let i=t.verticalExaggeration,o=t.verticalExaggerationRelativeHeight;return this._model.pick(e,t,i,o,ne.WGS84,n)};function XP(e,t,n,i){let o={cull:!1,releaseGltfJson:!0,opaquePass:Ee.CESIUM_3D_TILE,modelMatrix:t.computedTransform,upAxis:e._modelUpAxis,forwardAxis:e._modelForwardAxis,incrementallyLoadTextures:!1,customShader:e.customShader,content:n,colorBlendMode:e.colorBlendMode,colorBlendAmount:e.colorBlendAmount,lightColor:e.lightColor,imageBasedLighting:e.imageBasedLighting,featureIdLabel:e.featureIdLabel,instanceFeatureIdLabel:e.instanceFeatureIdLabel,pointCloudShading:e.pointCloudShading,clippingPlanes:e.clippingPlanes,backFaceCulling:e.backFaceCulling,shadows:e.shadows,showCreditsOnScreen:e.showCreditsOnScreen,splitDirection:e.splitDirection,enableDebugWireframe:e._enableDebugWireframe,debugWireframe:e.debugWireframe,projectTo2D:e._projectTo2D,enablePick:e._enablePick,enableShowOutline:e._enableShowOutline,showOutline:e.showOutline,outlineColor:e.outlineColor};return St(i,o)}var Gd=Nr;var fvn=_(T(),1);function Mu(e,t,n){this._tileset=e,this._tile=t,this._resource=n,this.featurePropertiesDirty=!1,this._metadata=void 0,this._group=void 0,this._ready=!1}Object.defineProperties(Mu.prototype,{featuresLength:{get:function(){return 0}},pointsLength:{get:function(){return 0}},trianglesLength:{get:function(){return 0}},geometryByteLength:{get:function(){return 0}},texturesByteLength:{get:function(){return 0}},batchTableByteLength:{get:function(){return 0}},innerContents:{get:function(){}},ready:{get:function(){return this._ready}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){return this._resource.getUrlComponent(!0)}},batchTable:{get:function(){}},metadata:{get:function(){return this._metadata},set:function(e){this._metadata=e}},group:{get:function(){return this._group},set:function(e){this._group=e}}});Mu.fromJson=function(e,t,n,i){let o=new Mu(e,t,n);return o._tileset.loadTileset(o._resource,i,o._tile),o._ready=!0,o};Mu.prototype.hasProperty=function(e,t){return!1};Mu.prototype.getFeature=function(e){};Mu.prototype.applyDebugSettings=function(e,t){};Mu.prototype.applyStyle=function(e){};Mu.prototype.update=function(e,t){};Mu.prototype.pick=function(e,t,n){};Mu.prototype.isDestroyed=function(){return!1};Mu.prototype.destroy=function(){return me(this)};var WP=Mu;var lNn=_(T(),1);var mAn=_(T(),1);var vwn=_(T(),1);var bvn=_(T(),1),PP=`uniform sampler2D u_atlas; #ifdef VECTOR_TILE uniform vec4 u_highlightColor; #endif in vec2 v_textureCoordinates; in vec4 v_pickColor; in vec4 v_color; in float v_splitDirection; #ifdef SDF in vec4 v_outlineColor; in float v_outlineWidth; #endif #ifdef FRAGMENT_DEPTH_CHECK in vec4 v_textureCoordinateBounds; // the min and max x and y values for the texture coordinates in vec4 v_originTextureCoordinateAndTranslate; // texture coordinate at the origin, billboard translate (used for label glyphs) in vec4 v_compressed; // x: eyeDepth, y: applyTranslate & enableDepthCheck, z: dimensions, w: imageSize in mat2 v_rotationMatrix; const float SHIFT_LEFT12 = 4096.0; const float SHIFT_LEFT1 = 2.0; const float SHIFT_RIGHT12 = 1.0 / 4096.0; const float SHIFT_RIGHT1 = 1.0 / 2.0; float getGlobeDepth(vec2 adjustedST, vec2 depthLookupST, bool applyTranslate, vec2 dimensions, vec2 imageSize) { vec2 lookupVector = imageSize * (depthLookupST - adjustedST); lookupVector = v_rotationMatrix * lookupVector; vec2 labelOffset = (dimensions - imageSize) * (depthLookupST - vec2(0.0, v_originTextureCoordinateAndTranslate.y)); // aligns label glyph with bounding rectangle. Will be zero for billboards because dimensions and imageSize will be equal vec2 translation = v_originTextureCoordinateAndTranslate.zw; if (applyTranslate) { // this is only needed for labels where the horizontal origin is not LEFT // it moves the label back to where the "origin" should be since all label glyphs are set to HorizontalOrigin.LEFT translation += (dimensions * v_originTextureCoordinateAndTranslate.xy * vec2(1.0, 0.0)); } vec2 st = ((lookupVector - translation + labelOffset) + gl_FragCoord.xy) / czm_viewport.zw; float logDepthOrDepth = czm_unpackDepth(texture(czm_globeDepthTexture, st)); if (logDepthOrDepth == 0.0) { return 0.0; // not on the globe } vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth); return eyeCoordinate.z / eyeCoordinate.w; } #endif #ifdef SDF // Get the distance from the edge of a glyph at a given position sampling an SDF texture. float getDistance(vec2 position) { return texture(u_atlas, position).r; } // Samples the sdf texture at the given position and produces a color based on the fill color and the outline. vec4 getSDFColor(vec2 position, float outlineWidth, vec4 outlineColor, float smoothing) { float distance = getDistance(position); if (outlineWidth > 0.0) { // Don't get the outline edge exceed the SDF_EDGE float outlineEdge = clamp(SDF_EDGE - outlineWidth, 0.0, SDF_EDGE); float outlineFactor = smoothstep(SDF_EDGE - smoothing, SDF_EDGE + smoothing, distance); vec4 sdfColor = mix(outlineColor, v_color, outlineFactor); float alpha = smoothstep(outlineEdge - smoothing, outlineEdge + smoothing, distance); return vec4(sdfColor.rgb, sdfColor.a * alpha); } else { float alpha = smoothstep(SDF_EDGE - smoothing, SDF_EDGE + smoothing, distance); return vec4(v_color.rgb, v_color.a * alpha); } } #endif void main() { if (v_splitDirection < 0.0 && gl_FragCoord.x > czm_splitPosition) discard; if (v_splitDirection > 0.0 && gl_FragCoord.x < czm_splitPosition) discard; vec4 color = texture(u_atlas, v_textureCoordinates); #ifdef SDF float outlineWidth = v_outlineWidth; vec4 outlineColor = v_outlineColor; // Get the current distance float distance = getDistance(v_textureCoordinates); #if (__VERSION__ == 300 || defined(GL_OES_standard_derivatives)) float smoothing = fwidth(distance); // Get an offset that is approximately half the distance to the neighbor pixels // 0.354 is approximately half of 1/sqrt(2) vec2 sampleOffset = 0.354 * vec2(dFdx(v_textureCoordinates) + dFdy(v_textureCoordinates)); // Sample the center point vec4 center = getSDFColor(v_textureCoordinates, outlineWidth, outlineColor, smoothing); // Sample the 4 neighbors vec4 color1 = getSDFColor(v_textureCoordinates + vec2(sampleOffset.x, sampleOffset.y), outlineWidth, outlineColor, smoothing); vec4 color2 = getSDFColor(v_textureCoordinates + vec2(-sampleOffset.x, sampleOffset.y), outlineWidth, outlineColor, smoothing); vec4 color3 = getSDFColor(v_textureCoordinates + vec2(-sampleOffset.x, -sampleOffset.y), outlineWidth, outlineColor, smoothing); vec4 color4 = getSDFColor(v_textureCoordinates + vec2(sampleOffset.x, -sampleOffset.y), outlineWidth, outlineColor, smoothing); // Equally weight the center sample and the 4 neighboring samples color = (center + color1 + color2 + color3 + color4)/5.0; #else // If no derivatives available (IE 10?), just do a single sample float smoothing = 1.0/32.0; color = getSDFColor(v_textureCoordinates, outlineWidth, outlineColor, smoothing); #endif color = czm_gammaCorrect(color); #else color = czm_gammaCorrect(color); color *= czm_gammaCorrect(v_color); #endif // Fully transparent parts of the billboard are not pickable. #if !defined(OPAQUE) && !defined(TRANSLUCENT) if (color.a < 0.005) // matches 0/255 and 1/255 { discard; } #else // The billboard is rendered twice. The opaque pass discards translucent fragments // and the translucent pass discards opaque fragments. #ifdef OPAQUE if (color.a < 0.995) // matches < 254/255 { discard; } #else if (color.a >= 0.995) // matches 254/255 and 255/255 { discard; } #endif #endif #ifdef VECTOR_TILE color *= u_highlightColor; #endif out_FragColor = color; #ifdef LOG_DEPTH czm_writeLogDepth(); #endif #ifdef FRAGMENT_DEPTH_CHECK float temp = v_compressed.y; temp = temp * SHIFT_RIGHT1; float temp2 = (temp - floor(temp)) * SHIFT_LEFT1; bool enableDepthTest = temp2 != 0.0; bool applyTranslate = floor(temp) != 0.0; if (enableDepthTest) { temp = v_compressed.z; temp = temp * SHIFT_RIGHT12; vec2 dimensions; dimensions.y = (temp - floor(temp)) * SHIFT_LEFT12; dimensions.x = floor(temp); temp = v_compressed.w; temp = temp * SHIFT_RIGHT12; vec2 imageSize; imageSize.y = (temp - floor(temp)) * SHIFT_LEFT12; imageSize.x = floor(temp); vec2 adjustedST = v_textureCoordinates - v_textureCoordinateBounds.xy; adjustedST = adjustedST / vec2(v_textureCoordinateBounds.z - v_textureCoordinateBounds.x, v_textureCoordinateBounds.w - v_textureCoordinateBounds.y); float epsilonEyeDepth = v_compressed.x + czm_epsilon1; float globeDepth1 = getGlobeDepth(adjustedST, v_originTextureCoordinateAndTranslate.xy, applyTranslate, dimensions, imageSize); // negative values go into the screen if (globeDepth1 != 0.0 && globeDepth1 > epsilonEyeDepth) { float globeDepth2 = getGlobeDepth(adjustedST, vec2(0.0, 1.0), applyTranslate, dimensions, imageSize); // top left corner if (globeDepth2 != 0.0 && globeDepth2 > epsilonEyeDepth) { float globeDepth3 = getGlobeDepth(adjustedST, vec2(1.0, 1.0), applyTranslate, dimensions, imageSize); // top right corner if (globeDepth3 != 0.0 && globeDepth3 > epsilonEyeDepth) { discard; } } } } #endif } `;var yvn=_(T(),1),vP=`#ifdef INSTANCED in vec2 direction; #endif in vec4 positionHighAndScale; in vec4 positionLowAndRotation; in vec4 compressedAttribute0; // pixel offset, translate, horizontal origin, vertical origin, show, direction, texture coordinates (texture offset) in vec4 compressedAttribute1; // aligned axis, translucency by distance, image width in vec4 compressedAttribute2; // label horizontal origin, image height, color, pick color, size in meters, valid aligned axis, 13 bits free in vec4 eyeOffset; // eye offset in meters, 4 bytes free (texture range) in vec4 scaleByDistance; // near, nearScale, far, farScale in vec4 pixelOffsetScaleByDistance; // near, nearScale, far, farScale in vec4 compressedAttribute3; // distance display condition near, far, disableDepthTestDistance, dimensions in vec2 sdf; // sdf outline color (rgb) and width (w) in float splitDirection; // splitDirection #if defined(VERTEX_DEPTH_CHECK) || defined(FRAGMENT_DEPTH_CHECK) in vec4 textureCoordinateBoundsOrLabelTranslate; // the min and max x and y values for the texture coordinates #endif #ifdef VECTOR_TILE in float a_batchId; #endif out vec2 v_textureCoordinates; #ifdef FRAGMENT_DEPTH_CHECK out vec4 v_textureCoordinateBounds; out vec4 v_originTextureCoordinateAndTranslate; out vec4 v_compressed; // x: eyeDepth, y: applyTranslate & enableDepthCheck, z: dimensions, w: imageSize out mat2 v_rotationMatrix; #endif out vec4 v_pickColor; out vec4 v_color; out float v_splitDirection; #ifdef SDF out vec4 v_outlineColor; out float v_outlineWidth; #endif const float UPPER_BOUND = 32768.0; const float SHIFT_LEFT16 = 65536.0; const float SHIFT_LEFT12 = 4096.0; const float SHIFT_LEFT8 = 256.0; const float SHIFT_LEFT7 = 128.0; const float SHIFT_LEFT5 = 32.0; const float SHIFT_LEFT3 = 8.0; const float SHIFT_LEFT2 = 4.0; const float SHIFT_LEFT1 = 2.0; const float SHIFT_RIGHT12 = 1.0 / 4096.0; const float SHIFT_RIGHT8 = 1.0 / 256.0; const float SHIFT_RIGHT7 = 1.0 / 128.0; const float SHIFT_RIGHT5 = 1.0 / 32.0; const float SHIFT_RIGHT3 = 1.0 / 8.0; const float SHIFT_RIGHT2 = 1.0 / 4.0; const float SHIFT_RIGHT1 = 1.0 / 2.0; vec4 addScreenSpaceOffset(vec4 positionEC, vec2 imageSize, float scale, vec2 direction, vec2 origin, vec2 translate, vec2 pixelOffset, vec3 alignedAxis, bool validAlignedAxis, float rotation, bool sizeInMeters, out mat2 rotationMatrix, out float mpp) { // Note the halfSize cannot be computed in JavaScript because it is sent via // compressed vertex attributes that coerce it to an integer. vec2 halfSize = imageSize * scale * 0.5; halfSize *= ((direction * 2.0) - 1.0); vec2 originTranslate = origin * abs(halfSize); #if defined(ROTATION) || defined(ALIGNED_AXIS) if (validAlignedAxis || rotation != 0.0) { float angle = rotation; if (validAlignedAxis) { vec4 projectedAlignedAxis = czm_modelView3D * vec4(alignedAxis, 0.0); angle += sign(-projectedAlignedAxis.x) * acos(sign(projectedAlignedAxis.y) * (projectedAlignedAxis.y * projectedAlignedAxis.y) / (projectedAlignedAxis.x * projectedAlignedAxis.x + projectedAlignedAxis.y * projectedAlignedAxis.y)); } float cosTheta = cos(angle); float sinTheta = sin(angle); rotationMatrix = mat2(cosTheta, sinTheta, -sinTheta, cosTheta); halfSize = rotationMatrix * halfSize; } else { rotationMatrix = mat2(1.0, 0.0, 0.0, 1.0); } #endif mpp = czm_metersPerPixel(positionEC); positionEC.xy += (originTranslate + halfSize) * czm_branchFreeTernary(sizeInMeters, 1.0, mpp); positionEC.xy += (translate + pixelOffset) * mpp; return positionEC; } #ifdef VERTEX_DEPTH_CHECK float getGlobeDepth(vec4 positionEC) { vec4 posWC = czm_eyeToWindowCoordinates(positionEC); float globeDepth = czm_unpackDepth(texture(czm_globeDepthTexture, posWC.xy / czm_viewport.zw)); if (globeDepth == 0.0) { return 0.0; // not on the globe } vec4 eyeCoordinate = czm_windowToEyeCoordinates(posWC.xy, globeDepth); return eyeCoordinate.z / eyeCoordinate.w; } #endif void main() { // Modifying this shader may also require modifications to Billboard._computeScreenSpacePosition // unpack attributes vec3 positionHigh = positionHighAndScale.xyz; vec3 positionLow = positionLowAndRotation.xyz; float scale = positionHighAndScale.w; #if defined(ROTATION) || defined(ALIGNED_AXIS) float rotation = positionLowAndRotation.w; #else float rotation = 0.0; #endif float compressed = compressedAttribute0.x; vec2 pixelOffset; pixelOffset.x = floor(compressed * SHIFT_RIGHT7); compressed -= pixelOffset.x * SHIFT_LEFT7; pixelOffset.x -= UPPER_BOUND; vec2 origin; origin.x = floor(compressed * SHIFT_RIGHT5); compressed -= origin.x * SHIFT_LEFT5; origin.y = floor(compressed * SHIFT_RIGHT3); compressed -= origin.y * SHIFT_LEFT3; #ifdef FRAGMENT_DEPTH_CHECK vec2 depthOrigin = origin.xy; #endif origin -= vec2(1.0); float show = floor(compressed * SHIFT_RIGHT2); compressed -= show * SHIFT_LEFT2; #ifdef INSTANCED vec2 textureCoordinatesBottomLeft = czm_decompressTextureCoordinates(compressedAttribute0.w); vec2 textureCoordinatesRange = czm_decompressTextureCoordinates(eyeOffset.w); vec2 textureCoordinates = textureCoordinatesBottomLeft + direction * textureCoordinatesRange; #else vec2 direction; direction.x = floor(compressed * SHIFT_RIGHT1); direction.y = compressed - direction.x * SHIFT_LEFT1; vec2 textureCoordinates = czm_decompressTextureCoordinates(compressedAttribute0.w); #endif float temp = compressedAttribute0.y * SHIFT_RIGHT8; pixelOffset.y = -(floor(temp) - UPPER_BOUND); vec2 translate; translate.y = (temp - floor(temp)) * SHIFT_LEFT16; temp = compressedAttribute0.z * SHIFT_RIGHT8; translate.x = floor(temp) - UPPER_BOUND; translate.y += (temp - floor(temp)) * SHIFT_LEFT8; translate.y -= UPPER_BOUND; temp = compressedAttribute1.x * SHIFT_RIGHT8; float temp2 = floor(compressedAttribute2.w * SHIFT_RIGHT2); vec2 imageSize = vec2(floor(temp), temp2); #ifdef FRAGMENT_DEPTH_CHECK float labelHorizontalOrigin = floor(compressedAttribute2.w - (temp2 * SHIFT_LEFT2)); float applyTranslate = 0.0; if (labelHorizontalOrigin != 0.0) // is a billboard, so set apply translate to false { applyTranslate = 1.0; labelHorizontalOrigin -= 2.0; depthOrigin.x = labelHorizontalOrigin + 1.0; } depthOrigin = vec2(1.0) - (depthOrigin * 0.5); #endif #ifdef EYE_DISTANCE_TRANSLUCENCY vec4 translucencyByDistance; translucencyByDistance.x = compressedAttribute1.z; translucencyByDistance.z = compressedAttribute1.w; translucencyByDistance.y = ((temp - floor(temp)) * SHIFT_LEFT8) / 255.0; temp = compressedAttribute1.y * SHIFT_RIGHT8; translucencyByDistance.w = ((temp - floor(temp)) * SHIFT_LEFT8) / 255.0; #endif #if defined(VERTEX_DEPTH_CHECK) || defined(FRAGMENT_DEPTH_CHECK) temp = compressedAttribute3.w; temp = temp * SHIFT_RIGHT12; vec2 dimensions; dimensions.y = (temp - floor(temp)) * SHIFT_LEFT12; dimensions.x = floor(temp); #endif #ifdef ALIGNED_AXIS vec3 alignedAxis = czm_octDecode(floor(compressedAttribute1.y * SHIFT_RIGHT8)); temp = compressedAttribute2.z * SHIFT_RIGHT5; bool validAlignedAxis = (temp - floor(temp)) * SHIFT_LEFT1 > 0.0; #else vec3 alignedAxis = vec3(0.0); bool validAlignedAxis = false; #endif vec4 pickColor; vec4 color; temp = compressedAttribute2.y; temp = temp * SHIFT_RIGHT8; pickColor.b = (temp - floor(temp)) * SHIFT_LEFT8; temp = floor(temp) * SHIFT_RIGHT8; pickColor.g = (temp - floor(temp)) * SHIFT_LEFT8; pickColor.r = floor(temp); temp = compressedAttribute2.x; temp = temp * SHIFT_RIGHT8; color.b = (temp - floor(temp)) * SHIFT_LEFT8; temp = floor(temp) * SHIFT_RIGHT8; color.g = (temp - floor(temp)) * SHIFT_LEFT8; color.r = floor(temp); temp = compressedAttribute2.z * SHIFT_RIGHT8; bool sizeInMeters = floor((temp - floor(temp)) * SHIFT_LEFT7) > 0.0; temp = floor(temp) * SHIFT_RIGHT8; pickColor.a = (temp - floor(temp)) * SHIFT_LEFT8; pickColor /= 255.0; color.a = floor(temp); color /= 255.0; /////////////////////////////////////////////////////////////////////////// vec4 p = czm_translateRelativeToEye(positionHigh, positionLow); vec4 positionEC = czm_modelViewRelativeToEye * p; #if defined(FRAGMENT_DEPTH_CHECK) || defined(VERTEX_DEPTH_CHECK) float eyeDepth = positionEC.z; #endif positionEC = czm_eyeOffset(positionEC, eyeOffset.xyz); positionEC.xyz *= show; /////////////////////////////////////////////////////////////////////////// #if defined(EYE_DISTANCE_SCALING) || defined(EYE_DISTANCE_TRANSLUCENCY) || defined(EYE_DISTANCE_PIXEL_OFFSET) || defined(DISTANCE_DISPLAY_CONDITION) || defined(DISABLE_DEPTH_DISTANCE) float lengthSq; if (czm_sceneMode == czm_sceneMode2D) { // 2D camera distance is a special case // treat all billboards as flattened to the z=0.0 plane lengthSq = czm_eyeHeight2D.y; } else { lengthSq = dot(positionEC.xyz, positionEC.xyz); } #endif #ifdef EYE_DISTANCE_SCALING float distanceScale = czm_nearFarScalar(scaleByDistance, lengthSq); scale *= distanceScale; translate *= distanceScale; // push vertex behind near plane for clipping if (scale == 0.0) { positionEC.xyz = vec3(0.0); } #endif float translucency = 1.0; #ifdef EYE_DISTANCE_TRANSLUCENCY translucency = czm_nearFarScalar(translucencyByDistance, lengthSq); // push vertex behind near plane for clipping if (translucency == 0.0) { positionEC.xyz = vec3(0.0); } #endif #ifdef EYE_DISTANCE_PIXEL_OFFSET float pixelOffsetScale = czm_nearFarScalar(pixelOffsetScaleByDistance, lengthSq); pixelOffset *= pixelOffsetScale; #endif #ifdef DISTANCE_DISPLAY_CONDITION float nearSq = compressedAttribute3.x; float farSq = compressedAttribute3.y; if (lengthSq < nearSq || lengthSq > farSq) { positionEC.xyz = vec3(0.0); } #endif mat2 rotationMatrix; float mpp; #ifdef DISABLE_DEPTH_DISTANCE float disableDepthTestDistance = compressedAttribute3.z; #endif #ifdef VERTEX_DEPTH_CHECK if (lengthSq < disableDepthTestDistance) { float depthsilon = 10.0; vec2 labelTranslate = textureCoordinateBoundsOrLabelTranslate.xy; vec4 pEC1 = addScreenSpaceOffset(positionEC, dimensions, scale, vec2(0.0), origin, labelTranslate, pixelOffset, alignedAxis, validAlignedAxis, rotation, sizeInMeters, rotationMatrix, mpp); float globeDepth1 = getGlobeDepth(pEC1); if (globeDepth1 != 0.0 && pEC1.z + depthsilon < globeDepth1) { vec4 pEC2 = addScreenSpaceOffset(positionEC, dimensions, scale, vec2(0.0, 1.0), origin, labelTranslate, pixelOffset, alignedAxis, validAlignedAxis, rotation, sizeInMeters, rotationMatrix, mpp); float globeDepth2 = getGlobeDepth(pEC2); if (globeDepth2 != 0.0 && pEC2.z + depthsilon < globeDepth2) { vec4 pEC3 = addScreenSpaceOffset(positionEC, dimensions, scale, vec2(1.0), origin, labelTranslate, pixelOffset, alignedAxis, validAlignedAxis, rotation, sizeInMeters, rotationMatrix, mpp); float globeDepth3 = getGlobeDepth(pEC3); if (globeDepth3 != 0.0 && pEC3.z + depthsilon < globeDepth3) { positionEC.xyz = vec3(0.0); } } } } #endif positionEC = addScreenSpaceOffset(positionEC, imageSize, scale, direction, origin, translate, pixelOffset, alignedAxis, validAlignedAxis, rotation, sizeInMeters, rotationMatrix, mpp); gl_Position = czm_projection * positionEC; v_textureCoordinates = textureCoordinates; #ifdef LOG_DEPTH czm_vertexLogDepth(); #endif #ifdef DISABLE_DEPTH_DISTANCE if (disableDepthTestDistance == 0.0 && czm_minimumDisableDepthTestDistance != 0.0) { disableDepthTestDistance = czm_minimumDisableDepthTestDistance; } if (disableDepthTestDistance != 0.0) { // Don't try to "multiply both sides" by w. Greater/less-than comparisons won't work for negative values of w. float zclip = gl_Position.z / gl_Position.w; bool clipped = (zclip < -1.0 || zclip > 1.0); if (!clipped && (disableDepthTestDistance < 0.0 || (lengthSq > 0.0 && lengthSq < disableDepthTestDistance))) { // Position z on the near plane. gl_Position.z = -gl_Position.w; #ifdef LOG_DEPTH v_depthFromNearPlusOne = 1.0; #endif } } #endif #ifdef FRAGMENT_DEPTH_CHECK if (sizeInMeters) { translate /= mpp; dimensions /= mpp; imageSize /= mpp; } #if defined(ROTATION) || defined(ALIGNED_AXIS) v_rotationMatrix = rotationMatrix; #else v_rotationMatrix = mat2(1.0, 0.0, 0.0, 1.0); #endif float enableDepthCheck = 0.0; if (lengthSq < disableDepthTestDistance) { enableDepthCheck = 1.0; } float dw = floor(clamp(dimensions.x, 0.0, SHIFT_LEFT12)); float dh = floor(clamp(dimensions.y, 0.0, SHIFT_LEFT12)); float iw = floor(clamp(imageSize.x, 0.0, SHIFT_LEFT12)); float ih = floor(clamp(imageSize.y, 0.0, SHIFT_LEFT12)); v_compressed.x = eyeDepth; v_compressed.y = applyTranslate * SHIFT_LEFT1 + enableDepthCheck; v_compressed.z = dw * SHIFT_LEFT12 + dh; v_compressed.w = iw * SHIFT_LEFT12 + ih; v_originTextureCoordinateAndTranslate.xy = depthOrigin; v_originTextureCoordinateAndTranslate.zw = translate; v_textureCoordinateBounds = textureCoordinateBoundsOrLabelTranslate; #endif #ifdef SDF vec4 outlineColor; float outlineWidth; temp = sdf.x; temp = temp * SHIFT_RIGHT8; outlineColor.b = (temp - floor(temp)) * SHIFT_LEFT8; temp = floor(temp) * SHIFT_RIGHT8; outlineColor.g = (temp - floor(temp)) * SHIFT_LEFT8; outlineColor.r = floor(temp); temp = sdf.y; temp = temp * SHIFT_RIGHT8; float temp3 = (temp - floor(temp)) * SHIFT_LEFT8; temp = floor(temp) * SHIFT_RIGHT8; outlineWidth = (temp - floor(temp)) * SHIFT_LEFT8; outlineColor.a = floor(temp); outlineColor /= 255.0; v_outlineWidth = outlineWidth / 255.0; v_outlineColor = outlineColor; v_outlineColor.a *= translucency; #endif v_pickColor = pickColor; v_color = color; v_color.a *= translucency; v_splitDirection = splitDirection; } `;var Hvn=_(T(),1);var Vvn=_(T(),1);var _vn=_(T(),1),dHe=Object.freeze({NONE:0,LOADING:2,LOADED:3,ERROR:4,FAILED:5}),ns=dHe;function yb(e){this._billboardCollection=e,this._id=void 0,this._loadState=ns.NONE,this._loadError=void 0,this._index=-1,this._width=void 0,this._height=void 0,this._hasSubregion=!1,this.dirty=!1}Object.defineProperties(yb.prototype,{loadError:{get:function(){return this._loadError}},loadState:{get:function(){return this._loadState}},ready:{get:function(){return this._loadState===ns.LOADED}},hasImage:{get:function(){return this._loadState!==ns.NONE}},id:{get:function(){return this._id}},width:{get:function(){return this._width}},height:{get:function(){return this._height}}});yb.prototype.unload=async function(){this._loadState!==ns.NONE&&(this._id=void 0,this._loadError=void 0,this._loadState=ns.NONE,this._index=-1,this._width=void 0,this._height=void 0,this.dirty=!0)};yb.prototype.loadImage=async function(e,t){if(this._id===e)return;let n=this._billboardCollection,i=n.billboardTextureCache,o=i.get(e);if(l(o)&&t.loadState===ns.LOADING||t.loadState===ns.LOADED){yb.clone(o,this);return}l(o)||(o=new yb(n),i.set(e,o)),o._id=this._id=e,o._loadState=this._loadState=ns.LOADING,o._loadError=this._loadError=void 0;let r,s=this._billboardCollection.textureAtlas;try{r=await s.addImage(e,t)}catch(c){if(o._loadState=ns.ERROR,o._loadError=c,this._id!==e)return;this._loadState=ns.ERROR,this._loadError=c;return}if(!l(r)||r===-1){if(o._loadState=ns.FAILED,o._index=-1,this._id!==e)return;this._loadState=ns.FAILED,this._index=-1;return}o._index=r,o._loadState=ns.LOADED;let a=s.rectangles[r];o._width=a.width,o._height=a.height,this._id===e&&(this._index=r,this._loadState=ns.LOADED,this._width=a.width,this._height=a.height,this.dirty=!0)};yb.prototype.addImageSubRegion=async function(e,t){this._id=e,this._loadState=ns.LOADING,this._loadError=void 0,this._hasSubregion=!0;let n,i=this._billboardCollection.textureAtlas;try{n=await i.addImageSubRegion(e,t)}catch(o){this._loadState=ns.ERROR,this._loadError=o;return}if(!l(n)||n===-1){this._loadState=ns.FAILED,this._index=-1,this._width=void 0,this._height=void 0;return}this._width=t.width,this._height=t.height,this._index=n,this._loadState=ns.LOADED,this.dirty=!0};yb.prototype.computeTextureCoordinates=function(e){return this._billboardCollection.textureAtlas.computeTextureCoordinates(this._index,e)};yb.clone=function(e,t){if(t._id=e._id,t._loadState=e._loadState,t._loadError=void 0,t._index=e._index,t._width=e._width,t._height=e._height,t._hasSubregion=e._hasSubregion,e.ready){t.dirty=!0;return}return(async()=>{let i=e._id;await e._billboardCollection.textureAtlas._indexPromiseById.get(i),t._id===i&&(e._hasSubregion&&await Promise.resolve(),t._id=i,t._loadState=e._loadState,t._loadError=e._loadError,t._index=e._index,t._width=e._width,t._height=e._height,t.dirty=!0)})(),t};var xb=yb;function pi(e,t){e=e??Y.EMPTY_OBJECT;let n=e.translucencyByDistance,i=e.pixelOffsetScaleByDistance,o=e.scaleByDistance,r=e.distanceDisplayCondition;l(n)&&(n=kt.clone(n)),l(i)&&(i=kt.clone(i)),l(o)&&(o=kt.clone(o)),l(r)&&(r=wt.clone(r)),this._show=e.show??!0,this._position=m.clone(e.position??m.ZERO),this._actualPosition=m.clone(this._position),this._pixelOffset=U.clone(e.pixelOffset??U.ZERO),this._translate=new U(0,0),this._eyeOffset=m.clone(e.eyeOffset??m.ZERO),this._heightReference=e.heightReference??Je.NONE,this._verticalOrigin=e.verticalOrigin??An.CENTER,this._horizontalOrigin=e.horizontalOrigin??_i.CENTER,this._scale=e.scale??1,this._color=D.clone(e.color??D.WHITE),this._rotation=e.rotation??0,this._alignedAxis=m.clone(e.alignedAxis??m.ZERO),this._width=e.width,this._height=e.height,this._scaleByDistance=o,this._translucencyByDistance=n,this._pixelOffsetScaleByDistance=i,this._sizeInMeters=e.sizeInMeters??!1,this._distanceDisplayCondition=r,this._disableDepthTestDistance=e.disableDepthTestDistance,this._id=e.id,this._collection=e.collection??t,this._pickId=void 0,this._pickPrimitive=e._pickPrimitive??this,this._billboardCollection=t,this._dirty=!1,this._index=-1,this._batchIndex=void 0,this._imageTexture=new xb(t),this._imageWidth=void 0,this._imageHeight=void 0,this._labelDimensions=void 0,this._labelHorizontalOrigin=void 0,this._labelTranslate=void 0;let s=e.image,a=e.imageId;l(s)&&(l(a)||(typeof s=="string"?a=s:l(s.src)?a=s.src:a=zn()),this._imageTexture.loadImage(a,s)),l(e.imageSubRegion)&&this._imageTexture.addImageSubRegion(a,e.imageSubRegion),this._actualClampedPosition=void 0,this._removeCallbackFunc=void 0,this._mode=oe.SCENE3D,this._clusterShow=!0,this._outlineColor=D.clone(e.outlineColor??D.BLACK),this._outlineWidth=e.outlineWidth??0,this._updateClamping(),this._splitDirection=e.splitDirection??vr.NONE}var Cce=pi.SHOW_INDEX=0,sk=pi.POSITION_INDEX=1,Gce=pi.PIXEL_OFFSET_INDEX=2,uHe=pi.EYE_OFFSET_INDEX=3,mHe=pi.HORIZONTAL_ORIGIN_INDEX=4,hHe=pi.VERTICAL_ORIGIN_INDEX=5,fHe=pi.SCALE_INDEX=6,Vce=pi.IMAGE_INDEX_INDEX=7,Lce=pi.COLOR_INDEX=8,pHe=pi.ROTATION_INDEX=9,bHe=pi.ALIGNED_AXIS_INDEX=10,gHe=pi.SCALE_BY_DISTANCE_INDEX=11,yHe=pi.TRANSLUCENCY_BY_DISTANCE_INDEX=12,xHe=pi.PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX=13,_He=pi.DISTANCE_DISPLAY_CONDITION=14,THe=pi.DISABLE_DEPTH_DISTANCE=15;pi.TEXTURE_COORDINATE_BOUNDS=16;var Rce=pi.SDF_INDEX=17,SHe=pi.SPLIT_DIRECTION_INDEX=18;pi.NUMBER_OF_PROPERTIES=19;function er(e,t){let n=e._billboardCollection;l(n)&&(n._updateBillboard(e,t),e._dirty=!0)}Object.defineProperties(pi.prototype,{show:{get:function(){return this._show},set:function(e){this._show!==e&&(this._show=e,er(this,Cce))}},position:{get:function(){return this._position},set:function(e){let t=this._position;m.equals(t,e)||(m.clone(e,t),m.clone(e,this._actualPosition),this._updateClamping(),er(this,sk))}},heightReference:{get:function(){return this._heightReference},set:function(e){let t=this._heightReference;e!==t&&(this._heightReference=e,this._updateClamping(),er(this,sk))}},pixelOffset:{get:function(){return this._pixelOffset},set:function(e){let t=this._pixelOffset;U.equals(t,e)||(U.clone(e,t),er(this,Gce))}},scaleByDistance:{get:function(){return this._scaleByDistance},set:function(e){let t=this._scaleByDistance;kt.equals(t,e)||(this._scaleByDistance=kt.clone(e,t),er(this,gHe))}},translucencyByDistance:{get:function(){return this._translucencyByDistance},set:function(e){let t=this._translucencyByDistance;kt.equals(t,e)||(this._translucencyByDistance=kt.clone(e,t),er(this,yHe))}},pixelOffsetScaleByDistance:{get:function(){return this._pixelOffsetScaleByDistance},set:function(e){let t=this._pixelOffsetScaleByDistance;kt.equals(t,e)||(this._pixelOffsetScaleByDistance=kt.clone(e,t),er(this,xHe))}},eyeOffset:{get:function(){return this._eyeOffset},set:function(e){let t=this._eyeOffset;m.equals(t,e)||(m.clone(e,t),er(this,uHe))}},horizontalOrigin:{get:function(){return this._horizontalOrigin},set:function(e){this._horizontalOrigin!==e&&(this._horizontalOrigin=e,er(this,mHe))}},verticalOrigin:{get:function(){return this._verticalOrigin},set:function(e){this._verticalOrigin!==e&&(this._verticalOrigin=e,er(this,hHe))}},scale:{get:function(){return this._scale},set:function(e){this._scale!==e&&(this._scale=e,er(this,fHe))}},color:{get:function(){return this._color},set:function(e){let t=this._color;D.equals(t,e)||(D.clone(e,t),er(this,Lce))}},rotation:{get:function(){return this._rotation},set:function(e){this._rotation!==e&&(this._rotation=e,er(this,pHe))}},alignedAxis:{get:function(){return this._alignedAxis},set:function(e){let t=this._alignedAxis;m.equals(t,e)||(m.clone(e,t),er(this,bHe))}},width:{get:function(){return this._width??this._imageTexture.width},set:function(e){this._width!==e&&(this._width=e,er(this,Vce))}},height:{get:function(){return this._height??this._imageTexture.height},set:function(e){this._height!==e&&(this._height=e,er(this,Vce))}},sizeInMeters:{get:function(){return this._sizeInMeters},set:function(e){this._sizeInMeters!==e&&(this._sizeInMeters=e,er(this,Lce))}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){wt.equals(e,this._distanceDisplayCondition)||(this._distanceDisplayCondition=wt.clone(e,this._distanceDisplayCondition),er(this,_He))}},disableDepthTestDistance:{get:function(){return this._disableDepthTestDistance},set:function(e){this._disableDepthTestDistance!==e&&(this._disableDepthTestDistance=e,er(this,THe))}},id:{get:function(){return this._id},set:function(e){this._id=e,l(this._pickId)&&(this._pickId.object.id=e)}},pickPrimitive:{get:function(){return this._pickPrimitive},set:function(e){this._pickPrimitive=e,l(this._pickId)&&(this._pickId.object.primitive=e)}},pickId:{get:function(){return this._pickId}},image:{get:function(){return this._imageTexture.id},set:function(e){if(!l(e)){this._imageTexture.unload();return}let t;typeof e=="string"?t=e:e instanceof Ze?t=e._url:l(e.src)?t=e.src:t=zn(),this._imageTexture.loadImage(t,e)}},ready:{get:function(){return this._imageTexture.ready}},loadError:{get:function(){return this._imageTexture.loadError}},textureDirty:{get:function(){return this._imageTexture.dirty},set:function(e){this._imageTexture.dirty=e}},_clampedPosition:{get:function(){return this._actualClampedPosition},set:function(e){this._actualClampedPosition=m.clone(e,this._actualClampedPosition),er(this,sk)}},clusterShow:{get:function(){return this._clusterShow},set:function(e){this._clusterShow!==e&&(this._clusterShow=e,er(this,Cce))}},outlineColor:{get:function(){return this._outlineColor},set:function(e){let t=this._outlineColor;D.equals(t,e)||(D.clone(e,t),er(this,Rce))}},outlineWidth:{get:function(){return this._outlineWidth},set:function(e){this._outlineWidth!==e&&(this._outlineWidth=e,er(this,Rce))}},splitDirection:{get:function(){return this._splitDirection},set:function(e){this._splitDirection!==e&&(this._splitDirection=e,er(this,SHe))}}});pi.prototype.getPickId=function(e){return l(this._pickId)||(this._pickId=e.createPickId({primitive:this._pickPrimitive,collection:this._collection,id:this._id})),this._pickId};pi.prototype._updateClamping=function(){pi._updateClamping(this._billboardCollection,this)};var ak=new he;pi._updateClamping=function(e,t){if(!l(e)||!l(e._scene))return;let n=e._scene,i=n.ellipsoid??ne.default,o=n.frameState.mode,r=o!==t._mode;if(t._mode=o,(t._heightReference===Je.NONE||r)&&l(t._removeCallbackFunc)&&(t._removeCallbackFunc(),t._removeCallbackFunc=void 0,t._clampedPosition=void 0),t._heightReference===Je.NONE||!l(t._position))return;l(t._removeCallbackFunc)&&t._removeCallbackFunc();let s=i.cartesianToCartographic(t._position);if(!l(s)){t._actualClampedPosition=void 0;return}function a(d){let u=i.cartographicToCartesian(d,t._clampedPosition);sC(t._heightReference)&&(t._mode===oe.SCENE3D?(d.height+=s.height,i.cartographicToCartesian(d,u)):u.x+=s.height),t._clampedPosition=u}t._removeCallbackFunc=n.updateHeight(s,a,t._heightReference),he.clone(s,ak);let c=n.getHeight(s,t._heightReference);l(c)&&(ak.height=c),a(ak)};pi.prototype.computeTextureCoordinates=function(e){return this._imageTexture.computeTextureCoordinates(e)};pi.prototype.setImage=function(e,t){this._imageTexture.loadImage(e,t)};pi.prototype.setImageTexture=function(e){xb.clone(e,this._imageTexture)};pi.prototype.setImageSubRegion=function(e,t){this._imageTexture.addImageSubRegion(e,t)};pi.prototype._setTranslate=function(e){let t=this._translate;U.equals(t,e)||(U.clone(e,t),er(this,Gce))};pi.prototype._getActualPosition=function(){return l(this._clampedPosition)?this._clampedPosition:this._actualPosition};pi.prototype._setActualPosition=function(e){l(this._clampedPosition)||m.clone(e,this._actualPosition),er(this,sk)};var Zce=new se;pi._computeActualPosition=function(e,t,n,i){return l(e._clampedPosition)?(n.mode!==e._mode&&e._updateClamping(),e._clampedPosition):n.mode===oe.SCENE3D?t:(F.multiplyByPoint(i,t,Zce),Ui.computeActualEllipsoidPosition(n,Zce))};var Ece=new m;pi._computeScreenSpacePosition=function(e,t,n,i,o,r){let s=F.multiplyByPoint(e,t,Ece),a=Ui.worldWithEyeOffsetToWindowCoordinates(o,s,n,r);if(l(a))return U.add(a,i,a),a};var rk=new U(0,0);pi.prototype.computeScreenSpacePosition=function(e,t){let n=this._billboardCollection;l(t)||(t=new U),U.clone(this._pixelOffset,rk),U.add(rk,this._translate,rk);let i=n.modelMatrix,o=this._position;if(l(this._clampedPosition)&&(o=this._clampedPosition,e.mode!==oe.SCENE3D)){let s=e.mapProjection,a=s.ellipsoid,c=s.unproject(o,ak);o=a.cartographicToCartesian(c,Ece),i=F.IDENTITY}return pi._computeScreenSpacePosition(i,o,this._eyeOffset,rk,e,t)};pi.getScreenSpaceBoundingBox=function(e,t,n){let i=e.width,o=e.height,r=e.scale;i*=r,o*=r;let s=t.x;e.horizontalOrigin===_i.RIGHT?s-=i:e.horizontalOrigin===_i.CENTER&&(s-=i*.5);let a=t.y;return e.verticalOrigin===An.BOTTOM||e.verticalOrigin===An.BASELINE?a-=o:e.verticalOrigin===An.CENTER&&(a-=o*.5),l(n)||(n=new Ke),n.x=s,n.y=a,n.width=i,n.height=o,n};pi.prototype.equals=function(e){return this===e||l(e)&&this._id===e._id&&m.equals(this._position,e._position)&&this.image===e.image&&this._show===e._show&&this._scale===e._scale&&this._verticalOrigin===e._verticalOrigin&&this._horizontalOrigin===e._horizontalOrigin&&this._heightReference===e._heightReference&&D.equals(this._color,e._color)&&U.equals(this._pixelOffset,e._pixelOffset)&&U.equals(this._translate,e._translate)&&m.equals(this._eyeOffset,e._eyeOffset)&&kt.equals(this._scaleByDistance,e._scaleByDistance)&&kt.equals(this._translucencyByDistance,e._translucencyByDistance)&&kt.equals(this._pixelOffsetScaleByDistance,e._pixelOffsetScaleByDistance)&&wt.equals(this._distanceDisplayCondition,e._distanceDisplayCondition)&&this._disableDepthTestDistance===e._disableDepthTestDistance&&this._splitDirection===e._splitDirection};pi.prototype._destroy=function(){l(this._customData)&&(this._billboardCollection._scene.globe._surface.removeTileCustomData(this._customData),this._customData=void 0),l(this._removeCallbackFunc)&&(this._removeCallbackFunc(),this._removeCallbackFunc=void 0),this.image=void 0,this._pickId=this._pickId&&this._pickId.destroy(),this._billboardCollection=void 0};var lo=pi;var Jvn=_(T(),1),CHe={OPAQUE:0,TRANSLUCENT:1,OPAQUE_AND_TRANSLUCENT:2},Lo=Object.freeze(CHe);var jvn=_(T(),1),VHe={FONT_SIZE:48,PADDING:10,RADIUS:8,CUTOFF:.25},Hs=Object.freeze(VHe);var LHe=lo.SHOW_INDEX,wP=lo.POSITION_INDEX,Ice=lo.PIXEL_OFFSET_INDEX,Xce=lo.EYE_OFFSET_INDEX,RHe=lo.HORIZONTAL_ORIGIN_INDEX,ZHe=lo.VERTICAL_ORIGIN_INDEX,GHe=lo.SCALE_INDEX,X_=lo.IMAGE_INDEX_INDEX,Wce=lo.COLOR_INDEX,EHe=lo.ROTATION_INDEX,IHe=lo.ALIGNED_AXIS_INDEX,Pce=lo.SCALE_BY_DISTANCE_INDEX,vce=lo.TRANSLUCENCY_BY_DISTANCE_INDEX,wce=lo.PIXEL_OFFSET_SCALE_BY_DISTANCE_INDEX,Fce=lo.DISTANCE_DISPLAY_CONDITION,XHe=lo.DISABLE_DEPTH_DISTANCE,WHe=lo.TEXTURE_COORDINATE_BOUNDS,Ace=lo.SDF_INDEX,Mce=lo.SPLIT_DIRECTION_INDEX,UH=lo.NUMBER_OF_PROPERTIES,uo,PHe={positionHighAndScale:0,positionLowAndRotation:1,compressedAttribute0:2,compressedAttribute1:3,compressedAttribute2:4,eyeOffset:5,scaleByDistance:6,pixelOffsetScaleByDistance:7,compressedAttribute3:8,textureCoordinateBoundsOrLabelTranslate:9,a_batchId:10,sdf:11,splitDirection:12},vHe={direction:0,positionHighAndScale:1,positionLowAndRotation:2,compressedAttribute0:3,compressedAttribute1:4,compressedAttribute2:5,eyeOffset:6,scaleByDistance:7,pixelOffsetScaleByDistance:8,compressedAttribute3:9,textureCoordinateBoundsOrLabelTranslate:10,a_batchId:11,sdf:12,splitDirection:13};function ku(e){e=e??Y.EMPTY_OBJECT,this._scene=e.scene,this._batchTable=e.batchTable;let t=e.textureAtlas;l(t)||(t=new Vx),this._textureAtlas=t,this._textureAtlasGUID=t.guid,this._destroyTextureAtlas=!0,this._billboardTextureCache=new Map,this._sp=void 0,this._spTranslucent=void 0,this._rsOpaque=void 0,this._rsTranslucent=void 0,this._vaf=void 0,this._billboards=[],this._billboardsToUpdate=[],this._billboardsToUpdateIndex=0,this._billboardsRemoved=!1,this._createVertexArray=!1,this._shaderRotation=!1,this._compiledShaderRotation=!1,this._shaderAlignedAxis=!1,this._compiledShaderAlignedAxis=!1,this._shaderScaleByDistance=!1,this._compiledShaderScaleByDistance=!1,this._shaderTranslucencyByDistance=!1,this._compiledShaderTranslucencyByDistance=!1,this._shaderPixelOffsetScaleByDistance=!1,this._compiledShaderPixelOffsetScaleByDistance=!1,this._shaderDistanceDisplayCondition=!1,this._compiledShaderDistanceDisplayCondition=!1,this._shaderDisableDepthDistance=!1,this._compiledShaderDisableDepthDistance=!1,this._shaderClampToGround=!1,this._compiledShaderClampToGround=!1,this._propertiesChanged=new Uint32Array(UH),this._maxSize=0,this._maxEyeOffset=0,this._maxScale=1,this._maxPixelOffset=0,this._allHorizontalCenter=!0,this._allVerticalCenter=!0,this._allSizedInMeters=!0,this._baseVolume=new le,this._baseVolumeWC=new le,this._baseVolume2D=new le,this._boundingVolume=new le,this._boundingVolumeDirty=!1,this._colorCommands=[],this._allBillboardsReady=!1,this.show=e.show??!0,this.modelMatrix=F.clone(e.modelMatrix??F.IDENTITY),this._modelMatrix=F.clone(F.IDENTITY),this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this.debugShowTextureAtlas=e.debugShowTextureAtlas??!1,this.blendOption=e.blendOption??Lo.OPAQUE_AND_TRANSLUCENT,this._blendOption=void 0,this._mode=oe.SCENE3D,this._buffersUsage=[Me.STATIC_DRAW,Me.STATIC_DRAW,Me.STATIC_DRAW,Me.STATIC_DRAW,Me.STATIC_DRAW,Me.STATIC_DRAW,Me.STATIC_DRAW,Me.STATIC_DRAW,Me.STATIC_DRAW,Me.STATIC_DRAW,Me.STATIC_DRAW,Me.STATIC_DRAW,Me.STATIC_DRAW,Me.STATIC_DRAW,Me.STATIC_DRAW,Me.STATIC_DRAW,Me.STATIC_DRAW],this._highlightColor=D.clone(D.WHITE),this._uniforms={u_atlas:()=>this.textureAtlas.texture,u_highlightColor:()=>this._highlightColor};let n=this._scene;l(n)&&l(n.terrainProviderChanged)&&(this._removeCallbackFunc=n.terrainProviderChanged.addEventListener(function(){let i=this._billboards,o=i.length;for(let r=0;r<o;++r)l(i[r])&&i[r]._updateClamping()},this))}Object.defineProperties(ku.prototype,{length:{get:function(){return DH(this),this._billboards.length}},textureAtlas:{get:function(){return this._textureAtlas},set:function(e){this._textureAtlas!==e&&(this._textureAtlas=this._destroyTextureAtlas&&this._textureAtlas&&this._textureAtlas.destroy(),this._textureAtlas=e)}},destroyTextureAtlas:{get:function(){return this._destroyTextureAtlas},set:function(e){this._destroyTextureAtlas=e}},sizeInBytes:{get:function(){return this._textureAtlas.sizeInBytes}},ready:{get:function(){return this._allBillboardsReady}},billboardTextureCache:{get:function(){return this._billboardTextureCache}}});function Nce(e){let t=e.length;for(let n=0;n<t;++n)e[n]&&e[n]._destroy()}ku.prototype.add=function(e){let t=new lo(e,this);return t._index=this._billboards.length,this._billboards.push(t),this._createVertexArray=!0,t};ku.prototype.remove=function(e){return this.contains(e)?(this._billboards[e._index]=void 0,this._billboardsRemoved=!0,this._createVertexArray=!0,e._destroy(),!0):!1};ku.prototype.removeAll=function(){Nce(this._billboards),this._billboards=[],this._billboardsToUpdate=[],this._billboardsToUpdateIndex=0,this._billboardsRemoved=!1,this._createVertexArray=!0};function DH(e){if(e._billboardsRemoved){e._billboardsRemoved=!1;let t=[],n=e._billboards,i=n.length;for(let o=0,r=0;o<i;++o){let s=n[o];l(s)&&(s._index=r++,t.push(s))}e._billboards=t}}ku.prototype._updateBillboard=function(e,t){e._dirty||(this._billboardsToUpdate[this._billboardsToUpdateIndex++]=e),++this._propertiesChanged[t]};ku.prototype.contains=function(e){return l(e)&&e._billboardCollection===this};ku.prototype.get=function(e){return DH(this),this._billboards[e]};var wH;function wHe(e){let n=e.cache.billboardCollection_indexBufferBatched;if(l(n))return n;let i=16384*6-6,o=new Uint16Array(i);for(let r=0,s=0;r<i;r+=6,s+=4)o[r]=s,o[r+1]=s+1,o[r+2]=s+2,o[r+3]=s+0,o[r+4]=s+2,o[r+5]=s+3;return n=xt.createIndexBuffer({context:e,typedArray:o,usage:Me.STATIC_DRAW,indexDatatype:Ae.UNSIGNED_SHORT}),n.vertexArrayDestroyable=!1,e.cache.billboardCollection_indexBufferBatched=n,n}function FHe(e){let t=e.cache.billboardCollection_indexBufferInstanced;return l(t)||(t=xt.createIndexBuffer({context:e,typedArray:new Uint16Array([0,1,2,0,2,3]),usage:Me.STATIC_DRAW,indexDatatype:Ae.UNSIGNED_SHORT}),t.vertexArrayDestroyable=!1,e.cache.billboardCollection_indexBufferInstanced=t),t}function AHe(e){let t=e.cache.billboardCollection_vertexBufferInstanced;return l(t)||(t=xt.createVertexBuffer({context:e,typedArray:new Float32Array([0,0,1,0,1,1,0,1]),usage:Me.STATIC_DRAW}),t.vertexArrayDestroyable=!1,e.cache.billboardCollection_vertexBufferInstanced=t),t}ku.prototype.computeNewBuffersUsage=function(){let e=this._buffersUsage,t=!1,n=this._propertiesChanged;for(let i=0;i<UH;++i){let o=n[i]===0?Me.STATIC_DRAW:Me.STREAM_DRAW;t=t||e[i]!==o,e[i]=o}return t};function MHe(e,t,n,i,o,r){let s=[{index:uo.positionHighAndScale,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:n[wP]},{index:uo.positionLowAndRotation,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:n[wP]},{index:uo.compressedAttribute0,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:n[Ice]},{index:uo.compressedAttribute1,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:n[vce]},{index:uo.compressedAttribute2,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:n[Wce]},{index:uo.eyeOffset,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:n[Xce]},{index:uo.scaleByDistance,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:n[Pce]},{index:uo.pixelOffsetScaleByDistance,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:n[wce]},{index:uo.compressedAttribute3,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:n[Fce]},{index:uo.textureCoordinateBoundsOrLabelTranslate,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:n[WHe]},{index:uo.splitDirection,componentsPerAttribute:1,componentDatatype:Q.FLOAT,usage:n[Mce]}];i&&s.push({index:uo.direction,componentsPerAttribute:2,componentDatatype:Q.FLOAT,vertexBuffer:AHe(e)}),l(o)&&s.push({index:uo.a_batchId,componentsPerAttribute:1,componentDatatype:Q.FLOAT,bufferUsage:Me.STATIC_DRAW}),r&&s.push({index:uo.sdf,componentsPerAttribute:2,componentDatatype:Q.FLOAT,usage:n[Ace]});let a=i?t:4*t;return new Xp(e,s,a,i)}var FH=new On;function kce(e,t,n,i){let o,r=n[uo.positionHighAndScale],s=n[uo.positionLowAndRotation],a=i._getActualPosition();e._mode===oe.SCENE3D&&(le.expand(e._baseVolume,a,e._baseVolume),e._boundingVolumeDirty=!0),On.fromCartesian(a,FH);let c=i.scale,d=i.rotation;d!==0&&(e._shaderRotation=!0),e._maxScale=Math.max(e._maxScale,c);let u=FH.high,h=FH.low;e._instanced?(o=i._index,r(o,u.x,u.y,u.z,c),s(o,h.x,h.y,h.z,d)):(o=i._index*4,r(o+0,u.x,u.y,u.z,c),r(o+1,u.x,u.y,u.z,c),r(o+2,u.x,u.y,u.z,c),r(o+3,u.x,u.y,u.z,c),s(o+0,h.x,h.y,h.z,d),s(o+1,h.x,h.y,h.z,d),s(o+2,h.x,h.y,h.z,d),s(o+3,h.x,h.y,h.z,d))}var Dl=new U,Nu=32768,l1=65536,AH=4096,Lf=256,NHe=128,kHe=32,UHe=8,Uce=4,DHe=1/256,Dce=0,Bce=2,Oce=3,Yce=1,BH=new Ke;function zce(e,t,n,i){let o,r=n[uo.compressedAttribute0],s=i.pixelOffset,a=s.x,c=s.y,d=i._translate,u=d.x,h=d.y;e._maxPixelOffset=Math.max(e._maxPixelOffset,Math.abs(a+u),Math.abs(-c+h));let p=i.horizontalOrigin,g=i._verticalOrigin,f=i.show&&i.clusterShow;i.color.alpha===0&&(f=!1),g===An.BASELINE&&(g=An.BOTTOM),e._allHorizontalCenter=e._allHorizontalCenter&&p===_i.CENTER,e._allVerticalCenter=e._allVerticalCenter&&g===An.CENTER;let y=0,x=0,S=0,C=0;if(i.ready){let w=i.computeTextureCoordinates(BH);y=w.x,x=w.y,S=w.width,C=w.height}let V=y+S,L=x+C,Z=Math.floor(X.clamp(a,-Nu,Nu)+Nu)*NHe;Z+=(p+1)*kHe,Z+=(g+1)*UHe,Z+=(f?1:0)*Uce;let E=Math.floor(X.clamp(c,-Nu,Nu)+Nu)*Lf,P=Math.floor(X.clamp(u,-Nu,Nu)+Nu)*Lf,W=(X.clamp(h,-Nu,Nu)+Nu)*DHe,v=Math.floor(W),A=Math.floor((W-v)*Lf);E+=v,P+=A,Dl.x=y,Dl.y=x;let b=wn.compressTextureCoordinates(Dl);Dl.x=V;let R=wn.compressTextureCoordinates(Dl);Dl.y=L;let G=wn.compressTextureCoordinates(Dl);Dl.x=y;let I=wn.compressTextureCoordinates(Dl);e._instanced?(o=i._index,r(o,Z,E,P,b)):(o=i._index*4,r(o+0,Z+Dce,E,P,b),r(o+1,Z+Bce,E,P,R),r(o+2,Z+Oce,E,P,G),r(o+3,Z+Yce,E,P,I))}function Hce(e,t,n,i){let o,r=n[uo.compressedAttribute1],s=i.alignedAxis;m.equals(s,m.ZERO)||(e._shaderAlignedAxis=!0);let a=0,c=1,d=1,u=1,h=i.translucencyByDistance;l(h)&&(a=h.near,c=h.nearValue,d=h.far,u=h.farValue,(c!==1||u!==1)&&(e._shaderTranslucencyByDistance=!0));let p=i.width??0;e._maxSize=Math.max(e._maxSize,p);let g=X.clamp(p,0,l1),f=0;Math.abs(m.magnitudeSquared(s)-1)<X.EPSILON6&&(f=wn.octEncodeFloat(s)),c=X.clamp(c,0,1),c=c===1?255:c*255|0,g=g*Lf+c,u=X.clamp(u,0,1),u=u===1?255:u*255|0,f=f*Lf+u,e._instanced?(o=i._index,r(o,g,f,a,d)):(o=i._index*4,r(o+0,g,f,a,d),r(o+1,g,f,a,d),r(o+2,g,f,a,d),r(o+3,g,f,a,d))}function NH(e,t,n,i){let o,r=n[uo.compressedAttribute2],s=i.color,a=l(e._batchTable)?D.WHITE:i.getPickId(t.context).color,c=i.sizeInMeters?1:0,d=Math.abs(m.magnitudeSquared(i.alignedAxis)-1)<X.EPSILON6?1:0;e._allSizedInMeters=e._allSizedInMeters&&c===1;let u=i.height??0;e._maxSize=Math.max(e._maxSize,u);let h=i._labelHorizontalOrigin??-2;h+=2;let p=u*Uce+h,g=D.floatToByte(s.red),f=D.floatToByte(s.green),y=D.floatToByte(s.blue),x=g*l1+f*Lf+y;g=D.floatToByte(a.red),f=D.floatToByte(a.green),y=D.floatToByte(a.blue);let S=g*l1+f*Lf+y,C=D.floatToByte(s.alpha)*l1+D.floatToByte(a.alpha)*Lf;C+=c*2+d,e._instanced?(o=i._index,r(o,x,S,C,p)):(o=i._index*4,r(o+0,x,S,C,p),r(o+1,x,S,C,p),r(o+2,x,S,C,p),r(o+3,x,S,C,p))}function kH(e,t,n,i){let o,r=n[uo.eyeOffset],s=i.eyeOffset,a=s.z;if(i._heightReference!==Je.NONE&&(a*=1.005),e._maxEyeOffset=Math.max(e._maxEyeOffset,Math.abs(s.x),Math.abs(s.y),Math.abs(a)),e._instanced){if(Dl.x=0,Dl.y=0,i.ready){let d=i.computeTextureCoordinates(BH);Dl.x=d.width,Dl.y=d.height}let c=wn.compressTextureCoordinates(Dl);o=i._index,r(o,s.x,s.y,a,c)}else o=i._index*4,r(o+0,s.x,s.y,a,0),r(o+1,s.x,s.y,a,0),r(o+2,s.x,s.y,a,0),r(o+3,s.x,s.y,a,0)}function Kce(e,t,n,i){let o,r=n[uo.scaleByDistance],s=0,a=1,c=1,d=1,u=i.scaleByDistance;l(u)&&(s=u.near,a=u.nearValue,c=u.far,d=u.farValue,(a!==1||d!==1)&&(e._shaderScaleByDistance=!0)),e._instanced?(o=i._index,r(o,s,a,c,d)):(o=i._index*4,r(o+0,s,a,c,d),r(o+1,s,a,c,d),r(o+2,s,a,c,d),r(o+3,s,a,c,d))}function Jce(e,t,n,i){let o,r=n[uo.pixelOffsetScaleByDistance],s=0,a=1,c=1,d=1,u=i.pixelOffsetScaleByDistance;l(u)&&(s=u.near,a=u.nearValue,c=u.far,d=u.farValue,(a!==1||d!==1)&&(e._shaderPixelOffsetScaleByDistance=!0)),e._instanced?(o=i._index,r(o,s,a,c,d)):(o=i._index*4,r(o+0,s,a,c,d),r(o+1,s,a,c,d),r(o+2,s,a,c,d),r(o+3,s,a,c,d))}function Qce(e,t,n,i){let o,r=n[uo.compressedAttribute3],s=0,a=Number.MAX_VALUE,c=i.distanceDisplayCondition;l(c)&&(s=c.near,a=c.far,s*=s,a*=a,e._shaderDistanceDisplayCondition=!0);let d=i.disableDepthTestDistance,u=Ru(i.heightReference)&&t.context.depthTexture;l(d)||(d=u?5e3:0),d*=d,(u||d>0)&&(e._shaderDisableDepthDistance=!0,d===Number.POSITIVE_INFINITY&&(d=-1));let h,p;l(i._labelDimensions)?(p=i._labelDimensions.x,h=i._labelDimensions.y):(p=i.width??0,h=i.height??0);let g=Math.floor(X.clamp(p,0,AH)),f=Math.floor(X.clamp(h,0,AH)),y=g*AH+f;e._instanced?(o=i._index,r(o,s,a,d,y)):(o=i._index*4,r(o+0,s,a,d,y),r(o+1,s,a,d,y),r(o+2,s,a,d,y),r(o+3,s,a,d,y))}function jce(e,t,n,i){if(Ru(i.heightReference)){let p=e._scene,g=t.context,f=t.globeTranslucencyState.translucent,y=l(p.globe)&&p.globe.depthTestAgainstTerrain;e._shaderClampToGround=g.depthTexture&&!f&&y}let o,r=n[uo.textureCoordinateBoundsOrLabelTranslate];if(Nt.maximumVertexTextureImageUnits>0){let p=0,g=0;l(i._labelTranslate)&&(p=i._labelTranslate.x,g=i._labelTranslate.y),e._instanced?(o=i._index,r(o,p,g,0,0)):(o=i._index*4,r(o+0,p,g,0,0),r(o+1,p,g,0,0),r(o+2,p,g,0,0),r(o+3,p,g,0,0));return}let s=0,a=0,c=0,d=0;if(i.ready){let p=i.computeTextureCoordinates(BH);s=p.x,a=p.y,c=p.width,d=p.height}let u=s+c,h=a+d;e._instanced?(o=i._index,r(o,s,a,u,h)):(o=i._index*4,r(o+0,s,a,u,h),r(o+1,s,a,u,h),r(o+2,s,a,u,h),r(o+3,s,a,u,h))}function BHe(e,t,n,i){if(!l(e._batchTable))return;let o=n[uo.a_batchId],r=i._batchIndex,s;e._instanced?(s=i._index,o(s,r)):(s=i._index*4,o(s+0,r),o(s+1,r),o(s+2,r),o(s+3,r))}function qce(e,t,n,i){if(!e._sdf)return;let o,r=n[uo.sdf],s=i.outlineColor,a=i.outlineWidth,c=D.floatToByte(s.red),d=D.floatToByte(s.green),u=D.floatToByte(s.blue),h=c*l1+d*Lf+u,p=a/Hs.RADIUS,g=D.floatToByte(s.alpha)*l1+D.floatToByte(p)*Lf;e._instanced?(o=i._index,r(o,h,g)):(o=i._index*4,r(o+0,h+Dce,g),r(o+1,h+Bce,g),r(o+2,h+Oce,g),r(o+3,h+Yce,g))}function $ce(e,t,n,i){let o=n[uo.splitDirection],r=0,s=i.splitDirection;l(s)&&(r=s);let a;e._instanced?(a=i._index,o(a,r)):(a=i._index*4,o(a+0,r),o(a+1,r),o(a+2,r),o(a+3,r))}function OHe(e,t,n,i){kce(e,t,n,i),zce(e,t,n,i),Hce(e,t,n,i),NH(e,t,n,i),kH(e,t,n,i),Kce(e,t,n,i),Jce(e,t,n,i),Qce(e,t,n,i),jce(e,t,n,i),BHe(e,t,n,i),qce(e,t,n,i),$ce(e,t,n,i)}function MH(e,t,n,i,o,r){let s;i.mode===oe.SCENE3D?(s=e._baseVolume,e._boundingVolumeDirty=!0):s=e._baseVolume2D;let a=[];for(let c=0;c<n;++c){let d=t[c],u=d.position,h=lo._computeActualPosition(d,u,i,o);l(h)&&(d._setActualPosition(h),r?a.push(h):le.expand(s,h,s))}r&&le.fromPoints(a,s)}function YHe(e,t){let n=t.mode,i=e._billboards,o=e._billboardsToUpdate,r=e._modelMatrix;e._createVertexArray||e._mode!==n||n!==oe.SCENE3D&&!F.equals(r,e.modelMatrix)?(e._mode=n,F.clone(e.modelMatrix,r),e._createVertexArray=!0,(n===oe.SCENE3D||n===oe.SCENE2D||n===oe.COLUMBUS_VIEW)&&MH(e,i,i.length,t,r,!0)):n===oe.MORPHING?MH(e,i,i.length,t,r,!0):(n===oe.SCENE2D||n===oe.COLUMBUS_VIEW)&&MH(e,o,e._billboardsToUpdateIndex,t,r,!1)}function zHe(e,t,n){let i=1;(!e._allSizedInMeters||e._maxPixelOffset!==0)&&(i=t.camera.getPixelSize(n,t.context.drawingBufferWidth,t.context.drawingBufferHeight));let o=i*e._maxScale*e._maxSize*2;e._allHorizontalCenter&&e._allVerticalCenter&&(o*=.5);let r=i*e._maxPixelOffset+e._maxEyeOffset;n.radius+=o+r}function HHe(e,t){let i=t.createViewportQuadCommand(`uniform sampler2D billboard_texture; in vec2 v_textureCoordinates; void main() { out_FragColor = texture(billboard_texture, v_textureCoordinates); } `,{uniformMap:{billboard_texture:function(){return e.textureAtlas.texture}}});return i.pass=Ee.OVERLAY,i}var KHe=[];ku.prototype.update=function(e){if(DH(this),!this.show)return;let t=e.context;this._instanced=t.instancedArrays,uo=this._instanced?vHe:PHe,wH=this._instanced?FHe:wHe;let n=this._billboards,i=n.length,o=!0;for(let W=0;W<i;++W){let v=n[W];l(v.loadError)&&(console.error(`Error loading image for billboard: ${v.loadError}`),v.image=void 0),v.textureDirty&&this._updateBillboard(v,X_),v.show&&(o=o&&v.ready)}let r=this._textureAtlas;if(e.afterRender.push(()=>{if(!this.isDestroyed())return r.update(e.context)}),!l(r.texture))return;YHe(this,e),n=this._billboards,i=n.length;let s=this._billboardsToUpdate,a=this._billboardsToUpdateIndex,c=this._propertiesChanged,d=r.guid,u=this._createVertexArray||this._textureAtlasGUID!==d;this._textureAtlasGUID=d;let h,p=e.passes,g=p.pick;if(u||!g&&this.computeNewBuffersUsage()){this._createVertexArray=!1;for(let W=0;W<UH;++W)c[W]=0;if(this._vaf=this._vaf&&this._vaf.destroy(),i>0){this._vaf=MHe(t,i,this._buffersUsage,this._instanced,this._batchTable,this._sdf),h=this._vaf.writers;for(let W=0;W<i;++W){let v=this._billboards[W];v._dirty=!1,v.textureDirty=!1,OHe(this,e,h,v)}this._vaf.commit(wH(t))}this._billboardsToUpdateIndex=0}else if(a>0){let W=KHe;W.length=0,(c[wP]||c[EHe]||c[GHe])&&W.push(kce),(c[X_]||c[Ice]||c[RHe]||c[ZHe]||c[LHe])&&(W.push(zce),this._instanced&&W.push(kH)),(c[X_]||c[IHe]||c[vce])&&(W.push(Hce),W.push(NH)),(c[X_]||c[Wce])&&W.push(NH),(c[X_]||c[Xce])&&W.push(kH),c[Pce]&&W.push(Kce),c[wce]&&W.push(Jce),(c[Fce]||c[XHe]||c[X_]||c[wP])&&W.push(Qce),(c[X_]||c[wP])&&W.push(jce),c[Ace]&&W.push(qce),c[Mce]&&W.push($ce);let v=W.length;if(h=this._vaf.writers,a/i>.1){for(let A=0;A<a;++A){let b=s[A];b._dirty=!1,b.textureDirty=!1;for(let R=0;R<v;++R)W[R](this,e,h,b)}this._vaf.commit(wH(t))}else{for(let A=0;A<a;++A){let b=s[A];b._dirty=!1,b.textureDirty=!1;for(let R=0;R<v;++R)W[R](this,e,h,b);this._instanced?this._vaf.subCommit(b._index,1):this._vaf.subCommit(b._index*4,4)}this._vaf.endSubCommits()}this._billboardsToUpdateIndex=0}if(a>i*1.5&&(s.length=i),!l(this._vaf)||!l(this._vaf.va))return;this._boundingVolumeDirty&&(this._boundingVolumeDirty=!1,le.transform(this._baseVolume,this.modelMatrix,this._baseVolumeWC));let f,y=F.IDENTITY;e.mode===oe.SCENE3D?(y=this.modelMatrix,f=le.clone(this._baseVolumeWC,this._boundingVolume)):f=le.clone(this._baseVolume2D,this._boundingVolume),zHe(this,e,f);let x=this._blendOption!==this.blendOption;if(this._blendOption=this.blendOption,x){this._blendOption===Lo.OPAQUE||this._blendOption===Lo.OPAQUE_AND_TRANSLUCENT?this._rsOpaque=Ue.fromCache({depthTest:{enabled:!0,func:ie.LESS},depthMask:!0}):this._rsOpaque=void 0;let W=this._blendOption===Lo.TRANSLUCENT;this._blendOption===Lo.TRANSLUCENT||this._blendOption===Lo.OPAQUE_AND_TRANSLUCENT?this._rsTranslucent=Ue.fromCache({depthTest:{enabled:!0,func:W?ie.LEQUAL:ie.LESS},depthMask:W,blending:un.ALPHA_BLEND}):this._rsTranslucent=void 0}this._shaderDisableDepthDistance=this._shaderDisableDepthDistance||e.minimumDisableDepthTestDistance!==0;let S,C,V,L,Z,E=Nt.maximumVertexTextureImageUnits>0;if(x||this._shaderRotation!==this._compiledShaderRotation||this._shaderAlignedAxis!==this._compiledShaderAlignedAxis||this._shaderScaleByDistance!==this._compiledShaderScaleByDistance||this._shaderTranslucencyByDistance!==this._compiledShaderTranslucencyByDistance||this._shaderPixelOffsetScaleByDistance!==this._compiledShaderPixelOffsetScaleByDistance||this._shaderDistanceDisplayCondition!==this._compiledShaderDistanceDisplayCondition||this._shaderDisableDepthDistance!==this._compiledShaderDisableDepthDistance||this._shaderClampToGround!==this._compiledShaderClampToGround||this._sdf!==this._compiledSDF){S=vP,C=PP,Z=[],l(this._batchTable)&&(Z.push("VECTOR_TILE"),S=this._batchTable.getVertexShaderCallback(!1,"a_batchId",void 0)(S),C=this._batchTable.getFragmentShaderCallback(!1,void 0)(C)),V=new De({defines:Z,sources:[S]}),this._instanced&&V.defines.push("INSTANCED"),this._shaderRotation&&V.defines.push("ROTATION"),this._shaderAlignedAxis&&V.defines.push("ALIGNED_AXIS"),this._shaderScaleByDistance&&V.defines.push("EYE_DISTANCE_SCALING"),this._shaderTranslucencyByDistance&&V.defines.push("EYE_DISTANCE_TRANSLUCENCY"),this._shaderPixelOffsetScaleByDistance&&V.defines.push("EYE_DISTANCE_PIXEL_OFFSET"),this._shaderDistanceDisplayCondition&&V.defines.push("DISTANCE_DISPLAY_CONDITION"),this._shaderDisableDepthDistance&&V.defines.push("DISABLE_DEPTH_DISTANCE"),this._shaderClampToGround&&(E?V.defines.push("VERTEX_DEPTH_CHECK"):V.defines.push("FRAGMENT_DEPTH_CHECK"));let W=1-Hs.CUTOFF;this._sdf&&V.defines.push("SDF");let v=l(this._batchTable)?"VECTOR_TILE":"";this._blendOption===Lo.OPAQUE_AND_TRANSLUCENT&&(L=new De({defines:["OPAQUE",v],sources:[C]}),this._shaderClampToGround&&(E?L.defines.push("VERTEX_DEPTH_CHECK"):L.defines.push("FRAGMENT_DEPTH_CHECK")),this._sdf&&(L.defines.push("SDF"),L.defines.push(`SDF_EDGE ${W}`)),this._sp=$t.replaceCache({context:t,shaderProgram:this._sp,vertexShaderSource:V,fragmentShaderSource:L,attributeLocations:uo}),L=new De({defines:["TRANSLUCENT",v],sources:[C]}),this._shaderClampToGround&&(E?L.defines.push("VERTEX_DEPTH_CHECK"):L.defines.push("FRAGMENT_DEPTH_CHECK")),this._sdf&&(L.defines.push("SDF"),L.defines.push(`SDF_EDGE ${W}`)),this._spTranslucent=$t.replaceCache({context:t,shaderProgram:this._spTranslucent,vertexShaderSource:V,fragmentShaderSource:L,attributeLocations:uo})),this._blendOption===Lo.OPAQUE&&(L=new De({defines:[v],sources:[C]}),this._shaderClampToGround&&(E?L.defines.push("VERTEX_DEPTH_CHECK"):L.defines.push("FRAGMENT_DEPTH_CHECK")),this._sdf&&(L.defines.push("SDF"),L.defines.push(`SDF_EDGE ${W}`)),this._sp=$t.replaceCache({context:t,shaderProgram:this._sp,vertexShaderSource:V,fragmentShaderSource:L,attributeLocations:uo})),this._blendOption===Lo.TRANSLUCENT&&(L=new De({defines:[v],sources:[C]}),this._shaderClampToGround&&(E?L.defines.push("VERTEX_DEPTH_CHECK"):L.defines.push("FRAGMENT_DEPTH_CHECK")),this._sdf&&(L.defines.push("SDF"),L.defines.push(`SDF_EDGE ${W}`)),this._spTranslucent=$t.replaceCache({context:t,shaderProgram:this._spTranslucent,vertexShaderSource:V,fragmentShaderSource:L,attributeLocations:uo})),this._compiledShaderRotation=this._shaderRotation,this._compiledShaderAlignedAxis=this._shaderAlignedAxis,this._compiledShaderScaleByDistance=this._shaderScaleByDistance,this._compiledShaderTranslucencyByDistance=this._shaderTranslucencyByDistance,this._compiledShaderPixelOffsetScaleByDistance=this._shaderPixelOffsetScaleByDistance,this._compiledShaderDistanceDisplayCondition=this._shaderDistanceDisplayCondition,this._compiledShaderDisableDepthDistance=this._shaderDisableDepthDistance,this._compiledShaderClampToGround=this._shaderClampToGround,this._compiledSDF=this._sdf}let P=e.commandList;if(p.render||p.pick){let W=this._colorCommands,v=this._blendOption===Lo.OPAQUE,A=this._blendOption===Lo.OPAQUE_AND_TRANSLUCENT,b=this._vaf.va,R=b.length,G=this._uniforms,I;l(this._batchTable)?(G=this._batchTable.getUniformMapCallback()(G),I=this._batchTable.getPickId()):I="v_pickColor",W.length=R;let w=A?R*2:R;for(let M=0;M<w;++M){let B=W[M];l(B)||(B=W[M]=new $e);let k=v||A&&M%2===0;B.pass=k||!A?Ee.OPAQUE:Ee.TRANSLUCENT,B.owner=this;let O=A?Math.floor(M/2):M;B.boundingVolume=f,B.modelMatrix=y,B.count=b[O].indicesCount,B.shaderProgram=k?this._sp:this._spTranslucent,B.uniformMap=G,B.vertexArray=b[O].va,B.renderState=k?this._rsOpaque:this._rsTranslucent,B.debugShowBoundingVolume=this.debugShowBoundingVolume,B.pickId=I,this._instanced&&(B.count=6,B.instanceCount=i),P.push(B)}this.debugShowTextureAtlas&&(l(this.debugCommand)||(this.debugCommand=HHe(this,e.context)),P.push(this.debugCommand))}this._allBillboardsReady=o};ku.prototype.isDestroyed=function(){return!1};ku.prototype.destroy=function(){return l(this._removeCallbackFunc)&&(this._removeCallbackFunc(),this._removeCallbackFunc=void 0),this._textureAtlas=this._destroyTextureAtlas&&this._textureAtlas&&this._textureAtlas.destroy(),this._sp=this._sp&&this._sp.destroy(),this._spTranslucent=this._spTranslucent&&this._spTranslucent.destroy(),this._vaf=this._vaf&&this._vaf.destroy(),Nce(this._billboards),me(this)};var Ed=ku;var Bwn=_(T(),1);var Fwn=_(T(),1);function JHe(e,t,n,i,o){return function(){let r=document.createElement("canvas"),s=o+2*i;r.height=r.width=s;let a=r.getContext("2d");return a.clearRect(0,0,s,s),i!==0&&(a.beginPath(),a.arc(s/2,s/2,s/2,0,2*Math.PI,!0),a.closePath(),a.fillStyle=n,a.fill(),e<1&&(a.save(),a.globalCompositeOperation="destination-out",a.beginPath(),a.arc(s/2,s/2,o/2,0,2*Math.PI,!0),a.closePath(),a.fillStyle="black",a.fill(),a.restore())),a.beginPath(),a.arc(s/2,s/2,o/2,0,2*Math.PI,!0),a.closePath(),a.fillStyle=t,a.fill(),r}}var W_=JHe;function ga(e,t,n,i,o){this._content=e,this._billboard=n,this._label=i,this._polyline=o,this._batchId=t,this._billboardImage=void 0,this._billboardColor=void 0,this._billboardOutlineColor=void 0,this._billboardOutlineWidth=void 0,this._billboardSize=void 0,this._pointSize=void 0,this._color=void 0,this._pointSize=void 0,this._pointOutlineColor=void 0,this._pointOutlineWidth=void 0,this._heightOffset=void 0,this._pickIds=new Array(3),d1(this)}var QHe=new he;Object.defineProperties(ga.prototype,{show:{get:function(){return this._label.show},set:function(e){this._label.show=e,this._billboard.show=e,this._polyline.show=e}},color:{get:function(){return this._color},set:function(e){this._color=D.clone(e,this._color),d1(this)}},pointSize:{get:function(){return this._pointSize},set:function(e){this._pointSize=e,d1(this)}},pointOutlineColor:{get:function(){return this._pointOutlineColor},set:function(e){this._pointOutlineColor=D.clone(e,this._pointOutlineColor),d1(this)}},pointOutlineWidth:{get:function(){return this._pointOutlineWidth},set:function(e){this._pointOutlineWidth=e,d1(this)}},labelColor:{get:function(){return this._label.fillColor},set:function(e){this._label.fillColor=e,this._polyline.show=this._label.show&&e.alpha>0}},labelOutlineColor:{get:function(){return this._label.outlineColor},set:function(e){this._label.outlineColor=e}},labelOutlineWidth:{get:function(){return this._label.outlineWidth},set:function(e){this._label.outlineWidth=e}},font:{get:function(){return this._label.font},set:function(e){this._label.font=e}},labelStyle:{get:function(){return this._label.style},set:function(e){this._label.style=e}},labelText:{get:function(){return this._label.text},set:function(e){l(e)||(e=""),this._label.text=e}},backgroundColor:{get:function(){return this._label.backgroundColor},set:function(e){this._label.backgroundColor=e}},backgroundPadding:{get:function(){return this._label.backgroundPadding},set:function(e){this._label.backgroundPadding=e}},backgroundEnabled:{get:function(){return this._label.showBackground},set:function(e){this._label.showBackground=e}},scaleByDistance:{get:function(){return this._label.scaleByDistance},set:function(e){this._label.scaleByDistance=e,this._billboard.scaleByDistance=e}},translucencyByDistance:{get:function(){return this._label.translucencyByDistance},set:function(e){this._label.translucencyByDistance=e,this._billboard.translucencyByDistance=e}},distanceDisplayCondition:{get:function(){return this._label.distanceDisplayCondition},set:function(e){this._label.distanceDisplayCondition=e,this._polyline.distanceDisplayCondition=e,this._billboard.distanceDisplayCondition=e}},heightOffset:{get:function(){return this._heightOffset},set:function(e){let t=this._heightOffset??0,n=this._content.tileset.ellipsoid,i=n.cartesianToCartographic(this._billboard.position,QHe);i.height=i.height-t+e;let o=n.cartographicToCartesian(i);this._billboard.position=o,this._label.position=this._billboard.position,this._polyline.positions=[this._polyline.positions[0],o],this._heightOffset=e}},anchorLineEnabled:{get:function(){return this._polyline.show},set:function(e){this._polyline.show=e}},anchorLineColor:{get:function(){return this._polyline.material.uniforms.color},set:function(e){this._polyline.material.uniforms.color=D.clone(e,this._polyline.material.uniforms.color)}},image:{get:function(){return this._billboardImage},set:function(e){let t=this._billboardImage!==e;this._billboardImage=e,t&&d1(this)}},disableDepthTestDistance:{get:function(){return this._label.disableDepthTestDistance},set:function(e){this._label.disableDepthTestDistance=e,this._billboard.disableDepthTestDistance=e}},horizontalOrigin:{get:function(){return this._billboard.horizontalOrigin},set:function(e){this._billboard.horizontalOrigin=e}},verticalOrigin:{get:function(){return this._billboard.verticalOrigin},set:function(e){this._billboard.verticalOrigin=e}},labelHorizontalOrigin:{get:function(){return this._label.horizontalOrigin},set:function(e){this._label.horizontalOrigin=e}},labelVerticalOrigin:{get:function(){return this._label.verticalOrigin},set:function(e){this._label.verticalOrigin=e}},content:{get:function(){return this._content}},tileset:{get:function(){return this._content.tileset}},primitive:{get:function(){return this._content.tileset}},pickIds:{get:function(){let e=this._pickIds;return e[0]=this._billboard.pickId,e[1]=this._label.pickId,e[2]=this._polyline.pickId,e}}});ga.defaultColor=D.WHITE;ga.defaultPointOutlineColor=D.BLACK;ga.defaultPointOutlineWidth=0;ga.defaultPointSize=8;function d1(e){let t=e._billboard;if(l(e._billboardImage)&&e._billboardImage!==t.image){t.image=e._billboardImage;return}if(l(e._billboardImage))return;let n=e._color??ga.defaultColor,i=e._pointOutlineColor??ga.defaultPointOutlineColor,o=e._pointOutlineWidth??ga.defaultPointOutlineWidth,r=e._pointSize??ga.defaultPointSize,s=e._billboardColor,a=e._billboardOutlineColor,c=e._billboardOutlineWidth,d=e._billboardSize;if(D.equals(n,s)&&D.equals(i,a)&&o===c&&r===d)return;e._billboardColor=D.clone(n,e._billboardColor),e._billboardOutlineColor=D.clone(i,e._billboardOutlineColor),e._billboardOutlineWidth=o,e._billboardSize=r;let u=n.alpha,h=n.toCssColorString(),p=i.toCssColorString(),g=JSON.stringify([h,r,p,o]);t.setImage(g,W_(u,h,p,o,r))}ga.prototype.hasProperty=function(e){return this._content.batchTable.hasProperty(this._batchId,e)};ga.prototype.getPropertyIds=function(e){return this._content.batchTable.getPropertyIds(this._batchId,e)};ga.prototype.getProperty=function(e){return this._content.batchTable.getProperty(this._batchId,e)};ga.prototype.getPropertyInherited=function(e){return Bs.getPropertyInherited(this._content,this._batchId,e)};ga.prototype.setProperty=function(e,t){this._content.batchTable.setProperty(this._batchId,e,t),this._content.featurePropertiesDirty=!0};ga.prototype.isExactClass=function(e){return this._content.batchTable.isExactClass(this._batchId,e)};ga.prototype.isClass=function(e){return this._content.batchTable.isClass(this._batchId,e)};ga.prototype.getExactClassName=function(){return this._content.batchTable.getExactClassName(this._batchId)};var _b=ga;var FFn=_(T(),1);var Kwn=_(T(),1);function jHe(e,t,n,i,o){let r=e.measureText(t);if(!!/\S/.test(t)){let a=document.defaultView.getComputedStyle(e.canvas).getPropertyValue("font-size").replace("px",""),c=document.createElement("canvas"),d=100,u=r.width+d|0,h=3*a,p=h/2;c.width=u,c.height=h;let g=c.getContext("2d");g.font=n,g.fillStyle="white",g.fillRect(0,0,c.width+1,c.height+1),i&&(g.strokeStyle="black",g.lineWidth=e.lineWidth,g.strokeText(t,d/2,p)),o&&(g.fillStyle="black",g.fillText(t,d/2,p));let f=g.getImageData(0,0,u,h).data,y=f.length,x=u*4,S,C,V,L;for(S=0;S<y;++S)if(f[S]!==255){V=S/x|0;break}for(S=y-1;S>=0;--S)if(f[S]!==255){L=S/x|0;break}let Z=-1;for(S=0;S<u&&Z===-1;++S)for(C=0;C<h;++C){let E=S*4+C*x;if(f[E]!==255||f[E+1]!==255||f[E+2]!==255||f[E+3]!==255){Z=S;break}}return{width:r.width,height:L-V,ascent:p-V,descent:L-p,minx:Z-d/2}}return{width:r.width,height:0,ascent:0,descent:0,minx:0}}var P_;function qHe(e,t){if(e==="")return;t=t??Y.EMPTY_OBJECT;let n=t.font??"10px sans-serif",i=t.stroke??!1,o=t.fill??!0,r=t.strokeWidth??1,s=t.backgroundColor??D.TRANSPARENT,a=t.padding??0,c=a*2,d=document.createElement("canvas");d.width=1,d.height=1,d.style.font=n;let u=d.getContext("2d",{willReadFrequently:!0});l(P_)||(l(u.imageSmoothingEnabled)?P_="imageSmoothingEnabled":l(u.mozImageSmoothingEnabled)?P_="mozImageSmoothingEnabled":l(u.webkitImageSmoothingEnabled)?P_="webkitImageSmoothingEnabled":l(u.msImageSmoothingEnabled)&&(P_="msImageSmoothingEnabled")),u.font=n,u.lineJoin="round",u.lineWidth=r,u[P_]=!1,d.style.visibility="hidden",document.body.appendChild(d);let h=jHe(u,e,n,i,o);d.dimensions=h,document.body.removeChild(d),d.style.visibility="";let p=-h.minx,g=Math.ceil(h.width)+p+c,f=h.height+c,y=f-h.ascent+a,x=f-y+c;if(d.width=g,d.height=f,u.font=n,u.lineJoin="round",u.lineWidth=r,u[P_]=!1,s!==D.TRANSPARENT&&(u.fillStyle=s.toCssColorString(),u.fillRect(0,0,d.width,d.height)),i){let S=t.strokeColor??D.BLACK;u.strokeStyle=S.toCssColorString(),u.strokeText(e,p+a,x)}if(o){let S=t.fillColor??D.WHITE;u.fillStyle=S.toCssColorString(),u.fillText(e,p+a,x)}return d}var v_=qHe;var ule=_(ile(),1);var fFn=_(T(),1);var qwn=_(T(),1),eKe={FILL:0,OUTLINE:1,FILL_AND_OUTLINE:2},Do=Object.freeze(eKe);var ole={},rle=0,tKe=256,nKe=new D(.165,.165,.165,.8),iKe=new U(7,5),ps=Object.freeze({LTR:0,RTL:1,WEAK:2,BRACKETS:3});function w_(e){!e._rebindAllGlyphs&&!e._repositionAllGlyphs&&e._labelCollection._labelsToUpdate.push(e),e._rebindAllGlyphs=!0}function AP(e){!e._rebindAllGlyphs&&!e._repositionAllGlyphs&&e._labelCollection._labelsToUpdate.push(e),e._repositionAllGlyphs=!0}function MP(e,t){return document.defaultView.getComputedStyle(e,null).getPropertyValue(t)}function ale(e){let t=ole[e._font];if(!l(t)){let n=document.createElement("div");n.style.position="absolute",n.style.opacity=0,n.style.font=e._font,document.body.appendChild(n);let i=parseFloat(MP(n,"line-height"));isNaN(i)&&(i=void 0),t={family:MP(n,"font-family"),size:MP(n,"font-size").replace("px",""),style:MP(n,"font-style"),weight:MP(n,"font-weight"),lineHeight:i},document.body.removeChild(n),rle<tKe&&(ole[e._font]=t,rle++)}e._fontFamily=t.family,e._fontSize=t.size,e._fontStyle=t.style,e._fontWeight=t.weight,e._lineHeight=t.lineHeight}function ah(e,t){e=e??Y.EMPTY_OBJECT;let n=e.translucencyByDistance,i=e.pixelOffsetScaleByDistance,o=e.scaleByDistance,r=e.distanceDisplayCondition;l(n)&&(n=kt.clone(n)),l(i)&&(i=kt.clone(i)),l(o)&&(o=kt.clone(o)),l(r)&&(r=wt.clone(r)),this._renderedText=void 0,this._text=void 0,this._show=e.show??!0,this._font=e.font??"30px sans-serif",this._fillColor=D.clone(e.fillColor??D.WHITE),this._outlineColor=D.clone(e.outlineColor??D.BLACK),this._outlineWidth=e.outlineWidth??1,this._showBackground=e.showBackground??!1,this._backgroundColor=D.clone(e.backgroundColor??nKe),this._backgroundPadding=U.clone(e.backgroundPadding??iKe),this._style=e.style??Do.FILL,this._verticalOrigin=e.verticalOrigin??An.BASELINE,this._horizontalOrigin=e.horizontalOrigin??_i.LEFT,this._pixelOffset=U.clone(e.pixelOffset??U.ZERO),this._eyeOffset=m.clone(e.eyeOffset??m.ZERO),this._position=m.clone(e.position??m.ZERO),this._scale=e.scale??1,this._id=e.id,this._translucencyByDistance=n,this._pixelOffsetScaleByDistance=i,this._scaleByDistance=o,this._heightReference=e.heightReference??Je.NONE,this._distanceDisplayCondition=r,this._disableDepthTestDistance=e.disableDepthTestDistance,this._labelCollection=t,this._glyphs=[],this._backgroundBillboard=void 0,this._batchIndex=void 0,this._rebindAllGlyphs=!0,this._repositionAllGlyphs=!0,this._actualClampedPosition=void 0,this._removeCallbackFunc=void 0,this._mode=void 0,this._clusterShow=!0,this.text=e.text??"",this._relativeSize=1,ale(this),this._updateClamping()}Object.defineProperties(ah.prototype,{show:{get:function(){return this._show},set:function(e){if(this._show!==e){this._show=e;let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i].billboard;l(r)&&(r.show=e)}let n=this._backgroundBillboard;l(n)&&(n.show=e)}}},position:{get:function(){return this._position},set:function(e){let t=this._position;if(!m.equals(t,e)){m.clone(e,t);let n=this._glyphs;for(let o=0,r=n.length;o<r;o++){let s=n[o].billboard;l(s)&&(s.position=e)}let i=this._backgroundBillboard;l(i)&&(i.position=e),this._updateClamping()}}},heightReference:{get:function(){return this._heightReference},set:function(e){if(e!==this._heightReference){this._heightReference=e;let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i].billboard;l(r)&&(r.heightReference=e)}let n=this._backgroundBillboard;l(n)&&(n.heightReference=e),AP(this),this._updateClamping()}}},text:{get:function(){return this._text},set:function(e){if(this._text!==e){this._text=e;let t=ah.filterUnsupportedCharacters(e);this._renderedText=ah.enableRightToLeftDetection?lKe(t):t,w_(this)}}},font:{get:function(){return this._font},set:function(e){this._font!==e&&(this._font=e,w_(this),ale(this))}},fillColor:{get:function(){return this._fillColor},set:function(e){let t=this._fillColor;D.equals(t,e)||(D.clone(e,t),w_(this))}},outlineColor:{get:function(){return this._outlineColor},set:function(e){let t=this._outlineColor;D.equals(t,e)||(D.clone(e,t),w_(this))}},outlineWidth:{get:function(){return this._outlineWidth},set:function(e){this._outlineWidth!==e&&(this._outlineWidth=e,w_(this))}},showBackground:{get:function(){return this._showBackground},set:function(e){this._showBackground!==e&&(this._showBackground=e,w_(this))}},backgroundColor:{get:function(){return this._backgroundColor},set:function(e){let t=this._backgroundColor;if(!D.equals(t,e)){D.clone(e,t);let n=this._backgroundBillboard;l(n)&&(n.color=t)}}},backgroundPadding:{get:function(){return this._backgroundPadding},set:function(e){let t=this._backgroundPadding;U.equals(t,e)||(U.clone(e,t),AP(this))}},style:{get:function(){return this._style},set:function(e){this._style!==e&&(this._style=e,w_(this))}},pixelOffset:{get:function(){return this._pixelOffset},set:function(e){let t=this._pixelOffset;if(!U.equals(t,e)){U.clone(e,t);let n=this._glyphs;for(let o=0,r=n.length;o<r;o++){let s=n[o];l(s.billboard)&&(s.billboard.pixelOffset=e)}let i=this._backgroundBillboard;l(i)&&(i.pixelOffset=e)}}},translucencyByDistance:{get:function(){return this._translucencyByDistance},set:function(e){let t=this._translucencyByDistance;if(!kt.equals(t,e)){this._translucencyByDistance=kt.clone(e,t);let n=this._glyphs;for(let o=0,r=n.length;o<r;o++){let s=n[o];l(s.billboard)&&(s.billboard.translucencyByDistance=e)}let i=this._backgroundBillboard;l(i)&&(i.translucencyByDistance=e)}}},pixelOffsetScaleByDistance:{get:function(){return this._pixelOffsetScaleByDistance},set:function(e){let t=this._pixelOffsetScaleByDistance;if(!kt.equals(t,e)){this._pixelOffsetScaleByDistance=kt.clone(e,t);let n=this._glyphs;for(let o=0,r=n.length;o<r;o++){let s=n[o];l(s.billboard)&&(s.billboard.pixelOffsetScaleByDistance=e)}let i=this._backgroundBillboard;l(i)&&(i.pixelOffsetScaleByDistance=e)}}},scaleByDistance:{get:function(){return this._scaleByDistance},set:function(e){let t=this._scaleByDistance;if(!kt.equals(t,e)){this._scaleByDistance=kt.clone(e,t);let n=this._glyphs;for(let o=0,r=n.length;o<r;o++){let s=n[o];l(s.billboard)&&(s.billboard.scaleByDistance=e)}let i=this._backgroundBillboard;l(i)&&(i.scaleByDistance=e)}}},eyeOffset:{get:function(){return this._eyeOffset},set:function(e){let t=this._eyeOffset;if(!m.equals(t,e)){m.clone(e,t);let n=this._glyphs;for(let o=0,r=n.length;o<r;o++){let s=n[o];l(s.billboard)&&(s.billboard.eyeOffset=e)}let i=this._backgroundBillboard;l(i)&&(i.eyeOffset=e)}}},horizontalOrigin:{get:function(){return this._horizontalOrigin},set:function(e){this._horizontalOrigin!==e&&(this._horizontalOrigin=e,AP(this))}},verticalOrigin:{get:function(){return this._verticalOrigin},set:function(e){if(this._verticalOrigin!==e){this._verticalOrigin=e;let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i];l(r.billboard)&&(r.billboard.verticalOrigin=e)}let n=this._backgroundBillboard;l(n)&&(n.verticalOrigin=e),AP(this)}}},scale:{get:function(){return this._scale},set:function(e){if(this._scale!==e){this._scale=e;let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i];l(r.billboard)&&(r.billboard.scale=e*this._relativeSize)}let n=this._backgroundBillboard;l(n)&&(n.scale=e*this._relativeSize),AP(this)}}},totalScale:{get:function(){return this._scale*this._relativeSize}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){if(!wt.equals(e,this._distanceDisplayCondition)){this._distanceDisplayCondition=wt.clone(e,this._distanceDisplayCondition);let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i];l(r.billboard)&&(r.billboard.distanceDisplayCondition=e)}let n=this._backgroundBillboard;l(n)&&(n.distanceDisplayCondition=e)}}},disableDepthTestDistance:{get:function(){return this._disableDepthTestDistance},set:function(e){if(this._disableDepthTestDistance!==e){this._disableDepthTestDistance=e;let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i];l(r.billboard)&&(r.billboard.disableDepthTestDistance=e)}let n=this._backgroundBillboard;l(n)&&(n.disableDepthTestDistance=e)}}},id:{get:function(){return this._id},set:function(e){if(this._id!==e){this._id=e;let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i];l(r.billboard)&&(r.billboard.id=e)}let n=this._backgroundBillboard;l(n)&&(n.id=e)}}},pickId:{get:function(){if(!(this._glyphs.length===0||!l(this._glyphs[0].billboard)))return this._glyphs[0].billboard.pickId}},_clampedPosition:{get:function(){return this._actualClampedPosition},set:function(e){this._actualClampedPosition=m.clone(e,this._actualClampedPosition);let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i];l(r.billboard)&&(r.billboard._clampedPosition=e)}let n=this._backgroundBillboard;l(n)&&(n._clampedPosition=e)}},clusterShow:{get:function(){return this._clusterShow},set:function(e){if(this._clusterShow!==e){this._clusterShow=e;let t=this._glyphs;for(let i=0,o=t.length;i<o;i++){let r=t[i];l(r.billboard)&&(r.billboard.clusterShow=e)}let n=this._backgroundBillboard;l(n)&&(n.clusterShow=e)}}}});ah.prototype._updateClamping=function(){lo._updateClamping(this._labelCollection,this)};ah.prototype.computeScreenSpacePosition=function(e,t){l(t)||(t=new U);let i=this._labelCollection.modelMatrix,o=l(this._actualClampedPosition)?this._actualClampedPosition:this._position;return lo._computeScreenSpacePosition(i,o,this._eyeOffset,this._pixelOffset,e,t)};ah.getScreenSpaceBoundingBox=function(e,t,n){let i=0,o=0,r=0,s=0,a=e.totalScale,c=e._backgroundBillboard;if(l(c))i=t.x+c._translate.x,o=t.y-c._translate.y,r=c.width*a,s=c.height*a,e.verticalOrigin===An.BOTTOM||e.verticalOrigin===An.BASELINE?o-=s:e.verticalOrigin===An.CENTER&&(o-=s*.5);else{i=Number.POSITIVE_INFINITY,o=Number.POSITIVE_INFINITY;let d=0,u=0,h=e._glyphs,p=h.length;for(let g=0;g<p;++g){let f=h[g],y=f.billboard;if(!l(y))continue;let x=t.x+y._translate.x,S=t.y-y._translate.y,C=f.dimensions.width*a,V=f.dimensions.height*a;e.verticalOrigin===An.BOTTOM||e.verticalOrigin===An.BASELINE?S-=V:e.verticalOrigin===An.CENTER&&(S-=V*.5),e._verticalOrigin===An.TOP?S+=Hs.PADDING*a:(e._verticalOrigin===An.BOTTOM||e._verticalOrigin===An.BASELINE)&&(S-=Hs.PADDING*a),i=Math.min(i,x),o=Math.min(o,S),d=Math.max(d,x+C),u=Math.max(u,S+V)}r=d-i,s=u-o}return l(n)||(n=new Ke),n.x=i,n.y=o,n.width=r,n.height=s,n};ah.filterUnsupportedCharacters=function(e){let t=new RegExp(/[\u0000-\u0008\u000E-\u001F\u00ad\u202a-\u206f\u200b-\u200f]/,"g");return e.replace(t,"")};ah.prototype.equals=function(e){return this===e||l(e)&&this._show===e._show&&this._scale===e._scale&&this._outlineWidth===e._outlineWidth&&this._showBackground===e._showBackground&&this._style===e._style&&this._verticalOrigin===e._verticalOrigin&&this._horizontalOrigin===e._horizontalOrigin&&this._heightReference===e._heightReference&&this._renderedText===e._renderedText&&this._font===e._font&&m.equals(this._position,e._position)&&D.equals(this._fillColor,e._fillColor)&&D.equals(this._outlineColor,e._outlineColor)&&D.equals(this._backgroundColor,e._backgroundColor)&&U.equals(this._backgroundPadding,e._backgroundPadding)&&U.equals(this._pixelOffset,e._pixelOffset)&&m.equals(this._eyeOffset,e._eyeOffset)&&kt.equals(this._translucencyByDistance,e._translucencyByDistance)&&kt.equals(this._pixelOffsetScaleByDistance,e._pixelOffsetScaleByDistance)&&kt.equals(this._scaleByDistance,e._scaleByDistance)&&wt.equals(this._distanceDisplayCondition,e._distanceDisplayCondition)&&this._disableDepthTestDistance===e._disableDepthTestDistance&&this._id===e._id};ah.prototype.isDestroyed=function(){return!1};ah.enableRightToLeftDetection=!1;function oKe(e,t){let n=/[a-zA-Z0-9]/,i=/[()[\]{}<>]/,o=[],r="",s=ps.LTR,a="",c=e.length;for(let d=0;d<c;++d){let u=e.charAt(d);t.test(u)?a=ps.RTL:n.test(u)?a=ps.LTR:i.test(u)?a=ps.BRACKETS:a=ps.WEAK,d===0&&(s=a),s===a&&a!==ps.BRACKETS?r+=u:(r!==""&&o.push({Type:s,Word:r}),s=a,r=u)}return o.push({Type:a,Word:r}),o}function rKe(e){return e.split("").reverse().join("")}function NP(e,t,n){return e.slice(0,t)+n+e.slice(t)}function sKe(e){switch(e){case"(":return")";case")":return"(";case"[":return"]";case"]":return"[";case"{":return"}";case"}":return"{";case"<":return">";case">":return"<"}}var aKe="\u05D0-\u05EA",cKe="\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF",sle=new RegExp(`[${aKe}${cKe}]`);function lKe(e){let t=e.split(` `),n="";for(let i=0;i<t.length;i++){let o=t[i],r=sle.test(o.charAt(0)),s=oKe(o,sle),a=0,c="";for(let d=0;d<s.length;++d){let u=s[d],h=u.Type===ps.BRACKETS?sKe(u.Word):rKe(u.Word);r?u.Type===ps.RTL?(c=h+c,a=0):u.Type===ps.LTR?(c=NP(c,a,u.Word),a+=u.Word.length):(u.Type===ps.WEAK||u.Type===ps.BRACKETS)&&(u.Type===ps.WEAK&&s[d-1].Type===ps.BRACKETS?c=h+c:s[d-1].Type===ps.RTL?(c=h+c,a=0):s.length>d+1?s[d+1].Type===ps.RTL?(c=h+c,a=0):(c=NP(c,a,u.Word),a+=u.Word.length):c=NP(c,0,h)):u.Type===ps.RTL?c=NP(c,a,h):u.Type===ps.LTR?(c+=u.Word,a=c.length):(u.Type===ps.WEAK||u.Type===ps.BRACKETS)&&(d>0&&s[d-1].Type===ps.RTL?s.length>d+1?s[d+1].Type===ps.RTL?c=NP(c,a,h):(c+=u.Word,a=c.length):c+=u.Word:(c+=u.Word,a=c.length))}n+=c,i<t.length-1&&(n+=` `)}return n}var wg=ah;var mle=_(cle(),1);function uKe(){this.dimensions=void 0,this.billboardTexture=void 0,this.billboard=void 0}var mKe=1.2,lle="ID_WHITE_PIXEL",OH=new U(4,4),hKe=new Ke(1,1,1,1);function fKe(e,t){let n=t._backgroundBillboardTexture;if(!n.hasImage){let o=document.createElement("canvas");o.width=OH.x,o.height=OH.y;let r=o.getContext("2d");r.fillStyle="#fff",r.fillRect(0,0,o.width,o.height),n.loadImage(lle,o),n.addImageSubRegion(lle,hKe)}let i=e.add({collection:t});return i.setImageTexture(n),i}var Tb={};function pKe(e,t,n,i,o,r){return Tb.font=t,Tb.fillColor=n,Tb.strokeColor=i,Tb.strokeWidth=o,Tb.padding=Hs.PADDING,Tb.fill=r===Do.FILL||r===Do.FILL_AND_OUTLINE,Tb.stroke=r===Do.OUTLINE||r===Do.FILL_AND_OUTLINE,Tb.backgroundColor=D.BLACK,v_(e,Tb)}function YH(e,t){let n=t.billboard;l(n)&&(n.show=!1,l(n._removeCallbackFunc)&&(n._removeCallbackFunc(),n._removeCallbackFunc=void 0),e._spareBillboards.push(n),t.billboard=void 0)}var bKe=new mle.default,gKe=/\s/;function yKe(e,t){let n=t._renderedText,i=bKe.splitGraphemes(n),o=i.length,r=t._glyphs,s=r.length;if(t._relativeSize=t._fontSize/Hs.FONT_SIZE,o<s)for(let g=o;g<s;++g)YH(e,r[g]);r.length=o;let a=t.show&&t._showBackground&&n.split(` `).join("").length>0,c=t._backgroundBillboard,d=e._backgroundBillboardCollection;a?(l(c)||(c=fKe(d,e),t._backgroundBillboard=c),c.color=t._backgroundColor,c.show=t._show,c.position=t._position,c.eyeOffset=t._eyeOffset,c.pixelOffset=t._pixelOffset,c.horizontalOrigin=_i.LEFT,c.verticalOrigin=t._verticalOrigin,c.heightReference=t._heightReference,c.scale=t.totalScale,c.pickPrimitive=t,c.id=t._id,c.translucencyByDistance=t._translucencyByDistance,c.pixelOffsetScaleByDistance=t._pixelOffsetScaleByDistance,c.scaleByDistance=t._scaleByDistance,c.distanceDisplayCondition=t._distanceDisplayCondition,c.disableDepthTestDistance=t._disableDepthTestDistance,c.clusterShow=t.clusterShow):l(c)&&(d.remove(c),t._backgroundBillboard=c=void 0);let u=e._glyphBillboardCollection,h=u.billboardTextureCache,p=e._textDimensionsCache;for(let g=0;g<o;++g){let f=i[g],y=t._verticalOrigin,x=JSON.stringify([f,t._fontFamily,t._fontStyle,t._fontWeight,+y]),S=p[x],C=h.get(x);if(!l(C)||!l(S)){C=new xb(u),h.set(x,C);let E=`${t._fontStyle} ${t._fontWeight} ${Hs.FONT_SIZE}px ${t._fontFamily}`,P=pKe(f,E,D.WHITE,D.WHITE,0,Do.FILL);if(S=P.dimensions,p[x]=S,P.width>0&&P.height>0&&!gKe.test(f)){let W=(0,ule.default)(P,{cutoff:Hs.CUTOFF,radius:Hs.RADIUS}),v=P.getContext("2d"),A=P.width,b=P.height,R=v.getImageData(0,0,A,b);for(let G=0;G<A;G++)for(let I=0;I<b;I++){let w=I*A+G,M=W[w]*255,B=w*4;R.data[B+0]=M,R.data[B+1]=M,R.data[B+2]=M,R.data[B+3]=M}v.putImageData(R,0,0),C.loadImage(x,P)}}let V=r[g];if(l(V)||(V=new uKe,V.dimensions=S,V.billboardTexture=C,r[g]=V),V.billboardTexture.id!==x&&(V.billboardTexture=C,V.dimensions=S),!C.hasImage){YH(e,V);continue}let L=V.billboard,Z=e._spareBillboards;l(L)||(Z.length>0?L=Z.pop():(L=u.add({collection:e}),L._labelDimensions=new U,L._labelTranslate=new U),V.billboard=L),L.setImageTexture(C),L.show=t._show,L.position=t._position,L.eyeOffset=t._eyeOffset,L.pixelOffset=t._pixelOffset,L.horizontalOrigin=_i.LEFT,L.verticalOrigin=t._verticalOrigin,L.heightReference=t._heightReference,L.scale=t.totalScale,L.pickPrimitive=t,L.id=t._id,L.translucencyByDistance=t._translucencyByDistance,L.pixelOffsetScaleByDistance=t._pixelOffsetScaleByDistance,L.scaleByDistance=t._scaleByDistance,L.distanceDisplayCondition=t._distanceDisplayCondition,L.disableDepthTestDistance=t._disableDepthTestDistance,L._batchIndex=t._batchIndex,L.outlineColor=t.outlineColor,t.style===Do.FILL_AND_OUTLINE?(L.color=t._fillColor,L.outlineWidth=t.outlineWidth):t.style===Do.FILL?(L.color=t._fillColor,L.outlineWidth=0):t.style===Do.OUTLINE&&(L.color=D.TRANSPARENT,L.outlineWidth=t.outlineWidth)}t._repositionAllGlyphs=!0}function dle(e,t,n){return t===_i.CENTER?-e/2:t===_i.RIGHT?-(e+n.x):n.x}var lr=new U,xKe=new U;function _Ke(e){let t=e._glyphs,n=e._renderedText,i=0,o=0,r=[],s=Number.NEGATIVE_INFINITY,a=0,c=1,d=t.length,u=e._backgroundBillboard,h=U.clone(l(u)?e._backgroundPadding:U.ZERO,xKe);h.x/=e._relativeSize,h.y/=e._relativeSize;for(let v=0;v<d;++v){if(n.charAt(v)===` `){r.push(i),++c,i=0;continue}let b=t[v].dimensions;l(b)&&(a=Math.max(a,b.height-b.descent),s=Math.max(s,b.descent),i+=b.width-b.minx,v<d-1&&(i+=t[v+1].dimensions.minx),o=Math.max(o,i))}r.push(i);let p=a+s,g=e.totalScale,f=e._horizontalOrigin,y=e._verticalOrigin,x=0,S=r[x],C=dle(S,f,h),V=(l(e._lineHeight)?e._lineHeight:mKe*e._fontSize)/e._relativeSize,L=V*(c-1),Z=o,E=p+L;l(u)&&(Z+=h.x*2,E+=h.y*2,u._labelHorizontalOrigin=f),lr.x=C*g,lr.y=0;let P=!0,W=0;for(let v=0;v<d;++v){if(n.charAt(v)===` `){++x,W+=V,S=r[x],C=dle(S,f,h),lr.x=C*g,P=!0;continue}let A=t[v],b=A.dimensions;if(l(b)&&(y===An.TOP?(lr.y=b.height-a-h.y,lr.y+=Hs.PADDING):y===An.CENTER?lr.y=(L+b.height-a)/2:y===An.BASELINE?(lr.y=L,lr.y-=Hs.PADDING):(lr.y=L+s+h.y,lr.y-=Hs.PADDING),lr.y=(lr.y-b.descent-W)*g,P&&(lr.x-=Hs.PADDING*g,P=!1),l(A.billboard)&&(A.billboard._setTranslate(lr),A.billboard._labelDimensions.x=Z,A.billboard._labelDimensions.y=E,A.billboard._labelHorizontalOrigin=f),v<d-1)){let R=t[v+1];lr.x+=(b.width-b.minx+R.dimensions.minx)*g}}if(l(u)&&n.split(` `).join("").length>0&&(f===_i.CENTER?C=-o/2-h.x:f===_i.RIGHT?C=-(o+h.x*2):C=0,lr.x=C*g,y===An.TOP?lr.y=p-a-s:y===An.CENTER?lr.y=(p-a)/2-s:y===An.BASELINE?lr.y=-h.y-s:lr.y=0,lr.y=lr.y*g,u.width=Z,u.height=E,u._setTranslate(lr),u._labelTranslate=U.clone(lr,u._labelTranslate)),Ru(e.heightReference))for(let v=0;v<d;++v){let b=t[v].billboard;l(b)&&(b._labelTranslate=U.clone(lr,b._labelTranslate))}}function hle(e,t){let n=t._glyphs;for(let i=0,o=n.length;i<o;++i)YH(e,n[i]);l(t._backgroundBillboard)&&(e._backgroundBillboardCollection.remove(t._backgroundBillboard),t._backgroundBillboard=void 0),t._labelCollection=void 0,l(t._removeCallbackFunc)&&t._removeCallbackFunc(),me(t)}function Rf(e){e=e??Y.EMPTY_OBJECT,this._scene=e.scene,this._batchTable=e.batchTable;let t=new Ed({scene:this._scene,textureAtlas:new Vx({initialSize:OH})});this._backgroundBillboardCollection=t,this._backgroundBillboardTexture=new xb(t),this._glyphBillboardCollection=new Ed({scene:this._scene,batchTable:this._batchTable}),this._glyphBillboardCollection._sdf=!0,this._spareBillboards=[],this._textDimensionsCache={},this._labels=[],this._labelsToUpdate=[],this._totalGlyphCount=0,this._highlightColor=D.clone(D.WHITE),this.show=e.show??!0,this.modelMatrix=F.clone(e.modelMatrix??F.IDENTITY),this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this.blendOption=e.blendOption??Lo.OPAQUE_AND_TRANSLUCENT}Object.defineProperties(Rf.prototype,{length:{get:function(){return this._labels.length}},sizeInBytes:{get:function(){return this._glyphBillboardCollection.sizeInBytes+this._backgroundBillboardCollection.sizeInBytes}},ready:{get:function(){let e=this._backgroundBillboardCollection.get(0);return l(e)&&!e.ready?!1:this._glyphBillboardCollection.ready}}});Rf.prototype.add=function(e){let t=new wg(e,this);return this._labels.push(t),this._labelsToUpdate.push(t),t};Rf.prototype.remove=function(e){if(l(e)&&e._labelCollection===this){let t=this._labels.indexOf(e);if(t!==-1)return this._labels.splice(t,1),hle(this,e),!0}return!1};Rf.prototype.removeAll=function(){let e=this._labels;for(let t=0,n=e.length;t<n;++t)hle(this,e[t]);e.length=0};Rf.prototype.contains=function(e){return l(e)&&e._labelCollection===this};Rf.prototype.get=function(e){return this._labels[e]};Rf.prototype.update=function(e){if(!this.show)return;let t=this._glyphBillboardCollection,n=this._backgroundBillboardCollection;t.modelMatrix=this.modelMatrix,t.debugShowBoundingVolume=this.debugShowBoundingVolume,n.modelMatrix=this.modelMatrix,n.debugShowBoundingVolume=this.debugShowBoundingVolume;let i=this._labelsToUpdate.length;for(let r=0;r<i;++r){let s=this._labelsToUpdate[r];if(s.isDestroyed())continue;let a=s._glyphs.length;s._rebindAllGlyphs&&(yKe(this,s),s._rebindAllGlyphs=!1),s._repositionAllGlyphs&&(_Ke(s),s._repositionAllGlyphs=!1);let c=s._glyphs.length-a;this._totalGlyphCount+=c}let o=n.length>0?Lo.TRANSLUCENT:this.blendOption;t.blendOption=o,n.blendOption=o,t._highlightColor=this._highlightColor,n._highlightColor=this._highlightColor,this._labelsToUpdate.length=0,n.update(e),t.update(e)};Rf.prototype.isDestroyed=function(){return!1};Rf.prototype.destroy=function(){return this.removeAll(),this._glyphBillboardCollection=this._glyphBillboardCollection.destroy(),this._backgroundBillboardCollection=this._backgroundBillboardCollection.destroy(),me(this)};var Zf=Rf;var H9n=_(T(),1);var MFn=_(T(),1),kP=`in vec3 position3DHigh; in vec3 position3DLow; in vec3 position2DHigh; in vec3 position2DLow; in vec3 prevPosition3DHigh; in vec3 prevPosition3DLow; in vec3 prevPosition2DHigh; in vec3 prevPosition2DLow; in vec3 nextPosition3DHigh; in vec3 nextPosition3DLow; in vec3 nextPosition2DHigh; in vec3 nextPosition2DLow; in vec4 texCoordExpandAndBatchIndex; out vec2 v_st; out float v_width; out vec4 v_pickColor; out float v_polylineAngle; void main() { float texCoord = texCoordExpandAndBatchIndex.x; float expandDir = texCoordExpandAndBatchIndex.y; bool usePrev = texCoordExpandAndBatchIndex.z < 0.0; float batchTableIndex = texCoordExpandAndBatchIndex.w; vec2 widthAndShow = batchTable_getWidthAndShow(batchTableIndex); float width = widthAndShow.x + 0.5; float show = widthAndShow.y; if (width < 1.0) { show = 0.0; } vec4 pickColor = batchTable_getPickColor(batchTableIndex); vec4 p, prev, next; if (czm_morphTime == 1.0) { p = czm_translateRelativeToEye(position3DHigh.xyz, position3DLow.xyz); prev = czm_translateRelativeToEye(prevPosition3DHigh.xyz, prevPosition3DLow.xyz); next = czm_translateRelativeToEye(nextPosition3DHigh.xyz, nextPosition3DLow.xyz); } else if (czm_morphTime == 0.0) { p = czm_translateRelativeToEye(position2DHigh.zxy, position2DLow.zxy); prev = czm_translateRelativeToEye(prevPosition2DHigh.zxy, prevPosition2DLow.zxy); next = czm_translateRelativeToEye(nextPosition2DHigh.zxy, nextPosition2DLow.zxy); } else { p = czm_columbusViewMorph( czm_translateRelativeToEye(position2DHigh.zxy, position2DLow.zxy), czm_translateRelativeToEye(position3DHigh.xyz, position3DLow.xyz), czm_morphTime); prev = czm_columbusViewMorph( czm_translateRelativeToEye(prevPosition2DHigh.zxy, prevPosition2DLow.zxy), czm_translateRelativeToEye(prevPosition3DHigh.xyz, prevPosition3DLow.xyz), czm_morphTime); next = czm_columbusViewMorph( czm_translateRelativeToEye(nextPosition2DHigh.zxy, nextPosition2DLow.zxy), czm_translateRelativeToEye(nextPosition3DHigh.xyz, nextPosition3DLow.xyz), czm_morphTime); } #ifdef DISTANCE_DISPLAY_CONDITION vec3 centerHigh = batchTable_getCenterHigh(batchTableIndex); vec4 centerLowAndRadius = batchTable_getCenterLowAndRadius(batchTableIndex); vec3 centerLow = centerLowAndRadius.xyz; float radius = centerLowAndRadius.w; vec2 distanceDisplayCondition = batchTable_getDistanceDisplayCondition(batchTableIndex); float lengthSq; if (czm_sceneMode == czm_sceneMode2D) { lengthSq = czm_eyeHeight2D.y; } else { vec4 center = czm_translateRelativeToEye(centerHigh.xyz, centerLow.xyz); lengthSq = max(0.0, dot(center.xyz, center.xyz) - radius * radius); } float nearSq = distanceDisplayCondition.x * distanceDisplayCondition.x; float farSq = distanceDisplayCondition.y * distanceDisplayCondition.y; if (lengthSq < nearSq || lengthSq > farSq) { show = 0.0; } #endif float polylineAngle; vec4 positionWC = getPolylineWindowCoordinates(p, prev, next, expandDir, width, usePrev, polylineAngle); gl_Position = czm_viewportOrthographic * positionWC * show; v_st.s = texCoord; v_st.t = czm_writeNonPerspective(clamp(expandDir, 0.0, 1.0), gl_Position.w); v_width = width; v_pickColor = pickColor; v_polylineAngle = polylineAngle; } `;var c9n=_(T(),1);var QFn=_(T(),1);var ol={};ol.numberOfPoints=function(e,t,n){let i=m.distance(e,t);return Math.ceil(i/n)};ol.numberOfPointsRhumbLine=function(e,t,n){let i=Math.pow(e.longitude-t.longitude,2)+Math.pow(e.latitude-t.latitude,2);return Math.max(1,Math.ceil(Math.sqrt(i/(n*n))))};var TKe=new he;ol.extractHeights=function(e,t){let n=e.length,i=new Array(n);for(let o=0;o<n;o++){let r=e[o];i[o]=t.cartesianToCartographic(r,TKe).height}return i};var SKe=new F,CKe=new m,fle=new m,VKe=new sn(m.UNIT_X,0),ple=new m,LKe=new sn(m.UNIT_X,0),RKe=new m,ZKe=new m,HH=[];function gle(e,t,n){let i=HH;i.length=e;let o;if(t===n){for(o=0;o<e;o++)i[o]=t;return i}let s=(n-t)/e;for(o=0;o<e;o++){let a=t+o*s;i[o]=a}return i}var dk=new he,lk=new he,Fg=new m,KH=new m,GKe=new m,zH=new Fp,UP=new wa;function EKe(e,t,n,i,o,r,s,a){let c=i.scaleToGeodeticSurface(e,KH),d=i.scaleToGeodeticSurface(t,GKe),u=ol.numberOfPoints(e,t,n),h=i.cartesianToCartographic(c,dk),p=i.cartesianToCartographic(d,lk),g=gle(u,o,r);zH.setEndPoints(h,p);let f=zH.surfaceDistance/u,y=a;h.height=o;let x=i.cartographicToCartesian(h,Fg);m.pack(x,s,y),y+=3;for(let S=1;S<u;S++){let C=zH.interpolateUsingSurfaceDistance(S*f,lk);C.height=g[S],x=i.cartographicToCartesian(C,Fg),m.pack(x,s,y),y+=3}return y}function IKe(e,t,n,i,o,r,s,a){let c=i.cartesianToCartographic(e,dk),d=i.cartesianToCartographic(t,lk),u=ol.numberOfPointsRhumbLine(c,d,n);c.height=0,d.height=0;let h=gle(u,o,r);UP.ellipsoid.equals(i)||(UP=new wa(void 0,void 0,i)),UP.setEndPoints(c,d);let p=UP.surfaceDistance/u,g=a;c.height=o;let f=i.cartographicToCartesian(c,Fg);m.pack(f,s,g),g+=3;for(let y=1;y<u;y++){let x=UP.interpolateUsingSurfaceDistance(y*p,lk);x.height=h[y],f=i.cartographicToCartesian(x,Fg),m.pack(f,s,g),g+=3}return g}ol.wrapLongitude=function(e,t){let n=[],i=[];if(l(e)&&e.length>0){t=t??F.IDENTITY;let o=F.inverseTransformation(t,SKe),r=F.multiplyByPoint(o,m.ZERO,CKe),s=m.normalize(F.multiplyByPointAsVector(o,m.UNIT_Y,fle),fle),a=sn.fromPointNormal(r,s,VKe),c=m.normalize(F.multiplyByPointAsVector(o,m.UNIT_X,ple),ple),d=sn.fromPointNormal(r,c,LKe),u=1;n.push(m.clone(e[0]));let h=n[0],p=e.length;for(let g=1;g<p;++g){let f=e[g];if(sn.getPointDistance(d,h)<0||sn.getPointDistance(d,f)<0){let y=qn.lineSegmentPlane(h,f,a,RKe);if(l(y)){let x=m.multiplyByScalar(s,5e-9,ZKe);sn.getPointDistance(a,h)<0&&m.negate(x,x),n.push(m.add(y,x,new m)),i.push(u+1),m.negate(x,x),n.push(m.add(y,x,new m)),u=1}}n.push(m.clone(e[g])),u++,h=f}i.push(u)}return{positions:n,lengths:i}};ol.generateArc=function(e){l(e)||(e={});let t=e.positions,n=t.length,i=e.ellipsoid??ne.default,o=e.height??0,r=Array.isArray(o);if(n<1)return[];if(n===1){let y=i.scaleToGeodeticSurface(t[0],KH);if(o=r?o[0]:o,o!==0){let x=i.geodeticSurfaceNormal(y,Fg);m.multiplyByScalar(x,o,x),m.add(y,x,y)}return[y.x,y.y,y.z]}let s=e.minDistance;if(!l(s)){let y=e.granularity??X.RADIANS_PER_DEGREE;s=X.chordLength(y,i.maximumRadius)}let a=0,c;for(c=0;c<n-1;c++)a+=ol.numberOfPoints(t[c],t[c+1],s);let d=(a+1)*3,u=new Array(d),h=0;for(c=0;c<n-1;c++){let y=t[c],x=t[c+1],S=r?o[c]:o,C=r?o[c+1]:o;h=EKe(y,x,s,i,S,C,u,h)}HH.length=0;let p=t[n-1],g=i.cartesianToCartographic(p,dk);g.height=r?o[n-1]:o;let f=i.cartographicToCartesian(g,Fg);return m.pack(f,u,d-3),u};var ble=new he,XKe=new he;ol.generateRhumbArc=function(e){l(e)||(e={});let t=e.positions,n=t.length,i=e.ellipsoid??ne.default,o=e.height??0,r=Array.isArray(o);if(n<1)return[];if(n===1){let S=i.scaleToGeodeticSurface(t[0],KH);if(o=r?o[0]:o,o!==0){let C=i.geodeticSurfaceNormal(S,Fg);m.multiplyByScalar(C,o,C),m.add(S,C,S)}return[S.x,S.y,S.z]}let s=e.granularity??X.RADIANS_PER_DEGREE,a=0,c,d=i.cartesianToCartographic(t[0],ble),u;for(c=0;c<n-1;c++)u=i.cartesianToCartographic(t[c+1],XKe),a+=ol.numberOfPointsRhumbLine(d,u,s),d=he.clone(u,ble);let h=(a+1)*3,p=new Array(h),g=0;for(c=0;c<n-1;c++){let S=t[c],C=t[c+1],V=r?o[c]:o,L=r?o[c+1]:o;g=IKe(S,C,s,i,V,L,p,g)}HH.length=0;let f=t[n-1],y=i.cartesianToCartographic(f,dk);y.height=r?o[n-1]:o;let x=i.cartographicToCartesian(y,Fg);return m.pack(x,p,h-3),p};ol.generateCartesianArc=function(e){let t=ol.generateArc(e),n=t.length/3,i=new Array(n);for(let o=0;o<n;o++)i[o]=m.unpack(t,o*3);return i};ol.generateCartesianRhumbArc=function(e){let t=ol.generateRhumbArc(e),n=t.length/3,i=new Array(n);for(let o=0;o<n;o++)i[o]=m.unpack(t,o*3);return i};var Pi=ol;function Id(e,t){e=e??Y.EMPTY_OBJECT,this._show=e.show??!0,this._width=e.width??1,this._loop=e.loop??!1,this._distanceDisplayCondition=e.distanceDisplayCondition,this._material=e.material,l(this._material)||(this._material=zi.fromType(zi.ColorType,{color:new D(1,1,1,1)}));let n=e.positions;l(n)||(n=[]),this._positions=n,this._actualPositions=_o(n,m.equalsEpsilon),this._loop&&this._actualPositions.length>2&&(this._actualPositions===this._positions&&(this._actualPositions=n.slice()),this._actualPositions.push(m.clone(this._actualPositions[0]))),this._length=this._actualPositions.length,this._id=e.id;let i;l(t)&&(i=F.clone(t.modelMatrix)),this._modelMatrix=i,this._segments=Pi.wrapLongitude(this._actualPositions,i),this._actualLength=void 0,this._propertiesChanged=new Uint32Array(xle),this._polylineCollection=t,this._dirty=!1,this._pickId=void 0,this._boundingVolume=le.fromPoints(this._actualPositions),this._boundingVolumeWC=le.transform(this._boundingVolume,this._modelMatrix),this._boundingVolume2D=new le}var yle=Id.POSITION_INDEX=0,WKe=Id.SHOW_INDEX=1,PKe=Id.WIDTH_INDEX=2,vKe=Id.MATERIAL_INDEX=3,DP=Id.POSITION_SIZE_INDEX=4,wKe=Id.DISTANCE_DISPLAY_CONDITION=5,xle=Id.NUMBER_OF_PROPERTIES=6;function Sb(e,t){++e._propertiesChanged[t];let n=e._polylineCollection;l(n)&&(n._updatePolyline(e,t),e._dirty=!0)}Object.defineProperties(Id.prototype,{show:{get:function(){return this._show},set:function(e){e!==this._show&&(this._show=e,Sb(this,WKe))}},positions:{get:function(){return this._positions},set:function(e){let t=_o(e,m.equalsEpsilon);this._loop&&t.length>2&&(t===e&&(t=e.slice()),t.push(m.clone(t[0]))),(this._actualPositions.length!==t.length||this._actualPositions.length!==this._length)&&Sb(this,DP),this._positions=e,this._actualPositions=t,this._length=t.length,this._boundingVolume=le.fromPoints(this._actualPositions,this._boundingVolume),this._boundingVolumeWC=le.transform(this._boundingVolume,this._modelMatrix,this._boundingVolumeWC),Sb(this,yle),this.update()}},material:{get:function(){return this._material},set:function(e){this._material!==e&&(this._material=e,Sb(this,vKe))}},width:{get:function(){return this._width},set:function(e){let t=this._width;e!==t&&(this._width=e,Sb(this,PKe))}},loop:{get:function(){return this._loop},set:function(e){if(e!==this._loop){let t=this._actualPositions;e?t.length>2&&!m.equals(t[0],t[t.length-1])&&(t.length===this._positions.length&&(this._actualPositions=t=this._positions.slice()),t.push(m.clone(t[0]))):t.length>2&&m.equals(t[0],t[t.length-1])&&(t.length-1===this._positions.length?this._actualPositions=this._positions:t.pop()),this._loop=e,Sb(this,DP)}}},id:{get:function(){return this._id},set:function(e){this._id=e,l(this._pickId)&&(this._pickId.object.id=e)}},pickId:{get:function(){return this._pickId}},isDestroyed:{get:function(){return!l(this._polylineCollection)}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){wt.equals(e,this._distanceDisplayCondition)||(this._distanceDisplayCondition=wt.clone(e,this._distanceDisplayCondition),Sb(this,wKe))}}});Id.prototype.update=function(){let e=F.IDENTITY;l(this._polylineCollection)&&(e=this._polylineCollection.modelMatrix);let t=this._segments.positions.length,n=this._segments.lengths,i=this._propertiesChanged[yle]>0||this._propertiesChanged[DP]>0;if((!F.equals(e,this._modelMatrix)||i)&&(this._segments=Pi.wrapLongitude(this._actualPositions,e),this._boundingVolumeWC=le.transform(this._boundingVolume,e,this._boundingVolumeWC)),this._modelMatrix=F.clone(e,this._modelMatrix),this._segments.positions.length!==t)Sb(this,DP);else{let o=n.length;for(let r=0;r<o;++r)if(n[r]!==this._segments.lengths[r]){Sb(this,DP);break}}};Id.prototype.getPickId=function(e){return l(this._pickId)||(this._pickId=e.createPickId({primitive:this,collection:this._polylineCollection,id:this._id})),this._pickId};Id.prototype._clean=function(){this._dirty=!1;let e=this._propertiesChanged;for(let t=0;t<xle-1;++t)e[t]=0};Id.prototype._destroy=function(){this._pickId=this._pickId&&this._pickId.destroy(),this._material=this._material&&this._material.destroy(),this._polylineCollection=void 0};var Uu=Id;var FKe=Uu.SHOW_INDEX,AKe=Uu.WIDTH_INDEX,QH=Uu.POSITION_INDEX,MKe=Uu.MATERIAL_INDEX,_le=Uu.POSITION_SIZE_INDEX,NKe=Uu.DISTANCE_DISPLAY_CONDITION,Zle=Uu.NUMBER_OF_PROPERTIES,Bl={texCoordExpandAndBatchIndex:0,position3DHigh:1,position3DLow:2,position2DHigh:3,position2DLow:4,prevPosition3DHigh:5,prevPosition3DLow:6,prevPosition2DHigh:7,prevPosition2DLow:8,nextPosition3DHigh:9,nextPosition3DLow:10,nextPosition2DHigh:11,nextPosition2DLow:12};function ch(e){e=e??Y.EMPTY_OBJECT,this.show=e.show??!0,this.modelMatrix=F.clone(e.modelMatrix??F.IDENTITY),this._modelMatrix=F.clone(F.IDENTITY),this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this._opaqueRS=void 0,this._translucentRS=void 0,this._colorCommands=[],this._polylinesUpdated=!1,this._polylinesRemoved=!1,this._createVertexArray=!1,this._propertiesChanged=new Uint32Array(Zle),this._polylines=[],this._polylineBuckets={},this._positionBufferUsage={bufferUsage:Me.STATIC_DRAW,frameCount:0},this._mode=void 0,this._polylinesToUpdate=[],this._vertexArrays=[],this._positionBuffer=void 0,this._texCoordExpandAndBatchIndexBuffer=void 0,this._batchTable=void 0,this._createBatchTable=!1,this._useHighlightColor=!1,this._highlightColor=D.clone(D.WHITE);let t=this;this._uniformMap={u_highlightColor:function(){return t._highlightColor}}}Object.defineProperties(ch.prototype,{length:{get:function(){return jH(this),this._polylines.length}}});ch.prototype.add=function(e){let t=new Uu(e,this);return t._index=this._polylines.length,this._polylines.push(t),this._createVertexArray=!0,this._createBatchTable=!0,t};ch.prototype.remove=function(e){if(this.contains(e)){if(this._polylinesRemoved=!0,this._createVertexArray=!0,this._createBatchTable=!0,l(e._bucket)){let t=e._bucket;t.shaderProgram=t.shaderProgram&&t.shaderProgram.destroy()}return e._destroy(),!0}return!1};ch.prototype.removeAll=function(){qH(this),Wle(this),this._polylineBuckets={},this._polylinesRemoved=!1,this._polylines.length=0,this._polylinesToUpdate.length=0,this._createVertexArray=!0};ch.prototype.contains=function(e){return l(e)&&e._polylineCollection===this};ch.prototype.get=function(e){return jH(this),this._polylines[e]};function kKe(e,t){l(e._batchTable)&&e._batchTable.destroy();let n=[{functionName:"batchTable_getWidthAndShow",componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:2},{functionName:"batchTable_getPickColor",componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:4,normalize:!0},{functionName:"batchTable_getCenterHigh",componentDatatype:Q.FLOAT,componentsPerAttribute:3},{functionName:"batchTable_getCenterLowAndRadius",componentDatatype:Q.FLOAT,componentsPerAttribute:4},{functionName:"batchTable_getDistanceDisplayCondition",componentDatatype:Q.FLOAT,componentsPerAttribute:2}];e._batchTable=new Ex(t,n,e._polylines.length)}var Gle=new On,Ele=new se,Ile=new U;ch.prototype.update=function(e){if(jH(this),this._polylines.length===0||!this.show)return;zKe(this,e);let t=e.context,n=e.mapProjection,i,o=this._propertiesChanged;if(this._createBatchTable){if(Nt.maximumVertexTextureImageUnits===0)throw new ae("Vertex texture fetch support is required to render polylines. The maximum number of vertex texture image units must be greater than zero.");kKe(this,t),this._createBatchTable=!1}if(this._createVertexArray||DKe(this))Cle(this,t,n);else if(this._polylinesUpdated){let c=this._polylinesToUpdate;if(this._mode!==oe.SCENE3D){let d=c.length;for(let u=0;u<d;++u)i=c[u],i.update()}if(o[_le]||o[MKe])Cle(this,t,n);else{let d=c.length,u=this._polylineBuckets;for(let h=0;h<d;++h){i=c[h],o=i._propertiesChanged;let p=i._bucket,g=0;for(let f in u)if(u.hasOwnProperty(f)){if(u[f]===p){o[QH]&&p.writeUpdate(g,i,this._positionBuffer,n);break}g+=u[f].lengthOfPositions}if((o[FKe]||o[AKe])&&this._batchTable.setBatchedAttribute(i._index,0,new U(i._width,i._show)),this._batchTable.attributes.length>2){if(o[QH]||o[_le]){let f=e.mode===oe.SCENE2D?i._boundingVolume2D:i._boundingVolumeWC,y=On.fromCartesian(f.center,Gle),x=se.fromElements(y.low.x,y.low.y,y.low.z,f.radius,Ele);this._batchTable.setBatchedAttribute(i._index,2,y.high),this._batchTable.setBatchedAttribute(i._index,3,x)}if(o[NKe]){let f=Ile;f.x=0,f.y=Number.MAX_VALUE;let y=i.distanceDisplayCondition;l(y)&&(f.x=y.near,f.y=y.far),this._batchTable.setBatchedAttribute(i._index,4,f)}}i._clean()}}c.length=0,this._polylinesUpdated=!1}o=this._propertiesChanged;for(let c=0;c<Zle;++c)o[c]=0;let r=F.IDENTITY;e.mode===oe.SCENE3D&&(r=this.modelMatrix);let s=e.passes,a=e.morphTime!==0;if((!l(this._opaqueRS)||this._opaqueRS.depthTest.enabled!==a)&&(this._opaqueRS=Ue.fromCache({depthMask:a,depthTest:{enabled:a}})),(!l(this._translucentRS)||this._translucentRS.depthTest.enabled!==a)&&(this._translucentRS=Ue.fromCache({blending:un.ALPHA_BLEND,depthMask:!a,depthTest:{enabled:a}})),this._batchTable.update(e),s.render||s.pick){let c=this._colorCommands;UKe(this,e,c,r)}};var BP=new le,Tle=new le;function UKe(e,t,n,i){let o=t.context,r=t.commandList,s=n.length,a=0,c=!0,d=e._vertexArrays,u=e.debugShowBoundingVolume,p=e._batchTable.getUniformMapCallback(),g=d.length;for(let f=0;f<g;++f){let y=d[f],x=y.buckets,S=x.length;for(let C=0;C<S;++C){let V=x[C],L=V.offset,Z=V.bucket.shaderProgram,E=V.bucket.polylines,P=E.length,W,v,A=0,b,R;for(let G=0;G<P;++G){let I=E[G],w=OKe(I._material);if(w!==W){if(l(W)&&A>0){let O=v.isTranslucent();a>=s?(b=new $e({owner:e}),n.push(b)):b=n[a],++a,R=St(p(v._uniforms),e._uniformMap),b.boundingVolume=le.clone(BP,b.boundingVolume),b.modelMatrix=i,b.shaderProgram=Z,b.vertexArray=y.va,b.renderState=O?e._translucentRS:e._opaqueRS,b.pass=O?Ee.TRANSLUCENT:Ee.OPAQUE,b.debugShowBoundingVolume=u,b.pickId="v_pickColor",b.uniformMap=R,b.count=A,b.offset=L,L+=A,A=0,c=!0,r.push(b)}v=I._material,v.update(o),W=w}let M=I._locatorBuckets,B=M.length;for(let O=0;O<B;++O){let N=M[O];N.locator===V&&(A+=N.count)}let k;t.mode===oe.SCENE3D?k=I._boundingVolumeWC:t.mode===oe.COLUMBUS_VIEW?k=I._boundingVolume2D:t.mode===oe.SCENE2D?l(I._boundingVolume2D)&&(k=le.clone(I._boundingVolume2D,Tle),k.center.x=0):l(I._boundingVolumeWC)&&l(I._boundingVolume2D)&&(k=le.union(I._boundingVolumeWC,I._boundingVolume2D,Tle)),c?(c=!1,le.clone(k,BP)):le.union(k,BP,BP)}l(W)&&A>0&&(a>=s?(b=new $e({owner:e}),n.push(b)):b=n[a],++a,R=St(p(v._uniforms),e._uniformMap),b.boundingVolume=le.clone(BP,b.boundingVolume),b.modelMatrix=i,b.shaderProgram=Z,b.vertexArray=y.va,b.renderState=v.isTranslucent()?e._translucentRS:e._opaqueRS,b.pass=v.isTranslucent()?Ee.TRANSLUCENT:Ee.OPAQUE,b.debugShowBoundingVolume=u,b.pickId="v_pickColor",b.uniformMap=R,b.count=A,b.offset=L,c=!0,r.push(b)),W=void 0}}n.length=a}ch.prototype.isDestroyed=function(){return!1};ch.prototype.destroy=function(){return Xle(this),qH(this),Wle(this),this._batchTable=this._batchTable&&this._batchTable.destroy(),me(this)};function DKe(e){let t=!1,n=e._propertiesChanged,i=e._positionBufferUsage;return n[QH]?(i.bufferUsage!==Me.STREAM_DRAW&&(t=!0,i.bufferUsage=Me.STREAM_DRAW),i.frameCount=100):i.bufferUsage!==Me.STATIC_DRAW&&(i.frameCount===0?(t=!0,i.bufferUsage=Me.STATIC_DRAW):i.frameCount--),t}var Sle=[0,0,0];function Cle(e,t,n){e._createVertexArray=!1,qH(e),Xle(e),YKe(e);let i=[[]],o=i[0],r=e._batchTable,s=e._useHighlightColor,a=[0],c=0,d=[[]],u=0,h=e._polylineBuckets,p,g;for(p in h)h.hasOwnProperty(p)&&(g=h[p],g.updateShader(t,r,s),u+=g.lengthOfPositions);if(u>0){let f=e._mode,y=new Float32Array(6*u*3),x=new Float32Array(u*4),S,C=0,V=0,L=0;for(p in h)if(h.hasOwnProperty(p)){g=h[p],g.write(y,x,C,V,L,r,t,n),f===oe.MORPHING&&(l(S)||(S=new Float32Array(6*u*3)),g.writeForMorph(S,C));let R=g.lengthOfPositions;C+=6*R*3,V+=R*4,L+=R*4,c=g.updateIndices(i,a,d,c)}let Z=e._positionBufferUsage.bufferUsage,E=Me.STATIC_DRAW;e._positionBuffer=xt.createVertexBuffer({context:t,typedArray:y,usage:Z});let P;l(S)&&(P=xt.createVertexBuffer({context:t,typedArray:S,usage:Z})),e._texCoordExpandAndBatchIndexBuffer=xt.createVertexBuffer({context:t,typedArray:x,usage:E});let W=3*Float32Array.BYTES_PER_ELEMENT,v=4*Float32Array.BYTES_PER_ELEMENT,A=0,b=i.length;for(let R=0;R<b;++R)if(o=i[R],o.length>0){let G=new Uint16Array(o),I=xt.createIndexBuffer({context:t,typedArray:G,usage:Me.STATIC_DRAW,indexDatatype:Ae.UNSIGNED_SHORT});A+=a[R];let w=6*(R*(W*X.SIXTY_FOUR_KILOBYTES)-A*W),M=W+w,B=W+M,k=W+B,O=W+k,N=W+O,z=R*(v*X.SIXTY_FOUR_KILOBYTES)-A*v,K=[{index:Bl.position3DHigh,componentsPerAttribute:3,componentDatatype:Q.FLOAT,offsetInBytes:w,strideInBytes:6*W},{index:Bl.position3DLow,componentsPerAttribute:3,componentDatatype:Q.FLOAT,offsetInBytes:M,strideInBytes:6*W},{index:Bl.position2DHigh,componentsPerAttribute:3,componentDatatype:Q.FLOAT,offsetInBytes:w,strideInBytes:6*W},{index:Bl.position2DLow,componentsPerAttribute:3,componentDatatype:Q.FLOAT,offsetInBytes:M,strideInBytes:6*W},{index:Bl.prevPosition3DHigh,componentsPerAttribute:3,componentDatatype:Q.FLOAT,offsetInBytes:B,strideInBytes:6*W},{index:Bl.prevPosition3DLow,componentsPerAttribute:3,componentDatatype:Q.FLOAT,offsetInBytes:k,strideInBytes:6*W},{index:Bl.prevPosition2DHigh,componentsPerAttribute:3,componentDatatype:Q.FLOAT,offsetInBytes:B,strideInBytes:6*W},{index:Bl.prevPosition2DLow,componentsPerAttribute:3,componentDatatype:Q.FLOAT,offsetInBytes:k,strideInBytes:6*W},{index:Bl.nextPosition3DHigh,componentsPerAttribute:3,componentDatatype:Q.FLOAT,offsetInBytes:O,strideInBytes:6*W},{index:Bl.nextPosition3DLow,componentsPerAttribute:3,componentDatatype:Q.FLOAT,offsetInBytes:N,strideInBytes:6*W},{index:Bl.nextPosition2DHigh,componentsPerAttribute:3,componentDatatype:Q.FLOAT,offsetInBytes:O,strideInBytes:6*W},{index:Bl.nextPosition2DLow,componentsPerAttribute:3,componentDatatype:Q.FLOAT,offsetInBytes:N,strideInBytes:6*W},{index:Bl.texCoordExpandAndBatchIndex,componentsPerAttribute:4,componentDatatype:Q.FLOAT,vertexBuffer:e._texCoordExpandAndBatchIndexBuffer,offsetInBytes:z}],te,H,j,ee;f===oe.SCENE3D?(H=e._positionBuffer,te="vertexBuffer",j=Sle,ee="value"):f===oe.SCENE2D||f===oe.COLUMBUS_VIEW?(H=Sle,te="value",j=e._positionBuffer,ee="vertexBuffer"):(H=P,te="vertexBuffer",j=e._positionBuffer,ee="vertexBuffer"),K[0][te]=H,K[1][te]=H,K[2][ee]=j,K[3][ee]=j,K[4][te]=H,K[5][te]=H,K[6][ee]=j,K[7][ee]=j,K[8][te]=H,K[9][te]=H,K[10][ee]=j,K[11][ee]=j;let fe=new ni({context:t,attributes:K,indexBuffer:I});e._vertexArrays.push({va:fe,buckets:d[R]})}}}function BKe(e,t){return t instanceof vt?t.id:t}var uk=[];function OKe(e){let t=zi._uniformList[e.type],n=t.length;uk.length=2*n;let i=0;for(let o=0;o<n;++o){let r=t[o];uk[i]=r,uk[i+1]=e._uniforms[r](),i+=2}return`${e.type}:${JSON.stringify(uk,BKe)}`}function YKe(e){let t=e._mode,n=e._modelMatrix,i=e._polylineBuckets={},o=e._polylines,r=o.length;for(let s=0;s<r;++s){let a=o[s];if(a._actualPositions.length>1){a.update();let c=a.material,d=i[c.type];l(d)||(d=i[c.type]=new Gf(c,t,n)),d.addPolyline(a)}}}function zKe(e,t){let n=t.mode;(e._mode!==n||!F.equals(e._modelMatrix,e.modelMatrix))&&(e._mode=n,e._modelMatrix=F.clone(e.modelMatrix),e._createVertexArray=!0)}function jH(e){if(e._polylinesRemoved){e._polylinesRemoved=!1;let t=[],n=[],i=0,o,r=e._polylines.length;for(let s=0;s<r;++s)o=e._polylines[s],o.isDestroyed||(o._index=i++,n.push(o),t.push(o));e._polylines=t,e._polylinesToUpdate=n}}function qH(e){let t=e._polylines,n=t.length;for(let i=0;i<n;++i)if(!t[i].isDestroyed){let o=t[i]._bucket;l(o)&&(o.shaderProgram=o.shaderProgram&&o.shaderProgram.destroy())}}function Xle(e){let t=e._vertexArrays.length;for(let n=0;n<t;++n)e._vertexArrays[n].va.destroy();e._vertexArrays.length=0}ch.prototype._updatePolyline=function(e,t){this._polylinesUpdated=!0,e._dirty||this._polylinesToUpdate.push(e),++this._propertiesChanged[t]};function Wle(e){let t=e._polylines,n=t.length;for(let i=0;i<n;++i)t[i].isDestroyed||t[i]._destroy()}function JH(e,t,n){this.count=e,this.offset=t,this.bucket=n}function Gf(e,t,n){this.polylines=[],this.lengthOfPositions=0,this.material=e,this.shaderProgram=void 0,this.mode=t,this.modelMatrix=n}Gf.prototype.addPolyline=function(e){this.polylines.push(e),e._actualLength=this.getPolylinePositionsLength(e),this.lengthOfPositions+=e._actualLength,e._bucket=this};Gf.prototype.updateShader=function(e,t,n){if(l(this.shaderProgram))return;let i=["DISTANCE_DISPLAY_CONDITION"];n&&i.push("VECTOR_TILE"),this.material.shaderSource.search(/in\s+float\s+v_polylineAngle;/g)!==-1&&i.push("POLYLINE_DASH"),Bt.isInternetExplorer()||i.push("CLIP_POLYLINE");let o=new De({defines:i,sources:[`in vec4 v_pickColor; `,this.material.shaderSource,wx]}),r=t.getVertexShaderCallback()(kP),s=new De({defines:i,sources:[yd,r]});this.shaderProgram=$t.fromCache({context:e,vertexShaderSource:s,fragmentShaderSource:o,attributeLocations:Bl})};function Ple(e){return m.dot(m.UNIT_X,e._boundingVolume.center)<0||e._boundingVolume.intersectPlane(sn.ORIGIN_ZX_PLANE)===zt.INTERSECTING}Gf.prototype.getPolylinePositionsLength=function(e){let t;if(this.mode===oe.SCENE3D||!Ple(e))return t=e._actualPositions.length,t*4-4;let n=0,i=e._segments.lengths;t=i.length;for(let o=0;o<t;++o)n+=i[o]*4-4;return n};var Rs=new m,Du=new m,Bu=new m,mk=new m,HKe=new se,KKe=new U;Gf.prototype.write=function(e,t,n,i,o,r,s,a){let c=this.mode,d=a.ellipsoid.maximumRadius*X.PI,u=this.polylines,h=u.length;for(let p=0;p<h;++p){let g=u[p],f=g.width,y=g.show&&f>0,x=g._index,S=this.getSegments(g,a),C=S.positions,V=S.lengths,L=C.length,Z=g.getPickId(s).color,E=0,P=0,W;for(let B=0;B<L;++B){B===0?g._loop?W=C[L-2]:(W=mk,m.subtract(C[0],C[1],W),m.add(C[0],W,W)):W=C[B-1],m.clone(W,Du),m.clone(C[B],Rs),B===L-1?g._loop?W=C[1]:(W=mk,m.subtract(C[L-1],C[L-2],W),m.add(C[L-1],W,W)):W=C[B+1],m.clone(W,Bu);let k=V[E];B===P+k&&(P+=k,++E);let O=B-P===0,N=B===P+V[E]-1;c===oe.SCENE2D&&(Du.z=0,Rs.z=0,Bu.z=0),(c===oe.SCENE2D||c===oe.MORPHING)&&(O||N)&&d-Math.abs(Rs.x)<1&&((Rs.x<0&&Du.x>0||Rs.x>0&&Du.x<0)&&m.clone(Rs,Du),(Rs.x<0&&Bu.x>0||Rs.x>0&&Bu.x<0)&&m.clone(Rs,Bu));let z=O?2:0,K=N?2:4;for(let te=z;te<K;++te){On.writeElements(Rs,e,n),On.writeElements(Du,e,n+6),On.writeElements(Bu,e,n+12);let H=te-2<0?-1:1;t[o]=B/(L-1),t[o+1]=2*(te%2)-1,t[o+2]=H,t[o+3]=x,n+=6*3,o+=4}}let v=HKe;v.x=D.floatToByte(Z.red),v.y=D.floatToByte(Z.green),v.z=D.floatToByte(Z.blue),v.w=D.floatToByte(Z.alpha);let A=KKe;A.x=f,A.y=y?1:0;let b=c===oe.SCENE2D?g._boundingVolume2D:g._boundingVolumeWC,R=On.fromCartesian(b.center,Gle),G=R.high,I=se.fromElements(R.low.x,R.low.y,R.low.z,b.radius,Ele),w=Ile;w.x=0,w.y=Number.MAX_VALUE;let M=g.distanceDisplayCondition;l(M)&&(w.x=M.near,w.y=M.far),r.setBatchedAttribute(x,0,A),r.setBatchedAttribute(x,1,v),r.attributes.length>2&&(r.setBatchedAttribute(x,2,G),r.setBatchedAttribute(x,3,I),r.setBatchedAttribute(x,4,w))}};var JKe=new m,QKe=new m,jKe=new m,Vle=new m;Gf.prototype.writeForMorph=function(e,t){let n=this.modelMatrix,i=this.polylines,o=i.length;for(let r=0;r<o;++r){let s=i[r],a=s._segments.positions,c=s._segments.lengths,d=a.length,u=0,h=0;for(let p=0;p<d;++p){let g;p===0?s._loop?g=a[d-2]:(g=Vle,m.subtract(a[0],a[1],g),m.add(a[0],g,g)):g=a[p-1],g=F.multiplyByPoint(n,g,QKe);let f=F.multiplyByPoint(n,a[p],JKe),y;p===d-1?s._loop?y=a[1]:(y=Vle,m.subtract(a[d-1],a[d-2],y),m.add(a[d-1],y,y)):y=a[p+1],y=F.multiplyByPoint(n,y,jKe);let x=c[u];p===h+x&&(h+=x,++u);let S=p-h===0,C=p===h+c[u]-1,V=S?2:0,L=C?2:4;for(let Z=V;Z<L;++Z)On.writeElements(f,e,t),On.writeElements(g,e,t+6),On.writeElements(y,e,t+12),t+=6*3}}};var qKe=new Array(1);Gf.prototype.updateIndices=function(e,t,n,i){let o=n.length-1,r=new JH(0,i,this);n[o].push(r);let s=0,a=e[e.length-1],c=0;a.length>0&&(c=a[a.length-1]+1);let d=this.polylines,u=d.length;for(let h=0;h<u;++h){let p=d[h];p._locatorBuckets=[];let g;if(this.mode===oe.SCENE3D){g=qKe;let y=p._actualPositions.length;if(y>0)g[0]=y;else continue}else g=p._segments.lengths;let f=g.length;if(f>0){let y=0;for(let x=0;x<f;++x){let S=g[x]-1;for(let C=0;C<S;++C)c+4>X.SIXTY_FOUR_KILOBYTES&&(p._locatorBuckets.push({locator:r,count:y}),y=0,t.push(4),a=[],e.push(a),c=0,r.count=s,s=0,i=0,r=new JH(0,0,this),n[++o]=[r]),a.push(c,c+2,c+1),a.push(c+1,c+2,c+3),y+=6,s+=6,i+=6,c+=4}p._locatorBuckets.push({locator:r,count:y}),c+4>X.SIXTY_FOUR_KILOBYTES&&(t.push(0),a=[],e.push(a),c=0,r.count=s,i=0,s=0,r=new JH(0,0,this),n[++o]=[r])}p._clean()}return r.count=s,i};Gf.prototype.getPolylineStartIndex=function(e){let t=this.polylines,n=0,i=t.length;for(let o=0;o<i;++o){let r=t[o];if(r===e)break;n+=r._actualLength}return n};var u1={positions:void 0,lengths:void 0},Lle=new Array(1),$Ke=new m,eJe=new he;Gf.prototype.getSegments=function(e,t){let n=e._actualPositions;if(this.mode===oe.SCENE3D)return Lle[0]=n.length,u1.positions=n,u1.lengths=Lle,u1;Ple(e)&&(n=e._segments.positions);let i=t.ellipsoid,o=[],r=this.modelMatrix,s=n.length,a,c=$Ke;for(let d=0;d<s;++d)a=n[d],c=F.multiplyByPoint(r,a,c),o.push(t.project(i.cartesianToCartographic(c,eJe)));if(o.length>0){e._boundingVolume2D=le.fromPoints(o,e._boundingVolume2D);let d=e._boundingVolume2D.center;e._boundingVolume2D.center=new m(d.z,d.x,d.y)}return u1.positions=o,u1.lengths=e._segments.lengths,u1};var Rle;Gf.prototype.writeUpdate=function(e,t,n,i){let o=this.mode,r=i.ellipsoid.maximumRadius*X.PI,s=t._actualLength;if(s){e+=this.getPolylineStartIndex(t);let a=Rle,c=6*s*3;!l(a)||a.length<c?a=Rle=new Float32Array(c):a.length>c&&(a=new Float32Array(a.buffer,0,c));let d=this.getSegments(t,i),u=d.positions,h=d.lengths,p=0,g=0,f=0,y;s=u.length;for(let x=0;x<s;++x){x===0?t._loop?y=u[s-2]:(y=mk,m.subtract(u[0],u[1],y),m.add(u[0],y,y)):y=u[x-1],m.clone(y,Du),m.clone(u[x],Rs),x===s-1?t._loop?y=u[1]:(y=mk,m.subtract(u[s-1],u[s-2],y),m.add(u[s-1],y,y)):y=u[x+1],m.clone(y,Bu);let S=h[g];x===f+S&&(f+=S,++g);let C=x-f===0,V=x===f+h[g]-1;o===oe.SCENE2D&&(Du.z=0,Rs.z=0,Bu.z=0),(o===oe.SCENE2D||o===oe.MORPHING)&&(C||V)&&r-Math.abs(Rs.x)<1&&((Rs.x<0&&Du.x>0||Rs.x>0&&Du.x<0)&&m.clone(Rs,Du),(Rs.x<0&&Bu.x>0||Rs.x>0&&Bu.x<0)&&m.clone(Rs,Bu));let L=C?2:0,Z=V?2:4;for(let E=L;E<Z;++E)On.writeElements(Rs,a,p),On.writeElements(Du,a,p+6),On.writeElements(Bu,a,p+12),p+=6*3}n.copyFromArrayView(a,6*3*Float32Array.BYTES_PER_ELEMENT*e)}};var lh=ch;function Ag(e){this._positions=e.positions,this._batchTable=e.batchTable,this._batchIds=e.batchIds,this._rectangle=e.rectangle,this._minHeight=e.minimumHeight,this._maxHeight=e.maximumHeight,this._billboardCollection=new Ed({batchTable:e.batchTable}),this._labelCollection=new Zf({batchTable:e.batchTable}),this._polylineCollection=new lh,this._polylineCollection._useHighlightColor=!0,this._packedBuffer=void 0,this._ready=!1,this._promise=void 0,this._error=void 0}Object.defineProperties(Ag.prototype,{ready:{get:function(){return this._ready}},pointsLength:{get:function(){return this._billboardCollection.length}},texturesByteLength:{get:function(){let e=this._billboardCollection.sizeInBytes,t=this._labelCollection.sizeInBytes;return e+t}}});function tJe(e,t){let n=e._rectangle,i=e._minHeight,o=e._maxHeight,r=2+ce.packedLength+ne.packedLength,s=new Float64Array(r),a=0;return s[a++]=i,s[a++]=o,ce.pack(n,s,a),a+=ce.packedLength,ne.pack(t,s,a),s}var nJe=new xi("createVectorTilePoints",5),iJe=new m;function oJe(e,t){let n=e._positions,i=e._packedBuffer;l(i)||(n=e._positions=n.slice(),e._batchIds=e._batchIds.slice(),i=e._packedBuffer=tJe(e,t));let o=[n.buffer,i.buffer],r={positions:n.buffer,packedBuffer:i.buffer},s=nJe.scheduleTask(r,o);if(l(s))return s.then(a=>{if(e.isDestroyed())return;e._positions=new Float64Array(a.positions);let c=e._billboardCollection,d=e._labelCollection,u=e._polylineCollection;n=e._positions;let h=e._batchIds,p=n.length/3;for(let g=0;g<p;++g){let f=h[g],y=m.unpack(n,g*3,iJe),x=c.add();x.position=y,x._batchIndex=f;let S=d.add();S.text=" ",S.position=y,S._batchIndex=f;let C=u.add();C.positions=[m.clone(y),m.clone(y)]}e._positions=void 0,e._packedBuffer=void 0,e._ready=!0}).catch(a=>{e.isDestroyed()||(e._error=a)})}Ag.prototype.createFeatures=function(e,t){let n=this._billboardCollection,i=this._labelCollection,o=this._polylineCollection,r=this._batchIds,s=r.length;for(let a=0;a<s;++a){let c=r[a],d=n.get(a),u=i.get(a),h=o.get(a);t[c]=new _b(e,c,d,u,h)}};Ag.prototype.applyDebugSettings=function(e,t){e?(D.clone(t,this._billboardCollection._highlightColor),D.clone(t,this._labelCollection._highlightColor),D.clone(t,this._polylineCollection._highlightColor)):(D.clone(D.WHITE,this._billboardCollection._highlightColor),D.clone(D.WHITE,this._labelCollection._highlightColor),D.clone(D.WHITE,this._polylineCollection._highlightColor))};function rJe(e,t){let n=e._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o],s=t[r];s.show=!0,s.pointSize=_b.defaultPointSize,s.color=_b.defaultColor,s.pointOutlineColor=_b.defaultPointOutlineColor,s.pointOutlineWidth=_b.defaultPointOutlineWidth,s.labelColor=D.WHITE,s.labelOutlineColor=D.WHITE,s.labelOutlineWidth=1,s.font="30px sans-serif",s.labelStyle=Do.FILL,s.labelText=void 0,s.backgroundColor=new D(.165,.165,.165,.8),s.backgroundPadding=new U(7,5),s.backgroundEnabled=!1,s.scaleByDistance=void 0,s.translucencyByDistance=void 0,s.distanceDisplayCondition=void 0,s.heightOffset=0,s.anchorLineEnabled=!1,s.anchorLineColor=D.WHITE,s.image=void 0,s.disableDepthTestDistance=0,s.horizontalOrigin=_i.CENTER,s.verticalOrigin=An.CENTER,s.labelHorizontalOrigin=_i.RIGHT,s.labelVerticalOrigin=An.BASELINE}}var sJe=new D,aJe=new D,cJe=new D,lJe=new D,dJe=new D,uJe=new D,OP=new kt,YP=new kt,$H=new wt;Ag.prototype.applyStyle=function(e,t){if(!l(e)){rJe(this,t);return}let n=this._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o],s=t[r];if(l(e.show)&&(s.show=e.show.evaluate(s)),l(e.pointSize)&&(s.pointSize=e.pointSize.evaluate(s)),l(e.color)&&(s.color=e.color.evaluateColor(s,sJe)),l(e.pointOutlineColor)&&(s.pointOutlineColor=e.pointOutlineColor.evaluateColor(s,aJe)),l(e.pointOutlineWidth)&&(s.pointOutlineWidth=e.pointOutlineWidth.evaluate(s)),l(e.labelColor)&&(s.labelColor=e.labelColor.evaluateColor(s,cJe)),l(e.labelOutlineColor)&&(s.labelOutlineColor=e.labelOutlineColor.evaluateColor(s,lJe)),l(e.labelOutlineWidth)&&(s.labelOutlineWidth=e.labelOutlineWidth.evaluate(s)),l(e.font)&&(s.font=e.font.evaluate(s)),l(e.labelStyle)&&(s.labelStyle=e.labelStyle.evaluate(s)),l(e.labelText)?s.labelText=e.labelText.evaluate(s):s.labelText=void 0,l(e.backgroundColor)&&(s.backgroundColor=e.backgroundColor.evaluateColor(s,dJe)),l(e.backgroundPadding)&&(s.backgroundPadding=e.backgroundPadding.evaluate(s)),l(e.backgroundEnabled)&&(s.backgroundEnabled=e.backgroundEnabled.evaluate(s)),l(e.scaleByDistance)){let a=e.scaleByDistance.evaluate(s);l(a)?(OP.near=a.x,OP.nearValue=a.y,OP.far=a.z,OP.farValue=a.w,s.scaleByDistance=OP):s.scaleByDistance=void 0}else s.scaleByDistance=void 0;if(l(e.translucencyByDistance)){let a=e.translucencyByDistance.evaluate(s);l(a)?(YP.near=a.x,YP.nearValue=a.y,YP.far=a.z,YP.farValue=a.w,s.translucencyByDistance=YP):s.translucencyByDistance=void 0}else s.translucencyByDistance=void 0;if(l(e.distanceDisplayCondition)){let a=e.distanceDisplayCondition.evaluate(s);l(a)?($H.near=a.x,$H.far=a.y,s.distanceDisplayCondition=$H):s.distanceDisplayCondition=void 0}else s.distanceDisplayCondition=void 0;l(e.heightOffset)&&(s.heightOffset=e.heightOffset.evaluate(s)),l(e.anchorLineEnabled)&&(s.anchorLineEnabled=e.anchorLineEnabled.evaluate(s)),l(e.anchorLineColor)&&(s.anchorLineColor=e.anchorLineColor.evaluateColor(s,uJe)),l(e.image)?s.image=e.image.evaluate(s):s.image=void 0,l(e.disableDepthTestDistance)&&(s.disableDepthTestDistance=e.disableDepthTestDistance.evaluate(s)),l(e.horizontalOrigin)&&(s.horizontalOrigin=e.horizontalOrigin.evaluate(s)),l(e.verticalOrigin)&&(s.verticalOrigin=e.verticalOrigin.evaluate(s)),l(e.labelHorizontalOrigin)&&(s.labelHorizontalOrigin=e.labelHorizontalOrigin.evaluate(s)),l(e.labelVerticalOrigin)&&(s.labelVerticalOrigin=e.labelVerticalOrigin.evaluate(s))}};Ag.prototype.update=function(e){if(!this._ready&&(l(this._promise)||(this._promise=oJe(this,e.mapProjection.ellipsoid)),l(this._error))){let t=this._error;throw this._error=void 0,t}this._polylineCollection.update(e),this._billboardCollection.update(e),this._labelCollection.update(e)};Ag.prototype.isDestroyed=function(){return!1};Ag.prototype.destroy=function(){return this._billboardCollection=this._billboardCollection&&this._billboardCollection.destroy(),this._labelCollection=this._labelCollection&&this._labelCollection.destroy(),this._polylineCollection=this._polylineCollection&&this._polylineCollection.destroy(),me(this)};var zP=Ag;var RAn=_(T(),1);function Cb(e){this._batchTable=e.batchTable,this._batchIds=e.batchIds,this._positions=e.positions,this._counts=e.counts,this._indices=e.indices,this._indexCounts=e.indexCounts,this._indexOffsets=void 0,this._batchTableColors=void 0,this._packedBuffer=void 0,this._batchedPositions=void 0,this._transferrableBatchIds=void 0,this._vertexBatchIds=void 0,this._ellipsoid=e.ellipsoid??ne.WGS84,this._minimumHeight=e.minimumHeight,this._maximumHeight=e.maximumHeight,this._polygonMinimumHeights=e.polygonMinimumHeights,this._polygonMaximumHeights=e.polygonMaximumHeights,this._center=e.center??m.ZERO,this._rectangle=e.rectangle,this._center=void 0,this._boundingVolume=e.boundingVolume,this._boundingVolumes=void 0,this._batchedIndices=void 0,this._ready=!1,this._promise=void 0,this._error=void 0,this._primitive=void 0,this.debugWireframe=!1,this.forceRebatch=!1,this.classificationType=Un.BOTH}Object.defineProperties(Cb.prototype,{trianglesLength:{get:function(){return l(this._primitive)?this._primitive.trianglesLength:0}},geometryByteLength:{get:function(){return l(this._primitive)?this._primitive.geometryByteLength:0}},ready:{get:function(){return this._ready}}});function mJe(e){let t=new Float64Array(3+m.packedLength+ne.packedLength+ce.packedLength),n=0;return t[n++]=e._indices.BYTES_PER_ELEMENT,t[n++]=e._minimumHeight,t[n++]=e._maximumHeight,m.pack(e._center,t,n),n+=m.packedLength,ne.pack(e._ellipsoid,t,n),n+=ne.packedLength,ce.pack(e._rectangle,t,n),t}function hJe(e,t){let n=1,i=t[n++],o=e._boundingVolumes=new Array(i);for(let a=0;a<i;++a)o[a]=En.unpack(t,n),n+=En.packedLength;let r=t[n++],s=e._batchedIndices=new Array(r);for(let a=0;a<r;++a){let c=D.unpack(t,n);n+=D.packedLength;let d=t[n++],u=t[n++],h=t[n++],p=new Array(h);for(let g=0;g<h;++g)p[g]=t[n++];s[a]=new bf({color:c,offset:d,count:u,batchIds:p})}}var fJe=new xi("createVectorTilePolygons",5),pJe=new D;function bJe(e){if(l(e._primitive))return;let t=e._positions,n=e._counts,i=e._indexCounts,o=e._indices,r=e._transferrableBatchIds,s=e._batchTableColors,a=e._packedBuffer;if(!l(s)){t=e._positions=e._positions.slice(),n=e._counts=e._counts.slice(),i=e._indexCounts=e._indexCounts.slice(),o=e._indices=e._indices.slice(),e._center=e._ellipsoid.cartographicToCartesian(ce.center(e._rectangle)),r=e._transferrableBatchIds=new Uint32Array(e._batchIds),s=e._batchTableColors=new Uint32Array(r.length);let g=e._batchTable,f=s.length;for(let y=0;y<f;++y){let x=g.getColor(y,pJe);s[y]=x.toRgba()}a=e._packedBuffer=mJe(e)}let c=[t.buffer,n.buffer,i.buffer,o.buffer,r.buffer,s.buffer,a.buffer],d={packedBuffer:a.buffer,positions:t.buffer,counts:n.buffer,indexCounts:i.buffer,indices:o.buffer,batchIds:r.buffer,batchTableColors:s.buffer},u=e._polygonMinimumHeights,h=e._polygonMaximumHeights;l(u)&&l(h)&&(u=u.slice(),h=h.slice(),c.push(u.buffer,h.buffer),d.minimumHeights=u,d.maximumHeights=h);let p=fJe.scheduleTask(d,c);if(l(p))return p.then(g=>{if(e.isDestroyed())return;e._positions=void 0,e._counts=void 0,e._polygonMinimumHeights=void 0,e._polygonMaximumHeights=void 0;let f=new Float64Array(g.packedBuffer),y=f[0];hJe(e,f),e._indices=Ae.getSizeInBytes(y)===2?new Uint16Array(g.indices):new Uint32Array(g.indices),e._indexOffsets=new Uint32Array(g.indexOffsets),e._indexCounts=new Uint32Array(g.indexCounts),e._batchedPositions=new Float32Array(g.positions),e._vertexBatchIds=new Uint16Array(g.batchIds),gJe(e),e._ready=!0}).catch(g=>{e.isDestroyed()||(e._error=g)})}function gJe(e){l(e._primitive)||(e._primitive=new n_({batchTable:e._batchTable,positions:e._batchedPositions,batchIds:e._batchIds,vertexBatchIds:e._vertexBatchIds,indices:e._indices,indexOffsets:e._indexOffsets,indexCounts:e._indexCounts,batchedIndices:e._batchedIndices,boundingVolume:e._boundingVolume,boundingVolumes:e._boundingVolumes,center:e._center}),e._batchTable=void 0,e._batchIds=void 0,e._positions=void 0,e._counts=void 0,e._indices=void 0,e._indexCounts=void 0,e._indexOffsets=void 0,e._batchTableColors=void 0,e._packedBuffer=void 0,e._batchedPositions=void 0,e._transferrableBatchIds=void 0,e._vertexBatchIds=void 0,e._ellipsoid=void 0,e._minimumHeight=void 0,e._maximumHeight=void 0,e._polygonMinimumHeights=void 0,e._polygonMaximumHeights=void 0,e._center=void 0,e._rectangle=void 0,e._boundingVolume=void 0,e._boundingVolumes=void 0,e._batchedIndices=void 0)}Cb.prototype.createFeatures=function(e,t){this._primitive.createFeatures(e,t)};Cb.prototype.applyDebugSettings=function(e,t){this._primitive.applyDebugSettings(e,t)};Cb.prototype.applyStyle=function(e,t){this._primitive.applyStyle(e,t)};Cb.prototype.updateCommands=function(e,t){this._primitive.updateCommands(e,t)};Cb.prototype.update=function(e){if(!this._ready){if(l(this._promise)||(this._promise=bJe(this)),l(this._error)){let t=this._error;throw this._error=void 0,t}return}this._primitive.debugWireframe=this.debugWireframe,this._primitive.forceRebatch=this.forceRebatch,this._primitive.classificationType=this.classificationType,this._primitive.update(e)};Cb.prototype.isDestroyed=function(){return!1};Cb.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),me(this)};var HP=Cb;var $An=_(T(),1);var GAn=_(T(),1),KP=`in vec4 currentPosition; in vec4 previousPosition; in vec4 nextPosition; in vec2 expandAndWidth; in float a_batchId; uniform mat4 u_modifiedModelView; void main() { float expandDir = expandAndWidth.x; float width = abs(expandAndWidth.y) + 0.5; bool usePrev = expandAndWidth.y < 0.0; vec4 p = u_modifiedModelView * currentPosition; vec4 prev = u_modifiedModelView * previousPosition; vec4 next = u_modifiedModelView * nextPosition; float angle; vec4 positionWC = getPolylineWindowCoordinatesEC(p, prev, next, expandDir, width, usePrev, angle); gl_Position = czm_viewportOrthographic * positionWC; } `;function dh(e){this._positions=e.positions,this._widths=e.widths,this._counts=e.counts,this._batchIds=e.batchIds,this._ellipsoid=e.ellipsoid??ne.WGS84,this._minimumHeight=e.minimumHeight,this._maximumHeight=e.maximumHeight,this._center=e.center,this._rectangle=e.rectangle,this._boundingVolume=e.boundingVolume,this._batchTable=e.batchTable,this._va=void 0,this._sp=void 0,this._rs=void 0,this._uniformMap=void 0,this._command=void 0,this._transferrableBatchIds=void 0,this._packedBuffer=void 0,this._keepDecodedPositions=e.keepDecodedPositions,this._decodedPositions=void 0,this._decodedPositionOffsets=void 0,this._currentPositions=void 0,this._previousPositions=void 0,this._nextPositions=void 0,this._expandAndWidth=void 0,this._vertexBatchIds=void 0,this._indices=void 0,this._constantColor=D.clone(D.WHITE),this._highlightColor=this._constantColor,this._trianglesLength=0,this._geometryByteLength=0,this._ready=!1,this._promise=void 0,this._error=void 0}Object.defineProperties(dh.prototype,{trianglesLength:{get:function(){return this._trianglesLength}},geometryByteLength:{get:function(){return this._geometryByteLength}},ready:{get:function(){return this._ready}}});function yJe(e){let t=e._rectangle,n=e._minimumHeight,i=e._maximumHeight,o=e._ellipsoid,r=e._center,s=2+ce.packedLength+ne.packedLength+m.packedLength,a=new Float64Array(s),c=0;return a[c++]=n,a[c++]=i,ce.pack(t,a,c),c+=ce.packedLength,ne.pack(o,a,c),c+=ne.packedLength,m.pack(r,a,c),a}var xJe=new xi("createVectorTilePolylines",5),m1={previousPosition:0,currentPosition:1,nextPosition:2,expandAndWidth:3,a_batchId:4};function _Je(e,t){if(l(e._va))return;let n=e._positions,i=e._widths,o=e._counts,r=e._transferrableBatchIds,s=e._packedBuffer;l(s)||(n=e._positions=n.slice(),i=e._widths=i.slice(),o=e._counts=o.slice(),r=e._transferrableBatchIds=e._batchIds.slice(),s=e._packedBuffer=yJe(e));let a=[n.buffer,i.buffer,o.buffer,r.buffer,s.buffer],c={positions:n.buffer,widths:i.buffer,counts:o.buffer,batchIds:r.buffer,packedBuffer:s.buffer,keepDecodedPositions:e._keepDecodedPositions},d=xJe.scheduleTask(c,a);if(l(d))return d.then(function(u){if(e.isDestroyed())return;e._keepDecodedPositions&&(e._decodedPositions=new Float64Array(u.decodedPositions),e._decodedPositionOffsets=new Uint32Array(u.decodedPositionOffsets)),e._currentPositions=new Float32Array(u.currentPositions),e._previousPositions=new Float32Array(u.previousPositions),e._nextPositions=new Float32Array(u.nextPositions),e._expandAndWidth=new Float32Array(u.expandAndWidth),e._vertexBatchIds=new Uint16Array(u.batchIds);let h=u.indexDatatype;e._indices=h===Ae.UNSIGNED_SHORT?new Uint16Array(u.indices):new Uint32Array(u.indices),TJe(e,t),e._ready=!0}).catch(u=>{e.isDestroyed()||(e._error=u)})}function TJe(e,t){if(!l(e._va)){let n=e._currentPositions,i=e._previousPositions,o=e._nextPositions,r=e._expandAndWidth,s=e._vertexBatchIds,a=e._indices,c=i.byteLength+n.byteLength+o.byteLength;c+=r.byteLength+s.byteLength+a.byteLength,e._trianglesLength=a.length/3,e._geometryByteLength=c;let d=xt.createVertexBuffer({context:t,typedArray:i,usage:Me.STATIC_DRAW}),u=xt.createVertexBuffer({context:t,typedArray:n,usage:Me.STATIC_DRAW}),h=xt.createVertexBuffer({context:t,typedArray:o,usage:Me.STATIC_DRAW}),p=xt.createVertexBuffer({context:t,typedArray:r,usage:Me.STATIC_DRAW}),g=xt.createVertexBuffer({context:t,typedArray:s,usage:Me.STATIC_DRAW}),f=xt.createIndexBuffer({context:t,typedArray:a,usage:Me.STATIC_DRAW,indexDatatype:a.BYTES_PER_ELEMENT===2?Ae.UNSIGNED_SHORT:Ae.UNSIGNED_INT}),y=[{index:m1.previousPosition,vertexBuffer:d,componentDatatype:Q.FLOAT,componentsPerAttribute:3},{index:m1.currentPosition,vertexBuffer:u,componentDatatype:Q.FLOAT,componentsPerAttribute:3},{index:m1.nextPosition,vertexBuffer:h,componentDatatype:Q.FLOAT,componentsPerAttribute:3},{index:m1.expandAndWidth,vertexBuffer:p,componentDatatype:Q.FLOAT,componentsPerAttribute:2},{index:m1.a_batchId,vertexBuffer:g,componentDatatype:Q.UNSIGNED_SHORT,componentsPerAttribute:1}];e._va=new ni({context:t,attributes:y,indexBuffer:f}),e._positions=void 0,e._widths=void 0,e._counts=void 0,e._ellipsoid=void 0,e._minimumHeight=void 0,e._maximumHeight=void 0,e._rectangle=void 0,e._transferrableBatchIds=void 0,e._packedBuffer=void 0,e._currentPositions=void 0,e._previousPositions=void 0,e._nextPositions=void 0,e._expandAndWidth=void 0,e._vertexBatchIds=void 0,e._indices=void 0}}var JP=new F,vle=new m;function SJe(e,t){l(e._uniformMap)||(e._uniformMap={u_modifiedModelView:function(){let n=t.uniformState.view;return F.clone(n,JP),F.multiplyByPoint(JP,e._center,vle),F.setTranslation(JP,vle,JP),JP},u_highlightColor:function(){return e._highlightColor}})}function CJe(e){if(l(e._rs))return;let t={enabled:!0,factor:-5,units:-5};e._rs=Ue.fromCache({blending:un.ALPHA_BLEND,depthMask:!1,depthTest:{enabled:!0},polygonOffset:t})}var VJe=`uniform vec4 u_highlightColor; void main() { out_FragColor = u_highlightColor; } `;function LJe(e,t){if(l(e._sp))return;let n=e._batchTable,i=n.getVertexShaderCallback(!1,"a_batchId",void 0)(KP),o=n.getFragmentShaderCallback(!1,void 0,!1)(VJe),r=new De({defines:["VECTOR_TILE",Bt.isInternetExplorer()?"":"CLIP_POLYLINE"],sources:[yd,i]}),s=new De({defines:["VECTOR_TILE"],sources:[o]});e._sp=$t.fromCache({context:t,vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:m1})}function RJe(e,t){if(!l(e._command)){let n=e._batchTable.getUniformMapCallback()(e._uniformMap);e._command=new $e({owner:e,vertexArray:e._va,renderState:e._rs,shaderProgram:e._sp,uniformMap:n,boundingVolume:e._boundingVolume,pass:Ee.TRANSLUCENT,pickId:e._batchTable.getPickId()})}t.commandList.push(e._command)}dh.getPolylinePositions=function(e,t){let n=e._batchIds,i=e._decodedPositions,o=e._decodedPositionOffsets;if(!l(n)||!l(i))return;let r,s,a=n.length,c=0,d=0;for(r=0;r<a;++r)n[r]===t&&(c+=o[r+1]-o[r]);if(c===0)return;let u=new Float64Array(c*3);for(r=0;r<a;++r)if(n[r]===t){let h=o[r],p=o[r+1]-h;for(s=0;s<p;++s){let g=(h+s)*3;u[d++]=i[g],u[d++]=i[g+1],u[d++]=i[g+2]}}return u};dh.prototype.getPositions=function(e){return dh.getPolylinePositions(this,e)};dh.prototype.createFeatures=function(e,t){let n=this._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o];t[r]=new Bs(e,r)}};dh.prototype.applyDebugSettings=function(e,t){this._highlightColor=e?t:this._constantColor};function ZJe(e,t){let n=e._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o],s=t[r];s.show=!0,s.color=D.WHITE}}var GJe=new D,EJe=D.WHITE,IJe=!0;dh.prototype.applyStyle=function(e,t){if(!l(e)){ZJe(this,t);return}let n=this._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o],s=t[r];s.color=l(e.color)?e.color.evaluateColor(s,GJe):EJe,s.show=l(e.show)?e.show.evaluate(s):IJe}};dh.prototype.update=function(e){let t=e.context;if(!this._ready){if(l(this._promise)||(this._promise=_Je(this,t)),l(this._error)){let i=this._error;throw this._error=void 0,i}return}SJe(this,t),LJe(this,t),CJe(this);let n=e.passes;(n.render||n.pick)&&RJe(this,e)};dh.prototype.isDestroyed=function(){return!1};dh.prototype.destroy=function(){return this._va=this._va&&this._va.destroy(),this._sp=this._sp&&this._sp.destroy(),me(this)};var F_=dh;var MMn=_(T(),1);var tMn=_(T(),1),QP=`in vec3 startEllipsoidNormal; in vec3 endEllipsoidNormal; in vec4 startPositionAndHeight; in vec4 endPositionAndHeight; in vec4 startFaceNormalAndVertexCorner; in vec4 endFaceNormalAndHalfWidth; in float a_batchId; uniform mat4 u_modifiedModelView; uniform vec2 u_minimumMaximumVectorHeights; out vec4 v_startPlaneEC; out vec4 v_endPlaneEC; out vec4 v_rightPlaneEC; out float v_halfWidth; out vec3 v_volumeUpEC; void main() { // vertex corner IDs // 3-----------7 // /| left /| // / | 1 / | // 2-----------6 5 end // | / | / // start |/ right |/ // 0-----------4 // float isEnd = floor(startFaceNormalAndVertexCorner.w * 0.251); // 0 for front, 1 for end float isTop = floor(startFaceNormalAndVertexCorner.w * mix(0.51, 0.19, isEnd)); // 0 for bottom, 1 for top vec3 forward = endPositionAndHeight.xyz - startPositionAndHeight.xyz; vec3 right = normalize(cross(forward, startEllipsoidNormal)); vec4 position = vec4(startPositionAndHeight.xyz, 1.0); position.xyz += forward * isEnd; v_volumeUpEC = czm_normal * normalize(cross(right, forward)); // Push for volume height float offset; vec3 ellipsoidNormal = mix(startEllipsoidNormal, endEllipsoidNormal, isEnd); // offset height to create volume offset = mix(startPositionAndHeight.w, endPositionAndHeight.w, isEnd); offset = mix(u_minimumMaximumVectorHeights.y, u_minimumMaximumVectorHeights.x, isTop) - offset; position.xyz += offset * ellipsoidNormal; // move from RTC to EC position = u_modifiedModelView * position; right = czm_normal * right; // Push for width in a direction that is in the start or end plane and in a plane with right // N = normalEC ("right-facing" direction for push) // R = right // p = angle between N and R // w = distance to push along R if R == N // d = distance to push along N // // N R // { p| } * cos(p) = dot(N, R) = w / d // d | |w * d = w / dot(N, R) // { | } // o---------- polyline segment ----> // vec3 scratchNormal = mix(-startFaceNormalAndVertexCorner.xyz, endFaceNormalAndHalfWidth.xyz, isEnd); scratchNormal = cross(scratchNormal, mix(startEllipsoidNormal, endEllipsoidNormal, isEnd)); vec3 miterPushNormal = czm_normal * normalize(scratchNormal); offset = 2.0 * endFaceNormalAndHalfWidth.w * max(0.0, czm_metersPerPixel(position)); // offset = widthEC offset = offset / dot(miterPushNormal, right); position.xyz += miterPushNormal * (offset * sign(0.5 - mod(startFaceNormalAndVertexCorner.w, 2.0))); gl_Position = czm_depthClamp(czm_projection * position); position = u_modifiedModelView * vec4(startPositionAndHeight.xyz, 1.0); vec3 startNormalEC = czm_normal * startFaceNormalAndVertexCorner.xyz; v_startPlaneEC = vec4(startNormalEC, -dot(startNormalEC, position.xyz)); v_rightPlaneEC = vec4(right, -dot(right, position.xyz)); position = u_modifiedModelView * vec4(endPositionAndHeight.xyz, 1.0); vec3 endNormalEC = czm_normal * endFaceNormalAndHalfWidth.xyz; v_endPlaneEC = vec4(endNormalEC, -dot(endNormalEC, position.xyz)); v_halfWidth = endFaceNormalAndHalfWidth.w; } `;var iMn=_(T(),1),jP=`in vec4 v_startPlaneEC; in vec4 v_endPlaneEC; in vec4 v_rightPlaneEC; in float v_halfWidth; in vec3 v_volumeUpEC; uniform vec4 u_highlightColor; void main() { float logDepthOrDepth = czm_branchFreeTernary(czm_sceneMode == czm_sceneMode2D, gl_FragCoord.z, czm_unpackDepth(texture(czm_globeDepthTexture, gl_FragCoord.xy / czm_viewport.zw))); // Discard for sky if (logDepthOrDepth == 0.0) { #ifdef DEBUG_SHOW_VOLUME out_FragColor = vec4(0.0, 0.0, 1.0, 0.5); return; #else // DEBUG_SHOW_VOLUME discard; #endif // DEBUG_SHOW_VOLUME } vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth); eyeCoordinate /= eyeCoordinate.w; float halfMaxWidth = v_halfWidth * czm_metersPerPixel(eyeCoordinate); // Expand halfMaxWidth if direction to camera is almost perpendicular with the volume's up direction halfMaxWidth += halfMaxWidth * (1.0 - dot(-normalize(eyeCoordinate.xyz), v_volumeUpEC)); // Check distance of the eye coordinate against the right-facing plane float widthwiseDistance = czm_planeDistance(v_rightPlaneEC, eyeCoordinate.xyz); // Check eye coordinate against the mitering planes float distanceFromStart = czm_planeDistance(v_startPlaneEC, eyeCoordinate.xyz); float distanceFromEnd = czm_planeDistance(v_endPlaneEC, eyeCoordinate.xyz); if (abs(widthwiseDistance) > halfMaxWidth || distanceFromStart < 0.0 || distanceFromEnd < 0.0) { #ifdef DEBUG_SHOW_VOLUME out_FragColor = vec4(logDepthOrDepth, 0.0, 0.0, 0.5); return; #else // DEBUG_SHOW_VOLUME discard; #endif // DEBUG_SHOW_VOLUME } out_FragColor = u_highlightColor; czm_writeDepthClamp(); } `;function Vb(e){this._positions=e.positions,this._widths=e.widths,this._counts=e.counts,this._batchIds=e.batchIds,this._ellipsoid=e.ellipsoid??ne.WGS84,this._minimumHeight=e.minimumHeight,this._maximumHeight=e.maximumHeight,this._center=e.center,this._rectangle=e.rectangle,this._batchTable=e.batchTable,this._va=void 0,this._sp=void 0,this._rs=void 0,this._uniformMap=void 0,this._command=void 0,this._transferrableBatchIds=void 0,this._packedBuffer=void 0,this._minimumMaximumVectorHeights=new U(di._defaultMinTerrainHeight,di._defaultMaxTerrainHeight),this._boundingVolume=En.fromRectangle(e.rectangle,di._defaultMinTerrainHeight,di._defaultMaxTerrainHeight,this._ellipsoid),this._classificationType=e.classificationType,this._keepDecodedPositions=e.keepDecodedPositions,this._decodedPositions=void 0,this._decodedPositionOffsets=void 0,this._startEllipsoidNormals=void 0,this._endEllipsoidNormals=void 0,this._startPositionAndHeights=void 0,this._startFaceNormalAndVertexCornerIds=void 0,this._endPositionAndHeights=void 0,this._endFaceNormalAndHalfWidths=void 0,this._vertexBatchIds=void 0,this._indices=void 0,this._constantColor=D.clone(D.WHITE),this._highlightColor=this._constantColor,this._trianglesLength=0,this._geometryByteLength=0,this._ready=!1,this._promise=void 0,this._error=void 0}Object.defineProperties(Vb.prototype,{trianglesLength:{get:function(){return this._trianglesLength}},geometryByteLength:{get:function(){return this._geometryByteLength}},ready:{get:function(){return this._ready}}});function XJe(e,t,n){let i=di.getMinimumMaximumHeights(t,n),o=i.minimumTerrainHeight,r=i.maximumTerrainHeight,s=e._minimumMaximumVectorHeights;s.x=o,s.y=r;let a=e._boundingVolume,c=e._rectangle;En.fromRectangle(c,o,r,n,a)}function WJe(e){let t=e._rectangle,n=e._minimumHeight,i=e._maximumHeight,o=e._ellipsoid,r=e._center,s=2+ce.packedLength+ne.packedLength+m.packedLength,a=new Float64Array(s),c=0;return a[c++]=n,a[c++]=i,ce.pack(t,a,c),c+=ce.packedLength,ne.pack(o,a,c),c+=ne.packedLength,m.pack(r,a,c),a}var PJe=new xi("createVectorTileClampedPolylines"),Mg={startEllipsoidNormal:0,endEllipsoidNormal:1,startPositionAndHeight:2,endPositionAndHeight:3,startFaceNormalAndVertexCorner:4,endFaceNormalAndHalfWidth:5,a_batchId:6};function vJe(e,t){if(l(e._va))return;let n=e._positions,i=e._widths,o=e._counts,r=e._transferrableBatchIds,s=e._packedBuffer;l(s)||(n=e._positions=n.slice(),i=e._widths=i.slice(),o=e._counts=o.slice(),r=e._transferrableBatchIds=e._batchIds.slice(),s=e._packedBuffer=WJe(e));let a=[n.buffer,i.buffer,o.buffer,r.buffer,s.buffer],c={positions:n.buffer,widths:i.buffer,counts:o.buffer,batchIds:r.buffer,packedBuffer:s.buffer,keepDecodedPositions:e._keepDecodedPositions},d=PJe.scheduleTask(c,a);if(l(d))return d.then(function(u){if(e.isDestroyed())return;e._keepDecodedPositions&&(e._decodedPositions=new Float64Array(u.decodedPositions),e._decodedPositionOffsets=new Uint32Array(u.decodedPositionOffsets)),e._startEllipsoidNormals=new Float32Array(u.startEllipsoidNormals),e._endEllipsoidNormals=new Float32Array(u.endEllipsoidNormals),e._startPositionAndHeights=new Float32Array(u.startPositionAndHeights),e._startFaceNormalAndVertexCornerIds=new Float32Array(u.startFaceNormalAndVertexCornerIds),e._endPositionAndHeights=new Float32Array(u.endPositionAndHeights),e._endFaceNormalAndHalfWidths=new Float32Array(u.endFaceNormalAndHalfWidths),e._vertexBatchIds=new Uint16Array(u.vertexBatchIds);let h=u.indexDatatype;e._indices=h===Ae.UNSIGNED_SHORT?new Uint16Array(u.indices):new Uint32Array(u.indices),wJe(e,t),e._ready=!0}).catch(u=>{e.isDestroyed()||(e._error=u)})}function wJe(e,t){if(!l(e._va)){let n=e._startEllipsoidNormals,i=e._endEllipsoidNormals,o=e._startPositionAndHeights,r=e._endPositionAndHeights,s=e._startFaceNormalAndVertexCornerIds,a=e._endFaceNormalAndHalfWidths,c=e._vertexBatchIds,d=e._indices,u=n.byteLength+i.byteLength;u+=o.byteLength+r.byteLength,u+=s.byteLength+a.byteLength,u+=c.byteLength+d.byteLength,e._trianglesLength=d.length/3,e._geometryByteLength=u;let h=xt.createVertexBuffer({context:t,typedArray:n,usage:Me.STATIC_DRAW}),p=xt.createVertexBuffer({context:t,typedArray:i,usage:Me.STATIC_DRAW}),g=xt.createVertexBuffer({context:t,typedArray:o,usage:Me.STATIC_DRAW}),f=xt.createVertexBuffer({context:t,typedArray:r,usage:Me.STATIC_DRAW}),y=xt.createVertexBuffer({context:t,typedArray:s,usage:Me.STATIC_DRAW}),x=xt.createVertexBuffer({context:t,typedArray:a,usage:Me.STATIC_DRAW}),S=xt.createVertexBuffer({context:t,typedArray:c,usage:Me.STATIC_DRAW}),C=xt.createIndexBuffer({context:t,typedArray:d,usage:Me.STATIC_DRAW,indexDatatype:d.BYTES_PER_ELEMENT===2?Ae.UNSIGNED_SHORT:Ae.UNSIGNED_INT}),V=[{index:Mg.startEllipsoidNormal,vertexBuffer:h,componentDatatype:Q.FLOAT,componentsPerAttribute:3},{index:Mg.endEllipsoidNormal,vertexBuffer:p,componentDatatype:Q.FLOAT,componentsPerAttribute:3},{index:Mg.startPositionAndHeight,vertexBuffer:g,componentDatatype:Q.FLOAT,componentsPerAttribute:4},{index:Mg.endPositionAndHeight,vertexBuffer:f,componentDatatype:Q.FLOAT,componentsPerAttribute:4},{index:Mg.startFaceNormalAndVertexCorner,vertexBuffer:y,componentDatatype:Q.FLOAT,componentsPerAttribute:4},{index:Mg.endFaceNormalAndHalfWidth,vertexBuffer:x,componentDatatype:Q.FLOAT,componentsPerAttribute:4},{index:Mg.a_batchId,vertexBuffer:S,componentDatatype:Q.UNSIGNED_SHORT,componentsPerAttribute:1}];e._va=new ni({context:t,attributes:V,indexBuffer:C}),e._positions=void 0,e._widths=void 0,e._counts=void 0,e._ellipsoid=void 0,e._minimumHeight=void 0,e._maximumHeight=void 0,e._rectangle=void 0,e._transferrableBatchIds=void 0,e._packedBuffer=void 0,e._startEllipsoidNormals=void 0,e._endEllipsoidNormals=void 0,e._startPositionAndHeights=void 0,e._startFaceNormalAndVertexCornerIds=void 0,e._endPositionAndHeights=void 0,e._endFaceNormalAndHalfWidths=void 0,e._vertexBatchIds=void 0,e._indices=void 0}}var qP=new F,wle=new m;function FJe(e,t){l(e._uniformMap)||(e._uniformMap={u_modifiedModelView:function(){let n=t.uniformState.view;return F.clone(n,qP),F.multiplyByPoint(qP,e._center,wle),F.setTranslation(qP,wle,qP),qP},u_highlightColor:function(){return e._highlightColor},u_minimumMaximumVectorHeights:function(){return e._minimumMaximumVectorHeights}})}function Fle(e){return Ue.fromCache({cull:{enabled:!0,face:Ti.FRONT},blending:un.PRE_MULTIPLIED_ALPHA_BLEND,depthMask:!1,stencilTest:{enabled:e,frontFunction:Dn.EQUAL,frontOperation:{fail:ht.KEEP,zFail:ht.KEEP,zPass:ht.KEEP},backFunction:Dn.EQUAL,backOperation:{fail:ht.KEEP,zFail:ht.KEEP,zPass:ht.KEEP},reference:Ut.CESIUM_3D_TILE_MASK,mask:Ut.CESIUM_3D_TILE_MASK}})}function AJe(e){l(e._rs)||(e._rs=Fle(!1),e._rs3DTiles=Fle(!0))}function MJe(e,t){if(l(e._sp))return;let n=e._batchTable,i=n.getVertexShaderCallback(!1,"a_batchId",void 0)(QP),o=n.getFragmentShaderCallback(!1,void 0,!0)(jP),r=new De({defines:["VECTOR_TILE",Bt.isInternetExplorer()?"":"CLIP_POLYLINE"],sources:[yd,i]}),s=new De({defines:["VECTOR_TILE"],sources:[o]});e._sp=$t.fromCache({context:t,vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:Mg})}function NJe(e,t){let n=e._command;if(!l(e._command)){let o=e._batchTable.getUniformMapCallback()(e._uniformMap);n=e._command=new $e({owner:e,vertexArray:e._va,renderState:e._rs,shaderProgram:e._sp,uniformMap:o,boundingVolume:e._boundingVolume,pass:Ee.TERRAIN_CLASSIFICATION,pickId:e._batchTable.getPickId()});let r=$e.shallowClone(n,n.derivedCommands.tileset);r.renderState=e._rs3DTiles,r.pass=Ee.CESIUM_3D_TILE_CLASSIFICATION,n.derivedCommands.tileset=r}let i=e._classificationType;(i===Un.TERRAIN||i===Un.BOTH)&&t.commandList.push(n),(i===Un.CESIUM_3D_TILE||i===Un.BOTH)&&t.commandList.push(n.derivedCommands.tileset)}Vb.prototype.getPositions=function(e){return F_.getPolylinePositions(this,e)};Vb.prototype.createFeatures=function(e,t){let n=this._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o];t[r]=new Bs(e,r)}};Vb.prototype.applyDebugSettings=function(e,t){this._highlightColor=e?t:this._constantColor};function kJe(e,t){let n=e._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o],s=t[r];s.show=!0,s.color=D.WHITE}}var UJe=new D,DJe=D.WHITE,BJe=!0;Vb.prototype.applyStyle=function(e,t){if(!l(e)){kJe(this,t);return}let n=this._batchIds,i=n.length;for(let o=0;o<i;++o){let r=n[o],s=t[r];s.color=l(e.color)?e.color.evaluateColor(s,UJe):DJe,s.show=l(e.show)?e.show.evaluate(s):BJe}};function OJe(e){return di.initialize().then(function(){XJe(e,e._rectangle,e._ellipsoid)}).catch(t=>{e.isDestroyed()||(e._error=t)})}Vb.prototype.update=function(e){let t=e.context;if(!this._ready){if(l(this._promise)||(this._promise=OJe(this).then(vJe(this,t))),l(this._error)){let i=this._error;throw this._error=void 0,i}return}FJe(this,t),MJe(this,t),AJe(this);let n=e.passes;(n.render||n.pick)&&NJe(this,e)};Vb.prototype.isDestroyed=function(){return!1};Vb.prototype.destroy=function(){return this._va=this._va&&this._va.destroy(),this._sp=this._sp&&this._sp.destroy(),me(this)};var $P=Vb;var OMn=_(T(),1);var eK=32767,YJe=new he,zJe=new m;function HJe(e,t,n,i,o){let r=e.length/3,s=e.subarray(0,r),a=e.subarray(r,2*r),c=e.subarray(2*r,3*r);wn.zigZagDeltaDecode(s,a,c);let d=new Float64Array(e.length);for(let u=0;u<r;++u){let h=s[u],p=a[u],g=c[u],f=X.lerp(t.west,t.east,h/eK),y=X.lerp(t.south,t.north,p/eK),x=X.lerp(n,i,g/eK),S=he.fromRadians(f,y,x,YJe),C=o.cartographicToCartesian(S,zJe);m.pack(C,d,u*3)}return d}var e2=HJe;function mh(e,t,n,i,o){this._tileset=e,this._tile=t,this._resource=n,this._polygons=void 0,this._polylines=void 0,this._points=void 0,this._metadata=void 0,this._batchTable=void 0,this._features=void 0,this.featurePropertiesDirty=!1,this._group=void 0,this._ready=!1,qJe(this,i,o)}Object.defineProperties(mh.prototype,{featuresLength:{get:function(){return l(this._batchTable)?this._batchTable.featuresLength:0}},pointsLength:{get:function(){return l(this._points)?this._points.pointsLength:0}},trianglesLength:{get:function(){let e=0;return l(this._polygons)&&(e+=this._polygons.trianglesLength),l(this._polylines)&&(e+=this._polylines.trianglesLength),e}},geometryByteLength:{get:function(){let e=0;return l(this._polygons)&&(e+=this._polygons.geometryByteLength),l(this._polylines)&&(e+=this._polylines.geometryByteLength),e}},texturesByteLength:{get:function(){return l(this._points)?this._points.texturesByteLength:0}},batchTableByteLength:{get:function(){return l(this._batchTable)?this._batchTable.batchTableByteLength:0}},innerContents:{get:function(){}},ready:{get:function(){return this._ready}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){return this._resource.getUrlComponent(!0)}},metadata:{get:function(){return this._metadata},set:function(e){this._metadata=e}},batchTable:{get:function(){return this._batchTable}},group:{get:function(){return this._group},set:function(e){this._group=e}}});function KJe(e){return function(t,n){l(e._polygons)&&e._polygons.updateCommands(t,n)}}function JJe(e,t){let n,i,o,r,s=e.POLYGONS_LENGTH??0,a=e.POLYLINES_LENGTH??0,c=e.POINTS_LENGTH??0;if(s>0&&l(e.POLYGON_BATCH_IDS)){let p=t.byteOffset+e.POLYGON_BATCH_IDS.byteOffset;n=new Uint16Array(t.buffer,p,s)}if(a>0&&l(e.POLYLINE_BATCH_IDS)){let p=t.byteOffset+e.POLYLINE_BATCH_IDS.byteOffset;i=new Uint16Array(t.buffer,p,a)}if(c>0&&l(e.POINT_BATCH_IDS)){let p=t.byteOffset+e.POINT_BATCH_IDS.byteOffset;o=new Uint16Array(t.buffer,p,c)}let d=l(n)||l(i)||l(o),u=s>0&&!l(n)||a>0&&!l(i)||c>0&&!l(o);if(d&&u)throw new ae("If one group of batch ids is defined, then all batch ids must be defined");if(!l(n)&&!l(i)&&!l(o)){let p=0;if(!l(n)&&s>0)for(n=new Uint16Array(s),r=0;r<s;++r)n[r]=p++;if(!l(i)&&a>0)for(i=new Uint16Array(a),r=0;r<a;++r)i[r]=p++;if(!l(o)&&c>0)for(o=new Uint16Array(c),r=0;r<c;++r)o[r]=p++}return{polygons:n,polylines:i,points:o}}var uh=Uint32Array.BYTES_PER_ELEMENT;function QJe(e){return new F_(e)}function jJe(e){return new $P(e)}function qJe(e,t,n){n=n??0;let i=new Uint8Array(t),o=new DataView(t);n+=uh;let r=o.getUint32(n,!0);if(r!==1)throw new ae(`Only Vector tile version 1 is supported. Version ${r} is not.`);n+=uh;let s=o.getUint32(n,!0);if(n+=uh,s===0){e._ready=!0;return}let a=o.getUint32(n,!0);if(n+=uh,a===0)throw new ae("Feature table must have a byte length greater than zero");let c=o.getUint32(n,!0);n+=uh;let d=o.getUint32(n,!0);n+=uh;let u=o.getUint32(n,!0);n+=uh;let h=o.getUint32(n,!0);n+=uh;let p=o.getUint32(n,!0);n+=uh;let g=o.getUint32(n,!0);n+=uh;let f=o.getUint32(n,!0);n+=uh;let y=qo(i,n,a);n+=a;let x=new Uint8Array(t,n,c);n+=c;let S,C;d>0&&(S=qo(i,n,d),n+=d,u>0&&(C=new Uint8Array(t,n,u),C=new Uint8Array(C),n+=u));let V=y.POLYGONS_LENGTH??0,L=y.POLYLINES_LENGTH??0,Z=y.POINTS_LENGTH??0,E=V+L+Z,P=new Hp(e,E,S,C,KJe(e));if(e._batchTable=P,E===0)return;let W=new ih(y,x),v=W.getGlobalProperty("REGION");if(!l(v))throw new ae("Feature table global property: REGION must be defined");let A=ce.unpack(v),b=v[4],R=v[5],G=e._tile.computedTransform,I=W.getGlobalProperty("RTC_CENTER",Q.FLOAT,3);l(I)?(I=m.unpack(I),F.multiplyByPoint(G,I,I)):(I=ce.center(A),I.height=X.lerp(b,R,.5),I=ne.WGS84.cartographicToCartesian(I));let w=JJe(y,x);if(n+=(4-n%4)%4,V>0){W.featuresLength=V;let M=W.getPropertyArray("POLYGON_COUNTS",Q.UNSIGNED_INT,1)??W.getPropertyArray("POLYGON_COUNT",Q.UNSIGNED_INT,1);if(!l(M))throw new ae("Feature table property: POLYGON_COUNTS must be defined when POLYGONS_LENGTH is greater than 0");let B=W.getPropertyArray("POLYGON_INDEX_COUNTS",Q.UNSIGNED_INT,1)??W.getPropertyArray("POLYGON_INDEX_COUNT",Q.UNSIGNED_INT,1);if(!l(B))throw new ae("Feature table property: POLYGON_INDEX_COUNTS must be defined when POLYGONS_LENGTH is greater than 0");let k=M.reduce(function(H,j){return H+j*2},0),O=B.reduce(function(H,j){return H+j},0),N=new Uint32Array(t,n,O);n+=h;let z=new Uint16Array(t,n,k);n+=p;let K,te;l(y.POLYGON_MINIMUM_HEIGHTS)&&l(y.POLYGON_MAXIMUM_HEIGHTS)&&(K=W.getPropertyArray("POLYGON_MINIMUM_HEIGHTS",Q.FLOAT,1),te=W.getPropertyArray("POLYGON_MAXIMUM_HEIGHTS",Q.FLOAT,1)),e._polygons=new HP({positions:z,counts:M,indexCounts:B,indices:N,minimumHeight:b,maximumHeight:R,polygonMinimumHeights:K,polygonMaximumHeights:te,center:I,rectangle:A,boundingVolume:e.tile.boundingVolume.boundingVolume,batchTable:P,batchIds:w.polygons,modelMatrix:G})}if(L>0){W.featuresLength=L;let M=W.getPropertyArray("POLYLINE_COUNTS",Q.UNSIGNED_INT,1)??W.getPropertyArray("POLYLINE_COUNT",Q.UNSIGNED_INT,1);if(!l(M))throw new ae("Feature table property: POLYLINE_COUNTS must be defined when POLYLINES_LENGTH is greater than 0");let B=W.getPropertyArray("POLYLINE_WIDTHS",Q.UNSIGNED_SHORT,1);if(!l(B)){B=new Uint16Array(L);for(let te=0;te<L;++te)B[te]=2}let k=M.reduce(function(te,H){return te+H*3},0),O=new Uint16Array(t,n,k);n+=g;let N=e._tileset,z=N.examineVectorLinesFunction;if(l(z)){let te=e2(new Uint16Array(O),A,b,R,ne.WGS84);$Je(te,M,w.polylines,P,e.url,z)}let K=QJe;l(N.classificationType)&&(K=jJe),e._polylines=K({positions:O,widths:B,counts:M,batchIds:w.polylines,minimumHeight:b,maximumHeight:R,center:I,rectangle:A,boundingVolume:e.tile.boundingVolume.boundingVolume,batchTable:P,classificationType:N.classificationType,keepDecodedPositions:N.vectorKeepDecodedPositions})}if(Z>0){let M=new Uint16Array(t,n,Z*3);n+=f,e._points=new zP({positions:M,batchIds:w.points,minimumHeight:b,maximumHeight:R,rectangle:A,batchTable:P})}}function tK(e){let t=e.featuresLength;if(!l(e._features)&&t>0){let n=new Array(t);l(e._polygons)&&e._polygons.createFeatures(e,n),l(e._polylines)&&e._polylines.createFeatures(e,n),l(e._points)&&e._points.createFeatures(e,n),e._features=n}}mh.prototype.hasProperty=function(e,t){return this._batchTable.hasProperty(e,t)};mh.prototype.getFeature=function(e){return l(this._features)||tK(this),this._features[e]};mh.prototype.applyDebugSettings=function(e,t){l(this._polygons)&&this._polygons.applyDebugSettings(e,t),l(this._polylines)&&this._polylines.applyDebugSettings(e,t),l(this._points)&&this._points.applyDebugSettings(e,t)};mh.prototype.applyStyle=function(e){l(this._features)||tK(this),l(this._polygons)&&this._polygons.applyStyle(e,this._features),l(this._polylines)&&this._polylines.applyStyle(e,this._features),l(this._points)&&this._points.applyStyle(e,this._features)};mh.prototype.update=function(e,t){let n=!0;l(this._polygons)&&(this._polygons.classificationType=this._tileset.classificationType,this._polygons.debugWireframe=this._tileset.debugWireframe,this._polygons.update(t),n=n&&this._polygons.ready),l(this._polylines)&&(this._polylines.update(t),n=n&&this._polylines.ready),l(this._points)&&(this._points.update(t),n=n&&this._points.ready),l(this._batchTable)&&n&&(l(this._features)||tK(this),this._batchTable.update(e,t),this._ready=!0)};mh.prototype.pick=function(e,t,n){};mh.prototype.getPolylinePositions=function(e){let t=this._polylines;if(l(t))return t.getPositions(e)};mh.prototype.isDestroyed=function(){return!1};mh.prototype.destroy=function(){return this._polygons=this._polygons&&this._polygons.destroy(),this._polylines=this._polylines&&this._polylines.destroy(),this._points=this._points&&this._points.destroy(),this._batchTable=this._batchTable&&this._batchTable.destroy(),me(this)};function $Je(e,t,n,i,o,r){let s=t.length,a=0;for(let c=0;c<s;c++){let d=t[c]*3,u=e.slice(a,a+d);a+=d,r(u,n[c],o,i)}}var t2=mh;var Ale={b3dm:function(e,t,n,i,o){return Gd.fromB3dm(e,t,n,i,o)},pnts:function(e,t,n,i,o){return Gd.fromPnts(e,t,n,i,o)},i3dm:function(e,t,n,i,o){return Gd.fromI3dm(e,t,n,i,o)},cmpt:function(e,t,n,i,o){return vI.fromTileType(e,t,n,i,o,Ale)},externalTileset:function(e,t,n,i){return WP.fromJson(e,t,n,i)},geom:function(e,t,n,i,o){return new AI(e,t,n,i,o)},vctr:function(e,t,n,i,o){return new t2(e,t,n,i,o)},subt:function(e,t,n,i,o){return FC.fromSubtreeJson(e,t,n,void 0,i,o)},subtreeJson:function(e,t,n,i){return FC.fromSubtreeJson(e,t,n,i)},glb:function(e,t,n,i,o){if(i.byteLength<12)throw new ae("Invalid glb content");let a=new DataView(i,o).getUint32(8,!0),c=new Uint8Array(i,o,a);return Gd.fromGltf(e,t,n,c)},gltf:function(e,t,n,i){return Gd.fromGltf(e,t,n,i)},geoJson:function(e,t,n,i){return Gd.fromGeoJson(e,t,n,i)}},A_=Ale;var _Nn=_(T(),1),eQe={UNLOADED:0,LOADING:1,PROCESSING:2,READY:3,EXPIRED:4,FAILED:5},Bo=Object.freeze(eQe);var SNn=_(T(),1),hh={BATCHED_3D_MODEL:"b3dm",INSTANCED_3D_MODEL:"i3dm",COMPOSITE:"cmpt",POINT_CLOUD:"pnts",VECTOR:"vctr",GEOMETRY:"geom",GLTF:"gltf",GLTF_BINARY:"glb",IMPLICIT_SUBTREE:"subt",IMPLICIT_SUBTREE_JSON:"subtreeJson",EXTERNAL_TILESET:"externalTileset",MULTIPLE_CONTENT:"multipleContent",GEOJSON:"geoJson",VOXEL_BINARY:"voxl",VOXEL_JSON:"voxelJson"};hh.isBinaryFormat=function(e){switch(e){case hh.BATCHED_3D_MODEL:case hh.INSTANCED_3D_MODEL:case hh.COMPOSITE:case hh.POINT_CLOUD:case hh.VECTOR:case hh.GEOMETRY:case hh.IMPLICIT_SUBTREE:case hh.VOXEL_BINARY:case hh.GLTF_BINARY:return!0;default:return!1}};var Zs=Object.freeze(hh);var VNn=_(T(),1),tQe={NOT_COMPUTED:-1,USE_OPTIMIZATION:1,SKIP_OPTIMIZATION:0},Ou=Object.freeze(tQe);var RNn=_(T(),1),Ks={RENDER:0,PICK:1,SHADOW:2,PRELOAD:3,PRELOAD_FLIGHT:4,REQUEST_RENDER_MODE_DEFER_CHECK:5,MOST_DETAILED_PRELOAD:6,MOST_DETAILED_PICK:7,NUMBER_OF_PASSES:8},Lb=new Array(Ks.NUMBER_OF_PASSES);Lb[Ks.RENDER]=Object.freeze({pass:Ks.RENDER,isRender:!0,requestTiles:!0,ignoreCommands:!1});Lb[Ks.PICK]=Object.freeze({pass:Ks.PICK,isRender:!1,requestTiles:!1,ignoreCommands:!1});Lb[Ks.SHADOW]=Object.freeze({pass:Ks.SHADOW,isRender:!1,requestTiles:!0,ignoreCommands:!1});Lb[Ks.PRELOAD]=Object.freeze({pass:Ks.PRELOAD,isRender:!1,requestTiles:!0,ignoreCommands:!0});Lb[Ks.PRELOAD_FLIGHT]=Object.freeze({pass:Ks.PRELOAD_FLIGHT,isRender:!1,requestTiles:!0,ignoreCommands:!0});Lb[Ks.REQUEST_RENDER_MODE_DEFER_CHECK]=Object.freeze({pass:Ks.REQUEST_RENDER_MODE_DEFER_CHECK,isRender:!1,requestTiles:!0,ignoreCommands:!0});Lb[Ks.MOST_DETAILED_PRELOAD]=Object.freeze({pass:Ks.MOST_DETAILED_PRELOAD,isRender:!1,requestTiles:!0,ignoreCommands:!0});Lb[Ks.MOST_DETAILED_PICK]=Object.freeze({pass:Ks.MOST_DETAILED_PICK,isRender:!1,requestTiles:!1,ignoreCommands:!1});Ks.getPassOptions=function(e){return Lb[e]};var wo=Object.freeze(Ks);var ENn=_(T(),1);function Ef(e,t){this._tileset=e,this._tile=t,this.featurePropertiesDirty=!1}Object.defineProperties(Ef.prototype,{featuresLength:{get:function(){return 0}},pointsLength:{get:function(){return 0}},trianglesLength:{get:function(){return 0}},geometryByteLength:{get:function(){return 0}},texturesByteLength:{get:function(){return 0}},batchTableByteLength:{get:function(){return 0}},innerContents:{get:function(){}},ready:{get:function(){return!0}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){}},metadata:{get:function(){},set:function(e){}},batchTable:{get:function(){}},group:{get:function(){},set:function(e){}}});Ef.prototype.hasProperty=function(e,t){return!1};Ef.prototype.getFeature=function(e){};Ef.prototype.applyDebugSettings=function(e,t){};Ef.prototype.applyStyle=function(e){};Ef.prototype.update=function(e,t){};Ef.prototype.pick=function(e,t,n){};Ef.prototype.isDestroyed=function(){return!1};Ef.prototype.destroy=function(){return me(this)};var h1=Ef;var kNn=_(T(),1);var PNn=_(T(),1);function Rb(e){e=e??Y.EMPTY_OBJECT;let t=e.content,n=e.class;this._class=n,this._properties=t.properties,this._extensions=t.extensions,this._extras=t.extras}Object.defineProperties(Rb.prototype,{class:{get:function(){return this._class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});Rb.prototype.hasProperty=function(e){return Nn.hasProperty(e,this._properties,this._class)};Rb.prototype.hasPropertyBySemantic=function(e){return Nn.hasPropertyBySemantic(e,this._properties,this._class)};Rb.prototype.getPropertyIds=function(e){return Nn.getPropertyIds(this._properties,this._class,e)};Rb.prototype.getProperty=function(e){return Nn.getProperty(e,this._properties,this._class)};Rb.prototype.setProperty=function(e,t){return Nn.setProperty(e,t,this._properties,this._class)};Rb.prototype.getPropertyBySemantic=function(e){return Nn.getPropertyBySemantic(e,this._properties,this._class)};Rb.prototype.setPropertyBySemantic=function(e,t){return Nn.setPropertyBySemantic(e,t,this._properties,this._class)};var n2=Rb;function nK(e,t){let n=ri(t,"3DTILES_metadata")?t.extensions["3DTILES_metadata"]:t.metadata;if(!l(n))return;if(!l(e.schema)){nK._oneTimeWarning("findContentMetadata-missing-root-schema","Could not find a metadata schema for content metadata. For tilesets that contain external tilesets, make sure the schema is added to the root tileset.json.");return}let i=e.schema.classes??Y.EMPTY_OBJECT;if(l(n.class)){let o=i[n.class];return new n2({content:n,class:o})}}nK._oneTimeWarning=_t;var M_=nK;var ONn=_(T(),1);function nQe(e,t){let n=e.metadataExtension;if(!l(n))return;let i=n.groups,o=ri(t,"3DTILES_metadata")?t.extensions["3DTILES_metadata"].group:t.group;if(typeof o=="number")return i[o];let r=n.groupIds.findIndex(function(s){return s===o});return r>=0?i[r]:void 0}var N_=nQe;var t5n=_(T(),1);var KNn=_(T(),1);function Zb(e){e=e??Y.EMPTY_OBJECT;let t=e.tile,n=e.class;this._class=n,this._properties=t.properties,this._extensions=t.extensions,this._extras=t.extras}Object.defineProperties(Zb.prototype,{class:{get:function(){return this._class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});Zb.prototype.hasProperty=function(e){return Nn.hasProperty(e,this._properties,this._class)};Zb.prototype.hasPropertyBySemantic=function(e){return Nn.hasPropertyBySemantic(e,this._properties,this._class)};Zb.prototype.getPropertyIds=function(e){return Nn.getPropertyIds(this._properties,this._class,e)};Zb.prototype.getProperty=function(e){return Nn.getProperty(e,this._properties,this._class)};Zb.prototype.setProperty=function(e,t){return Nn.setProperty(e,t,this._properties,this._class)};Zb.prototype.getPropertyBySemantic=function(e){return Nn.getPropertyBySemantic(e,this._properties,this._class)};Zb.prototype.setPropertyBySemantic=function(e,t){return Nn.setPropertyBySemantic(e,t,this._properties,this._class)};var i2=Zb;function iK(e,t){let n=ri(t,"3DTILES_metadata")?t.extensions["3DTILES_metadata"]:t.metadata;if(!l(n))return;if(!l(e.schema)){iK._oneTimeWarning("findTileMetadata-missing-root-schema","Could not find a metadata schema for tile metadata. For tilesets that contain external tilesets, make sure the schema is added to the root tileset.json.");return}let i=e.schema.classes??Y.EMPTY_OBJECT;if(l(n.class)){let o=i[n.class];return new i2({tile:n,class:o})}}iK._oneTimeWarning=_t;var o2=iK;var C5n=_(T(),1);var c5n=_(T(),1);function iQe(e){let t=new Uint8Array(e),n=zm(t);if(n==="glTF"&&(n="glb"),Zs.isBinaryFormat(n))return{contentType:n,binaryPayload:t};let i=oQe(t);if(l(i.root))return{contentType:Zs.EXTERNAL_TILESET,jsonPayload:i};if(l(i.asset))return{contentType:Zs.GLTF,jsonPayload:i};if(l(i.tileAvailability))return{contentType:Zs.IMPLICIT_SUBTREE_JSON,jsonPayload:i};if(l(i.type))return{contentType:Zs.GEOJSON,jsonPayload:i};if(l(i.voxelTable))return{contentType:Zs.VOXEL_JSON,jsonPayload:i};throw new ae("Invalid tile content.")}function oQe(e){let t;try{t=qo(e)}catch{throw new ae("Invalid tile content.")}return t}var Gb=iQe;function Yu(e,t,n,i){this._tileset=e,this._tile=t,this._tilesetResource=n,this._contents=[],this._contentsCreated=!1;let o=l(i.contents)?i.contents:i.content;this._innerContentHeaders=o,this._requestsInFlight=0,this._cancelCount=0,this._externalTilesetCount=0;let r=this._innerContentHeaders.length;this._arrayFetchPromises=new Array(r),this._requests=new Array(r),this._ready=!1,this._innerContentResources=new Array(r),this._serverKeys=new Array(r);for(let s=0;s<r;s++){let a=n.getDerivedResource({url:o[s].uri}),c=ic.getServerKey(a.getUrlComponent());this._innerContentResources[s]=a,this._serverKeys[s]=c}}Object.defineProperties(Yu.prototype,{featurePropertiesDirty:{get:function(){let e=this._contents,t=e.length;for(let n=0;n<t;++n)if(e[n].featurePropertiesDirty)return!0;return!1},set:function(e){let t=this._contents,n=t.length;for(let i=0;i<n;++i)t[i].featurePropertiesDirty=e}},featuresLength:{get:function(){return 0}},pointsLength:{get:function(){return 0}},trianglesLength:{get:function(){return 0}},geometryByteLength:{get:function(){return 0}},texturesByteLength:{get:function(){return 0}},batchTableByteLength:{get:function(){return 0}},innerContents:{get:function(){return this._contents}},ready:{get:function(){return this._contentsCreated?this._ready:!1}},tileset:{get:function(){return this._tileset}},tile:{get:function(){return this._tile}},url:{get:function(){}},metadata:{get:function(){},set:function(){}},batchTable:{get:function(){}},group:{get:function(){},set:function(){}},innerContentUrls:{get:function(){return this._innerContentHeaders.map(function(e){return e.uri})}}});function oK(e,t){e._requestsInFlight+=t,e.tileset.statistics.numberOfPendingRequests+=t}function Mle(e,t){e._cancelCount++,e._tile._contentState=t;let n=e.tileset.statistics;n.numberOfPendingRequests-=e._requestsInFlight,n.numberOfAttemptedRequests+=e._requestsInFlight,e._requestsInFlight=0;let i=e._innerContentHeaders.length;e._arrayFetchPromises=new Array(i)}Yu.prototype.requestInnerContents=function(){if(!rQe(this._serverKeys)){this.tileset.statistics.numberOfAttemptedRequests+=this._serverKeys.length;return}let e=this._innerContentHeaders;oK(this,e.length);let t=this._cancelCount;for(let n=0;n<e.length;n++)this._arrayFetchPromises[n]=sQe(this,n,t,this._tile._contentState);return aQe(this)};function rQe(e){let t={};for(let n=0;n<e.length;n++){let i=e[n];l(t[i])?t[i]++:t[i]=1}for(let n in t)if(t.hasOwnProperty(n)&&!ic.serverHasOpenSlots(n,t[n]))return!1;return ic.heapHasOpenSlots(e.length)}function sQe(e,t,n,i){let o=e._innerContentResources[t].clone(),r=e.tile,s=function(){return r._priority},a=e._serverKeys[t],c=new zo({throttle:!0,throttleByServer:!0,type:ds.TILES3D,priorityFunction:s,serverKey:a});o.request=c,e._requests[t]=c;let d=o.fetchArrayBuffer();if(l(d))return d.then(function(u){if(!(n<e._cancelCount)){if(o.request.cancelled||o.request.state===jn.CANCELLED){Mle(e,i);return}return oK(e,-1),u}}).catch(function(u){if(!(n<e._cancelCount)){if(o.request.cancelled||o.request.state===jn.CANCELLED){Mle(e,i);return}oK(e,-1),Nle(e,t,u)}})}async function aQe(e){let t=e._cancelCount,n=await Promise.all(e._arrayFetchPromises);if(t<e._cancelCount)return;let i=n.map((r,s)=>cQe(e,r,s)),o=await Promise.all(i);if(e._contentsCreated=!0,e._contents=o.filter(l),e._externalTilesetCount===e._contents.length){let r=e._tile;r.hasRenderableContent=!1}return o}async function cQe(e,t,n){if(l(t))try{let i=Gb(t),o=e._tileset,r=e._innerContentResources[n],s=e._tile;i.contentType===Zs.EXTERNAL_TILESET&&(e._externalTilesetCount++,s.hasTilesetContent=!0),e._disableSkipLevelOfDetail=e._disableSkipLevelOfDetail||i.contentType===Zs.GEOMETRY||i.contentType===Zs.VECTOR;let a,c=A_[i.contentType];l(i.binaryPayload)?a=await Promise.resolve(c(o,s,r,i.binaryPayload.buffer,0)):a=await Promise.resolve(c(o,s,r,i.jsonPayload));let d=e._innerContentHeaders[n];if(s.hasImplicitContentMetadata){let h=s.implicitSubtree,p=s.implicitCoordinates;a.metadata=h.getContentMetadataView(p,n)}else s.hasImplicitContent||(a.metadata=M_(o,d));let u=N_(o,d);return l(u)&&(a.group=new qx({metadata:u})),a}catch(i){Nle(e,n,i)}}function Nle(e,t,n){let i=e._tileset,o=e._innerContentResources[t].url,r=l(n.message)?n.message:n.toString();i.tileFailed.numberOfListeners>0?i.tileFailed.raiseEvent({url:o,message:r}):(console.log(`A content failed to load: ${o}`),console.log(`Error: ${r}`))}Yu.prototype.cancelRequests=function(){for(let e=0;e<this._requests.length;e++){let t=this._requests[e];l(t)&&t.cancel()}};Yu.prototype.hasProperty=function(e,t){return!1};Yu.prototype.getFeature=function(e){};Yu.prototype.applyDebugSettings=function(e,t){let n=this._contents,i=n.length;for(let o=0;o<i;++o)n[o].applyDebugSettings(e,t)};Yu.prototype.applyStyle=function(e){let t=this._contents,n=t.length;for(let i=0;i<n;++i)t[i].applyStyle(e)};Yu.prototype.update=function(e,t){let n=this._contents,i=n.length,o=!0;for(let r=0;r<i;++r)n[r].update(e,t),o=o&&n[r].ready;!this._ready&&o&&(this._ready=!0)};Yu.prototype.pick=function(e,t,n){if(!this._ready)return;let i,o=Number.POSITIVE_INFINITY,r=this._contents,s=r.length;for(let a=0;a<s;++a){let c=r[a].pick(e,t,n);if(!l(c))continue;let d=m.distance(e.origin,c);d<o&&(i=c,o=d)}if(l(i))return n};Yu.prototype.isDestroyed=function(){return!1};Yu.prototype.destroy=function(){let e=this._contents,t=e.length;for(let n=0;n<t;++n)e[n].destroy();return me(this)};var r2=Yu;var gkn=_(T(),1);var q5n=_(T(),1);var P5n=_(T(),1);var kle=Math.cos,Ule=Math.sin,lQe=Math.sqrt,rK={};rK.computePosition=function(e,t,n,i,o,r,s){let a=t.radiiSquared,c=e.nwCorner,d=e.boundingRectangle,u=c.latitude-e.granYCos*i+o*e.granXSin,h=kle(u),p=Ule(u),g=a.z*p,f=c.longitude+i*e.granYSin+o*e.granXCos,y=h*kle(f),x=h*Ule(f),S=a.x*y,C=a.y*x,V=lQe(S*y+C*x+g*p);if(r.x=S/V,r.y=C/V,r.z=g/V,n){let L=e.stNwCorner;l(L)?(u=L.latitude-e.stGranYCos*i+o*e.stGranXSin,f=L.longitude+i*e.stGranYSin+o*e.stGranXCos,s.x=(f-e.stWest)*e.lonScalar,s.y=(u-e.stSouth)*e.latScalar):(s.x=(f-d.west)*e.lonScalar,s.y=(u-d.south)*e.latScalar)}};var dQe=new Ii,zu=new m,uQe=new he,hk=new m,s2=new Ei;function Dle(e,t,n,i,o,r,s){let a=Math.cos(t),c=i*a,d=n*a,u=Math.sin(t),h=i*u,p=n*u;s2._ellipsoid=ne.default,zu=s2.project(e,zu),zu=m.subtract(zu,hk,zu);let g=Ii.fromRotation(t,dQe);zu=Ii.multiplyByVector(g,zu,zu),zu=m.add(zu,hk,zu),e=s2.unproject(zu,e),r-=1,s-=1;let f=e.latitude,y=f+r*p,x=f-c*s,S=f-c*s+r*p,C=Math.max(f,y,x,S),V=Math.min(f,y,x,S),L=e.longitude,Z=L+r*d,E=L+s*h,P=L+s*h+r*d,W=Math.max(L,Z,E,P),v=Math.min(L,Z,E,P);return{north:C,south:V,east:W,west:v,granYCos:c,granYSin:h,granXCos:d,granXSin:p,nwCorner:e}}rK.computeOptions=function(e,t,n,i,o,r,s){let a=e.east,c=e.west,d=e.north,u=e.south,h=!1,p=!1;d===X.PI_OVER_TWO&&(h=!0),u===-X.PI_OVER_TWO&&(p=!0);let g,f=d-u;c>a?g=X.TWO_PI-c+a:g=a-c;let y=Math.ceil(g/t)+1,x=Math.ceil(f/t)+1,S=g/(y-1),C=f/(x-1),V=ce.northwest(e,r),L=ce.center(e,uQe);(n!==0||i!==0)&&(L.longitude<V.longitude&&(L.longitude+=X.TWO_PI),s2._ellipsoid=ne.default,hk=s2.project(L,hk));let Z=C,E=S,P=0,W=0,v=ce.clone(e,o),A={granYCos:Z,granYSin:P,granXCos:E,granXSin:W,nwCorner:V,boundingRectangle:v,width:y,height:x,northCap:h,southCap:p};if(n!==0){let b=Dle(V,n,S,C,L,y,x);d=b.north,u=b.south,a=b.east,c=b.west,A.granYCos=b.granYCos,A.granYSin=b.granYSin,A.granXCos=b.granXCos,A.granXSin=b.granXSin,v.north=d,v.south=u,v.east=a,v.west=c}if(i!==0){n=n-i;let b=ce.northwest(v,s),R=Dle(b,n,S,C,L,y,x);A.stGranYCos=R.granYCos,A.stGranXCos=R.granXCos,A.stGranYSin=R.granYSin,A.stGranXSin=R.granXSin,A.stNwCorner=b,A.stWest=R.west,A.stSouth=R.south}return A};var Gs=rK;var mQe=new le,hQe=new le,fQe=new m,pQe=new ce;function Ble(e,t){let n=e._ellipsoid,i=t.height,o=t.width,r=t.northCap,s=t.southCap,a=i,c=2,d=0,u=4;r&&(c-=1,a-=1,d+=1,u-=2),s&&(c-=1,a-=1,d+=1,u-=2),d+=c*o+2*a-u;let h=new Float64Array(d*3),p=0,g=0,f,y=fQe;if(r)Gs.computePosition(t,n,!1,g,0,y),h[p++]=y.x,h[p++]=y.y,h[p++]=y.z;else for(f=0;f<o;f++)Gs.computePosition(t,n,!1,g,f,y),h[p++]=y.x,h[p++]=y.y,h[p++]=y.z;for(f=o-1,g=1;g<i;g++)Gs.computePosition(t,n,!1,g,f,y),h[p++]=y.x,h[p++]=y.y,h[p++]=y.z;if(g=i-1,!s)for(f=o-2;f>=0;f--)Gs.computePosition(t,n,!1,g,f,y),h[p++]=y.x,h[p++]=y.y,h[p++]=y.z;for(f=0,g=i-2;g>0;g--)Gs.computePosition(t,n,!1,g,f,y),h[p++]=y.x,h[p++]=y.y,h[p++]=y.z;let x=h.length/3*2,S=Ae.createTypedArray(h.length/3,x),C=0;for(let L=0;L<h.length/3-1;L++)S[C++]=L,S[C++]=L+1;S[C++]=h.length/3-1,S[C++]=0;let V=new lt({attributes:new mn,primitiveType:we.LINES});return V.attributes.position=new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:h}),V.indices=S,V}function bQe(e,t){let n=e._surfaceHeight,i=e._extrudedHeight,o=e._ellipsoid,r=Ble(e,t),s=t.height,a=t.width,c=ai.scaleToGeodeticHeight(r.attributes.position.values,n,o,!1),d=c.length,u=new Float64Array(d*2);u.set(c);let h=ai.scaleToGeodeticHeight(r.attributes.position.values,i,o);u.set(h,d),r.attributes.position.values=u;let p=t.northCap,g=t.southCap,f=4;p&&(f-=1),g&&(f-=1);let y=(u.length/3+f)*2,x=Ae.createTypedArray(u.length/3,y);d=u.length/6;let S=0;for(let V=0;V<d-1;V++)x[S++]=V,x[S++]=V+1,x[S++]=V+d,x[S++]=V+d+1;x[S++]=d-1,x[S++]=0,x[S++]=d+d-1,x[S++]=d,x[S++]=0,x[S++]=d;let C;if(p)C=s-1;else{let V=a-1;x[S++]=V,x[S++]=V+d,C=a+s-2}if(x[S++]=C,x[S++]=C+d,!g){let V=a+C-1;x[S++]=V,x[S]=V+d}return r.indices=x,r}function p1(e){e=e??Y.EMPTY_OBJECT;let t=e.rectangle,n=e.granularity??X.RADIANS_PER_DEGREE,i=e.ellipsoid??ne.default,o=e.rotation??0,r=e.height??0,s=e.extrudedHeight??r;this._rectangle=ce.clone(t),this._granularity=n,this._ellipsoid=i,this._surfaceHeight=Math.max(r,s),this._rotation=o,this._extrudedHeight=Math.min(r,s),this._offsetAttribute=e.offsetAttribute,this._workerName="createRectangleOutlineGeometry"}p1.packedLength=ce.packedLength+ne.packedLength+5;p1.pack=function(e,t,n){return n=n??0,ce.pack(e._rectangle,t,n),n+=ce.packedLength,ne.pack(e._ellipsoid,t,n),n+=ne.packedLength,t[n++]=e._granularity,t[n++]=e._surfaceHeight,t[n++]=e._rotation,t[n++]=e._extrudedHeight,t[n]=e._offsetAttribute??-1,t};var Ole=new ce,Yle=ne.clone(ne.UNIT_SPHERE),f1={rectangle:Ole,ellipsoid:Yle,granularity:void 0,height:void 0,rotation:void 0,extrudedHeight:void 0,offsetAttribute:void 0};p1.unpack=function(e,t,n){t=t??0;let i=ce.unpack(e,t,Ole);t+=ce.packedLength;let o=ne.unpack(e,t,Yle);t+=ne.packedLength;let r=e[t++],s=e[t++],a=e[t++],c=e[t++],d=e[t];return l(n)?(n._rectangle=ce.clone(i,n._rectangle),n._ellipsoid=ne.clone(o,n._ellipsoid),n._surfaceHeight=s,n._rotation=a,n._extrudedHeight=c,n._offsetAttribute=d===-1?void 0:d,n):(f1.granularity=r,f1.height=s,f1.rotation=a,f1.extrudedHeight=c,f1.offsetAttribute=d===-1?void 0:d,new p1(f1))};var gQe=new he;p1.createGeometry=function(e){let t=e._rectangle,n=e._ellipsoid,i=Gs.computeOptions(t,e._granularity,e._rotation,0,pQe,gQe),o,r;if(X.equalsEpsilon(t.north,t.south,X.EPSILON10)||X.equalsEpsilon(t.east,t.west,X.EPSILON10))return;let s=e._surfaceHeight,a=e._extrudedHeight,c=!X.equalsEpsilon(s,a,0,X.EPSILON2),d;if(c){if(o=bQe(e,i),l(e._offsetAttribute)){let p=o.attributes.position.values.length/3,g=new Uint8Array(p);e._offsetAttribute===rn.TOP?g=g.fill(1,0,p/2):(d=e._offsetAttribute===rn.NONE?0:1,g=g.fill(d)),o.attributes.applyOffset=new Ge({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:g})}let u=le.fromRectangle3D(t,n,s,hQe),h=le.fromRectangle3D(t,n,a,mQe);r=le.union(u,h)}else{if(o=Ble(e,i),o.attributes.position.values=ai.scaleToGeodeticHeight(o.attributes.position.values,s,n,!1),l(e._offsetAttribute)){let u=o.attributes.position.values.length;d=e._offsetAttribute===rn.NONE?0:1;let h=new Uint8Array(u/3).fill(d);o.attributes.applyOffset=new Ge({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:h})}r=le.fromRectangle3D(t,n,s)}return new lt({attributes:o.attributes,indices:o.indices,primitiveType:we.LINES,boundingSphere:r,offsetAttribute:e._offsetAttribute})};var k_=p1;function g1(e){this.rectangle=ce.clone(e.rectangle),this.minimumHeight=e.minimumHeight??0,this.maximumHeight=e.maximumHeight??0,this.southwestCornerCartesian=new m,this.northeastCornerCartesian=new m,this.westNormal=new m,this.southNormal=new m,this.eastNormal=new m,this.northNormal=new m;let t=e.ellipsoid??ne.WGS84;SQe(this,e.rectangle,t),this._orientedBoundingBox=void 0,this._boundingSphere=void 0,(e.computeBoundingVolumes??!0)&&this.computeBoundingVolumes(t)}Object.defineProperties(g1.prototype,{boundingVolume:{get:function(){return this._orientedBoundingBox}},boundingSphere:{get:function(){return this._boundingSphere}}});g1.prototype.computeBoundingVolumes=function(e){this._orientedBoundingBox=En.fromRectangle(this.rectangle,this.minimumHeight,this.maximumHeight,e),this._boundingSphere=le.fromOrientedBoundingBox(this._orientedBoundingBox)};var zle=new m,fk=new m,Hle=new m,yQe=new m,xQe=new m,_Qe=new m,TQe=new m,Hu=new he,Kle=new sn(m.UNIT_X,0),b1=new pn;function SQe(e,t,n){n.cartographicToCartesian(ce.southwest(t),e.southwestCornerCartesian),n.cartographicToCartesian(ce.northeast(t),e.northeastCornerCartesian),Hu.longitude=t.west,Hu.latitude=(t.south+t.north)*.5,Hu.height=0;let i=n.cartographicToCartesian(Hu,_Qe),o=m.cross(i,m.UNIT_Z,yQe);m.normalize(o,e.westNormal),Hu.longitude=t.east;let r=n.cartographicToCartesian(Hu,TQe),s=m.cross(m.UNIT_Z,r,zle);m.normalize(s,e.eastNormal);let a=m.subtract(i,r,zle);m.magnitude(a)===0&&(a=m.clone(o,a));let c=m.normalize(a,xQe),d=t.south,u;if(d>0){Hu.longitude=(t.west+t.east)*.5,Hu.latitude=d;let y=n.cartographicToCartesian(Hu,b1.origin);m.clone(c,b1.direction);let x=sn.fromPointNormal(e.southwestCornerCartesian,e.westNormal,Kle);qn.rayPlane(b1,x,e.southwestCornerCartesian),u=n.geodeticSurfaceNormal(y,fk)}else u=n.geodeticSurfaceNormalCartographic(ce.southeast(t),fk);let h=m.cross(u,a,Hle);m.normalize(h,e.southNormal);let p=t.north,g;if(p<0){Hu.longitude=(t.west+t.east)*.5,Hu.latitude=p;let y=n.cartographicToCartesian(Hu,b1.origin);m.negate(c,b1.direction);let x=sn.fromPointNormal(e.northeastCornerCartesian,e.eastNormal,Kle);qn.rayPlane(b1,x,e.northeastCornerCartesian),g=n.geodeticSurfaceNormal(y,fk)}else g=n.geodeticSurfaceNormalCartographic(ce.northwest(t),fk);let f=m.cross(a,g,Hle);m.normalize(f,e.northNormal)}var CQe=new m,VQe=new m,LQe=new m(0,-1,0),RQe=new m(0,0,-1),Jle=new m;function ZQe(e,t){let n=t.camera,i=n.positionWC,o=n.positionCartographic,r=0;if(!ce.contains(e.rectangle,o)){let d=e.southwestCornerCartesian,u=e.northeastCornerCartesian,h=e.westNormal,p=e.southNormal,g=e.eastNormal,f=e.northNormal;t.mode!==oe.SCENE3D&&(d=t.mapProjection.project(ce.southwest(e.rectangle),CQe),d.z=d.y,d.y=d.x,d.x=0,u=t.mapProjection.project(ce.northeast(e.rectangle),VQe),u.z=u.y,u.y=u.x,u.x=0,h=LQe,g=m.UNIT_Y,p=RQe,f=m.UNIT_Z);let y=m.subtract(i,d,Jle),x=m.dot(y,h),S=m.dot(y,p),C=m.subtract(i,u,Jle),V=m.dot(C,g),L=m.dot(C,f);x>0?r+=x*x:V>0&&(r+=V*V),S>0?r+=S*S:L>0&&(r+=L*L)}let s,a,c;if(t.mode===oe.SCENE3D?(s=o.height,a=e.minimumHeight,c=e.maximumHeight):(s=i.x,a=0,c=0),s>c){let d=s-c;r+=d*d}else if(s<a){let d=a-s;r+=d*d}return Math.sqrt(r)}g1.prototype.distanceToCamera=function(e){let t=ZQe(this,e);if(e.mode===oe.SCENE3D&&l(this._orientedBoundingBox)){let n=Math.sqrt(this._orientedBoundingBox.distanceSquaredTo(e.camera.positionWC));return Math.max(t,n)}return t};g1.prototype.intersectPlane=function(e){return this._orientedBoundingBox.intersectPlane(e)};g1.prototype.createDebugVolume=function(e){let t=new F.clone(F.IDENTITY),n=new k_({rectangle:this.rectangle,height:this.minimumHeight,extrudedHeight:this.maximumHeight}),i=new Et({geometry:n,id:"outline",modelMatrix:t,attributes:{color:Yt.fromColor(e)}});return new In({geometryInstances:i,appearance:new dn({translucent:!1,flat:!0}),asynchronous:!1})};var Xd=g1;var iUn=_(T(),1);var kkn=_(T(),1);var Ckn=_(T(),1);var a2={},GQe=new m,Qle=new m,jle=new m,qle=new m,$le=new En;a2.validOutline=function(e){let n=En.fromPoints(e,$le).halfAxes,i=$.getColumn(n,0,Qle),o=$.getColumn(n,1,jle),r=$.getColumn(n,2,qle),s=m.magnitude(i),a=m.magnitude(o),c=m.magnitude(r);return!(s===0&&(a===0||c===0)||a===0&&c===0)};a2.computeProjectTo2DArguments=function(e,t,n,i){let o=En.fromPoints(e,$le),r=o.halfAxes,s=$.getColumn(r,0,Qle),a=$.getColumn(r,1,jle),c=$.getColumn(r,2,qle),d=m.magnitude(s),u=m.magnitude(a),h=m.magnitude(c),p=Math.min(d,u,h);if(d===0&&(u===0||h===0)||u===0&&h===0)return!1;let g,f;return(p===u||p===h)&&(g=s),p===d?g=a:p===h&&(f=a),(p===d||p===u)&&(f=c),m.normalize(g,n),m.normalize(f,i),m.clone(o.center,t),!0};function ede(e,t,n,i,o){let r=m.subtract(e,t,GQe),s=m.dot(n,r),a=m.dot(i,r);return U.fromElements(s,a,o)}a2.createProjectPointsTo2DFunction=function(e,t,n){return function(i){let o=new Array(i.length);for(let r=0;r<i.length;r++)o[r]=ede(i[r],e,t,n);return o}};a2.createProjectPointTo2DFunction=function(e,t,n){return function(i,o){return ede(i,e,t,n,o)}};var Eb=a2;function EQe(e){let t=e.length,n=new Float64Array(t*3),i=Ae.createTypedArray(t,t*2),o=0,r=0;for(let a=0;a<t;a++){let c=e[a];n[o++]=c.x,n[o++]=c.y,n[o++]=c.z,i[r++]=a,i[r++]=(a+1)%t}let s=new mn({position:new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:n})});return new lt({attributes:s,indices:i,primitiveType:we.LINES})}function U_(e){e=e??Y.EMPTY_OBJECT;let t=e.polygonHierarchy;this._polygonHierarchy=t,this._workerName="createCoplanarPolygonOutlineGeometry",this.packedLength=Bn.computeHierarchyPackedLength(t,m)+1}U_.fromPositions=function(e){e=e??Y.EMPTY_OBJECT;let t={polygonHierarchy:{positions:e.positions}};return new U_(t)};U_.pack=function(e,t,n){return n=n??0,n=Bn.packPolygonHierarchy(e._polygonHierarchy,t,n,m),t[n]=e.packedLength,t};var IQe={polygonHierarchy:{}};U_.unpack=function(e,t,n){t=t??0;let i=Bn.unpackPolygonHierarchy(e,t,m);t=i.startingIndex,delete i.startingIndex;let o=e[t];return l(n)||(n=new U_(IQe)),n._polygonHierarchy=i,n.packedLength=o,n};U_.createGeometry=function(e){let t=e._polygonHierarchy,n=t.positions;if(n=_o(n,m.equalsEpsilon,!0),n.length<3||!Eb.validOutline(n))return;let o=Bn.polygonOutlinesFromHierarchy(t,!1);if(o.length===0)return;let r=[];for(let c=0;c<o.length;c++){let d=new Et({geometry:EQe(o[c])});r.push(d)}let s=Fn.combineInstances(r)[0],a=le.fromPoints(t.positions);return new lt({attributes:s.attributes,indices:s.indices,primitiveType:s.primitiveType,boundingSphere:a})};var Ku=U_;var pk=new he;function c2(e){let t=Qp.fromToken(e.token),n=e.minimumHeight??0,i=e.maximumHeight??0,o=e.ellipsoid??ne.WGS84;this.s2Cell=t,this.minimumHeight=n,this.maximumHeight=i,this.ellipsoid=o;let r=NQe(t,n,i,o);this._boundingPlanes=r;let s=BQe(r);this._vertices=s,this._edgeNormals=new Array(6),this._edgeNormals[0]=hK(r[0],s.slice(0,4));let a;for(a=0;a<4;a++)this._edgeNormals[0][a]=m.negate(this._edgeNormals[0][a],this._edgeNormals[0][a]);for(this._edgeNormals[1]=hK(r[1],s.slice(4,8)),a=0;a<4;a++)this._edgeNormals[2+a]=hK(r[2+a],[s[a%4],s[(a+1)%4],s[4+(a+1)%4],s[4+a]]);for(this._planeVertices=[this._vertices.slice(0,4),this._vertices.slice(4,8)],a=0;a<4;a++)this._planeVertices.push([this._vertices[a%4],this._vertices[(a+1)%4],this._vertices[4+(a+1)%4],this._vertices[4+a]]);let c=t.getCenter();pk=o.cartesianToCartographic(c,pk),pk.height=(i+n)/2,this.center=o.cartographicToCartesian(pk,c),this._boundingSphere=le.fromPoints(s)}var XQe=new m,WQe=new he,PQe=new m,vQe=new he,wQe=new m,FQe=new m,AQe=new m,MQe=new m;function NQe(e,t,n,i){let o=new Array(6),r=e.getCenter(),s=i.geodeticSurfaceNormal(r,XQe),a=i.cartesianToCartographic(r,WQe);a.height=n;let c=i.cartographicToCartesian(a,PQe),d=sn.fromPointNormal(c,s);o[0]=d;let u=0,h,p=[],g,f;for(h=0;h<4;h++){g=e.getVertex(h),p[h]=g,f=i.cartesianToCartographic(g,vQe),f.height=t;let x=sn.getPointDistance(d,i.cartographicToCartesian(f,wQe));x<u&&(u=x)}let y=sn.clone(d);for(y.normal=m.negate(y.normal,y.normal),y.distance=y.distance*-1+u,o[1]=y,h=0;h<4;h++){g=p[h];let x=p[(h+1)%4],S=i.geodeticSurfaceNormal(g,FQe),C=m.subtract(x,g,MQe),V=m.cross(C,S,AQe);V=m.normalize(V,V),o[2+h]=sn.fromPointNormal(g,V)}return o}var D_=new m,B_=new m,O_=new m,sK=new m,aK=new m,cK=new m,kQe=new m,UQe=new m,DQe=new m,lK=new m,dK=new m,uK=new m,Ng=new m,If=new $;function tde(e,t,n){D_=e.normal,B_=t.normal,O_=n.normal,sK=m.multiplyByScalar(e.normal,-e.distance,sK),aK=m.multiplyByScalar(t.normal,-t.distance,aK),cK=m.multiplyByScalar(n.normal,-n.distance,cK),lK=m.multiplyByScalar(m.cross(B_,O_,kQe),m.dot(sK,D_),lK),dK=m.multiplyByScalar(m.cross(O_,D_,UQe),m.dot(aK,B_),dK),uK=m.multiplyByScalar(m.cross(D_,B_,DQe),m.dot(cK,O_),uK),If[0]=D_.x,If[1]=B_.x,If[2]=O_.x,If[3]=D_.y,If[4]=B_.y,If[5]=O_.y,If[6]=D_.z,If[7]=B_.z,If[8]=O_.z;let i=$.determinant(If);return Ng=m.add(lK,dK,Ng),Ng=m.add(Ng,uK,Ng),new m(Ng.x/i,Ng.y/i,Ng.z/i)}function BQe(e){let t=new Array(8);for(let n=0;n<4;n++)t[n]=tde(e[0],e[2+(n+3)%4],e[2+n%4]),t[n+4]=tde(e[1],e[2+(n+3)%4],e[2+n%4]);return t}var mK=new m,y1=new m;function hK(e,t){let n=[];for(let i=0;i<4;i++)mK=m.subtract(t[(i+1)%4],t[i],mK),y1=m.cross(e.normal,mK,y1),y1=m.normalize(y1,y1),n[i]=m.clone(y1);return n}Object.defineProperties(c2.prototype,{boundingVolume:{get:function(){return this}},boundingSphere:{get:function(){return this._boundingSphere}}});var fK=new m;c2.prototype.distanceToCamera=function(e){let t=e.camera.positionWC,n=[],i=[],o;sn.getPointDistance(this._boundingPlanes[0],t)>0?(n.push(0),i.push(this._planeVertices[0]),o=this._edgeNormals[0]):sn.getPointDistance(this._boundingPlanes[1],t)>0&&(n.push(1),i.push(this._planeVertices[1]),o=this._edgeNormals[1]);let r,s;for(r=0;r<4;r++)s=2+r,sn.getPointDistance(this._boundingPlanes[s],t)>0&&(n.push(s),i.push(this._planeVertices[s]),o=this._edgeNormals[s]);if(n.length===0)return 0;let a,c;if(n.length===1)return c=this._boundingPlanes[n[0]],a=pK(sn.projectPointOntoPlane(c,t,fK),i[0],c,o),m.distance(a,t);if(n.length===2){if(n[0]===0){let p=[this._vertices[4*n[0]+(n[1]-2)],this._vertices[4*n[0]+(n[1]-2+1)%4]];return a=nde(t,p[0],p[1]),m.distance(a,t)}let u=Number.MAX_VALUE,h;for(r=0;r<2;r++)c=this._boundingPlanes[n[r]],a=pK(sn.projectPointOntoPlane(c,t,fK),i[r],c,this._edgeNormals[n[r]]),h=m.distanceSquared(a,t),h<u&&(u=h);return Math.sqrt(u)}else if(n.length>3)return a=pK(sn.projectPointOntoPlane(this._boundingPlanes[1],t,fK),this._planeVertices[1],this._boundingPlanes[1],this._edgeNormals[1]),m.distance(a,t);let d=n[1]===2&&n[2]===5?0:1;return n[0]===0?m.distance(t,this._vertices[(n[1]-2+d)%4]):m.distance(t,this._vertices[4+(n[1]-2+d)%4])};var OQe=new m,YQe=new m;function nde(e,t,n){let i=m.subtract(n,t,OQe),o=m.subtract(e,t,YQe),r=m.dot(i,o);if(r<=0)return t;let s=m.dot(i,i);return r>=s?n:(r=r/s,new m((1-r)*t.x+r*n.x,(1-r)*t.y+r*n.y,(1-r)*t.z+r*n.z))}var zQe=new sn(m.UNIT_X,0);function pK(e,t,n,i){let o=Number.MAX_VALUE,r,s,a;for(let c=0;c<t.length;c++){let d=sn.fromPointNormal(t[c],i[c],zQe);sn.getPointDistance(d,e)<0||(a=nde(e,t[c],t[(c+1)%4]),r=m.distance(e,a),r<o&&(o=r,s=a))}return l(s)?s:e}c2.prototype.intersectPlane=function(e){let t=0,n=0;for(let i=0;i<this._vertices.length;i++)m.dot(e.normal,this._vertices[i])+e.distance<0?n++:t++;return t===this._vertices.length?zt.INSIDE:n===this._vertices.length?zt.OUTSIDE:zt.INTERSECTING};c2.prototype.createDebugVolume=function(e){let t=new F.clone(F.IDENTITY),n=new Ku({polygonHierarchy:{positions:this._planeVertices[0]}}),i=Ku.createGeometry(n),o=new Et({geometry:i,id:"outline",modelMatrix:t,attributes:{color:Yt.fromColor(e)}}),r=new Ku({polygonHierarchy:{positions:this._planeVertices[1]}}),s=Ku.createGeometry(r),a=new Et({geometry:s,id:"outline",modelMatrix:t,attributes:{color:Yt.fromColor(e)}}),c=[];for(let d=0;d<4;d++){let u=new Ku({polygonHierarchy:{positions:this._planeVertices[2+d]}}),h=Ku.createGeometry(u);c[d]=new Et({geometry:h,id:"outline",modelMatrix:t,attributes:{color:Yt.fromColor(e)}})}return new In({geometryInstances:[c[0],c[1],c[2],c[3],a,o],appearance:new dn({translucent:!1,flat:!0}),asynchronous:!1})};var l2=c2;var vUn=_(T(),1);var CUn=_(T(),1);var yUn=_(T(),1);var HQe=new m(1,1,1),bk=Math.cos,gk=Math.sin;function x1(e){e=e??Y.EMPTY_OBJECT;let t=e.radii??HQe,n=e.innerRadii??t,i=e.minimumClock??0,o=e.maximumClock??X.TWO_PI,r=e.minimumCone??0,s=e.maximumCone??X.PI,a=Math.round(e.stackPartitions??10),c=Math.round(e.slicePartitions??8),d=Math.round(e.subdivisions??128);this._radii=m.clone(t),this._innerRadii=m.clone(n),this._minimumClock=i,this._maximumClock=o,this._minimumCone=r,this._maximumCone=s,this._stackPartitions=a,this._slicePartitions=c,this._subdivisions=d,this._offsetAttribute=e.offsetAttribute,this._workerName="createEllipsoidOutlineGeometry"}x1.packedLength=2*m.packedLength+8;x1.pack=function(e,t,n){return n=n??0,m.pack(e._radii,t,n),n+=m.packedLength,m.pack(e._innerRadii,t,n),n+=m.packedLength,t[n++]=e._minimumClock,t[n++]=e._maximumClock,t[n++]=e._minimumCone,t[n++]=e._maximumCone,t[n++]=e._stackPartitions,t[n++]=e._slicePartitions,t[n++]=e._subdivisions,t[n]=e._offsetAttribute??-1,t};var ide=new m,ode=new m,Ib={radii:ide,innerRadii:ode,minimumClock:void 0,maximumClock:void 0,minimumCone:void 0,maximumCone:void 0,stackPartitions:void 0,slicePartitions:void 0,subdivisions:void 0,offsetAttribute:void 0};x1.unpack=function(e,t,n){t=t??0;let i=m.unpack(e,t,ide);t+=m.packedLength;let o=m.unpack(e,t,ode);t+=m.packedLength;let r=e[t++],s=e[t++],a=e[t++],c=e[t++],d=e[t++],u=e[t++],h=e[t++],p=e[t];return l(n)?(n._radii=m.clone(i,n._radii),n._innerRadii=m.clone(o,n._innerRadii),n._minimumClock=r,n._maximumClock=s,n._minimumCone=a,n._maximumCone=c,n._stackPartitions=d,n._slicePartitions=u,n._subdivisions=h,n._offsetAttribute=p===-1?void 0:p,n):(Ib.minimumClock=r,Ib.maximumClock=s,Ib.minimumCone=a,Ib.maximumCone=c,Ib.stackPartitions=d,Ib.slicePartitions=u,Ib.subdivisions=h,Ib.offsetAttribute=p===-1?void 0:p,new x1(Ib))};x1.createGeometry=function(e){let t=e._radii;if(t.x<=0||t.y<=0||t.z<=0)return;let n=e._innerRadii;if(n.x<=0||n.y<=0||n.z<=0)return;let i=e._minimumClock,o=e._maximumClock,r=e._minimumCone,s=e._maximumCone,a=e._subdivisions,c=ne.fromCartesian3(t),d=e._slicePartitions+1,u=e._stackPartitions+1;d=Math.round(d*Math.abs(o-i)/X.TWO_PI),u=Math.round(u*Math.abs(s-r)/X.PI),d<2&&(d=2),u<2&&(u=2);let h=0,p=1,g=n.x!==t.x||n.y!==t.y||n.z!==t.z,f=!1,y=!1;g&&(p=2,r>0&&(f=!0,h+=d),s<Math.PI&&(y=!0,h+=d));let x=a*p*(u+d),S=new Float64Array(x*3),C=2*(x+h-(d+u)*p),V=Ae.createTypedArray(x,C),L,Z,E,P,W=0,v=new Array(u),A=new Array(u);for(L=0;L<u;L++)P=r+L*(s-r)/(u-1),v[L]=gk(P),A[L]=bk(P);let b=new Array(a),R=new Array(a);for(L=0;L<a;L++)E=i+L*(o-i)/(a-1),b[L]=gk(E),R[L]=bk(E);for(L=0;L<u;L++)for(Z=0;Z<a;Z++)S[W++]=t.x*v[L]*R[Z],S[W++]=t.y*v[L]*b[Z],S[W++]=t.z*A[L];if(g)for(L=0;L<u;L++)for(Z=0;Z<a;Z++)S[W++]=n.x*v[L]*R[Z],S[W++]=n.y*v[L]*b[Z],S[W++]=n.z*A[L];for(v.length=a,A.length=a,L=0;L<a;L++)P=r+L*(s-r)/(a-1),v[L]=gk(P),A[L]=bk(P);for(b.length=d,R.length=d,L=0;L<d;L++)E=i+L*(o-i)/(d-1),b[L]=gk(E),R[L]=bk(E);for(L=0;L<a;L++)for(Z=0;Z<d;Z++)S[W++]=t.x*v[L]*R[Z],S[W++]=t.y*v[L]*b[Z],S[W++]=t.z*A[L];if(g)for(L=0;L<a;L++)for(Z=0;Z<d;Z++)S[W++]=n.x*v[L]*R[Z],S[W++]=n.y*v[L]*b[Z],S[W++]=n.z*A[L];for(W=0,L=0;L<u*p;L++){let w=L*a;for(Z=0;Z<a-1;Z++)V[W++]=w+Z,V[W++]=w+Z+1}let G=u*a*p;for(L=0;L<d;L++)for(Z=0;Z<a-1;Z++)V[W++]=G+L+Z*d,V[W++]=G+L+(Z+1)*d;if(g)for(G=u*a*p+d*a,L=0;L<d;L++)for(Z=0;Z<a-1;Z++)V[W++]=G+L+Z*d,V[W++]=G+L+(Z+1)*d;if(g){let w=u*a*p,M=w+a*d;if(f)for(L=0;L<d;L++)V[W++]=w+L,V[W++]=M+L;if(y)for(w+=a*d-d,M+=a*d-d,L=0;L<d;L++)V[W++]=w+L,V[W++]=M+L}let I=new mn({position:new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:S})});if(l(e._offsetAttribute)){let w=S.length,M=e._offsetAttribute===rn.NONE?0:1,B=new Uint8Array(w/3).fill(M);I.applyOffset=new Ge({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:B})}return new lt({attributes:I,indices:V,primitiveType:we.LINES,boundingSphere:le.fromEllipsoid(c),offsetAttribute:e._offsetAttribute})};var Wd=x1;function _1(e){let t=e.radius??1,i={radii:new m(t,t,t),stackPartitions:e.stackPartitions,slicePartitions:e.slicePartitions,subdivisions:e.subdivisions};this._ellipsoidGeometry=new Wd(i),this._workerName="createSphereOutlineGeometry"}_1.packedLength=Wd.packedLength;_1.pack=function(e,t,n){return Wd.pack(e._ellipsoidGeometry,t,n)};var KQe=new Wd,Y_={radius:void 0,radii:new m,stackPartitions:void 0,slicePartitions:void 0,subdivisions:void 0};_1.unpack=function(e,t,n){let i=Wd.unpack(e,t,KQe);return Y_.stackPartitions=i._stackPartitions,Y_.slicePartitions=i._slicePartitions,Y_.subdivisions=i._subdivisions,l(n)?(m.clone(i._radii,Y_.radii),n._ellipsoidGeometry=new Wd(Y_),n):(Y_.radius=i._radii.x,new _1(Y_))};_1.createGeometry=function(e){return Wd.createGeometry(e._ellipsoidGeometry)};var Xb=_1;function T1(e,t){t===0&&(t=X.EPSILON7),this._boundingSphere=new le(e,t)}Object.defineProperties(T1.prototype,{center:{get:function(){return this._boundingSphere.center}},radius:{get:function(){return this._boundingSphere.radius}},boundingVolume:{get:function(){return this._boundingSphere}},boundingSphere:{get:function(){return this._boundingSphere}}});T1.prototype.distanceToCamera=function(e){let t=this._boundingSphere;return Math.max(0,m.distance(t.center,e.camera.positionWC)-t.radius)};T1.prototype.intersectPlane=function(e){return le.intersectPlane(this._boundingSphere,e)};T1.prototype.update=function(e,t){m.clone(e,this._boundingSphere.center),this._boundingSphere.radius=t};T1.prototype.createDebugVolume=function(e){let t=new Xb({radius:this.radius}),n=F.fromTranslation(this.center,new F.clone(F.IDENTITY)),i=new Et({geometry:t,id:"outline",modelMatrix:n,attributes:{color:Yt.fromColor(e)}});return new In({geometryInstances:i,appearance:new dn({translucent:!1,flat:!0}),asynchronous:!1})};var Wb=T1;var HUn=_(T(),1);var JQe=new m,QQe=new m,jQe=new m,qQe=new m;function z_(e,t,n){n=m.cross(e,t,n);let i=m.magnitude(n);return m.multiplyByScalar(n,X.EPSILON7/i,n)}function bK(e,t){let n=m.normalize(e,qQe),i=m.equalsEpsilon(n,m.UNIT_X,X.EPSILON6)?m.UNIT_Y:m.UNIT_X;return z_(e,i,t)}function rde(e){let t=$.getColumn(e,0,JQe),n=$.getColumn(e,1,QQe),i=$.getColumn(e,2,jQe),o=m.equals(t,m.ZERO),r=m.equals(n,m.ZERO),s=m.equals(i,m.ZERO);return!o&&!r&&!s?e:o&&r&&s?(e[0]=X.EPSILON7,e[4]=X.EPSILON7,e[8]=X.EPSILON7,e):(o&&!r&&!s?t=z_(n,i,t):!o&&r&&!s?n=z_(t,i,n):!o&&!r&&s?i=z_(n,t,i):o?r?s||(t=bK(i,t),n=z_(i,t,n)):(t=bK(n,t),i=z_(n,t,i)):(n=bK(t,n),i=z_(n,t,i)),$.setColumn(e,0,t,e),$.setColumn(e,1,n,e),$.setColumn(e,2,i,e),e)}function S1(e,t){t=rde(t),this._orientedBoundingBox=new En(e,t),this._boundingSphere=le.fromOrientedBoundingBox(this._orientedBoundingBox)}Object.defineProperties(S1.prototype,{boundingVolume:{get:function(){return this._orientedBoundingBox}},boundingSphere:{get:function(){return this._boundingSphere}}});S1.prototype.distanceToCamera=function(e){return Math.sqrt(this._orientedBoundingBox.distanceSquaredTo(e.camera.positionWC))};S1.prototype.intersectPlane=function(e){return this._orientedBoundingBox.intersectPlane(e)};S1.prototype.update=function(e,t){m.clone(e,this._orientedBoundingBox.center),t=rde(t),$.clone(t,this._orientedBoundingBox.halfAxes),le.fromOrientedBoundingBox(this._orientedBoundingBox,this._boundingSphere)};S1.prototype.createDebugVolume=function(e){let t=new Fm({minimum:new m(-1,-1,-1),maximum:new m(1,1,1)}),n=F.fromRotationTranslation(this.boundingVolume.halfAxes,this.boundingVolume.center),i=new Et({geometry:t,id:"outline",modelMatrix:n,attributes:{color:Yt.fromColor(e)}});return new In({geometryInstances:i,appearance:new dn({translucent:!1,flat:!0}),asynchronous:!1})};var Ol=S1;function tr(e,t,n,i){this._tileset=e,this._header=n;let o=l(n.contents),r=o&&n.contents.length>1||ri(n,"3DTILES_multiple_contents"),s=o&&!r?n.contents[0]:n.content;this._contentHeader=s,this.transform=l(n.transform)?F.unpack(n.transform):F.clone(F.IDENTITY);let a=l(i)?i.computedTransform:e.modelMatrix,c=F.multiply(a,this.transform,new F),d=l(i)?i._initialTransform:F.IDENTITY;this._initialTransform=F.multiply(d,this.transform,new F),this.computedTransform=c,this.metadata=o2(e,n),this._verticalExaggeration=1,this._verticalExaggerationRelativeHeight=0,this._boundingVolume=this.createBoundingVolume(n.boundingVolume,c),this._boundingVolume2D=void 0;let u;l(s)&&l(s.boundingVolume)&&(u=this.createBoundingVolume(s.boundingVolume,c)),this._contentBoundingVolume=u,this._contentBoundingVolume2D=void 0;let h;l(n.viewerRequestVolume)&&(h=this.createBoundingVolume(n.viewerRequestVolume,c)),this._viewerRequestVolume=h,this.geometricError=n.geometricError,this._geometricError=n.geometricError,l(this._geometricError)||(this._geometricError=l(i)?i._geometricError:e._geometricError,tr._deprecationWarning("geometricErrorUndefined","Required property geometricError is undefined for this tile. Using parent's geometric error instead.")),this.updateGeometricErrorScale();let p;l(n.refine)?((n.refine==="replace"||n.refine==="add")&&tr._deprecationWarning("lowercase-refine",`This tile uses a lowercase refine "${n.refine}". Instead use "${n.refine.toUpperCase()}".`),p=n.refine.toUpperCase()==="REPLACE"?Uo.REPLACE:Uo.ADD):l(i)?p=i.refine:p=Uo.REPLACE,this.refine=p,this.children=[],this.parent=i;let g,f=!1,y,x,S;if(t=Ze.createIfNeeded(t),r)y=Bo.UNLOADED,x=t.clone();else if(l(s)){let Z=s.uri;l(s.url)&&(tr._deprecationWarning("contentUrl",'This tileset JSON uses the "content.url" property which has been deprecated. Use "content.uri" instead.'),Z=s.url),Z===""?(tr._deprecationWarning("contentUriEmpty","content.uri property is an empty string, which creates a circular dependency, making this tileset invalid. Omit the content property instead"),g=new h1(e,this),f=!0,y=Bo.READY):(y=Bo.UNLOADED,x=t.getDerivedResource({url:Z}),S=ic.getServerKey(x.getUrlComponent()))}else g=new h1(e,this),f=!0,y=Bo.READY;this._content=g,this._contentResource=x,this._contentState=y,this._expiredContent=void 0,this._serverKey=S,this.hasEmptyContent=f,this.hasTilesetContent=!1,this.hasImplicitContent=!1,this.hasRenderableContent=!f,this.hasImplicitContentMetadata=!1,this.hasMultipleContents=r,this.cacheNode=void 0;let C=n.expire,V,L;l(C)&&(V=C.duration,l(C.date)&&(L=q.fromIso8601(C.date))),this.expireDuration=V,this.expireDate=L,this.lastStyleTime=0,this._optimChildrenWithinParent=Ou.NOT_COMPUTED,this.clippingPlanesDirty=!1,this.clippingPolygonsDirty=!1,this.priorityDeferred=!1,this.implicitTileset=void 0,this.implicitCoordinates=void 0,this.implicitSubtree=void 0,this._distanceToCamera=0,this._centerZDepth=0,this._screenSpaceError=0,this._screenSpaceErrorProgressiveResolution=0,this._visibilityPlaneMask=0,this._visible=!1,this._inRequestVolume=!1,this._finalResolution=!0,this._depth=0,this._stackLength=0,this._selectionDepth=0,this._updatedVisibilityFrame=0,this._touchedFrame=0,this._visitedFrame=0,this._selectedFrame=0,this._wasSelectedLastFrame=!1,this._requestedFrame=0,this._ancestorWithContent=void 0,this._ancestorWithContentAvailable=void 0,this._refines=!1,this._shouldSelect=!1,this._isClipped=!0,this._isClippedByPolygon=!1,this._clippingPlanesState=0,this._clippingPolygonsState=0,this._debugBoundingVolume=void 0,this._debugContentBoundingVolume=void 0,this._debugViewerRequestVolume=void 0,this._debugColor=D.fromRandom({alpha:1}),this._debugColorizeTiles=!1,this._priority=0,this._priorityHolder=this,this._priorityProgressiveResolution=!1,this._priorityProgressiveResolutionScreenSpaceErrorLeaf=!1,this._priorityReverseScreenSpaceError=0,this._foveatedFactor=0,this._wasMinPriorityChild=!1,this._loadTimestamp=new q,this._commandsLength=0,this._color=void 0,this._colorDirty=!1,this._request=void 0}tr._deprecationWarning=Vs;Object.defineProperties(tr.prototype,{tileset:{get:function(){return this._tileset}},content:{get:function(){return this._content}},boundingVolume:{get:function(){return this._boundingVolume}},contentBoundingVolume:{get:function(){return this._contentBoundingVolume??this._boundingVolume}},boundingSphere:{get:function(){return this._boundingVolume.boundingSphere}},isVisible:{get:function(){return this._visible&&this._inRequestVolume}},extras:{get:function(){return this._header.extras}},color:{get:function(){return l(this._color)||(this._color=new D),D.clone(this._color)},set:function(e){this._color=D.clone(e,this._color),this._colorDirty=!0}},contentAvailable:{get:function(){return this.contentReady&&this.hasRenderableContent||l(this._expiredContent)&&!this.contentFailed}},contentReady:{get:function(){return this._contentState===Bo.READY}},contentUnloaded:{get:function(){return this._contentState===Bo.UNLOADED}},hasUnloadedRenderableContent:{get:function(){return this.hasRenderableContent&&this.contentUnloaded}},contentExpired:{get:function(){return this._contentState===Bo.EXPIRED}},contentFailed:{get:function(){return this._contentState===Bo.FAILED}},commandsLength:{get:function(){return this._commandsLength}}});var kg=new m;function $Qe(e,t){let{tileset:n,boundingSphere:i}=e,{radius:o,center:r}=i,{camera:s}=t,a=m.multiplyByScalar(s.directionWC,e._centerZDepth,kg),c=m.add(s.positionWC,a,kg),d=m.subtract(c,r,kg);if(m.magnitude(d)>o){let L=m.normalize(d,kg),Z=m.multiplyByScalar(L,o,kg),E=m.add(r,Z,kg),P=m.subtract(E,s.positionWC,kg),W=m.normalize(P,kg);e._foveatedFactor=1-Math.abs(m.dot(s.directionWC,W))}else e._foveatedFactor=0;let p=e.refine===Uo.REPLACE,g=n.isSkippingLevelOfDetail;if(p&&!g||!n.foveatedScreenSpaceError||n.foveatedConeSize===1||e._priorityProgressiveResolution&&p&&g||n._pass===wo.PRELOAD_FLIGHT||n._pass===wo.PRELOAD)return!1;let f=1-Math.cos(s.frustum.fov*.5),y=n.foveatedConeSize*f;if(e._foveatedFactor<=y)return!1;let x=f-y,S=X.clamp((e._foveatedFactor-y)/x,0,1),C=n.foveatedInterpolationCallback(n.foveatedMinimumScreenSpaceErrorRelaxation,n.memoryAdjustedScreenSpaceError,S),V=e._screenSpaceError===0&&l(e.parent)?e.parent._screenSpaceError*.5:e._screenSpaceError;return n.memoryAdjustedScreenSpaceError-C<=V}var dde=new q;tr.prototype.getScreenSpaceError=function(e,t,n){let i=this._tileset,o=n??1,r=l(this.parent)?this.parent.geometricError:i._scaledGeometricError,s=t?r:this.geometricError;if(s===0)return 0;let{camera:a,context:c}=e,d=a.frustum,u=c.drawingBufferWidth,h=c.drawingBufferHeight*o,p;if(e.mode===oe.SCENE2D||d instanceof an){let g=d.offCenterFrustum;l(g)&&(d=g);let f=Math.max(d.top-d.bottom,d.right-d.left)/Math.max(u,h);p=s/f}else{let g=Math.max(this._distanceToCamera,X.EPSILON7),f=d.sseDenominator;if(p=s*h/(g*f),i.dynamicScreenSpaceError){let y=i._dynamicScreenSpaceErrorComputedDensity,x=i.dynamicScreenSpaceErrorFactor,S=X.fog(g,y)*x;p-=S}}return p/=e.pixelRatio,p};function e4e(e,t){if(e.progressiveResolutionHeightFraction<=0||e.progressiveResolutionHeightFraction>.5)return!1;let n=e.memoryAdjustedScreenSpaceError,i=t._screenSpaceErrorProgressiveResolution>n;t._priorityProgressiveResolutionScreenSpaceErrorLeaf=!1;let o=t.parent,r=t._screenSpaceErrorProgressiveResolution<=n,s=l(o)&&o._screenSpaceErrorProgressiveResolution>n;return r&&s&&(t._priorityProgressiveResolutionScreenSpaceErrorLeaf=!0,i=!0),i}function t4e(e,t){let n=t.parent,o=l(n)&&(!e.isSkippingLevelOfDetail||t._screenSpaceError===0||n.hasTilesetContent||n.hasImplicitContent)?n._screenSpaceError:t._screenSpaceError;return e.root._screenSpaceError-o}tr.prototype.updateVisibility=function(e){let{parent:t,tileset:n}=this;if(this._updatedVisibilityFrame===n._updatedVisibilityFrame)return;let i=l(t)?t.computedTransform:n.modelMatrix,o=l(t)?t._visibilityPlaneMask:hs.MASK_INDETERMINATE;this.updateTransform(i,e),this._distanceToCamera=this.distanceToTile(e),this._centerZDepth=this.distanceToTileCenter(e),this._screenSpaceError=this.getScreenSpaceError(e,!1),this._screenSpaceErrorProgressiveResolution=this.getScreenSpaceError(e,!1,n.progressiveResolutionHeightFraction),this._visibilityPlaneMask=this.visibility(e,o),this._visible=this._visibilityPlaneMask!==hs.MASK_OUTSIDE,this._inRequestVolume=this.insideViewerRequestVolume(e),this._priorityReverseScreenSpaceError=t4e(n,this),this._priorityProgressiveResolution=e4e(n,this),this.priorityDeferred=$Qe(this,e),this._updatedVisibilityFrame=n._updatedVisibilityFrame};tr.prototype.updateExpiration=function(){if(l(this.expireDate)&&this.contentReady&&!this.hasEmptyContent&&!this.hasMultipleContents){let e=q.now(dde);q.lessThan(this.expireDate,e)&&(this._contentState=Bo.EXPIRED,this._expiredContent=this._content)}};function n4e(e){if(!l(e.expireDuration))return;let t=q.now(dde);q.addSeconds(t,e.expireDuration,t),l(e.expireDate)?q.lessThan(e.expireDate,t)&&q.clone(t,e.expireDate):e.expireDate=q.clone(t)}function i4e(e){return function(){return e._priority}}tr.prototype.requestContent=function(){if(!this.hasEmptyContent)return this.hasMultipleContents?o4e(this):s4e(this)};function o4e(e){let t=e._content,n=e._tileset;if(!l(t)){let o=ri(e._header,"3DTILES_multiple_contents")?e._header.extensions["3DTILES_multiple_contents"]:e._header;t=new r2(n,e,e._contentResource.clone(),o),e._content=t}let i=t.requestInnerContents();if(l(i))return e._contentState=Bo.LOADING,i.then(o=>{if(!e.isDestroyed()&&l(o))return e._contentState=Bo.PROCESSING,t}).catch(o=>{if(!e.isDestroyed())throw e._contentState=Bo.FAILED,o})}async function r4e(e,t,n,i,o){let r=e._contentState;e._contentState=Bo.LOADING,++t.statistics.numberOfPendingRequests;let s;try{s=await o}catch(a){if(--t.statistics.numberOfPendingRequests,e.isDestroyed())return;if(n.cancelled||n.state===jn.CANCELLED){e._contentState=r,++t.statistics.numberOfAttemptedRequests;return}throw e._contentState=Bo.FAILED,a}if(e.isDestroyed()){--t.statistics.numberOfPendingRequests;return}if(n.cancelled||n.state===jn.CANCELLED){e._contentState=r,--t.statistics.numberOfPendingRequests,++t.statistics.numberOfAttemptedRequests;return}try{let a=await a4e(e,s);return--t.statistics.numberOfPendingRequests,e.isDestroyed()?void 0:(i&&(e.expireDate=void 0),e._content=a,e._contentState=Bo.PROCESSING,a)}catch(a){if(--t.statistics.numberOfPendingRequests,e.isDestroyed())return;throw e._contentState=Bo.FAILED,a}}function s4e(e){let t=e._contentResource.clone(),n=e.contentExpired;n&&t.setQueryParameters({expired:e.expireDate.toString()});let i=new zo({throttle:!0,throttleByServer:!0,type:ds.TILES3D,priorityFunction:i4e(e),serverKey:e._serverKey});e._request=i,t.request=i;let o=e._tileset,r=t.fetchArrayBuffer();if(!l(r)){++o.statistics.numberOfAttemptedRequests;return}return r4e(e,o,i,n,r)}async function a4e(e,t){let n=Gb(t),i=e._tileset;i._disableSkipLevelOfDetail=i._disableSkipLevelOfDetail||n.contentType===Zs.GEOMETRY||n.contentType===Zs.VECTOR,(n.contentType===Zs.IMPLICIT_SUBTREE||n.contentType===Zs.IMPLICIT_SUBTREE_JSON)&&(e.hasImplicitContent=!0,e.hasRenderableContent=!1),n.contentType===Zs.EXTERNAL_TILESET&&(e.hasTilesetContent=!0,e.hasRenderableContent=!1);let o,r=A_[n.contentType];if(e.isDestroyed())return;l(n.binaryPayload)?o=await Promise.resolve(r(i,e,e._contentResource,n.binaryPayload.buffer,0)):o=await Promise.resolve(r(i,e,e._contentResource,n.jsonPayload));let s=e._contentHeader;if(e.hasImplicitContentMetadata){let c=e.implicitSubtree,d=e.implicitCoordinates;o.metadata=c.getContentMetadataView(d,0)}else e.hasImplicitContent||(o.metadata=M_(i,s));let a=N_(i,s);return l(a)&&(o.group=new qx({metadata:a})),o}tr.prototype.cancelRequests=function(){this.hasMultipleContents?this._content.cancelRequests():this._request.cancel()};tr.prototype.unloadContent=function(){this.hasRenderableContent&&(this._content=this._content&&this._content.destroy(),this._contentState=Bo.UNLOADED,this.lastStyleTime=0,this.clippingPlanesDirty=this._clippingPlanesState===0,this._clippingPlanesState=0,this.clippingPolygonsDirty=this._clippingPolygonsState===0,this._clippingPolygonsState=0,this._debugColorizeTiles=!1,this._debugBoundingVolume=this._debugBoundingVolume&&this._debugBoundingVolume.destroy(),this._debugContentBoundingVolume=this._debugContentBoundingVolume&&this._debugContentBoundingVolume.destroy(),this._debugViewerRequestVolume=this._debugViewerRequestVolume&&this._debugViewerRequestVolume.destroy())};var ude=new le;function yK(e,t){if(t.mode!==oe.SCENE3D&&!l(e._boundingVolume2D)){let n=e._boundingVolume.boundingSphere,i=le.projectTo2D(n,t.mapProjection,ude);e._boundingVolume2D=new Wb(i.center,i.radius)}return t.mode!==oe.SCENE3D?e._boundingVolume2D:e._boundingVolume}function c4e(e,t){if(t.mode!==oe.SCENE3D&&!l(e._contentBoundingVolume2D)){let n=e._contentBoundingVolume.boundingSphere,i=le.projectTo2D(n,t.mapProjection,ude);e._contentBoundingVolume2D=new Wb(i.center,i.radius)}return t.mode!==oe.SCENE3D?e._contentBoundingVolume2D:e._contentBoundingVolume}tr.prototype.visibility=function(e,t){let n=e.cullingVolume,i=yK(this,e),o=this._tileset,r=o.clippingPlanes;if(l(r)&&r.enabled){let a=r.computeIntersectionWithBoundingVolume(i,o.clippingPlanesOriginMatrix);if(this._isClipped=a!==zt.INSIDE,a===zt.OUTSIDE)return hs.MASK_OUTSIDE}let s=o.clippingPolygons;if(l(s)&&s.enabled){let a=s.computeIntersectionWithBoundingVolume(i);this._isClippedByPolygon=a!==zt.OUTSIDE}return n.computeVisibilityWithPlaneMask(i,t)};tr.prototype.contentVisibility=function(e){if(!l(this._contentBoundingVolume))return zt.INSIDE;if(this._visibilityPlaneMask===hs.MASK_INSIDE)return zt.INSIDE;let t=e.cullingVolume,n=c4e(this,e),i=this._tileset,o=i.clippingPlanes;if(l(o)&&o.enabled){let s=o.computeIntersectionWithBoundingVolume(n,i.clippingPlanesOriginMatrix);if(this._isClipped=s!==zt.INSIDE,s===zt.OUTSIDE)return zt.OUTSIDE}let r=i.clippingPolygons;if(l(r)&&r.enabled){let s=r.computeIntersectionWithBoundingVolume(n);if(this._isClippedByPolygon=s!==zt.OUTSIDE,s===zt.INSIDE)return zt.OUTSIDE}return t.computeVisibility(n)};tr.prototype.distanceToTile=function(e){return yK(this,e).distanceToCamera(e)};var l4e=new m;tr.prototype.distanceToTileCenter=function(e){let n=yK(this,e).boundingVolume,i=m.subtract(n.center,e.camera.positionWC,l4e);return m.dot(e.camera.directionWC,i)};tr.prototype.insideViewerRequestVolume=function(e){let t=this._viewerRequestVolume;return!l(t)||t.distanceToCamera(e)===0};var mde=new $,hde=new m,d4e=new $,xK=new m,fde=new ce,pde=new En,gK=new F;function u4e(e,t,n){let i=m.fromElements(e[0],e[1],e[2],xK),o=$.fromArray(e,3,d4e);i=F.multiplyByPoint(t,i,i);let r=F.getMatrix3(t,mde);return o=$.multiply(r,o,o),l(n)?(n.update(i,o),n):new Ol(i,o)}function sde(e,t,n,i){let o=ce.unpack(e,0,fde),r=e[4],s=e[5],a=En.fromRectangle(o,r,s,ne.WGS84,pde),c=a.center,d=a.halfAxes;t=F.multiplyTransformation(t,F.inverseTransformation(n,gK),gK),c=F.multiplyByPoint(t,c,c);let u=F.getMatrix3(t,mde);return d=$.multiply(u,d,d),l(i)&&i instanceof Ol?(i.update(c,d),i):new Ol(c,d)}function m4e(e,t,n,i){if(!F.equalsEpsilon(t,n,X.EPSILON8))return i instanceof Ol?sde(e,t,n,i):sde(e,t,n,void 0);let o=ce.unpack(e,0,fde);return i instanceof Xd?(i.rectangle=ce.clone(o,i.rectangle),i.minimumHeight=e[4],i.maximumHeight=e[5],i.computeBoundingVolumes(ne.WGS84),i):new Xd({rectangle:o,minimumHeight:e[4],maximumHeight:e[5]})}function h4e(e,t,n){let i=m.fromElements(e[0],e[1],e[2],xK),o=e[3];i=F.multiplyByPoint(t,i,i);let r=F.getScale(t,hde),s=m.maximumComponent(r);return o*=s,l(n)?(n.update(i,o),n):new Wb(i,o)}tr.prototype.createBoundingVolume=function(e,t,n){let i=this.metadata,o;if(l(i)&&(o=g_.parseBoundingVolumeSemantic("TILE",i)),l(o)&&(e=o),!l(e))throw new ae("boundingVolume must be defined");if(ri(e,"3DTILES_bounding_volume_S2"))return new l2(e.extensions["3DTILES_bounding_volume_S2"]);let{box:r,region:s,sphere:a}=e;if(l(r)){let c=u4e(r,t,n);return this._verticalExaggeration!==1&&ade(c,this._verticalExaggeration,this._verticalExaggerationRelativeHeight),c}if(l(s)){let c=m4e(s,t,this._initialTransform,n);return this._verticalExaggeration===1||(c instanceof Ol?ade(c,this._verticalExaggeration,this._verticalExaggerationRelativeHeight):(c.minimumHeight=Tr.getHeight(c.minimumHeight,this._verticalExaggeration,this._verticalExaggerationRelativeHeight),c.maximumHeight=Tr.getHeight(c.maximumHeight,this._verticalExaggeration,this._verticalExaggerationRelativeHeight),c.computeBoundingVolumes(ne.WGS84))),c}if(l(a)){let c=h4e(a,t,n);if(this._verticalExaggeration!==1){let d=Tr.getPosition(c.center,ne.WGS84,this._verticalExaggeration,this._verticalExaggerationRelativeHeight,xK),u=c.radius*this._verticalExaggeration;c.update(d,u)}return c}throw new ae("boundingVolume must contain a sphere, region, or box")};var f4e=m.unpackArray(new Array(8*3).fill(0));function ade(e,t,n){let i=e.boundingVolume.computeCorners(f4e).map(r=>Tr.getPosition(r,ne.WGS84,t,n,r)),o=En.fromPoints(i,pde);e.update(o.center,o.halfAxes)}tr.prototype.updateTransform=function(e,t){e=e??F.IDENTITY;let n=F.multiplyTransformation(e,this.transform,gK),i=!F.equals(n,this.computedTransform),o=l(t)&&(this._verticalExaggeration!==t.verticalExaggeration||this._verticalExaggerationRelativeHeight!==t.verticalExaggerationRelativeHeight);if(!i&&!o)return;i&&F.clone(n,this.computedTransform),o&&(this._verticalExaggeration=t.verticalExaggeration,this._verticalExaggerationRelativeHeight=t.verticalExaggerationRelativeHeight);let r=this._header,s=this._contentHeader;this._boundingVolume=this.createBoundingVolume(r.boundingVolume,this.computedTransform,this._boundingVolume),l(this._contentBoundingVolume)&&(this._contentBoundingVolume=this.createBoundingVolume(s.boundingVolume,this.computedTransform,this._contentBoundingVolume)),l(this._viewerRequestVolume)&&(this._viewerRequestVolume=this.createBoundingVolume(r.viewerRequestVolume,this.computedTransform,this._viewerRequestVolume)),this.updateGeometricErrorScale(),this._debugBoundingVolume=this._debugBoundingVolume&&this._debugBoundingVolume.destroy(),this._debugContentBoundingVolume=this._debugContentBoundingVolume&&this._debugContentBoundingVolume.destroy(),this._debugViewerRequestVolume=this._debugViewerRequestVolume&&this._debugViewerRequestVolume.destroy()};tr.prototype.updateGeometricErrorScale=function(){let e=F.getScale(this.computedTransform,hde),t=m.maximumComponent(e);if(this.geometricError=this._geometricError*t,!l(this.parent)){let n=this._tileset;n._scaledGeometricError=n._geometricError*t}};function p4e(e,t,n,i){if(!i.isRender)return;let o=l(e._contentHeader)&&l(e._contentHeader.boundingVolume),r=t.debugShowBoundingVolume||t.debugShowContentBoundingVolume&&!o;if(r){let c;e._finalResolution?e.hasRenderableContent?c=D.WHITE:c=D.DARKGRAY:c=D.YELLOW,l(e._debugBoundingVolume)||(e._debugBoundingVolume=e._boundingVolume.createDebugVolume(c)),e._debugBoundingVolume.update(n);let d=e._debugBoundingVolume.getGeometryInstanceAttributes("outline");d.color=Yt.toValue(c,d.color)}else!r&&l(e._debugBoundingVolume)&&(e._debugBoundingVolume=e._debugBoundingVolume.destroy());t.debugShowContentBoundingVolume&&o?(l(e._debugContentBoundingVolume)||(e._debugContentBoundingVolume=e._contentBoundingVolume.createDebugVolume(D.BLUE)),e._debugContentBoundingVolume.update(n)):!t.debugShowContentBoundingVolume&&l(e._debugContentBoundingVolume)&&(e._debugContentBoundingVolume=e._debugContentBoundingVolume.destroy()),t.debugShowViewerRequestVolume&&l(e._viewerRequestVolume)?(l(e._debugViewerRequestVolume)||(e._debugViewerRequestVolume=e._viewerRequestVolume.createDebugVolume(D.YELLOW)),e._debugViewerRequestVolume.update(n)):!t.debugShowViewerRequestVolume&&l(e._debugViewerRequestVolume)&&(e._debugViewerRequestVolume=e._debugViewerRequestVolume.destroy());let s=t.debugColorizeTiles&&!e._debugColorizeTiles||l(t._heatmap.tilePropertyName),a=!t.debugColorizeTiles&&e._debugColorizeTiles;s?(t._heatmap.colorize(e,n),e._debugColorizeTiles=!0,e.color=e._debugColor):a&&(e._debugColorizeTiles=!1,e.color=D.WHITE),e._colorDirty&&(e._colorDirty=!1,e._content.applyDebugSettings(!0,e._color)),a&&t.makeStyleDirty()}function b4e(e,t,n){let i=e._expiredContent;if(!e.hasMultipleContents&&l(i)){if(!e.contentReady){try{i.update(t,n)}catch{}return}e._expiredContent.destroy(),e._expiredContent=void 0}if(l(e.content))try{e.content.update(t,n)}catch(o){throw e._contentState=Bo.FAILED,o}}function g4e(e,t){let n=t.clippingPlanes,i=0;l(n)&&e._isClipped&&n.enabled&&(i=n.clippingPlanesState),i!==e._clippingPlanesState&&(e._clippingPlanesState=i,e.clippingPlanesDirty=!0)}function y4e(e,t){let n=t.clippingPolygons,i=0;l(n)&&e._isClippedByPolygon&&n.enabled&&(i=n.clippingPolygonsState),i!==e._clippingPolygonsState&&(e._clippingPolygonsState=i,e.clippingPolygonsDirty=!0)}tr.prototype.update=function(e,t,n){let{commandList:i}=t,o=i.length;g4e(this,e),y4e(this,e),p4e(this,e,t,n),b4e(this,e,t);let r=i.length;this._commandsLength=r-o;for(let s=o;s<r;++s){let a=i[s],c=a.pass===Ee.TRANSLUCENT;a.depthForTranslucentClassification=c}this.clippingPlanesDirty=!1,this.clippingPolygonsDirty=!1};var cde=[];tr.prototype.process=function(e,t){!this.contentExpired&&!this.contentReady&&this._content.ready&&(n4e(this),this._selectedFrame=0,this.lastStyleTime=0,q.now(this._loadTimestamp),this._contentState=Bo.READY,!this.hasTilesetContent&&!this.hasImplicitContent&&(e._statistics.incrementLoadCounts(this.content),++e._statistics.numberOfTilesWithContentReady,++e._statistics.numberOfLoadedTilesTotal,e._cache.add(this)));let n=t.commandList;t.commandList=cde;try{this._content.update(e,t)}catch(i){throw this._contentState=Bo.FAILED,i}cde.length=0,t.commandList=n};function lde(e,t,n){let i=e*Math.pow(10,t);return parseInt(i)*Math.pow(10,n)}function yk(e,t,n){return Math.max(X.normalize(e,t,n)-X.EPSILON7,0)}tr.prototype.updatePriority=function(){let e=this.tileset,t=e.preferLeaves,n=e._minimumPriority,i=e._maximumPriority,o=4,r=1,s=0,a=o,c=s+a,d=o,u=c+d,h=r,p=Math.pow(10,u),g=u+h,f=r,y=Math.pow(10,g),x=g+f,S=Math.pow(10,x),C=yk(this._depth,n.depth,i.depth);C=t?1-C:C;let L=!e.isSkippingLevelOfDetail&&this.refine===Uo.REPLACE?yk(this._priorityHolder._distanceToCamera,n.distance,i.distance):yk(this._priorityReverseScreenSpaceError,n.reverseScreenSpaceError,i.reverseScreenSpaceError),Z=lde(L,a,s),E=this._priorityProgressiveResolution?0:p,P=yk(this._priorityHolder._foveatedFactor,n.foveatedFactor,i.foveatedFactor),W=lde(P,d,c),v=this.priorityDeferred?y:0,A=e._pass===wo.PRELOAD_FLIGHT?0:S;this._priority=C+Z+E+W+v+A};tr.prototype.isDestroyed=function(){return!1};tr.prototype.destroy=function(){return this._content=this._content&&this._content.destroy(),this._expiredContent=this._expiredContent&&!this._expiredContent.isDestroyed()&&this._expiredContent.destroy(),this._debugBoundingVolume=this._debugBoundingVolume&&this._debugBoundingVolume.destroy(),this._debugContentBoundingVolume=this._debugContentBoundingVolume&&this._debugContentBoundingVolume.destroy(),this._debugViewerRequestVolume=this._debugViewerRequestVolume&&this._debugViewerRequestVolume.destroy(),me(this)};var Ju=tr;var n3n=_(T(),1);var YDn=_(T(),1);function Pb(e){e=e??Y.EMPTY_OBJECT;let t=e.id,n=e.group,i=e.class,o=l(n.properties)?n.properties:{};this._class=i,this._properties=o,this._id=t,this._extras=n.extras,this._extensions=n.extensions}Object.defineProperties(Pb.prototype,{class:{get:function(){return this._class}},id:{get:function(){return this._id}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});Pb.prototype.hasProperty=function(e){return Nn.hasProperty(e,this._properties,this._class)};Pb.prototype.hasPropertyBySemantic=function(e){return Nn.hasPropertyBySemantic(e,this._properties,this._class)};Pb.prototype.getPropertyIds=function(e){return Nn.getPropertyIds(this._properties,this._class,e)};Pb.prototype.getProperty=function(e){return Nn.getProperty(e,this._properties,this._class)};Pb.prototype.setProperty=function(e,t){return Nn.setProperty(e,t,this._properties,this._class)};Pb.prototype.getPropertyBySemantic=function(e){return Nn.getPropertyBySemantic(e,this._properties,this._class)};Pb.prototype.setPropertyBySemantic=function(e,t){return Nn.setPropertyBySemantic(e,t,this._properties,this._class)};var C1=Pb;var QDn=_(T(),1);function vb(e){e=e??Y.EMPTY_OBJECT;let t=e.tileset,n=e.class,i=l(t.properties)?t.properties:{};this._class=n,this._properties=i,this._extras=t.extras,this._extensions=t.extensions}Object.defineProperties(vb.prototype,{class:{get:function(){return this._class}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});vb.prototype.hasProperty=function(e){return Nn.hasProperty(e,this._properties,this._class)};vb.prototype.hasPropertyBySemantic=function(e){return Nn.hasPropertyBySemantic(e,this._properties,this._class)};vb.prototype.getPropertyIds=function(e){return Nn.getPropertyIds(this._properties,this._class,e)};vb.prototype.getProperty=function(e){return Nn.getProperty(e,this._properties,this._class)};vb.prototype.setProperty=function(e,t){return Nn.setProperty(e,t,this._properties,this._class)};vb.prototype.getPropertyBySemantic=function(e){return Nn.getPropertyBySemantic(e,this._properties,this._class)};vb.prototype.setPropertyBySemantic=function(e,t){return Nn.setPropertyBySemantic(e,t,this._properties,this._class)};var d2=vb;function bde(e){e=e??Y.EMPTY_OBJECT;let t=e.metadataJson,n=e.schema,i=t.metadata??t.tileset,o;l(i)&&(o=new d2({tileset:i,class:n.classes[i.class]}));let r=[],s=[],a=t.groups;if(Array.isArray(a)){let c=a.length;for(let d=0;d<c;d++){let u=a[d];s.push(new C1({group:u,class:n.classes[u.class]}))}}else if(l(a)){r=Object.keys(a).sort();let c=r.length;for(let d=0;d<c;d++){let u=r[d];if(a.hasOwnProperty(u)){let h=a[u];s.push(new C1({id:u,group:a[u],class:n.classes[h.class]}))}}}this._schema=n,this._groups=s,this._groupIds=r,this._tileset=o,this._statistics=t.statistics,this._extras=t.extras,this._extensions=t.extensions}Object.defineProperties(bde.prototype,{schema:{get:function(){return this._schema}},groups:{get:function(){return this._groups}},groupIds:{get:function(){return this._groupIds}},tileset:{get:function(){return this._tileset}},statistics:{get:function(){return this._statistics}},extras:{get:function(){return this._extras}},extensions:{get:function(){return this._extensions}}});var H_=bde;var c3n=_(T(),1);var gde={},x4e=new m;gde.checkChildrenWithinParent=function(e){let t=e.children,n=t.length,i=e.boundingVolume;if(i instanceof Ol||i instanceof Xd){let o=i._orientedBoundingBox;e._optimChildrenWithinParent=Ou.USE_OPTIMIZATION;for(let r=0;r<n;++r){let a=t[r].boundingVolume;if(!(a instanceof Ol||a instanceof Xd)){e._optimChildrenWithinParent=Ou.SKIP_OPTIMIZATION;break}let c=a._orientedBoundingBox,d=m.subtract(c.center,o.center,x4e),u=m.magnitude(d);m.divideByScalar(d,u,d);let h=Math.abs(o.halfAxes[0]*d.x)+Math.abs(o.halfAxes[1]*d.y)+Math.abs(o.halfAxes[2]*d.z)+Math.abs(o.halfAxes[3]*d.x)+Math.abs(o.halfAxes[4]*d.y)+Math.abs(o.halfAxes[5]*d.z)+Math.abs(o.halfAxes[6]*d.x)+Math.abs(o.halfAxes[7]*d.y)+Math.abs(o.halfAxes[8]*d.z),p=Math.abs(c.halfAxes[0]*d.x)+Math.abs(c.halfAxes[1]*d.y)+Math.abs(c.halfAxes[2]*d.z)+Math.abs(c.halfAxes[3]*d.x)+Math.abs(c.halfAxes[4]*d.y)+Math.abs(c.halfAxes[5]*d.z)+Math.abs(c.halfAxes[6]*d.x)+Math.abs(c.halfAxes[7]*d.y)+Math.abs(c.halfAxes[8]*d.z);if(h<=p+u){e._optimChildrenWithinParent=Ou.SKIP_OPTIMIZATION;break}}}return e._optimChildrenWithinParent===Ou.USE_OPTIMIZATION};var u2=gde;var p3n=_(T(),1);var u3n=_(T(),1);function m2(){this.head=void 0,this.tail=void 0,this._length=0}Object.defineProperties(m2.prototype,{length:{get:function(){return this._length}}});function _4e(e,t,n){this.item=e,this.previous=t,this.next=n}m2.prototype.add=function(e){let t=new _4e(e,this.tail,void 0);return l(this.tail)?(this.tail.next=t,this.tail=t):(this.head=t,this.tail=t),++this._length,t};function yde(e,t){l(t.previous)&&l(t.next)?(t.previous.next=t.next,t.next.previous=t.previous):l(t.previous)?(t.previous.next=void 0,e.tail=t.previous):l(t.next)?(t.next.previous=void 0,e.head=t.next):(e.head=void 0,e.tail=void 0),t.next=void 0,t.previous=void 0}m2.prototype.remove=function(e){l(e)&&(yde(this,e),--this._length)};m2.prototype.splice=function(e,t){if(e===t)return;yde(this,t);let n=e.next;e.next=t,this.tail===e?this.tail=t:n.previous=t,t.next=n,t.previous=e};var h2=m2;function K_(){this._list=new h2,this._sentinel=this._list.add(),this._trimTiles=!1}K_.prototype.reset=function(){this._list.splice(this._list.tail,this._sentinel)};K_.prototype.touch=function(e){let t=e.cacheNode;l(t)&&this._list.splice(this._sentinel,t)};K_.prototype.add=function(e){l(e.cacheNode)||(e.cacheNode=this._list.add(e))};K_.prototype.unloadTile=function(e,t,n){let i=t.cacheNode;l(i)&&(this._list.remove(i),t.cacheNode=void 0,n(e,t))};K_.prototype.unloadTiles=function(e,t){let n=this._trimTiles;this._trimTiles=!1;let i=this._list,o=this._sentinel,r=i.head;for(;r!==o&&(e.totalMemoryUsageInBytes>e.cacheBytes||n);){let s=r.item;r=r.next,this.unloadTile(e,s,t)}};K_.prototype.trim=function(){this._trimTiles=!0};var f2=K_;var T3n=_(T(),1);function xk(e){this.tilePropertyName=e,this._minimum=Number.MAX_VALUE,this._maximum=-Number.MAX_VALUE,this._previousMinimum=Number.MAX_VALUE,this._previousMaximum=-Number.MAX_VALUE,this._referenceMinimum={},this._referenceMaximum={}}function TK(e,t){let n;return t==="_loadTimestamp"?n=q.toDate(e).getTime():n=e,n}xk.prototype.setReferenceMinimumMaximum=function(e,t,n){this._referenceMinimum[n]=TK(e,n),this._referenceMaximum[n]=TK(t,n)};function T4e(e,t){let n=e.tilePropertyName;if(l(n)){let i=TK(t[n],n);return l(i)?(e._maximum=Math.max(i,e._maximum),e._minimum=Math.min(i,e._minimum),i):(e.tilePropertyName=void 0,i)}}var _K=[new D(.1,.1,.1,1),new D(.153,.278,.878,1),new D(.827,.231,.49,1),new D(.827,.188,.22,1),new D(1,.592,.259,1),new D(1,.843,0,1)];xk.prototype.colorize=function(e,t){let n=this.tilePropertyName;if(!l(n)||!e.contentAvailable||e._selectedFrame!==t.frameNumber)return;let i=T4e(this,e),o=this._previousMinimum,r=this._previousMaximum;if(o===Number.MAX_VALUE||r===-Number.MAX_VALUE)return;let s=r-o+X.EPSILON7,c=X.clamp(i-o,0,s)/s,d=_K.length-1,u=c*d,h=Math.floor(u),p=Math.ceil(u),g=u-h,f=_K[h],y=_K[p],x=D.clone(D.WHITE);x.red=X.lerp(f.red,y.red,g),x.green=X.lerp(f.green,y.green,g),x.blue=X.lerp(f.blue,y.blue,g),e._debugColor=x};xk.prototype.resetMinimumMaximum=function(){let e=this.tilePropertyName;if(l(e)){let t=this._referenceMinimum[e],n=this._referenceMaximum[e],i=l(t)&&l(n);this._previousMinimum=i?t:this._minimum,this._previousMaximum=i?n:this._maximum,this._minimum=Number.MAX_VALUE,this._maximum=-Number.MAX_VALUE}};var p2=xk;var L3n=_(T(),1);function V1(){this.selected=0,this.visited=0,this.numberOfCommands=0,this.numberOfAttemptedRequests=0,this.numberOfPendingRequests=0,this.numberOfTilesProcessing=0,this.numberOfTilesWithContentReady=0,this.numberOfTilesTotal=0,this.numberOfLoadedTilesTotal=0,this.numberOfFeaturesSelected=0,this.numberOfFeaturesLoaded=0,this.numberOfPointsSelected=0,this.numberOfPointsLoaded=0,this.numberOfTrianglesSelected=0,this.numberOfTilesStyled=0,this.numberOfFeaturesStyled=0,this.numberOfTilesCulledWithChildrenUnion=0,this.geometryByteLength=0,this.texturesByteLength=0,this.texturesReferenceCounterById={},this.batchTableByteLength=0}V1.prototype.clear=function(){this.selected=0,this.visited=0,this.numberOfCommands=0,this.numberOfAttemptedRequests=0,this.numberOfFeaturesSelected=0,this.numberOfPointsSelected=0,this.numberOfTrianglesSelected=0,this.numberOfTilesStyled=0,this.numberOfFeaturesStyled=0,this.numberOfTilesCulledWithChildrenUnion=0};V1.prototype.incrementSelectionCounts=function(e){this.numberOfFeaturesSelected+=e.featuresLength,this.numberOfPointsSelected+=e.pointsLength,this.numberOfTrianglesSelected+=e.trianglesLength;let t=e.innerContents;if(l(t)){let n=t.length;for(let i=0;i<n;++i)this.incrementSelectionCounts(t[i])}};V1.prototype.incrementLoadCounts=function(e){if(this.numberOfFeaturesLoaded+=e.featuresLength,this.numberOfPointsLoaded+=e.pointsLength,this.geometryByteLength+=e.geometryByteLength,this.batchTableByteLength+=e.batchTableByteLength,!(e instanceof Gd))this.texturesByteLength+=e.texturesByteLength;else{let n=e.getTextureIds();for(let i of n){let o=this.texturesReferenceCounterById[i]??0;if(o===0){let r=e.getTextureByteLengthById(i);this.texturesByteLength+=r}this.texturesReferenceCounterById[i]=o+1}}let t=e.innerContents;if(l(t)){let n=t.length;for(let i=0;i<n;++i)this.incrementLoadCounts(t[i])}};V1.prototype.decrementLoadCounts=function(e){if(this.numberOfFeaturesLoaded-=e.featuresLength,this.numberOfPointsLoaded-=e.pointsLength,this.geometryByteLength-=e.geometryByteLength,this.batchTableByteLength-=e.batchTableByteLength,!(e instanceof Gd))this.texturesByteLength-=e.texturesByteLength;else{let n=e.getTextureIds();for(let i of n){let o=this.texturesReferenceCounterById[i];if(o===1){delete this.texturesReferenceCounterById[i];let r=e.getTextureByteLengthById(i);this.texturesByteLength-=r}else this.texturesReferenceCounterById[i]=o-1}}let t=e.innerContents;if(l(t)){let n=t.length;for(let i=0;i<n;++i)this.decrementLoadCounts(t[i])}};V1.clone=function(e,t){t.selected=e.selected,t.visited=e.visited,t.numberOfCommands=e.numberOfCommands,t.numberOfAttemptedRequests=e.numberOfAttemptedRequests,t.numberOfPendingRequests=e.numberOfPendingRequests,t.numberOfTilesProcessing=e.numberOfTilesProcessing,t.numberOfTilesWithContentReady=e.numberOfTilesWithContentReady,t.numberOfTilesTotal=e.numberOfTilesTotal,t.numberOfFeaturesSelected=e.numberOfFeaturesSelected,t.numberOfFeaturesLoaded=e.numberOfFeaturesLoaded,t.numberOfPointsSelected=e.numberOfPointsSelected,t.numberOfPointsLoaded=e.numberOfPointsLoaded,t.numberOfTrianglesSelected=e.numberOfTrianglesSelected,t.numberOfTilesStyled=e.numberOfTilesStyled,t.numberOfFeaturesStyled=e.numberOfFeaturesStyled,t.numberOfTilesCulledWithChildrenUnion=e.numberOfTilesCulledWithChildrenUnion,t.geometryByteLength=e.geometryByteLength,t.texturesByteLength=e.texturesByteLength,t.texturesReferenceCounterById={...e.texturesReferenceCounterById},t.batchTableByteLength=e.batchTableByteLength};var fh=V1;var G3n=_(T(),1);function b2(){this._style=void 0,this._styleDirty=!1,this._lastStyleTime=0}Object.defineProperties(b2.prototype,{style:{get:function(){return this._style},set:function(e){e!==this._style&&(this._style=e,this._styleDirty=!0)}}});b2.prototype.makeDirty=function(){this._styleDirty=!0};b2.prototype.resetDirty=function(){this._styleDirty=!1};b2.prototype.applyStyle=function(e){if(!l(e.root)||l(this._style)&&!this._style._ready)return;let t=this._styleDirty;t&&++this._lastStyleTime;let n=this._lastStyleTime,i=e._statistics,o=t?e._selectedTiles:e._selectedTilesToStyle,r=o.length;for(let s=0;s<r;++s){let a=o[s];if(a.lastStyleTime!==n){let c=a.content;a.lastStyleTime=n,c.applyStyle(this._style),i.numberOfFeaturesStyled+=c.featuresLength,++i.numberOfTilesStyled}}};var g2=b2;var F3n=_(T(),1);function S4e(e,t,n){let i=ri(t,"3DTILES_implicit_tiling")?t.extensions["3DTILES_implicit_tiling"]:t.implicitTiling;this.baseResource=e,this.geometricError=t.geometricError,this.metadataSchema=n;let o=t.boundingVolume;if(!l(o.box)&&!l(o.region)&&!ri(o,"3DTILES_bounding_volume_S2")&&!ri(o,"3DTILES_bounding_volume_cylinder"))throw new ae("Only box, region, 3DTILES_bounding_volume_S2, and 3DTILES_bounding_volume_cylinder are supported for implicit tiling");this.boundingVolume=o,this.refine=t.refine,this.subtreeUriTemplate=new Ze({url:i.subtrees.uri}),this.contentUriTemplates=[],this.contentHeaders=[];let r=C4e(t);for(let s=0;s<r.length;s++){let a=r[s];this.contentHeaders.push(Ye(a,!0));let c=new Ze({url:a.uri});this.contentUriTemplates.push(c)}this.contentCount=this.contentHeaders.length,this.tileHeader=V4e(t),this.subdivisionScheme=$r[i.subdivisionScheme],this.branchingFactor=$r.getBranchingFactor(this.subdivisionScheme),this.subtreeLevels=i.subtreeLevels,l(i.availableLevels)?this.availableLevels=i.availableLevels:this.availableLevels=i.maximumLevel+1}function C4e(e){if(ri(e,"3DTILES_multiple_contents")){let t=e.extensions["3DTILES_multiple_contents"];return l(t.contents)?t.contents:t.content}return l(e.contents)?e.contents:l(e.content)?[e.content]:[]}function V4e(e){let t=Ye(e,!0);return l(t.extensions)&&(delete t.extensions["3DTILES_implicit_tiling"],delete t.extensions["3DTILES_multiple_contents"],Object.keys(t.extensions).length===0&&delete t.extensions),delete t.implicitTiling,delete t.contents,delete t.content,t}var J_=S4e;var O3n=_(T(),1);var N3n=_(T(),1);var y2={};function xde(e){return e=(e^e<<8)&16711935,e=(e^e<<4)&252645135,e=(e^e<<2)&858993459,e=(e^e<<1)&1431655765,e}function SK(e){return e=(e^e<<16)&50331903,e=(e^e<<8)&50393103,e=(e^e<<4)&51130563,e=(e^e<<2)&153391689,e}function _de(e){return e&=1431655765,e=(e^e>>1)&858993459,e=(e^e>>2)&252645135,e=(e^e>>4)&16711935,e=(e^e>>8)&65535,e}function CK(e){return e&=153391689,e=(e^e>>2)&51130563,e=(e^e>>4)&50393103,e=(e^e>>8)&4278190335,e=(e^e>>16)&1023,e}y2.encode2D=function(e,t){return(xde(e)|xde(t)<<1)>>>0};y2.decode2D=function(e,t){return l(t)||(t=new Array(2)),t[0]=_de(e),t[1]=_de(e>>1),t};y2.encode3D=function(e,t,n){return SK(e)|SK(t)<<1|SK(n)<<2};y2.decode3D=function(e,t){return l(t)||(t=new Array(3)),t[0]=CK(e),t[1]=CK(e>>1),t[2]=CK(e>>2),t};var Ug=y2;function Oo(e){this.subdivisionScheme=e.subdivisionScheme,this.subtreeLevels=e.subtreeLevels,this.level=e.level,this.x=e.x,this.y=e.y,this.z=void 0,e.subdivisionScheme===$r.OCTREE&&(this.z=e.z)}Object.defineProperties(Oo.prototype,{childIndex:{get:function(){let e=0;return e|=this.x&1,e|=(this.y&1)<<1,this.subdivisionScheme===$r.OCTREE&&(e|=(this.z&1)<<2),e}},mortonIndex:{get:function(){return this.subdivisionScheme===$r.OCTREE?Ug.encode3D(this.x,this.y,this.z):Ug.encode2D(this.x,this.y)}},tileIndex:{get:function(){let e=this.subdivisionScheme===$r.OCTREE?((1<<3*this.level)-1)/7:((1<<2*this.level)-1)/3,t=this.mortonIndex;return e+t}}});Oo.prototype.getDescendantCoordinates=function(e){let t=this.level+e.level,n=(this.x<<e.level)+e.x,i=(this.y<<e.level)+e.y;if(this.subdivisionScheme===$r.OCTREE){let o=(this.z<<e.level)+e.z;return new Oo({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:t,x:n,y:i,z:o})}return new Oo({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:t,x:n,y:i})};Oo.prototype.getAncestorCoordinates=function(e){let t=1<<e,n=this.level-e,i=Math.floor(this.x/t),o=Math.floor(this.y/t);if(this.subdivisionScheme===$r.OCTREE){let r=Math.floor(this.z/t);return new Oo({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:n,x:i,y:o,z:r})}return new Oo({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:n,x:i,y:o})};Oo.prototype.getOffsetCoordinates=function(e){let t=e.level-this.level,n=1<<t,i=e.x%n,o=e.y%n;if(this.subdivisionScheme===$r.OCTREE){let r=e.z%n;return new Oo({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:t,x:i,y:o,z:r})}return new Oo({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:t,x:i,y:o})};Oo.prototype.getChildCoordinates=function(e){let t=this.level+1,n=2*this.x+e%2,i=2*this.y+Math.floor(e/2)%2;if(this.subdivisionScheme===$r.OCTREE){let o=2*this.z+Math.floor(e/4)%2;return new Oo({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:t,x:n,y:i,z:o})}return new Oo({subdivisionScheme:this.subdivisionScheme,subtreeLevels:this.subtreeLevels,level:t,x:n,y:i})};Oo.prototype.getSubtreeCoordinates=function(){return this.getAncestorCoordinates(this.level%this.subtreeLevels)};Oo.prototype.getParentSubtreeCoordinates=function(){return this.getAncestorCoordinates(this.level%this.subtreeLevels+this.subtreeLevels)};Oo.prototype.isAncestor=function(e){let t=e.level-this.level;if(t<=0)return!1;let n=e.x>>t,i=e.y>>t,o=this.x===n,r=this.y===i;if(this.subdivisionScheme===$r.OCTREE){let s=e.z>>t,a=this.z===s;return o&&r&&a}return o&&r};Oo.prototype.isEqual=function(e){return this.subdivisionScheme===e.subdivisionScheme&&this.subtreeLevels===e.subtreeLevels&&this.level===e.level&&this.x===e.x&&this.y===e.y&&(this.subdivisionScheme===$r.OCTREE?this.z===e.z:!0)};Oo.prototype.isImplicitTilesetRoot=function(){return this.level===0};Oo.prototype.isSubtreeRoot=function(){return this.level%this.subtreeLevels===0};Oo.prototype.isBottomOfSubtree=function(){return this.level%this.subtreeLevels===this.subtreeLevels-1};Oo.prototype.getTemplateValues=function(){let e={level:this.level,x:this.x,y:this.y};return this.subdivisionScheme===$r.OCTREE&&(e.z=this.z),e};var Tde=[0,0,0];Oo.fromMortonIndex=function(e,t,n,i){let o;return e===$r.OCTREE?(o=Ug.decode3D(i,Tde),new Oo({subdivisionScheme:e,subtreeLevels:t,level:n,x:o[0],y:o[1],z:o[2]})):(o=Ug.decode2D(i,Tde),new Oo({subdivisionScheme:e,subtreeLevels:t,level:n,x:o[0],y:o[1]}))};Oo.fromTileIndex=function(e,t,n){let i,o,r;return e===$r.OCTREE?(i=Math.floor(X.log2(7*n+1)/3),o=((1<<3*i)-1)/7,r=n-o):(i=Math.floor(X.log2(3*n+1)/2),o=((1<<2*i)-1)/3,r=n-o),Oo.fromMortonIndex(e,t,i,r)};var Q_=Oo;var iBn=_(T(),1);var j3n=_(T(),1);function wb(){}wb.selectTiles=function(e,t){pe.throwInstantiationError()};wb.sortChildrenByDistanceToCamera=function(e,t){return t._distanceToCamera===0&&e._distanceToCamera===0?t._centerZDepth-e._centerZDepth:t._distanceToCamera-e._distanceToCamera};wb.canTraverse=function(e){return e.children.length===0?!1:e.hasTilesetContent||e.hasImplicitContent?!e.contentExpired:e._screenSpaceError>e.tileset.memoryAdjustedScreenSpaceError};wb.selectTile=function(e,t){if(e.contentVisibility(t)===zt.OUTSIDE)return;e._wasSelectedLastFrame=!0;let{content:n,tileset:i}=e;n.featurePropertiesDirty?(n.featurePropertiesDirty=!1,e.lastStyleTime=0,i._selectedTilesToStyle.push(e)):e._selectedFrame<t.frameNumber-1&&(i._selectedTilesToStyle.push(e),e._wasSelectedLastFrame=!1),e._selectedFrame=t.frameNumber,i._selectedTiles.push(e)};wb.visitTile=function(e,t){++e.tileset._statistics.visited,e._visitedFrame=t.frameNumber};wb.touchTile=function(e,t){e._touchedFrame!==t.frameNumber&&(e.tileset._cache.touch(e),e._touchedFrame=t.frameNumber)};wb.loadTile=function(e,t){let{tileset:n}=e;if(e._requestedFrame===t.frameNumber||!e.hasUnloadedRenderableContent&&!e.contentExpired||!L4e(e,t))return;let i=t.camera.timeSinceMoved<n.foveatedTimeDelay;e.priorityDeferred&&i||(e._requestedFrame=t.frameNumber,n._requestedTiles.push(e))};function L4e(e,t){let{tileset:n}=e;if(!n._cullRequestsWhileMoving)return!0;let{positionWCDeltaMagnitude:i,positionWCDeltaMagnitudeLastFrame:o}=t.camera,r=i!==0?i:o,s=Math.max(e.boundingSphere.radius*2,1);return n.cullRequestsWhileMovingMultiplier*r/s<1}wb.updateTile=function(e,t){Sde(e,t),e.updateExpiration(),e._wasMinPriorityChild=!1,e._priorityHolder=e,G4e(e),e._shouldSelect=!1,e._finalResolution=!0};function Sde(e,t){if(e.updateVisibility(t),!e.isVisible)return;let n=e.children.length>0;if((e.hasTilesetContent||e.hasImplicitContent)&&n){let r=e.children[0];Sde(r,t),e._visible=r._visible;return}if(R4e(e,t)){e._visible=!1;return}let i=e.refine===Uo.REPLACE,o=e._optimChildrenWithinParent===Ou.USE_OPTIMIZATION;if(i&&o&&n&&!Z4e(e,t)){++e.tileset._statistics.numberOfTilesCulledWithChildrenUnion,e._visible=!1;return}}function R4e(e,t){let{parent:n,tileset:i}=e;return!l(n)||n.hasTilesetContent||n.hasImplicitContent||n.refine!==Uo.ADD?!1:e.getScreenSpaceError(t,!0)<=i.memoryAdjustedScreenSpaceError}function Z4e(e,t){let n=!1,i=e.children;for(let o=0;o<i.length;++o){let r=i[o];r.updateVisibility(t),n=n||r.isVisible}return n}function G4e(e){let t=e.tileset._minimumPriority,n=e.tileset._maximumPriority,i=e._priorityHolder;n.distance=Math.max(i._distanceToCamera,n.distance),t.distance=Math.min(i._distanceToCamera,t.distance),n.depth=Math.max(e._depth,n.depth),t.depth=Math.min(e._depth,t.depth),n.foveatedFactor=Math.max(i._foveatedFactor,n.foveatedFactor),t.foveatedFactor=Math.min(i._foveatedFactor,t.foveatedFactor),n.reverseScreenSpaceError=Math.max(e._priorityReverseScreenSpaceError,n.reverseScreenSpaceError),t.reverseScreenSpaceError=Math.min(e._priorityReverseScreenSpaceError,t.reverseScreenSpaceError)}var Js=wb;function Cde(){}var x2={stack:new qc,stackMaximumLength:0};Cde.selectTiles=function(e,t){e._selectedTiles.length=0,e._requestedTiles.length=0,e.hasMixedContent=!1;let n=!0,i=e.root;if(i.updateVisibility(t),!i.isVisible)return n;let{touchTile:o,visitTile:r}=Js,s=x2.stack;for(s.push(i);s.length>0;){x2.stackMaximumLength=Math.max(x2.stackMaximumLength,s.length);let a=s.pop(),c=a.refine===Uo.ADD,d=a.refine===Uo.REPLACE,u=E4e(a);u&&I4e(a,s,t),(c||d&&!u)&&(X4e(e,a),o(a,t),W4e(a,t),a.hasRenderableContent&&!a.contentAvailable&&(n=!1)),r(a,t)}return x2.stack.trim(x2.stackMaximumLength),n};function E4e(e){return e.children.length===0?!1:e.hasTilesetContent||e.hasImplicitContent?!e.contentExpired:(e.hasEmptyContent,!0)}function I4e(e,t,n){let{children:i}=e;for(let o=0;o<i.length;++o){let r=i[o];r.updateVisibility(n),r.isVisible&&t.push(r)}}function X4e(e,t){(t.hasUnloadedRenderableContent||t.contentExpired)&&(t._priority=0,e._requestedTiles.push(t))}function W4e(e,t){e.contentAvailable&&e.contentVisibility(t)!==zt.OUTSIDE&&e.tileset._selectedTiles.push(e)}var _2=Cde;var lBn=_(T(),1);function Vde(){}var T2={stack:new qc,stackMaximumLength:0},S2={stack:new qc,stackMaximumLength:0};Vde.selectTiles=function(e,t){if(e._requestedTiles.length=0,e.debugFreezeFrame)return;e._selectedTiles.length=0,e._selectedTilesToStyle.length=0,e._emptyTiles.length=0,e.hasMixedContent=!1;let n=e.root;if(Js.updateTile(n,t),!n.isVisible||n.getScreenSpaceError(t,!0)<=e.memoryAdjustedScreenSpaceError)return;v4e(n,t),T2.stack.trim(T2.stackMaximumLength),S2.stack.trim(S2.stackMaximumLength);let i=e._requestedTiles;for(let o=0;o<i.length;++o)i[o].updatePriority()};function VK(e,t){e.contentAvailable&&Js.selectTile(e,t)}function P4e(e,t,n){let i=e.refine===Uo.REPLACE,{tileset:o,children:r}=e,{updateTile:s,loadTile:a,touchTile:c}=Js;for(let f=0;f<r.length;++f)s(r[f],n);r.sort(Js.sortChildrenByDistanceToCamera);let d=i&&e.hasRenderableContent,u=!0,h=!1,p=-1,g=Number.MAX_VALUE;for(let f=0;f<r.length;++f){let y=r[f];if(y.isVisible?(t.push(y),y._foveatedFactor<g&&(p=f,g=y._foveatedFactor),h=!0):(d||o.loadSiblings)&&(y._foveatedFactor<g&&(p=f,g=y._foveatedFactor),a(y,n),c(y,n)),d){let x;y._inRequestVolume?y.hasRenderableContent?x=y.contentAvailable:x=w4e(y,n):x=!1,u=u&&x}}if(h||(u=!1),p!==-1&&i){let f=r[p];f._wasMinPriorityChild=!0;let y=(e._wasMinPriorityChild||e===o.root)&&g<=e._priorityHolder._foveatedFactor?e._priorityHolder:e;y._foveatedFactor=Math.min(f._foveatedFactor,y._foveatedFactor),y._distanceToCamera=Math.min(f._distanceToCamera,y._distanceToCamera);for(let x=0;x<r.length;++x)r[x]._priorityHolder=y}return u}function v4e(e,t){let{tileset:n}=e,{canTraverse:i,loadTile:o,visitTile:r,touchTile:s}=Js,a=T2.stack;for(a.push(e);a.length>0;){T2.stackMaximumLength=Math.max(T2.stackMaximumLength,a.length);let c=a.pop(),d=c.parent,u=!l(d)||d._refines;c._refines=i(c)?P4e(c,a,t)&&u:!1;let h=!c._refines&&u;c.hasRenderableContent?c.refine===Uo.ADD?(VK(c,t),o(c,t)):c.refine===Uo.REPLACE&&(o(c,t),h&&VK(c,t)):(n._emptyTiles.push(c),o(c,t),h&&VK(c,t)),r(c,t),s(c,t)}}function w4e(e,t){let{canTraverse:n,updateTile:i,loadTile:o,touchTile:r}=Js,s=!0,a=S2.stack;for(a.push(e);a.length>0;){S2.stackMaximumLength=Math.max(S2.stackMaximumLength,a.length);let c=a.pop(),d=c.children,u=d.length,h=!c.hasRenderableContent&&n(c);if(!h&&!c.contentAvailable&&(s=!1),i(c,t),c.isVisible||(o(c,t),r(c,t)),h)for(let p=0;p<u;++p){let g=d[p];a.push(g)}}return e.hasEmptyContent||s}var C2=Vde;var pBn=_(T(),1);function Lde(){}var V2={stack:new qc,stackMaximumLength:0},L2={stack:new qc,stackMaximumLength:0},Fb={stack:new qc,stackMaximumLength:0,ancestorStack:new qc,ancestorStackMaximumLength:0},F4e=2;Lde.selectTiles=function(e,t){if(e._requestedTiles.length=0,e.debugFreezeFrame)return;e._selectedTiles.length=0,e._selectedTilesToStyle.length=0,e._emptyTiles.length=0,e.hasMixedContent=!1;let n=e.root;if(Js.updateTile(n,t),!n.isVisible||n.getScreenSpaceError(t,!0)<=e.memoryAdjustedScreenSpaceError)return;D4e(n,t),B4e(n,t),V2.stack.trim(V2.stackMaximumLength),L2.stack.trim(L2.stackMaximumLength),Fb.stack.trim(Fb.stackMaximumLength),Fb.ancestorStack.trim(Fb.ancestorStackMaximumLength);let i=e._requestedTiles;for(let o=0;o<i.length;++o)i[o].updatePriority()};function A4e(e,t){let{updateTile:n,touchTile:i,selectTile:o}=Js,r=L2.stack;for(r.push(e);r.length>0;){L2.stackMaximumLength=Math.max(L2.stackMaximumLength,r.length);let a=r.pop().children;for(let c=0;c<a.length;++c){let d=a[c];d.isVisible&&(d.contentAvailable?(n(d,t),i(d,t),o(d,t)):d._depth-e._depth<F4e&&r.push(d))}}}function _k(e,t){let n=e.contentAvailable?e:e._ancestorWithContentAvailable;l(n)?n._shouldSelect=!0:A4e(e,t)}function M4e(e,t){e._ancestorWithContent=void 0,e._ancestorWithContentAvailable=void 0;let{parent:n}=e;if(!l(n))return;let i=!n.hasUnloadedRenderableContent||n._requestedFrame===t.frameNumber;e._ancestorWithContent=i?n:n._ancestorWithContent,e._ancestorWithContentAvailable=n.contentAvailable?n:n._ancestorWithContentAvailable}function N4e(e,t){let n=t._ancestorWithContent;return!e.immediatelyLoadDesiredLevelOfDetail&&(t._priorityProgressiveResolutionScreenSpaceErrorLeaf||l(n)&&t._screenSpaceError<n._screenSpaceError/e.skipScreenSpaceErrorFactor&&t._depth>n._depth+e.skipLevels)}function k4e(e,t,n){let{tileset:i,children:o}=e,{updateTile:r,loadTile:s,touchTile:a}=Js;for(let d=0;d<o.length;++d)r(o[d],n);o.sort(Js.sortChildrenByDistanceToCamera);let c=!1;for(let d=0;d<o.length;++d){let u=o[d];u.isVisible?(t.push(u),c=!0):i.loadSiblings&&(s(u,n),a(u,n))}return c}function U4e(e,t){let{tileset:n}=e;return n.immediatelyLoadDesiredLevelOfDetail?!1:l(e._ancestorWithContent)?e._screenSpaceError===0?e.parent._screenSpaceError>t:e._screenSpaceError>t:!0}function D4e(e,t){let{tileset:n}=e,i=n.immediatelyLoadDesiredLevelOfDetail?Number.MAX_VALUE:Math.max(n.baseScreenSpaceError,n.memoryAdjustedScreenSpaceError),{canTraverse:o,loadTile:r,visitTile:s,touchTile:a}=Js,c=V2.stack;for(c.push(e);c.length>0;){V2.stackMaximumLength=Math.max(V2.stackMaximumLength,c.length);let d=c.pop();M4e(d,t);let u=d.parent,h=!l(u)||u._refines;d._refines=o(d)?k4e(d,c,t)&&h:!1;let p=!d._refines&&h;d.hasRenderableContent?d.refine===Uo.ADD?(_k(d,t),r(d,t)):d.refine===Uo.REPLACE&&(U4e(d,i)?(r(d,t),p&&_k(d,t)):p?(_k(d,t),r(d,t)):N4e(n,d)&&r(d,t)):(n._emptyTiles.push(d),r(d,t),p&&_k(d,t)),s(d,t),a(d,t)}}function B4e(e,t){let{selectTile:n,canTraverse:i}=Js,{stack:o,ancestorStack:r}=Fb,s;for(o.push(e);o.length>0||r.length>0;){if(Fb.stackMaximumLength=Math.max(Fb.stackMaximumLength,o.length),Fb.ancestorStackMaximumLength=Math.max(Fb.ancestorStackMaximumLength,r.length),r.length>0){let d=r.peek();if(d._stackLength===o.length){r.pop(),d!==s&&(d._finalResolution=!1),n(d,t);continue}}let a=o.pop();if(!l(a))continue;let c=i(a);if(a._shouldSelect)if(a.refine===Uo.ADD)n(a,t);else{if(a._selectionDepth=r.length,a._selectionDepth>0&&(a.tileset.hasMixedContent=!0),s=a,!c){n(a,t);continue}r.push(a),a._stackLength=o.length}if(c){let d=a.children;for(let u=0;u<d.length;++u){let h=d[u];h.isVisible&&o.push(h)}}}}var R2=Lde;function nr(e){e=e??Y.EMPTY_OBJECT,this._url=void 0,this._basePath=void 0,this._root=void 0,this._resource=void 0,this._asset=void 0,this._properties=void 0,this._geometricError=void 0,this._scaledGeometricError=void 0,this._extensionsUsed=void 0,this._extensions=void 0,this._modelUpAxis=void 0,this._modelForwardAxis=void 0,this._cache=new f2,this._processingQueue=[],this._selectedTiles=[],this._emptyTiles=[],this._requestedTiles=[],this._selectedTilesToStyle=[],this._loadTimestamp=void 0,this._timeSinceLoad=0,this._updatedVisibilityFrame=0,this._updatedModelMatrixFrame=0,this._modelMatrixChanged=!1,this._previousModelMatrix=void 0,this._extras=void 0,this._credits=void 0,this._showCreditsOnScreen=e.showCreditsOnScreen??!1,this._cullWithChildrenBounds=e.cullWithChildrenBounds??!0,this._allTilesAdditive=!0,this._hasMixedContent=!1,this._stencilClearCommand=void 0,this._backfaceCommands=new qc,this._maximumScreenSpaceError=e.maximumScreenSpaceError??16,this._memoryAdjustedScreenSpaceError=this._maximumScreenSpaceError,this._cacheBytes=e.cacheBytes??512*1024*1024;let t=e.maximumCacheOverflowBytes??512*1024*1024;this._maximumCacheOverflowBytes=t,this._styleEngine=new g2,this._styleApplied=!1,this._modelMatrix=l(e.modelMatrix)?F.clone(e.modelMatrix):F.clone(F.IDENTITY),this._addHeightCallbacks=[],this._statistics=new fh,this._statisticsLast=new fh,this._statisticsPerPass=new Array(wo.NUMBER_OF_PASSES);for(let o=0;o<wo.NUMBER_OF_PASSES;++o)this._statisticsPerPass[o]=new fh;this._requestedTilesInFlight=[],this._maximumPriority={foveatedFactor:-Number.MAX_VALUE,depth:-Number.MAX_VALUE,distance:-Number.MAX_VALUE,reverseScreenSpaceError:-Number.MAX_VALUE},this._minimumPriority={foveatedFactor:Number.MAX_VALUE,depth:Number.MAX_VALUE,distance:Number.MAX_VALUE,reverseScreenSpaceError:Number.MAX_VALUE},this._heatmap=new p2(e.debugHeatmapTilePropertyName),this.cullRequestsWhileMoving=e.cullRequestsWhileMoving??!0,this._cullRequestsWhileMoving=!1,this.cullRequestsWhileMovingMultiplier=e.cullRequestsWhileMovingMultiplier??60,this.progressiveResolutionHeightFraction=X.clamp(e.progressiveResolutionHeightFraction??.3,0,.5),this.preferLeaves=e.preferLeaves??!1,this._tilesLoaded=!1,this._initialTilesLoaded=!1,this._tileDebugLabels=void 0,this._classificationType=e.classificationType,this._ellipsoid=e.ellipsoid??ne.WGS84,this._initialClippingPlanesOriginMatrix=F.IDENTITY,this._clippingPlanesOriginMatrix=void 0,this._clippingPlanesOriginMatrixDirty=!0,this._vectorClassificationOnly=e.vectorClassificationOnly??!1,this._vectorKeepDecodedPositions=e.vectorKeepDecodedPositions??!1,this.preloadWhenHidden=e.preloadWhenHidden??!1,this.preloadFlightDestinations=e.preloadFlightDestinations??!0,this._pass=void 0,this.dynamicScreenSpaceError=e.dynamicScreenSpaceError??!0,this.foveatedScreenSpaceError=e.foveatedScreenSpaceError??!0,this._foveatedConeSize=e.foveatedConeSize??.1,this._foveatedMinimumScreenSpaceErrorRelaxation=e.foveatedMinimumScreenSpaceErrorRelaxation??0,this.foveatedInterpolationCallback=e.foveatedInterpolationCallback??X.lerp,this.foveatedTimeDelay=e.foveatedTimeDelay??.2,this.dynamicScreenSpaceErrorDensity=e.dynamicScreenSpaceErrorDensity??2e-4,this.dynamicScreenSpaceErrorFactor=e.dynamicScreenSpaceErrorFactor??24,this.dynamicScreenSpaceErrorHeightFalloff=e.dynamicScreenSpaceErrorHeightFalloff??.25,this._dynamicScreenSpaceErrorComputedDensity=0,this.shadows=e.shadows??_n.ENABLED,this.show=e.show??!0,this.colorBlendMode=vl.HIGHLIGHT,this.colorBlendAmount=.5,this._pointCloudShading=new Cf(e.pointCloudShading),this._pointCloudEyeDomeLighting=new lb,this.loadProgress=new be,this.allTilesLoaded=new be,this.initialTilesLoaded=new be,this.tileLoad=new be,this.tileUnload=new be,this.tileFailed=new be,this.tileVisible=new be,this.skipLevelOfDetail=e.skipLevelOfDetail??!1,this._disableSkipLevelOfDetail=!1,this.baseScreenSpaceError=e.baseScreenSpaceError??1024,this.skipScreenSpaceErrorFactor=e.skipScreenSpaceErrorFactor??16,this.skipLevels=e.skipLevels??1,this.immediatelyLoadDesiredLevelOfDetail=e.immediatelyLoadDesiredLevelOfDetail??!1,this.loadSiblings=e.loadSiblings??!1,this._clippingPlanes=void 0,l(e.clippingPlanes)&&fs.setOwner(e.clippingPlanes,this,"_clippingPlanes"),this._clippingPolygons=void 0,l(e.clippingPolygons)&&qm.setOwner(e.clippingPolygons,this,"_clippingPolygons"),l(e.imageBasedLighting)?(this._imageBasedLighting=e.imageBasedLighting,this._shouldDestroyImageBasedLighting=!1):(this._imageBasedLighting=new jx,this._shouldDestroyImageBasedLighting=!0),this._environmentMapManager=new sb(e.environmentMapOptions),this.lightColor=e.lightColor,this.backFaceCulling=e.backFaceCulling??!0,this._enableShowOutline=e.enableShowOutline??!0,this.showOutline=e.showOutline??!0,this.outlineColor=e.outlineColor??D.BLACK,this.splitDirection=e.splitDirection??vr.NONE,this.enableCollision=e.enableCollision??!1,this._projectTo2D=e.projectTo2D??!1,this._enablePick=e.enablePick??!1,this.debugFreezeFrame=e.debugFreezeFrame??!1,this.debugColorizeTiles=e.debugColorizeTiles??!1,this._enableDebugWireframe=e.enableDebugWireframe??!1,this.debugWireframe=e.debugWireframe??!1,this.debugWireframe===!0&&this._enableDebugWireframe===!1&&_t("tileset-debug-wireframe-ignored","enableDebugWireframe must be set to true in the Cesium3DTileset constructor, otherwise debugWireframe will be ignored."),this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this.debugShowContentBoundingVolume=e.debugShowContentBoundingVolume??!1,this.debugShowViewerRequestVolume=e.debugShowViewerRequestVolume??!1,this._tileDebugLabels=void 0,this.debugPickedTileLabelOnly=!1,this.debugPickedTile=void 0,this.debugPickPosition=void 0,this.debugShowGeometricError=e.debugShowGeometricError??!1,this.debugShowRenderingStatistics=e.debugShowRenderingStatistics??!1,this.debugShowMemoryUsage=e.debugShowMemoryUsage??!1,this.debugShowUrl=e.debugShowUrl??!1,this.examineVectorLinesFunction=void 0,this._metadataExtension=void 0,this._customShader=e.customShader;let n=e.featureIdLabel??"featureId_0";typeof n=="number"&&(n=`featureId_${n}`),this._featureIdLabel=n;let i=e.instanceFeatureIdLabel??"instanceFeatureId_0";typeof i=="number"&&(i=`instanceFeatureId_${i}`),this._instanceFeatureIdLabel=i}Object.defineProperties(nr.prototype,{isCesium3DTileset:{get:function(){return!0}},asset:{get:function(){return this._asset}},extensions:{get:function(){return this._extensions}},clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){fs.setOwner(e,this,"_clippingPlanes")}},clippingPolygons:{get:function(){return this._clippingPolygons},set:function(e){qm.setOwner(e,this,"_clippingPolygons")}},properties:{get:function(){return this._properties}},tilesLoaded:{get:function(){return this._tilesLoaded}},resource:{get:function(){return this._resource}},basePath:{get:function(){return Vs("Cesium3DTileset.basePath","Cesium3DTileset.basePath has been deprecated. All tiles are relative to the url of the tileset JSON file that contains them. Use the url property instead."),this._basePath}},style:{get:function(){return this._styleEngine.style},set:function(e){this._styleEngine.style=e}},customShader:{get:function(){return this._customShader},set:function(e){this._customShader=e}},hasMixedContent:{get:function(){return this._hasMixedContent},set:function(e){this._hasMixedContent=e}},isSkippingLevelOfDetail:{get:function(){return this.skipLevelOfDetail&&!l(this._classificationType)&&!this._disableSkipLevelOfDetail&&!this._allTilesAdditive}},metadataExtension:{get:function(){return this._metadataExtension}},metadata:{get:function(){if(l(this._metadataExtension))return this._metadataExtension.tileset}},schema:{get:function(){if(l(this._metadataExtension))return this._metadataExtension.schema}},maximumScreenSpaceError:{get:function(){return this._maximumScreenSpaceError},set:function(e){this._maximumScreenSpaceError=e,this._memoryAdjustedScreenSpaceError=e}},cacheBytes:{get:function(){return this._cacheBytes},set:function(e){this._cacheBytes=e}},maximumCacheOverflowBytes:{get:function(){return this._maximumCacheOverflowBytes},set:function(e){this._maximumCacheOverflowBytes=e}},memoryAdjustedScreenSpaceError:{get:function(){return this._memoryAdjustedScreenSpaceError}},pointCloudShading:{get:function(){return this._pointCloudShading},set:function(e){this._pointCloudShading=e}},root:{get:function(){return this._root}},boundingSphere:{get:function(){return this._root.updateTransform(this._modelMatrix),this._root.boundingSphere}},modelMatrix:{get:function(){return this._modelMatrix},set:function(e){this._modelMatrix=F.clone(e,this._modelMatrix)}},timeSinceLoad:{get:function(){return this._timeSinceLoad}},totalMemoryUsageInBytes:{get:function(){let e=this._statistics;return e.texturesByteLength+e.geometryByteLength+e.batchTableByteLength}},clippingPlanesOriginMatrix:{get:function(){return l(this._clippingPlanesOriginMatrix)?(this._clippingPlanesOriginMatrixDirty&&(F.multiply(this.root.computedTransform,this._initialClippingPlanesOriginMatrix,this._clippingPlanesOriginMatrix),this._clippingPlanesOriginMatrixDirty=!1),this._clippingPlanesOriginMatrix):F.IDENTITY}},styleEngine:{get:function(){return this._styleEngine}},statistics:{get:function(){return this._statistics}},classificationType:{get:function(){return this._classificationType}},ellipsoid:{get:function(){return this._ellipsoid}},foveatedConeSize:{get:function(){return this._foveatedConeSize},set:function(e){this._foveatedConeSize=e}},foveatedMinimumScreenSpaceErrorRelaxation:{get:function(){return this._foveatedMinimumScreenSpaceErrorRelaxation},set:function(e){this._foveatedMinimumScreenSpaceErrorRelaxation=e}},extras:{get:function(){return this._extras}},imageBasedLighting:{get:function(){return this._imageBasedLighting},set:function(e){e!==this._imageBasedLighting&&(this._shouldDestroyImageBasedLighting&&!this._imageBasedLighting.isDestroyed()&&this._imageBasedLighting.destroy(),this._imageBasedLighting=e,this._shouldDestroyImageBasedLighting=!1)}},environmentMapManager:{get:function(){return this._environmentMapManager}},vectorClassificationOnly:{get:function(){return this._vectorClassificationOnly}},vectorKeepDecodedPositions:{get:function(){return this._vectorKeepDecodedPositions}},showCreditsOnScreen:{get:function(){return this._showCreditsOnScreen},set:function(e){this._showCreditsOnScreen=e,Pde(this)}},featureIdLabel:{get:function(){return this._featureIdLabel},set:function(e){typeof e=="number"&&(e=`featureId_${e}`),this._featureIdLabel=e}},instanceFeatureIdLabel:{get:function(){return this._instanceFeatureIdLabel},set:function(e){typeof e=="number"&&(e=`instanceFeatureId_${e}`),this._instanceFeatureIdLabel=e}}});nr.fromIonAssetId=async function(e,t){let n=await _d.fromAssetId(e);return nr.fromUrl(n,t)};nr.fromUrl=async function(e,t){t=t??Y.EMPTY_OBJECT;let n=Ze.createIfNeeded(e),i;n.extension==="json"?i=n.getBaseUri(!0):n.isDataUri&&(i="");let o=await nr.loadJson(n),r=await O4e(n,o),s=new nr(t);s._resource=n,s._url=n.url,s._basePath=i,s._metadataExtension=r,s._geometricError=o.geometricError,s._scaledGeometricError=o.geometricError;let a=o.asset;s._asset=a,s._extras=o.extras,Pde(s);let c=l(o.asset.gltfUpAxis)?Po.fromName(o.asset.gltfUpAxis):Po.Y,d=t.modelUpAxis??c,u=t.modelForwardAxis??Po.X;s._properties=o.properties,s._extensionsUsed=o.extensionsUsed,s._extensions=o.extensions,s._modelUpAxis=d,s._modelForwardAxis=u,s._root=s.loadTileset(n,o);let p=s._root.createBoundingVolume(o.root.boundingVolume,F.IDENTITY).boundingSphere.center,g=s._ellipsoid.cartesianToCartographic(p);return l(g)&&g.height>di._defaultMinTerrainHeight&&(s._initialClippingPlanesOriginMatrix=Pt.eastNorthUpToFixedFrame(p)),s._clippingPlanesOriginMatrix=F.clone(s._initialClippingPlanesOriginMatrix),s};nr.loadJson=function(e){return Ze.createIfNeeded(e).fetchJson()};nr.prototype.makeStyleDirty=function(){this._styleEngine.makeDirty()};nr.prototype.loadTileset=function(e,t,n){let i=t.asset;if(!l(i))throw new ae("Tileset must have an asset property.");if(i.version!=="0.0"&&i.version!=="1.0"&&i.version!=="1.1")throw new ae("The tileset must be 3D Tiles version 0.0, 1.0, or 1.1");l(t.extensionsRequired)&&nr.checkSupportedExtensions(t.extensionsRequired);let o=this._statistics,r=i.tilesetVersion;l(r)&&(this._basePath+=`?v=${r}`,e=e.clone(),e.setQueryParameters({v:r}));let s=Rde(this,e,t.root,n);l(n)&&(n.children.push(s),s._depth=n._depth+1);let a=[];for(a.push(s);a.length>0;){let c=a.pop();++o.numberOfTilesTotal,this._allTilesAdditive=this._allTilesAdditive&&c.refine===Uo.ADD;let d=c._header.children;if(l(d))for(let u=0;u<d.length;++u){let h=d[u],p=Rde(this,e,h,c);c.children.push(p),p._depth=c._depth+1,a.push(p)}this._cullWithChildrenBounds&&u2.checkChildrenWithinParent(c)}return s};function Rde(e,t,n,i){if(!(l(n.implicitTiling)||ri(n,"3DTILES_implicit_tiling")))return new Ju(e,t,n,i);let r=e.schema,s=new J_(t,n,r),a=new Q_({subdivisionScheme:s.subdivisionScheme,subtreeLevels:s.subtreeLevels,level:0,x:0,y:0,z:0}),c=s.subtreeUriTemplate.getDerivedResource({templateValues:a.getTemplateValues()}).url,u=Ye(n,!0);u.contents=[{uri:c}],delete u.content,delete u.extensions;let h=new Ju(e,t,u,i);return h.implicitTileset=s,h.implicitCoordinates=a,h}async function O4e(e,t){let n=ri(t,"3DTILES_metadata")?t.extensions["3DTILES_metadata"]:t,i;if(l(n.schemaUri))e=e.getDerivedResource({url:n.schemaUri}),i=Ri.getSchemaLoader({resource:e});else if(l(n.schema))i=Ri.getSchemaLoader({schema:n.schema});else return;await i.load();let o=new H_({schema:i.schema,metadataJson:n});return Ri.unload(i),o}var Zde=new m,Y4e=new he,z4e=new F,H4e=new m,K4e=new m,J4e=new m,Q4e=new m;function j4e(e,t){let n,i,o,r,s,a=t.camera,c=e._root,d=c.contentBoundingVolume;if(d instanceof Xd)n=m.normalize(a.positionWC,Zde),i=a.directionWC,o=a.positionCartographic.height,r=d.minimumHeight,s=d.maximumHeight;else{let y=F.inverseTransformation(c.computedTransform,z4e),x=t.mapProjection.ellipsoid,S=d.boundingVolume,C=F.multiplyByPoint(y,S.center,H4e);if(m.magnitude(C)>x.minimumRadius){let V=he.fromCartesian(C,x,Y4e);n=m.normalize(a.positionWC,Zde),i=a.directionWC,o=a.positionCartographic.height,r=0,s=V.height*2}else{let V=F.multiplyByPoint(y,a.positionWC,K4e);if(n=m.UNIT_Z,i=F.multiplyByPointAsVector(y,a.directionWC,J4e),i=m.normalize(i,i),o=V.z,d instanceof Ol){let L=$.getColumn(S.halfAxes,2,Q4e),Z=m.magnitude(L);r=C.z-Z,s=C.z+Z}else if(d instanceof Wb){let L=S.radius;r=C.z-L,s=C.z+L}}}let u=e.dynamicScreenSpaceErrorHeightFalloff,h=r+(s-r)*u,p=s,g=X.clamp((o-h)/(p-h),0,1),f=1-Math.abs(m.dot(i,n));f=f*(1-g),e._dynamicScreenSpaceErrorComputedDensity=e.dynamicScreenSpaceErrorDensity*f}function q4e(e,t){if(t.hasEmptyContent)return;let{statistics:n}=e,i=t.contentExpired,o=t.requestContent();l(o)&&(o.then(r=>{!l(r)||t.isDestroyed()||e.isDestroyed()||(e._processingQueue.push(t),++n.numberOfTilesProcessing)}).catch(r=>{Ide(r,e,t)}),i&&(t.hasTilesetContent||t.hasImplicitContent?mje(e,t):(n.decrementLoadCounts(t.content),--n.numberOfTilesWithContentReady)),e._requestedTilesInFlight.push(t))}function Ede(e,t){return e._priority-t._priority}nr.prototype.postPassesUpdate=function(e){l(this._root)&&($4e(this,e),fje(this,e),this._cache.unloadTiles(this,Wde),this._styleApplied&&this._styleEngine.resetDirty(),this._styleApplied=!1)};nr.prototype.prePassesUpdate=function(e){if(!l(this._root))return;sje(this,e);let t=this._clippingPlanes;this._clippingPlanesOriginMatrixDirty=!0,l(t)&&t.enabled&&t.update(e);let n=this._clippingPolygons;l(n)&&n.enabled&&n.update(e),l(this._loadTimestamp)||(this._loadTimestamp=q.clone(e.time)),this._timeSinceLoad=Math.max(q.secondsDifference(e.time,this._loadTimestamp)*1e3,0),this.dynamicScreenSpaceError&&j4e(this,e),e.newFrame&&this._cache.reset()};function $4e(e,t){let n=e._requestedTilesInFlight,i=0;for(let o=0;o<n.length;++o){let r=n[o],s=t.frameNumber-r._touchedFrame>=1;if(r._contentState!==Bo.LOADING){++i;continue}else if(s){r.cancelRequests(),++i;continue}i>0&&(n[o-i]=r)}n.length-=i}function eje(e){let t=e._requestedTiles;t.sort(Ede);for(let n=0;n<t.length;++n)q4e(e,t[n])}function Ide(e,t,n){if(t.isDestroyed())return;let i;n.isDestroyed()||(i=n._contentResource.url);let o=l(e.message)?e.message:e.toString();t.tileFailed.numberOfListeners>0?t.tileFailed.raiseEvent({url:i,message:o}):(console.log(`A 3D tile failed to load: ${i}`),console.log(`Error: ${o}`),console.log(e.stack))}function tje(e){let t=e._processingQueue,n=0;for(let i=0;i<t.length;++i){let o=t[i];if(o.isDestroyed()||o._contentState!==Bo.PROCESSING){++n;continue}n>0&&(t[i-n]=o)}t.length-=n}var nje=new he,ije=new he,oje=new m;function rje(e,t,n){if(!e.enableCollision||!e.show)return;let i=e._addHeightCallbacks,o=t.boundingSphere;for(let r of i){if(r.invoked||t._wasSelectedLastFrame)continue;let s=r.ellipsoid,a=he.clone(r.positionCartographic,nje),c=he.fromCartesian(o.center,s,ije);l(c)&&(a.height=c.height);let d=he.toCartesian(a,s,oje);m.distance(d,o.center)<=o.radius&&(r.invoked=!0,n.afterRender.push(()=>{l(r.callback)&&r.callback(),r.invoked=!1}))}}function sje(e,t){tje(e);let n=e._processingQueue,{cacheBytes:i,maximumCacheOverflowBytes:o,statistics:r}=e,s=i+o,a=!1;for(let c=0;c<n.length;++c){if(e.totalMemoryUsageInBytes>s){a=!0;break}let d=n[c];try{d.process(e,t),d.contentReady&&(--r.numberOfTilesProcessing,e.tileLoad.raiseEvent(d))}catch(u){--r.numberOfTilesProcessing,Ide(u,e,d)}}e.totalMemoryUsageInBytes<i?cje(e):a&&n.length>0&&aje(e)}function aje(e){e._memoryAdjustedScreenSpaceError*=1.02;let t=e._processingQueue;for(let n=0;n<t.length;++n)t[n].updatePriority();t.sort(Ede)}function cje(e){e._memoryAdjustedScreenSpaceError=Math.max(e.memoryAdjustedScreenSpaceError/1.02,e.maximumScreenSpaceError)}var Tk=new m,lje={maximumFractionDigits:3};function Gde(e){let t=e/1048576;return t<1?t.toLocaleString(void 0,lje):Math.round(t).toLocaleString()}function LK(e){let{halfAxes:t,radius:n,center:i}=e.boundingVolume.boundingVolume,o=m.clone(i,Tk);if(l(t))o.x+=.75*(t[0]+t[3]+t[6]),o.y+=.75*(t[1]+t[4]+t[7]),o.z+=.75*(t[2]+t[5]+t[8]);else if(l(n)){let r=m.normalize(i,Tk);r=m.multiplyByScalar(r,.75*n,Tk),o=m.add(r,i,Tk)}return o}function RK(e,t,n){let i="",o=0;if(t.debugShowGeometricError&&(i+=` Geometric error: ${e.geometricError}`,o++),t.debugShowRenderingStatistics&&(i+=` Commands: ${e.commandsLength}`,o++,e.content.pointsLength>0&&(i+=` Points: ${e.content.pointsLength}`,o++),e.content.trianglesLength>0&&(i+=` Triangles: ${e.content.trianglesLength}`,o++),i+=` Features: ${e.content.featuresLength}`,o++),t.debugShowMemoryUsage&&(i+=` Texture Memory: ${Gde(e.content.texturesByteLength)}`,i+=` Geometry Memory: ${Gde(e.content.geometryByteLength)}`,o+=2),t.debugShowUrl)if(e.hasMultipleContents){i+=` Urls:`;let s=e.content.innerContentUrls;for(let a=0;a<s.length;a++)i+=` - ${s[a]}`;o+=s.length}else i+=` Url: ${e._contentHeader.uri}`,o++;let r={text:i.substring(1),position:n,font:`${19-o}px sans-serif`,showBackground:!0,disableDepthTestDistance:Number.POSITIVE_INFINITY};return t._tileDebugLabels.add(r)}function dje(e,t){let n=e._selectedTiles,i=n.length,o=e._emptyTiles,r=o.length;if(e._tileDebugLabels.removeAll(),e.debugPickedTileLabelOnly){if(l(e.debugPickedTile)){let s=l(e.debugPickPosition)?e.debugPickPosition:LK(e.debugPickedTile),a=RK(e.debugPickedTile,e,s);a.pixelOffset=new U(15,-15)}}else{for(let s=0;s<i;++s){let a=n[s];RK(a,e,LK(a))}for(let s=0;s<r;++s){let a=o[s];(a.hasTilesetContent||a.hasImplicitContent)&&RK(a,e,LK(a))}}e._tileDebugLabels.update(t)}function uje(e,t,n){e._styleEngine.applyStyle(e),e._styleApplied=!0;let{commandList:i,context:o}=t,r=i.length,s=e._selectedTiles,a=e.isSkippingLevelOfDetail&&e._hasMixedContent&&o.stencilBuffer&&s.length>0;e._backfaceCommands.length=0,a&&(l(e._stencilClearCommand)||(e._stencilClearCommand=new ti({stencil:0,pass:Ee.CESIUM_3D_TILE,renderState:Ue.fromCache({stencilMask:Ut.SKIP_LOD_MASK})})),i.push(e._stencilClearCommand));let{statistics:c,tileVisible:d}=e,u=n.isRender,h=i.length;for(let f=0;f<s.length;++f){let y=s[f];u&&d.raiseEvent(y),rje(e,y,t),y.update(e,t,n),c.incrementSelectionCounts(y.content),++c.selected}let p=e._emptyTiles;for(let f=0;f<p.length;++f)p[f].update(e,t,n);let g=i.length-h;if(e._backfaceCommands.trim(),a){let f=e._backfaceCommands.values,y=f.length;i.length+=y;for(let x=g-1;x>=0;--x)i[h+y+x]=i[h+x];for(let x=0;x<y;++x)i[h+x]=f[x]}g=i.length-r,c.numberOfCommands=g,u&&(e.pointCloudShading.attenuation&&e.pointCloudShading.eyeDomeLighting&&g>0&&e._pointCloudEyeDomeLighting.update(t,r,e.pointCloudShading,e.boundingSphere),e.debugShowGeometricError||e.debugShowRenderingStatistics||e.debugShowMemoryUsage||e.debugShowUrl?(l(e._tileDebugLabels)||(e._tileDebugLabels=new Zf),dje(e,t)):e._tileDebugLabels=e._tileDebugLabels&&e._tileDebugLabels.destroy())}var Xde=[];function mje(e,t){let n=t,i=Xde;for(i.push(t);i.length>0;){t=i.pop();let o=t.children;for(let r=0;r<o.length;++r)i.push(o[r]);t!==n&&(hje(e,t),--e._statistics.numberOfTilesTotal)}n.children=[]}function Wde(e,t){e.tileUnload.raiseEvent(t),e._statistics.decrementLoadCounts(t.content),--e._statistics.numberOfTilesWithContentReady,t.unloadContent()}function hje(e,t){e._cache.unloadTile(e,t,Wde),t.destroy()}nr.prototype.trimLoadedTiles=function(){this._cache.trim()};function fje(e,t){let n=e._statistics,i=e._statisticsLast,o=n.numberOfPendingRequests,r=n.numberOfTilesProcessing,s=i.numberOfPendingRequests,a=i.numberOfTilesProcessing;fh.clone(n,i);let c=o!==s||r!==a;c&&t.afterRender.push(function(){return e.loadProgress.raiseEvent(o,r),!0}),e._tilesLoaded=n.numberOfPendingRequests===0&&n.numberOfTilesProcessing===0&&n.numberOfAttemptedRequests===0,c&&e._tilesLoaded&&(t.afterRender.push(function(){return e.allTilesLoaded.raiseEvent(),!0}),e._initialTilesLoaded||(e._initialTilesLoaded=!0,t.afterRender.push(function(){return e.initialTilesLoaded.raiseEvent(),!0})))}function pje(e){e._heatmap.resetMinimumMaximum(),e._minimumPriority.depth=Number.MAX_VALUE,e._maximumPriority.depth=-Number.MAX_VALUE,e._minimumPriority.foveatedFactor=Number.MAX_VALUE,e._maximumPriority.foveatedFactor=-Number.MAX_VALUE,e._minimumPriority.distance=Number.MAX_VALUE,e._maximumPriority.distance=-Number.MAX_VALUE,e._minimumPriority.reverseScreenSpaceError=Number.MAX_VALUE,e._maximumPriority.reverseScreenSpaceError=-Number.MAX_VALUE}function bje(e,t){t.frameNumber===e._updatedModelMatrixFrame&&l(e._previousModelMatrix)||(e._updatedModelMatrixFrame=t.frameNumber,e._modelMatrixChanged=!F.equals(e.modelMatrix,e._previousModelMatrix),e._modelMatrixChanged&&(e._previousModelMatrix=F.clone(e.modelMatrix,e._previousModelMatrix)))}function gje(e,t,n,i){if(t.mode===oe.MORPHING||!l(e._root))return!1;let o=e._statistics;o.clear(),++e._updatedVisibilityFrame,pje(e),bje(e,t),e._cullRequestsWhileMoving=e.cullRequestsWhileMoving&&!e._modelMatrixChanged;let r=e.getTraversal(i).selectTiles(e,t);if(i.requestTiles&&eje(e),uje(e,t,i),fh.clone(o,n),i.isRender){let s=e._credits;if(l(s)&&o.selected!==0)for(let a=0;a<s.length;++a){let c=s[a];t.creditDisplay.addCreditToNextFrame(c)}}return r}function Pde(e){let t=e._credits;l(t)||(t=[]),t.length=0,l(e.resource.credits)&&e.resource.credits.forEach(i=>{t.push(Ct.clone(i))});let n=e.asset.extras;if(l(n)&&l(n.cesium)&&l(n.cesium.credits)){let i=n.cesium.credits;for(let o=0;o<i.length;++o){let r=i[o];t.push(new Ct(r.html))}}t.forEach(i=>i.showOnScreen=i.showOnScreen||e._showCreditsOnScreen),e._credits=t}nr.prototype.getTraversal=function(e){let{pass:t}=e;return t===wo.MOST_DETAILED_PRELOAD||t===wo.MOST_DETAILED_PICK?_2:this.isSkippingLevelOfDetail?R2:C2};nr.prototype.update=function(e){this.updateForPass(e,e.tilesetPassState)};nr.prototype.updateForPass=function(e,t){let n=t.pass;if(n===wo.PRELOAD&&(!this.preloadWhenHidden||this.show)||n===wo.PRELOAD_FLIGHT&&(!this.preloadFlightDestinations||!this.show&&!this.preloadWhenHidden)||n===wo.REQUEST_RENDER_MODE_DEFER_CHECK&&(!this._cullRequestsWhileMoving&&this.foveatedTimeDelay<=0||!this.show))return;let i=e.commandList,o=e.camera,r=e.cullingVolume;t.ready=!1;let s=wo.getPassOptions(n),a=s.ignoreCommands,c=t.commandList??i,d=c.length;if(e.commandList=c,e.camera=t.camera??o,e.cullingVolume=t.cullingVolume??r,s.isRender){let p=this._environmentMapManager;l(this._root)&&(p.position=this.boundingSphere.center),p.update(e)}let u=this._clippingPolygons;l(u)&&u.enabled&&u.queueCommands(e);let h=this._statisticsPerPass[n];(this.show||a)&&(this._pass=n,t.ready=gje(this,e,h,s)),a&&(c.length=d),e.commandList=i,e.camera=o,e.cullingVolume=r};nr.prototype.hasExtension=function(e){return l(this._extensionsUsed)?this._extensionsUsed.indexOf(e)>-1:!1};nr.prototype.isDestroyed=function(){return!1};nr.prototype.destroy=function(){if(this._tileDebugLabels=this._tileDebugLabels&&this._tileDebugLabels.destroy(),this._clippingPlanes=this._clippingPlanes&&this._clippingPlanes.destroy(),this._clippingPolygons=this._clippingPolygons&&this._clippingPolygons.destroy(),l(this._root)){let e=Xde;for(e.push(this._root);e.length>0;){let t=e.pop();t.destroy();let n=t.children;for(let i=0;i<n.length;++i)e.push(n[i])}}return this._root=void 0,this._shouldDestroyImageBasedLighting&&!this._imageBasedLighting.isDestroyed()&&this._imageBasedLighting.destroy(),this._imageBasedLighting=void 0,this._environmentMapManager.isDestroyed()||this._environmentMapManager.destroy(),this._environmentMapManager=void 0,me(this)};nr.supportedExtensions={"3DTILES_metadata":!0,"3DTILES_implicit_tiling":!0,"3DTILES_content_gltf":!0,"3DTILES_multiple_contents":!0,"3DTILES_bounding_volume_S2":!0,"3DTILES_batch_table_hierarchy":!0,"3DTILES_draco_point_compression":!0,MAXAR_content_geojson:!0};nr.checkSupportedExtensions=function(e){for(let t=0;t<e.length;t++)if(!nr.supportedExtensions[e[t]])throw new ae(`Unsupported 3D Tiles Extension: ${e[t]}`)};var yje=new pn,xje=new m,_je=new he;nr.prototype.getHeight=function(e,t){let n=t.ellipsoid;l(n)||(n=ne.WGS84);let i=yje,o=n.cartographicToCartesian(e,i.direction);m.normalize(i.direction,i.direction),i.direction=m.normalize(o,i.direction),i.direction=m.negate(o,i.direction),i.origin=m.multiplyByScalar(i.direction,-2*n.maximumRadius,i.origin);let r=this.pick(i,t.frameState,xje);if(l(r))return n.cartesianToCartographic(r,_je)?.height};nr.prototype.updateHeight=function(e,t,n){n=n??ne.WGS84;let i={positionCartographic:e,ellipsoid:n,callback:t,invoked:!1},o=()=>{let r=this._addHeightCallbacks,s=r.length;for(let a=0;a<s;++a)if(r[a]===i){r.splice(a,1);break}i.callback&&(i.callback=void 0)};return this._addHeightCallbacks.push(i),o};var Tje=new Xa,Sje=new m;nr.prototype.pick=function(e,t,n){if(!t.context.webgl2&&!this._enablePick)return;let i=this._selectedTiles,o=i.length,r=[];for(let c=0;c<o;++c){let d=i[c],u=qn.raySphere(e,d.contentBoundingVolume.boundingSphere,Tje);!l(u)||!l(d.content)||r.push(d)}let s=r.length;r.sort((c,d)=>{let u=le.distanceSquaredTo(c.contentBoundingVolume.boundingSphere,e.origin),h=le.distanceSquaredTo(d.contentBoundingVolume.boundingSphere,e.origin);return u-h});let a;for(let c=0;c<s;++c){let u=r[c].content.pick(e,t,Sje);if(l(u))return a=m.clone(u,n),a}};var bs=nr;var Cje=new F;function Dg(e,t){t.collectionChanged.addEventListener(Dg.prototype._onCollectionChanged,this),this._scene=e,this._primitives=e.primitives,this._entityCollection=t,this._tilesetHash={},this._entitiesToVisualize=new Gt,this._onCollectionChanged(t,t.values,[],[])}Dg.prototype.update=function(e){let t=this._entitiesToVisualize.values,n=this._tilesetHash,i=this._primitives;for(let o=0,r=t.length;o<r;o++){let s=t[o],a=s._tileset,c,d=n[s.id],u=s.isShowing&&s.isAvailable(e)&&J.getValueOrDefault(a._show,e,!0),h;u&&(h=s.computeModelMatrix(e,Cje),c=Ze.createIfNeeded(J.getValueOrUndefined(a._uri,e)));let p=l(d)?d.tilesetPrimitive:void 0;if(!u){l(p)&&(p.show=!1);continue}(!l(d)||c.url!==d.url)&&(l(p)&&i.removeAndDestroy(p),delete n[s.id],Vje(c,n,s,i)),l(p)&&(p.show=!0,l(h)&&(p.modelMatrix=h),p.maximumScreenSpaceError=J.getValueOrDefault(a.maximumScreenSpaceError,e,p.maximumScreenSpaceError))}return!0};Dg.prototype.isDestroyed=function(){return!1};Dg.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(Dg.prototype._onCollectionChanged,this);let e=this._entitiesToVisualize.values,t=this._tilesetHash,n=this._primitives;for(let i=e.length-1;i>-1;i--)ZK(this,e[i],t,n);return me(this)};Dg.prototype.getBoundingSphere=function(e,t){let n=this._tilesetHash[e.id];if(!l(n)||n.loadFail)return dt.FAILED;let i=n.tilesetPrimitive;return l(i)?i.show?(le.clone(i.boundingSphere,t),dt.DONE):dt.FAILED:dt.PENDING};Dg.prototype._onCollectionChanged=function(e,t,n,i){let o,r,s=this._entitiesToVisualize,a=this._tilesetHash,c=this._primitives;for(o=t.length-1;o>-1;o--)r=t[o],l(r._tileset)&&s.set(r.id,r);for(o=i.length-1;o>-1;o--)r=i[o],l(r._tileset)?s.set(r.id,r):(ZK(this,r,a,c),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],ZK(this,r,a,c),s.remove(r.id)};function ZK(e,t,n,i){let o=n[t.id];l(o)&&(l(o.tilesetPrimitive)&&i.removeAndDestroy(o.tilesetPrimitive),delete n[t.id])}async function Vje(e,t,n,i){t[n.id]={url:e.url,loadFail:!1};try{let o=await bs.fromUrl(e);if(o.id=n,i.add(o),!l(t[n.id]))return;t[n.id].tilesetPrimitive=o}catch(o){console.error(o),t[n.id].loadFail=!0}}var Z2=Dg;var HOn=_(T(),1);var Lje=D.WHITE,Rje=D.BLACK,Zje=new U(2,2);function L1(e){e=e??Y.EMPTY_OBJECT,this._definitionChanged=new be,this._evenColor=void 0,this._evenColorSubscription=void 0,this._oddColor=void 0,this._oddColorSubscription=void 0,this._repeat=void 0,this._repeatSubscription=void 0,this.evenColor=e.evenColor,this.oddColor=e.oddColor,this.repeat=e.repeat}Object.defineProperties(L1.prototype,{isConstant:{get:function(){return J.isConstant(this._evenColor)&&J.isConstant(this._oddColor)&&J.isConstant(this._repeat)}},definitionChanged:{get:function(){return this._definitionChanged}},evenColor:ue("evenColor"),oddColor:ue("oddColor"),repeat:ue("repeat")});L1.prototype.getType=function(e){return"Checkerboard"};var Gje=new q;L1.prototype.getValue=function(e,t){return l(e)||(e=q.now(Gje)),l(t)||(t={}),t.lightColor=J.getValueOrClonedDefault(this._evenColor,e,Lje,t.lightColor),t.darkColor=J.getValueOrClonedDefault(this._oddColor,e,Rje,t.darkColor),t.repeat=J.getValueOrDefault(this._repeat,e,Zje),t};L1.prototype.equals=function(e){return this===e||e instanceof L1&&J.equals(this._evenColor,e._evenColor)&&J.equals(this._oddColor,e._oddColor)&&J.equals(this._repeat,e._repeat)};var R1=L1;var uYn=_(T(),1);var oYn=_(T(),1);var vde={id:void 0};function G2(e){if(e._firing){e._refire=!0;return}if(e._suspendCount===0){let t=e._addedEntities,n=e._removedEntities,i=e._changedEntities;if(i.length!==0||t.length!==0||n.length!==0){e._firing=!0;do{e._refire=!1;let o=t.values.slice(0),r=n.values.slice(0),s=i.values.slice(0);t.removeAll(),n.removeAll(),i.removeAll(),e._collectionChanged.raiseEvent(e,o,r,s)}while(e._refire);e._firing=!1}}}function xc(e){this._owner=e,this._entities=new Gt,this._addedEntities=new Gt,this._removedEntities=new Gt,this._changedEntities=new Gt,this._suspendCount=0,this._collectionChanged=new be,this._id=zn(),this._show=!0,this._firing=!1,this._refire=!1}xc.prototype.suspendEvents=function(){this._suspendCount++};xc.prototype.resumeEvents=function(){this._suspendCount--,G2(this)};Object.defineProperties(xc.prototype,{collectionChanged:{get:function(){return this._collectionChanged}},id:{get:function(){return this._id}},values:{get:function(){return this._entities.values}},show:{get:function(){return this._show},set:function(e){if(e===this._show)return;this.suspendEvents();let t,n=[],i=this._entities.values,o=i.length;for(t=0;t<o;t++)n.push(i[t].isShowing);for(this._show=e,t=0;t<o;t++){let r=n[t],s=i[t];r!==s.isShowing&&s.definitionChanged.raiseEvent(s,"isShowing",s.isShowing,r)}this.resumeEvents()}},owner:{get:function(){return this._owner}}});xc.prototype.computeAvailability=function(){let e=Be.MAXIMUM_VALUE,t=Be.MINIMUM_VALUE,n=this._entities.values;for(let i=0,o=n.length;i<o;i++){let s=n[i].availability;if(l(s)){let a=s.start,c=s.stop;q.lessThan(a,e)&&!a.equals(Be.MINIMUM_VALUE)&&(e=a),q.greaterThan(c,t)&&!c.equals(Be.MAXIMUM_VALUE)&&(t=c)}}return Be.MAXIMUM_VALUE.equals(e)&&(e=Be.MINIMUM_VALUE),Be.MINIMUM_VALUE.equals(t)&&(t=Be.MAXIMUM_VALUE),new Ln({start:e,stop:t})};xc.prototype.add=function(e){e instanceof jo||(e=new jo(e));let t=e.id,n=this._entities;if(n.contains(t))throw new pe(`An entity with id ${t} already exists in this collection.`);return e.entityCollection=this,n.set(t,e),this._removedEntities.remove(t)||this._addedEntities.set(t,e),e.definitionChanged.addEventListener(xc.prototype._onEntityDefinitionChanged,this),G2(this),e};xc.prototype.remove=function(e){return l(e)?this.removeById(e.id):!1};xc.prototype.contains=function(e){return this._entities.get(e.id)===e};xc.prototype.removeById=function(e){if(!l(e))return!1;let n=this._entities.get(e);return this._entities.remove(e)?(this._addedEntities.remove(e)||(this._removedEntities.set(e,n),this._changedEntities.remove(e)),this._entities.remove(e),n.definitionChanged.removeEventListener(xc.prototype._onEntityDefinitionChanged,this),G2(this),!0):!1};xc.prototype.removeAll=function(){let e=this._entities,t=e.length,n=e.values,i=this._addedEntities,o=this._removedEntities;for(let r=0;r<t;r++){let s=n[r],a=s.id,c=i.get(a);l(c)||(s.definitionChanged.removeEventListener(xc.prototype._onEntityDefinitionChanged,this),o.set(a,s))}e.removeAll(),i.removeAll(),this._changedEntities.removeAll(),G2(this)};xc.prototype.getById=function(e){return this._entities.get(e)};xc.prototype.getOrCreateEntity=function(e){let t=this._entities.get(e);return l(t)||(vde.id=e,t=new jo(vde),this.add(t)),t};xc.prototype._onEntityDefinitionChanged=function(e){let t=e.id;this._addedEntities.contains(t)||this._changedEntities.set(t,e),G2(this)};var Qs=xc;var Sk={id:void 0},Z1=new Array(2);function GK(e){let t=e.propertyNames,n=t.length;for(let i=0;i<n;i++)e[t[i]]=void 0;e._name=void 0,e._availability=void 0}function wde(e,t,n,i){Z1[0]=n,Z1[1]=i.id,t[JSON.stringify(Z1)]=i.definitionChanged.addEventListener(kr.prototype._onDefinitionChanged,e)}function Fde(e,t,n,i){Z1[0]=n,Z1[1]=i.id;let o=JSON.stringify(Z1);t[o](),t[o]=void 0}function Bg(e){if(e._shouldRecomposite=!0,e._suspendCount!==0)return;let t=e._collections,n=t.length,i=e._collectionsCopy,o=i.length,r,s,a,c,d,u=e._composite,h=new Qs(e),p=e._eventHash,g;for(r=0;r<o;r++)for(d=i[r],d.collectionChanged.removeEventListener(kr.prototype._onCollectionChanged,e),a=d.values,g=d.id,c=a.length-1;c>-1;c--)s=a[c],Fde(e,p,g,s);for(r=n-1;r>=0;r--)for(d=t[r],d.collectionChanged.addEventListener(kr.prototype._onCollectionChanged,e),a=d.values,g=d.id,c=a.length-1;c>-1;c--){s=a[c],wde(e,p,g,s);let y=h.getById(s.id);l(y)||(y=u.getById(s.id),l(y)?GK(y):(Sk.id=s.id,y=new jo(Sk)),h.add(y)),y.merge(s)}e._collectionsCopy=t.slice(0),u.suspendEvents(),u.removeAll();let f=h.values;for(r=0;r<f.length;r++)u.add(f[r]);u.resumeEvents()}function kr(e,t){this._owner=t,this._composite=new Qs(this),this._suspendCount=0,this._collections=l(e)?e.slice():[],this._collectionsCopy=[],this._id=zn(),this._eventHash={},Bg(this),this._shouldRecomposite=!1}Object.defineProperties(kr.prototype,{collectionChanged:{get:function(){return this._composite._collectionChanged}},id:{get:function(){return this._id}},values:{get:function(){return this._composite.values}},owner:{get:function(){return this._owner}}});kr.prototype.addCollection=function(e,t){l(t)?this._collections.splice(t,0,e):(t=this._collections.length,this._collections.push(e)),Bg(this)};kr.prototype.removeCollection=function(e){let t=this._collections.indexOf(e);return t!==-1?(this._collections.splice(t,1),Bg(this),!0):!1};kr.prototype.removeAllCollections=function(){this._collections.length=0,Bg(this)};kr.prototype.containsCollection=function(e){return this._collections.indexOf(e)!==-1};kr.prototype.contains=function(e){return this._composite.contains(e)};kr.prototype.indexOfCollection=function(e){return this._collections.indexOf(e)};kr.prototype.getCollection=function(e){return this._collections[e]};kr.prototype.getCollectionsLength=function(){return this._collections.length};function Ck(e,t){return e.indexOf(t)}function Ade(e,t,n){let i=e._collections;if(t=X.clamp(t,0,i.length-1),n=X.clamp(n,0,i.length-1),t===n)return;let o=i[t];i[t]=i[n],i[n]=o,Bg(e)}kr.prototype.raiseCollection=function(e){let t=Ck(this._collections,e);Ade(this,t,t+1)};kr.prototype.lowerCollection=function(e){let t=Ck(this._collections,e);Ade(this,t,t-1)};kr.prototype.raiseCollectionToTop=function(e){let t=Ck(this._collections,e);t!==this._collections.length-1&&(this._collections.splice(t,1),this._collections.push(e),Bg(this))};kr.prototype.lowerCollectionToBottom=function(e){let t=Ck(this._collections,e);t!==0&&(this._collections.splice(t,1),this._collections.splice(0,0,e),Bg(this))};kr.prototype.suspendEvents=function(){this._suspendCount++,this._composite.suspendEvents()};kr.prototype.resumeEvents=function(){this._suspendCount--,this._shouldRecomposite&&this._suspendCount===0&&(Bg(this),this._shouldRecomposite=!1),this._composite.resumeEvents()};kr.prototype.computeAvailability=function(){return this._composite.computeAvailability()};kr.prototype.getById=function(e){return this._composite.getById(e)};kr.prototype._onCollectionChanged=function(e,t,n){let i=this._collectionsCopy,o=i.length,r=this._composite;r.suspendEvents();let s,a,c,d,u=n.length,h=this._eventHash,p=e.id;for(s=0;s<u;s++){let f=n[s];Fde(this,h,p,f);let y=f.id;for(a=o-1;a>=0;a--)c=i[a].getById(y),l(c)&&(l(d)||(d=r.getById(y),GK(d)),d.merge(c));l(d)||r.removeById(y),d=void 0}let g=t.length;for(s=0;s<g;s++){let f=t[s];wde(this,h,p,f);let y=f.id;for(a=o-1;a>=0;a--)c=i[a].getById(y),l(c)&&(l(d)||(d=r.getById(y),l(d)?GK(d):(Sk.id=y,d=new jo(Sk),r.add(d))),d.merge(c));d=void 0}r.resumeEvents()};kr.prototype._onDefinitionChanged=function(e,t,n,i){let o=this._collections,r=this._composite,s=o.length,a=e.id,c=r.getById(a),d=c[t],u=!l(d),h=!0;for(let p=s-1;p>=0;p--){let g=o[p].getById(e.id);if(l(g)){let f=g[t];if(l(f)){if(h)if(h=!1,l(f.merge)&&l(f.clone))d=f.clone(d);else{d=f;break}d.merge(f)}}}u&&c.propertyNames.indexOf(t)===-1&&c.addProperty(t),c[t]=d};var EK=kr;var NYn=_(T(),1);var WYn=_(T(),1);var hYn=_(T(),1);function IK(){this._removalFunctions=[]}IK.prototype.add=function(e,t,n){let i=e.addEventListener(t,n);this._removalFunctions.push(i);let o=this;return function(){i();let r=o._removalFunctions;r.splice(r.indexOf(i),1)}};IK.prototype.removeAll=function(){let e=this._removalFunctions;for(let t=0,n=e.length;t<n;++t)e[t]();e.length=0};var dr=IK;var VYn=_(T(),1);function PK(e,t){return q.compare(e.start,t.start)}function Ur(e){if(this._intervals=[],this._changedEvent=new be,l(e)){let t=e.length;for(let n=0;n<t;n++)this.addInterval(e[n])}}Object.defineProperties(Ur.prototype,{changedEvent:{get:function(){return this._changedEvent}},start:{get:function(){let e=this._intervals;return e.length===0?void 0:e[0].start}},isStartIncluded:{get:function(){let e=this._intervals;return e.length===0?!1:e[0].isStartIncluded}},stop:{get:function(){let e=this._intervals,t=e.length;return t===0?void 0:e[t-1].stop}},isStopIncluded:{get:function(){let e=this._intervals,t=e.length;return t===0?!1:e[t-1].isStopIncluded}},length:{get:function(){return this._intervals.length}},isEmpty:{get:function(){return this._intervals.length===0}}});Ur.prototype.equals=function(e,t){if(this===e)return!0;if(!(e instanceof Ur))return!1;let n=this._intervals,i=e._intervals,o=n.length;if(o!==i.length)return!1;for(let r=0;r<o;r++)if(!Ln.equals(n[r],i[r],t))return!1;return!0};Ur.prototype.get=function(e){return this._intervals[e]};Ur.prototype.removeAll=function(){this._intervals.length>0&&(this._intervals.length=0,this._changedEvent.raiseEvent(this))};Ur.prototype.findIntervalContainingDate=function(e){let t=this.indexOf(e);return t>=0?this._intervals[t]:void 0};Ur.prototype.findDataForIntervalContainingDate=function(e){let t=this.indexOf(e);return t>=0?this._intervals[t].data:void 0};Ur.prototype.contains=function(e){return this.indexOf(e)>=0};var XK=new Ln;Ur.prototype.indexOf=function(e){let t=this._intervals;XK.start=e,XK.stop=e;let n=Xo(t,XK,PK);return n>=0?t[n].isStartIncluded?n:n>0&&t[n-1].stop.equals(e)&&t[n-1].isStopIncluded?n-1:~n:(n=~n,n>0&&n-1<t.length&&Ln.contains(t[n-1],e)?n-1:~n)};Ur.prototype.findInterval=function(e){e=e??Y.EMPTY_OBJECT;let t=e.start,n=e.stop,i=e.isStartIncluded,o=e.isStopIncluded,r=this._intervals;for(let s=0,a=r.length;s<a;s++){let c=r[s];if((!l(t)||c.start.equals(t))&&(!l(n)||c.stop.equals(n))&&(!l(i)||c.isStartIncluded===i)&&(!l(o)||c.isStopIncluded===o))return r[s]}};Ur.prototype.addInterval=function(e,t){if(e.isEmpty)return;let n=this._intervals;if(n.length===0||q.greaterThan(e.start,n[n.length-1].stop)){n.push(e),this._changedEvent.raiseEvent(this);return}let i=Xo(n,e,PK);i<0?i=~i:i>0&&e.isStartIncluded&&n[i-1].isStartIncluded&&n[i-1].start.equals(e.start)?--i:i<n.length&&!e.isStartIncluded&&n[i].isStartIncluded&&n[i].start.equals(e.start)&&++i;let o;for(i>0&&(o=q.compare(n[i-1].stop,e.start),(o>0||o===0&&(n[i-1].isStopIncluded||e.isStartIncluded))&&((l(t)?t(n[i-1].data,e.data):n[i-1].data===e.data)?(q.greaterThan(e.stop,n[i-1].stop)?e=new Ln({start:n[i-1].start,stop:e.stop,isStartIncluded:n[i-1].isStartIncluded,isStopIncluded:e.isStopIncluded,data:e.data}):e=new Ln({start:n[i-1].start,stop:n[i-1].stop,isStartIncluded:n[i-1].isStartIncluded,isStopIncluded:n[i-1].isStopIncluded||e.stop.equals(n[i-1].stop)&&e.isStopIncluded,data:e.data}),n.splice(i-1,1),--i):(o=q.compare(n[i-1].stop,e.stop),(o>0||o===0&&n[i-1].isStopIncluded&&!e.isStopIncluded)&&n.splice(i,0,new Ln({start:e.stop,stop:n[i-1].stop,isStartIncluded:!e.isStopIncluded,isStopIncluded:n[i-1].isStopIncluded,data:n[i-1].data})),n[i-1]=new Ln({start:n[i-1].start,stop:e.start,isStartIncluded:n[i-1].isStartIncluded,isStopIncluded:!e.isStartIncluded,data:n[i-1].data}))));i<n.length&&(o=q.compare(e.stop,n[i].start),o>0||o===0&&(e.isStopIncluded||n[i].isStartIncluded));)if(l(t)?t(n[i].data,e.data):n[i].data===e.data)e=new Ln({start:e.start,stop:q.greaterThan(n[i].stop,e.stop)?n[i].stop:e.stop,isStartIncluded:e.isStartIncluded,isStopIncluded:q.greaterThan(n[i].stop,e.stop)?n[i].isStopIncluded:e.isStopIncluded,data:e.data}),n.splice(i,1);else if(n[i]=new Ln({start:e.stop,stop:n[i].stop,isStartIncluded:!e.isStopIncluded,isStopIncluded:n[i].isStopIncluded,data:n[i].data}),n[i].isEmpty)n.splice(i,1);else break;n.splice(i,0,e),this._changedEvent.raiseEvent(this)};Ur.prototype.removeInterval=function(e){if(e.isEmpty)return!1;let t=this._intervals,n=Xo(t,e,PK);n<0&&(n=~n);let i=!1;for(n>0&&(q.greaterThan(t[n-1].stop,e.start)||t[n-1].stop.equals(e.start)&&t[n-1].isStopIncluded&&e.isStartIncluded)&&(i=!0,(q.greaterThan(t[n-1].stop,e.stop)||t[n-1].isStopIncluded&&!e.isStopIncluded&&t[n-1].stop.equals(e.stop))&&t.splice(n,0,new Ln({start:e.stop,stop:t[n-1].stop,isStartIncluded:!e.isStopIncluded,isStopIncluded:t[n-1].isStopIncluded,data:t[n-1].data})),t[n-1]=new Ln({start:t[n-1].start,stop:e.start,isStartIncluded:t[n-1].isStartIncluded,isStopIncluded:!e.isStartIncluded,data:t[n-1].data})),n<t.length&&!e.isStartIncluded&&t[n].isStartIncluded&&e.start.equals(t[n].start)&&(i=!0,t.splice(n,0,new Ln({start:t[n].start,stop:t[n].start,isStartIncluded:!0,isStopIncluded:!0,data:t[n].data})),++n);n<t.length&&q.greaterThan(e.stop,t[n].stop);)i=!0,t.splice(n,1);return n<t.length&&e.stop.equals(t[n].stop)&&(i=!0,!e.isStopIncluded&&t[n].isStopIncluded?n+1<t.length&&t[n+1].start.equals(e.stop)&&t[n].data===t[n+1].data?(t.splice(n,1),t[n]=new Ln({start:t[n].start,stop:t[n].stop,isStartIncluded:!0,isStopIncluded:t[n].isStopIncluded,data:t[n].data})):t[n]=new Ln({start:e.stop,stop:e.stop,isStartIncluded:!0,isStopIncluded:!0,data:t[n].data}):t.splice(n,1)),n<t.length&&(q.greaterThan(e.stop,t[n].start)||e.stop.equals(t[n].start)&&e.isStopIncluded&&t[n].isStartIncluded)&&(i=!0,t[n]=new Ln({start:e.stop,stop:t[n].stop,isStartIncluded:!e.isStopIncluded,isStopIncluded:t[n].isStopIncluded,data:t[n].data})),i&&this._changedEvent.raiseEvent(this),i};Ur.prototype.intersect=function(e,t,n){let i=new Ur,o=0,r=0,s=this._intervals,a=e._intervals;for(;o<s.length&&r<a.length;){let c=s[o],d=a[r];if(q.lessThan(c.stop,d.start))++o;else if(q.lessThan(d.stop,c.start))++r;else{if(l(n)||l(t)&&t(c.data,d.data)||!l(t)&&d.data===c.data){let u=Ln.intersect(c,d,new Ln,n);u.isEmpty||i.addInterval(u,t)}q.lessThan(c.stop,d.stop)||c.stop.equals(d.stop)&&!c.isStopIncluded&&d.isStopIncluded?++o:++r}}return i};Ur.fromJulianDateArray=function(e,t){l(t)||(t=new Ur);let n=e.julianDates,i=n.length,o=e.dataCallback,r=e.isStartIncluded??!0,s=e.isStopIncluded??!0,a=e.leadingInterval??!1,c=e.trailingInterval??!1,d,u=0;a&&(++u,d=new Ln({start:Be.MINIMUM_VALUE,stop:n[0],isStartIncluded:!0,isStopIncluded:!r}),d.data=l(o)?o(d,t.length):t.length,t.addInterval(d));for(let h=0;h<i-1;++h){let p=n[h],g=n[h+1];d=new Ln({start:p,stop:g,isStartIncluded:t.length===u?r:!0,isStopIncluded:h===i-2?s:!1}),d.data=l(o)?o(d,t.length):t.length,t.addInterval(d),p=g}return c&&(d=new Ln({start:n[i-1],stop:Be.MAXIMUM_VALUE,isStartIncluded:!s,isStopIncluded:!0}),d.data=l(o)?o(d,t.length):t.length,t.addInterval(d)),t};var _c=new Tp,E2=[0,31,28,31,30,31,30,31,31,30,31,30,31];function WK(e,t,n){l(n)||(n=new q),q.toGregorianDate(e,_c);let i=_c.millisecond+t.millisecond,o=_c.second+t.second,r=_c.minute+t.minute,s=_c.hour+t.hour,a=_c.day+t.day,c=_c.month+t.month,d=_c.year+t.year;for(i>=1e3&&(o+=Math.floor(i/1e3),i=i%1e3),o>=60&&(r+=Math.floor(o/60),o=o%60),r>=60&&(s+=Math.floor(r/60),r=r%60),s>=24&&(a+=Math.floor(s/24),s=s%24),E2[2]=Rm(d)?29:28;a>E2[c]||c>=13;)a>E2[c]&&(a-=E2[c],++c),c>=13&&(--c,d+=Math.floor(c/12),c=c%12,++c),E2[2]=Rm(d)?29:28;return _c.millisecond=i,_c.second=o,_c.minute=r,_c.hour=s,_c.day=a,_c.month=c,_c.year=d,q.fromGregorianDate(_c,n)}var Eje=new q,Ije=/P(?:([\d.,]+)Y)?(?:([\d.,]+)M)?(?:([\d.,]+)W)?(?:([\d.,]+)D)?(?:T(?:([\d.,]+)H)?(?:([\d.,]+)M)?(?:([\d.,]+)S)?)?/;function Mde(e,t){if(!l(e)||e.length===0)return!1;if(t.year=0,t.month=0,t.day=0,t.hour=0,t.minute=0,t.second=0,t.millisecond=0,e[0]==="P"){let n=e.match(Ije);if(!l(n))return!1;if(l(n[1])&&(t.year=Number(n[1].replace(",","."))),l(n[2])&&(t.month=Number(n[2].replace(",","."))),l(n[3])&&(t.day=Number(n[3].replace(",","."))*7),l(n[4])&&(t.day+=Number(n[4].replace(",","."))),l(n[5])&&(t.hour=Number(n[5].replace(",","."))),l(n[6])&&(t.minute=Number(n[6].replace(",","."))),l(n[7])){let i=Number(n[7].replace(",","."));t.second=Math.floor(i),t.millisecond=i%1*1e3}}else e[e.length-1]!=="Z"&&(e+="Z"),q.toGregorianDate(q.fromIso8601(e,Eje),t);return t.year||t.month||t.day||t.hour||t.minute||t.second||t.millisecond}var I2=new Tp;Ur.fromIso8601=function(e,t){let n=e.iso8601.split("/"),i=q.fromIso8601(n[0]),o=q.fromIso8601(n[1]),r=[];if(!Mde(n[2],I2))r.push(i,o);else{let s=q.clone(i);for(r.push(s);q.compare(s,o)<0;)s=WK(s,I2),q.compare(o,s)<=0&&q.clone(o,s),r.push(s)}return Ur.fromJulianDateArray({julianDates:r,isStartIncluded:e.isStartIncluded,isStopIncluded:e.isStopIncluded,leadingInterval:e.leadingInterval,trailingInterval:e.trailingInterval,dataCallback:e.dataCallback},t)};Ur.fromIso8601DateArray=function(e,t){return Ur.fromJulianDateArray({julianDates:e.iso8601Dates.map(function(n){return q.fromIso8601(n)}),isStartIncluded:e.isStartIncluded,isStopIncluded:e.isStopIncluded,leadingInterval:e.leadingInterval,trailingInterval:e.trailingInterval,dataCallback:e.dataCallback},t)};Ur.fromIso8601DurationArray=function(e,t){let n=e.epoch,i=e.iso8601Durations,o=e.relativeToPrevious??!1,r=[],s,a,c=i.length;for(let d=0;d<c;++d)(Mde(i[d],I2)||d===0)&&(o&&l(a)?s=WK(a,I2):s=WK(n,I2),r.push(s),a=s);return Ur.fromJulianDateArray({julianDates:r,isStartIncluded:e.isStartIncluded,isStopIncluded:e.isStopIncluded,leadingInterval:e.leadingInterval,trailingInterval:e.trailingInterval,dataCallback:e.dataCallback},t)};var Dr=Ur;function Xje(e,t,n,i){function o(){n.raiseEvent(e)}let r=[];t.removeAll();let s=i.length;for(let a=0;a<s;a++){let c=i.get(a);l(c.data)&&r.indexOf(c.data)===-1&&t.add(c.data.definitionChanged,o)}}function j_(){this._eventHelper=new dr,this._definitionChanged=new be,this._intervals=new Dr,this._intervals.changedEvent.addEventListener(j_.prototype._intervalsChanged,this)}Object.defineProperties(j_.prototype,{isConstant:{get:function(){return this._intervals.isEmpty}},definitionChanged:{get:function(){return this._definitionChanged}},intervals:{get:function(){return this._intervals}}});var Wje=new q;j_.prototype.getValue=function(e,t){l(e)||(e=q.now(Wje));let n=this._intervals.findDataForIntervalContainingDate(e);if(l(n))return n.getValue(e,t)};j_.prototype.equals=function(e){return this===e||e instanceof j_&&this._intervals.equals(e._intervals,J.equals)};j_.prototype._intervalsChanged=function(){Xje(this,this._eventHelper,this._definitionChanged,this._intervals),this._definitionChanged.raiseEvent(this)};var Tc=j_;function Og(){this._definitionChanged=new be,this._composite=new Tc,this._composite.definitionChanged.addEventListener(Og.prototype._raiseDefinitionChanged,this)}Object.defineProperties(Og.prototype,{isConstant:{get:function(){return this._composite.isConstant}},definitionChanged:{get:function(){return this._definitionChanged}},intervals:{get:function(){return this._composite._intervals}}});Og.prototype.getType=function(e){let t=this._composite._intervals.findDataForIntervalContainingDate(e);if(l(t))return t.getType(e)};var Pje=new q;Og.prototype.getValue=function(e,t){l(e)||(e=q.now(Pje));let n=this._composite._intervals.findDataForIntervalContainingDate(e);if(l(n))return n.getValue(e,t)};Og.prototype.equals=function(e){return this===e||e instanceof Og&&this._composite.equals(e._composite,J.equals)};Og.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var G1=Og;var HYn=_(T(),1);function Yg(e){this._referenceFrame=e??ki.FIXED,this._definitionChanged=new be,this._composite=new Tc,this._composite.definitionChanged.addEventListener(Yg.prototype._raiseDefinitionChanged,this)}Object.defineProperties(Yg.prototype,{isConstant:{get:function(){return this._composite.isConstant}},definitionChanged:{get:function(){return this._definitionChanged}},intervals:{get:function(){return this._composite.intervals}},referenceFrame:{get:function(){return this._referenceFrame},set:function(e){this._referenceFrame=e}}});var vje=new q;Yg.prototype.getValue=function(e,t){return l(e)||(e=q.now(vje)),this.getValueInReferenceFrame(e,ki.FIXED,t)};Yg.prototype.getValueInReferenceFrame=function(e,t,n){let i=this._composite._intervals.findDataForIntervalContainingDate(e);if(l(i))return i.getValueInReferenceFrame(e,t,n)};Yg.prototype.equals=function(e){return this===e||e instanceof Yg&&this._referenceFrame===e._referenceFrame&&this._composite.equals(e._composite,J.equals)};Yg.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var ya=Yg;var DHn=_(T(),1);var Dzn=_(T(),1);var JYn=_(T(),1),wje={ROUNDED:0,MITERED:1,BEVELED:2},vi=Object.freeze(wje);var _zn=_(T(),1);var dzn=_(T(),1);var xa=[new m,new m],Fje=new m,Aje=new m,Mje=new m,Nje=new m,kje=new m,Uje=new m,Dje=new m,Bje=new m,Oje=new m,E1=new m,Vk=new m,X2={},vK=new he;function Yje(e,t){let n=new Array(e.length);for(let i=0;i<e.length;i++){let o=e[i];vK=t.cartesianToCartographic(o,vK),n[i]=vK.height,e[i]=t.scaleToGeodeticSurface(o,o)}return n}function wK(e,t,n,i){let o=e[0],r=e[1],s=m.angleBetween(o,r),a=Math.ceil(s/i),c=new Array(a),d;if(t===n){for(d=0;d<a;d++)c[d]=t;return c.push(n),c}let h=(n-t)/a;for(d=1;d<a;d++){let p=t+d*h;c[d]=p}return c[0]=t,c.push(n),c}var Lk=new m,Rk=new m;function zje(e,t,n,i){let o=new Qr(n,i),r=o.projectPointOntoPlane(m.add(n,e,Lk),Lk),s=o.projectPointOntoPlane(m.add(n,t,Rk),Rk),a=U.angleBetween(r,s);return s.x*r.y-s.y*r.x>=0?-a:a}var Hje=new m(-1,0,0),q_=new F,Kje=new F,FK=new $,Jje=$.IDENTITY.clone(),Qje=new m,jje=new se,Nde=new m;function Ab(e,t,n,i,o,r,s,a){let c=Qje,d=jje;q_=Pt.eastNorthUpToFixedFrame(e,o,q_),c=F.multiplyByPointAsVector(q_,Hje,c),c=m.normalize(c,c);let u=zje(c,t,e,o);FK=$.fromRotationZ(u,FK),Nde.z=r,q_=F.multiplyTransformation(q_,F.fromRotationTranslation(FK,Nde,Kje),q_);let h=Jje;h[0]=s;for(let p=0;p<a;p++)for(let g=0;g<n.length;g+=3)d=m.fromArray(n,g,d),d=$.multiplyByVector(h,d,d),d=F.multiplyByPoint(q_,d,d),i.push(d.x,d.y,d.z);return i}var qje=new m;function AK(e,t,n,i,o,r,s){for(let a=0;a<e.length;a+=3){let c=m.fromArray(e,a,qje);i=Ab(c,t,n,i,o,r[a/3],s,1)}return i}function $je(e,t){let n=e.length,i=new Array(n*6),o=0,r=t.x+t.width/2,s=t.y+t.height/2,a=e[0];i[o++]=a.x-r,i[o++]=0,i[o++]=a.y-s;for(let c=1;c<n;c++){a=e[c];let d=a.x-r,u=a.y-s;i[o++]=d,i[o++]=0,i[o++]=u,i[o++]=d,i[o++]=0,i[o++]=u}return a=e[0],i[o++]=a.x-r,i[o++]=0,i[o++]=a.y-s,i}function kde(e,t){let n=e.length,i=new Array(n*3),o=0,r=t.x+t.width/2,s=t.y+t.height/2;for(let a=0;a<n;a++)i[o++]=e[a].x-r,i[o++]=0,i[o++]=e[a].y-s;return i}var Ude=new ve,Dde=new m,Bde=new $;function Ode(e,t,n,i,o,r,s,a,c,d){let u=m.angleBetween(m.subtract(t,e,E1),m.subtract(n,e,Vk)),h=i===vi.BEVELED?0:Math.ceil(u/X.toRadians(5)),p;o?p=$.fromQuaternion(ve.fromAxisAngle(m.negate(e,E1),u/(h+1),Ude),Bde):p=$.fromQuaternion(ve.fromAxisAngle(e,u/(h+1),Ude),Bde);let g,f;if(t=m.clone(t,Dde),h>0){let y=d?2:1;for(let x=0;x<h;x++)t=$.multiplyByVector(p,t,t),g=m.subtract(t,e,E1),g=m.normalize(g,g),o||(g=m.negate(g,g)),f=r.scaleToGeodeticSurface(t,Vk),s=Ab(f,g,a,s,r,c,1,y)}else g=m.subtract(t,e,E1),g=m.normalize(g,g),o||(g=m.negate(g,g)),f=r.scaleToGeodeticSurface(t,Vk),s=Ab(f,g,a,s,r,c,1,1),n=m.clone(n,Dde),g=m.subtract(n,e,E1),g=m.normalize(g,g),o||(g=m.negate(g,g)),f=r.scaleToGeodeticSurface(n,Vk),s=Ab(f,g,a,s,r,c,1,1);return s}X2.removeDuplicatesFromShape=function(e){let t=e.length,n=[];for(let i=t-1,o=0;o<t;i=o++){let r=e[i],s=e[o];U.equals(r,s)||n.push(s)}return n};X2.angleIsGreaterThanPi=function(e,t,n,i){let o=new Qr(n,i),r=o.projectPointOntoPlane(m.add(n,e,Lk),Lk),s=o.projectPointOntoPlane(m.add(n,t,Rk),Rk);return s.x*r.y-s.y*r.x>=0};var e8e=new m,t8e=new m;X2.computePositions=function(e,t,n,i,o){let r=i._ellipsoid,s=Yje(e,r),a=i._granularity,c=i._cornerType,d=o?$je(t,n):kde(t,n),u=o?kde(t,n):void 0,h=n.height/2,p=n.width/2,g=e.length,f=[],y=o?[]:void 0,x=Fje,S=Aje,C=Mje,V=Nje,L=kje,Z=Uje,E=Dje,P=Bje,W=Oje,v=e[0],A=e[1];V=r.geodeticSurfaceNormal(v,V),x=m.subtract(A,v,x),x=m.normalize(x,x),P=m.cross(V,x,P),P=m.normalize(P,P);let b=s[0],R=s[1];o&&(y=Ab(v,P,u,y,r,b+h,1,1)),W=m.clone(v,W),v=A,S=m.negate(x,S);let G,I;for(let B=1;B<g-1;B++){let k=o?2:1;if(A=e[B+1],v.equals(A)){_t("Positions are too close and are considered equivalent with rounding error.");continue}x=m.subtract(A,v,x),x=m.normalize(x,x),V=r.geodeticSurfaceNormal(v,V);let O=m.multiplyByScalar(V,m.dot(x,V),e8e);m.subtract(x,O,O),m.normalize(O,O);let N=m.multiplyByScalar(V,m.dot(S,V),t8e);if(m.subtract(S,N,N),m.normalize(N,N),!X.equalsEpsilon(Math.abs(m.dot(O,N)),1,X.EPSILON7)){C=m.add(x,S,C),C=m.normalize(C,C),C=m.cross(C,V,C),C=m.cross(V,C,C),C=m.normalize(C,C);let K=1/Math.max(.25,m.magnitude(m.cross(C,S,E1))),te=X2.angleIsGreaterThanPi(x,S,v,r);te?(L=m.add(v,m.multiplyByScalar(C,K*p,C),L),Z=m.add(L,m.multiplyByScalar(P,p,Z),Z),xa[0]=m.clone(W,xa[0]),xa[1]=m.clone(Z,xa[1]),G=wK(xa,b+h,R+h,a),I=Pi.generateArc({positions:xa,granularity:a,ellipsoid:r}),f=AK(I,P,d,f,r,G,1),P=m.cross(V,x,P),P=m.normalize(P,P),E=m.add(L,m.multiplyByScalar(P,p,E),E),c===vi.ROUNDED||c===vi.BEVELED?Ode(L,Z,E,c,te,r,f,d,R+h,o):(C=m.negate(C,C),f=Ab(v,C,d,f,r,R+h,K,k)),W=m.clone(E,W)):(L=m.add(v,m.multiplyByScalar(C,K*p,C),L),Z=m.add(L,m.multiplyByScalar(P,-p,Z),Z),xa[0]=m.clone(W,xa[0]),xa[1]=m.clone(Z,xa[1]),G=wK(xa,b+h,R+h,a),I=Pi.generateArc({positions:xa,granularity:a,ellipsoid:r}),f=AK(I,P,d,f,r,G,1),P=m.cross(V,x,P),P=m.normalize(P,P),E=m.add(L,m.multiplyByScalar(P,-p,E),E),c===vi.ROUNDED||c===vi.BEVELED?Ode(L,Z,E,c,te,r,f,d,R+h,o):f=Ab(v,C,d,f,r,R+h,K,k),W=m.clone(E,W)),S=m.negate(x,S)}else f=Ab(W,P,d,f,r,b+h,1,1),W=v;b=R,R=s[B+1],v=A}xa[0]=m.clone(W,xa[0]),xa[1]=m.clone(v,xa[1]),G=wK(xa,b+h,R+h,a),I=Pi.generateArc({positions:xa,granularity:a,ellipsoid:r}),f=AK(I,P,d,f,r,G,1),o&&(y=Ab(v,P,u,y,r,R+h,1,1)),g=f.length;let w=o?g+y.length:g,M=new Float64Array(w);return M.set(f),o&&M.set(y,g),M};var ph=X2;var NK={},I1=new m,Jde=new m,n8e=new m,Yde=new m,rl=[new m,new m],Qde=new m,jde=new m,qde=new m,i8e=new m,o8e=new m,r8e=new m,s8e=new m,a8e=new m,c8e=new m,l8e=new m,zde=new ve,Hde=new $;function Zk(e,t,n,i,o){let r=m.angleBetween(m.subtract(t,e,I1),m.subtract(n,e,Jde)),s=i===vi.BEVELED?1:Math.ceil(r/X.toRadians(5))+1,a=s*3,c=new Array(a);c[a-3]=n.x,c[a-2]=n.y,c[a-1]=n.z;let d;o?d=$.fromQuaternion(ve.fromAxisAngle(m.negate(e,I1),r/s,zde),Hde):d=$.fromQuaternion(ve.fromAxisAngle(e,r/s,zde),Hde);let u=0;t=m.clone(t,I1);for(let h=0;h<s;h++)t=$.multiplyByVector(d,t,t),c[u++]=t.x,c[u++]=t.y,c[u++]=t.z;return c}function d8e(e){let t=Qde,n=jde,i=qde,o=e[1];n=m.fromArray(e[1],o.length-3,n),i=m.fromArray(e[0],0,i),t=m.midpoint(n,i,t);let r=Zk(t,n,i,vi.ROUNDED,!1),s=e.length-1,a=e[s-1];o=e[s],n=m.fromArray(a,a.length-3,n),i=m.fromArray(o,0,i),t=m.midpoint(n,i,t);let c=Zk(t,n,i,vi.ROUNDED,!1);return[r,c]}function Kde(e,t,n,i){let o=I1;return i?o=m.add(e,t,o):(t=m.negate(t,t),o=m.add(e,t,o)),[o.x,o.y,o.z,n.x,n.y,n.z]}function MK(e,t,n,i){let o=new Array(e.length),r=new Array(e.length),s=m.multiplyByScalar(t,n,I1),a=m.negate(s,Jde),c=0,d=e.length-1;for(let u=0;u<e.length;u+=3){let h=m.fromArray(e,u,n8e),p=m.add(h,a,Yde);o[c++]=p.x,o[c++]=p.y,o[c++]=p.z;let g=m.add(h,s,Yde);r[d--]=g.z,r[d--]=g.y,r[d--]=g.x}return i.push(o,r),i}NK.addAttribute=function(e,t,n,i){let o=t.x,r=t.y,s=t.z;l(n)&&(e[n]=o,e[n+1]=r,e[n+2]=s),l(i)&&(e[i]=s,e[i-1]=r,e[i-2]=o)};var u8e=new m,m8e=new m;NK.computePositions=function(e){let t=e.granularity,n=e.positions,i=e.ellipsoid,o=e.width/2,r=e.cornerType,s=e.saveAttributes,a=Qde,c=jde,d=qde,u=i8e,h=o8e,p=r8e,g=s8e,f=a8e,y=c8e,x=l8e,S=[],C=s?[]:void 0,V=s?[]:void 0,L=n[0],Z=n[1];c=m.normalize(m.subtract(Z,L,c),c),a=i.geodeticSurfaceNormal(L,a),u=m.normalize(m.cross(a,c,u),u),s&&(C.push(u.x,u.y,u.z),V.push(a.x,a.y,a.z)),g=m.clone(L,g),L=Z,d=m.negate(c,d);let E,P=[],W,v=n.length;for(W=1;W<v-1;W++){a=i.geodeticSurfaceNormal(L,a),Z=n[W+1],c=m.normalize(m.subtract(Z,L,c),c);let b=m.multiplyByScalar(a,m.dot(c,a),u8e);m.subtract(c,b,b),m.normalize(b,b);let R=m.multiplyByScalar(a,m.dot(d,a),m8e);if(m.subtract(d,R,R),m.normalize(R,R),!X.equalsEpsilon(Math.abs(m.dot(b,R)),1,X.EPSILON7)){h=m.normalize(m.add(c,d,h),h),h=m.cross(h,a,h),h=m.cross(a,h,h),h=m.normalize(h,h);let I=o/Math.max(.25,m.magnitude(m.cross(h,d,I1))),w=ph.angleIsGreaterThanPi(c,d,L,i);h=m.multiplyByScalar(h,I,h),w?(f=m.add(L,h,f),x=m.add(f,m.multiplyByScalar(u,o,x),x),y=m.add(f,m.multiplyByScalar(u,o*2,y),y),rl[0]=m.clone(g,rl[0]),rl[1]=m.clone(x,rl[1]),E=Pi.generateArc({positions:rl,granularity:t,ellipsoid:i}),S=MK(E,u,o,S),s&&(C.push(u.x,u.y,u.z),V.push(a.x,a.y,a.z)),p=m.clone(y,p),u=m.normalize(m.cross(a,c,u),u),y=m.add(f,m.multiplyByScalar(u,o*2,y),y),g=m.add(f,m.multiplyByScalar(u,o,g),g),r===vi.ROUNDED||r===vi.BEVELED?P.push({leftPositions:Zk(f,p,y,r,w)}):P.push({leftPositions:Kde(L,m.negate(h,h),y,w)})):(y=m.add(L,h,y),x=m.add(y,m.negate(m.multiplyByScalar(u,o,x),x),x),f=m.add(y,m.negate(m.multiplyByScalar(u,o*2,f),f),f),rl[0]=m.clone(g,rl[0]),rl[1]=m.clone(x,rl[1]),E=Pi.generateArc({positions:rl,granularity:t,ellipsoid:i}),S=MK(E,u,o,S),s&&(C.push(u.x,u.y,u.z),V.push(a.x,a.y,a.z)),p=m.clone(f,p),u=m.normalize(m.cross(a,c,u),u),f=m.add(y,m.negate(m.multiplyByScalar(u,o*2,f),f),f),g=m.add(y,m.negate(m.multiplyByScalar(u,o,g),g),g),r===vi.ROUNDED||r===vi.BEVELED?P.push({rightPositions:Zk(y,p,f,r,w)}):P.push({rightPositions:Kde(L,h,f,w)})),d=m.negate(c,d)}L=Z}a=i.geodeticSurfaceNormal(L,a),rl[0]=m.clone(g,rl[0]),rl[1]=m.clone(L,rl[1]),E=Pi.generateArc({positions:rl,granularity:t,ellipsoid:i}),S=MK(E,u,o,S),s&&(C.push(u.x,u.y,u.z),V.push(a.x,a.y,a.z));let A;return r===vi.ROUNDED&&(A=d8e(S)),{positions:S,corners:P,lefts:C,normals:V,endPositions:A}};var Bi=NK;var tue=new m,nue=new m,Gk=new m,Ek=new m,h8e=new m,iue=new m,zg=new m,X1=new m;function oue(e,t){for(let n=0;n<e.length;n++)e[n]=t.scaleToGeodeticSurface(e[n],e[n]);return e}function bh(e,t,n,i,o,r){let s=e.normals,a=e.tangents,c=e.bitangents,d=m.normalize(m.cross(n,t,zg),zg);r.normal&&Bi.addAttribute(s,t,i,o),r.tangent&&Bi.addAttribute(a,d,i,o),r.bitangent&&Bi.addAttribute(c,n,i,o)}function rue(e,t,n){let i=e.positions,o=e.corners,r=e.endPositions,s=e.lefts,a=e.normals,c=new mn,d,u=0,h=0,p,g=0,f;for(p=0;p<i.length;p+=2)f=i[p].length-3,u+=f,g+=f*2,h+=i[p+1].length-3;for(u+=3,h+=3,p=0;p<o.length;p++){d=o[p];let ee=o[p].leftPositions;l(ee)?(f=ee.length,u+=f,g+=f):(f=o[p].rightPositions.length,h+=f,g+=f)}let y=l(r),x;y&&(x=r[0].length-3,u+=x,h+=x,x/=3,g+=x*6);let S=u+h,C=new Float64Array(S),V=t.normal?new Float32Array(S):void 0,L=t.tangent?new Float32Array(S):void 0,Z=t.bitangent?new Float32Array(S):void 0,E={normals:V,tangents:L,bitangents:Z},P=0,W=S-1,v,A,b,R,G=tue,I=nue,w,M,B=x/2,k=Ae.createTypedArray(S/3,g),O=0;if(y){M=Gk,w=Ek;let ee=r[0];for(G=m.fromArray(a,0,G),I=m.fromArray(s,0,I),p=0;p<B;p++)M=m.fromArray(ee,(B-1-p)*3,M),w=m.fromArray(ee,(B+p)*3,w),Bi.addAttribute(C,w,P),Bi.addAttribute(C,M,void 0,W),bh(E,G,I,P,W,t),A=P/3,R=A+1,v=(W-2)/3,b=v-1,k[O++]=v,k[O++]=A,k[O++]=b,k[O++]=b,k[O++]=A,k[O++]=R,P+=3,W-=3}let N=0,z=0,K=i[N++],te=i[N++];C.set(K,P),C.set(te,W-te.length+1),I=m.fromArray(s,z,I);let H,j;for(f=te.length-3,p=0;p<f;p+=3)H=n.geodeticSurfaceNormal(m.fromArray(K,p,zg),zg),j=n.geodeticSurfaceNormal(m.fromArray(te,f-p,X1),X1),G=m.normalize(m.add(H,j,G),G),bh(E,G,I,P,W,t),A=P/3,R=A+1,v=(W-2)/3,b=v-1,k[O++]=v,k[O++]=A,k[O++]=b,k[O++]=b,k[O++]=A,k[O++]=R,P+=3,W-=3;for(H=n.geodeticSurfaceNormal(m.fromArray(K,f,zg),zg),j=n.geodeticSurfaceNormal(m.fromArray(te,f,X1),X1),G=m.normalize(m.add(H,j,G),G),z+=3,p=0;p<o.length;p++){let ee;d=o[p];let fe=d.leftPositions,Te=d.rightPositions,de,xe,Ce=iue,Ie=Gk,Le=Ek;if(G=m.fromArray(a,z,G),l(fe)){for(bh(E,G,I,void 0,W,t),W-=3,de=R,xe=b,ee=0;ee<fe.length/3;ee++)Ce=m.fromArray(fe,ee*3,Ce),k[O++]=de,k[O++]=xe-ee-1,k[O++]=xe-ee,Bi.addAttribute(C,Ce,void 0,W),Ie=m.fromArray(C,(xe-ee-1)*3,Ie),Le=m.fromArray(C,de*3,Le),I=m.normalize(m.subtract(Ie,Le,I),I),bh(E,G,I,void 0,W,t),W-=3;Ce=m.fromArray(C,de*3,Ce),Ie=m.subtract(m.fromArray(C,xe*3,Ie),Ce,Ie),Le=m.subtract(m.fromArray(C,(xe-ee)*3,Le),Ce,Le),I=m.normalize(m.add(Ie,Le,I),I),bh(E,G,I,P,void 0,t),P+=3}else{for(bh(E,G,I,P,void 0,t),P+=3,de=b,xe=R,ee=0;ee<Te.length/3;ee++)Ce=m.fromArray(Te,ee*3,Ce),k[O++]=de,k[O++]=xe+ee,k[O++]=xe+ee+1,Bi.addAttribute(C,Ce,P),Ie=m.fromArray(C,de*3,Ie),Le=m.fromArray(C,(xe+ee)*3,Le),I=m.normalize(m.subtract(Ie,Le,I),I),bh(E,G,I,P,void 0,t),P+=3;Ce=m.fromArray(C,de*3,Ce),Ie=m.subtract(m.fromArray(C,(xe+ee)*3,Ie),Ce,Ie),Le=m.subtract(m.fromArray(C,xe*3,Le),Ce,Le),I=m.normalize(m.negate(m.add(Le,Ie,I),I),I),bh(E,G,I,void 0,W,t),W-=3}for(K=i[N++],te=i[N++],K.splice(0,3),te.splice(te.length-3,3),C.set(K,P),C.set(te,W-te.length+1),f=te.length-3,z+=3,I=m.fromArray(s,z,I),ee=0;ee<te.length;ee+=3)H=n.geodeticSurfaceNormal(m.fromArray(K,ee,zg),zg),j=n.geodeticSurfaceNormal(m.fromArray(te,f-ee,X1),X1),G=m.normalize(m.add(H,j,G),G),bh(E,G,I,P,W,t),R=P/3,A=R-1,b=(W-2)/3,v=b+1,k[O++]=v,k[O++]=A,k[O++]=b,k[O++]=b,k[O++]=A,k[O++]=R,P+=3,W-=3;P-=3,W+=3}if(G=m.fromArray(a,a.length-3,G),bh(E,G,I,P,W,t),y){P+=3,W-=3,M=Gk,w=Ek;let ee=r[1];for(p=0;p<B;p++)M=m.fromArray(ee,(x-p-1)*3,M),w=m.fromArray(ee,p*3,w),Bi.addAttribute(C,M,void 0,W),Bi.addAttribute(C,w,P),bh(E,G,I,P,W,t),R=P/3,A=R-1,b=(W-2)/3,v=b+1,k[O++]=v,k[O++]=A,k[O++]=b,k[O++]=b,k[O++]=A,k[O++]=R,P+=3,W-=3}if(c.position=new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:C}),t.st){let ee=new Float32Array(S/3*2),fe,Te,de=0;if(y){u/=3,h/=3;let xe=Math.PI/(x+1);Te=1/(u-x+1),fe=1/(h-x+1);let Ce,Ie=x/2;for(p=Ie+1;p<x+1;p++)Ce=X.PI_OVER_TWO+xe*p,ee[de++]=fe*(1+Math.cos(Ce)),ee[de++]=.5*(1+Math.sin(Ce));for(p=1;p<h-x+1;p++)ee[de++]=p*fe,ee[de++]=0;for(p=x;p>Ie;p--)Ce=X.PI_OVER_TWO-p*xe,ee[de++]=1-fe*(1+Math.cos(Ce)),ee[de++]=.5*(1+Math.sin(Ce));for(p=Ie;p>0;p--)Ce=X.PI_OVER_TWO-xe*p,ee[de++]=1-Te*(1+Math.cos(Ce)),ee[de++]=.5*(1+Math.sin(Ce));for(p=u-x;p>0;p--)ee[de++]=p*Te,ee[de++]=1;for(p=1;p<Ie+1;p++)Ce=X.PI_OVER_TWO+xe*p,ee[de++]=Te*(1+Math.cos(Ce)),ee[de++]=.5*(1+Math.sin(Ce))}else{for(u/=3,h/=3,Te=1/(u-1),fe=1/(h-1),p=0;p<h;p++)ee[de++]=p*fe,ee[de++]=0;for(p=u;p>0;p--)ee[de++]=(p-1)*Te,ee[de++]=1}c.st=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:ee})}return t.normal&&(c.normal=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:E.normals})),t.tangent&&(c.tangent=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:E.tangents})),t.bitangent&&(c.bitangent=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:E.bitangents})),{attributes:c,indices:k}}function f8e(e,t){if(!t.normal&&!t.tangent&&!t.bitangent&&!t.st)return e;let n=e.position.values,i,o;(t.normal||t.bitangent)&&(i=e.normal.values,o=e.bitangent.values);let r=e.position.values.length/18,s=r*3,a=r*2,c=s*2,d;if(t.normal||t.bitangent||t.tangent){let u=t.normal?new Float32Array(s*6):void 0,h=t.tangent?new Float32Array(s*6):void 0,p=t.bitangent?new Float32Array(s*6):void 0,g=tue,f=nue,y=Gk,x=Ek,S=h8e,C=iue,V=c;for(d=0;d<s;d+=3){let L=V+c;g=m.fromArray(n,d,g),f=m.fromArray(n,d+s,f),y=m.fromArray(n,(d+3)%s,y),f=m.subtract(f,g,f),y=m.subtract(y,g,y),x=m.normalize(m.cross(f,y,x),x),t.normal&&(Bi.addAttribute(u,x,L),Bi.addAttribute(u,x,L+3),Bi.addAttribute(u,x,V),Bi.addAttribute(u,x,V+3)),(t.tangent||t.bitangent)&&(C=m.fromArray(i,d,C),t.bitangent&&(Bi.addAttribute(p,C,L),Bi.addAttribute(p,C,L+3),Bi.addAttribute(p,C,V),Bi.addAttribute(p,C,V+3)),t.tangent&&(S=m.normalize(m.cross(C,x,S),S),Bi.addAttribute(h,S,L),Bi.addAttribute(h,S,L+3),Bi.addAttribute(h,S,V),Bi.addAttribute(h,S,V+3))),V+=6}if(t.normal){for(u.set(i),d=0;d<s;d+=3)u[d+s]=-i[d],u[d+s+1]=-i[d+1],u[d+s+2]=-i[d+2];e.normal.values=u}else e.normal=void 0;if(t.bitangent?(p.set(o),p.set(o,s),e.bitangent.values=p):e.bitangent=void 0,t.tangent){let L=e.tangent.values;h.set(L),h.set(L,s),e.tangent.values=h}}if(t.st){let u=e.st.values,h=new Float32Array(a*6);h.set(u),h.set(u,a);let p=a*2;for(let g=0;g<2;g++){for(h[p++]=u[0],h[p++]=u[1],d=2;d<a;d+=2){let f=u[d],y=u[d+1];h[p++]=f,h[p++]=y,h[p++]=f,h[p++]=y}h[p++]=u[0],h[p++]=u[1]}e.st.values=h}return e}function kK(e,t,n){n[t++]=e[0],n[t++]=e[1],n[t++]=e[2];for(let i=3;i<e.length;i+=3){let o=e[i],r=e[i+1],s=e[i+2];n[t++]=o,n[t++]=r,n[t++]=s,n[t++]=o,n[t++]=r,n[t++]=s}return n[t++]=e[0],n[t++]=e[1],n[t++]=e[2],n}function p8e(e,t){let n=new Xe({position:t.position,normal:t.normal||t.bitangent||e.shadowVolume,tangent:t.tangent,bitangent:t.normal||t.bitangent,st:t.st}),i=e.ellipsoid,o=Bi.computePositions(e),r=rue(o,n,i),s=e.height,a=e.extrudedHeight,c=r.attributes,d=r.indices,u=c.position.values,h=u.length,p=new Float64Array(h*6),g=new Float64Array(h);g.set(u);let f=new Float64Array(h*4);u=ai.scaleToGeodeticHeight(u,s,i),f=kK(u,0,f),g=ai.scaleToGeodeticHeight(g,a,i),f=kK(g,h*2,f),p.set(u),p.set(g,h),p.set(f,h*2),c.position.values=p,c=f8e(c,t);let y,x=h/3;if(e.shadowVolume){let v=c.normal.values;h=v.length;let A=new Float32Array(h*6);for(y=0;y<h;y++)v[y]=-v[y];A.set(v,h),A=kK(v,h*4,A),c.extrudeDirection=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:A}),t.normal||(c.normal=void 0)}if(l(e.offsetAttribute)){let v=new Uint8Array(x*6);if(e.offsetAttribute===rn.TOP)v=v.fill(1,0,x).fill(1,x*2,x*4);else{let A=e.offsetAttribute===rn.NONE?0:1;v=v.fill(A)}c.applyOffset=new Ge({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:v})}let S=d.length,C=x+x,V=Ae.createTypedArray(p.length/3,S*2+C*3);V.set(d);let L=S;for(y=0;y<S;y+=3){let v=d[y],A=d[y+1],b=d[y+2];V[L++]=b+x,V[L++]=A+x,V[L++]=v+x}let Z,E,P,W;for(y=0;y<C;y+=2)Z=y+C,E=Z+C,P=Z+1,W=E+1,V[L++]=Z,V[L++]=E,V[L++]=P,V[L++]=P,V[L++]=E,V[L++]=W;return{attributes:c,indices:V}}var $de=new m,W2=new m,ju=new he;function eue(e,t,n,i,o,r){let s=m.subtract(t,e,$de);m.normalize(s,s);let a=n.geodeticSurfaceNormal(e,W2),c=m.cross(s,a,$de);m.multiplyByScalar(c,i,c);let d=o.latitude,u=o.longitude,h=r.latitude,p=r.longitude;m.add(e,c,W2),n.cartesianToCartographic(W2,ju);let g=ju.latitude,f=ju.longitude;d=Math.min(d,g),u=Math.min(u,f),h=Math.max(h,g),p=Math.max(p,f),m.subtract(e,c,W2),n.cartesianToCartographic(W2,ju),g=ju.latitude,f=ju.longitude,d=Math.min(d,g),u=Math.min(u,f),h=Math.max(h,g),p=Math.max(p,f),o.latitude=d,o.longitude=u,r.latitude=h,r.longitude=p}var Qu=new m,P2=new m,Yl=new he,zl=new he;function sue(e,t,n,i,o){e=oue(e,t);let r=_o(e,m.equalsEpsilon),s=r.length;if(s<2||n<=0)return new ce;let a=n*.5;Yl.latitude=Number.POSITIVE_INFINITY,Yl.longitude=Number.POSITIVE_INFINITY,zl.latitude=Number.NEGATIVE_INFINITY,zl.longitude=Number.NEGATIVE_INFINITY;let c,d;if(i===vi.ROUNDED){let p=r[0];m.subtract(p,r[1],Qu),m.normalize(Qu,Qu),m.multiplyByScalar(Qu,a,Qu),m.add(p,Qu,P2),t.cartesianToCartographic(P2,ju),c=ju.latitude,d=ju.longitude,Yl.latitude=Math.min(Yl.latitude,c),Yl.longitude=Math.min(Yl.longitude,d),zl.latitude=Math.max(zl.latitude,c),zl.longitude=Math.max(zl.longitude,d)}for(let p=0;p<s-1;++p)eue(r[p],r[p+1],t,a,Yl,zl);let u=r[s-1];m.subtract(u,r[s-2],Qu),m.normalize(Qu,Qu),m.multiplyByScalar(Qu,a,Qu),m.add(u,Qu,P2),eue(u,P2,t,a,Yl,zl),i===vi.ROUNDED&&(t.cartesianToCartographic(P2,ju),c=ju.latitude,d=ju.longitude,Yl.latitude=Math.min(Yl.latitude,c),Yl.longitude=Math.min(Yl.longitude,d),zl.latitude=Math.max(zl.latitude,c),zl.longitude=Math.max(zl.longitude,d));let h=l(o)?o:new ce;return h.north=zl.latitude,h.south=Yl.latitude,h.east=zl.longitude,h.west=Yl.longitude,h}function Nb(e){e=e??Y.EMPTY_OBJECT;let t=e.positions,n=e.width,i=e.height??0,o=e.extrudedHeight??i;this._positions=t,this._ellipsoid=ne.clone(e.ellipsoid??ne.default),this._vertexFormat=Xe.clone(e.vertexFormat??Xe.DEFAULT),this._width=n,this._height=Math.max(i,o),this._extrudedHeight=Math.min(i,o),this._cornerType=e.cornerType??vi.ROUNDED,this._granularity=e.granularity??X.RADIANS_PER_DEGREE,this._shadowVolume=e.shadowVolume??!1,this._workerName="createCorridorGeometry",this._offsetAttribute=e.offsetAttribute,this._rectangle=void 0,this.packedLength=1+t.length*m.packedLength+ne.packedLength+Xe.packedLength+7}Nb.pack=function(e,t,n){n=n??0;let i=e._positions,o=i.length;t[n++]=o;for(let r=0;r<o;++r,n+=m.packedLength)m.pack(i[r],t,n);return ne.pack(e._ellipsoid,t,n),n+=ne.packedLength,Xe.pack(e._vertexFormat,t,n),n+=Xe.packedLength,t[n++]=e._width,t[n++]=e._height,t[n++]=e._extrudedHeight,t[n++]=e._cornerType,t[n++]=e._granularity,t[n++]=e._shadowVolume?1:0,t[n]=e._offsetAttribute??-1,t};var aue=ne.clone(ne.UNIT_SPHERE),cue=new Xe,Mb={positions:void 0,ellipsoid:aue,vertexFormat:cue,width:void 0,height:void 0,extrudedHeight:void 0,cornerType:void 0,granularity:void 0,shadowVolume:void 0,offsetAttribute:void 0};Nb.unpack=function(e,t,n){t=t??0;let i=e[t++],o=new Array(i);for(let f=0;f<i;++f,t+=m.packedLength)o[f]=m.unpack(e,t);let r=ne.unpack(e,t,aue);t+=ne.packedLength;let s=Xe.unpack(e,t,cue);t+=Xe.packedLength;let a=e[t++],c=e[t++],d=e[t++],u=e[t++],h=e[t++],p=e[t++]===1,g=e[t];return l(n)?(n._positions=o,n._ellipsoid=ne.clone(r,n._ellipsoid),n._vertexFormat=Xe.clone(s,n._vertexFormat),n._width=a,n._height=c,n._extrudedHeight=d,n._cornerType=u,n._granularity=h,n._shadowVolume=p,n._offsetAttribute=g===-1?void 0:g,n):(Mb.positions=o,Mb.width=a,Mb.height=c,Mb.extrudedHeight=d,Mb.cornerType=u,Mb.granularity=h,Mb.shadowVolume=p,Mb.offsetAttribute=g===-1?void 0:g,new Nb(Mb))};Nb.computeRectangle=function(e,t){e=e??Y.EMPTY_OBJECT;let n=e.positions,i=e.width,o=e.ellipsoid??ne.default,r=e.cornerType??vi.ROUNDED;return sue(n,o,i,r,t)};Nb.createGeometry=function(e){let t=e._positions,n=e._width,i=e._ellipsoid;t=oue(t,i);let o=_o(t,m.equalsEpsilon);if(o.length<2||n<=0)return;let r=e._height,s=e._extrudedHeight,a=!X.equalsEpsilon(r,s,0,X.EPSILON2),c=e._vertexFormat,d={ellipsoid:i,positions:o,width:n,cornerType:e._cornerType,granularity:e._granularity,saveAttributes:!0},u;if(a)d.height=r,d.extrudedHeight=s,d.shadowVolume=e._shadowVolume,d.offsetAttribute=e._offsetAttribute,u=p8e(d,c);else{let g=Bi.computePositions(d);if(u=rue(g,c,i),u.attributes.position.values=ai.scaleToGeodeticHeight(u.attributes.position.values,r,i),l(e._offsetAttribute)){let f=e._offsetAttribute===rn.NONE?0:1,y=u.attributes.position.values.length,x=new Uint8Array(y/3).fill(f);u.attributes.applyOffset=new Ge({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:x})}}let h=u.attributes,p=le.fromVertices(h.position.values,void 0,3);return c.position||(u.attributes.position.values=void 0),new lt({attributes:h,indices:u.indices,primitiveType:we.TRIANGLES,boundingSphere:p,offsetAttribute:e._offsetAttribute})};Nb.createShadowVolume=function(e,t,n){let i=e._granularity,o=e._ellipsoid,r=t(i,o),s=n(i,o);return new Nb({positions:e._positions,width:e._width,cornerType:e._cornerType,ellipsoid:o,granularity:i,extrudedHeight:r,height:s,vertexFormat:Xe.POSITION_ONLY,shadowVolume:!0})};Object.defineProperties(Nb.prototype,{rectangle:{get:function(){return l(this._rectangle)||(this._rectangle=sue(this._positions,this._ellipsoid,this._width,this._cornerType)),this._rectangle}},textureCoordinateRotationPoints:{get:function(){return[0,0,0,1,1,0]}}});var $_=Nb;var aHn=_(T(),1);var lue=new m,due=new m,b8e=new m;function g8e(e,t){for(let n=0;n<e.length;n++)e[n]=t.scaleToGeodeticSurface(e[n],e[n]);return e}function uue(e,t){let n=[],i=e.positions,o=e.corners,r=e.endPositions,s=new mn,a,c=0,d=0,u,h=0,p;for(u=0;u<i.length;u+=2)p=i[u].length-3,c+=p,h+=p/3*4,d+=i[u+1].length-3;for(c+=3,d+=3,u=0;u<o.length;u++){a=o[u];let w=o[u].leftPositions;l(w)?(p=w.length,c+=p,h+=p/3*2):(p=o[u].rightPositions.length,d+=p,h+=p/3*2)}let g=l(r),f;g&&(f=r[0].length-3,c+=f,d+=f,f/=3,h+=f*4);let y=c+d,x=new Float64Array(y),S=0,C=y-1,V,L,Z,E,P,W,v=f/2,A=Ae.createTypedArray(y/3,h+4),b=0;if(A[b++]=S/3,A[b++]=(C-2)/3,g){n.push(S/3),W=lue,P=due;let w=r[0];for(u=0;u<v;u++)W=m.fromArray(w,(v-1-u)*3,W),P=m.fromArray(w,(v+u)*3,P),Bi.addAttribute(x,P,S),Bi.addAttribute(x,W,void 0,C),L=S/3,E=L+1,V=(C-2)/3,Z=V-1,A[b++]=V,A[b++]=Z,A[b++]=L,A[b++]=E,S+=3,C-=3}let R=0,G=i[R++],I=i[R++];for(x.set(G,S),x.set(I,C-I.length+1),p=I.length-3,n.push(S/3,(C-2)/3),u=0;u<p;u+=3)L=S/3,E=L+1,V=(C-2)/3,Z=V-1,A[b++]=V,A[b++]=Z,A[b++]=L,A[b++]=E,S+=3,C-=3;for(u=0;u<o.length;u++){let w;a=o[u];let M=a.leftPositions,B=a.rightPositions,k,O=b8e;if(l(M)){for(C-=3,k=Z,n.push(E),w=0;w<M.length/3;w++)O=m.fromArray(M,w*3,O),A[b++]=k-w-1,A[b++]=k-w,Bi.addAttribute(x,O,void 0,C),C-=3;n.push(k-Math.floor(M.length/6)),t===vi.BEVELED&&n.push((C-2)/3+1),S+=3}else{for(S+=3,k=E,n.push(Z),w=0;w<B.length/3;w++)O=m.fromArray(B,w*3,O),A[b++]=k+w,A[b++]=k+w+1,Bi.addAttribute(x,O,S),S+=3;n.push(k+Math.floor(B.length/6)),t===vi.BEVELED&&n.push(S/3-1),C-=3}for(G=i[R++],I=i[R++],G.splice(0,3),I.splice(I.length-3,3),x.set(G,S),x.set(I,C-I.length+1),p=I.length-3,w=0;w<I.length;w+=3)E=S/3,L=E-1,Z=(C-2)/3,V=Z+1,A[b++]=V,A[b++]=Z,A[b++]=L,A[b++]=E,S+=3,C-=3;S-=3,C+=3,n.push(S/3,(C-2)/3)}if(g){S+=3,C-=3,W=lue,P=due;let w=r[1];for(u=0;u<v;u++)W=m.fromArray(w,(f-u-1)*3,W),P=m.fromArray(w,u*3,P),Bi.addAttribute(x,W,void 0,C),Bi.addAttribute(x,P,S),E=S/3,L=E-1,Z=(C-2)/3,V=Z+1,A[b++]=V,A[b++]=Z,A[b++]=L,A[b++]=E,S+=3,C-=3;n.push(S/3)}else n.push(S/3,(C-2)/3);return A[b++]=S/3,A[b++]=(C-2)/3,s.position=new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:x}),{attributes:s,indices:A,wallIndices:n}}function y8e(e){let t=e.ellipsoid,n=Bi.computePositions(e),i=uue(n,e.cornerType),o=i.wallIndices,r=e.height,s=e.extrudedHeight,a=i.attributes,c=i.indices,d=a.position.values,u=d.length,h=new Float64Array(u);h.set(d);let p=new Float64Array(u*2);if(d=ai.scaleToGeodeticHeight(d,r,t),h=ai.scaleToGeodeticHeight(h,s,t),p.set(d),p.set(h,u),a.position.values=p,u/=3,l(e.offsetAttribute)){let V=new Uint8Array(u*2);if(e.offsetAttribute===rn.TOP)V=V.fill(1,0,u);else{let L=e.offsetAttribute===rn.NONE?0:1;V=V.fill(L)}a.applyOffset=new Ge({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:V})}let g,f=c.length,y=Ae.createTypedArray(p.length/3,(f+o.length)*2);y.set(c);let x=f;for(g=0;g<f;g+=2){let V=c[g],L=c[g+1];y[x++]=V+u,y[x++]=L+u}let S,C;for(g=0;g<o.length;g++)S=o[g],C=S+u,y[x++]=S,y[x++]=C;return{attributes:a,indices:y}}function v2(e){e=e??Y.EMPTY_OBJECT;let t=e.positions,n=e.width,i=e.height??0,o=e.extrudedHeight??i;this._positions=t,this._ellipsoid=ne.clone(e.ellipsoid??ne.default),this._width=n,this._height=Math.max(i,o),this._extrudedHeight=Math.min(i,o),this._cornerType=e.cornerType??vi.ROUNDED,this._granularity=e.granularity??X.RADIANS_PER_DEGREE,this._offsetAttribute=e.offsetAttribute,this._workerName="createCorridorOutlineGeometry",this.packedLength=1+t.length*m.packedLength+ne.packedLength+6}v2.pack=function(e,t,n){n=n??0;let i=e._positions,o=i.length;t[n++]=o;for(let r=0;r<o;++r,n+=m.packedLength)m.pack(i[r],t,n);return ne.pack(e._ellipsoid,t,n),n+=ne.packedLength,t[n++]=e._width,t[n++]=e._height,t[n++]=e._extrudedHeight,t[n++]=e._cornerType,t[n++]=e._granularity,t[n]=e._offsetAttribute??-1,t};var mue=ne.clone(ne.UNIT_SPHERE),Hg={positions:void 0,ellipsoid:mue,width:void 0,height:void 0,extrudedHeight:void 0,cornerType:void 0,granularity:void 0,offsetAttribute:void 0};v2.unpack=function(e,t,n){t=t??0;let i=e[t++],o=new Array(i);for(let p=0;p<i;++p,t+=m.packedLength)o[p]=m.unpack(e,t);let r=ne.unpack(e,t,mue);t+=ne.packedLength;let s=e[t++],a=e[t++],c=e[t++],d=e[t++],u=e[t++],h=e[t];return l(n)?(n._positions=o,n._ellipsoid=ne.clone(r,n._ellipsoid),n._width=s,n._height=a,n._extrudedHeight=c,n._cornerType=d,n._granularity=u,n._offsetAttribute=h===-1?void 0:h,n):(Hg.positions=o,Hg.width=s,Hg.height=a,Hg.extrudedHeight=c,Hg.cornerType=d,Hg.granularity=u,Hg.offsetAttribute=h===-1?void 0:h,new v2(Hg))};v2.createGeometry=function(e){let t=e._positions,n=e._width,i=e._ellipsoid;t=g8e(t,i);let o=_o(t,m.equalsEpsilon);if(o.length<2||n<=0)return;let r=e._height,s=e._extrudedHeight,a=!X.equalsEpsilon(r,s,0,X.EPSILON2),c={ellipsoid:i,positions:o,width:n,cornerType:e._cornerType,granularity:e._granularity,saveAttributes:!1},d;if(a)c.height=r,c.extrudedHeight=s,c.offsetAttribute=e._offsetAttribute,d=y8e(c);else{let p=Bi.computePositions(c);if(d=uue(p,c.cornerType),d.attributes.position.values=ai.scaleToGeodeticHeight(d.attributes.position.values,r,i),l(e._offsetAttribute)){let g=d.attributes.position.values.length,f=e._offsetAttribute===rn.NONE?0:1,y=new Uint8Array(g/3).fill(f);d.attributes.applyOffset=new Ge({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:y})}}let u=d.attributes,h=le.fromVertices(u.position.values,void 0,3);return new lt({attributes:u,indices:d.indices,primitiveType:we.LINES,boundingSphere:h,offsetAttribute:e._offsetAttribute})};var w2=v2;var xHn=_(T(),1);var x8e=new Qn(0);function sl(e){oi.call(this,e),this._zIndex=0,this._terrainOffsetProperty=void 0}l(Object.create)&&(sl.prototype=Object.create(oi.prototype),sl.prototype.constructor=sl);Object.defineProperties(sl.prototype,{zIndex:{get:function(){return this._zIndex}},terrainOffsetProperty:{get:function(){return this._terrainOffsetProperty}}});sl.prototype._isOnTerrain=function(e,t){return this._fillEnabled&&!l(t.height)&&!l(t.extrudedHeight)&&Dc.isSupported(this._scene)};sl.prototype._getIsClosed=function(e){let t=e.height,n=e.extrudedHeight;return t===0||l(n)&&n!==t};sl.prototype._computeCenter=pe.throwInstantiationError;sl.prototype._onEntityPropertyChanged=function(e,t,n,i){if(oi.prototype._onEntityPropertyChanged.call(this,e,t,n,i),this._observedPropertyNames.indexOf(t)===-1)return;let o=this._entity[this._geometryPropertyName];if(!l(o))return;l(o.zIndex)&&(l(o.height)||l(o.extrudedHeight))&&_t(_t.geometryZIndex),this._zIndex=o.zIndex??x8e,l(this._terrainOffsetProperty)&&(this._terrainOffsetProperty.destroy(),this._terrainOffsetProperty=void 0);let r=o.heightReference,s=o.extrudedHeightReference;if(l(r)||l(s)){let a=new Dm(this._computeCenter.bind(this),!this._dynamic);this._terrainOffsetProperty=new Hx(this._scene,a,r,s)}};sl.prototype.destroy=function(){l(this._terrainOffsetProperty)&&(this._terrainOffsetProperty.destroy(),this._terrainOffsetProperty=void 0),oi.prototype.destroy.call(this)};sl.getGeometryHeight=function(e,t){if(!l(e)){t!==Je.NONE&&_t(_t.geometryHeightReference);return}return Ru(t)?0:e};sl.getGeometryExtrudedHeight=function(e,t){if(!l(e)){t!==Je.NONE&&_t(_t.geometryExtrudedHeightReference);return}return Ru(t)?sl.CLAMP_TO_GROUND:e};sl.CLAMP_TO_GROUND="clamp";sl.computeGeometryOffsetAttribute=function(e,t,n,i){(!l(e)||!l(t))&&(t=Je.NONE),(!l(n)||!l(i))&&(i=Je.NONE);let o=0;if(t!==Je.NONE&&o++,i===Je.RELATIVE_TO_GROUND&&o++,o===2)return rn.ALL;if(o===1)return rn.TOP};var Yn=sl;var hue=new D,fue=m.ZERO,pue=new m,bue=new ce;function _8e(e){this.id=e,this.vertexFormat=void 0,this.positions=void 0,this.width=void 0,this.cornerType=void 0,this.height=void 0,this.extrudedHeight=void 0,this.granularity=void 0,this.offsetAttribute=void 0}function gh(e,t){Yn.call(this,{entity:e,scene:t,geometryOptions:new _8e(e),geometryPropertyName:"corridor",observedPropertyNames:["availability","corridor"]}),this._onEntityPropertyChanged(e,"corridor",e.corridor,void 0)}l(Object.create)&&(gh.prototype=Object.create(Yn.prototype),gh.prototype.constructor=gh);gh.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i={show:new xn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),distanceDisplayCondition:kn.fromDistanceDisplayCondition(this._distanceDisplayConditionProperty.getValue(e)),offset:void 0,color:void 0};if(this._materialProperty instanceof Dt){let o;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(o=this._materialProperty.color.getValue(e,hue)),l(o)||(o=D.WHITE),i.color=Yt.fromColor(o)}return l(this._options.offsetAttribute)&&(i.offset=$i.fromCartesian3(J.getValueOrDefault(this._terrainOffsetProperty,e,fue,pue))),new Et({id:t,geometry:new $_(this._options),attributes:i})};gh.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=J.getValueOrDefault(this._outlineColorProperty,e,D.BLACK,hue),o={show:new xn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Yt.fromColor(i),distanceDisplayCondition:kn.fromDistanceDisplayCondition(this._distanceDisplayConditionProperty.getValue(e)),offset:void 0};return l(this._options.offsetAttribute)&&(o.offset=$i.fromCartesian3(J.getValueOrDefault(this._terrainOffsetProperty,e,fue,pue))),new Et({id:t,geometry:new w2(this._options),attributes:o})};gh.prototype._computeCenter=function(e,t){let n=J.getValueOrUndefined(this._entity.corridor.positions,e);if(!(!l(n)||n.length===0))return m.clone(n[Math.floor(n.length/2)],t)};gh.prototype._isHidden=function(e,t){return!l(t.positions)||!l(t.width)||oi.prototype._isHidden.call(this,e,t)};gh.prototype._isDynamic=function(e,t){return!t.positions.isConstant||!J.isConstant(t.height)||!J.isConstant(t.extrudedHeight)||!J.isConstant(t.granularity)||!J.isConstant(t.width)||!J.isConstant(t.outlineWidth)||!J.isConstant(t.cornerType)||!J.isConstant(t.zIndex)||this._onTerrain&&!J.isConstant(this._materialProperty)&&!(this._materialProperty instanceof Dt)};gh.prototype._setStaticOptions=function(e,t){let n=J.getValueOrUndefined(t.height,Be.MINIMUM_VALUE),i=J.getValueOrDefault(t.heightReference,Be.MINIMUM_VALUE,Je.NONE),o=J.getValueOrUndefined(t.extrudedHeight,Be.MINIMUM_VALUE),r=J.getValueOrDefault(t.extrudedHeightReference,Be.MINIMUM_VALUE,Je.NONE);l(o)&&!l(n)&&(n=0);let s=this._options;s.vertexFormat=this._materialProperty instanceof Dt?dn.VERTEX_FORMAT:ao.MaterialSupport.TEXTURED.vertexFormat,s.positions=t.positions.getValue(Be.MINIMUM_VALUE,s.positions),s.width=t.width.getValue(Be.MINIMUM_VALUE),s.granularity=J.getValueOrUndefined(t.granularity,Be.MINIMUM_VALUE),s.cornerType=J.getValueOrUndefined(t.cornerType,Be.MINIMUM_VALUE),s.offsetAttribute=Yn.computeGeometryOffsetAttribute(n,i,o,r),s.height=Yn.getGeometryHeight(n,i),o=Yn.getGeometryExtrudedHeight(o,r),o===Yn.CLAMP_TO_GROUND&&(o=di.getMinimumMaximumHeights($_.computeRectangle(s,bue)).minimumTerrainHeight),s.extrudedHeight=o};gh.DynamicGeometryUpdater=W1;function W1(e,t,n){ii.call(this,e,t,n)}l(Object.create)&&(W1.prototype=Object.create(ii.prototype),W1.prototype.constructor=W1);W1.prototype._isHidden=function(e,t,n){let i=this._options;return!l(i.positions)||!l(i.width)||ii.prototype._isHidden.call(this,e,t,n)};W1.prototype._setOptions=function(e,t,n){let i=this._options,o=J.getValueOrUndefined(t.height,n),r=J.getValueOrDefault(t.heightReference,n,Je.NONE),s=J.getValueOrUndefined(t.extrudedHeight,n),a=J.getValueOrDefault(t.extrudedHeightReference,n,Je.NONE);l(s)&&!l(o)&&(o=0),i.positions=J.getValueOrUndefined(t.positions,n),i.width=J.getValueOrUndefined(t.width,n),i.granularity=J.getValueOrUndefined(t.granularity,n),i.cornerType=J.getValueOrUndefined(t.cornerType,n),i.offsetAttribute=Yn.computeGeometryOffsetAttribute(o,r,s,a),i.height=Yn.getGeometryHeight(o,r),s=Yn.getGeometryExtrudedHeight(s,a),s===Yn.CLAMP_TO_GROUND&&(s=di.getMinimumMaximumHeights($_.computeRectangle(i,bue)).minimumTerrainHeight),i.extrudedHeight=s};var F2=gh;var bJn=_(T(),1);var YHn=_(T(),1);function Ik(){pe.throwInstantiationError()}Object.defineProperties(Ik.prototype,{name:{get:pe.throwInstantiationError},clock:{get:pe.throwInstantiationError},entities:{get:pe.throwInstantiationError},isLoading:{get:pe.throwInstantiationError},changedEvent:{get:pe.throwInstantiationError},errorEvent:{get:pe.throwInstantiationError},loadingEvent:{get:pe.throwInstantiationError},show:{get:pe.throwInstantiationError},clustering:{get:pe.throwInstantiationError}});Ik.prototype.update=function(e){pe.throwInstantiationError()};Ik.setLoading=function(e,t){e._isLoading!==t&&(t?e._entityCollection.suspendEvents():e._entityCollection.resumeEvents(),e._isLoading=t,e._loading.raiseEvent(e,t))};var Br=Ik;var dJn=_(T(),1);var qHn=_(T(),1);function Xf(e,t){this._ellipsoid=e,this._cameraPosition=new m,this._cameraPositionInScaledSpace=new m,this._distanceToLimbInScaledSpaceSquared=0,l(t)&&(this.cameraPosition=t)}Object.defineProperties(Xf.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},cameraPosition:{get:function(){return this._cameraPosition},set:function(e){let n=this._ellipsoid.transformPositionToScaledSpace(e,this._cameraPositionInScaledSpace),i=m.magnitudeSquared(n)-1;m.clone(e,this._cameraPosition),this._cameraPositionInScaledSpace=n,this._distanceToLimbInScaledSpaceSquared=i}}});var gue=new m;Xf.prototype.isPointVisible=function(e){let n=this._ellipsoid.transformPositionToScaledSpace(e,gue);return DK(n,this._cameraPositionInScaledSpace,this._distanceToLimbInScaledSpaceSquared)};Xf.prototype.isScaledSpacePointVisible=function(e){return DK(e,this._cameraPositionInScaledSpace,this._distanceToLimbInScaledSpaceSquared)};var T8e=new m;Xf.prototype.isScaledSpacePointVisiblePossiblyUnderEllipsoid=function(e,t){let n=this._ellipsoid,i,o;return l(t)&&t<0&&n.minimumRadius>-t?(o=T8e,o.x=this._cameraPosition.x/(n.radii.x+t),o.y=this._cameraPosition.y/(n.radii.y+t),o.z=this._cameraPosition.z/(n.radii.z+t),i=o.x*o.x+o.y*o.y+o.z*o.z-1):(o=this._cameraPositionInScaledSpace,i=this._distanceToLimbInScaledSpaceSquared),DK(e,o,i)};Xf.prototype.computeHorizonCullingPoint=function(e,t,n){return _ue(this._ellipsoid,e,t,n)};var yue=ne.clone(ne.UNIT_SPHERE);Xf.prototype.computeHorizonCullingPointPossiblyUnderEllipsoid=function(e,t,n,i){let o=xue(this._ellipsoid,n,yue);return _ue(o,e,t,i)};Xf.prototype.computeHorizonCullingPointFromVertices=function(e,t,n,i,o){return Tue(this._ellipsoid,e,t,n,i,o)};Xf.prototype.computeHorizonCullingPointFromVerticesPossiblyUnderEllipsoid=function(e,t,n,i,o,r){let s=xue(this._ellipsoid,o,yue);return Tue(s,e,t,n,i,r)};var S8e=[];Xf.prototype.computeHorizonCullingPointFromRectangle=function(e,t,n){let i=ce.subsample(e,t,0,S8e),o=le.fromPoints(i);if(!(m.magnitude(o.center)<.1*t.minimumRadius))return this.computeHorizonCullingPoint(o.center,i,n)};var C8e=new m;function xue(e,t,n){if(l(t)&&t<0&&e.minimumRadius>-t){let i=m.fromElements(e.radii.x+t,e.radii.y+t,e.radii.z+t,C8e);e=ne.fromCartesian3(i,n)}return e}function _ue(e,t,n,i){l(i)||(i=new m);let o=Vue(e,t),r=0;for(let s=0,a=n.length;s<a;++s){let c=n[s],d=Sue(e,c,o);if(d<0)return;r=Math.max(r,d)}return Cue(o,r,i)}var Xk=new m;function Tue(e,t,n,i,o,r){l(r)||(r=new m),i=i??3,o=o??m.ZERO;let s=Vue(e,t),a=0;for(let c=0,d=n.length;c<d;c+=i){Xk.x=n[c]+o.x,Xk.y=n[c+1]+o.y,Xk.z=n[c+2]+o.z;let u=Sue(e,Xk,s);if(u<0)return;a=Math.max(a,u)}return Cue(s,a,r)}function DK(e,t,n){let i=t,o=n,r=m.subtract(e,i,gue),s=-m.dot(r,i);return!(o<0?s>0:s>o&&s*s/m.magnitudeSquared(r)>o)}var V8e=new m,L8e=new m;function Sue(e,t,n){let i=e.transformPositionToScaledSpace(t,V8e),o=m.magnitudeSquared(i),r=Math.sqrt(o),s=m.divideByScalar(i,r,L8e);o=Math.max(1,o),r=Math.max(1,r);let a=m.dot(s,n),c=m.magnitude(m.cross(s,n,s)),d=1/r,u=Math.sqrt(o-1)*d;return 1/(a*d-c*u)}function Cue(e,t,n){if(!(t<=0||t===1/0||t!==t))return m.multiplyByScalar(e,t,n)}var UK=new m;function Vue(e,t){return m.equals(t,m.ZERO)?t:(e.transformPositionToScaledSpace(t,UK),m.normalize(UK,UK))}var kb=Xf;var hKn=_(T(),1);function Lr(e,t){e=e??Y.EMPTY_OBJECT;let n=e.translucencyByDistance,i=e.scaleByDistance,o=e.distanceDisplayCondition;l(n)&&(n=kt.clone(n)),l(i)&&(i=kt.clone(i)),l(o)&&(o=wt.clone(o)),this._show=e.show??!0,this._position=m.clone(e.position??m.ZERO),this._actualPosition=m.clone(this._position),this._color=D.clone(e.color??D.WHITE),this._outlineColor=D.clone(e.outlineColor??D.TRANSPARENT),this._outlineWidth=e.outlineWidth??0,this._pixelSize=e.pixelSize??10,this._scaleByDistance=i,this._translucencyByDistance=n,this._distanceDisplayCondition=o,this._disableDepthTestDistance=e.disableDepthTestDistance??0,this._id=e.id,this._collection=e.collection??t,this._clusterShow=!0,this._pickId=void 0,this._pointPrimitiveCollection=t,this._dirty=!1,this._index=-1,this._splitDirection=e.splitDirection??vr.NONE}var Lue=Lr.SHOW_INDEX=0,Gue=Lr.POSITION_INDEX=1,R8e=Lr.COLOR_INDEX=2,Z8e=Lr.OUTLINE_COLOR_INDEX=3,G8e=Lr.OUTLINE_WIDTH_INDEX=4,E8e=Lr.PIXEL_SIZE_INDEX=5,I8e=Lr.SCALE_BY_DISTANCE_INDEX=6,X8e=Lr.TRANSLUCENCY_BY_DISTANCE_INDEX=7,W8e=Lr.DISTANCE_DISPLAY_CONDITION_INDEX=8,P8e=Lr.DISABLE_DEPTH_DISTANCE_INDEX=9,v8e=Lr.SPLIT_DIRECTION_INDEX=10;Lr.NUMBER_OF_PROPERTIES=11;function Pd(e,t){let n=e._pointPrimitiveCollection;l(n)&&(n._updatePointPrimitive(e,t),e._dirty=!0)}Object.defineProperties(Lr.prototype,{show:{get:function(){return this._show},set:function(e){this._show!==e&&(this._show=e,Pd(this,Lue))}},position:{get:function(){return this._position},set:function(e){let t=this._position;m.equals(t,e)||(m.clone(e,t),m.clone(e,this._actualPosition),Pd(this,Gue))}},scaleByDistance:{get:function(){return this._scaleByDistance},set:function(e){let t=this._scaleByDistance;kt.equals(t,e)||(this._scaleByDistance=kt.clone(e,t),Pd(this,I8e))}},translucencyByDistance:{get:function(){return this._translucencyByDistance},set:function(e){let t=this._translucencyByDistance;kt.equals(t,e)||(this._translucencyByDistance=kt.clone(e,t),Pd(this,X8e))}},pixelSize:{get:function(){return this._pixelSize},set:function(e){this._pixelSize!==e&&(this._pixelSize=e,Pd(this,E8e))}},color:{get:function(){return this._color},set:function(e){let t=this._color;D.equals(t,e)||(D.clone(e,t),Pd(this,R8e))}},outlineColor:{get:function(){return this._outlineColor},set:function(e){let t=this._outlineColor;D.equals(t,e)||(D.clone(e,t),Pd(this,Z8e))}},outlineWidth:{get:function(){return this._outlineWidth},set:function(e){this._outlineWidth!==e&&(this._outlineWidth=e,Pd(this,G8e))}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){wt.equals(this._distanceDisplayCondition,e)||(this._distanceDisplayCondition=wt.clone(e,this._distanceDisplayCondition),Pd(this,W8e))}},disableDepthTestDistance:{get:function(){return this._disableDepthTestDistance},set:function(e){this._disableDepthTestDistance!==e&&(this._disableDepthTestDistance=e,Pd(this,P8e))}},id:{get:function(){return this._id},set:function(e){this._id=e,l(this._pickId)&&(this._pickId.object.id=e)}},pickId:{get:function(){return this._pickId}},clusterShow:{get:function(){return this._clusterShow},set:function(e){this._clusterShow!==e&&(this._clusterShow=e,Pd(this,Lue))}},splitDirection:{get:function(){return this._splitDirection},set:function(e){this._splitDirection!==e&&(this._splitDirection=e,Pd(this,v8e))}}});Lr.prototype.getPickId=function(e){return l(this._pickId)||(this._pickId=e.createPickId({primitive:this,collection:this._collection,id:this._id})),this._pickId};Lr.prototype._getActualPosition=function(){return this._actualPosition};Lr.prototype._setActualPosition=function(e){m.clone(e,this._actualPosition),Pd(this,Gue)};var Rue=new se;Lr._computeActualPosition=function(e,t,n){return t.mode===oe.SCENE3D?e:(F.multiplyByPoint(n,e,Rue),Ui.computeActualEllipsoidPosition(t,Rue))};var Zue=new se;Lr._computeScreenSpacePosition=function(e,t,n,i){let o=F.multiplyByVector(e,se.fromElements(t.x,t.y,t.z,1,Zue),Zue);return Ui.worldToWindowCoordinates(n,o,i)};Lr.prototype.computeScreenSpacePosition=function(e,t){let n=this._pointPrimitiveCollection;l(t)||(t=new U);let i=n.modelMatrix,o=Lr._computeScreenSpacePosition(i,this._actualPosition,e,t);if(l(o))return o.y=e.canvas.clientHeight-o.y,o};Lr.getScreenSpaceBoundingBox=function(e,t,n){let i=e.pixelSize,o=i*.5,r=t.x-o,s=t.y-o,a=i,c=i;return l(n)||(n=new Ke),n.x=r,n.y=s,n.width=a,n.height=c,n};Lr.prototype.equals=function(e){return this===e||l(e)&&this._id===e._id&&m.equals(this._position,e._position)&&D.equals(this._color,e._color)&&this._pixelSize===e._pixelSize&&this._outlineWidth===e._outlineWidth&&this._show===e._show&&D.equals(this._outlineColor,e._outlineColor)&&kt.equals(this._scaleByDistance,e._scaleByDistance)&&kt.equals(this._translucencyByDistance,e._translucencyByDistance)&&wt.equals(this._distanceDisplayCondition,e._distanceDisplayCondition)&&this._disableDepthTestDistance===e._disableDepthTestDistance&&this._splitDirection===e._splitDirection};Lr.prototype._destroy=function(){this._pickId=this._pickId&&this._pickId.destroy(),this._pointPrimitiveCollection=void 0};var Es=Lr;var OKn=_(T(),1);var pKn=_(T(),1),Kg=`in vec4 v_color; in vec4 v_outlineColor; in float v_innerPercent; in float v_pixelDistance; in vec4 v_pickColor; in float v_splitDirection; void main() { if (v_splitDirection < 0.0 && gl_FragCoord.x > czm_splitPosition) discard; if (v_splitDirection > 0.0 && gl_FragCoord.x < czm_splitPosition) discard; // The distance in UV space from this fragment to the center of the point, at most 0.5. float distanceToCenter = length(gl_PointCoord - vec2(0.5)); // The max distance stops one pixel shy of the edge to leave space for anti-aliasing. float maxDistance = max(0.0, 0.5 - v_pixelDistance); float wholeAlpha = 1.0 - smoothstep(maxDistance, 0.5, distanceToCenter); float innerAlpha = 1.0 - smoothstep(maxDistance * v_innerPercent, 0.5 * v_innerPercent, distanceToCenter); vec4 color = mix(v_outlineColor, v_color, innerAlpha); color.a *= wholeAlpha; // Fully transparent parts of the billboard are not pickable. #if !defined(OPAQUE) && !defined(TRANSLUCENT) if (color.a < 0.005) // matches 0/255 and 1/255 { discard; } #else // The billboard is rendered twice. The opaque pass discards translucent fragments // and the translucent pass discards opaque fragments. #ifdef OPAQUE if (color.a < 0.995) // matches < 254/255 { discard; } #else if (color.a >= 0.995) // matches 254/255 and 255/255 { discard; } #endif #endif out_FragColor = czm_gammaCorrect(color); czm_writeLogDepth(); } `;var gKn=_(T(),1),A2=`uniform float u_maxTotalPointSize; in vec4 positionHighAndSize; in vec4 positionLowAndOutline; in vec4 compressedAttribute0; // color, outlineColor, pick color in vec4 compressedAttribute1; // show, translucency by distance, some free space in vec4 scaleByDistance; // near, nearScale, far, farScale in vec4 distanceDisplayConditionAndDisableDepthAndSplitDirection; // near, far, disableDepthTestDistance, splitDirection out vec4 v_color; out vec4 v_outlineColor; out float v_innerPercent; out float v_pixelDistance; out vec4 v_pickColor; out float v_splitDirection; const float SHIFT_LEFT8 = 256.0; const float SHIFT_RIGHT8 = 1.0 / 256.0; void main() { // Modifying this shader may also require modifications to PointPrimitive._computeScreenSpacePosition // unpack attributes vec3 positionHigh = positionHighAndSize.xyz; vec3 positionLow = positionLowAndOutline.xyz; float outlineWidthBothSides = 2.0 * positionLowAndOutline.w; float totalSize = positionHighAndSize.w + outlineWidthBothSides; float outlinePercent = outlineWidthBothSides / totalSize; // Scale in response to browser-zoom. totalSize *= czm_pixelRatio; float temp = compressedAttribute1.x * SHIFT_RIGHT8; float show = floor(temp); #ifdef EYE_DISTANCE_TRANSLUCENCY vec4 translucencyByDistance; translucencyByDistance.x = compressedAttribute1.z; translucencyByDistance.z = compressedAttribute1.w; translucencyByDistance.y = ((temp - floor(temp)) * SHIFT_LEFT8) / 255.0; temp = compressedAttribute1.y * SHIFT_RIGHT8; translucencyByDistance.w = ((temp - floor(temp)) * SHIFT_LEFT8) / 255.0; #endif /////////////////////////////////////////////////////////////////////////// vec4 color; vec4 outlineColor; vec4 pickColor; // compressedAttribute0.z => pickColor.rgb temp = compressedAttribute0.z * SHIFT_RIGHT8; pickColor.b = (temp - floor(temp)) * SHIFT_LEFT8; temp = floor(temp) * SHIFT_RIGHT8; pickColor.g = (temp - floor(temp)) * SHIFT_LEFT8; pickColor.r = floor(temp); // compressedAttribute0.x => color.rgb temp = compressedAttribute0.x * SHIFT_RIGHT8; color.b = (temp - floor(temp)) * SHIFT_LEFT8; temp = floor(temp) * SHIFT_RIGHT8; color.g = (temp - floor(temp)) * SHIFT_LEFT8; color.r = floor(temp); // compressedAttribute0.y => outlineColor.rgb temp = compressedAttribute0.y * SHIFT_RIGHT8; outlineColor.b = (temp - floor(temp)) * SHIFT_LEFT8; temp = floor(temp) * SHIFT_RIGHT8; outlineColor.g = (temp - floor(temp)) * SHIFT_LEFT8; outlineColor.r = floor(temp); // compressedAttribute0.w => color.a, outlineColor.a, pickColor.a temp = compressedAttribute0.w * SHIFT_RIGHT8; pickColor.a = (temp - floor(temp)) * SHIFT_LEFT8; pickColor = pickColor / 255.0; temp = floor(temp) * SHIFT_RIGHT8; outlineColor.a = (temp - floor(temp)) * SHIFT_LEFT8; outlineColor /= 255.0; color.a = floor(temp); color /= 255.0; /////////////////////////////////////////////////////////////////////////// vec4 p = czm_translateRelativeToEye(positionHigh, positionLow); vec4 positionEC = czm_modelViewRelativeToEye * p; /////////////////////////////////////////////////////////////////////////// #if defined(EYE_DISTANCE_SCALING) || defined(EYE_DISTANCE_TRANSLUCENCY) || defined(DISTANCE_DISPLAY_CONDITION) || defined(DISABLE_DEPTH_DISTANCE) float lengthSq; if (czm_sceneMode == czm_sceneMode2D) { // 2D camera distance is a special case // treat all billboards as flattened to the z=0.0 plane lengthSq = czm_eyeHeight2D.y; } else { lengthSq = dot(positionEC.xyz, positionEC.xyz); } #endif #ifdef EYE_DISTANCE_SCALING totalSize *= czm_nearFarScalar(scaleByDistance, lengthSq); #endif if (totalSize > 0.0) { // Add padding for anti-aliasing on both sides. totalSize += 3.0; } // Clamp to max point size. totalSize = min(totalSize, u_maxTotalPointSize); // If size is too small, push vertex behind near plane for clipping. // Note that context.minimumAliasedPointSize "will be at most 1.0". if (totalSize < 1.0) { positionEC.xyz = vec3(0.0); totalSize = 1.0; } float translucency = 1.0; #ifdef EYE_DISTANCE_TRANSLUCENCY translucency = czm_nearFarScalar(translucencyByDistance, lengthSq); // push vertex behind near plane for clipping if (translucency < 0.004) { positionEC.xyz = vec3(0.0); } #endif #ifdef DISTANCE_DISPLAY_CONDITION float nearSq = distanceDisplayConditionAndDisableDepthAndSplitDirection.x; float farSq = distanceDisplayConditionAndDisableDepthAndSplitDirection.y; if (lengthSq < nearSq || lengthSq > farSq) { // push vertex behind camera to force it to be clipped positionEC.xyz = vec3(0.0, 0.0, 1.0); } #endif gl_Position = czm_projection * positionEC; czm_vertexLogDepth(); #ifdef DISABLE_DEPTH_DISTANCE float disableDepthTestDistance = distanceDisplayConditionAndDisableDepthAndSplitDirection.z; if (disableDepthTestDistance == 0.0 && czm_minimumDisableDepthTestDistance != 0.0) { disableDepthTestDistance = czm_minimumDisableDepthTestDistance; } if (disableDepthTestDistance != 0.0) { // Don't try to "multiply both sides" by w. Greater/less-than comparisons won't work for negative values of w. float zclip = gl_Position.z / gl_Position.w; bool clipped = (zclip < -1.0 || zclip > 1.0); if (!clipped && (disableDepthTestDistance < 0.0 || (lengthSq > 0.0 && lengthSq < disableDepthTestDistance))) { // Position z on the near plane. gl_Position.z = -gl_Position.w; #ifdef LOG_DEPTH czm_vertexLogDepth(vec4(czm_currentFrustum.x)); #endif } } #endif v_color = color; v_color.a *= translucency * show; v_outlineColor = outlineColor; v_outlineColor.a *= translucency * show; v_innerPercent = 1.0 - outlinePercent; v_pixelDistance = 2.0 / totalSize; gl_PointSize = totalSize * show; gl_Position *= show; v_pickColor = pickColor; v_splitDirection = distanceDisplayConditionAndDisableDepthAndSplitDirection.w; } `;var w8e=Es.SHOW_INDEX,YK=Es.POSITION_INDEX,Eue=Es.COLOR_INDEX,F8e=Es.OUTLINE_COLOR_INDEX,A8e=Es.OUTLINE_WIDTH_INDEX,M8e=Es.PIXEL_SIZE_INDEX,Iue=Es.SCALE_BY_DISTANCE_INDEX,Xue=Es.TRANSLUCENCY_BY_DISTANCE_INDEX,Wue=Es.DISTANCE_DISPLAY_CONDITION_INDEX,N8e=Es.DISABLE_DEPTH_DISTANCE_INDEX,k8e=Es.SPLIT_DIRECTION_INDEX,zK=Es.NUMBER_OF_PROPERTIES,Sc={positionHighAndSize:0,positionLowAndOutline:1,compressedAttribute0:2,compressedAttribute1:3,scaleByDistance:4,distanceDisplayConditionAndDisableDepthAndSplitDirection:5};function qu(e){e=e??Y.EMPTY_OBJECT,this._sp=void 0,this._spTranslucent=void 0,this._rsOpaque=void 0,this._rsTranslucent=void 0,this._vaf=void 0,this._pointPrimitives=[],this._pointPrimitivesToUpdate=[],this._pointPrimitivesToUpdateIndex=0,this._pointPrimitivesRemoved=!1,this._createVertexArray=!1,this._shaderScaleByDistance=!1,this._compiledShaderScaleByDistance=!1,this._shaderTranslucencyByDistance=!1,this._compiledShaderTranslucencyByDistance=!1,this._shaderDistanceDisplayCondition=!1,this._compiledShaderDistanceDisplayCondition=!1,this._shaderDisableDepthDistance=!1,this._compiledShaderDisableDepthDistance=!1,this._propertiesChanged=new Uint32Array(zK),this._maxPixelSize=1,this._baseVolume=new le,this._baseVolumeWC=new le,this._baseVolume2D=new le,this._boundingVolume=new le,this._boundingVolumeDirty=!1,this._colorCommands=[],this.show=e.show??!0,this.modelMatrix=F.clone(e.modelMatrix??F.IDENTITY),this._modelMatrix=F.clone(F.IDENTITY),this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this.blendOption=e.blendOption??Lo.OPAQUE_AND_TRANSLUCENT,this._blendOption=void 0,this._mode=oe.SCENE3D,this._maxTotalPointSize=1,this._buffersUsage=[Me.STATIC_DRAW,Me.STATIC_DRAW,Me.STATIC_DRAW,Me.STATIC_DRAW,Me.STATIC_DRAW,Me.STATIC_DRAW,Me.STATIC_DRAW,Me.STATIC_DRAW,Me.STATIC_DRAW];let t=this;this._uniforms={u_maxTotalPointSize:function(){return t._maxTotalPointSize}}}Object.defineProperties(qu.prototype,{length:{get:function(){return HK(this),this._pointPrimitives.length}}});function Pue(e){let t=e.length;for(let n=0;n<t;++n)e[n]&&e[n]._destroy()}qu.prototype.add=function(e){let t=new Es(e,this);return t._index=this._pointPrimitives.length,this._pointPrimitives.push(t),this._createVertexArray=!0,t};qu.prototype.remove=function(e){return this.contains(e)?(this._pointPrimitives[e._index]=null,this._pointPrimitivesRemoved=!0,this._createVertexArray=!0,e._destroy(),!0):!1};qu.prototype.removeAll=function(){Pue(this._pointPrimitives),this._pointPrimitives=[],this._pointPrimitivesToUpdate=[],this._pointPrimitivesToUpdateIndex=0,this._pointPrimitivesRemoved=!1,this._createVertexArray=!0};function HK(e){if(e._pointPrimitivesRemoved){e._pointPrimitivesRemoved=!1;let t=[],n=e._pointPrimitives,i=n.length;for(let o=0,r=0;o<i;++o){let s=n[o];s&&(s._index=r++,t.push(s))}e._pointPrimitives=t}}qu.prototype._updatePointPrimitive=function(e,t){e._dirty||(this._pointPrimitivesToUpdate[this._pointPrimitivesToUpdateIndex++]=e),++this._propertiesChanged[t]};qu.prototype.contains=function(e){return l(e)&&e._pointPrimitiveCollection===this};qu.prototype.get=function(e){return HK(this),this._pointPrimitives[e]};qu.prototype.computeNewBuffersUsage=function(){let e=this._buffersUsage,t=!1,n=this._propertiesChanged;for(let i=0;i<zK;++i){let o=n[i]===0?Me.STATIC_DRAW:Me.STREAM_DRAW;t=t||e[i]!==o,e[i]=o}return t};function U8e(e,t,n){return new Xp(e,[{index:Sc.positionHighAndSize,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:n[YK]},{index:Sc.positionLowAndShow,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:n[YK]},{index:Sc.compressedAttribute0,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:n[Eue]},{index:Sc.compressedAttribute1,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:n[Xue]},{index:Sc.scaleByDistance,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:n[Iue]},{index:Sc.distanceDisplayConditionAndDisableDepthAndSplitDirection,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:n[Wue]}],t)}var BK=new On;function vue(e,t,n,i){let o=i._index,r=i._getActualPosition();e._mode===oe.SCENE3D&&(le.expand(e._baseVolume,r,e._baseVolume),e._boundingVolumeDirty=!0),On.fromCartesian(r,BK);let s=i.pixelSize,a=i.outlineWidth;e._maxPixelSize=Math.max(e._maxPixelSize,s+a);let c=n[Sc.positionHighAndSize],d=BK.high;c(o,d.x,d.y,d.z,s);let u=n[Sc.positionLowAndOutline],h=BK.low;u(o,h.x,h.y,h.z,a)}var Wk=65536,M2=256;function wue(e,t,n,i){let o=i._index,r=i.color,s=i.getPickId(t).color,a=i.outlineColor,c=D.floatToByte(r.red),d=D.floatToByte(r.green),u=D.floatToByte(r.blue),h=c*Wk+d*M2+u;c=D.floatToByte(a.red),d=D.floatToByte(a.green),u=D.floatToByte(a.blue);let p=c*Wk+d*M2+u;c=D.floatToByte(s.red),d=D.floatToByte(s.green),u=D.floatToByte(s.blue);let g=c*Wk+d*M2+u,f=D.floatToByte(r.alpha)*Wk+D.floatToByte(a.alpha)*M2+D.floatToByte(s.alpha),y=n[Sc.compressedAttribute0];y(o,h,p,g,f)}function Fue(e,t,n,i){let o=i._index,r=0,s=1,a=1,c=1,d=i.translucencyByDistance;l(d)&&(r=d.near,s=d.nearValue,a=d.far,c=d.farValue,(s!==1||c!==1)&&(e._shaderTranslucencyByDistance=!0));let u=i.show&&i.clusterShow;i.color.alpha===0&&i.outlineColor.alpha===0&&(u=!1),s=X.clamp(s,0,1),s=s===1?255:s*255|0;let h=(u?1:0)*M2+s;c=X.clamp(c,0,1),c=c===1?255:c*255|0;let p=c,g=n[Sc.compressedAttribute1];g(o,h,p,r,a)}function Aue(e,t,n,i){let o=i._index,r=n[Sc.scaleByDistance],s=0,a=1,c=1,d=1,u=i.scaleByDistance;l(u)&&(s=u.near,a=u.nearValue,c=u.far,d=u.farValue,(a!==1||d!==1)&&(e._shaderScaleByDistance=!0)),r(o,s,a,c,d)}function Mue(e,t,n,i){let o=i._index,r=n[Sc.distanceDisplayConditionAndDisableDepthAndSplitDirection],s=0,a=Number.MAX_VALUE,c=i.distanceDisplayCondition;l(c)&&(s=c.near,a=c.far,s*=s,a*=a,e._shaderDistanceDisplayCondition=!0);let d=i.disableDepthTestDistance;d*=d,d>0&&(e._shaderDisableDepthDistance=!0,d===Number.POSITIVE_INFINITY&&(d=-1));let u=0,h=i.splitDirection;l(h)&&(u=h),r(o,s,a,d,u)}function D8e(e,t,n,i){vue(e,t,n,i),wue(e,t,n,i),Fue(e,t,n,i),Aue(e,t,n,i),Mue(e,t,n,i)}function OK(e,t,n,i,o,r){let s;i.mode===oe.SCENE3D?(s=e._baseVolume,e._boundingVolumeDirty=!0):s=e._baseVolume2D;let a=[];for(let c=0;c<n;++c){let d=t[c],u=d.position,h=Es._computeActualPosition(u,i,o);l(h)&&(d._setActualPosition(h),r?a.push(h):le.expand(s,h,s))}r&&le.fromPoints(a,s)}function B8e(e,t){let n=t.mode,i=e._pointPrimitives,o=e._pointPrimitivesToUpdate,r=e._modelMatrix;e._createVertexArray||e._mode!==n||n!==oe.SCENE3D&&!F.equals(r,e.modelMatrix)?(e._mode=n,F.clone(e.modelMatrix,r),e._createVertexArray=!0,(n===oe.SCENE3D||n===oe.SCENE2D||n===oe.COLUMBUS_VIEW)&&OK(e,i,i.length,t,r,!0)):n===oe.MORPHING?OK(e,i,i.length,t,r,!0):(n===oe.SCENE2D||n===oe.COLUMBUS_VIEW)&&OK(e,o,e._pointPrimitivesToUpdateIndex,t,r,!1)}function O8e(e,t,n){let o=t.camera.getPixelSize(n,t.context.drawingBufferWidth,t.context.drawingBufferHeight)*e._maxPixelSize;n.radius+=o}var Y8e=[];qu.prototype.update=function(e){if(HK(this),!this.show)return;this._maxTotalPointSize=Nt.maximumAliasedPointSize,B8e(this,e);let n=this._pointPrimitives.length,i=this._pointPrimitivesToUpdate,o=this._pointPrimitivesToUpdateIndex,r=this._propertiesChanged,s=this._createVertexArray,a,c=e.context,d=e.passes,u=d.pick;if(s||!u&&this.computeNewBuffersUsage()){this._createVertexArray=!1;for(let Z=0;Z<zK;++Z)r[Z]=0;if(this._vaf=this._vaf&&this._vaf.destroy(),n>0){this._vaf=U8e(c,n,this._buffersUsage),a=this._vaf.writers;for(let Z=0;Z<n;++Z){let E=this._pointPrimitives[Z];E._dirty=!1,D8e(this,c,a,E)}this._vaf.commit()}this._pointPrimitivesToUpdateIndex=0}else if(o>0){let Z=Y8e;Z.length=0,(r[YK]||r[A8e]||r[M8e])&&Z.push(vue),(r[Eue]||r[F8e])&&Z.push(wue),(r[w8e]||r[Xue])&&Z.push(Fue),r[Iue]&&Z.push(Aue),(r[Wue]||r[N8e]||r[k8e])&&Z.push(Mue);let E=Z.length;if(a=this._vaf.writers,o/n>.1){for(let P=0;P<o;++P){let W=i[P];W._dirty=!1;for(let v=0;v<E;++v)Z[v](this,c,a,W)}this._vaf.commit()}else{for(let P=0;P<o;++P){let W=i[P];W._dirty=!1;for(let v=0;v<E;++v)Z[v](this,c,a,W);this._vaf.subCommit(W._index,1)}this._vaf.endSubCommits()}this._pointPrimitivesToUpdateIndex=0}if(o>n*1.5&&(i.length=n),!l(this._vaf)||!l(this._vaf.va))return;this._boundingVolumeDirty&&(this._boundingVolumeDirty=!1,le.transform(this._baseVolume,this.modelMatrix,this._baseVolumeWC));let h,p=F.IDENTITY;e.mode===oe.SCENE3D?(p=this.modelMatrix,h=le.clone(this._baseVolumeWC,this._boundingVolume)):h=le.clone(this._baseVolume2D,this._boundingVolume),O8e(this,e,h);let g=this._blendOption!==this.blendOption;this._blendOption=this.blendOption,g&&(this._blendOption===Lo.OPAQUE||this._blendOption===Lo.OPAQUE_AND_TRANSLUCENT?this._rsOpaque=Ue.fromCache({depthTest:{enabled:!0,func:ie.LEQUAL},depthMask:!0}):this._rsOpaque=void 0,this._blendOption===Lo.TRANSLUCENT||this._blendOption===Lo.OPAQUE_AND_TRANSLUCENT?this._rsTranslucent=Ue.fromCache({depthTest:{enabled:!0,func:ie.LEQUAL},depthMask:!1,blending:un.ALPHA_BLEND}):this._rsTranslucent=void 0),this._shaderDisableDepthDistance=this._shaderDisableDepthDistance||e.minimumDisableDepthTestDistance!==0;let f,y;(g||this._shaderScaleByDistance&&!this._compiledShaderScaleByDistance||this._shaderTranslucencyByDistance&&!this._compiledShaderTranslucencyByDistance||this._shaderDistanceDisplayCondition&&!this._compiledShaderDistanceDisplayCondition||this._shaderDisableDepthDistance!==this._compiledShaderDisableDepthDistance)&&(f=new De({sources:[A2]}),this._shaderScaleByDistance&&f.defines.push("EYE_DISTANCE_SCALING"),this._shaderTranslucencyByDistance&&f.defines.push("EYE_DISTANCE_TRANSLUCENCY"),this._shaderDistanceDisplayCondition&&f.defines.push("DISTANCE_DISPLAY_CONDITION"),this._shaderDisableDepthDistance&&f.defines.push("DISABLE_DEPTH_DISTANCE"),this._blendOption===Lo.OPAQUE_AND_TRANSLUCENT&&(y=new De({defines:["OPAQUE"],sources:[Kg]}),this._sp=$t.replaceCache({context:c,shaderProgram:this._sp,vertexShaderSource:f,fragmentShaderSource:y,attributeLocations:Sc}),y=new De({defines:["TRANSLUCENT"],sources:[Kg]}),this._spTranslucent=$t.replaceCache({context:c,shaderProgram:this._spTranslucent,vertexShaderSource:f,fragmentShaderSource:y,attributeLocations:Sc})),this._blendOption===Lo.OPAQUE&&(y=new De({sources:[Kg]}),this._sp=$t.replaceCache({context:c,shaderProgram:this._sp,vertexShaderSource:f,fragmentShaderSource:y,attributeLocations:Sc})),this._blendOption===Lo.TRANSLUCENT&&(y=new De({sources:[Kg]}),this._spTranslucent=$t.replaceCache({context:c,shaderProgram:this._spTranslucent,vertexShaderSource:f,fragmentShaderSource:y,attributeLocations:Sc})),this._compiledShaderScaleByDistance=this._shaderScaleByDistance,this._compiledShaderTranslucencyByDistance=this._shaderTranslucencyByDistance,this._compiledShaderDistanceDisplayCondition=this._shaderDistanceDisplayCondition,this._compiledShaderDisableDepthDistance=this._shaderDisableDepthDistance);let x,S,C,V,L=e.commandList;if(d.render||u){let Z=this._colorCommands,E=this._blendOption===Lo.OPAQUE,P=this._blendOption===Lo.OPAQUE_AND_TRANSLUCENT;x=this._vaf.va,S=x.length,Z.length=S;let W=P?S*2:S;for(V=0;V<W;++V){let v=E||P&&V%2===0;C=Z[V],l(C)||(C=Z[V]=new $e),C.primitiveType=we.POINTS,C.pass=v||!P?Ee.OPAQUE:Ee.TRANSLUCENT,C.owner=this;let A=P?Math.floor(V/2):V;C.boundingVolume=h,C.modelMatrix=p,C.shaderProgram=v?this._sp:this._spTranslucent,C.uniformMap=this._uniforms,C.vertexArray=x[A].va,C.renderState=v?this._rsOpaque:this._rsTranslucent,C.debugShowBoundingVolume=this.debugShowBoundingVolume,C.pickId="v_pickColor",L.push(C)}}};qu.prototype.isDestroyed=function(){return!1};qu.prototype.destroy=function(){return this._sp=this._sp&&this._sp.destroy(),this._spTranslucent=this._spTranslucent&&this._spTranslucent.destroy(),this._spPick=this._spPick&&this._spPick.destroy(),this._vaf=this._vaf&&this._vaf.destroy(),Pue(this._pointPrimitives),me(this)};var P1=qu;var zKn=_(T(),1),Nue=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array],KK=1,N2=8,U2=class e{static from(t){if(!(t instanceof ArrayBuffer))throw new Error("Data must be an instance of ArrayBuffer.");let[n,i]=new Uint8Array(t,0,2);if(n!==219)throw new Error("Data does not appear to be in a KDBush format.");let o=i>>4;if(o!==KK)throw new Error(`Got v${o} data when expected v${KK}.`);let r=Nue[i&15];if(!r)throw new Error("Unrecognized array type.");let[s]=new Uint16Array(t,2,1),[a]=new Uint32Array(t,4,1);return new e(a,s,r,t)}constructor(t,n=64,i=Float64Array,o){if(isNaN(t)||t<0)throw new Error(`Unpexpected numItems value: ${t}.`);this.numItems=+t,this.nodeSize=Math.min(Math.max(+n,2),65535),this.ArrayType=i,this.IndexArrayType=t<65536?Uint16Array:Uint32Array;let r=Nue.indexOf(this.ArrayType),s=t*2*this.ArrayType.BYTES_PER_ELEMENT,a=t*this.IndexArrayType.BYTES_PER_ELEMENT,c=(8-a%8)%8;if(r<0)throw new Error(`Unexpected typed array class: ${i}.`);o&&o instanceof ArrayBuffer?(this.data=o,this.ids=new this.IndexArrayType(this.data,N2,t),this.coords=new this.ArrayType(this.data,N2+a+c,t*2),this._pos=t*2,this._finished=!0):(this.data=new ArrayBuffer(N2+s+a+c),this.ids=new this.IndexArrayType(this.data,N2,t),this.coords=new this.ArrayType(this.data,N2+a+c,t*2),this._pos=0,this._finished=!1,new Uint8Array(this.data,0,2).set([219,(KK<<4)+r]),new Uint16Array(this.data,2,1)[0]=n,new Uint32Array(this.data,4,1)[0]=t)}add(t,n){let i=this._pos>>1;return this.ids[i]=i,this.coords[this._pos++]=t,this.coords[this._pos++]=n,i}finish(){let t=this._pos>>1;if(t!==this.numItems)throw new Error(`Added ${t} items when expected ${this.numItems}.`);return QK(this.ids,this.coords,this.nodeSize,0,this.numItems-1,0),this._finished=!0,this}range(t,n,i,o){if(!this._finished)throw new Error("Data not yet indexed - call index.finish().");let{ids:r,coords:s,nodeSize:a}=this,c=[0,r.length-1,0],d=[];for(;c.length;){let u=c.pop()||0,h=c.pop()||0,p=c.pop()||0;if(h-p<=a){for(let x=p;x<=h;x++){let S=s[2*x],C=s[2*x+1];S>=t&&S<=i&&C>=n&&C<=o&&d.push(r[x])}continue}let g=p+h>>1,f=s[2*g],y=s[2*g+1];f>=t&&f<=i&&y>=n&&y<=o&&d.push(r[g]),(u===0?t<=f:n<=y)&&(c.push(p),c.push(g-1),c.push(1-u)),(u===0?i>=f:o>=y)&&(c.push(g+1),c.push(h),c.push(1-u))}return d}within(t,n,i){if(!this._finished)throw new Error("Data not yet indexed - call index.finish().");let{ids:o,coords:r,nodeSize:s}=this,a=[0,o.length-1,0],c=[],d=i*i;for(;a.length;){let u=a.pop()||0,h=a.pop()||0,p=a.pop()||0;if(h-p<=s){for(let x=p;x<=h;x++)kue(r[2*x],r[2*x+1],t,n)<=d&&c.push(o[x]);continue}let g=p+h>>1,f=r[2*g],y=r[2*g+1];kue(f,y,t,n)<=d&&c.push(o[g]),(u===0?t-i<=f:n-i<=y)&&(a.push(p),a.push(g-1),a.push(1-u)),(u===0?t+i>=f:n+i>=y)&&(a.push(g+1),a.push(h),a.push(1-u))}return c}};function QK(e,t,n,i,o,r){if(o-i<=n)return;let s=i+o>>1;Uue(e,t,s,i,o,r),QK(e,t,n,i,s-1,1-r),QK(e,t,n,s+1,o,1-r)}function Uue(e,t,n,i,o,r){for(;o>i;){if(o-i>600){let d=o-i+1,u=n-i+1,h=Math.log(d),p=.5*Math.exp(2*h/3),g=.5*Math.sqrt(h*p*(d-p)/d)*(u-d/2<0?-1:1),f=Math.max(i,Math.floor(n-u*p/d+g)),y=Math.min(o,Math.floor(n+(d-u)*p/d+g));Uue(e,t,n,f,y,r)}let s=t[2*n+r],a=i,c=o;for(k2(e,t,i,n),t[2*o+r]>s&&k2(e,t,i,o);a<c;){for(k2(e,t,a,c),a++,c--;t[2*a+r]<s;)a++;for(;t[2*c+r]>s;)c--}t[2*i+r]===s?k2(e,t,i,c):(c++,k2(e,t,c,o)),c<=n&&(i=c+1),n<=c&&(o=c-1)}}function k2(e,t,n,i){JK(e,n,i),JK(t,2*n,2*i),JK(t,2*n+1,2*i+1)}function JK(e,t,n){let i=e[t];e[t]=e[n],e[n]=i}function kue(e,t,n,i){let o=e-n,r=t-i;return o*o+r*r}function yh(e){e=e??Y.EMPTY_OBJECT,this._enabled=e.enabled??!1,this._pixelRange=e.pixelRange??80,this._minimumClusterSize=e.minimumClusterSize??2,this._clusterBillboards=e.clusterBillboards??!0,this._clusterLabels=e.clusterLabels??!0,this._clusterPoints=e.clusterPoints??!0,this._labelCollection=void 0,this._billboardCollection=void 0,this._pointCollection=void 0,this._clusterBillboardCollection=void 0,this._clusterLabelCollection=void 0,this._clusterPointCollection=void 0,this._collectionIndicesByEntity={},this._unusedLabelIndices=[],this._unusedBillboardIndices=[],this._unusedPointIndices=[],this._previousClusters=[],this._previousHeight=void 0,this._enabledDirty=!1,this._clusterDirty=!1,this._cluster=void 0,this._removeEventListener=void 0,this._clusterEvent=new be,this.show=e.show??!0}function Due(e,t){e.x-=t,e.y-=t,e.width+=t*2,e.height+=t*2}var z8e=new Ke;function Bue(e,t,n,i,o){if(l(e._labelCollection)&&i._clusterLabels?o=wg.getScreenSpaceBoundingBox(e,t,o):l(e._billboardCollection)&&i._clusterBillboards?o=lo.getScreenSpaceBoundingBox(e,t,o):l(e._pointPrimitiveCollection)&&i._clusterPoints&&(o=Es.getScreenSpaceBoundingBox(e,t,o)),Due(o,n),i._clusterLabels&&!l(e._labelCollection)&&l(e.id)&&Yue(i,e.id.id)&&l(e.id._label)){let r=i._collectionIndicesByEntity[e.id.id].labelIndex,s=i._labelCollection.get(r),a=wg.getScreenSpaceBoundingBox(s,t,z8e);Due(a,n),o=Ke.union(o,a,o)}return o}function H8e(e,t){if(e.clusterShow=!0,!l(e._labelCollection)&&l(e.id)&&Yue(t,e.id.id)&&l(e.id._label)){let n=t._collectionIndicesByEntity[e.id.id].labelIndex,i=t._labelCollection.get(n);i.clusterShow=!0}}function Oue(e,t,n,i){let o={billboard:i._clusterBillboardCollection.add(),label:i._clusterLabelCollection.add(),point:i._clusterPointCollection.add()};o.billboard.show=!1,o.point.show=!1,o.label.show=!0,o.label.text=t.toLocaleString(),o.label.id=n,o.billboard.position=o.label.position=o.point.position=e,i._clusterEvent.raiseEvent(n,o)}function Yue(e,t){return l(e)&&l(e._collectionIndicesByEntity[t])&&l(e._collectionIndicesByEntity[t].labelIndex)}function jK(e,t,n,i,o){if(!l(e))return;let r=e.length;for(let s=0;s<r;++s){let a=e.get(s);if(a.clusterShow=!1,!a.show||o._scene.mode===oe.SCENE3D&&!i.isPointVisible(a.position))continue;let c=o._clusterLabels&&l(a._labelCollection),d=o._clusterBillboards&&l(a.id._billboard),u=o._clusterPoints&&l(a.id._point);if(c&&(u||d))continue;let h=a.computeScreenSpacePosition(n);l(h)&&t.push({index:s,collection:e,clustered:!1,coord:h})}}var K8e=new Ke,J8e=new Ke,Q8e=new Ke;function j8e(e){return function(t){if(l(t)&&t<.05||!e.enabled)return;let n=e._scene,i=e._labelCollection,o=e._billboardCollection,r=e._pointCollection;if(!l(i)&&!l(o)&&!l(r)||!e._clusterBillboards&&!e._clusterLabels&&!e._clusterPoints)return;let s=e._clusterLabelCollection,a=e._clusterBillboardCollection,c=e._clusterPointCollection;l(s)?s.removeAll():s=e._clusterLabelCollection=new Zf({scene:n}),l(a)?a.removeAll():a=e._clusterBillboardCollection=new Ed({scene:n}),l(c)?c.removeAll():c=e._clusterPointCollection=new P1;let d=e._pixelRange,u=e._minimumClusterSize,h=e._previousClusters,p=[],g=e._previousHeight,f=n.camera.positionCartographic.height,y=n.ellipsoid,x=n.camera.positionWC,S=new kb(y,x),C=[];e._clusterLabels&&jK(i,C,n,S,e),e._clusterBillboards&&jK(o,C,n,S,e),e._clusterPoints&&jK(r,C,n,S,e);let V,L,Z,E,P,W,v,A,b,R,G,I;if(C.length>0){let w=new U2(C.length,64,Uint32Array);for(let M=0;M<C.length;++M)w.add(C[M].coord.x,C[M].coord.y);if(w.finish(),f<g)for(Z=h.length,V=0;V<Z;++V){let M=h[V];if(!S.isPointVisible(M.position))continue;let B=lo._computeScreenSpacePosition(F.IDENTITY,M.position,m.ZERO,U.ZERO,n);if(!l(B))continue;let k=1-f/g,O=M.width=M.width*k,N=M.height=M.height*k;O=Math.max(O,M.minimumWidth),N=Math.max(N,M.minimumHeight);let z=B.x-O*.5,K=B.y-N*.5,te=B.x+O,H=B.y+N;for(P=w.range(z,K,te,H),W=P.length,R=0,b=[],L=0;L<W;++L)v=P[L],A=C[v],A.clustered||(++R,G=A.collection,I=A.index,b.push(G.get(I).id));if(R>=u)for(Oue(M.position,R,b,e),p.push(M),L=0;L<W;++L)C[P[L]].clustered=!0}for(Z=C.length,V=0;V<Z;++V){let M=C[V];if(M.clustered)continue;M.clustered=!0,G=M.collection,I=M.index;let B=G.get(I);E=Bue(B,M.coord,d,e,K8e);let k=Ke.clone(E,J8e);P=w.range(E.x,E.y,E.x+E.width,E.y+E.height),W=P.length;let O=m.clone(B.position);for(R=1,b=[B.id],L=0;L<W;++L)if(v=P[L],A=C[v],!A.clustered){let N=A.collection.get(A.index),z=Bue(N,A.coord,d,e,Q8e);m.add(N.position,O,O),Ke.union(k,z,k),++R,b.push(N.id)}if(R>=u){let N=m.multiplyByScalar(O,1/R,O);for(Oue(N,R,b,e),p.push({position:N,width:k.width,height:k.height,minimumWidth:E.width,minimumHeight:E.height}),L=0;L<W;++L)C[P[L]].clustered=!0}else H8e(B,e)}}s.length===0&&(s.destroy(),e._clusterLabelCollection=void 0),a.length===0&&(a.destroy(),e._clusterBillboardCollection=void 0),c.length===0&&(c.destroy(),e._clusterPointCollection=void 0),e._previousClusters=p,e._previousHeight=f}}yh.prototype._initialize=function(e){this._scene=e;let t=j8e(this);this._cluster=t,this._removeEventListener=e.camera.changed.addEventListener(t)};Object.defineProperties(yh.prototype,{enabled:{get:function(){return this._enabled},set:function(e){this._enabledDirty=e!==this._enabled,this._enabled=e}},pixelRange:{get:function(){return this._pixelRange},set:function(e){this._clusterDirty=this._clusterDirty||e!==this._pixelRange,this._pixelRange=e}},minimumClusterSize:{get:function(){return this._minimumClusterSize},set:function(e){this._clusterDirty=this._clusterDirty||e!==this._minimumClusterSize,this._minimumClusterSize=e}},clusterEvent:{get:function(){return this._clusterEvent}},clusterBillboards:{get:function(){return this._clusterBillboards},set:function(e){this._clusterDirty=this._clusterDirty||e!==this._clusterBillboards,this._clusterBillboards=e}},clusterLabels:{get:function(){return this._clusterLabels},set:function(e){this._clusterDirty=this._clusterDirty||e!==this._clusterLabels,this._clusterLabels=e}},clusterPoints:{get:function(){return this._clusterPoints},set:function(e){this._clusterDirty=this._clusterDirty||e!==this._clusterPoints,this._clusterPoints=e}},ready:{get:function(){return!this._enabledDirty&&!this._clusterDirty&&(!l(this._billboardCollection)||this._billboardCollection.ready)&&(!l(this._labelCollection)||this._labelCollection.ready)}}});function $K(e,t,n,i){return function(o){let r=this[e];l(this._collectionIndicesByEntity)||(this._collectionIndicesByEntity={});let s=this._collectionIndicesByEntity[o.id];if(l(s)||(s=this._collectionIndicesByEntity[o.id]={billboardIndex:void 0,labelIndex:void 0,pointIndex:void 0}),l(r)&&l(s[i]))return r.get(s[i]);l(r)||(r=this[e]=new t({scene:this._scene}));let a,c,d=this[n];d.length>0?(a=d.shift(),c=r.get(a)):(c=r.add(),a=r.length-1),s[i]=a;let u=this;return Promise.resolve().then(function(){u._clusterDirty=!0}),c}}function eJ(e,t){let n=e._collectionIndicesByEntity[t];!l(n.billboardIndex)&&!l(n.labelIndex)&&!l(n.pointIndex)&&delete e._collectionIndicesByEntity[t]}yh.prototype.getLabel=$K("_labelCollection",Zf,"_unusedLabelIndices","labelIndex");yh.prototype.removeLabel=function(e){let t=this._collectionIndicesByEntity&&this._collectionIndicesByEntity[e.id];if(!l(this._labelCollection)||!l(t)||!l(t.labelIndex))return;let n=t.labelIndex;t.labelIndex=void 0,eJ(this,e.id);let i=this._labelCollection.get(n);i.show=!1,i.text="",i.id=void 0,this._unusedLabelIndices.push(n),this._clusterDirty=!0};yh.prototype.getBillboard=$K("_billboardCollection",Ed,"_unusedBillboardIndices","billboardIndex");yh.prototype.removeBillboard=function(e){let t=this._collectionIndicesByEntity&&this._collectionIndicesByEntity[e.id];if(!l(this._billboardCollection)||!l(t)||!l(t.billboardIndex))return;let n=t.billboardIndex;t.billboardIndex=void 0,eJ(this,e.id);let i=this._billboardCollection.get(n);i.id=void 0,i.show=!1,i.image=void 0,this._unusedBillboardIndices.push(n),this._clusterDirty=!0};yh.prototype.getPoint=$K("_pointCollection",P1,"_unusedPointIndices","pointIndex");yh.prototype.removePoint=function(e){let t=this._collectionIndicesByEntity&&this._collectionIndicesByEntity[e.id];if(!l(this._pointCollection)||!l(t)||!l(t.pointIndex))return;let n=t.pointIndex;t.pointIndex=void 0,eJ(this,e.id);let i=this._pointCollection.get(n);i.show=!1,i.id=void 0,this._unusedPointIndices.push(n),this._clusterDirty=!0};function qK(e){if(!l(e))return;let t=e.length;for(let n=0;n<t;++n)e.get(n).clusterShow=!0}function q8e(e){e.enabled||(l(e._clusterLabelCollection)&&e._clusterLabelCollection.destroy(),l(e._clusterBillboardCollection)&&e._clusterBillboardCollection.destroy(),l(e._clusterPointCollection)&&e._clusterPointCollection.destroy(),e._clusterLabelCollection=void 0,e._clusterBillboardCollection=void 0,e._clusterPointCollection=void 0,qK(e._labelCollection),qK(e._billboardCollection),qK(e._pointCollection))}yh.prototype.update=function(e){if(!this.show)return;let t,n=this._labelCollection;l(n)&&n.length>0&&!n.ready&&(t=e.commandList,e.commandList=[],n.update(e),e.commandList=t);let i=this._billboardCollection;l(i)&&i.length>0&&!i.ready&&(t=e.commandList,e.commandList=[],i.update(e),e.commandList=t),this._enabledDirty&&(this._enabledDirty=!1,q8e(this),this._clusterDirty=!0),this._clusterDirty&&(this._cluster(),this._clusterDirty=l(n)&&!n.ready||l(i)&&!i.ready),l(this._clusterLabelCollection)&&this._clusterLabelCollection.update(e),l(this._clusterBillboardCollection)&&this._clusterBillboardCollection.update(e),l(this._clusterPointCollection)&&this._clusterPointCollection.update(e),l(n)&&n.update(e),l(i)&&i.update(e),l(this._pointCollection)&&this._pointCollection.update(e)};yh.prototype.destroy=function(){l(this._removeEventListener)&&(this._removeEventListener(),this._removeEventListener=void 0),this._labelCollection=this._labelCollection&&this._labelCollection.destroy(),this._billboardCollection=this._billboardCollection&&this._billboardCollection.destroy(),this._pointCollection=this._pointCollection&&this._pointCollection.destroy(),this._clusterLabelCollection=this._clusterLabelCollection&&this._clusterLabelCollection.destroy(),this._clusterBillboardCollection=this._clusterBillboardCollection&&this._clusterBillboardCollection.destroy(),this._clusterPointCollection=this._clusterPointCollection&&this._clusterPointCollection.destroy(),this._labelCollection=void 0,this._billboardCollection=void 0,this._pointCollection=void 0,this._clusterBillboardCollection=void 0,this._clusterLabelCollection=void 0,this._clusterPointCollection=void 0,this._collectionIndicesByEntity=void 0,this._unusedLabelIndices=[],this._unusedBillboardIndices=[],this._unusedPointIndices=[],this._previousClusters=[],this._previousHeight=void 0,this._enabledDirty=!1,this._pixelRangeDirty=!1,this._minimumClusterSizeDirty=!1};var vd=yh;function tJ(e){this._name=e,this._clock=void 0,this._changed=new be,this._error=new be,this._isLoading=!1,this._loading=new be,this._entityCollection=new Qs(this),this._entityCluster=new vd}Object.defineProperties(tJ.prototype,{name:{get:function(){return this._name},set:function(e){this._name!==e&&(this._name=e,this._changed.raiseEvent(this))}},clock:{get:function(){return this._clock},set:function(e){this._clock!==e&&(this._clock=e,this._changed.raiseEvent(this))}},entities:{get:function(){return this._entityCollection}},isLoading:{get:function(){return this._isLoading},set:function(e){Br.setLoading(this,e)}},changedEvent:{get:function(){return this._changed}},errorEvent:{get:function(){return this._error}},loadingEvent:{get:function(){return this._loading}},show:{get:function(){return this._entityCollection.show},set:function(e){this._entityCollection.show=e}},clustering:{get:function(){return this._entityCluster},set:function(e){this._entityCluster=e}}});tJ.prototype.update=function(e){return!0};var D2=tJ;var xQn=_(T(),1);var FJn=_(T(),1);var xJn=_(T(),1);var zue={};zue.computePositions=function(e,t,n,i,o){let r=e*.5,s=-r,a=i+i,c=o?2*a:a,d=new Float64Array(c*3),u,h=0,p=0,g=o?a*3:0,f=o?(a+i)*3:i*3;for(u=0;u<i;u++){let y=u/i*X.TWO_PI,x=Math.cos(y),S=Math.sin(y),C=x*n,V=S*n,L=x*t,Z=S*t;d[p+g]=C,d[p+g+1]=V,d[p+g+2]=s,d[p+f]=L,d[p+f+1]=Z,d[p+f+2]=r,p+=3,o&&(d[h++]=C,d[h++]=V,d[h++]=s,d[h++]=L,d[h++]=Z,d[h++]=r)}return d};var eT=zue;var nJ=new U,$8e=new m,e7e=new m,t7e=new m,n7e=new m;function Ub(e){e=e??Y.EMPTY_OBJECT;let t=e.length,n=e.topRadius,i=e.bottomRadius,o=e.vertexFormat??Xe.DEFAULT,r=e.slices??128;this._length=t,this._topRadius=n,this._bottomRadius=i,this._vertexFormat=Xe.clone(o),this._slices=r,this._offsetAttribute=e.offsetAttribute,this._workerName="createCylinderGeometry"}Ub.packedLength=Xe.packedLength+5;Ub.pack=function(e,t,n){return n=n??0,Xe.pack(e._vertexFormat,t,n),n+=Xe.packedLength,t[n++]=e._length,t[n++]=e._topRadius,t[n++]=e._bottomRadius,t[n++]=e._slices,t[n]=e._offsetAttribute??-1,t};var Hue=new Xe,v1={vertexFormat:Hue,length:void 0,topRadius:void 0,bottomRadius:void 0,slices:void 0,offsetAttribute:void 0};Ub.unpack=function(e,t,n){t=t??0;let i=Xe.unpack(e,t,Hue);t+=Xe.packedLength;let o=e[t++],r=e[t++],s=e[t++],a=e[t++],c=e[t];return l(n)?(n._vertexFormat=Xe.clone(i,n._vertexFormat),n._length=o,n._topRadius=r,n._bottomRadius=s,n._slices=a,n._offsetAttribute=c===-1?void 0:c,n):(v1.length=o,v1.topRadius=r,v1.bottomRadius=s,v1.slices=a,v1.offsetAttribute=c===-1?void 0:c,new Ub(v1))};Ub.createGeometry=function(e){let t=e._length,n=e._topRadius,i=e._bottomRadius,o=e._vertexFormat,r=e._slices;if(t<=0||n<0||i<0||n===0&&i===0)return;let s=r+r,a=r+s,c=s+s,d=eT.computePositions(t,n,i,r,!0),u=o.st?new Float32Array(c*2):void 0,h=o.normal?new Float32Array(c*3):void 0,p=o.tangent?new Float32Array(c*3):void 0,g=o.bitangent?new Float32Array(c*3):void 0,f,y=o.normal||o.tangent||o.bitangent;if(y){let P=o.tangent||o.bitangent,W=0,v=0,A=0,b=Math.atan2(i-n,t),R=$8e;R.z=Math.sin(b);let G=Math.cos(b),I=t7e,w=e7e;for(f=0;f<r;f++){let M=f/r*X.TWO_PI,B=G*Math.cos(M),k=G*Math.sin(M);y&&(R.x=B,R.y=k,P&&(I=m.normalize(m.cross(m.UNIT_Z,R,I),I)),o.normal&&(h[W++]=R.x,h[W++]=R.y,h[W++]=R.z,h[W++]=R.x,h[W++]=R.y,h[W++]=R.z),o.tangent&&(p[v++]=I.x,p[v++]=I.y,p[v++]=I.z,p[v++]=I.x,p[v++]=I.y,p[v++]=I.z),o.bitangent&&(w=m.normalize(m.cross(R,I,w),w),g[A++]=w.x,g[A++]=w.y,g[A++]=w.z,g[A++]=w.x,g[A++]=w.y,g[A++]=w.z))}for(f=0;f<r;f++)o.normal&&(h[W++]=0,h[W++]=0,h[W++]=-1),o.tangent&&(p[v++]=1,p[v++]=0,p[v++]=0),o.bitangent&&(g[A++]=0,g[A++]=-1,g[A++]=0);for(f=0;f<r;f++)o.normal&&(h[W++]=0,h[W++]=0,h[W++]=1),o.tangent&&(p[v++]=1,p[v++]=0,p[v++]=0),o.bitangent&&(g[A++]=0,g[A++]=1,g[A++]=0)}let x=12*r-12,S=Ae.createTypedArray(c,x),C=0,V=0;for(f=0;f<r-1;f++)S[C++]=V,S[C++]=V+2,S[C++]=V+3,S[C++]=V,S[C++]=V+3,S[C++]=V+1,V+=2;for(S[C++]=s-2,S[C++]=0,S[C++]=1,S[C++]=s-2,S[C++]=1,S[C++]=s-1,f=1;f<r-1;f++)S[C++]=s+f+1,S[C++]=s+f,S[C++]=s;for(f=1;f<r-1;f++)S[C++]=a,S[C++]=a+f,S[C++]=a+f+1;let L=0;if(o.st){let P=Math.max(n,i);for(f=0;f<c;f++){let W=m.fromArray(d,f*3,n7e);u[L++]=(W.x+P)/(2*P),u[L++]=(W.y+P)/(2*P)}}let Z=new mn;o.position&&(Z.position=new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:d})),o.normal&&(Z.normal=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:h})),o.tangent&&(Z.tangent=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:p})),o.bitangent&&(Z.bitangent=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:g})),o.st&&(Z.st=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:u})),nJ.x=t*.5,nJ.y=Math.max(i,n);let E=new le(m.ZERO,U.magnitude(nJ));if(l(e._offsetAttribute)){t=d.length;let P=e._offsetAttribute===rn.NONE?0:1,W=new Uint8Array(t/3).fill(P);Z.applyOffset=new Ge({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:W})}return new lt({attributes:Z,indices:S,primitiveType:we.TRIANGLES,boundingSphere:E,offsetAttribute:e._offsetAttribute})};var iJ;Ub.getUnitCylinder=function(){return l(iJ)||(iJ=Ub.createGeometry(new Ub({topRadius:1,bottomRadius:1,length:1,vertexFormat:Xe.POSITION_ONLY}))),iJ};var B2=Ub;var jJn=_(T(),1);var oJ=new U;function w1(e){e=e??Y.EMPTY_OBJECT;let t=e.length,n=e.topRadius,i=e.bottomRadius,o=e.slices??128,r=Math.max(e.numberOfVerticalLines??16,0);this._length=t,this._topRadius=n,this._bottomRadius=i,this._slices=o,this._numberOfVerticalLines=r,this._offsetAttribute=e.offsetAttribute,this._workerName="createCylinderOutlineGeometry"}w1.packedLength=6;w1.pack=function(e,t,n){return n=n??0,t[n++]=e._length,t[n++]=e._topRadius,t[n++]=e._bottomRadius,t[n++]=e._slices,t[n++]=e._numberOfVerticalLines,t[n]=e._offsetAttribute??-1,t};var tT={length:void 0,topRadius:void 0,bottomRadius:void 0,slices:void 0,numberOfVerticalLines:void 0,offsetAttribute:void 0};w1.unpack=function(e,t,n){t=t??0;let i=e[t++],o=e[t++],r=e[t++],s=e[t++],a=e[t++],c=e[t];return l(n)?(n._length=i,n._topRadius=o,n._bottomRadius=r,n._slices=s,n._numberOfVerticalLines=a,n._offsetAttribute=c===-1?void 0:c,n):(tT.length=i,tT.topRadius=o,tT.bottomRadius=r,tT.slices=s,tT.numberOfVerticalLines=a,tT.offsetAttribute=c===-1?void 0:c,new w1(tT))};w1.createGeometry=function(e){let t=e._length,n=e._topRadius,i=e._bottomRadius,o=e._slices,r=e._numberOfVerticalLines;if(t<=0||n<0||i<0||n===0&&i===0)return;let s=o*2,a=eT.computePositions(t,n,i,o,!1),c=o*2,d;if(r>0){let y=Math.min(r,o);d=Math.round(o/y),c+=y}let u=Ae.createTypedArray(s,c*2),h=0,p;for(p=0;p<o-1;p++)u[h++]=p,u[h++]=p+1,u[h++]=p+o,u[h++]=p+1+o;if(u[h++]=o-1,u[h++]=0,u[h++]=o+o-1,u[h++]=o,r>0)for(p=0;p<o;p+=d)u[h++]=p,u[h++]=p+o;let g=new mn;g.position=new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:a}),oJ.x=t*.5,oJ.y=Math.max(i,n);let f=new le(m.ZERO,U.magnitude(oJ));if(l(e._offsetAttribute)){t=a.length;let y=e._offsetAttribute===rn.NONE?0:1,x=new Uint8Array(t/3).fill(y);g.applyOffset=new Ge({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:x})}return new lt({attributes:g,indices:u,primitiveType:we.LINES,boundingSphere:f,offsetAttribute:e._offsetAttribute})};var O2=w1;var Kue=m.ZERO,Jue=new m,i7e=new m,Que=new D;function o7e(e){this.id=e,this.vertexFormat=void 0,this.length=void 0,this.topRadius=void 0,this.bottomRadius=void 0,this.slices=void 0,this.numberOfVerticalLines=void 0,this.offsetAttribute=void 0}function wd(e,t){oi.call(this,{entity:e,scene:t,geometryOptions:new o7e(e),geometryPropertyName:"cylinder",observedPropertyNames:["availability","position","orientation","cylinder"]}),this._onEntityPropertyChanged(e,"cylinder",e.cylinder,void 0)}l(Object.create)&&(wd.prototype=Object.create(oi.prototype),wd.prototype.constructor=wd);Object.defineProperties(wd.prototype,{terrainOffsetProperty:{get:function(){return this._terrainOffsetProperty}}});wd.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=new xn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),o=this._distanceDisplayConditionProperty.getValue(e),r=kn.fromDistanceDisplayCondition(o),s={show:i,distanceDisplayCondition:r,color:void 0,offset:void 0};if(this._materialProperty instanceof Dt){let a;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(a=this._materialProperty.color.getValue(e,Que)),l(a)||(a=D.WHITE),s.color=Yt.fromColor(a)}return l(this._options.offsetAttribute)&&(s.offset=$i.fromCartesian3(J.getValueOrDefault(this._terrainOffsetProperty,e,Kue,Jue))),new Et({id:t,geometry:new B2(this._options),modelMatrix:t.computeModelMatrixForHeightReference(e,t.cylinder.heightReference,this._options.length*.5,this._scene.ellipsoid),attributes:s})};wd.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=J.getValueOrDefault(this._outlineColorProperty,e,D.BLACK,Que),o=this._distanceDisplayConditionProperty.getValue(e),r={show:new xn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Yt.fromColor(i),distanceDisplayCondition:kn.fromDistanceDisplayCondition(o),offset:void 0};return l(this._options.offsetAttribute)&&(r.offset=$i.fromCartesian3(J.getValueOrDefault(this._terrainOffsetProperty,e,Kue,Jue))),new Et({id:t,geometry:new O2(this._options),modelMatrix:t.computeModelMatrixForHeightReference(e,t.cylinder.heightReference,this._options.length*.5,this._scene.ellipsoid),attributes:r})};wd.prototype._computeCenter=function(e,t){return J.getValueOrUndefined(this._entity.position,e,t)};wd.prototype._isHidden=function(e,t){return!l(e.position)||!l(t.length)||!l(t.topRadius)||!l(t.bottomRadius)||oi.prototype._isHidden.call(this,e,t)};wd.prototype._isDynamic=function(e,t){return!e.position.isConstant||!J.isConstant(e.orientation)||!t.length.isConstant||!t.topRadius.isConstant||!t.bottomRadius.isConstant||!J.isConstant(t.slices)||!J.isConstant(t.outlineWidth)||!J.isConstant(t.numberOfVerticalLines)};wd.prototype._setStaticOptions=function(e,t){let n=J.getValueOrDefault(t.heightReference,Be.MINIMUM_VALUE,Je.NONE),i=this._options;i.vertexFormat=this._materialProperty instanceof Dt?dn.VERTEX_FORMAT:ao.MaterialSupport.TEXTURED.vertexFormat,i.length=t.length.getValue(Be.MINIMUM_VALUE),i.topRadius=t.topRadius.getValue(Be.MINIMUM_VALUE),i.bottomRadius=t.bottomRadius.getValue(Be.MINIMUM_VALUE),i.slices=J.getValueOrUndefined(t.slices,Be.MINIMUM_VALUE),i.numberOfVerticalLines=J.getValueOrUndefined(t.numberOfVerticalLines,Be.MINIMUM_VALUE),i.offsetAttribute=n!==Je.NONE?rn.ALL:void 0};wd.prototype._onEntityPropertyChanged=Op;wd.DynamicGeometryUpdater=F1;function F1(e,t,n){ii.call(this,e,t,n)}l(Object.create)&&(F1.prototype=Object.create(ii.prototype),F1.prototype.constructor=F1);F1.prototype._isHidden=function(e,t,n){let i=this._options,o=J.getValueOrUndefined(e.position,n,i7e);return!l(o)||!l(i.length)||!l(i.topRadius)||!l(i.bottomRadius)||ii.prototype._isHidden.call(this,e,t,n)};F1.prototype._setOptions=function(e,t,n){let i=J.getValueOrDefault(t.heightReference,n,Je.NONE),o=this._options;o.length=J.getValueOrUndefined(t.length,n),o.topRadius=J.getValueOrUndefined(t.topRadius,n),o.bottomRadius=J.getValueOrUndefined(t.bottomRadius,n),o.slices=J.getValueOrUndefined(t.slices,n),o.numberOfVerticalLines=J.getValueOrUndefined(t.numberOfVerticalLines,n),o.offsetAttribute=i!==Je.NONE?rn.ALL:void 0};var Y2=wd;var x6n=_(T(),1);var TQn=_(T(),1),r7e={UNBOUNDED:0,CLAMPED:1,LOOP_STOP:2},Or=Object.freeze(r7e);var CQn=_(T(),1),s7e={TICK_DEPENDENT:0,SYSTEM_CLOCK_MULTIPLIER:1,SYSTEM_CLOCK:2},fo=Object.freeze(s7e);var LQn=_(T(),1),a7e={NONE:0,HOLD:1,EXTRAPOLATE:2},Fd=Object.freeze(a7e);var ZQn=_(T(),1),jue=_(dd(),1);function c7e(e){let t=new jue.default(e);t.normalize();let n=t.path(),i=n.lastIndexOf("/");return i!==-1&&(n=n.substr(i+1)),n}var Db=c7e;var XQn=_(T(),1);var l7e=X.factorial;function rJ(e,t,n,i,o,r){let s=0,a,c,d;if(i>0){for(c=0;c<o;c++){for(a=!1,d=0;d<r.length&&!a;d++)c===r[d]&&(a=!0);a||(r.push(c),s+=rJ(e,t,n,i-1,o,r),r.splice(r.length-1,1))}return s}for(s=1,c=0;c<o;c++){for(a=!1,d=0;d<r.length&&!a;d++)c===r[d]&&(a=!0);a||(s*=e-n[t[c]])}return s}var Pk={type:"Hermite"};Pk.getRequiredDataPoints=function(e,t){return t=t??0,Math.max(Math.floor((e+1)/(t+1)),2)};Pk.interpolateOrderZero=function(e,t,n,i,o){l(o)||(o=new Array(i));let r,s,a,c,d,u,h=t.length,p=new Array(i);for(r=0;r<i;r++){o[r]=0;let x=new Array(h);for(p[r]=x,s=0;s<h;s++)x[s]=[]}let g=h,f=new Array(g);for(r=0;r<g;r++)f[r]=r;let y=h-1;for(c=0;c<i;c++){for(s=0;s<g;s++)u=f[s]*i+c,p[c][0].push(n[u]);for(r=1;r<g;r++){let x=!1;for(s=0;s<g-r;s++){let S=t[f[s]],C=t[f[s+r]],V;C-S<=0?(u=f[s]*i+i*r+c,V=n[u],p[c][r].push(V/l7e(r))):(V=p[c][r-1][s+1]-p[c][r-1][s],p[c][r].push(V/(C-S))),x=x||V!==0}x||(y=r-1)}}for(a=0,d=0;a<=d;a++)for(r=a;r<=y;r++){let x=rJ(e,f,t,a,r,[]);for(c=0;c<i;c++){let S=p[c][r][0];o[c+a*i]+=S*x}}return o};var d7e=[];Pk.interpolate=function(e,t,n,i,o,r,s){let a=i*(r+1);l(s)||(s=new Array(a));for(let S=0;S<a;S++)s[S]=0;let c=t.length,d=new Array(c*(o+1)),u;for(u=0;u<c;u++)for(let S=0;S<o+1;S++)d[u*(o+1)+S]=u;let h=d.length,p=d7e,g=u7e(p,d,t,n,i,o),f=[],y=h*(h+1)/2,x=Math.min(g,r);for(let S=0;S<=x;S++)for(u=S;u<=g;u++){f.length=0;let C=rJ(e,d,t,S,u,f),V=Math.floor(u*(1-u)/2)+h*u;for(let L=0;L<i;L++){let Z=Math.floor(L*y),E=p[Z+V];s[L+S*i]+=E*C}}return s};function u7e(e,t,n,i,o,r){let s,a,c=-1,d=t.length,u=d*(d+1)/2;for(let h=0;h<o;h++){let p=Math.floor(h*u);for(s=0;s<d;s++)a=t[s]*o*(r+1)+h,e[p+s]=i[a];for(let g=1;g<d;g++){let f=0,y=Math.floor(g*(1-g)/2)+d*g,x=!1;for(s=0;s<d-g;s++){let S=n[t[s]],C=n[t[s+g]],V,L;if(C-S<=0)a=t[s]*o*(r+1)+o*g+h,V=i[a],L=V/X.factorial(g),e[p+y+f]=L,f++;else{let Z=Math.floor((g-1)*(2-g)/2)+d*(g-1);V=e[p+Z+s+1]-e[p+Z+s],L=V/(C-S),e[p+y+f]=L,f++}x=x||V!==0}x&&(c=Math.max(c,g))}}return c}var z2=Pk;var vQn=_(T(),1);var sJ={type:"Lagrange"};sJ.getRequiredDataPoints=function(e){return Math.max(e+1,2)};sJ.interpolateOrderZero=function(e,t,n,i,o){l(o)||(o=new Array(i));let r,s,a=t.length;for(r=0;r<i;r++)o[r]=0;for(r=0;r<a;r++){let c=1;for(s=0;s<a;s++)if(s!==r){let d=t[r]-t[s];c*=(e-t[s])/d}for(s=0;s<i;s++)o[s]+=c*n[r*i+s]}return o};var H2=sJ;var AQn=_(T(),1);var aJ={type:"Linear"};aJ.getRequiredDataPoints=function(e){return 2};aJ.interpolateOrderZero=function(e,t,n,i,o){l(o)||(o=new Array(i));let r,s,a,c=t[0],d=t[1];for(r=0;r<i;r++)s=n[r],a=n[r+i],o[r]=((a-s)*e+d*s-c*a)/(d-c);return o};var nT=aJ;var kQn=_(T(),1);function Cc(e,t,n){this.clock=e??0,this.cone=t??0,this.magnitude=n??1}Cc.fromCartesian3=function(e,t){let n=e.x,i=e.y,o=e.z,r=n*n+i*i;return l(t)||(t=new Cc),t.clock=Math.atan2(i,n),t.cone=Math.atan2(Math.sqrt(r),o),t.magnitude=Math.sqrt(r+o*o),t};Cc.clone=function(e,t){if(l(e))return l(t)?(t.clock=e.clock,t.cone=e.cone,t.magnitude=e.magnitude,t):new Cc(e.clock,e.cone,e.magnitude)};Cc.normalize=function(e,t){return l(t)?(t.clock=e.clock,t.cone=e.cone,t.magnitude=1,t):new Cc(e.clock,e.cone,1)};Cc.equals=function(e,t){return e===t||l(e)&&l(t)&&e.clock===t.clock&&e.cone===t.cone&&e.magnitude===t.magnitude};Cc.equalsEpsilon=function(e,t,n){return n=n??0,e===t||l(e)&&l(t)&&Math.abs(e.clock-t.clock)<=n&&Math.abs(e.cone-t.cone)<=n&&Math.abs(e.magnitude-t.magnitude)<=n};Cc.prototype.equals=function(e){return Cc.equals(this,e)};Cc.prototype.clone=function(e){return Cc.clone(this,e)};Cc.prototype.equalsEpsilon=function(e,t){return Cc.equalsEpsilon(this,e,t)};Cc.prototype.toString=function(){return`(${this.clock}, ${this.cone}, ${this.magnitude})`};var K2=Cc;var $2=_(dd(),1);var o4n=_(T(),1);var jQn=_(T(),1);var DQn=_(T(),1),cJ;typeof performance<"u"&&typeof performance.now=="function"&&isFinite(performance.now())?cJ=function(){return performance.now()}:cJ=function(){return Date.now()};var Si=cJ;function lJ(e){e=e??Y.EMPTY_OBJECT;let t=e.currentTime,n=e.startTime,i=e.stopTime;l(t)?t=q.clone(t):l(n)?t=q.clone(n):l(i)?t=q.addDays(i,-1,new q):t=q.now(),l(n)?n=q.clone(n):n=q.clone(t),l(i)?i=q.clone(i):i=q.addDays(n,1,new q),this.startTime=n,this.stopTime=i,this.clockRange=e.clockRange??Or.UNBOUNDED,this.canAnimate=e.canAnimate??!0,this.onTick=new be,this.onStop=new be,this._currentTime=void 0,this._multiplier=void 0,this._clockStep=void 0,this._shouldAnimate=void 0,this._lastSystemTime=Si(),this.currentTime=t,this.multiplier=e.multiplier??1,this.shouldAnimate=e.shouldAnimate??!1,this.clockStep=e.clockStep??fo.SYSTEM_CLOCK_MULTIPLIER}Object.defineProperties(lJ.prototype,{currentTime:{get:function(){return this._currentTime},set:function(e){q.equals(this._currentTime,e)||(this._clockStep===fo.SYSTEM_CLOCK&&(this._clockStep=fo.SYSTEM_CLOCK_MULTIPLIER),this._currentTime=e)}},multiplier:{get:function(){return this._multiplier},set:function(e){this._multiplier!==e&&(this._clockStep===fo.SYSTEM_CLOCK&&(this._clockStep=fo.SYSTEM_CLOCK_MULTIPLIER),this._multiplier=e)}},clockStep:{get:function(){return this._clockStep},set:function(e){e===fo.SYSTEM_CLOCK&&(this._multiplier=1,this._shouldAnimate=!0,this._currentTime=q.now()),this._clockStep=e}},shouldAnimate:{get:function(){return this._shouldAnimate},set:function(e){this._shouldAnimate!==e&&(this._clockStep===fo.SYSTEM_CLOCK&&(this._clockStep=fo.SYSTEM_CLOCK_MULTIPLIER),this._shouldAnimate=e)}}});lJ.prototype.tick=function(){let e=Si(),t=q.clone(this._currentTime);if(this.canAnimate&&this._shouldAnimate){let n=this._clockStep;if(n===fo.SYSTEM_CLOCK)t=q.now(t);else{let i=this._multiplier;if(n===fo.TICK_DEPENDENT)t=q.addSeconds(t,i,t);else{let a=e-this._lastSystemTime;t=q.addSeconds(t,i*(a/1e3),t)}let o=this.clockRange,r=this.startTime,s=this.stopTime;if(o===Or.CLAMPED)q.lessThan(t,r)?t=q.clone(r,t):q.greaterThan(t,s)&&(t=q.clone(s,t),this.onStop.raiseEvent(this));else if(o===Or.LOOP_STOP)for(q.lessThan(t,r)&&(t=q.clone(r,t));q.greaterThan(t,s);)t=q.addSeconds(r,q.secondsDifference(t,s),t),this.onStop.raiseEvent(this)}}return this._currentTime=t,this._lastSystemTime=e,this.onTick.raiseEvent(this),t};var xh=lJ;function iT(){this._definitionChanged=new be,this._startTime=void 0,this._stopTime=void 0,this._currentTime=void 0,this._clockRange=void 0,this._clockStep=void 0,this._multiplier=void 0}Object.defineProperties(iT.prototype,{definitionChanged:{get:function(){return this._definitionChanged}},startTime:Yc("startTime"),stopTime:Yc("stopTime"),currentTime:Yc("currentTime"),clockRange:Yc("clockRange"),clockStep:Yc("clockStep"),multiplier:Yc("multiplier")});iT.prototype.clone=function(e){return l(e)||(e=new iT),e.startTime=this.startTime,e.stopTime=this.stopTime,e.currentTime=this.currentTime,e.clockRange=this.clockRange,e.clockStep=this.clockStep,e.multiplier=this.multiplier,e};iT.prototype.equals=function(e){return this===e||l(e)&&q.equals(this.startTime,e.startTime)&&q.equals(this.stopTime,e.stopTime)&&q.equals(this.currentTime,e.currentTime)&&this.clockRange===e.clockRange&&this.clockStep===e.clockStep&&this.multiplier===e.multiplier};iT.prototype.merge=function(e){this.startTime=this.startTime??e.startTime,this.stopTime=this.stopTime??e.stopTime,this.currentTime=this.currentTime??e.currentTime,this.clockRange=this.clockRange??e.clockRange,this.clockStep=this.clockStep??e.clockStep,this.multiplier=this.multiplier??e.multiplier};iT.prototype.getValue=function(e){return l(e)||(e=new xh),e.startTime=this.startTime??e.startTime,e.stopTime=this.stopTime??e.stopTime,e.currentTime=this.currentTime??e.currentTime,e.clockRange=this.clockRange??e.clockRange,e.multiplier=this.multiplier??e.multiplier,e.clockStep=this.clockStep??e.clockStep,e};var _h=iT;var f4n=_(T(),1);var m7e=D.WHITE,h7e=.1,f7e=new U(8,8),p7e=new U(0,0),b7e=new U(1,1);function A1(e){e=e??Y.EMPTY_OBJECT,this._definitionChanged=new be,this._color=void 0,this._colorSubscription=void 0,this._cellAlpha=void 0,this._cellAlphaSubscription=void 0,this._lineCount=void 0,this._lineCountSubscription=void 0,this._lineThickness=void 0,this._lineThicknessSubscription=void 0,this._lineOffset=void 0,this._lineOffsetSubscription=void 0,this.color=e.color,this.cellAlpha=e.cellAlpha,this.lineCount=e.lineCount,this.lineThickness=e.lineThickness,this.lineOffset=e.lineOffset}Object.defineProperties(A1.prototype,{isConstant:{get:function(){return J.isConstant(this._color)&&J.isConstant(this._cellAlpha)&&J.isConstant(this._lineCount)&&J.isConstant(this._lineThickness)&&J.isConstant(this._lineOffset)}},definitionChanged:{get:function(){return this._definitionChanged}},color:ue("color"),cellAlpha:ue("cellAlpha"),lineCount:ue("lineCount"),lineThickness:ue("lineThickness"),lineOffset:ue("lineOffset")});A1.prototype.getType=function(e){return"Grid"};var g7e=new q;A1.prototype.getValue=function(e,t){return l(e)||(e=q.now(g7e)),l(t)||(t={}),t.color=J.getValueOrClonedDefault(this._color,e,m7e,t.color),t.cellAlpha=J.getValueOrDefault(this._cellAlpha,e,h7e),t.lineCount=J.getValueOrClonedDefault(this._lineCount,e,f7e,t.lineCount),t.lineThickness=J.getValueOrClonedDefault(this._lineThickness,e,b7e,t.lineThickness),t.lineOffset=J.getValueOrClonedDefault(this._lineOffset,e,p7e,t.lineOffset),t};A1.prototype.equals=function(e){return this===e||e instanceof A1&&J.equals(this._color,e._color)&&J.equals(this._cellAlpha,e._cellAlpha)&&J.equals(this._lineCount,e._lineCount)&&J.equals(this._lineThickness,e._lineThickness)&&J.equals(this._lineOffset,e._lineOffset)};var M1=A1;var S4n=_(T(),1);function N1(e){this._definitionChanged=new be,this._color=void 0,this._colorSubscription=void 0,this.color=e}Object.defineProperties(N1.prototype,{isConstant:{get:function(){return J.isConstant(this._color)}},definitionChanged:{get:function(){return this._definitionChanged}},color:ue("color")});N1.prototype.getType=function(e){return"PolylineArrow"};var y7e=new q;N1.prototype.getValue=function(e,t){return l(e)||(e=q.now(y7e)),l(t)||(t={}),t.color=J.getValueOrClonedDefault(this._color,e,D.WHITE,t.color),t};N1.prototype.equals=function(e){return this===e||e instanceof N1&&J.equals(this._color,e._color)};var k1=N1;var X4n=_(T(),1);var x7e=D.WHITE,_7e=D.TRANSPARENT,T7e=16,S7e=255;function U1(e){e=e??Y.EMPTY_OBJECT,this._definitionChanged=new be,this._color=void 0,this._colorSubscription=void 0,this._gapColor=void 0,this._gapColorSubscription=void 0,this._dashLength=void 0,this._dashLengthSubscription=void 0,this._dashPattern=void 0,this._dashPatternSubscription=void 0,this.color=e.color,this.gapColor=e.gapColor,this.dashLength=e.dashLength,this.dashPattern=e.dashPattern}Object.defineProperties(U1.prototype,{isConstant:{get:function(){return J.isConstant(this._color)&&J.isConstant(this._gapColor)&&J.isConstant(this._dashLength)&&J.isConstant(this._dashPattern)}},definitionChanged:{get:function(){return this._definitionChanged}},color:ue("color"),gapColor:ue("gapColor"),dashLength:ue("dashLength"),dashPattern:ue("dashPattern")});U1.prototype.getType=function(e){return"PolylineDash"};var C7e=new q;U1.prototype.getValue=function(e,t){return l(e)||(e=q.now(C7e)),l(t)||(t={}),t.color=J.getValueOrClonedDefault(this._color,e,x7e,t.color),t.gapColor=J.getValueOrClonedDefault(this._gapColor,e,_7e,t.gapColor),t.dashLength=J.getValueOrDefault(this._dashLength,e,T7e,t.dashLength),t.dashPattern=J.getValueOrDefault(this._dashPattern,e,S7e,t.dashPattern),t};U1.prototype.equals=function(e){return this===e||e instanceof U1&&J.equals(this._color,e._color)&&J.equals(this._gapColor,e._gapColor)&&J.equals(this._dashLength,e._dashLength)&&J.equals(this._dashPattern,e._dashPattern)};var D1=U1;var k4n=_(T(),1);var V7e=D.WHITE,L7e=.25,R7e=1;function B1(e){e=e??Y.EMPTY_OBJECT,this._definitionChanged=new be,this._color=void 0,this._colorSubscription=void 0,this._glowPower=void 0,this._glowPowerSubscription=void 0,this._taperPower=void 0,this._taperPowerSubscription=void 0,this.color=e.color,this.glowPower=e.glowPower,this.taperPower=e.taperPower}Object.defineProperties(B1.prototype,{isConstant:{get:function(){return J.isConstant(this._color)&&J.isConstant(this._glow)}},definitionChanged:{get:function(){return this._definitionChanged}},color:ue("color"),glowPower:ue("glowPower"),taperPower:ue("taperPower")});B1.prototype.getType=function(e){return"PolylineGlow"};var Z7e=new q;B1.prototype.getValue=function(e,t){return l(e)||(e=q.now(Z7e)),l(t)||(t={}),t.color=J.getValueOrClonedDefault(this._color,e,V7e,t.color),t.glowPower=J.getValueOrDefault(this._glowPower,e,L7e,t.glowPower),t.taperPower=J.getValueOrDefault(this._taperPower,e,R7e,t.taperPower),t};B1.prototype.equals=function(e){return this===e||e instanceof B1&&J.equals(this._color,e._color)&&J.equals(this._glowPower,e._glowPower)&&J.equals(this._taperPower,e._taperPower)};var O1=B1;var J4n=_(T(),1);var G7e=D.WHITE,E7e=D.BLACK,I7e=1;function Y1(e){e=e??Y.EMPTY_OBJECT,this._definitionChanged=new be,this._color=void 0,this._colorSubscription=void 0,this._outlineColor=void 0,this._outlineColorSubscription=void 0,this._outlineWidth=void 0,this._outlineWidthSubscription=void 0,this.color=e.color,this.outlineColor=e.outlineColor,this.outlineWidth=e.outlineWidth}Object.defineProperties(Y1.prototype,{isConstant:{get:function(){return J.isConstant(this._color)&&J.isConstant(this._outlineColor)&&J.isConstant(this._outlineWidth)}},definitionChanged:{get:function(){return this._definitionChanged}},color:ue("color"),outlineColor:ue("outlineColor"),outlineWidth:ue("outlineWidth")});Y1.prototype.getType=function(e){return"PolylineOutline"};var X7e=new q;Y1.prototype.getValue=function(e,t){return l(e)||(e=q.now(X7e)),l(t)||(t={}),t.color=J.getValueOrClonedDefault(this._color,e,G7e,t.color),t.outlineColor=J.getValueOrClonedDefault(this._outlineColor,e,E7e,t.outlineColor),t.outlineWidth=J.getValueOrDefault(this._outlineWidth,e,I7e),t};Y1.prototype.equals=function(e){return this===e||e instanceof Y1&&J.equals(this._color,e._color)&&J.equals(this._outlineColor,e._outlineColor)&&J.equals(this._outlineWidth,e._outlineWidth)};var Jg=Y1;var ijn=_(T(),1);function Bb(e,t){this._value=void 0,this._definitionChanged=new be,this._eventHelper=new dr,this._referenceFrame=t??ki.FIXED,this.setValue(e)}Object.defineProperties(Bb.prototype,{isConstant:{get:function(){let e=this._value;if(!l(e))return!0;let t=e.length;for(let n=0;n<t;n++)if(!J.isConstant(e[n]))return!1;return!0}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return this._referenceFrame}}});var W7e=new q;Bb.prototype.getValue=function(e,t){return l(e)||(e=q.now(W7e)),this.getValueInReferenceFrame(e,ki.FIXED,t)};Bb.prototype.getValueInReferenceFrame=function(e,t,n){let i=this._value;if(!l(i))return;let o=i.length;l(n)||(n=new Array(o));let r=0,s=0;for(;r<o;){let c=i[r].getValueInReferenceFrame(e,t,n[r]);l(c)&&(n[s]=c,s++),r++}return n.length=s,n};Bb.prototype.setValue=function(e){let t=this._eventHelper;if(t.removeAll(),l(e)){this._value=e.slice();let n=e.length;for(let i=0;i<n;i++){let o=e[i];l(o)&&t.add(o.definitionChanged,Bb.prototype._raiseDefinitionChanged,this)}}else this._value=void 0;this._definitionChanged.raiseEvent(this)};Bb.prototype.equals=function(e){return this===e||e instanceof Bb&&this._referenceFrame===e._referenceFrame&&J.arrayEquals(this._value,e._value)};Bb.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var Ob=Bb;var djn=_(T(),1);function Qg(e){this._value=void 0,this._definitionChanged=new be,this._eventHelper=new dr,this.setValue(e)}Object.defineProperties(Qg.prototype,{isConstant:{get:function(){let e=this._value;if(!l(e))return!0;let t=e.length;for(let n=0;n<t;n++)if(!J.isConstant(e[n]))return!1;return!0}},definitionChanged:{get:function(){return this._definitionChanged}}});var P7e=new q;Qg.prototype.getValue=function(e,t){l(e)||(e=q.now(P7e));let n=this._value;if(!l(n))return;let i=n.length;l(t)||(t=new Array(i));let o=0,r=0;for(;o<i;){let a=this._value[o].getValue(e,t[o]);l(a)&&(t[r]=a,r++),o++}return t.length=r,t};Qg.prototype.setValue=function(e){let t=this._eventHelper;if(t.removeAll(),l(e)){this._value=e.slice();let n=e.length;for(let i=0;i<n;i++){let o=e[i];l(o)&&t.add(o.definitionChanged,Qg.prototype._raiseDefinitionChanged,this)}}else this._value=void 0;this._definitionChanged.raiseEvent(this)};Qg.prototype.equals=function(e){return this===e||e instanceof Qg&&J.arrayEquals(this._value,e._value)};Qg.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var z1=Qg;var bjn=_(T(),1);function oT(e){let t=e._targetProperty;if(!l(t)){let n=e._targetEntity;if(!l(n)){if(n=e._targetCollection.getById(e._targetId),!l(n)){e._targetEntity=e._targetProperty=void 0;return}n.definitionChanged.addEventListener(Ad.prototype._onTargetEntityDefinitionChanged,e),e._targetEntity=n}let i=e._targetPropertyNames;t=e._targetEntity;for(let o=0,r=i.length;o<r&&l(t);++o)t=t[i[o]];e._targetProperty=t}return t}function Ad(e,t,n){this._targetCollection=e,this._targetId=t,this._targetPropertyNames=n,this._targetProperty=void 0,this._targetEntity=void 0,this._definitionChanged=new be,e.collectionChanged.addEventListener(Ad.prototype._onCollectionChanged,this)}Object.defineProperties(Ad.prototype,{isConstant:{get:function(){return J.isConstant(oT(this))}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){let e=oT(this);return l(e)?e.referenceFrame:void 0}},targetId:{get:function(){return this._targetId}},targetCollection:{get:function(){return this._targetCollection}},targetPropertyNames:{get:function(){return this._targetPropertyNames}},resolvedProperty:{get:function(){return oT(this)}}});Ad.fromString=function(e,t){let n,i=[],o=!0,r=!1,s="";for(let a=0;a<t.length;++a){let c=t.charAt(a);r?(s+=c,r=!1):c==="\\"?r=!0:o&&c==="#"?(n=s,o=!1,s=""):!o&&c==="."?(i.push(s),s=""):s+=c}return i.push(s),new Ad(e,n,i)};var v7e=new q;Ad.prototype.getValue=function(e,t){let n=oT(this);return l(e)||(e=q.now(v7e)),l(n)?n.getValue(e,t):void 0};Ad.prototype.getValueInReferenceFrame=function(e,t,n){let i=oT(this);return l(i)?i.getValueInReferenceFrame(e,t,n):void 0};Ad.prototype.getType=function(e){let t=oT(this);return l(t)?t.getType(e):void 0};Ad.prototype.equals=function(e){if(this===e)return!0;let t=this._targetPropertyNames,n=e._targetPropertyNames;if(this._targetCollection!==e._targetCollection||this._targetId!==e._targetId||t.length!==n.length)return!1;let i=this._targetPropertyNames.length;for(let o=0;o<i;o++)if(t[o]!==n[o])return!1;return!0};Ad.prototype._onTargetEntityDefinitionChanged=function(e,t,n,i){l(this._targetProperty)&&this._targetPropertyNames[0]===t&&(this._targetProperty=void 0,this._definitionChanged.raiseEvent(this))};Ad.prototype._onCollectionChanged=function(e,t,n){let i=this._targetEntity;l(i)&&n.indexOf(i)!==-1?(i.definitionChanged.removeEventListener(Ad.prototype._onTargetEntityDefinitionChanged,this),this._targetEntity=this._targetProperty=void 0):l(i)||(i=oT(this),l(i)&&this._definitionChanged.raiseEvent(this))};var Yb=Ad;var _jn=_(T(),1);var w7e={packedLength:1,pack:function(e,t,n){return n=n??0,t[n]=e,t},unpack:function(e,t,n){return t=t??0,e[t]},convertPackedArrayForInterpolation:function(e,t,n,i){l(i)||(i=[]),t=t??0,n=n??e.length;let o;for(let r=0,s=n-t+1;r<s;r++){let a=e[t+r];r===0||Math.abs(o-a)<Math.PI?i[r]=a:i[r]=a-X.TWO_PI,o=a}},unpackInterpolationResult:function(e,t,n,i,o){return o=e[0],o<0?o+X.TWO_PI:o}},$u=w7e;var Mjn=_(T(),1);var Gjn=_(T(),1);var que={packedLength:1,pack:function(e,t,n){n=n??0,t[n]=e},unpack:function(e,t,n){return t=t??0,e[t]}};function $ue(e,t,n){let i,o=e.length,r=n.length,s=o+r;if(e.length=s,o!==t){let a=o-1;for(i=s-1;i>=t;i--)e[i]=e[a--]}for(i=0;i<r;i++)e[t++]=n[i]}function eme(e,t){return e instanceof q?e:typeof e=="string"?q.fromIso8601(e):q.addSeconds(t,e,new q)}var dJ=[],uJ=[];function vk(e,t,n,i,o){let r=0,s,a,c,d,u,h;for(;r<i.length;){u=eme(i[r],e),c=Xo(t,u,q.compare);let p=0,g=0;if(c<0){for(c=~c,d=c*o,a=void 0,h=t[c];r<i.length&&(u=eme(i[r],e),!(l(a)&&q.compare(a,u)>=0||l(h)&&q.compare(u,h)>=0));){for(dJ[p++]=u,r=r+1,s=0;s<o;s++)uJ[g++]=i[r],r=r+1;a=u}p>0&&(uJ.length=g,$ue(n,d,uJ),dJ.length=p,$ue(t,c,dJ))}else{for(s=0;s<o;s++)r++,n[c*o+s]=i[r];r++}}}function em(e,t){let n=e;n===Number&&(n=que);let i=n.packedLength,o=n.packedInterpolationLength??i,r=0,s;if(l(t)){let a=t.length;s=new Array(a);for(let c=0;c<a;c++){let d=t[c];d===Number&&(d=que);let u=d.packedLength;i+=u,o+=d.packedInterpolationLength??u,s[c]=d}r=a}this._type=e,this._innerType=n,this._interpolationDegree=1,this._interpolationAlgorithm=nT,this._numberOfPoints=0,this._times=[],this._values=[],this._xTable=[],this._yTable=[],this._packedLength=i,this._packedInterpolationLength=o,this._updateTableLength=!0,this._interpolationResult=new Array(o),this._definitionChanged=new be,this._derivativeTypes=t,this._innerDerivativeTypes=s,this._inputOrder=r,this._forwardExtrapolationType=Fd.NONE,this._forwardExtrapolationDuration=0,this._backwardExtrapolationType=Fd.NONE,this._backwardExtrapolationDuration=0}Object.defineProperties(em.prototype,{isConstant:{get:function(){return this._values.length===0}},definitionChanged:{get:function(){return this._definitionChanged}},type:{get:function(){return this._type}},derivativeTypes:{get:function(){return this._derivativeTypes}},interpolationDegree:{get:function(){return this._interpolationDegree}},interpolationAlgorithm:{get:function(){return this._interpolationAlgorithm}},forwardExtrapolationType:{get:function(){return this._forwardExtrapolationType},set:function(e){this._forwardExtrapolationType!==e&&(this._forwardExtrapolationType=e,this._definitionChanged.raiseEvent(this))}},forwardExtrapolationDuration:{get:function(){return this._forwardExtrapolationDuration},set:function(e){this._forwardExtrapolationDuration!==e&&(this._forwardExtrapolationDuration=e,this._definitionChanged.raiseEvent(this))}},backwardExtrapolationType:{get:function(){return this._backwardExtrapolationType},set:function(e){this._backwardExtrapolationType!==e&&(this._backwardExtrapolationType=e,this._definitionChanged.raiseEvent(this))}},backwardExtrapolationDuration:{get:function(){return this._backwardExtrapolationDuration},set:function(e){this._backwardExtrapolationDuration!==e&&(this._backwardExtrapolationDuration=e,this._definitionChanged.raiseEvent(this))}}});var F7e=new q;em.prototype.getValue=function(e,t){l(e)||(e=q.now(F7e));let n=this._times,i=n.length;if(i===0)return;let o,r=this._innerType,s=this._values,a=Xo(n,e,q.compare);if(a<0){if(a=~a,a===0){let L=n[a];if(o=this._backwardExtrapolationDuration,this._backwardExtrapolationType===Fd.NONE||o!==0&&q.secondsDifference(L,e)>o)return;if(this._backwardExtrapolationType===Fd.HOLD)return r.unpack(s,0,t)}if(a>=i){a=i-1;let L=n[a];if(o=this._forwardExtrapolationDuration,this._forwardExtrapolationType===Fd.NONE||o!==0&&q.secondsDifference(e,L)>o)return;if(this._forwardExtrapolationType===Fd.HOLD)return a=i-1,r.unpack(s,a*r.packedLength,t)}let c=this._xTable,d=this._yTable,u=this._interpolationAlgorithm,h=this._packedInterpolationLength,p=this._inputOrder;if(this._updateTableLength){this._updateTableLength=!1;let L=Math.min(u.getRequiredDataPoints(this._interpolationDegree,p),i);L!==this._numberOfPoints&&(this._numberOfPoints=L,c.length=L,d.length=L*h)}let g=this._numberOfPoints-1;if(g<1)return;let f=0,y=i-1;if(y-f+1>=g+1){let L=a-(g/2|0)-1;L<f&&(L=f);let Z=L+g;Z>y&&(Z=y,L=Z-g,L<f&&(L=f)),f=L,y=Z}let S=y-f+1;for(let L=0;L<S;++L)c[L]=q.secondsDifference(n[f+L],n[y]);if(l(r.convertPackedArrayForInterpolation))r.convertPackedArrayForInterpolation(s,f,y,d);else{let L=0,Z=this._packedLength,E=f*Z,P=(y+1)*Z;for(;E<P;)d[L]=s[E],E++,L++}let C=q.secondsDifference(e,n[y]),V;if(p===0||!l(u.interpolate))V=u.interpolateOrderZero(C,c,d,h,this._interpolationResult);else{let L=Math.floor(h/(p+1));V=u.interpolate(C,c,d,L,p,p,this._interpolationResult)}return l(r.unpackInterpolationResult)?r.unpackInterpolationResult(V,s,f,y,t):r.unpack(V,0,t)}return r.unpack(s,a*this._packedLength,t)};em.prototype.setInterpolationOptions=function(e){if(!l(e))return;let t=!1,n=e.interpolationAlgorithm,i=e.interpolationDegree;l(n)&&this._interpolationAlgorithm!==n&&(this._interpolationAlgorithm=n,t=!0),l(i)&&this._interpolationDegree!==i&&(this._interpolationDegree=i,t=!0),t&&(this._updateTableLength=!0,this._definitionChanged.raiseEvent(this))};em.prototype.addSample=function(e,t,n){let i=this._innerDerivativeTypes,o=l(i),r=this._innerType,s=[];if(s.push(e),r.pack(t,s,s.length),o){let a=i.length;for(let c=0;c<a;c++)i[c].pack(n[c],s,s.length)}vk(void 0,this._times,this._values,s,this._packedLength),this._updateTableLength=!0,this._definitionChanged.raiseEvent(this)};em.prototype.addSamples=function(e,t,n){let i=this._innerDerivativeTypes,o=l(i),r=this._innerType,s=e.length,a=[];for(let c=0;c<s;c++)if(a.push(e[c]),r.pack(t[c],a,a.length),o){let d=n[c],u=i.length;for(let h=0;h<u;h++)i[h].pack(d[h],a,a.length)}vk(void 0,this._times,this._values,a,this._packedLength),this._updateTableLength=!0,this._definitionChanged.raiseEvent(this)};em.prototype.getSample=function(e){let t=this._times,n=t.length;if(l(n))return e<0&&(e+=n),t[e]};em.prototype.addSamplesPackedArray=function(e,t){vk(t,this._times,this._values,e,this._packedLength),this._updateTableLength=!0,this._definitionChanged.raiseEvent(this)};em.prototype.removeSample=function(e){let t=Xo(this._times,e,q.compare);return t<0?!1:(tme(this,t,1),!0)};function tme(e,t,n){let i=e._packedLength;e._times.splice(t,n),e._values.splice(t*i,n*i),e._updateTableLength=!0,e._definitionChanged.raiseEvent(e)}em.prototype.removeSamples=function(e){let t=this._times,n=Xo(t,e.start,q.compare);n<0?n=~n:e.isStartIncluded||++n;let i=Xo(t,e.stop,q.compare);i<0?i=~i:e.isStopIncluded&&++i,tme(this,n,i-n)};em.prototype.equals=function(e){if(this===e)return!0;if(!l(e)||this._type!==e._type||this._interpolationDegree!==e._interpolationDegree||this._interpolationAlgorithm!==e._interpolationAlgorithm)return!1;let t=this._derivativeTypes,n=l(t),i=e._derivativeTypes,o=l(i);if(n!==o)return!1;let r,s;if(n){if(s=t.length,s!==i.length)return!1;for(r=0;r<s;r++)if(t[r]!==i[r])return!1}let a=this._times,c=e._times;if(s=a.length,s!==c.length)return!1;for(r=0;r<s;r++)if(!q.equals(a[r],c[r]))return!1;let d=this._values,u=e._values;for(s=d.length,r=0;r<s;r++)if(d[r]!==u[r])return!1;return!0};em._mergeNewSamples=vk;var Md=em;function tm(e,t){t=t??0;let n;if(t>0){n=new Array(t);for(let i=0;i<t;i++)n[i]=m}this._numberOfDerivatives=t,this._property=new Md(m,n),this._definitionChanged=new be,this._referenceFrame=e??ki.FIXED,this._property._definitionChanged.addEventListener(function(){this._definitionChanged.raiseEvent(this)},this)}Object.defineProperties(tm.prototype,{isConstant:{get:function(){return this._property.isConstant}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return this._referenceFrame}},interpolationDegree:{get:function(){return this._property.interpolationDegree}},interpolationAlgorithm:{get:function(){return this._property.interpolationAlgorithm}},numberOfDerivatives:{get:function(){return this._numberOfDerivatives}},forwardExtrapolationType:{get:function(){return this._property.forwardExtrapolationType},set:function(e){this._property.forwardExtrapolationType=e}},forwardExtrapolationDuration:{get:function(){return this._property.forwardExtrapolationDuration},set:function(e){this._property.forwardExtrapolationDuration=e}},backwardExtrapolationType:{get:function(){return this._property.backwardExtrapolationType},set:function(e){this._property.backwardExtrapolationType=e}},backwardExtrapolationDuration:{get:function(){return this._property.backwardExtrapolationDuration},set:function(e){this._property.backwardExtrapolationDuration=e}}});var A7e=new q;tm.prototype.getValue=function(e,t){return l(e)||(e=q.now(A7e)),this.getValueInReferenceFrame(e,ki.FIXED,t)};tm.prototype.getValueInReferenceFrame=function(e,t,n){if(n=this._property.getValue(e,n),l(n))return Mm.convertToReferenceFrame(e,n,this._referenceFrame,t,n)};tm.prototype.setInterpolationOptions=function(e){this._property.setInterpolationOptions(e)};tm.prototype.addSample=function(e,t,n){let i=this._numberOfDerivatives;this._property.addSample(e,t,n)};tm.prototype.addSamples=function(e,t,n){this._property.addSamples(e,t,n)};tm.prototype.addSamplesPackedArray=function(e,t){this._property.addSamplesPackedArray(e,t)};tm.prototype.removeSample=function(e){return this._property.removeSample(e)};tm.prototype.removeSamples=function(e){this._property.removeSamples(e)};tm.prototype.equals=function(e){return this===e||e instanceof tm&&J.equals(this._property,e._property)&&this._referenceFrame===e._referenceFrame};var _a=tm;var Qjn=_(T(),1);var kjn=_(T(),1),M7e={HORIZONTAL:0,VERTICAL:1},Th=Object.freeze(M7e);var N7e=Th.HORIZONTAL,k7e=D.WHITE,U7e=D.BLACK,D7e=0,B7e=1;function H1(e){e=e??Y.EMPTY_OBJECT,this._definitionChanged=new be,this._orientation=void 0,this._orientationSubscription=void 0,this._evenColor=void 0,this._evenColorSubscription=void 0,this._oddColor=void 0,this._oddColorSubscription=void 0,this._offset=void 0,this._offsetSubscription=void 0,this._repeat=void 0,this._repeatSubscription=void 0,this.orientation=e.orientation,this.evenColor=e.evenColor,this.oddColor=e.oddColor,this.offset=e.offset,this.repeat=e.repeat}Object.defineProperties(H1.prototype,{isConstant:{get:function(){return J.isConstant(this._orientation)&&J.isConstant(this._evenColor)&&J.isConstant(this._oddColor)&&J.isConstant(this._offset)&&J.isConstant(this._repeat)}},definitionChanged:{get:function(){return this._definitionChanged}},orientation:ue("orientation"),evenColor:ue("evenColor"),oddColor:ue("oddColor"),offset:ue("offset"),repeat:ue("repeat")});H1.prototype.getType=function(e){return"Stripe"};var O7e=new q;H1.prototype.getValue=function(e,t){return l(e)||(e=q.now(O7e)),l(t)||(t={}),t.horizontal=J.getValueOrDefault(this._orientation,e,N7e)===Th.HORIZONTAL,t.evenColor=J.getValueOrClonedDefault(this._evenColor,e,k7e,t.evenColor),t.oddColor=J.getValueOrClonedDefault(this._oddColor,e,U7e,t.oddColor),t.offset=J.getValueOrDefault(this._offset,e,D7e),t.repeat=J.getValueOrDefault(this._repeat,e,B7e),t};H1.prototype.equals=function(e){return this===e||e instanceof H1&&J.equals(this._orientation,e._orientation)&&J.equals(this._evenColor,e._evenColor)&&J.equals(this._oddColor,e._oddColor)&&J.equals(this._offset,e._offset)&&J.equals(this._repeat,e._repeat)};var K1=H1;var r8n=_(T(),1);function jg(e){this._definitionChanged=new be,this._intervals=new Dr,this._intervals.changedEvent.addEventListener(jg.prototype._intervalsChanged,this),this._referenceFrame=e??ki.FIXED}Object.defineProperties(jg.prototype,{isConstant:{get:function(){return this._intervals.isEmpty}},definitionChanged:{get:function(){return this._definitionChanged}},intervals:{get:function(){return this._intervals}},referenceFrame:{get:function(){return this._referenceFrame}}});var Y7e=new q;jg.prototype.getValue=function(e,t){return l(e)||(e=q.now(Y7e)),this.getValueInReferenceFrame(e,ki.FIXED,t)};jg.prototype.getValueInReferenceFrame=function(e,t,n){let i=this._intervals.findDataForIntervalContainingDate(e);if(l(i))return Mm.convertToReferenceFrame(e,i,this._referenceFrame,t,n)};jg.prototype.equals=function(e){return this===e||e instanceof jg&&this._intervals.equals(e._intervals,J.equals)&&this._referenceFrame===e._referenceFrame};jg.prototype._intervalsChanged=function(){this._definitionChanged.raiseEvent(this)};var zb=jg;var m8n=_(T(),1);function rT(){this._definitionChanged=new be,this._intervals=new Dr,this._intervals.changedEvent.addEventListener(rT.prototype._intervalsChanged,this)}Object.defineProperties(rT.prototype,{isConstant:{get:function(){return this._intervals.isEmpty}},definitionChanged:{get:function(){return this._definitionChanged}},intervals:{get:function(){return this._intervals}}});var z7e=new q;rT.prototype.getValue=function(e,t){l(e)||(e=q.now(z7e));let n=this._intervals.findDataForIntervalContainingDate(e);return l(n)&&typeof n.clone=="function"?n.clone(t):n};rT.prototype.equals=function(e){return this===e||e instanceof rT&&this._intervals.equals(e._intervals,J.equals)};rT.prototype._intervalsChanged=function(){this._definitionChanged.raiseEvent(this)};var Hb=rT;var X8n=_(T(),1);var x8n=_(T(),1);function J1(e,t){this._position=void 0,this._subscription=void 0,this._definitionChanged=new be,this._normalize=t??!0,this.position=e}Object.defineProperties(J1.prototype,{isConstant:{get:function(){return J.isConstant(this._position)}},definitionChanged:{get:function(){return this._definitionChanged}},position:{get:function(){return this._position},set:function(e){let t=this._position;t!==e&&(l(t)&&this._subscription(),this._position=e,l(e)&&(this._subscription=e._definitionChanged.addEventListener(function(){this._definitionChanged.raiseEvent(this)},this)),this._definitionChanged.raiseEvent(this))}},normalize:{get:function(){return this._normalize},set:function(e){this._normalize!==e&&(this._normalize=e,this._definitionChanged.raiseEvent(this))}}});var H7e=new m,nme=new m,ime=new q,K7e=new q,mJ=1/60;J1.prototype.getValue=function(e,t){return this._getValue(e,t)};J1.prototype._getValue=function(e,t,n){l(e)||(e=q.now(K7e)),l(t)||(t=new m);let i=this._position;if(J.isConstant(i))return this._normalize?void 0:m.clone(m.ZERO,t);let o=i.getValue(e,H7e),r=i.getValue(q.addSeconds(e,mJ,ime),nme);if(!l(o)||!l(r)&&(r=o,o=i.getValue(q.addSeconds(e,-mJ,ime),nme),!l(o)))return;if(m.equals(o,r))return this._normalize?void 0:m.clone(m.ZERO,t);l(n)&&o.clone(n);let s=m.subtract(r,o,t);return this._normalize?m.normalize(s,t):m.divideByScalar(s,mJ,t)};J1.prototype.equals=function(e){return this===e||e instanceof J1&&J.equals(this._position,e._position)};var Kb=J1;function J2(e,t){this._velocityVectorProperty=new Kb(e,!0),this._subscription=void 0,this._ellipsoid=void 0,this._definitionChanged=new be,this.ellipsoid=t??ne.default;let n=this;this._velocityVectorProperty.definitionChanged.addEventListener(function(){n._definitionChanged.raiseEvent(n)})}Object.defineProperties(J2.prototype,{isConstant:{get:function(){return J.isConstant(this._velocityVectorProperty)}},definitionChanged:{get:function(){return this._definitionChanged}},position:{get:function(){return this._velocityVectorProperty.position},set:function(e){this._velocityVectorProperty.position=e}},ellipsoid:{get:function(){return this._ellipsoid},set:function(e){this._ellipsoid!==e&&(this._ellipsoid=e,this._definitionChanged.raiseEvent(this))}}});var ome=new m,J7e=new m,rme=new $,Q7e=new q;J2.prototype.getValue=function(e,t){l(e)||(e=q.now(Q7e));let n=this._velocityVectorProperty._getValue(e,J7e,ome);if(l(n))return Pt.rotationMatrixFromPositionVelocity(ome,n,this._ellipsoid,rme),ve.fromRotationMatrix(rme,t)};J2.prototype.equals=function(e){return this===e||e instanceof J2&&J.equals(this._velocityVectorProperty,e._velocityVectorProperty)&&(this._ellipsoid===e._ellipsoid||this._ellipsoid.equals(e._ellipsoid))};var Q2=J2;var v8n=_(T(),1);var Jb={COMPLETE:0,BELOW_ELLIPSOID_HORIZON:1,ABOVE_ELLIPSOID_HORIZON:2};Jb.validate=function(e){return e===Jb.COMPLETE||e===Jb.BELOW_ELLIPSOID_HORIZON||e===Jb.ABOVE_ELLIPSOID_HORIZON};Jb.toString=function(e){switch(e){case Jb.COMPLETE:return"COMPLETE";case Jb.BELOW_ELLIPSOID_HORIZON:return"BELOW_ELLIPSOID_HORIZON";case Jb.ABOVE_ELLIPSOID_HORIZON:return"ABOVE_ELLIPSOID_HORIZON";default:throw new pe("SensorVolumePortionToDisplay value is not valid and cannot be converted to a String.")}};var Q1=Jb;function qg(){}qg.packedLength=m.packedLength;qg.unpack=m.unpack;qg.pack=m.pack;var hJ;function j2(e,t){return t[0]==="#"&&(t=hJ+t),Yb.fromString(e,t)}function sme(e,t,n){if(l(n.reference))return j2(t,n.reference);if(l(n.velocityReference)){let i=j2(t,n.velocityReference);switch(e){case m:case qg:return new Kb(i,e===qg);case ve:return new Q2(i)}}throw new ae(`${JSON.stringify(n)} is not valid CZML.`)}function j7e(e,t){return new Dm(function(n,i){return t(e.getValue(n,i))},e.isConstant)}var Oi=new m,al=new K2,Vc=new he,sT=new Ln,wk=new ve;function q7e(e){let t=e.rgbaf;if(l(t))return t;let n=e.rgba;if(!l(n))return;let i=n.length;if(i===D.packedLength)return[D.byteToFloat(n[0]),D.byteToFloat(n[1]),D.byteToFloat(n[2]),D.byteToFloat(n[3])];t=new Array(i);for(let o=0;o<i;o+=5)t[o]=n[o],t[o+1]=D.byteToFloat(n[o+1]),t[o+2]=D.byteToFloat(n[o+2]),t[o+3]=D.byteToFloat(n[o+3]),t[o+4]=D.byteToFloat(n[o+4]);return t}function ame(e,t){let n=e.uri??e;return l(t)?t.getDerivedResource({url:n}):Ze.createIfNeeded(n)}function $7e(e){let t=e.wsen;if(l(t))return t;let n=e.wsenDegrees;if(!l(n))return;let i=n.length;if(i===ce.packedLength)return[X.toRadians(n[0]),X.toRadians(n[1]),X.toRadians(n[2]),X.toRadians(n[3])];t=new Array(i);for(let o=0;o<i;o+=5)t[o]=n[o],t[o+1]=X.toRadians(n[o+1]),t[o+2]=X.toRadians(n[o+2]),t[o+3]=X.toRadians(n[o+3]),t[o+4]=X.toRadians(n[o+4]);return t}function e6e(e){let t=e.length;if(al.magnitude=1,t===2)return al.clock=e[0],al.cone=e[1],m.fromSpherical(al,Oi),[Oi.x,Oi.y,Oi.z];let n=new Array(t/3*4);for(let i=0,o=0;i<t;i+=3,o+=4)n[o]=e[i],al.clock=e[i+1],al.cone=e[i+2],m.fromSpherical(al,Oi),n[o+1]=Oi.x,n[o+2]=Oi.y,n[o+3]=Oi.z;return n}function t6e(e){let t=e.length;if(t===3)return al.clock=e[0],al.cone=e[1],al.magnitude=e[2],m.fromSpherical(al,Oi),[Oi.x,Oi.y,Oi.z];let n=new Array(t);for(let i=0;i<t;i+=4)n[i]=e[i],al.clock=e[i+1],al.cone=e[i+2],al.magnitude=e[i+3],m.fromSpherical(al,Oi),n[i+1]=Oi.x,n[i+2]=Oi.y,n[i+3]=Oi.z;return n}function n6e(e){let t=e.length;if(t===3)return Vc.longitude=e[0],Vc.latitude=e[1],Vc.height=e[2],ne.default.cartographicToCartesian(Vc,Oi),[Oi.x,Oi.y,Oi.z];let n=new Array(t);for(let i=0;i<t;i+=4)n[i]=e[i],Vc.longitude=e[i+1],Vc.latitude=e[i+2],Vc.height=e[i+3],ne.default.cartographicToCartesian(Vc,Oi),n[i+1]=Oi.x,n[i+2]=Oi.y,n[i+3]=Oi.z;return n}function i6e(e){let t=e.length;if(t===3)return Vc.longitude=X.toRadians(e[0]),Vc.latitude=X.toRadians(e[1]),Vc.height=e[2],ne.default.cartographicToCartesian(Vc,Oi),[Oi.x,Oi.y,Oi.z];let n=new Array(t);for(let i=0;i<t;i+=4)n[i]=e[i],Vc.longitude=X.toRadians(e[i+1]),Vc.latitude=X.toRadians(e[i+2]),Vc.height=e[i+3],ne.default.cartographicToCartesian(Vc,Oi),n[i+1]=Oi.x,n[i+2]=Oi.y,n[i+3]=Oi.z;return n}function fJ(e){let t=e.cartesian;if(l(t))return t;let n=e.cartesianVelocity;if(l(n))return n;let i=e.unitCartesian;if(l(i))return i;let o=e.unitSpherical;if(l(o))return e6e(o);let r=e.spherical;if(l(r))return t6e(r);let s=e.cartographicRadians;if(l(s))return n6e(s);let a=e.cartographicDegrees;if(l(a))return i6e(a);throw new ae(`${JSON.stringify(e)} is not a valid CZML interval.`)}function cme(e,t){m.unpack(e,t,Oi),m.normalize(Oi,Oi),m.pack(Oi,e,t)}function o6e(e){let t=fJ(e);if(t.length===3)return cme(t,0),t;for(let n=1;n<t.length;n+=4)cme(t,n);return t}function lme(e,t){ve.unpack(e,t,wk),ve.normalize(wk,wk),ve.pack(wk,e,t)}function r6e(e){let t=e.unitQuaternion;if(l(t)){if(t.length===4)return lme(t,0),t;for(let n=1;n<t.length;n+=5)lme(t,n)}return t}function dme(e){return typeof e=="boolean"?Boolean:typeof e=="number"?Number:typeof e=="string"?String:e.hasOwnProperty("array")?Array:e.hasOwnProperty("boolean")?Boolean:e.hasOwnProperty("boundingRectangle")?Ke:e.hasOwnProperty("cartesian2")?U:e.hasOwnProperty("cartesian")||e.hasOwnProperty("spherical")||e.hasOwnProperty("cartographicRadians")||e.hasOwnProperty("cartographicDegrees")?m:e.hasOwnProperty("unitCartesian")||e.hasOwnProperty("unitSpherical")?qg:e.hasOwnProperty("rgba")||e.hasOwnProperty("rgbaf")?D:e.hasOwnProperty("arcType")?en:e.hasOwnProperty("classificationType")?Un:e.hasOwnProperty("colorBlendMode")?pc:e.hasOwnProperty("cornerType")?vi:e.hasOwnProperty("heightReference")?Je:e.hasOwnProperty("horizontalOrigin")?_i:e.hasOwnProperty("date")?q:e.hasOwnProperty("labelStyle")?Do:e.hasOwnProperty("number")?Number:e.hasOwnProperty("nearFarScalar")?kt:e.hasOwnProperty("distanceDisplayCondition")?wt:e.hasOwnProperty("object")||e.hasOwnProperty("value")?Object:e.hasOwnProperty("unitQuaternion")?ve:e.hasOwnProperty("shadowMode")?_n:e.hasOwnProperty("string")?String:e.hasOwnProperty("stripeOrientation")?Th:e.hasOwnProperty("wsen")||e.hasOwnProperty("wsenDegrees")?ce:e.hasOwnProperty("uri")?$2.default:e.hasOwnProperty("verticalOrigin")?An:Object}function s6e(e,t,n){switch(e){case en:return en[t.arcType??t];case Array:return t.array;case Boolean:return t.boolean??t;case Ke:return t.boundingRectangle;case U:return t.cartesian2;case m:return fJ(t);case qg:return o6e(t);case D:return q7e(t);case Un:return Un[t.classificationType??t];case pc:return pc[t.colorBlendMode??t];case vi:return vi[t.cornerType??t];case Je:return Je[t.heightReference??t];case _i:return _i[t.horizontalOrigin??t];case Image:return ame(t,n);case q:return q.fromIso8601(t.date??t);case Do:return Do[t.labelStyle??t];case Number:return t.number??t;case kt:return t.nearFarScalar;case wt:return t.distanceDisplayCondition;case Object:return t.object??t.value??t;case ve:return r6e(t);case $u:return t.number??t;case Q1:return Q1[t.portionToDisplay??t];case _n:return _n[t.shadowMode??t.shadows??t];case String:return t.string??t;case Th:return Th[t.stripeOrientation??t];case ce:return $7e(t);case $2.default:return ame(t,n);case An:return An[t.verticalOrigin??t];default:throw new ae(`Unknown CzmlDataSource interval type: ${e}`)}}var a6e={HERMITE:z2,LAGRANGE:H2,LINEAR:nT};function Fk(e,t){let n=e.interpolationAlgorithm,i=e.interpolationDegree;(l(n)||l(i))&&t.setInterpolationOptions({interpolationAlgorithm:a6e[n],interpolationDegree:i});let o=e.forwardExtrapolationType;l(o)&&(t.forwardExtrapolationType=Fd[o]);let r=e.forwardExtrapolationDuration;l(r)&&(t.forwardExtrapolationDuration=r);let s=e.backwardExtrapolationType;l(s)&&(t.backwardExtrapolationType=Fd[s]);let a=e.backwardExtrapolationDuration;l(a)&&(t.backwardExtrapolationDuration=a)}var ume={iso8601:void 0};function ur(e){if(l(e))return ume.iso8601=e,Ln.fromIso8601(ume)}function pJ(e){let t=Be.MAXIMUM_INTERVAL.clone();return t.data=e,t}function mme(e){let t=new Tc;return t.intervals.addInterval(pJ(e)),t}function hme(e){let t=new ya(e.referenceFrame);return t.intervals.addInterval(pJ(e)),t}function Ak(e,t,n,i,o,r,s){let a=ur(i.interval);l(o)&&(l(a)?a=Ln.intersect(a,o,sT):a=o);let c,d,u,h=!l(i.reference)&&!l(i.velocityReference),p=l(a)&&!a.equals(Be.MAXIMUM_INTERVAL);if(i.delete===!0){if(!p){t[n]=void 0;return}return Vme(t[n],a)}let g=!1;if(h){if(d=s6e(e,i,r),!l(d))return;c=e.packedLength??1,u=d.length??1,g=!l(i.array)&&typeof d!="string"&&u>c&&e!==Object}let f=typeof e.unpack=="function"&&e!==$u;if(!g&&!p){h?t[n]=new Qn(f?e.unpack(d,0):d):t[n]=sme(e,s,i);return}let y=t[n],x,S=i.epoch;if(l(S)&&(x=q.fromIso8601(S)),g&&!p){y instanceof Md||(t[n]=y=new Md(e)),y.addSamplesPackedArray(d,x),Fk(i,y);return}let C;if(!g&&p){a=a.clone(),h?a.data=f?e.unpack(d,0):d:a.data=sme(e,s,i),l(y)||(t[n]=y=h?new Hb:new Tc),h&&y instanceof Hb?y.intervals.addInterval(a):y instanceof Tc?(h&&(a.data=new Qn(a.data)),y.intervals.addInterval(a)):(t[n]=y=mme(y),h&&(a.data=new Qn(a.data)),y.intervals.addInterval(a));return}l(y)||(t[n]=y=new Tc),y instanceof Tc||(t[n]=y=mme(y));let V=y.intervals;C=V.findInterval(a),(!l(C)||!(C.data instanceof Md))&&(C=a.clone(),C.data=new Md(e),V.addInterval(C)),C.data.addSamplesPackedArray(d,x),Fk(i,C.data)}function Vme(e,t){if(e instanceof Md){e.removeSamples(t);return}else if(e instanceof Hb){e.intervals.removeInterval(t);return}else if(e instanceof Tc){let n=e.intervals;for(let i=0;i<n.length;++i){let o=Ln.intersect(n.get(i),t,sT);o.isEmpty||Vme(o.data,t)}n.removeInterval(t);return}}function _e(e,t,n,i,o,r,s){if(l(i))if(Array.isArray(i))for(let a=0,c=i.length;a<c;++a)Ak(e,t,n,i[a],o,r,s);else Ak(e,t,n,i,o,r,s)}function fme(e,t,n,i,o,r){let s=ur(n.interval);l(i)&&(l(s)?s=Ln.intersect(s,i,sT):s=i);let a=l(n.cartesianVelocity)?1:0,c=m.packedLength*(a+1),d,u,h=!l(n.reference),p=l(s)&&!s.equals(Be.MAXIMUM_INTERVAL);if(n.delete===!0){if(!p){e[t]=void 0;return}return Lme(e[t],s)}let g,f=!1;if(h&&(l(n.referenceFrame)&&(g=ki[n.referenceFrame]),g=g??ki.FIXED,d=fJ(n),u=d.length??1,f=u>c),!f&&!p){h?e[t]=new Oc(m.unpack(d),g):e[t]=j2(r,n.reference);return}let y=e[t],x,S=n.epoch;if(l(S)&&(x=q.fromIso8601(S)),f&&!p){(!(y instanceof _a)||l(g)&&y.referenceFrame!==g)&&(e[t]=y=new _a(g,a)),y.addSamplesPackedArray(d,x),Fk(n,y);return}let C;if(!f&&p){s=s.clone(),h?s.data=m.unpack(d):s.data=j2(r,n.reference),l(y)||(h?y=new zb(g):y=new ya(g),e[t]=y),h&&y instanceof zb&&l(g)&&y.referenceFrame===g?y.intervals.addInterval(s):y instanceof ya?(h&&(s.data=new Oc(s.data,g)),y.intervals.addInterval(s)):(e[t]=y=hme(y),h&&(s.data=new Oc(s.data,g)),y.intervals.addInterval(s));return}l(y)?y instanceof ya||(e[t]=y=hme(y)):e[t]=y=new ya(g);let V=y.intervals;C=V.findInterval(s),(!l(C)||!(C.data instanceof _a)||l(g)&&C.data.referenceFrame!==g)&&(C=s.clone(),C.data=new _a(g,a),V.addInterval(C)),C.data.addSamplesPackedArray(d,x),Fk(n,C.data)}function Lme(e,t){if(e instanceof _a){e.removeSamples(t);return}else if(e instanceof zb){e.intervals.removeInterval(t);return}else if(e instanceof ya){let n=e.intervals;for(let i=0;i<n.length;++i){let o=Ln.intersect(n.get(i),t,sT);o.isEmpty||Lme(o.data,t)}n.removeInterval(t);return}}function Rme(e,t,n,i,o,r){if(l(n))if(Array.isArray(n))for(let s=0,a=n.length;s<a;++s)fme(e,t,n[s],i,o,r);else fme(e,t,n,i,o,r)}function pme(e,t,n,i){l(n.references)?Mk(e,t,n.references,n.interval,i,z1,Tc):(l(n.cartesian2)?n.array=U.unpackArray(n.cartesian2):l(n.cartesian)&&(n.array=U.unpackArray(n.cartesian)),l(n.array)&&_e(Array,e,t,n,void 0,void 0,i))}function bme(e,t,n,i,o,r){let s=ur(n.interval);l(i)&&(l(s)?s=Ln.intersect(s,i,sT):s=i);let a=e[t],c,d;if(l(s)){a instanceof G1||(a=new G1,e[t]=a);let h=a.intervals;d=h.findInterval({start:s.start,stop:s.stop}),l(d)?c=d.data:(d=s.clone(),h.addInterval(d))}else c=a;let u;l(n.solidColor)?(c instanceof Dt||(c=new Dt),u=n.solidColor,_e(D,c,"color",u.color,void 0,void 0,r)):l(n.grid)?(c instanceof M1||(c=new M1),u=n.grid,_e(D,c,"color",u.color,void 0,o,r),_e(Number,c,"cellAlpha",u.cellAlpha,void 0,o,r),_e(U,c,"lineCount",u.lineCount,void 0,o,r),_e(U,c,"lineThickness",u.lineThickness,void 0,o,r),_e(U,c,"lineOffset",u.lineOffset,void 0,o,r)):l(n.image)?(c instanceof q0||(c=new q0),u=n.image,_e(Image,c,"image",u.image,void 0,o,r),_e(U,c,"repeat",u.repeat,void 0,o,r),_e(D,c,"color",u.color,void 0,o,r),_e(Boolean,c,"transparent",u.transparent,void 0,o,r)):l(n.stripe)?(c instanceof K1||(c=new K1),u=n.stripe,_e(Th,c,"orientation",u.orientation,void 0,o,r),_e(D,c,"evenColor",u.evenColor,void 0,o,r),_e(D,c,"oddColor",u.oddColor,void 0,o,r),_e(Number,c,"offset",u.offset,void 0,o,r),_e(Number,c,"repeat",u.repeat,void 0,o,r)):l(n.polylineOutline)?(c instanceof Jg||(c=new Jg),u=n.polylineOutline,_e(D,c,"color",u.color,void 0,o,r),_e(D,c,"outlineColor",u.outlineColor,void 0,o,r),_e(Number,c,"outlineWidth",u.outlineWidth,void 0,o,r)):l(n.polylineGlow)?(c instanceof O1||(c=new O1),u=n.polylineGlow,_e(D,c,"color",u.color,void 0,o,r),_e(Number,c,"glowPower",u.glowPower,void 0,o,r),_e(Number,c,"taperPower",u.taperPower,void 0,o,r)):l(n.polylineArrow)?(c instanceof k1||(c=new k1),u=n.polylineArrow,_e(D,c,"color",u.color,void 0,void 0,r)):l(n.polylineDash)?(c instanceof D1||(c=new D1),u=n.polylineDash,_e(D,c,"color",u.color,void 0,void 0,r),_e(D,c,"gapColor",u.gapColor,void 0,void 0,r),_e(Number,c,"dashLength",u.dashLength,void 0,o,r),_e(Number,c,"dashPattern",u.dashPattern,void 0,o,r)):l(n.checkerboard)&&(c instanceof R1||(c=new R1),u=n.checkerboard,_e(D,c,"evenColor",u.evenColor,void 0,o,r),_e(D,c,"oddColor",u.oddColor,void 0,o,r),_e(U,c,"repeat",u.repeat,void 0,o,r)),l(d)?d.data=c:e[t]=c}function Nd(e,t,n,i,o,r){if(l(n))if(Array.isArray(n))for(let s=0,a=n.length;s<a;++s)bme(e,t,n[s],i,o,r);else bme(e,t,n,i,o,r)}function c6e(e,t,n,i){let o=t.name;l(o)&&(e.name=t.name)}function l6e(e,t,n,i){let o=t.description;l(o)&&_e(String,e,"description",o,void 0,i,n)}function d6e(e,t,n,i){let o=t.position;l(o)&&Rme(e,"position",o,void 0,i,n)}function u6e(e,t,n,i){let o=t.viewFrom;l(o)&&_e(m,e,"viewFrom",o,void 0,i,n)}function m6e(e,t,n,i){let o=t.orientation;l(o)&&_e(ve,e,"orientation",o,void 0,i,n)}function h6e(e,t,n,i){let o=t.properties;if(l(o)){l(e.properties)||(e.properties=new zc);for(let r in o)if(o.hasOwnProperty(r)){e.properties.hasProperty(r)||e.properties.addProperty(r);let s=o[r];if(Array.isArray(s))for(let a=0,c=s.length;a<c;++a)Ak(dme(s[a]),e.properties,r,s[a],void 0,i,n);else Ak(dme(s),e.properties,r,s,void 0,i,n)}}}function Mk(e,t,n,i,o,r,s){let a=n.map(function(c){return j2(o,c)});if(l(i)){i=ur(i);let c=e[t];if(!(c instanceof s)){let d=new s;d.intervals.addInterval(pJ(c)),e[t]=c=d}i.data=new r(a),c.intervals.addInterval(i)}else e[t]=new r(a)}function gme(e,t,n,i){let o=n.references;l(o)?Mk(e,t,o,n.interval,i,z1,Tc):_e(Array,e,t,n,void 0,void 0,i)}function yme(e,t,n,i){if(l(n))if(Array.isArray(n))for(let o=0,r=n.length;o<r;++o)gme(e,t,n[o],i);else gme(e,t,n,i)}function xme(e,t,n,i){let o=n.references;l(o)?Mk(e,t,o,n.interval,i,Ob,ya):(l(n.cartesian)?n.array=m.unpackArray(n.cartesian):l(n.cartographicRadians)?n.array=m.fromRadiansArrayHeights(n.cartographicRadians,ne.default):l(n.cartographicDegrees)&&(n.array=m.fromDegreesArrayHeights(n.cartographicDegrees,ne.default)),l(n.array)&&_e(Array,e,t,n,void 0,void 0,i))}function ev(e,t,n,i){if(l(n))if(Array.isArray(n))for(let o=0,r=n.length;o<r;++o)xme(e,t,n[o],i);else xme(e,t,n,i)}function f6e(e){return m.unpackArray(e)}function p6e(e){return m.fromRadiansArrayHeights(e,ne.default)}function b6e(e){return m.fromDegreesArrayHeights(e,ne.default)}function _me(e,t,n,i){let o=n.references;if(l(o)){let r=o.map(function(s){let a={};return Mk(a,"positions",s,n.interval,i,Ob,ya),a.positions});e[t]=new Ob(r)}else l(n.cartesian)?n.array=n.cartesian.map(f6e):l(n.cartographicRadians)?n.array=n.cartographicRadians.map(p6e):l(n.cartographicDegrees)&&(n.array=n.cartographicDegrees.map(b6e)),l(n.array)&&_e(Array,e,t,n,void 0,void 0,i)}function g6e(e,t,n,i){if(l(n))if(Array.isArray(n))for(let o=0,r=n.length;o<r;++o)_me(e,t,n[o],i);else _me(e,t,n,i)}function y6e(e,t,n,i){if(l(n))if(Array.isArray(n))for(let o=0,r=n.length;o<r;o++)pme(e,t,n[o],i);else pme(e,t,n,i)}function x6e(e,t,n,i){let o=t.availability;if(!l(o))return;let r;if(Array.isArray(o))for(let s=0,a=o.length;s<a;++s)l(r)||(r=new Dr),r.addInterval(ur(o[s]));else r=new Dr,r.addInterval(ur(o));e.availability=r}function _6e(e,t,n,i,o){l(t)&&_e(qg,e,"alignedAxis",t,n,i,o)}function T6e(e,t,n,i){let o=t.billboard;if(!l(o))return;let r=ur(o.interval),s=e.billboard;l(s)||(e.billboard=s=new ac),_e(Boolean,s,"show",o.show,r,i,n),_e(Image,s,"image",o.image,r,i,n),_e(Number,s,"scale",o.scale,r,i,n),_e(U,s,"pixelOffset",o.pixelOffset,r,i,n),_e(m,s,"eyeOffset",o.eyeOffset,r,i,n),_e(_i,s,"horizontalOrigin",o.horizontalOrigin,r,i,n),_e(An,s,"verticalOrigin",o.verticalOrigin,r,i,n),_e(Je,s,"heightReference",o.heightReference,r,i,n),_e(D,s,"color",o.color,r,i,n),_e($u,s,"rotation",o.rotation,r,i,n),_6e(s,o.alignedAxis,r,i,n),_e(Boolean,s,"sizeInMeters",o.sizeInMeters,r,i,n),_e(Number,s,"width",o.width,r,i,n),_e(Number,s,"height",o.height,r,i,n),_e(kt,s,"scaleByDistance",o.scaleByDistance,r,i,n),_e(kt,s,"translucencyByDistance",o.translucencyByDistance,r,i,n),_e(kt,s,"pixelOffsetScaleByDistance",o.pixelOffsetScaleByDistance,r,i,n),_e(Ke,s,"imageSubRegion",o.imageSubRegion,r,i,n),_e(wt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),_e(Number,s,"disableDepthTestDistance",o.disableDepthTestDistance,r,i,n)}function S6e(e,t,n,i){let o=t.box;if(!l(o))return;let r=ur(o.interval),s=e.box;l(s)||(e.box=s=new Ax),_e(Boolean,s,"show",o.show,r,i,n),_e(m,s,"dimensions",o.dimensions,r,i,n),_e(Je,s,"heightReference",o.heightReference,r,i,n),_e(Boolean,s,"fill",o.fill,r,i,n),Nd(s,"material",o.material,r,i,n),_e(Boolean,s,"outline",o.outline,r,i,n),_e(D,s,"outlineColor",o.outlineColor,r,i,n),_e(Number,s,"outlineWidth",o.outlineWidth,r,i,n),_e(_n,s,"shadows",o.shadows,r,i,n),_e(wt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function C6e(e,t,n,i){let o=t.corridor;if(!l(o))return;let r=ur(o.interval),s=e.corridor;l(s)||(e.corridor=s=new Nx),_e(Boolean,s,"show",o.show,r,i,n),ev(s,"positions",o.positions,n),_e(Number,s,"width",o.width,r,i,n),_e(Number,s,"height",o.height,r,i,n),_e(Je,s,"heightReference",o.heightReference,r,i,n),_e(Number,s,"extrudedHeight",o.extrudedHeight,r,i,n),_e(Je,s,"extrudedHeightReference",o.extrudedHeightReference,r,i,n),_e(vi,s,"cornerType",o.cornerType,r,i,n),_e(Number,s,"granularity",o.granularity,r,i,n),_e(Boolean,s,"fill",o.fill,r,i,n),Nd(s,"material",o.material,r,i,n),_e(Boolean,s,"outline",o.outline,r,i,n),_e(D,s,"outlineColor",o.outlineColor,r,i,n),_e(Number,s,"outlineWidth",o.outlineWidth,r,i,n),_e(_n,s,"shadows",o.shadows,r,i,n),_e(wt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),_e(Un,s,"classificationType",o.classificationType,r,i,n),_e(Number,s,"zIndex",o.zIndex,r,i,n)}function V6e(e,t,n,i){let o=t.cylinder;if(!l(o))return;let r=ur(o.interval),s=e.cylinder;l(s)||(e.cylinder=s=new kx),_e(Boolean,s,"show",o.show,r,i,n),_e(Number,s,"length",o.length,r,i,n),_e(Number,s,"topRadius",o.topRadius,r,i,n),_e(Number,s,"bottomRadius",o.bottomRadius,r,i,n),_e(Je,s,"heightReference",o.heightReference,r,i,n),_e(Boolean,s,"fill",o.fill,r,i,n),Nd(s,"material",o.material,r,i,n),_e(Boolean,s,"outline",o.outline,r,i,n),_e(D,s,"outlineColor",o.outlineColor,r,i,n),_e(Number,s,"outlineWidth",o.outlineWidth,r,i,n),_e(Number,s,"numberOfVerticalLines",o.numberOfVerticalLines,r,i,n),_e(Number,s,"slices",o.slices,r,i,n),_e(_n,s,"shadows",o.shadows,r,i,n),_e(wt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function L6e(e,t){let n=e.version;if(l(n)&&typeof n=="string"){let r=n.split(".");if(r.length===2){if(r[0]!=="1")throw new ae("Cesium only supports CZML version 1.");t._version=n}}if(!l(t._version))throw new ae("CZML version information invalid. It is expected to be a property on the document object in the <Major>.<Minor> version format.");let i=t._documentPacket;l(e.name)&&(i.name=e.name);let o=e.clock;if(l(o)){let r=i.clock;l(r)?(r.interval=o.interval??r.interval,r.currentTime=o.currentTime??r.currentTime,r.range=o.range??r.range,r.step=o.step??r.step,r.multiplier=o.multiplier??r.multiplier):i.clock={interval:o.interval,currentTime:o.currentTime,range:o.range,step:o.step,multiplier:o.multiplier}}}function R6e(e,t,n,i){let o=t.ellipse;if(!l(o))return;let r=ur(o.interval),s=e.ellipse;l(s)||(e.ellipse=s=new Ux),_e(Boolean,s,"show",o.show,r,i,n),_e(Number,s,"semiMajorAxis",o.semiMajorAxis,r,i,n),_e(Number,s,"semiMinorAxis",o.semiMinorAxis,r,i,n),_e(Number,s,"height",o.height,r,i,n),_e(Je,s,"heightReference",o.heightReference,r,i,n),_e(Number,s,"extrudedHeight",o.extrudedHeight,r,i,n),_e(Je,s,"extrudedHeightReference",o.extrudedHeightReference,r,i,n),_e($u,s,"rotation",o.rotation,r,i,n),_e($u,s,"stRotation",o.stRotation,r,i,n),_e(Number,s,"granularity",o.granularity,r,i,n),_e(Boolean,s,"fill",o.fill,r,i,n),Nd(s,"material",o.material,r,i,n),_e(Boolean,s,"outline",o.outline,r,i,n),_e(D,s,"outlineColor",o.outlineColor,r,i,n),_e(Number,s,"outlineWidth",o.outlineWidth,r,i,n),_e(Number,s,"numberOfVerticalLines",o.numberOfVerticalLines,r,i,n),_e(_n,s,"shadows",o.shadows,r,i,n),_e(wt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),_e(Un,s,"classificationType",o.classificationType,r,i,n),_e(Number,s,"zIndex",o.zIndex,r,i,n)}function Z6e(e,t,n,i){let o=t.ellipsoid;if(!l(o))return;let r=ur(o.interval),s=e.ellipsoid;l(s)||(e.ellipsoid=s=new Dx),_e(Boolean,s,"show",o.show,r,i,n),_e(m,s,"radii",o.radii,r,i,n),_e(m,s,"innerRadii",o.innerRadii,r,i,n),_e(Number,s,"minimumClock",o.minimumClock,r,i,n),_e(Number,s,"maximumClock",o.maximumClock,r,i,n),_e(Number,s,"minimumCone",o.minimumCone,r,i,n),_e(Number,s,"maximumCone",o.maximumCone,r,i,n),_e(Je,s,"heightReference",o.heightReference,r,i,n),_e(Boolean,s,"fill",o.fill,r,i,n),Nd(s,"material",o.material,r,i,n),_e(Boolean,s,"outline",o.outline,r,i,n),_e(D,s,"outlineColor",o.outlineColor,r,i,n),_e(Number,s,"outlineWidth",o.outlineWidth,r,i,n),_e(Number,s,"stackPartitions",o.stackPartitions,r,i,n),_e(Number,s,"slicePartitions",o.slicePartitions,r,i,n),_e(Number,s,"subdivisions",o.subdivisions,r,i,n),_e(_n,s,"shadows",o.shadows,r,i,n),_e(wt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function G6e(e,t,n,i){let o=t.label;if(!l(o))return;let r=ur(o.interval),s=e.label;l(s)||(e.label=s=new Nm),_e(Boolean,s,"show",o.show,r,i,n),_e(String,s,"text",o.text,r,i,n),_e(String,s,"font",o.font,r,i,n),_e(Do,s,"style",o.style,r,i,n),_e(Number,s,"scale",o.scale,r,i,n),_e(Boolean,s,"showBackground",o.showBackground,r,i,n),_e(D,s,"backgroundColor",o.backgroundColor,r,i,n),_e(U,s,"backgroundPadding",o.backgroundPadding,r,i,n),_e(U,s,"pixelOffset",o.pixelOffset,r,i,n),_e(m,s,"eyeOffset",o.eyeOffset,r,i,n),_e(_i,s,"horizontalOrigin",o.horizontalOrigin,r,i,n),_e(An,s,"verticalOrigin",o.verticalOrigin,r,i,n),_e(Je,s,"heightReference",o.heightReference,r,i,n),_e(D,s,"fillColor",o.fillColor,r,i,n),_e(D,s,"outlineColor",o.outlineColor,r,i,n),_e(Number,s,"outlineWidth",o.outlineWidth,r,i,n),_e(kt,s,"translucencyByDistance",o.translucencyByDistance,r,i,n),_e(kt,s,"pixelOffsetScaleByDistance",o.pixelOffsetScaleByDistance,r,i,n),_e(kt,s,"scaleByDistance",o.scaleByDistance,r,i,n),_e(wt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),_e(Number,s,"disableDepthTestDistance",o.disableDepthTestDistance,r,i,n)}function E6e(e,t,n,i){let o=t.model;if(!l(o))return;let r=ur(o.interval),s=e.model;l(s)||(e.model=s=new Up),_e(Boolean,s,"show",o.show,r,i,n),_e($2.default,s,"uri",o.gltf,r,i,n),_e(Number,s,"scale",o.scale,r,i,n),_e(Number,s,"minimumPixelSize",o.minimumPixelSize,r,i,n),_e(Number,s,"maximumScale",o.maximumScale,r,i,n),_e(Boolean,s,"incrementallyLoadTextures",o.incrementallyLoadTextures,r,i,n),_e(Boolean,s,"runAnimations",o.runAnimations,r,i,n),_e(Boolean,s,"clampAnimations",o.clampAnimations,r,i,n),_e(_n,s,"shadows",o.shadows,r,i,n),_e(Je,s,"heightReference",o.heightReference,r,i,n),_e(D,s,"silhouetteColor",o.silhouetteColor,r,i,n),_e(Number,s,"silhouetteSize",o.silhouetteSize,r,i,n),_e(D,s,"color",o.color,r,i,n),_e(pc,s,"colorBlendMode",o.colorBlendMode,r,i,n),_e(Number,s,"colorBlendAmount",o.colorBlendAmount,r,i,n),_e(wt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n);let a,c,d=o.nodeTransformations;if(l(d))if(Array.isArray(d))for(a=0,c=d.length;a<c;++a)Tme(s,d[a],r,i,n);else Tme(s,d,r,i,n);let u=o.articulations;if(l(u))if(Array.isArray(u))for(a=0,c=u.length;a<c;++a)Sme(s,u[a],r,i,n);else Sme(s,u,r,i,n)}function Tme(e,t,n,i,o){let r=ur(t.interval);l(n)&&(l(r)?r=Ln.intersect(r,n,sT):r=n);let s=e.nodeTransformations,a=Object.keys(t);for(let c=0,d=a.length;c<d;++c){let u=a[c];if(u==="interval")continue;let h=t[u];if(!l(h))continue;l(s)||(e.nodeTransformations=s=new zc),s.hasProperty(u)||s.addProperty(u);let p=s[u];l(p)||(s[u]=p=new Bx),_e(m,p,"translation",h.translation,r,i,o),_e(ve,p,"rotation",h.rotation,r,i,o),_e(m,p,"scale",h.scale,r,i,o)}}function Sme(e,t,n,i,o){let r=ur(t.interval);l(n)&&(l(r)?r=Ln.intersect(r,n,sT):r=n);let s=e.articulations,a=Object.keys(t);for(let c=0,d=a.length;c<d;++c){let u=a[c];if(u==="interval")continue;let h=t[u];l(h)&&(l(s)||(e.articulations=s=new zc),s.hasProperty(u)||s.addProperty(u),_e(Number,s,u,h,r,i,o))}}function I6e(e,t,n,i){let o=t.path;if(!l(o))return;let r=ur(o.interval),s=e.path;l(s)||(e.path=s=new Dp),_e(Boolean,s,"show",o.show,r,i,n),_e(Number,s,"leadTime",o.leadTime,r,i,n),_e(Number,s,"trailTime",o.trailTime,r,i,n),_e(Number,s,"width",o.width,r,i,n),_e(Number,s,"resolution",o.resolution,r,i,n),Nd(s,"material",o.material,r,i,n),_e(wt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function X6e(e,t,n,i){let o=t.point;if(!l(o))return;let r=ur(o.interval),s=e.point;l(s)||(e.point=s=new Yx),_e(Boolean,s,"show",o.show,r,i,n),_e(Number,s,"pixelSize",o.pixelSize,r,i,n),_e(Je,s,"heightReference",o.heightReference,r,i,n),_e(D,s,"color",o.color,r,i,n),_e(D,s,"outlineColor",o.outlineColor,r,i,n),_e(Number,s,"outlineWidth",o.outlineWidth,r,i,n),_e(kt,s,"scaleByDistance",o.scaleByDistance,r,i,n),_e(kt,s,"translucencyByDistance",o.translucencyByDistance,r,i,n),_e(wt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),_e(Number,s,"disableDepthTestDistance",o.disableDepthTestDistance,r,i,n)}function q2(e){this.polygon=e,this._definitionChanged=new be}Object.defineProperties(q2.prototype,{isConstant:{get:function(){let e=this.polygon._positions,t=this.polygon._holes;return(!l(e)||e.isConstant)&&(!l(t)||t.isConstant)}},definitionChanged:{get:function(){return this._definitionChanged}}});q2.prototype.getValue=function(e,t){let n;l(this.polygon._positions)&&(n=this.polygon._positions.getValue(e));let i;return l(this.polygon._holes)&&(i=this.polygon._holes.getValue(e),l(i)&&(i=i.map(function(o){return new Fa(o)}))),l(t)?(t.positions=n,t.holes=i,t):new Fa(n,i)};q2.prototype.equals=function(e){return this===e||e instanceof q2&&J.equals(this.polygon._positions,e.polygon._positions)&&J.equals(this.polygon._holes,e.polygon._holes)};function W6e(e,t,n,i){let o=t.polygon;if(!l(o))return;let r=ur(o.interval),s=e.polygon;l(s)||(e.polygon=s=new km),_e(Boolean,s,"show",o.show,r,i,n),ev(s,"_positions",o.positions,n),g6e(s,"_holes",o.holes,n),(l(s._positions)||l(s._holes))&&(s.hierarchy=new q2(s)),_e(Number,s,"height",o.height,r,i,n),_e(Je,s,"heightReference",o.heightReference,r,i,n),_e(Number,s,"extrudedHeight",o.extrudedHeight,r,i,n),_e(Je,s,"extrudedHeightReference",o.extrudedHeightReference,r,i,n),_e($u,s,"stRotation",o.stRotation,r,i,n),_e(Number,s,"granularity",o.granularity,r,i,n),_e(Boolean,s,"fill",o.fill,r,i,n),Nd(s,"material",o.material,r,i,n),_e(Boolean,s,"outline",o.outline,r,i,n),_e(D,s,"outlineColor",o.outlineColor,r,i,n),_e(Number,s,"outlineWidth",o.outlineWidth,r,i,n),_e(Boolean,s,"perPositionHeight",o.perPositionHeight,r,i,n),_e(Boolean,s,"closeTop",o.closeTop,r,i,n),_e(Boolean,s,"closeBottom",o.closeBottom,r,i,n),_e(en,s,"arcType",o.arcType,r,i,n),_e(_n,s,"shadows",o.shadows,r,i,n),_e(wt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),_e(Un,s,"classificationType",o.classificationType,r,i,n),_e(Number,s,"zIndex",o.zIndex,r,i,n)}function P6e(e){return e?en.GEODESIC:en.NONE}function v6e(e,t,n,i){let o=t.polyline;if(!l(o))return;let r=ur(o.interval),s=e.polyline;if(l(s)||(e.polyline=s=new dc),_e(Boolean,s,"show",o.show,r,i,n),ev(s,"positions",o.positions,n),_e(Number,s,"width",o.width,r,i,n),_e(Number,s,"granularity",o.granularity,r,i,n),Nd(s,"material",o.material,r,i,n),Nd(s,"depthFailMaterial",o.depthFailMaterial,r,i,n),_e(en,s,"arcType",o.arcType,r,i,n),_e(Boolean,s,"clampToGround",o.clampToGround,r,i,n),_e(_n,s,"shadows",o.shadows,r,i,n),_e(wt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),_e(Un,s,"classificationType",o.classificationType,r,i,n),_e(Number,s,"zIndex",o.zIndex,r,i,n),l(o.followSurface)&&!l(o.arcType)){let a={};_e(Boolean,a,"followSurface",o.followSurface,r,i,n),s.arcType=j7e(a.followSurface,P6e)}}function w6e(e,t,n,i){let o=t.polylineVolume;if(!l(o))return;let r=ur(o.interval),s=e.polylineVolume;l(s)||(e.polylineVolume=s=new zx),ev(s,"positions",o.positions,n),y6e(s,"shape",o.shape,n),_e(Boolean,s,"show",o.show,r,i,n),_e(vi,s,"cornerType",o.cornerType,r,i,n),_e(Boolean,s,"fill",o.fill,r,i,n),Nd(s,"material",o.material,r,i,n),_e(Boolean,s,"outline",o.outline,r,i,n),_e(D,s,"outlineColor",o.outlineColor,r,i,n),_e(Number,s,"outlineWidth",o.outlineWidth,r,i,n),_e(Number,s,"granularity",o.granularity,r,i,n),_e(_n,s,"shadows",o.shadows,r,i,n),_e(wt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function F6e(e,t,n,i){let o=t.rectangle;if(!l(o))return;let r=ur(o.interval),s=e.rectangle;l(s)||(e.rectangle=s=new Um),_e(Boolean,s,"show",o.show,r,i,n),_e(ce,s,"coordinates",o.coordinates,r,i,n),_e(Number,s,"height",o.height,r,i,n),_e(Je,s,"heightReference",o.heightReference,r,i,n),_e(Number,s,"extrudedHeight",o.extrudedHeight,r,i,n),_e(Je,s,"extrudedHeightReference",o.extrudedHeightReference,r,i,n),_e($u,s,"rotation",o.rotation,r,i,n),_e($u,s,"stRotation",o.stRotation,r,i,n),_e(Number,s,"granularity",o.granularity,r,i,n),_e(Boolean,s,"fill",o.fill,r,i,n),Nd(s,"material",o.material,r,i,n),_e(Boolean,s,"outline",o.outline,r,i,n),_e(D,s,"outlineColor",o.outlineColor,r,i,n),_e(Number,s,"outlineWidth",o.outlineWidth,r,i,n),_e(_n,s,"shadows",o.shadows,r,i,n),_e(wt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n),_e(Un,s,"classificationType",o.classificationType,r,i,n),_e(Number,s,"zIndex",o.zIndex,r,i,n)}function A6e(e,t,n,i){let o=t.tileset;if(!l(o))return;let r=ur(o.interval),s=e.tileset;l(s)||(e.tileset=s=new Ox),_e(Boolean,s,"show",o.show,r,i,n),_e($2.default,s,"uri",o.uri,r,i,n),_e(Number,s,"maximumScreenSpaceError",o.maximumScreenSpaceError,r,i,n)}function M6e(e,t,n,i){let o=t.wall;if(!l(o))return;let r=ur(o.interval),s=e.wall;l(s)||(e.wall=s=new Bp),_e(Boolean,s,"show",o.show,r,i,n),ev(s,"positions",o.positions,n),yme(s,"minimumHeights",o.minimumHeights,n),yme(s,"maximumHeights",o.maximumHeights,n),_e(Number,s,"granularity",o.granularity,r,i,n),_e(Boolean,s,"fill",o.fill,r,i,n),Nd(s,"material",o.material,r,i,n),_e(Boolean,s,"outline",o.outline,r,i,n),_e(D,s,"outlineColor",o.outlineColor,r,i,n),_e(Number,s,"outlineWidth",o.outlineWidth,r,i,n),_e(_n,s,"shadows",o.shadows,r,i,n),_e(wt,s,"distanceDisplayCondition",o.distanceDisplayCondition,r,i,n)}function Cme(e,t,n,i,o){let r=e.id;if(l(r)||(r=zn()),hJ=r,!l(o._version)&&r!=="document")throw new ae("The first CZML packet is required to be the document object.");if(e.delete===!0)t.removeById(r);else if(r==="document")L6e(e,o);else{let s=t.getOrCreateEntity(r),a=e.parent;l(a)&&(s.parent=t.getOrCreateEntity(a));for(let c=n.length-1;c>-1;c--)n[c](s,e,t,i)}hJ=void 0}function N6e(e){let t,n=e._documentPacket.clock;if(!l(n)){if(!l(e._clock)){let o=e._entityCollection.computeAvailability();if(!o.start.equals(Be.MINIMUM_VALUE)){let r=o.start,s=o.stop,a=q.secondsDifference(s,r),c=Math.round(a/120);return t=new _h,t.startTime=q.clone(r),t.stopTime=q.clone(s),t.clockRange=Or.LOOP_STOP,t.multiplier=c,t.currentTime=q.clone(r),t.clockStep=fo.SYSTEM_CLOCK_MULTIPLIER,e._clock=t,!0}}return!1}l(e._clock)?t=e._clock.clone():(t=new _h,t.startTime=Be.MINIMUM_VALUE.clone(),t.stopTime=Be.MAXIMUM_VALUE.clone(),t.currentTime=Be.MINIMUM_VALUE.clone(),t.clockRange=Or.LOOP_STOP,t.clockStep=fo.SYSTEM_CLOCK_MULTIPLIER,t.multiplier=1);let i=ur(n.interval);return l(i)&&(t.startTime=i.start,t.stopTime=i.stop),l(n.currentTime)&&(t.currentTime=q.fromIso8601(n.currentTime)),l(n.range)&&(t.clockRange=Or[n.range]??Or.LOOP_STOP),l(n.step)&&(t.clockStep=fo[n.step]??fo.SYSTEM_CLOCK_MULTIPLIER),l(n.multiplier)&&(t.multiplier=n.multiplier),t.equals(e._clock)?!1:(e._clock=t.clone(e._clock),!0)}function Zme(e,t,n,i){n=n??Y.EMPTY_OBJECT;let o=t,r=n.sourceUri,s=n.credit;if(typeof s=="string"&&(s=new Ct(s)),e._credit=s,typeof t=="string"||t instanceof Ze){t=Ze.createIfNeeded(t),o=t.fetchJson(),r=r??t.clone();let a=e._resourceCredits,c=t.credits;if(l(c)){let d=c.length;for(let u=0;u<d;u++)a.push(c[u])}}return r=Ze.createIfNeeded(r),Br.setLoading(e,!0),Promise.resolve(o).then(function(a){return k6e(e,a,r,i)}).catch(function(a){return Br.setLoading(e,!1),e._error.raiseEvent(e,a),console.log(a),Promise.reject(a)})}function k6e(e,t,n,i){Br.setLoading(e,!0);let o=e._entityCollection;i&&(e._version=void 0,e._documentPacket=new Gme,o.removeAll()),gs._processCzml(t,o,n,void 0,e);let r=N6e(e),s=e._documentPacket;return l(s.name)&&e._name!==s.name?(e._name=s.name,r=!0):!l(e._name)&&l(n)&&(e._name=Db(n.getUrlComponent()),r=!0),Br.setLoading(e,!1),r&&e._changed.raiseEvent(e),e}function Gme(){this.name=void 0,this.clock=void 0}function gs(e){this._name=e,this._changed=new be,this._error=new be,this._isLoading=!1,this._loading=new be,this._clock=void 0,this._documentPacket=new Gme,this._version=void 0,this._entityCollection=new Qs(this),this._entityCluster=new vd,this._credit=void 0,this._resourceCredits=[]}gs.load=function(e,t){return new gs().load(e,t)};Object.defineProperties(gs.prototype,{name:{get:function(){return this._name}},clock:{get:function(){return this._clock}},entities:{get:function(){return this._entityCollection}},isLoading:{get:function(){return this._isLoading}},changedEvent:{get:function(){return this._changed}},errorEvent:{get:function(){return this._error}},loadingEvent:{get:function(){return this._loading}},show:{get:function(){return this._entityCollection.show},set:function(e){this._entityCollection.show=e}},clustering:{get:function(){return this._entityCluster},set:function(e){this._entityCluster=e}},credit:{get:function(){return this._credit}}});gs.updaters=[T6e,S6e,C6e,V6e,R6e,Z6e,G6e,E6e,c6e,l6e,I6e,X6e,W6e,v6e,w6e,h6e,F6e,d6e,A6e,u6e,M6e,m6e,x6e];gs.registerUpdater=function(e){gs.updaters.includes(e)||gs.updaters.push(e)};gs.unregisterUpdater=function(e){if(gs.updaters.includes(e)){let t=gs.updaters.indexOf(e);gs.updaters.splice(t,1)}};gs.prototype.process=function(e,t){return Zme(this,e,t,!1)};gs.prototype.load=function(e,t){return Zme(this,e,t,!0)};gs.prototype.update=function(e){return!0};gs.processPacketData=_e;gs.processPositionPacketData=Rme;gs.processMaterialPacketData=Nd;gs._processCzml=function(e,t,n,i,o){if(i=i??gs.updaters,Array.isArray(e))for(let r=0,s=e.length;r<s;++r)Cme(e[r],t,i,n,o);else Cme(e,t,i,n,o)};var tv=gs;var V6n=_(T(),1);function cl(){this._dataSources=[],this._dataSourceAdded=new be,this._dataSourceRemoved=new be,this._dataSourceMoved=new be}Object.defineProperties(cl.prototype,{length:{get:function(){return this._dataSources.length}},dataSourceAdded:{get:function(){return this._dataSourceAdded}},dataSourceRemoved:{get:function(){return this._dataSourceRemoved}},dataSourceMoved:{get:function(){return this._dataSourceMoved}}});cl.prototype.add=function(e){let t=this,n=this._dataSources;return Promise.resolve(e).then(function(i){return n===t._dataSources&&(t._dataSources.push(i),t._dataSourceAdded.raiseEvent(t,i)),i})};cl.prototype.remove=function(e,t){t=t??!1;let n=this._dataSources.indexOf(e);return n!==-1?(this._dataSources.splice(n,1),this._dataSourceRemoved.raiseEvent(this,e),t&&typeof e.destroy=="function"&&e.destroy(),!0):!1};cl.prototype.removeAll=function(e){e=e??!1;let t=this._dataSources;for(let n=0,i=t.length;n<i;++n){let o=t[n];this._dataSourceRemoved.raiseEvent(this,o),e&&typeof o.destroy=="function"&&o.destroy()}this._dataSources=[]};cl.prototype.contains=function(e){return this.indexOf(e)!==-1};cl.prototype.indexOf=function(e){return this._dataSources.indexOf(e)};cl.prototype.get=function(e){return this._dataSources[e]};cl.prototype.getByName=function(e){return this._dataSources.filter(function(t){return t.name===e})};function Nk(e,t){return e.indexOf(t)}function Eme(e,t,n){let i=e._dataSources,o=i.length-1;if(t=X.clamp(t,0,o),n=X.clamp(n,0,o),t===n)return;let r=i[t];i[t]=i[n],i[n]=r,e.dataSourceMoved.raiseEvent(r,n,t)}cl.prototype.raise=function(e){let t=Nk(this._dataSources,e);Eme(this,t,t+1)};cl.prototype.lower=function(e){let t=Nk(this._dataSources,e);Eme(this,t,t-1)};cl.prototype.raiseToTop=function(e){let t=Nk(this._dataSources,e);t!==this._dataSources.length-1&&(this._dataSources.splice(t,1),this._dataSources.push(e),this.dataSourceMoved.raiseEvent(e,this._dataSources.length-1,t))};cl.prototype.lowerToBottom=function(e){let t=Nk(this._dataSources,e);t!==0&&(this._dataSources.splice(t,1),this._dataSources.splice(0,0,e),this.dataSourceMoved.raiseEvent(e,0,t))};cl.prototype.isDestroyed=function(){return!1};cl.prototype.destroy=function(){return this.removeAll(!0),me(this)};var nv=cl;var Mdi=_(T(),1);var F6n=_(T(),1);var X6n=_(T(),1);function Ta(e){e=e??Y.EMPTY_OBJECT,this._primitives=[],this._guid=zn(),this._primitiveAdded=new be,this._primitiveRemoved=new be,this._zIndex=void 0,this.show=e.show??!0,this.destroyPrimitives=e.destroyPrimitives??!0}Object.defineProperties(Ta.prototype,{length:{get:function(){return this._primitives.length}},primitiveAdded:{get:function(){return this._primitiveAdded}},primitiveRemoved:{get:function(){return this._primitiveRemoved}}});Ta.prototype.add=function(e,t){let n=l(t),i=e._external=e._external||{},o=i._composites=i._composites||{};return o[this._guid]={collection:this},n?this._primitives.splice(t,0,e):this._primitives.push(e),this._primitiveAdded.raiseEvent(e),e};Ta.prototype.remove=function(e){if(this.contains(e)){let t=this._primitives.indexOf(e);if(t!==-1)return this._primitives.splice(t,1),delete e._external._composites[this._guid],this.destroyPrimitives&&e.destroy(),this._primitiveRemoved.raiseEvent(e),!0}return!1};Ta.prototype.removeAndDestroy=function(e){let t=this.remove(e);return t&&!this.destroyPrimitives&&e.destroy(),t};Ta.prototype.removeAll=function(){let e=this._primitives,t=e.length;for(let n=0;n<t;++n)delete e[n]._external._composites[this._guid],this.destroyPrimitives&&e[n].destroy(),this._primitiveRemoved.raiseEvent(e[n]);this._primitives=[]};Ta.prototype.contains=function(e){return!!(l(e)&&e._external&&e._external._composites&&e._external._composites[this._guid])};function kk(e,t){return e._primitives.indexOf(t)}Ta.prototype.raise=function(e){if(l(e)){let t=kk(this,e),n=this._primitives;if(t!==n.length-1){let i=n[t];n[t]=n[t+1],n[t+1]=i}}};Ta.prototype.raiseToTop=function(e){if(l(e)){let t=kk(this,e),n=this._primitives;t!==n.length-1&&(n.splice(t,1),n.push(e))}};Ta.prototype.lower=function(e){if(l(e)){let t=kk(this,e),n=this._primitives;if(t!==0){let i=n[t];n[t]=n[t-1],n[t-1]=i}}};Ta.prototype.lowerToBottom=function(e){if(l(e)){let t=kk(this,e),n=this._primitives;t!==0&&(n.splice(t,1),n.unshift(e))}};Ta.prototype.get=function(e){return this._primitives[e]};Ta.prototype.update=function(e){if(!this.show)return;let t=this._primitives;for(let n=0;n<t.length;++n)t[n].update(e)};Ta.prototype.prePassesUpdate=function(e){let t=this._primitives;for(let n=0;n<t.length;++n){let i=t[n];l(i.prePassesUpdate)&&i.prePassesUpdate(e)}};Ta.prototype.updateForPass=function(e,t){let n=this._primitives;for(let i=0;i<n.length;++i){let o=n[i];l(o.updateForPass)&&o.updateForPass(e,t)}};Ta.prototype.postPassesUpdate=function(e){let t=this._primitives;for(let n=0;n<t.length;++n){let i=t[n];l(i.postPassesUpdate)&&i.postPassesUpdate(e)}};Ta.prototype.isDestroyed=function(){return!1};Ta.prototype.destroy=function(){return this.removeAll(),me(this)};var ll=Ta;function Wf(){this._length=0,this._collections={},this._collectionsArray=[],this.show=!0}Object.defineProperties(Wf.prototype,{length:{get:function(){return this._length}}});Wf.prototype.add=function(e,t){t=t??0;let n=this._collections[t];if(!l(n)){n=new ll({destroyPrimitives:!1}),n._zIndex=t,this._collections[t]=n;let i=this._collectionsArray,o=0;for(;o<i.length&&i[o]._zIndex<t;)o++;i.splice(o,0,n)}return n.add(e),this._length++,e._zIndex=t,e};Wf.prototype.set=function(e,t){return t===e._zIndex||(this.remove(e,!0),this.add(e,t)),e};Wf.prototype.remove=function(e,t){if(this.contains(e)){let n=e._zIndex,i=this._collections[n],o;return t?o=i.remove(e):o=i.removeAndDestroy(e),o&&this._length--,i.length===0&&(this._collectionsArray.splice(this._collectionsArray.indexOf(i),1),this._collections[n]=void 0,i.destroy()),o}return!1};Wf.prototype.removeAll=function(){let e=this._collectionsArray;for(let t=0;t<e.length;t++){let n=e[t];n.destroyPrimitives=!0,n.destroy()}this._collections={},this._collectionsArray=[],this._length=0};Wf.prototype.contains=function(e){if(!l(e))return!1;let t=this._collections[e._zIndex];return l(t)&&t.contains(e)};Wf.prototype.update=function(e){if(!this.show)return;let t=this._collectionsArray;for(let n=0;n<t.length;n++)t[n].update(e)};Wf.prototype.isDestroyed=function(){return!1};Wf.prototype.destroy=function(){return this.removeAll(),me(this)};var iv=Wf;var pai=_(T(),1);var U6n=_(T(),1);function j1(e,t){this._primitives=e,this._orderedGroundPrimitives=t,this._dynamicUpdaters=new Gt}j1.prototype.add=function(e,t){this._dynamicUpdaters.set(t.id,t.createDynamicUpdater(this._primitives,this._orderedGroundPrimitives))};j1.prototype.remove=function(e){let t=e.id,n=this._dynamicUpdaters.get(t);l(n)&&(this._dynamicUpdaters.remove(t),n.destroy())};j1.prototype.update=function(e){let t=this._dynamicUpdaters.values;for(let n=0,i=t.length;n<i;n++)t[n].update(e);return!0};j1.prototype.removeAllPrimitives=function(){let e=this._dynamicUpdaters.values;for(let t=0,n=e.length;t<n;t++)e[t].destroy();this._dynamicUpdaters.removeAll()};j1.prototype.getBoundingSphere=function(e,t){return e=this._dynamicUpdaters.get(e.id),l(e)&&l(e.getBoundingSphere)?e.getBoundingSphere(t):dt.FAILED};var aT=j1;var Rri=_(T(),1);var i$n=_(T(),1);var yqn=_(T(),1);var H6n=_(T(),1);var gJ={},Uk=new m,Ime=new m,Xme=new ve,Wme=new $;function q1(e,t,n,i,o,r,s,a,c,d){let u=e+t;m.multiplyByScalar(i,Math.cos(u),Uk),m.multiplyByScalar(n,Math.sin(u),Ime),m.add(Uk,Ime,Uk);let h=Math.cos(e);h=h*h;let p=Math.sin(e);p=p*p;let f=r/Math.sqrt(s*h+o*p)/a;return ve.fromAxisAngle(Uk,f,Xme),$.fromQuaternion(Xme,Wme),$.multiplyByVector(Wme,c,d),m.normalize(d,d),m.multiplyByScalar(d,a,d),d}var Pme=new m,vme=new m,bJ=new m,U6e=new m;gJ.raisePositionsToHeight=function(e,t,n){let i=t.ellipsoid,o=t.height,r=t.extrudedHeight,s=n?e.length/3*2:e.length/3,a=new Float64Array(s*3),c=e.length,d=n?c:0;for(let u=0;u<c;u+=3){let h=u+1,p=u+2,g=m.fromArray(e,u,Pme);i.scaleToGeodeticSurface(g,g);let f=m.clone(g,vme),y=i.geodeticSurfaceNormal(g,U6e),x=m.multiplyByScalar(y,o,bJ);m.add(g,x,g),n&&(m.multiplyByScalar(y,r,x),m.add(f,x,f),a[u+d]=f.x,a[h+d]=f.y,a[p+d]=f.z),a[u]=g.x,a[h]=g.y,a[p]=g.z}return a};var D6e=new m,B6e=new m,O6e=new m;gJ.computeEllipsePositions=function(e,t,n){let i=e.semiMinorAxis,o=e.semiMajorAxis,r=e.rotation,s=e.center,a=e.granularity*8,c=i*i,d=o*o,u=o*i,h=m.magnitude(s),p=m.normalize(s,D6e),g=m.cross(m.UNIT_Z,s,B6e);g=m.normalize(g,g);let f=m.cross(p,g,O6e),y=1+Math.ceil(X.PI_OVER_TWO/a),x=X.PI_OVER_TWO/(y-1),S=X.PI_OVER_TWO-y*x;S<0&&(y-=Math.ceil(Math.abs(S)/x));let C=2*(y*(y+2)),V=t?new Array(C*3):void 0,L=0,Z=Pme,E=vme,P=y*4*3,W=P-1,v=0,A=n?new Array(P):void 0,b,R,G,I,w;for(S=X.PI_OVER_TWO,Z=q1(S,r,f,g,c,u,d,h,p,Z),t&&(V[L++]=Z.x,V[L++]=Z.y,V[L++]=Z.z),n&&(A[W--]=Z.z,A[W--]=Z.y,A[W--]=Z.x),S=X.PI_OVER_TWO-x,b=1;b<y+1;++b){if(Z=q1(S,r,f,g,c,u,d,h,p,Z),E=q1(Math.PI-S,r,f,g,c,u,d,h,p,E),t){for(V[L++]=Z.x,V[L++]=Z.y,V[L++]=Z.z,G=2*b+2,R=1;R<G-1;++R)I=R/(G-1),w=m.lerp(Z,E,I,bJ),V[L++]=w.x,V[L++]=w.y,V[L++]=w.z;V[L++]=E.x,V[L++]=E.y,V[L++]=E.z}n&&(A[W--]=Z.z,A[W--]=Z.y,A[W--]=Z.x,A[v++]=E.x,A[v++]=E.y,A[v++]=E.z),S=X.PI_OVER_TWO-(b+1)*x}for(b=y;b>1;--b){if(S=X.PI_OVER_TWO-(b-1)*x,Z=q1(-S,r,f,g,c,u,d,h,p,Z),E=q1(S+Math.PI,r,f,g,c,u,d,h,p,E),t){for(V[L++]=Z.x,V[L++]=Z.y,V[L++]=Z.z,G=2*(b-1)+2,R=1;R<G-1;++R)I=R/(G-1),w=m.lerp(Z,E,I,bJ),V[L++]=w.x,V[L++]=w.y,V[L++]=w.z;V[L++]=E.x,V[L++]=E.y,V[L++]=E.z}n&&(A[W--]=Z.z,A[W--]=Z.y,A[W--]=Z.x,A[v++]=E.x,A[v++]=E.y,A[v++]=E.z)}S=X.PI_OVER_TWO,Z=q1(-S,r,f,g,c,u,d,h,p,Z);let M={};return t&&(V[L++]=Z.x,V[L++]=Z.y,V[L++]=Z.z,M.positions=V,M.numPts=y),n&&(A[W--]=Z.z,A[W--]=Z.y,A[W--]=Z.x,M.outerPositions=A),M};var Hl=gJ;var $1=new m,yJ=new m,xJ=new m,wme=new m,Is=new U,Fme=new $,Y6e=new $,_J=new ve,Ame=new m,Mme=new m,Nme=new m,Ok=new he,kme=new m,Ume=new U,Dme=new U;function Bme(e,t,n){let i=t.vertexFormat,o=t.center,r=t.semiMajorAxis,s=t.semiMinorAxis,a=t.ellipsoid,c=t.stRotation,d=n?e.length/3*2:e.length/3,u=t.shadowVolume,h=i.st?new Float32Array(d*2):void 0,p=i.normal?new Float32Array(d*3):void 0,g=i.tangent?new Float32Array(d*3):void 0,f=i.bitangent?new Float32Array(d*3):void 0,y=u?new Float32Array(d*3):void 0,x=0,S=Ame,C=Mme,V=Nme,L=new Ei(a),Z=L.project(a.cartesianToCartographic(o,Ok),kme),E=a.scaleToGeodeticSurface(o,$1);a.geodeticSurfaceNormal(E,E);let P=Fme,W=Y6e;if(c!==0){let w=ve.fromAxisAngle(E,c,_J);P=$.fromQuaternion(w,P),w=ve.fromAxisAngle(E,-c,_J),W=$.fromQuaternion(w,W)}else P=$.clone($.IDENTITY,P),W=$.clone($.IDENTITY,W);let v=U.fromElements(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Ume),A=U.fromElements(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Dme),b=e.length,R=n?b:0,G=R/3*2;for(let w=0;w<b;w+=3){let M=w+1,B=w+2,k=m.fromArray(e,w,$1);if(i.st){let O=$.multiplyByVector(P,k,yJ),N=L.project(a.cartesianToCartographic(O,Ok),xJ);m.subtract(N,Z,N),Is.x=(N.x+r)/(2*r),Is.y=(N.y+s)/(2*s),v.x=Math.min(Is.x,v.x),v.y=Math.min(Is.y,v.y),A.x=Math.max(Is.x,A.x),A.y=Math.max(Is.y,A.y),n&&(h[x+G]=Is.x,h[x+1+G]=Is.y),h[x++]=Is.x,h[x++]=Is.y}(i.normal||i.tangent||i.bitangent||u)&&(S=a.geodeticSurfaceNormal(k,S),u&&(y[w+R]=-S.x,y[M+R]=-S.y,y[B+R]=-S.z),(i.normal||i.tangent||i.bitangent)&&((i.tangent||i.bitangent)&&(C=m.normalize(m.cross(m.UNIT_Z,S,C),C),$.multiplyByVector(W,C,C)),i.normal&&(p[w]=S.x,p[M]=S.y,p[B]=S.z,n&&(p[w+R]=-S.x,p[M+R]=-S.y,p[B+R]=-S.z)),i.tangent&&(g[w]=C.x,g[M]=C.y,g[B]=C.z,n&&(g[w+R]=-C.x,g[M+R]=-C.y,g[B+R]=-C.z)),i.bitangent&&(V=m.normalize(m.cross(S,C,V),V),f[w]=V.x,f[M]=V.y,f[B]=V.z,n&&(f[w+R]=V.x,f[M+R]=V.y,f[B+R]=V.z))))}if(i.st){b=h.length;for(let w=0;w<b;w+=2)h[w]=(h[w]-v.x)/(A.x-v.x),h[w+1]=(h[w+1]-v.y)/(A.y-v.y)}let I=new mn;if(i.position){let w=Hl.raisePositionsToHeight(e,t,n);I.position=new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:w})}if(i.st&&(I.st=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:h})),i.normal&&(I.normal=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:p})),i.tangent&&(I.tangent=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:g})),i.bitangent&&(I.bitangent=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:f})),u&&(I.extrudeDirection=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:y})),n&&l(t.offsetAttribute)){let w=new Uint8Array(d);if(t.offsetAttribute===rn.TOP)w=w.fill(1,0,d/2);else{let M=t.offsetAttribute===rn.NONE?0:1;w=w.fill(M)}I.applyOffset=new Ge({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:w})}return I}function Ome(e){let t=new Array(12*(e*(e+1))-6),n=0,i,o,r,s,a;for(i=0,r=1,s=0;s<3;s++)t[n++]=r++,t[n++]=i,t[n++]=r;for(s=2;s<e+1;++s){for(r=s*(s+1)-1,i=(s-1)*s-1,t[n++]=r++,t[n++]=i,t[n++]=r,o=2*s,a=0;a<o-1;++a)t[n++]=r,t[n++]=i++,t[n++]=i,t[n++]=r++,t[n++]=i,t[n++]=r;t[n++]=r++,t[n++]=i,t[n++]=r}for(o=e*2,++r,++i,s=0;s<o-1;++s)t[n++]=r,t[n++]=i++,t[n++]=i,t[n++]=r++,t[n++]=i,t[n++]=r;for(t[n++]=r,t[n++]=i++,t[n++]=i,t[n++]=r++,t[n++]=i++,t[n++]=i,++i,s=e-1;s>1;--s){for(t[n++]=i++,t[n++]=i,t[n++]=r,o=2*s,a=0;a<o-1;++a)t[n++]=r,t[n++]=i++,t[n++]=i,t[n++]=r++,t[n++]=i,t[n++]=r;t[n++]=i++,t[n++]=i++,t[n++]=r++}for(s=0;s<3;s++)t[n++]=i++,t[n++]=i,t[n++]=r;return t}var cT=new m;function z6e(e){let t=e.center;cT=m.multiplyByScalar(e.ellipsoid.geodeticSurfaceNormal(t,cT),e.height,cT),cT=m.add(t,cT,cT);let n=new le(cT,e.semiMajorAxis),i=Hl.computeEllipsePositions(e,!0,!1),o=i.positions,r=i.numPts,s=Bme(o,e,!1),a=Ome(r);return a=Ae.createTypedArray(o.length/3,a),{boundingSphere:n,attributes:s,indices:a}}function H6e(e,t){let n=t.vertexFormat,i=t.center,o=t.semiMajorAxis,r=t.semiMinorAxis,s=t.ellipsoid,a=t.height,c=t.extrudedHeight,d=t.stRotation,u=e.length/3*2,h=new Float64Array(u*3),p=n.st?new Float32Array(u*2):void 0,g=n.normal?new Float32Array(u*3):void 0,f=n.tangent?new Float32Array(u*3):void 0,y=n.bitangent?new Float32Array(u*3):void 0,x=t.shadowVolume,S=x?new Float32Array(u*3):void 0,C=0,V=Ame,L=Mme,Z=Nme,E=new Ei(s),P=E.project(s.cartesianToCartographic(i,Ok),kme),W=s.scaleToGeodeticSurface(i,$1);s.geodeticSurfaceNormal(W,W);let v=ve.fromAxisAngle(W,d,_J),A=$.fromQuaternion(v,Fme),b=U.fromElements(Number.POSITIVE_INFINITY,Number.POSITIVE_INFINITY,Ume),R=U.fromElements(Number.NEGATIVE_INFINITY,Number.NEGATIVE_INFINITY,Dme),G=e.length,I=G/3*2;for(let M=0;M<G;M+=3){let B=M+1,k=M+2,O=m.fromArray(e,M,$1),N;if(n.st){let K=$.multiplyByVector(A,O,yJ),te=E.project(s.cartesianToCartographic(K,Ok),xJ);m.subtract(te,P,te),Is.x=(te.x+o)/(2*o),Is.y=(te.y+r)/(2*r),b.x=Math.min(Is.x,b.x),b.y=Math.min(Is.y,b.y),R.x=Math.max(Is.x,R.x),R.y=Math.max(Is.y,R.y),p[C+I]=Is.x,p[C+1+I]=Is.y,p[C++]=Is.x,p[C++]=Is.y}O=s.scaleToGeodeticSurface(O,O),N=m.clone(O,yJ),V=s.geodeticSurfaceNormal(O,V),x&&(S[M+G]=-V.x,S[B+G]=-V.y,S[k+G]=-V.z);let z=m.multiplyByScalar(V,a,wme);if(O=m.add(O,z,O),z=m.multiplyByScalar(V,c,z),N=m.add(N,z,N),n.position&&(h[M+G]=N.x,h[B+G]=N.y,h[k+G]=N.z,h[M]=O.x,h[B]=O.y,h[k]=O.z),n.normal||n.tangent||n.bitangent){Z=m.clone(V,Z);let K=m.fromArray(e,(M+3)%G,wme);m.subtract(K,O,K);let te=m.subtract(N,O,xJ);V=m.normalize(m.cross(te,K,V),V),n.normal&&(g[M]=V.x,g[B]=V.y,g[k]=V.z,g[M+G]=V.x,g[B+G]=V.y,g[k+G]=V.z),n.tangent&&(L=m.normalize(m.cross(Z,V,L),L),f[M]=L.x,f[B]=L.y,f[k]=L.z,f[M+G]=L.x,f[M+1+G]=L.y,f[M+2+G]=L.z),n.bitangent&&(y[M]=Z.x,y[B]=Z.y,y[k]=Z.z,y[M+G]=Z.x,y[B+G]=Z.y,y[k+G]=Z.z)}}if(n.st){G=p.length;for(let M=0;M<G;M+=2)p[M]=(p[M]-b.x)/(R.x-b.x),p[M+1]=(p[M+1]-b.y)/(R.y-b.y)}let w=new mn;if(n.position&&(w.position=new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:h})),n.st&&(w.st=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:p})),n.normal&&(w.normal=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:g})),n.tangent&&(w.tangent=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:f})),n.bitangent&&(w.bitangent=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:y})),x&&(w.extrudeDirection=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:S})),l(t.offsetAttribute)){let M=new Uint8Array(u);if(t.offsetAttribute===rn.TOP)M=M.fill(1,0,u/2);else{let B=t.offsetAttribute===rn.NONE?0:1;M=M.fill(B)}w.applyOffset=new Ge({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:M})}return w}function K6e(e){let t=e.length/3,n=Ae.createTypedArray(t,t*6),i=0;for(let o=0;o<t;o++){let r=o,s=o+t,a=(r+1)%t,c=a+t;n[i++]=r,n[i++]=s,n[i++]=a,n[i++]=a,n[i++]=s,n[i++]=c}return n}var Dk=new le,Bk=new le;function J6e(e){let t=e.center,n=e.ellipsoid,i=e.semiMajorAxis,o=m.multiplyByScalar(n.geodeticSurfaceNormal(t,$1),e.height,$1);Dk.center=m.add(t,o,Dk.center),Dk.radius=i,o=m.multiplyByScalar(n.geodeticSurfaceNormal(t,o),e.extrudedHeight,o),Bk.center=m.add(t,o,Bk.center),Bk.radius=i;let r=Hl.computeEllipsePositions(e,!0,!0),s=r.positions,a=r.numPts,c=r.outerPositions,d=le.union(Dk,Bk),u=Bme(s,e,!0),h=Ome(a),p=h.length;h.length=p*2;let g=s.length/3;for(let L=0;L<p;L+=3)h[L+p]=h[L+2]+g,h[L+1+p]=h[L+1]+g,h[L+2+p]=h[L]+g;let f=Ae.createTypedArray(g*2/3,h),y=new lt({attributes:u,indices:f,primitiveType:we.TRIANGLES}),x=H6e(c,e);h=K6e(c);let S=Ae.createTypedArray(c.length*2/3,h),C=new lt({attributes:x,indices:S,primitiveType:we.TRIANGLES}),V=Fn.combineInstances([new Et({geometry:y}),new Et({geometry:C})]);return{boundingSphere:d,attributes:V[0].attributes,indices:V[0].indices}}function Yme(e,t,n,i,o,r,s){let c=Hl.computeEllipsePositions({center:e,semiMajorAxis:t,semiMinorAxis:n,rotation:i,granularity:o},!1,!0).outerPositions,d=c.length/3,u=new Array(d);for(let p=0;p<d;++p)u[p]=m.fromArray(c,p*3);let h=ce.fromCartesianArray(u,r,s);return h.width>X.PI&&(h.north=h.north>0?X.PI_OVER_TWO-X.EPSILON7:h.north,h.south=h.south<0?X.EPSILON7-X.PI_OVER_TWO:h.south,h.east=X.PI,h.west=-X.PI),h}function vf(e){e=e??Y.EMPTY_OBJECT;let t=e.center,n=e.ellipsoid??ne.default,i=e.semiMajorAxis,o=e.semiMinorAxis,r=e.granularity??X.RADIANS_PER_DEGREE,s=e.vertexFormat??Xe.DEFAULT,a=e.height??0,c=e.extrudedHeight??a;this._center=m.clone(t),this._semiMajorAxis=i,this._semiMinorAxis=o,this._ellipsoid=ne.clone(n),this._rotation=e.rotation??0,this._stRotation=e.stRotation??0,this._height=Math.max(c,a),this._granularity=r,this._vertexFormat=Xe.clone(s),this._extrudedHeight=Math.min(c,a),this._shadowVolume=e.shadowVolume??!1,this._workerName="createEllipseGeometry",this._offsetAttribute=e.offsetAttribute,this._rectangle=void 0,this._textureCoordinateRotationPoints=void 0}vf.packedLength=m.packedLength+ne.packedLength+Xe.packedLength+9;vf.pack=function(e,t,n){return n=n??0,m.pack(e._center,t,n),n+=m.packedLength,ne.pack(e._ellipsoid,t,n),n+=ne.packedLength,Xe.pack(e._vertexFormat,t,n),n+=Xe.packedLength,t[n++]=e._semiMajorAxis,t[n++]=e._semiMinorAxis,t[n++]=e._rotation,t[n++]=e._stRotation,t[n++]=e._height,t[n++]=e._granularity,t[n++]=e._extrudedHeight,t[n++]=e._shadowVolume?1:0,t[n]=e._offsetAttribute??-1,t};var zme=new m,Hme=new ne,Kme=new Xe,Pf={center:zme,ellipsoid:Hme,vertexFormat:Kme,semiMajorAxis:void 0,semiMinorAxis:void 0,rotation:void 0,stRotation:void 0,height:void 0,granularity:void 0,extrudedHeight:void 0,shadowVolume:void 0,offsetAttribute:void 0};vf.unpack=function(e,t,n){t=t??0;let i=m.unpack(e,t,zme);t+=m.packedLength;let o=ne.unpack(e,t,Hme);t+=ne.packedLength;let r=Xe.unpack(e,t,Kme);t+=Xe.packedLength;let s=e[t++],a=e[t++],c=e[t++],d=e[t++],u=e[t++],h=e[t++],p=e[t++],g=e[t++]===1,f=e[t];return l(n)?(n._center=m.clone(i,n._center),n._ellipsoid=ne.clone(o,n._ellipsoid),n._vertexFormat=Xe.clone(r,n._vertexFormat),n._semiMajorAxis=s,n._semiMinorAxis=a,n._rotation=c,n._stRotation=d,n._height=u,n._granularity=h,n._extrudedHeight=p,n._shadowVolume=g,n._offsetAttribute=f===-1?void 0:f,n):(Pf.height=u,Pf.extrudedHeight=p,Pf.granularity=h,Pf.stRotation=d,Pf.rotation=c,Pf.semiMajorAxis=s,Pf.semiMinorAxis=a,Pf.shadowVolume=g,Pf.offsetAttribute=f===-1?void 0:f,new vf(Pf))};vf.computeRectangle=function(e,t){e=e??Y.EMPTY_OBJECT;let n=e.center,i=e.ellipsoid??ne.default,o=e.semiMajorAxis,r=e.semiMinorAxis,s=e.granularity??X.RADIANS_PER_DEGREE,a=e.rotation??0;return Yme(n,o,r,a,s,i,t)};vf.createGeometry=function(e){if(e._semiMajorAxis<=0||e._semiMinorAxis<=0)return;let t=e._height,n=e._extrudedHeight,i=!X.equalsEpsilon(t,n,0,X.EPSILON2);e._center=e._ellipsoid.scaleToGeodeticSurface(e._center,e._center);let o={center:e._center,semiMajorAxis:e._semiMajorAxis,semiMinorAxis:e._semiMinorAxis,ellipsoid:e._ellipsoid,rotation:e._rotation,height:t,granularity:e._granularity,vertexFormat:e._vertexFormat,stRotation:e._stRotation},r;if(i)o.extrudedHeight=n,o.shadowVolume=e._shadowVolume,o.offsetAttribute=e._offsetAttribute,r=J6e(o);else if(r=z6e(o),l(e._offsetAttribute)){let s=r.attributes.position.values.length,a=e._offsetAttribute===rn.NONE?0:1,c=new Uint8Array(s/3).fill(a);r.attributes.applyOffset=new Ge({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:c})}return new lt({attributes:r.attributes,indices:r.indices,primitiveType:we.TRIANGLES,boundingSphere:r.boundingSphere,offsetAttribute:e._offsetAttribute})};vf.createShadowVolume=function(e,t,n){let i=e._granularity,o=e._ellipsoid,r=t(i,o),s=n(i,o);return new vf({center:e._center,semiMajorAxis:e._semiMajorAxis,semiMinorAxis:e._semiMinorAxis,ellipsoid:o,rotation:e._rotation,stRotation:e._stRotation,granularity:i,extrudedHeight:r,height:s,vertexFormat:Xe.POSITION_ONLY,shadowVolume:!0})};function Q6e(e){let t=-e._stRotation;if(t===0)return[0,0,0,1,1,0];let i=Hl.computeEllipsePositions({center:e._center,semiMajorAxis:e._semiMajorAxis,semiMinorAxis:e._semiMinorAxis,rotation:e._rotation,granularity:e._granularity},!1,!0).outerPositions,o=i.length/3,r=new Array(o);for(let c=0;c<o;++c)r[c]=m.fromArray(i,c*3);let s=e._ellipsoid,a=e.rectangle;return lt._textureCoordinateRotationPoints(r,t,s,a)}Object.defineProperties(vf.prototype,{rectangle:{get:function(){return l(this._rectangle)||(this._rectangle=Yme(this._center,this._semiMajorAxis,this._semiMinorAxis,this._rotation,this._granularity,this._ellipsoid)),this._rectangle}},textureCoordinateRotationPoints:{get:function(){return l(this._textureCoordinateRotationPoints)||(this._textureCoordinateRotationPoints=Q6e(this)),this._textureCoordinateRotationPoints}}});var dl=vf;var vqn=_(T(),1);var Jme=new m,lT=new m;function j6e(e){let t=e.center;lT=m.multiplyByScalar(e.ellipsoid.geodeticSurfaceNormal(t,lT),e.height,lT),lT=m.add(t,lT,lT);let n=new le(lT,e.semiMajorAxis),i=Hl.computeEllipsePositions(e,!1,!0).outerPositions,o=new mn({position:new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:Hl.raisePositionsToHeight(i,e,!1)})}),r=i.length/3,s=Ae.createTypedArray(r,r*2),a=0;for(let c=0;c<r;++c)s[a++]=c,s[a++]=(c+1)%r;return{boundingSphere:n,attributes:o,indices:s}}var Yk=new le,zk=new le;function q6e(e){let t=e.center,n=e.ellipsoid,i=e.semiMajorAxis,o=m.multiplyByScalar(n.geodeticSurfaceNormal(t,Jme),e.height,Jme);Yk.center=m.add(t,o,Yk.center),Yk.radius=i,o=m.multiplyByScalar(n.geodeticSurfaceNormal(t,o),e.extrudedHeight,o),zk.center=m.add(t,o,zk.center),zk.radius=i;let r=Hl.computeEllipsePositions(e,!1,!0).outerPositions,s=new mn({position:new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:Hl.raisePositionsToHeight(r,e,!0)})});r=s.position.values;let a=le.union(Yk,zk),c=r.length/3;if(l(e.offsetAttribute)){let f=new Uint8Array(c);if(e.offsetAttribute===rn.TOP)f=f.fill(1,0,c/2);else{let y=e.offsetAttribute===rn.NONE?0:1;f=f.fill(y)}s.applyOffset=new Ge({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:f})}let d=e.numberOfVerticalLines??16;d=X.clamp(d,0,c/2);let u=Ae.createTypedArray(c,c*2+d*2);c/=2;let h=0,p;for(p=0;p<c;++p)u[h++]=p,u[h++]=(p+1)%c,u[h++]=p+c,u[h++]=(p+1)%c+c;let g;if(d>0){let f=Math.min(d,c);g=Math.round(c/f);let y=Math.min(g*d,c);for(p=0;p<y;p+=g)u[h++]=p,u[h++]=p+c}return{boundingSphere:a,attributes:s,indices:u}}function eV(e){e=e??Y.EMPTY_OBJECT;let t=e.center,n=e.ellipsoid??ne.default,i=e.semiMajorAxis,o=e.semiMinorAxis,r=e.granularity??X.RADIANS_PER_DEGREE,s=e.height??0,a=e.extrudedHeight??s;this._center=m.clone(t),this._semiMajorAxis=i,this._semiMinorAxis=o,this._ellipsoid=ne.clone(n),this._rotation=e.rotation??0,this._height=Math.max(a,s),this._granularity=r,this._extrudedHeight=Math.min(a,s),this._numberOfVerticalLines=Math.max(e.numberOfVerticalLines??16,0),this._offsetAttribute=e.offsetAttribute,this._workerName="createEllipseOutlineGeometry"}eV.packedLength=m.packedLength+ne.packedLength+8;eV.pack=function(e,t,n){return n=n??0,m.pack(e._center,t,n),n+=m.packedLength,ne.pack(e._ellipsoid,t,n),n+=ne.packedLength,t[n++]=e._semiMajorAxis,t[n++]=e._semiMinorAxis,t[n++]=e._rotation,t[n++]=e._height,t[n++]=e._granularity,t[n++]=e._extrudedHeight,t[n++]=e._numberOfVerticalLines,t[n]=e._offsetAttribute??-1,t};var Qme=new m,jme=new ne,Qb={center:Qme,ellipsoid:jme,semiMajorAxis:void 0,semiMinorAxis:void 0,rotation:void 0,height:void 0,granularity:void 0,extrudedHeight:void 0,numberOfVerticalLines:void 0,offsetAttribute:void 0};eV.unpack=function(e,t,n){t=t??0;let i=m.unpack(e,t,Qme);t+=m.packedLength;let o=ne.unpack(e,t,jme);t+=ne.packedLength;let r=e[t++],s=e[t++],a=e[t++],c=e[t++],d=e[t++],u=e[t++],h=e[t++],p=e[t];return l(n)?(n._center=m.clone(i,n._center),n._ellipsoid=ne.clone(o,n._ellipsoid),n._semiMajorAxis=r,n._semiMinorAxis=s,n._rotation=a,n._height=c,n._granularity=d,n._extrudedHeight=u,n._numberOfVerticalLines=h,n._offsetAttribute=p===-1?void 0:p,n):(Qb.height=c,Qb.extrudedHeight=u,Qb.granularity=d,Qb.rotation=a,Qb.semiMajorAxis=r,Qb.semiMinorAxis=s,Qb.numberOfVerticalLines=h,Qb.offsetAttribute=p===-1?void 0:p,new eV(Qb))};eV.createGeometry=function(e){if(e._semiMajorAxis<=0||e._semiMinorAxis<=0)return;let t=e._height,n=e._extrudedHeight,i=!X.equalsEpsilon(t,n,0,X.EPSILON2);e._center=e._ellipsoid.scaleToGeodeticSurface(e._center,e._center);let o={center:e._center,semiMajorAxis:e._semiMajorAxis,semiMinorAxis:e._semiMinorAxis,ellipsoid:e._ellipsoid,rotation:e._rotation,height:t,granularity:e._granularity,numberOfVerticalLines:e._numberOfVerticalLines},r;if(i)o.extrudedHeight=n,o.offsetAttribute=e._offsetAttribute,r=q6e(o);else if(r=j6e(o),l(e._offsetAttribute)){let s=r.attributes.position.values.length,a=e._offsetAttribute===rn.NONE?0:1,c=new Uint8Array(s/3).fill(a);r.attributes.applyOffset=new Ge({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:c})}return new lt({attributes:r.attributes,indices:r.indices,primitiveType:we.LINES,boundingSphere:r.boundingSphere,offsetAttribute:e._offsetAttribute})};var kd=eV;var qme=new D,$me=m.ZERO,ehe=new m,the=new ce;function $6e(e){this.id=e,this.vertexFormat=void 0,this.center=void 0,this.semiMajorAxis=void 0,this.semiMinorAxis=void 0,this.rotation=void 0,this.height=void 0,this.extrudedHeight=void 0,this.granularity=void 0,this.stRotation=void 0,this.numberOfVerticalLines=void 0,this.offsetAttribute=void 0}function Sh(e,t){Yn.call(this,{entity:e,scene:t,geometryOptions:new $6e(e),geometryPropertyName:"ellipse",observedPropertyNames:["availability","position","ellipse"]}),this._onEntityPropertyChanged(e,"ellipse",e.ellipse,void 0)}l(Object.create)&&(Sh.prototype=Object.create(Yn.prototype),Sh.prototype.constructor=Sh);Sh.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i={show:new xn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),distanceDisplayCondition:kn.fromDistanceDisplayCondition(this._distanceDisplayConditionProperty.getValue(e)),offset:void 0,color:void 0};if(this._materialProperty instanceof Dt){let o;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(o=this._materialProperty.color.getValue(e,qme)),l(o)||(o=D.WHITE),i.color=Yt.fromColor(o)}return l(this._options.offsetAttribute)&&(i.offset=$i.fromCartesian3(J.getValueOrDefault(this._terrainOffsetProperty,e,$me,ehe))),new Et({id:t,geometry:new dl(this._options),attributes:i})};Sh.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=J.getValueOrDefault(this._outlineColorProperty,e,D.BLACK,qme),o=this._distanceDisplayConditionProperty.getValue(e),r={show:new xn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Yt.fromColor(i),distanceDisplayCondition:kn.fromDistanceDisplayCondition(o),offset:void 0};return l(this._options.offsetAttribute)&&(r.offset=$i.fromCartesian3(J.getValueOrDefault(this._terrainOffsetProperty,e,$me,ehe))),new Et({id:t,geometry:new kd(this._options),attributes:r})};Sh.prototype._computeCenter=function(e,t){return J.getValueOrUndefined(this._entity.position,e,t)};Sh.prototype._isHidden=function(e,t){let n=e.position;return!l(n)||!l(t.semiMajorAxis)||!l(t.semiMinorAxis)||oi.prototype._isHidden.call(this,e,t)};Sh.prototype._isDynamic=function(e,t){return!e.position.isConstant||!t.semiMajorAxis.isConstant||!t.semiMinorAxis.isConstant||!J.isConstant(t.rotation)||!J.isConstant(t.height)||!J.isConstant(t.extrudedHeight)||!J.isConstant(t.granularity)||!J.isConstant(t.stRotation)||!J.isConstant(t.outlineWidth)||!J.isConstant(t.numberOfVerticalLines)||!J.isConstant(t.zIndex)||this._onTerrain&&!J.isConstant(this._materialProperty)&&!(this._materialProperty instanceof Dt)};Sh.prototype._setStaticOptions=function(e,t){let n=J.getValueOrUndefined(t.height,Be.MINIMUM_VALUE),i=J.getValueOrDefault(t.heightReference,Be.MINIMUM_VALUE,Je.NONE),o=J.getValueOrUndefined(t.extrudedHeight,Be.MINIMUM_VALUE),r=J.getValueOrDefault(t.extrudedHeightReference,Be.MINIMUM_VALUE,Je.NONE);l(o)&&!l(n)&&(n=0);let s=this._options;s.vertexFormat=this._materialProperty instanceof Dt?dn.VERTEX_FORMAT:ao.MaterialSupport.TEXTURED.vertexFormat,s.center=e.position.getValue(Be.MINIMUM_VALUE,s.center),s.semiMajorAxis=t.semiMajorAxis.getValue(Be.MINIMUM_VALUE,s.semiMajorAxis),s.semiMinorAxis=t.semiMinorAxis.getValue(Be.MINIMUM_VALUE,s.semiMinorAxis),s.rotation=J.getValueOrUndefined(t.rotation,Be.MINIMUM_VALUE),s.granularity=J.getValueOrUndefined(t.granularity,Be.MINIMUM_VALUE),s.stRotation=J.getValueOrUndefined(t.stRotation,Be.MINIMUM_VALUE),s.numberOfVerticalLines=J.getValueOrUndefined(t.numberOfVerticalLines,Be.MINIMUM_VALUE),s.offsetAttribute=Yn.computeGeometryOffsetAttribute(n,i,o,r),s.height=Yn.getGeometryHeight(n,i),o=Yn.getGeometryExtrudedHeight(o,r),o===Yn.CLAMP_TO_GROUND&&(o=di.getMinimumMaximumHeights(dl.computeRectangle(s,the)).minimumTerrainHeight),s.extrudedHeight=o};Sh.DynamicGeometryUpdater=tV;function tV(e,t,n){ii.call(this,e,t,n)}l(Object.create)&&(tV.prototype=Object.create(ii.prototype),tV.prototype.constructor=tV);tV.prototype._isHidden=function(e,t,n){let i=this._options;return!l(i.center)||!l(i.semiMajorAxis)||!l(i.semiMinorAxis)||ii.prototype._isHidden.call(this,e,t,n)};tV.prototype._setOptions=function(e,t,n){let i=this._options,o=J.getValueOrUndefined(t.height,n),r=J.getValueOrDefault(t.heightReference,n,Je.NONE),s=J.getValueOrUndefined(t.extrudedHeight,n),a=J.getValueOrDefault(t.extrudedHeightReference,n,Je.NONE);l(s)&&!l(o)&&(o=0),i.center=J.getValueOrUndefined(e.position,n,i.center),i.semiMajorAxis=J.getValueOrUndefined(t.semiMajorAxis,n),i.semiMinorAxis=J.getValueOrUndefined(t.semiMinorAxis,n),i.rotation=J.getValueOrUndefined(t.rotation,n),i.granularity=J.getValueOrUndefined(t.granularity,n),i.stRotation=J.getValueOrUndefined(t.stRotation,n),i.numberOfVerticalLines=J.getValueOrUndefined(t.numberOfVerticalLines,n),i.offsetAttribute=Yn.computeGeometryOffsetAttribute(o,r,s,a),i.height=Yn.getGeometryHeight(o,r),s=Yn.getGeometryExtrudedHeight(s,a),s===Yn.CLAMP_TO_GROUND&&(s=di.getMinimumMaximumHeights(dl.computeRectangle(i,the)).minimumTerrainHeight),i.extrudedHeight=s};var ov=Sh;var H$n=_(T(),1);var _$n=_(T(),1);var eqe=new m,tqe=new m,nqe=new m,iqe=new m,oqe=new m,rqe=new m(1,1,1),nhe=Math.cos,ihe=Math.sin;function jb(e){e=e??Y.EMPTY_OBJECT;let t=e.radii??rqe,n=e.innerRadii??t,i=e.minimumClock??0,o=e.maximumClock??X.TWO_PI,r=e.minimumCone??0,s=e.maximumCone??X.PI,a=Math.round(e.stackPartitions??64),c=Math.round(e.slicePartitions??64),d=e.vertexFormat??Xe.DEFAULT;this._radii=m.clone(t),this._innerRadii=m.clone(n),this._minimumClock=i,this._maximumClock=o,this._minimumCone=r,this._maximumCone=s,this._stackPartitions=a,this._slicePartitions=c,this._vertexFormat=Xe.clone(d),this._offsetAttribute=e.offsetAttribute,this._workerName="createEllipsoidGeometry"}jb.packedLength=2*m.packedLength+Xe.packedLength+7;jb.pack=function(e,t,n){return n=n??0,m.pack(e._radii,t,n),n+=m.packedLength,m.pack(e._innerRadii,t,n),n+=m.packedLength,Xe.pack(e._vertexFormat,t,n),n+=Xe.packedLength,t[n++]=e._minimumClock,t[n++]=e._maximumClock,t[n++]=e._minimumCone,t[n++]=e._maximumCone,t[n++]=e._stackPartitions,t[n++]=e._slicePartitions,t[n]=e._offsetAttribute??-1,t};var ohe=new m,rhe=new m,she=new Xe,$g={radii:ohe,innerRadii:rhe,vertexFormat:she,minimumClock:void 0,maximumClock:void 0,minimumCone:void 0,maximumCone:void 0,stackPartitions:void 0,slicePartitions:void 0,offsetAttribute:void 0};jb.unpack=function(e,t,n){t=t??0;let i=m.unpack(e,t,ohe);t+=m.packedLength;let o=m.unpack(e,t,rhe);t+=m.packedLength;let r=Xe.unpack(e,t,she);t+=Xe.packedLength;let s=e[t++],a=e[t++],c=e[t++],d=e[t++],u=e[t++],h=e[t++],p=e[t];return l(n)?(n._radii=m.clone(i,n._radii),n._innerRadii=m.clone(o,n._innerRadii),n._vertexFormat=Xe.clone(r,n._vertexFormat),n._minimumClock=s,n._maximumClock=a,n._minimumCone=c,n._maximumCone=d,n._stackPartitions=u,n._slicePartitions=h,n._offsetAttribute=p===-1?void 0:p,n):($g.minimumClock=s,$g.maximumClock=a,$g.minimumCone=c,$g.maximumCone=d,$g.stackPartitions=u,$g.slicePartitions=h,$g.offsetAttribute=p===-1?void 0:p,new jb($g))};jb.createGeometry=function(e){let t=e._radii;if(t.x<=0||t.y<=0||t.z<=0)return;let n=e._innerRadii;if(n.x<=0||n.y<=0||n.z<=0)return;let i=e._minimumClock,o=e._maximumClock,r=e._minimumCone,s=e._maximumCone,a=e._vertexFormat,c=e._slicePartitions+1,d=e._stackPartitions+1;c=Math.round(c*Math.abs(o-i)/X.TWO_PI),d=Math.round(d*Math.abs(s-r)/X.PI),c<2&&(c=2),d<2&&(d=2);let u,h,p=0,g=[r],f=[i];for(u=0;u<d;u++)g.push(r+u*(s-r)/(d-1));for(g.push(s),h=0;h<c;h++)f.push(i+h*(o-i)/(c-1));f.push(o);let y=g.length,x=f.length,S=0,C=1,V=n.x!==t.x||n.y!==t.y||n.z!==t.z,L=!1,Z=!1,E=!1;V&&(C=2,r>0&&(L=!0,S+=c-1),s<Math.PI&&(Z=!0,S+=c-1),(o-i)%X.TWO_PI?(E=!0,S+=(d-1)*2+1):S+=1);let P=x*y*C,W=new Float64Array(P*3),v=new Array(P).fill(!1),A=new Array(P).fill(!1),b=c*d*C,R=6*(b+S+1-(c+d)*C),G=Ae.createTypedArray(b,R),I=a.normal?new Float32Array(P*3):void 0,w=a.tangent?new Float32Array(P*3):void 0,M=a.bitangent?new Float32Array(P*3):void 0,B=a.st?new Float32Array(P*2):void 0,k=new Array(y),O=new Array(y);for(u=0;u<y;u++)k[u]=ihe(g[u]),O[u]=nhe(g[u]);let N=new Array(x),z=new Array(x);for(h=0;h<x;h++)z[h]=nhe(f[h]),N[h]=ihe(f[h]);for(u=0;u<y;u++)for(h=0;h<x;h++)W[p++]=t.x*k[u]*z[h],W[p++]=t.y*k[u]*N[h],W[p++]=t.z*O[u];let K=P/2;if(V)for(u=0;u<y;u++)for(h=0;h<x;h++)W[p++]=n.x*k[u]*z[h],W[p++]=n.y*k[u]*N[h],W[p++]=n.z*O[u],v[K]=!0,u>0&&u!==y-1&&h!==0&&h!==x-1&&(A[K]=!0),K++;p=0;let te,H;for(u=1;u<y-2;u++)for(te=u*x,H=(u+1)*x,h=1;h<x-2;h++)G[p++]=H+h,G[p++]=H+h+1,G[p++]=te+h+1,G[p++]=H+h,G[p++]=te+h+1,G[p++]=te+h;if(V){let qe=y*x;for(u=1;u<y-2;u++)for(te=qe+u*x,H=qe+(u+1)*x,h=1;h<x-2;h++)G[p++]=H+h,G[p++]=te+h,G[p++]=te+h+1,G[p++]=H+h,G[p++]=te+h+1,G[p++]=H+h+1}let j,ee;if(V){if(L)for(ee=y*x,u=1;u<x-2;u++)G[p++]=u,G[p++]=u+1,G[p++]=ee+u+1,G[p++]=u,G[p++]=ee+u+1,G[p++]=ee+u;if(Z)for(j=y*x-x,ee=y*x*C-x,u=1;u<x-2;u++)G[p++]=j+u+1,G[p++]=j+u,G[p++]=ee+u,G[p++]=j+u+1,G[p++]=ee+u,G[p++]=ee+u+1}if(E){for(u=1;u<y-2;u++)ee=x*y+x*u,j=x*u,G[p++]=ee,G[p++]=j+x,G[p++]=j,G[p++]=ee,G[p++]=ee+x,G[p++]=j+x;for(u=1;u<y-2;u++)ee=x*y+x*(u+1)-1,j=x*(u+1)-1,G[p++]=j+x,G[p++]=ee,G[p++]=j,G[p++]=j+x,G[p++]=ee+x,G[p++]=ee}let fe=new mn;a.position&&(fe.position=new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:W}));let Te=0,de=0,xe=0,Ce=0,Ie=P/2,Le,Ne=ne.fromCartesian3(t),Oe=ne.fromCartesian3(n);if(a.st||a.normal||a.tangent||a.bitangent){for(u=0;u<P;u++){Le=v[u]?Oe:Ne;let qe=m.fromArray(W,u*3,eqe),Rt=Le.geodeticSurfaceNormal(qe,tqe);if(A[u]&&m.negate(Rt,Rt),a.st){let Lt=U.negate(Rt,oqe);B[Te++]=Math.atan2(Lt.y,Lt.x)/X.TWO_PI+.5,B[Te++]=Math.asin(Rt.z)/Math.PI+.5}if(a.normal&&(I[de++]=Rt.x,I[de++]=Rt.y,I[de++]=Rt.z),a.tangent||a.bitangent){let Lt=nqe,ke=0,Ht;if(v[u]&&(ke=Ie),!L&&u>=ke&&u<ke+x*2?Ht=m.UNIT_X:Ht=m.UNIT_Z,m.cross(Ht,Rt,Lt),m.normalize(Lt,Lt),a.tangent&&(w[xe++]=Lt.x,w[xe++]=Lt.y,w[xe++]=Lt.z),a.bitangent){let ut=m.cross(Rt,Lt,iqe);m.normalize(ut,ut),M[Ce++]=ut.x,M[Ce++]=ut.y,M[Ce++]=ut.z}}}a.st&&(fe.st=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:B})),a.normal&&(fe.normal=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:I})),a.tangent&&(fe.tangent=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:w})),a.bitangent&&(fe.bitangent=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:M}))}if(l(e._offsetAttribute)){let qe=W.length,Rt=e._offsetAttribute===rn.NONE?0:1,Lt=new Uint8Array(qe/3).fill(Rt);fe.applyOffset=new Ge({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:Lt})}return new lt({attributes:fe,indices:G,primitiveType:we.TRIANGLES,boundingSphere:le.fromEllipsoid(Ne),offsetAttribute:e._offsetAttribute})};var TJ;jb.getUnitEllipsoid=function(){return l(TJ)||(TJ=jb.createGeometry(new jb({radii:new m(1,1,1),vertexFormat:Xe.POSITION_ONLY}))),TJ};var js=jb;var sqe=new Dt(D.WHITE),SJ=m.ZERO,CJ=new m,aqe=new m,cqe=new m,VJ=new D,lqe=new m(1,1,1);function dqe(e){this.id=e,this.vertexFormat=void 0,this.radii=void 0,this.innerRadii=void 0,this.minimumClock=void 0,this.maximumClock=void 0,this.minimumCone=void 0,this.maximumCone=void 0,this.stackPartitions=void 0,this.slicePartitions=void 0,this.subdivisions=void 0,this.offsetAttribute=void 0}function Ud(e,t){oi.call(this,{entity:e,scene:t,geometryOptions:new dqe(e),geometryPropertyName:"ellipsoid",observedPropertyNames:["availability","position","orientation","ellipsoid"]}),this._onEntityPropertyChanged(e,"ellipsoid",e.ellipsoid,void 0)}l(Object.create)&&(Ud.prototype=Object.create(oi.prototype),Ud.prototype.constructor=Ud);Object.defineProperties(Ud.prototype,{terrainOffsetProperty:{get:function(){return this._terrainOffsetProperty}}});Ud.prototype.createFillGeometryInstance=function(e,t,n){let i=this._entity,o=i.isAvailable(e),r,s=new xn(o&&i.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),a=this._distanceDisplayConditionProperty.getValue(e),c=kn.fromDistanceDisplayCondition(a),d={show:s,distanceDisplayCondition:c,color:void 0,offset:void 0};if(this._materialProperty instanceof Dt){let u;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||o)&&(u=this._materialProperty.color.getValue(e,VJ)),l(u)||(u=D.WHITE),r=Yt.fromColor(u),d.color=r}return l(this._options.offsetAttribute)&&(d.offset=$i.fromCartesian3(J.getValueOrDefault(this._terrainOffsetProperty,e,SJ,CJ))),new Et({id:i,geometry:new js(this._options),modelMatrix:t?void 0:i.computeModelMatrixForHeightReference(e,i.ellipsoid.heightReference,this._options.radii.z*.5,this._scene.ellipsoid,n),attributes:d})};Ud.prototype.createOutlineGeometryInstance=function(e,t,n){let i=this._entity,o=i.isAvailable(e),r=J.getValueOrDefault(this._outlineColorProperty,e,D.BLACK,VJ),s=this._distanceDisplayConditionProperty.getValue(e),a={show:new xn(o&&i.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Yt.fromColor(r),distanceDisplayCondition:kn.fromDistanceDisplayCondition(s),offset:void 0};return l(this._options.offsetAttribute)&&(a.offset=$i.fromCartesian3(J.getValueOrDefault(this._terrainOffsetProperty,e,SJ,CJ))),new Et({id:i,geometry:new Wd(this._options),modelMatrix:t?void 0:i.computeModelMatrixForHeightReference(e,i.ellipsoid.heightReference,this._options.radii.z*.5,this._scene.ellipsoid,n),attributes:a})};Ud.prototype._computeCenter=function(e,t){return J.getValueOrUndefined(this._entity.position,e,t)};Ud.prototype._isHidden=function(e,t){return!l(e.position)||!l(t.radii)||oi.prototype._isHidden.call(this,e,t)};Ud.prototype._isDynamic=function(e,t){return!e.position.isConstant||!J.isConstant(e.orientation)||!t.radii.isConstant||!J.isConstant(t.innerRadii)||!J.isConstant(t.stackPartitions)||!J.isConstant(t.slicePartitions)||!J.isConstant(t.outlineWidth)||!J.isConstant(t.minimumClock)||!J.isConstant(t.maximumClock)||!J.isConstant(t.minimumCone)||!J.isConstant(t.maximumCone)||!J.isConstant(t.subdivisions)};Ud.prototype._setStaticOptions=function(e,t){let n=J.getValueOrDefault(t.heightReference,Be.MINIMUM_VALUE,Je.NONE),i=this._options;i.vertexFormat=this._materialProperty instanceof Dt?dn.VERTEX_FORMAT:ao.MaterialSupport.TEXTURED.vertexFormat,i.radii=t.radii.getValue(Be.MINIMUM_VALUE,i.radii),i.innerRadii=J.getValueOrUndefined(t.innerRadii,i.radii),i.minimumClock=J.getValueOrUndefined(t.minimumClock,Be.MINIMUM_VALUE),i.maximumClock=J.getValueOrUndefined(t.maximumClock,Be.MINIMUM_VALUE),i.minimumCone=J.getValueOrUndefined(t.minimumCone,Be.MINIMUM_VALUE),i.maximumCone=J.getValueOrUndefined(t.maximumCone,Be.MINIMUM_VALUE),i.stackPartitions=J.getValueOrUndefined(t.stackPartitions,Be.MINIMUM_VALUE),i.slicePartitions=J.getValueOrUndefined(t.slicePartitions,Be.MINIMUM_VALUE),i.subdivisions=J.getValueOrUndefined(t.subdivisions,Be.MINIMUM_VALUE),i.offsetAttribute=n!==Je.NONE?rn.ALL:void 0};Ud.prototype._onEntityPropertyChanged=Op;Ud.DynamicGeometryUpdater=rv;function rv(e,t,n){ii.call(this,e,t,n),this._scene=e._scene,this._modelMatrix=new F,this._attributes=void 0,this._outlineAttributes=void 0,this._lastSceneMode=void 0,this._lastShow=void 0,this._lastOutlineShow=void 0,this._lastOutlineWidth=void 0,this._lastOutlineColor=void 0,this._lastOffset=new m,this._material={}}l(Object.create)&&(rv.prototype=Object.create(ii.prototype),rv.prototype.constructor=rv);rv.prototype.update=function(e){let t=this._entity,n=t.ellipsoid;if(!t.isShowing||!t.isAvailable(e)||!J.getValueOrDefault(n.show,e,!0)){l(this._primitive)&&(this._primitive.show=!1),l(this._outlinePrimitive)&&(this._outlinePrimitive.show=!1);return}let i=J.getValueOrUndefined(n.radii,e,aqe),o=l(i)?t.computeModelMatrixForHeightReference(e,n.heightReference,i.z*.5,this._scene.ellipsoid,this._modelMatrix):void 0;if(!l(o)||!l(i)){l(this._primitive)&&(this._primitive.show=!1),l(this._outlinePrimitive)&&(this._outlinePrimitive.show=!1);return}let r=J.getValueOrDefault(n.fill,e,!0),s=J.getValueOrDefault(n.outline,e,!1),a=J.getValueOrClonedDefault(n.outlineColor,e,D.BLACK,VJ),c=Qo.getValue(e,n.material??sqe,this._material),d=J.getValueOrUndefined(n.innerRadii,e,cqe),u=J.getValueOrUndefined(n.minimumClock,e),h=J.getValueOrUndefined(n.maximumClock,e),p=J.getValueOrUndefined(n.minimumCone,e),g=J.getValueOrUndefined(n.maximumCone,e),f=J.getValueOrUndefined(n.stackPartitions,e),y=J.getValueOrUndefined(n.slicePartitions,e),x=J.getValueOrUndefined(n.subdivisions,e),S=J.getValueOrDefault(n.outlineWidth,e,1),C=J.getValueOrDefault(n.heightReference,e,Je.NONE),V=C!==Je.NONE?rn.ALL:void 0,L=this._scene.mode,Z=L===oe.SCENE3D&&C===Je.NONE,E=this._options,P=this._geometryUpdater.shadowsProperty.getValue(e),v=this._geometryUpdater.distanceDisplayConditionProperty.getValue(e),A=J.getValueOrDefault(this._geometryUpdater.terrainOffsetProperty,e,SJ,CJ);if(!Z||this._lastSceneMode!==L||!l(this._primitive)||E.stackPartitions!==f||E.slicePartitions!==y||l(d)&&!m.equals(E.innerRadii!==d)||E.minimumClock!==u||E.maximumClock!==h||E.minimumCone!==p||E.maximumCone!==g||E.subdivisions!==x||this._lastOutlineWidth!==S||E.offsetAttribute!==V){let R=this._primitives;R.removeAndDestroy(this._primitive),R.removeAndDestroy(this._outlinePrimitive),this._primitive=void 0,this._outlinePrimitive=void 0,this._lastSceneMode=L,this._lastOutlineWidth=S,E.stackPartitions=f,E.slicePartitions=y,E.subdivisions=x,E.offsetAttribute=V,E.radii=m.clone(Z?lqe:i,E.radii),l(d)?Z?E.innerRadii=m.fromElements(d.x/i.x,d.y/i.y,d.z/i.z,E.innerRadii):E.innerRadii=m.clone(d,E.innerRadii):E.innerRadii=void 0,E.minimumClock=u,E.maximumClock=h,E.minimumCone=p,E.maximumCone=g;let G=new ao({material:c,translucent:c.isTranslucent(),closed:!0});E.vertexFormat=G.vertexFormat;let I=this._geometryUpdater.createFillGeometryInstance(e,Z,this._modelMatrix);this._primitive=R.add(new In({geometryInstances:I,appearance:G,asynchronous:!1,shadows:P}));let w=this._geometryUpdater.createOutlineGeometryInstance(e,Z,this._modelMatrix);this._outlinePrimitive=R.add(new In({geometryInstances:w,appearance:new dn({flat:!0,translucent:w.attributes.color.value[3]!==255,renderState:{lineWidth:this._geometryUpdater._scene.clampLineWidth(S)}}),asynchronous:!1,shadows:P})),this._lastShow=r,this._lastOutlineShow=s,this._lastOutlineColor=D.clone(a,this._lastOutlineColor),this._lastDistanceDisplayCondition=v,this._lastOffset=m.clone(A,this._lastOffset)}else if(this._primitive.ready){let R=this._primitive,G=this._outlinePrimitive;R.show=!0,G.show=!0,R.appearance.material=c;let I=this._attributes;l(I)||(I=R.getGeometryInstanceAttributes(t),this._attributes=I),r!==this._lastShow&&(I.show=xn.toValue(r,I.show),this._lastShow=r);let w=this._outlineAttributes;l(w)||(w=G.getGeometryInstanceAttributes(t),this._outlineAttributes=w),s!==this._lastOutlineShow&&(w.show=xn.toValue(s,w.show),this._lastOutlineShow=s),D.equals(a,this._lastOutlineColor)||(w.color=Yt.toValue(a,w.color),D.clone(a,this._lastOutlineColor)),wt.equals(v,this._lastDistanceDisplayCondition)||(I.distanceDisplayCondition=kn.toValue(v,I.distanceDisplayCondition),w.distanceDisplayCondition=kn.toValue(v,w.distanceDisplayCondition),wt.clone(v,this._lastDistanceDisplayCondition)),m.equals(A,this._lastOffset)||(I.offset=$i.toValue(A,I.offset),w.offset=$i.toValue(A,I.offset),m.clone(A,this._lastOffset))}Z&&(i.x=Math.max(i.x,.001),i.y=Math.max(i.y,.001),i.z=Math.max(i.z,.001),o=F.multiplyByScale(o,i,o),this._primitive.modelMatrix=o,this._outlinePrimitive.modelMatrix=o)};var sv=Ud;var Fei=_(T(),1);var rei=_(T(),1);function nV(e){e=e??Y.EMPTY_OBJECT;let t=e.vertexFormat??Xe.DEFAULT;this._vertexFormat=t,this._workerName="createPlaneGeometry"}nV.packedLength=Xe.packedLength;nV.pack=function(e,t,n){return n=n??0,Xe.pack(e._vertexFormat,t,n),t};var ahe=new Xe,uqe={vertexFormat:ahe};nV.unpack=function(e,t,n){t=t??0;let i=Xe.unpack(e,t,ahe);return l(n)?(n._vertexFormat=Xe.clone(i,n._vertexFormat),n):new nV(uqe)};var Hk=new m(-.5,-.5,0),Kk=new m(.5,.5,0);nV.createGeometry=function(e){let t=e._vertexFormat,n=new mn,i,o;if(t.position){if(o=new Float64Array(4*3),o[0]=Hk.x,o[1]=Hk.y,o[2]=0,o[3]=Kk.x,o[4]=Hk.y,o[5]=0,o[6]=Kk.x,o[7]=Kk.y,o[8]=0,o[9]=Hk.x,o[10]=Kk.y,o[11]=0,n.position=new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:o}),t.normal){let r=new Float32Array(12);r[0]=0,r[1]=0,r[2]=1,r[3]=0,r[4]=0,r[5]=1,r[6]=0,r[7]=0,r[8]=1,r[9]=0,r[10]=0,r[11]=1,n.normal=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:r})}if(t.st){let r=new Float32Array(8);r[0]=0,r[1]=0,r[2]=1,r[3]=0,r[4]=1,r[5]=1,r[6]=0,r[7]=1,n.st=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:r})}if(t.tangent){let r=new Float32Array(12);r[0]=1,r[1]=0,r[2]=0,r[3]=1,r[4]=0,r[5]=0,r[6]=1,r[7]=0,r[8]=0,r[9]=1,r[10]=0,r[11]=0,n.tangent=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:r})}if(t.bitangent){let r=new Float32Array(12);r[0]=0,r[1]=1,r[2]=0,r[3]=0,r[4]=1,r[5]=0,r[6]=0,r[7]=1,r[8]=0,r[9]=0,r[10]=1,r[11]=0,n.bitangent=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:r})}i=new Uint16Array(2*3),i[0]=0,i[1]=1,i[2]=2,i[3]=0,i[4]=2,i[5]=3}return new lt({attributes:n,indices:i,primitiveType:we.TRIANGLES,boundingSphere:new le(m.ZERO,Math.sqrt(2))})};var av=nV;var pei=_(T(),1);function iV(){this._workerName="createPlaneOutlineGeometry"}iV.packedLength=0;iV.pack=function(e,t){return t};iV.unpack=function(e,t,n){return l(n)?n:new iV};var ey=new m(-.5,-.5,0),Jk=new m(.5,.5,0);iV.createGeometry=function(){let e=new mn,t=new Uint16Array(4*2),n=new Float64Array(4*3);return n[0]=ey.x,n[1]=ey.y,n[2]=ey.z,n[3]=Jk.x,n[4]=ey.y,n[5]=ey.z,n[6]=Jk.x,n[7]=Jk.y,n[8]=ey.z,n[9]=ey.x,n[10]=Jk.y,n[11]=ey.z,e.position=new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:n}),t[0]=0,t[1]=1,t[2]=1,t[3]=2,t[4]=2,t[5]=3,t[6]=3,t[7]=0,new lt({attributes:e,indices:t,primitiveType:we.LINES,boundingSphere:new le(m.ZERO,Math.sqrt(2))})};var cv=iV;var mqe=new m,che=new D;function hqe(e){this.id=e,this.vertexFormat=void 0,this.plane=void 0,this.dimensions=void 0}function nm(e,t){oi.call(this,{entity:e,scene:t,geometryOptions:new hqe(e),geometryPropertyName:"plane",observedPropertyNames:["availability","position","orientation","plane"]}),this._onEntityPropertyChanged(e,"plane",e.plane,void 0)}l(Object.create)&&(nm.prototype=Object.create(oi.prototype),nm.prototype.constructor=nm);nm.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i,o,r=new xn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),s=this._distanceDisplayConditionProperty.getValue(e),a=kn.fromDistanceDisplayCondition(s);if(this._materialProperty instanceof Dt){let g;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(g=this._materialProperty.color.getValue(e,che)),l(g)||(g=D.WHITE),o=Yt.fromColor(g),i={show:r,distanceDisplayCondition:a,color:o}}else i={show:r,distanceDisplayCondition:a};let c=t.plane,d=this._options,u=t.computeModelMatrix(e),h=J.getValueOrDefault(c.plane,e,d.plane),p=J.getValueOrUndefined(c.dimensions,e,d.dimensions);return d.plane=h,d.dimensions=p,u=LJ(h,p,u,u),new Et({id:t,geometry:new av(this._options),modelMatrix:u,attributes:i})};nm.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=J.getValueOrDefault(this._outlineColorProperty,e,D.BLACK,che),o=this._distanceDisplayConditionProperty.getValue(e),r=t.plane,s=this._options,a=t.computeModelMatrix(e),c=J.getValueOrDefault(r.plane,e,s.plane),d=J.getValueOrUndefined(r.dimensions,e,s.dimensions);return s.plane=c,s.dimensions=d,a=LJ(c,d,a,a),new Et({id:t,geometry:new cv,modelMatrix:a,attributes:{show:new xn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Yt.fromColor(i),distanceDisplayCondition:kn.fromDistanceDisplayCondition(o)}})};nm.prototype._isHidden=function(e,t){return!l(t.plane)||!l(t.dimensions)||!l(e.position)||oi.prototype._isHidden.call(this,e,t)};nm.prototype._getIsClosed=function(e){return!1};nm.prototype._isDynamic=function(e,t){return!e.position.isConstant||!J.isConstant(e.orientation)||!t.plane.isConstant||!t.dimensions.isConstant||!J.isConstant(t.outlineWidth)};nm.prototype._setStaticOptions=function(e,t){let n=this._materialProperty instanceof Dt,i=this._options;i.vertexFormat=n?dn.VERTEX_FORMAT:ao.MaterialSupport.TEXTURED.vertexFormat,i.plane=t.plane.getValue(Be.MINIMUM_VALUE,i.plane),i.dimensions=t.dimensions.getValue(Be.MINIMUM_VALUE,i.dimensions)};nm.DynamicGeometryUpdater=oV;function oV(e,t,n){ii.call(this,e,t,n)}l(Object.create)&&(oV.prototype=Object.create(ii.prototype),oV.prototype.constructor=oV);oV.prototype._isHidden=function(e,t,n){let i=this._options,o=J.getValueOrUndefined(e.position,n,mqe);return!l(o)||!l(i.plane)||!l(i.dimensions)||ii.prototype._isHidden.call(this,e,t,n)};oV.prototype._setOptions=function(e,t,n){let i=this._options;i.plane=J.getValueOrDefault(t.plane,n,i.plane),i.dimensions=J.getValueOrUndefined(t.dimensions,n,i.dimensions)};var fqe=new m,pqe=new m,bqe=new m,gqe=new m,yqe=new $,xqe=new $,_qe=new F;function LJ(e,t,n,i){let o=e.normal,r=e.distance,s=m.multiplyByScalar(o,-r,bqe),a=m.clone(m.UNIT_Z,pqe);X.equalsEpsilon(Math.abs(m.dot(a,o)),1,X.EPSILON8)&&(a=m.clone(m.UNIT_Y,a));let c=m.cross(a,o,fqe);a=m.cross(o,c,a),m.normalize(c,c),m.normalize(a,a);let d=yqe;$.setColumn(d,0,c,d),$.setColumn(d,1,a,d),$.setColumn(d,2,o,d);let u=m.fromElements(t.x,t.y,1,gqe),h=$.multiplyByScale(d,u,xqe),p=F.fromRotationTranslation(h,s,_qe);return F.multiplyTransformation(n,p,i)}nm.createPrimitiveMatrix=LJ;var lv=nm;var oni=_(T(),1);var ati=_(T(),1);var Tqe=new m,Sqe=new Ke,Cqe=new U,Vqe=new U,Lqe=new m,Rqe=new m,Zqe=new m,dv=new m,Gqe=new m,Eqe=new m,lhe=new ve,Iqe=new $,Xqe=new $,Wqe=new m;function Pqe(e,t,n,i,o,r,s,a,c){let d=e.positions,u=ai.triangulate(e.positions2D,e.holes);u.length<3&&(u=[0,1,2]);let h=Ae.createTypedArray(d.length,u.length);h.set(u);let p=Iqe;if(i!==0){let b=ve.fromAxisAngle(s,i,lhe);if(p=$.fromQuaternion(b,p),t.tangent||t.bitangent){b=ve.fromAxisAngle(s,-i,lhe);let R=$.fromQuaternion(b,Xqe);a=m.normalize($.multiplyByVector(R,a,a),a),t.bitangent&&(c=m.normalize(m.cross(s,a,c),c))}}else p=$.clone($.IDENTITY,p);let g=Vqe;t.st&&(g.x=n.x,g.y=n.y);let f=d.length,y=f*3,x=new Float64Array(y),S=t.normal?new Float32Array(y):void 0,C=t.tangent?new Float32Array(y):void 0,V=t.bitangent?new Float32Array(y):void 0,L=t.st?new Float32Array(f*2):void 0,Z=0,E=0,P=0,W=0,v=0;for(let b=0;b<f;b++){let R=d[b];if(x[Z++]=R.x,x[Z++]=R.y,x[Z++]=R.z,t.st)if(l(o)&&o.positions.length===f)L[v++]=o.positions[b].x,L[v++]=o.positions[b].y;else{let G=$.multiplyByVector(p,R,Tqe),I=r(G,Cqe);U.subtract(I,g,I);let w=X.clamp(I.x/n.width,0,1),M=X.clamp(I.y/n.height,0,1);L[v++]=w,L[v++]=M}t.normal&&(S[E++]=s.x,S[E++]=s.y,S[E++]=s.z),t.tangent&&(C[W++]=a.x,C[W++]=a.y,C[W++]=a.z),t.bitangent&&(V[P++]=c.x,V[P++]=c.y,V[P++]=c.z)}let A=new mn;return t.position&&(A.position=new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:x})),t.normal&&(A.normal=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:S})),t.tangent&&(A.tangent=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:C})),t.bitangent&&(A.bitangent=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:V})),t.st&&(A.st=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:L})),new lt({attributes:A,indices:h,primitiveType:we.TRIANGLES})}function dT(e){e=e??Y.EMPTY_OBJECT;let t=e.polygonHierarchy,n=e.textureCoordinates,i=e.vertexFormat??Xe.DEFAULT;this._vertexFormat=Xe.clone(i),this._polygonHierarchy=t,this._stRotation=e.stRotation??0,this._ellipsoid=ne.clone(e.ellipsoid??ne.default),this._workerName="createCoplanarPolygonGeometry",this._textureCoordinates=n,this.packedLength=Bn.computeHierarchyPackedLength(t,m)+Xe.packedLength+ne.packedLength+(l(n)?Bn.computeHierarchyPackedLength(n,U):1)+2}dT.fromPositions=function(e){e=e??Y.EMPTY_OBJECT;let t={polygonHierarchy:{positions:e.positions},vertexFormat:e.vertexFormat,stRotation:e.stRotation,ellipsoid:e.ellipsoid,textureCoordinates:e.textureCoordinates};return new dT(t)};dT.pack=function(e,t,n){return n=n??0,n=Bn.packPolygonHierarchy(e._polygonHierarchy,t,n,m),ne.pack(e._ellipsoid,t,n),n+=ne.packedLength,Xe.pack(e._vertexFormat,t,n),n+=Xe.packedLength,t[n++]=e._stRotation,l(e._textureCoordinates)?n=Bn.packPolygonHierarchy(e._textureCoordinates,t,n,U):t[n++]=-1,t[n++]=e.packedLength,t};var vqe=ne.clone(ne.UNIT_SPHERE),wqe=new Xe,Fqe={polygonHierarchy:{}};dT.unpack=function(e,t,n){t=t??0;let i=Bn.unpackPolygonHierarchy(e,t,m);t=i.startingIndex,delete i.startingIndex;let o=ne.unpack(e,t,vqe);t+=ne.packedLength;let r=Xe.unpack(e,t,wqe);t+=Xe.packedLength;let s=e[t++],a=e[t]===-1?void 0:Bn.unpackPolygonHierarchy(e,t,U);l(a)?(t=a.startingIndex,delete a.startingIndex):t++;let c=e[t++];return l(n)||(n=new dT(Fqe)),n._polygonHierarchy=i,n._ellipsoid=ne.clone(o,n._ellipsoid),n._vertexFormat=Xe.clone(r,n._vertexFormat),n._stRotation=s,n._textureCoordinates=a,n.packedLength=c,n};dT.createGeometry=function(e){let t=e._vertexFormat,n=e._polygonHierarchy,i=e._stRotation,o=e._textureCoordinates,r=l(o),s=n.positions;if(s=_o(s,m.equalsEpsilon,!0),s.length<3)return;let a=Lqe,c=Rqe,d=Zqe,u=Gqe,h=Eqe;if(!Eb.computeProjectTo2DArguments(s,dv,u,h))return;if(a=m.cross(u,h,a),a=m.normalize(a,a),!m.equalsEpsilon(dv,m.ZERO,X.EPSILON6)){let v=e._ellipsoid.geodeticSurfaceNormal(dv,Wqe);m.dot(a,v)<0&&(a=m.negate(a,a),u=m.negate(u,u))}let g=Eb.createProjectPointsTo2DFunction(dv,u,h),f=Eb.createProjectPointTo2DFunction(dv,u,h);t.tangent&&(c=m.clone(u,c)),t.bitangent&&(d=m.clone(h,d));let y=Bn.polygonsFromHierarchy(n,r,g,!1),x=y.hierarchy,S=y.polygons,C=function(v){return v},V=r?Bn.polygonsFromHierarchy(o,!0,C,!1).polygons:void 0;if(x.length===0)return;s=x[0].outerRing;let L=le.fromPoints(s),Z=Bn.computeBoundingRectangle(a,f,s,i,Sqe),E=[];for(let v=0;v<S.length;v++){let A=new Et({geometry:Pqe(S[v],t,Z,i,r?V[v]:void 0,f,a,c,d)});E.push(A)}let P=Fn.combineInstances(E)[0];P.attributes.position.values=new Float64Array(P.attributes.position.values),P.indices=Ae.createTypedArray(P.attributes.position.values.length/3,P.indices);let W=P.attributes;return t.position||delete W.position,new lt({attributes:W,indices:P.indices,primitiveType:P.primitiveType,boundingSphere:L})};var uv=dT;var Eti=_(T(),1);var dhe=[],Qk=[];function Aqe(e,t,n,i,o){let s=Qr.fromPoints(t,e).projectPointsOntoPlane(t,dhe);ai.computeWindingOrder2D(s)===us.CLOCKWISE&&(s.reverse(),t=t.slice().reverse());let c,d,u=t.length,h=0;if(i)for(c=new Float64Array(u*2*3),d=0;d<u;d++){let f=t[d],y=t[(d+1)%u];c[h++]=f.x,c[h++]=f.y,c[h++]=f.z,c[h++]=y.x,c[h++]=y.y,c[h++]=y.z}else{let f=0;if(o===en.GEODESIC)for(d=0;d<u;d++)f+=Bn.subdivideLineCount(t[d],t[(d+1)%u],n);else if(o===en.RHUMB)for(d=0;d<u;d++)f+=Bn.subdivideRhumbLineCount(e,t[d],t[(d+1)%u],n);for(c=new Float64Array(f*3),d=0;d<u;d++){let y;o===en.GEODESIC?y=Bn.subdivideLine(t[d],t[(d+1)%u],n,Qk):o===en.RHUMB&&(y=Bn.subdivideRhumbLine(e,t[d],t[(d+1)%u],n,Qk));let x=y.length;for(let S=0;S<x;++S)c[h++]=y[S]}}u=c.length/3;let p=u*2,g=Ae.createTypedArray(u,p);for(h=0,d=0;d<u-1;d++)g[h++]=d,g[h++]=d+1;return g[h++]=u-1,g[h++]=0,new Et({geometry:new lt({attributes:new mn({position:new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:c})}),indices:g,primitiveType:we.LINES})})}function Mqe(e,t,n,i,o){let s=Qr.fromPoints(t,e).projectPointsOntoPlane(t,dhe);ai.computeWindingOrder2D(s)===us.CLOCKWISE&&(s.reverse(),t=t.slice().reverse());let c,d,u=t.length,h=new Array(u),p=0;if(i)for(c=new Float64Array(u*2*3*2),d=0;d<u;++d){h[d]=p/3;let x=t[d],S=t[(d+1)%u];c[p++]=x.x,c[p++]=x.y,c[p++]=x.z,c[p++]=S.x,c[p++]=S.y,c[p++]=S.z}else{let x=0;if(o===en.GEODESIC)for(d=0;d<u;d++)x+=Bn.subdivideLineCount(t[d],t[(d+1)%u],n);else if(o===en.RHUMB)for(d=0;d<u;d++)x+=Bn.subdivideRhumbLineCount(e,t[d],t[(d+1)%u],n);for(c=new Float64Array(x*3*2),d=0;d<u;++d){h[d]=p/3;let S;o===en.GEODESIC?S=Bn.subdivideLine(t[d],t[(d+1)%u],n,Qk):o===en.RHUMB&&(S=Bn.subdivideRhumbLine(e,t[d],t[(d+1)%u],n,Qk));let C=S.length;for(let V=0;V<C;++V)c[p++]=S[V]}}u=c.length/(3*2);let g=h.length,f=(u*2+g)*2,y=Ae.createTypedArray(u+g,f);for(p=0,d=0;d<u;++d)y[p++]=d,y[p++]=(d+1)%u,y[p++]=d+u,y[p++]=(d+1)%u+u;for(d=0;d<g;d++){let x=h[d];y[p++]=x,y[p++]=x+u}return new Et({geometry:new lt({attributes:new mn({position:new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:c})}),indices:y,primitiveType:we.LINES})})}function uT(e){let t=e.polygonHierarchy,n=e.ellipsoid??ne.default,i=e.granularity??X.RADIANS_PER_DEGREE,o=e.perPositionHeight??!1,r=o&&l(e.extrudedHeight),s=e.arcType??en.GEODESIC,a=e.height??0,c=e.extrudedHeight??a;if(!r){let d=Math.max(a,c);c=Math.min(a,c),a=d}this._ellipsoid=ne.clone(n),this._granularity=i,this._height=a,this._extrudedHeight=c,this._arcType=s,this._polygonHierarchy=t,this._perPositionHeight=o,this._perPositionHeightExtrude=r,this._offsetAttribute=e.offsetAttribute,this._workerName="createPolygonOutlineGeometry",this.packedLength=Bn.computeHierarchyPackedLength(t,m)+ne.packedLength+8}uT.pack=function(e,t,n){return n=n??0,n=Bn.packPolygonHierarchy(e._polygonHierarchy,t,n,m),ne.pack(e._ellipsoid,t,n),n+=ne.packedLength,t[n++]=e._height,t[n++]=e._extrudedHeight,t[n++]=e._granularity,t[n++]=e._perPositionHeightExtrude?1:0,t[n++]=e._perPositionHeight?1:0,t[n++]=e._arcType,t[n++]=e._offsetAttribute??-1,t[n]=e.packedLength,t};var Nqe=ne.clone(ne.UNIT_SPHERE),kqe={polygonHierarchy:{}};uT.unpack=function(e,t,n){t=t??0;let i=Bn.unpackPolygonHierarchy(e,t,m);t=i.startingIndex,delete i.startingIndex;let o=ne.unpack(e,t,Nqe);t+=ne.packedLength;let r=e[t++],s=e[t++],a=e[t++],c=e[t++]===1,d=e[t++]===1,u=e[t++],h=e[t++],p=e[t];return l(n)||(n=new uT(kqe)),n._polygonHierarchy=i,n._ellipsoid=ne.clone(o,n._ellipsoid),n._height=r,n._extrudedHeight=s,n._granularity=a,n._perPositionHeight=d,n._perPositionHeightExtrude=c,n._arcType=u,n._offsetAttribute=h===-1?void 0:h,n.packedLength=p,n};uT.fromPositions=function(e){e=e??Y.EMPTY_OBJECT;let t={polygonHierarchy:{positions:e.positions},height:e.height,extrudedHeight:e.extrudedHeight,ellipsoid:e.ellipsoid,granularity:e.granularity,perPositionHeight:e.perPositionHeight,arcType:e.arcType,offsetAttribute:e.offsetAttribute};return new uT(t)};uT.createGeometry=function(e){let t=e._ellipsoid,n=e._granularity,i=e._polygonHierarchy,o=e._perPositionHeight,r=e._arcType,s=Bn.polygonOutlinesFromHierarchy(i,!o,t);if(s.length===0)return;let a,c=[],d=X.chordLength(n,t.maximumRadius),u=e._height,h=e._extrudedHeight,p=e._perPositionHeightExtrude||!X.equalsEpsilon(u,h,0,X.EPSILON2),g,f;if(p)for(f=0;f<s.length;f++){if(a=Mqe(t,s[f],d,o,r),a.geometry=Bn.scaleToGeodeticHeightExtruded(a.geometry,u,h,t,o),l(e._offsetAttribute)){let S=a.geometry.attributes.position.values.length/3,C=new Uint8Array(S);e._offsetAttribute===rn.TOP?C=C.fill(1,0,S/2):(g=e._offsetAttribute===rn.NONE?0:1,C=C.fill(g)),a.geometry.attributes.applyOffset=new Ge({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:C})}c.push(a)}else for(f=0;f<s.length;f++){if(a=Aqe(t,s[f],d,o,r),a.geometry.attributes.position.values=ai.scaleToGeodeticHeight(a.geometry.attributes.position.values,u,t,!o),l(e._offsetAttribute)){let S=a.geometry.attributes.position.values.length;g=e._offsetAttribute===rn.NONE?0:1;let C=new Uint8Array(S/3).fill(g);a.geometry.attributes.applyOffset=new Ge({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:C})}c.push(a)}let y=Fn.combineInstances(c)[0],x=le.fromVertices(y.attributes.position.values);return new lt({attributes:y.attributes,indices:y.indices,primitiveType:y.primitiveType,boundingSphere:x,offsetAttribute:e._offsetAttribute})};var mv=uT;var uhe="Entity polygons cannot have both height and perPositionHeight. height will be ignored",mhe="heightReference is not supported for entity polygons with perPositionHeight. heightReference will be ignored",hhe=new D,fhe=m.ZERO,phe=new m,bhe=new ce,Uqe=[],Dqe=new U;function Bqe(e){this.id=e,this.vertexFormat=void 0,this.polygonHierarchy=void 0,this.perPositionHeight=void 0,this.closeTop=void 0,this.closeBottom=void 0,this.height=void 0,this.extrudedHeight=void 0,this.granularity=void 0,this.stRotation=void 0,this.offsetAttribute=void 0,this.arcType=void 0,this.textureCoordinates=void 0}function Dd(e,t){Yn.call(this,{entity:e,scene:t,geometryOptions:new Bqe(e),geometryPropertyName:"polygon",observedPropertyNames:["availability","polygon"]}),this._onEntityPropertyChanged(e,"polygon",e.polygon,void 0)}l(Object.create)&&(Dd.prototype=Object.create(Yn.prototype),Dd.prototype.constructor=Dd);Dd.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=this._options,o={show:new xn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),distanceDisplayCondition:kn.fromDistanceDisplayCondition(this._distanceDisplayConditionProperty.getValue(e)),offset:void 0,color:void 0};if(this._materialProperty instanceof Dt){let s;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(s=this._materialProperty.color.getValue(e,hhe)),l(s)||(s=D.WHITE),o.color=Yt.fromColor(s)}l(i.offsetAttribute)&&(o.offset=$i.fromCartesian3(J.getValueOrDefault(this._terrainOffsetProperty,e,fhe,phe)));let r;return i.perPositionHeight&&!l(i.extrudedHeight)?r=new uv(i):r=new ob(i),new Et({id:t,geometry:r,attributes:o})};Dd.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=this._options,o=J.getValueOrDefault(this._outlineColorProperty,e,D.BLACK,hhe),r=this._distanceDisplayConditionProperty.getValue(e),s={show:new xn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Yt.fromColor(o),distanceDisplayCondition:kn.fromDistanceDisplayCondition(r),offset:void 0};l(i.offsetAttribute)&&(s.offset=$i.fromCartesian3(J.getValueOrDefault(this._terrainOffsetProperty,e,fhe,phe)));let a;return i.perPositionHeight&&!l(i.extrudedHeight)?a=new Ku(i):a=new mv(i),new Et({id:t,geometry:a,attributes:s})};Dd.prototype._computeCenter=function(e,t){let n=J.getValueOrUndefined(this._entity.polygon.hierarchy,e);if(!l(n))return;let i=n.positions;if(i.length===0)return;let o=this._scene.ellipsoid,r=Qr.fromPoints(i,o),s=r.projectPointsOntoPlane(i,Uqe),a=s.length,c=0,d=a-1,u=new U;for(let p=0;p<a;d=p++){let g=s[p],f=s[d],y=g.x*f.y-f.x*g.y,x=U.add(g,f,Dqe);x=U.multiplyByScalar(x,y,x),u=U.add(u,x,u),c+=y}let h=1/(c*3);return u=U.multiplyByScalar(u,h,u),r.projectPointOntoEllipsoid(u,t)};Dd.prototype._isHidden=function(e,t){return!l(t.hierarchy)||oi.prototype._isHidden.call(this,e,t)};Dd.prototype._isOnTerrain=function(e,t){let n=Yn.prototype._isOnTerrain.call(this,e,t),i=t.perPositionHeight,o=l(i)&&(i.isConstant?i.getValue(Be.MINIMUM_VALUE):!0);return n&&!o};Dd.prototype._isDynamic=function(e,t){return!t.hierarchy.isConstant||!J.isConstant(t.height)||!J.isConstant(t.extrudedHeight)||!J.isConstant(t.granularity)||!J.isConstant(t.stRotation)||!J.isConstant(t.textureCoordinates)||!J.isConstant(t.outlineWidth)||!J.isConstant(t.perPositionHeight)||!J.isConstant(t.closeTop)||!J.isConstant(t.closeBottom)||!J.isConstant(t.zIndex)||!J.isConstant(t.arcType)||this._onTerrain&&!J.isConstant(this._materialProperty)&&!(this._materialProperty instanceof Dt)};Dd.prototype._setStaticOptions=function(e,t){let n=this._materialProperty instanceof Dt,i=this._options;i.vertexFormat=n?dn.VERTEX_FORMAT:ao.MaterialSupport.TEXTURED.vertexFormat;let o=t.hierarchy.getValue(Be.MINIMUM_VALUE),r=J.getValueOrUndefined(t.height,Be.MINIMUM_VALUE),s=J.getValueOrDefault(t.heightReference,Be.MINIMUM_VALUE,Je.NONE),a=J.getValueOrUndefined(t.extrudedHeight,Be.MINIMUM_VALUE),c=J.getValueOrDefault(t.extrudedHeightReference,Be.MINIMUM_VALUE,Je.NONE),d=J.getValueOrDefault(t.perPositionHeight,Be.MINIMUM_VALUE,!1);r=Yn.getGeometryHeight(r,s);let u;if(d?(l(r)&&(r=void 0,_t(uhe)),s!==Je.NONE&&d&&(r=void 0,_t(mhe))):(l(a)&&!l(r)&&(r=0),u=Yn.computeGeometryOffsetAttribute(r,s,a,c)),i.polygonHierarchy=o,i.granularity=J.getValueOrUndefined(t.granularity,Be.MINIMUM_VALUE),i.stRotation=J.getValueOrUndefined(t.stRotation,Be.MINIMUM_VALUE),i.perPositionHeight=d,i.closeTop=J.getValueOrDefault(t.closeTop,Be.MINIMUM_VALUE,!0),i.closeBottom=J.getValueOrDefault(t.closeBottom,Be.MINIMUM_VALUE,!0),i.offsetAttribute=u,i.height=r,i.arcType=J.getValueOrDefault(t.arcType,Be.MINIMUM_VALUE,en.GEODESIC),i.textureCoordinates=J.getValueOrUndefined(t.textureCoordinates,Be.MINIMUM_VALUE),a=Yn.getGeometryExtrudedHeight(a,c),a===Yn.CLAMP_TO_GROUND){let h=ob.computeRectangleFromPositions(i.polygonHierarchy.positions,i.ellipsoid,i.arcType,bhe);a=di.getMinimumMaximumHeights(h).minimumTerrainHeight}i.extrudedHeight=a};Dd.prototype._getIsClosed=function(e){let t=e.height,n=e.extrudedHeight,i=l(n)&&n!==t;return!e.perPositionHeight&&(!i&&t===0||i&&e.closeTop&&e.closeBottom)};Dd.DynamicGeometryUpdater=rV;function rV(e,t,n){ii.call(this,e,t,n)}l(Object.create)&&(rV.prototype=Object.create(ii.prototype),rV.prototype.constructor=rV);rV.prototype._isHidden=function(e,t,n){return!l(this._options.polygonHierarchy)||ii.prototype._isHidden.call(this,e,t,n)};rV.prototype._setOptions=function(e,t,n){let i=this._options;i.polygonHierarchy=J.getValueOrUndefined(t.hierarchy,n);let o=J.getValueOrUndefined(t.height,n),r=J.getValueOrDefault(t.heightReference,n,Je.NONE),s=J.getValueOrDefault(t.extrudedHeightReference,n,Je.NONE),a=J.getValueOrUndefined(t.extrudedHeight,n),c=J.getValueOrUndefined(t.perPositionHeight,n);o=Yn.getGeometryHeight(o,s);let d;if(c?(l(o)&&(o=void 0,_t(uhe)),r!==Je.NONE&&c&&(o=void 0,_t(mhe))):(l(a)&&!l(o)&&(o=0),d=Yn.computeGeometryOffsetAttribute(o,r,a,s)),i.granularity=J.getValueOrUndefined(t.granularity,n),i.stRotation=J.getValueOrUndefined(t.stRotation,n),i.textureCoordinates=J.getValueOrUndefined(t.textureCoordinates,n),i.perPositionHeight=J.getValueOrUndefined(t.perPositionHeight,n),i.closeTop=J.getValueOrDefault(t.closeTop,n,!0),i.closeBottom=J.getValueOrDefault(t.closeBottom,n,!0),i.offsetAttribute=d,i.height=o,i.arcType=J.getValueOrDefault(t.arcType,n,en.GEODESIC),a=Yn.getGeometryExtrudedHeight(a,s),a===Yn.CLAMP_TO_GROUND){let u=ob.computeRectangleFromPositions(i.polygonHierarchy.positions,i.ellipsoid,i.arcType,bhe);a=di.getMinimumMaximumHeights(u).minimumTerrainHeight}i.extrudedHeight=a};var hv=Dd;var mii=_(T(),1);var Gni=_(T(),1);function Oqe(e,t,n,i){let o=new mn;i.position&&(o.position=new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:e}));let r=t.length,s=e.length/3,a=(s-r*2)/(r*2),c=ai.triangulate(t),d=(a-1)*r*6+c.length*2,u=Ae.createTypedArray(s,d),h,p,g,f,y,x,S=r*2,C=0;for(h=0;h<a-1;h++){for(p=0;p<r-1;p++)g=p*2+h*r*2,x=g+S,f=g+1,y=f+S,u[C++]=f,u[C++]=g,u[C++]=y,u[C++]=y,u[C++]=g,u[C++]=x;g=r*2-2+h*r*2,f=g+1,y=f+S,x=g+S,u[C++]=f,u[C++]=g,u[C++]=y,u[C++]=y,u[C++]=g,u[C++]=x}if(i.st||i.tangent||i.bitangent){let Z=new Float32Array(s*2),E=1/(a-1),P=1/n.height,W=n.height/2,v,A,b=0;for(h=0;h<a;h++){for(v=h*E,A=P*(t[0].y+W),Z[b++]=v,Z[b++]=A,p=1;p<r;p++)A=P*(t[p].y+W),Z[b++]=v,Z[b++]=A,Z[b++]=v,Z[b++]=A;A=P*(t[0].y+W),Z[b++]=v,Z[b++]=A}for(p=0;p<r;p++)v=0,A=P*(t[p].y+W),Z[b++]=v,Z[b++]=A;for(p=0;p<r;p++)v=(a-1)*E,A=P*(t[p].y+W),Z[b++]=v,Z[b++]=A;o.st=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:new Float32Array(Z)})}let V=s-r*2;for(h=0;h<c.length;h+=3){let Z=c[h]+V,E=c[h+1]+V,P=c[h+2]+V;u[C++]=Z,u[C++]=E,u[C++]=P,u[C++]=P+r,u[C++]=E+r,u[C++]=Z+r}let L=new lt({attributes:o,indices:u,boundingSphere:le.fromVertices(e),primitiveType:we.TRIANGLES});if(i.normal&&(L=Fn.computeNormal(L)),i.tangent||i.bitangent){try{L=Fn.computeTangentAndBitangent(L)}catch{_t("polyline-volume-tangent-bitangent","Unable to compute tangents and bitangents for polyline volume geometry")}i.tangent||(L.attributes.tangent=void 0),i.bitangent||(L.attributes.bitangent=void 0),i.st||(L.attributes.st=void 0)}return L}function pv(e){e=e??Y.EMPTY_OBJECT;let t=e.polylinePositions,n=e.shapePositions;this._positions=t,this._shape=n,this._ellipsoid=ne.clone(e.ellipsoid??ne.default),this._cornerType=e.cornerType??vi.ROUNDED,this._vertexFormat=Xe.clone(e.vertexFormat??Xe.DEFAULT),this._granularity=e.granularity??X.RADIANS_PER_DEGREE,this._workerName="createPolylineVolumeGeometry";let i=1+t.length*m.packedLength;i+=1+n.length*U.packedLength,this.packedLength=i+ne.packedLength+Xe.packedLength+2}pv.pack=function(e,t,n){n=n??0;let i,o=e._positions,r=o.length;for(t[n++]=r,i=0;i<r;++i,n+=m.packedLength)m.pack(o[i],t,n);let s=e._shape;for(r=s.length,t[n++]=r,i=0;i<r;++i,n+=U.packedLength)U.pack(s[i],t,n);return ne.pack(e._ellipsoid,t,n),n+=ne.packedLength,Xe.pack(e._vertexFormat,t,n),n+=Xe.packedLength,t[n++]=e._cornerType,t[n]=e._granularity,t};var ghe=ne.clone(ne.UNIT_SPHERE),yhe=new Xe,fv={polylinePositions:void 0,shapePositions:void 0,ellipsoid:ghe,vertexFormat:yhe,cornerType:void 0,granularity:void 0};pv.unpack=function(e,t,n){t=t??0;let i,o=e[t++],r=new Array(o);for(i=0;i<o;++i,t+=m.packedLength)r[i]=m.unpack(e,t);o=e[t++];let s=new Array(o);for(i=0;i<o;++i,t+=U.packedLength)s[i]=U.unpack(e,t);let a=ne.unpack(e,t,ghe);t+=ne.packedLength;let c=Xe.unpack(e,t,yhe);t+=Xe.packedLength;let d=e[t++],u=e[t];return l(n)?(n._positions=r,n._shape=s,n._ellipsoid=ne.clone(a,n._ellipsoid),n._vertexFormat=Xe.clone(c,n._vertexFormat),n._cornerType=d,n._granularity=u,n):(fv.polylinePositions=r,fv.shapePositions=s,fv.cornerType=d,fv.granularity=u,new pv(fv))};var Yqe=new Ke;pv.createGeometry=function(e){let t=e._positions,n=_o(t,m.equalsEpsilon),i=e._shape;if(i=ph.removeDuplicatesFromShape(i),n.length<2||i.length<3)return;ai.computeWindingOrder2D(i)===us.CLOCKWISE&&i.reverse();let o=Ke.fromPoints(i,Yqe),r=ph.computePositions(n,i,o,e,!0);return Oqe(r,i,o,e._vertexFormat)};var bv=pv;var Jni=_(T(),1);function zqe(e,t){let n=new mn;n.position=new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:e});let i=t.length,o=n.position.values.length/3,s=e.length/3/i,a=Ae.createTypedArray(o,2*i*(s+1)),c,d,u=0;c=0;let h=c*i;for(d=0;d<i-1;d++)a[u++]=d+h,a[u++]=d+h+1;for(a[u++]=i-1+h,a[u++]=h,c=s-1,h=c*i,d=0;d<i-1;d++)a[u++]=d+h,a[u++]=d+h+1;for(a[u++]=i-1+h,a[u++]=h,c=0;c<s-1;c++){let g=i*c,f=g+i;for(d=0;d<i;d++)a[u++]=d+g,a[u++]=d+f}return new lt({attributes:n,indices:Ae.createTypedArray(o,a),boundingSphere:le.fromVertices(e),primitiveType:we.LINES})}function yv(e){e=e??Y.EMPTY_OBJECT;let t=e.polylinePositions,n=e.shapePositions;this._positions=t,this._shape=n,this._ellipsoid=ne.clone(e.ellipsoid??ne.default),this._cornerType=e.cornerType??vi.ROUNDED,this._granularity=e.granularity??X.RADIANS_PER_DEGREE,this._workerName="createPolylineVolumeOutlineGeometry";let i=1+t.length*m.packedLength;i+=1+n.length*U.packedLength,this.packedLength=i+ne.packedLength+2}yv.pack=function(e,t,n){n=n??0;let i,o=e._positions,r=o.length;for(t[n++]=r,i=0;i<r;++i,n+=m.packedLength)m.pack(o[i],t,n);let s=e._shape;for(r=s.length,t[n++]=r,i=0;i<r;++i,n+=U.packedLength)U.pack(s[i],t,n);return ne.pack(e._ellipsoid,t,n),n+=ne.packedLength,t[n++]=e._cornerType,t[n]=e._granularity,t};var xhe=ne.clone(ne.UNIT_SPHERE),gv={polylinePositions:void 0,shapePositions:void 0,ellipsoid:xhe,height:void 0,cornerType:void 0,granularity:void 0};yv.unpack=function(e,t,n){t=t??0;let i,o=e[t++],r=new Array(o);for(i=0;i<o;++i,t+=m.packedLength)r[i]=m.unpack(e,t);o=e[t++];let s=new Array(o);for(i=0;i<o;++i,t+=U.packedLength)s[i]=U.unpack(e,t);let a=ne.unpack(e,t,xhe);t+=ne.packedLength;let c=e[t++],d=e[t];return l(n)?(n._positions=r,n._shape=s,n._ellipsoid=ne.clone(a,n._ellipsoid),n._cornerType=c,n._granularity=d,n):(gv.polylinePositions=r,gv.shapePositions=s,gv.cornerType=c,gv.granularity=d,new yv(gv))};var Hqe=new Ke;yv.createGeometry=function(e){let t=e._positions,n=_o(t,m.equalsEpsilon),i=e._shape;if(i=ph.removeDuplicatesFromShape(i),n.length<2||i.length<3)return;ai.computeWindingOrder2D(i)===us.CLOCKWISE&&i.reverse();let o=Ke.fromPoints(i,Hqe),r=ph.computePositions(n,i,o,e,!1);return zqe(r,i)};var xv=yv;var _he=new D;function Kqe(e){this.id=e,this.vertexFormat=void 0,this.polylinePositions=void 0,this.shapePositions=void 0,this.cornerType=void 0,this.granularity=void 0}function wf(e,t){oi.call(this,{entity:e,scene:t,geometryOptions:new Kqe(e),geometryPropertyName:"polylineVolume",observedPropertyNames:["availability","polylineVolume"]}),this._onEntityPropertyChanged(e,"polylineVolume",e.polylineVolume,void 0)}l(Object.create)&&(wf.prototype=Object.create(oi.prototype),wf.prototype.constructor=wf);wf.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i,o,r=new xn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),s=this._distanceDisplayConditionProperty.getValue(e),a=kn.fromDistanceDisplayCondition(s);if(this._materialProperty instanceof Dt){let c;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(c=this._materialProperty.color.getValue(e,_he)),l(c)||(c=D.WHITE),o=Yt.fromColor(c),i={show:r,distanceDisplayCondition:a,color:o}}else i={show:r,distanceDisplayCondition:a};return new Et({id:t,geometry:new bv(this._options),attributes:i})};wf.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=J.getValueOrDefault(this._outlineColorProperty,e,D.BLACK,_he),o=this._distanceDisplayConditionProperty.getValue(e);return new Et({id:t,geometry:new xv(this._options),attributes:{show:new xn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Yt.fromColor(i),distanceDisplayCondition:kn.fromDistanceDisplayCondition(o)}})};wf.prototype._isHidden=function(e,t){return!l(t.positions)||!l(t.shape)||oi.prototype._isHidden.call(this,e,t)};wf.prototype._isDynamic=function(e,t){return!t.positions.isConstant||!t.shape.isConstant||!J.isConstant(t.granularity)||!J.isConstant(t.outlineWidth)||!J.isConstant(t.cornerType)};wf.prototype._setStaticOptions=function(e,t){let n=t.granularity,i=t.cornerType,o=this._options,r=this._materialProperty instanceof Dt;o.vertexFormat=r?dn.VERTEX_FORMAT:ao.MaterialSupport.TEXTURED.vertexFormat,o.polylinePositions=t.positions.getValue(Be.MINIMUM_VALUE,o.polylinePositions),o.shapePositions=t.shape.getValue(Be.MINIMUM_VALUE,o.shape),o.granularity=l(n)?n.getValue(Be.MINIMUM_VALUE):void 0,o.cornerType=l(i)?i.getValue(Be.MINIMUM_VALUE):void 0};wf.DynamicGeometryUpdater=sV;function sV(e,t,n){ii.call(this,e,t,n)}l(Object.create)&&(sV.prototype=Object.create(ii.prototype),sV.prototype.constructor=sV);sV.prototype._isHidden=function(e,t,n){let i=this._options;return!l(i.polylinePositions)||!l(i.shapePositions)||ii.prototype._isHidden.call(this,e,t,n)};sV.prototype._setOptions=function(e,t,n){let i=this._options;i.polylinePositions=J.getValueOrUndefined(t.positions,n,i.polylinePositions),i.shapePositions=J.getValueOrUndefined(t.shape,n),i.granularity=J.getValueOrUndefined(t.granularity,n),i.cornerType=J.getValueOrUndefined(t.cornerType,n)};var _v=wf;var loi=_(T(),1);var Mii=_(T(),1);var RJ=new m,Che=new m,Vhe=new m,Lhe=new m,Rhe=new ce,Jqe=new U,Qqe=new le,jqe=new le;function Zhe(e,t){let n=new lt({attributes:new mn,primitiveType:we.TRIANGLES});return n.attributes.position=new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:t.positions}),e.normal&&(n.attributes.normal=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:t.normals})),e.tangent&&(n.attributes.tangent=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:t.tangents})),e.bitangent&&(n.attributes.bitangent=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:t.bitangents})),n}function qqe(e,t,n,i){let o=e.length,r=t.normal?new Float32Array(o):void 0,s=t.tangent?new Float32Array(o):void 0,a=t.bitangent?new Float32Array(o):void 0,c=0,d=Lhe,u=Vhe,h=Che;if(t.normal||t.tangent||t.bitangent)for(let p=0;p<o;p+=3){let g=m.fromArray(e,p,RJ),f=c+1,y=c+2;h=n.geodeticSurfaceNormal(g,h),(t.tangent||t.bitangent)&&(m.cross(m.UNIT_Z,h,u),$.multiplyByVector(i,u,u),m.normalize(u,u),t.bitangent&&m.normalize(m.cross(h,u,d),d)),t.normal&&(r[c]=h.x,r[f]=h.y,r[y]=h.z),t.tangent&&(s[c]=u.x,s[f]=u.y,s[y]=u.z),t.bitangent&&(a[c]=d.x,a[f]=d.y,a[y]=d.z),c+=3}return Zhe(t,{positions:e,normals:r,tangents:s,bitangents:a})}var ZJ=new m,Ghe=new m;function $qe(e,t,n){let i=e.length,o=t.normal?new Float32Array(i):void 0,r=t.tangent?new Float32Array(i):void 0,s=t.bitangent?new Float32Array(i):void 0,a=0,c=0,d=0,u=!0,h=Lhe,p=Vhe,g=Che;if(t.normal||t.tangent||t.bitangent)for(let f=0;f<i;f+=6){let y=m.fromArray(e,f,RJ),x=m.fromArray(e,(f+6)%i,ZJ);if(u){let S=m.fromArray(e,(f+3)%i,Ghe);m.subtract(x,y,x),m.subtract(S,y,S),g=m.normalize(m.cross(S,x,g),g),u=!1}m.equalsEpsilon(x,y,X.EPSILON10)&&(u=!0),(t.tangent||t.bitangent)&&(h=n.geodeticSurfaceNormal(y,h),t.tangent&&(p=m.normalize(m.cross(h,g,p),p))),t.normal&&(o[a++]=g.x,o[a++]=g.y,o[a++]=g.z,o[a++]=g.x,o[a++]=g.y,o[a++]=g.z),t.tangent&&(r[c++]=p.x,r[c++]=p.y,r[c++]=p.z,r[c++]=p.x,r[c++]=p.y,r[c++]=p.z),t.bitangent&&(s[d++]=h.x,s[d++]=h.y,s[d++]=h.z,s[d++]=h.x,s[d++]=h.y,s[d++]=h.z)}return Zhe(t,{positions:e,normals:o,tangents:r,bitangents:s})}function Ehe(e,t){let n=e._vertexFormat,i=e._ellipsoid,o=t.height,r=t.width,s=t.northCap,a=t.southCap,c=0,d=o,u=o,h=0;s&&(c=1,u-=1,h+=1),a&&(d-=1,u-=1,h+=1),h+=r*u;let p=n.position?new Float64Array(h*3):void 0,g=n.st?new Float32Array(h*2):void 0,f=0,y=0,x=RJ,S=Jqe,C=Number.MAX_VALUE,V=Number.MAX_VALUE,L=-Number.MAX_VALUE,Z=-Number.MAX_VALUE;for(let R=c;R<d;++R)for(let G=0;G<r;++G)Gs.computePosition(t,i,n.st,R,G,x,S),p[f++]=x.x,p[f++]=x.y,p[f++]=x.z,n.st&&(g[y++]=S.x,g[y++]=S.y,C=Math.min(C,S.x),V=Math.min(V,S.y),L=Math.max(L,S.x),Z=Math.max(Z,S.y));if(s&&(Gs.computePosition(t,i,n.st,0,0,x,S),p[f++]=x.x,p[f++]=x.y,p[f++]=x.z,n.st&&(g[y++]=S.x,g[y++]=S.y,C=S.x,V=S.y,L=S.x,Z=S.y)),a&&(Gs.computePosition(t,i,n.st,o-1,0,x,S),p[f++]=x.x,p[f++]=x.y,p[f]=x.z,n.st&&(g[y++]=S.x,g[y]=S.y,C=Math.min(C,S.x),V=Math.min(V,S.y),L=Math.max(L,S.x),Z=Math.max(Z,S.y))),n.st&&(C<0||V<0||L>1||Z>1))for(let R=0;R<g.length;R+=2)g[R]=(g[R]-C)/(L-C),g[R+1]=(g[R+1]-V)/(Z-V);let E=qqe(p,n,i,t.tangentRotationMatrix),P=6*(r-1)*(u-1);s&&(P+=3*(r-1)),a&&(P+=3*(r-1));let W=Ae.createTypedArray(h,P),v=0,A=0,b;for(b=0;b<u-1;++b){for(let R=0;R<r-1;++R){let G=v,I=G+r,w=I+1,M=G+1;W[A++]=G,W[A++]=I,W[A++]=M,W[A++]=M,W[A++]=I,W[A++]=w,++v}++v}if(s||a){let R=h-1,G=h-1;s&&a&&(R=h-2);let I,w;if(v=0,s)for(b=0;b<r-1;b++)I=v,w=I+1,W[A++]=R,W[A++]=I,W[A++]=w,++v;if(a)for(v=(u-1)*r,b=0;b<r-1;b++)I=v,w=I+1,W[A++]=I,W[A++]=G,W[A++]=w,++v}return E.indices=W,n.st&&(E.attributes.st=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:g})),E}function aV(e,t,n,i,o){return e[t++]=i[n],e[t++]=i[n+1],e[t++]=i[n+2],e[t++]=o[n],e[t++]=o[n+1],e[t]=o[n+2],e}function cV(e,t,n,i){return e[t++]=i[n],e[t++]=i[n+1],e[t++]=i[n],e[t]=i[n+1],e}var GJ=new Xe;function e$e(e,t){let n=e._shadowVolume,i=e._offsetAttribute,o=e._vertexFormat,r=e._extrudedHeight,s=e._surfaceHeight,a=e._ellipsoid,c=t.height,d=t.width,u;if(n){let ke=Xe.clone(o,GJ);ke.normal=!0,e._vertexFormat=ke}let h=Ehe(e,t);n&&(e._vertexFormat=o);let p=ai.scaleToGeodeticHeight(h.attributes.position.values,s,a,!1);p=new Float64Array(p);let g=p.length,f=g*2,y=new Float64Array(f);y.set(p);let x=ai.scaleToGeodeticHeight(h.attributes.position.values,r,a);y.set(x,g),h.attributes.position.values=y;let S=o.normal?new Float32Array(f):void 0,C=o.tangent?new Float32Array(f):void 0,V=o.bitangent?new Float32Array(f):void 0,L=o.st?new Float32Array(f/3*2):void 0,Z,E;if(o.normal){for(E=h.attributes.normal.values,S.set(E),u=0;u<g;u++)E[u]=-E[u];S.set(E,g),h.attributes.normal.values=S}if(n){E=h.attributes.normal.values,o.normal||(h.attributes.normal=void 0);let ke=new Float32Array(f);for(u=0;u<g;u++)E[u]=-E[u];ke.set(E,g),h.attributes.extrudeDirection=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:ke})}let P,W=l(i);if(W){let ke=g/3*2,Ht=new Uint8Array(ke);i===rn.TOP?Ht=Ht.fill(1,0,ke/2):(P=i===rn.NONE?0:1,Ht=Ht.fill(P)),h.attributes.applyOffset=new Ge({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:Ht})}if(o.tangent){let ke=h.attributes.tangent.values;for(C.set(ke),u=0;u<g;u++)ke[u]=-ke[u];C.set(ke,g),h.attributes.tangent.values=C}if(o.bitangent){let ke=h.attributes.bitangent.values;V.set(ke),V.set(ke,g),h.attributes.bitangent.values=V}o.st&&(Z=h.attributes.st.values,L.set(Z),L.set(Z,g/3*2),h.attributes.st.values=L);let v=h.indices,A=v.length,b=g/3,R=Ae.createTypedArray(f/3,A*2);for(R.set(v),u=0;u<A;u+=3)R[u+A]=v[u+2]+b,R[u+1+A]=v[u+1]+b,R[u+2+A]=v[u]+b;h.indices=R;let G=t.northCap,I=t.southCap,w=c,M=2,B=0,k=4,O=4;G&&(M-=1,w-=1,B+=1,k-=2,O-=1),I&&(M-=1,w-=1,B+=1,k-=2,O-=1),B+=M*d+2*w-k;let N=(B+O)*2,z=new Float64Array(N*3),K=n?new Float32Array(N*3):void 0,te=W?new Uint8Array(N):void 0,H=o.st?new Float32Array(N*2):void 0,j=i===rn.TOP;W&&!j&&(P=i===rn.ALL?1:0,te=te.fill(P));let ee=0,fe=0,Te=0,de=0,xe=d*w,Ce;for(u=0;u<xe;u+=d)Ce=u*3,z=aV(z,ee,Ce,p,x),ee+=6,o.st&&(H=cV(H,fe,u*2,Z),fe+=4),n&&(Te+=3,K[Te++]=E[Ce],K[Te++]=E[Ce+1],K[Te++]=E[Ce+2]),j&&(te[de++]=1,de+=1);if(I){let ke=G?xe+1:xe;for(Ce=ke*3,u=0;u<2;u++)z=aV(z,ee,Ce,p,x),ee+=6,o.st&&(H=cV(H,fe,ke*2,Z),fe+=4),n&&(Te+=3,K[Te++]=E[Ce],K[Te++]=E[Ce+1],K[Te++]=E[Ce+2]),j&&(te[de++]=1,de+=1)}else for(u=xe-d;u<xe;u++)Ce=u*3,z=aV(z,ee,Ce,p,x),ee+=6,o.st&&(H=cV(H,fe,u*2,Z),fe+=4),n&&(Te+=3,K[Te++]=E[Ce],K[Te++]=E[Ce+1],K[Te++]=E[Ce+2]),j&&(te[de++]=1,de+=1);for(u=xe-1;u>0;u-=d)Ce=u*3,z=aV(z,ee,Ce,p,x),ee+=6,o.st&&(H=cV(H,fe,u*2,Z),fe+=4),n&&(Te+=3,K[Te++]=E[Ce],K[Te++]=E[Ce+1],K[Te++]=E[Ce+2]),j&&(te[de++]=1,de+=1);if(G){let ke=xe;for(Ce=ke*3,u=0;u<2;u++)z=aV(z,ee,Ce,p,x),ee+=6,o.st&&(H=cV(H,fe,ke*2,Z),fe+=4),n&&(Te+=3,K[Te++]=E[Ce],K[Te++]=E[Ce+1],K[Te++]=E[Ce+2]),j&&(te[de++]=1,de+=1)}else for(u=d-1;u>=0;u--)Ce=u*3,z=aV(z,ee,Ce,p,x),ee+=6,o.st&&(H=cV(H,fe,u*2,Z),fe+=4),n&&(Te+=3,K[Te++]=E[Ce],K[Te++]=E[Ce+1],K[Te++]=E[Ce+2]),j&&(te[de++]=1,de+=1);let Ie=$qe(z,o,a);o.st&&(Ie.attributes.st=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:H})),n&&(Ie.attributes.extrudeDirection=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:K})),W&&(Ie.attributes.applyOffset=new Ge({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:te}));let Le=Ae.createTypedArray(N,B*6),Ne,Oe,qe,Rt;g=z.length/3;let Lt=0;for(u=0;u<g-1;u+=2){Ne=u,Rt=(Ne+2)%g;let ke=m.fromArray(z,Ne*3,ZJ),Ht=m.fromArray(z,Rt*3,Ghe);m.equalsEpsilon(ke,Ht,X.EPSILON10)||(Oe=(Ne+1)%g,qe=(Oe+2)%g,Le[Lt++]=Ne,Le[Lt++]=Oe,Le[Lt++]=Rt,Le[Lt++]=Rt,Le[Lt++]=Oe,Le[Lt++]=qe)}return Ie.indices=Le,Ie=Fn.combineInstances([new Et({geometry:h}),new Et({geometry:Ie})]),Ie[0]}var t$e=[new m,new m,new m,new m],Ihe=new he,n$e=new he;function EJ(e,t,n,i,o){if(n===0)return ce.clone(e,o);let r=Gs.computeOptions(e,t,n,0,Rhe,Ihe),s=r.height,a=r.width,c=t$e;return Gs.computePosition(r,i,!1,0,0,c[0]),Gs.computePosition(r,i,!1,0,a-1,c[1]),Gs.computePosition(r,i,!1,s-1,0,c[2]),Gs.computePosition(r,i,!1,s-1,a-1,c[3]),ce.fromCartesianArray(c,i,o)}function Ff(e){e=e??Y.EMPTY_OBJECT;let t=e.rectangle,n=e.height??0,i=e.extrudedHeight??n;this._rectangle=ce.clone(t),this._granularity=e.granularity??X.RADIANS_PER_DEGREE,this._ellipsoid=ne.clone(e.ellipsoid??ne.default),this._surfaceHeight=Math.max(n,i),this._rotation=e.rotation??0,this._stRotation=e.stRotation??0,this._vertexFormat=Xe.clone(e.vertexFormat??Xe.DEFAULT),this._extrudedHeight=Math.min(n,i),this._shadowVolume=e.shadowVolume??!1,this._workerName="createRectangleGeometry",this._offsetAttribute=e.offsetAttribute,this._rotatedRectangle=void 0,this._textureCoordinateRotationPoints=void 0}Ff.packedLength=ce.packedLength+ne.packedLength+Xe.packedLength+7;Ff.pack=function(e,t,n){return n=n??0,ce.pack(e._rectangle,t,n),n+=ce.packedLength,ne.pack(e._ellipsoid,t,n),n+=ne.packedLength,Xe.pack(e._vertexFormat,t,n),n+=Xe.packedLength,t[n++]=e._granularity,t[n++]=e._surfaceHeight,t[n++]=e._rotation,t[n++]=e._stRotation,t[n++]=e._extrudedHeight,t[n++]=e._shadowVolume?1:0,t[n]=e._offsetAttribute??-1,t};var Xhe=new ce,Whe=ne.clone(ne.UNIT_SPHERE),ty={rectangle:Xhe,ellipsoid:Whe,vertexFormat:GJ,granularity:void 0,height:void 0,rotation:void 0,stRotation:void 0,extrudedHeight:void 0,shadowVolume:void 0,offsetAttribute:void 0};Ff.unpack=function(e,t,n){t=t??0;let i=ce.unpack(e,t,Xhe);t+=ce.packedLength;let o=ne.unpack(e,t,Whe);t+=ne.packedLength;let r=Xe.unpack(e,t,GJ);t+=Xe.packedLength;let s=e[t++],a=e[t++],c=e[t++],d=e[t++],u=e[t++],h=e[t++]===1,p=e[t];return l(n)?(n._rectangle=ce.clone(i,n._rectangle),n._ellipsoid=ne.clone(o,n._ellipsoid),n._vertexFormat=Xe.clone(r,n._vertexFormat),n._granularity=s,n._surfaceHeight=a,n._rotation=c,n._stRotation=d,n._extrudedHeight=u,n._shadowVolume=h,n._offsetAttribute=p===-1?void 0:p,n):(ty.granularity=s,ty.height=a,ty.rotation=c,ty.stRotation=d,ty.extrudedHeight=u,ty.shadowVolume=h,ty.offsetAttribute=p===-1?void 0:p,new Ff(ty))};Ff.computeRectangle=function(e,t){e=e??Y.EMPTY_OBJECT;let n=e.rectangle,i=e.granularity??X.RADIANS_PER_DEGREE,o=e.ellipsoid??ne.default,r=e.rotation??0;return EJ(n,i,r,o,t)};var i$e=new $,The=new ve,o$e=new he;Ff.createGeometry=function(e){if(X.equalsEpsilon(e._rectangle.north,e._rectangle.south,X.EPSILON10)||X.equalsEpsilon(e._rectangle.east,e._rectangle.west,X.EPSILON10))return;let t=e._rectangle,n=e._ellipsoid,i=e._rotation,o=e._stRotation,r=e._vertexFormat,s=Gs.computeOptions(t,e._granularity,i,o,Rhe,Ihe,n$e),a=i$e;if(o!==0||i!==0){let g=ce.center(t,o$e),f=n.geodeticSurfaceNormalCartographic(g,ZJ);ve.fromAxisAngle(f,-o,The),$.fromQuaternion(The,a)}else $.clone($.IDENTITY,a);let c=e._surfaceHeight,d=e._extrudedHeight,u=!X.equalsEpsilon(c,d,0,X.EPSILON2);s.lonScalar=1/e._rectangle.width,s.latScalar=1/e._rectangle.height,s.tangentRotationMatrix=a;let h,p;if(t=e._rectangle,u){h=e$e(e,s);let g=le.fromRectangle3D(t,n,c,jqe),f=le.fromRectangle3D(t,n,d,Qqe);p=le.union(g,f)}else{if(h=Ehe(e,s),h.attributes.position.values=ai.scaleToGeodeticHeight(h.attributes.position.values,c,n,!1),l(e._offsetAttribute)){let g=h.attributes.position.values.length,f=e._offsetAttribute===rn.NONE?0:1,y=new Uint8Array(g/3).fill(f);h.attributes.applyOffset=new Ge({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:1,values:y})}p=le.fromRectangle3D(t,n,c)}return r.position||delete h.attributes.position,new lt({attributes:h.attributes,indices:h.indices,primitiveType:h.primitiveType,boundingSphere:p,offsetAttribute:e._offsetAttribute})};Ff.createShadowVolume=function(e,t,n){let i=e._granularity,o=e._ellipsoid,r=t(i,o),s=n(i,o);return new Ff({rectangle:e._rectangle,rotation:e._rotation,ellipsoid:o,stRotation:e._stRotation,granularity:i,extrudedHeight:s,height:r,vertexFormat:Xe.POSITION_ONLY,shadowVolume:!0})};var She=new ce,r$e=[new U,new U,new U],s$e=new Ii,a$e=new he;function c$e(e){if(e._stRotation===0)return[0,0,0,1,1,0];let t=ce.clone(e._rectangle,She),n=e._granularity,i=e._ellipsoid,o=e._rotation-e._stRotation,r=EJ(t,n,o,i,She),s=r$e;s[0].x=r.west,s[0].y=r.south,s[1].x=r.west,s[1].y=r.north,s[2].x=r.east,s[2].y=r.south;let a=e.rectangle,c=Ii.fromRotation(e._stRotation,s$e),d=ce.center(a,a$e);for(let f=0;f<3;++f){let y=s[f];y.x-=d.longitude,y.y-=d.latitude,Ii.multiplyByVector(c,y,y),y.x+=d.longitude,y.y+=d.latitude,y.x=(y.x-a.west)/a.width,y.y=(y.y-a.south)/a.height}let u=s[0],h=s[1],p=s[2],g=new Array(6);return U.pack(u,g),U.pack(h,g,2),U.pack(p,g,4),g}Object.defineProperties(Ff.prototype,{rectangle:{get:function(){return l(this._rotatedRectangle)||(this._rotatedRectangle=EJ(this._rectangle,this._granularity,this._rotation,this._ellipsoid)),this._rotatedRectangle}},textureCoordinateRotationPoints:{get:function(){return l(this._textureCoordinateRotationPoints)||(this._textureCoordinateRotationPoints=c$e(this)),this._textureCoordinateRotationPoints}}});var mT=Ff;var Phe=new D,vhe=m.ZERO,whe=new m,Fhe=new ce,l$e=new ce,d$e=new he;function u$e(e){this.id=e,this.vertexFormat=void 0,this.rectangle=void 0,this.height=void 0,this.extrudedHeight=void 0,this.granularity=void 0,this.stRotation=void 0,this.rotation=void 0,this.offsetAttribute=void 0}function Ch(e,t){Yn.call(this,{entity:e,scene:t,geometryOptions:new u$e(e),geometryPropertyName:"rectangle",observedPropertyNames:["availability","rectangle"]}),this._onEntityPropertyChanged(e,"rectangle",e.rectangle,void 0)}l(Object.create)&&(Ch.prototype=Object.create(Yn.prototype),Ch.prototype.constructor=Ch);Ch.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i={show:new xn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),distanceDisplayCondition:kn.fromDistanceDisplayCondition(this._distanceDisplayConditionProperty.getValue(e)),offset:void 0,color:void 0};if(this._materialProperty instanceof Dt){let o;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(o=this._materialProperty.color.getValue(e,Phe)),l(o)||(o=D.WHITE),i.color=Yt.fromColor(o)}return l(this._options.offsetAttribute)&&(i.offset=$i.fromCartesian3(J.getValueOrDefault(this._terrainOffsetProperty,e,vhe,whe))),new Et({id:t,geometry:new mT(this._options),attributes:i})};Ch.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=J.getValueOrDefault(this._outlineColorProperty,e,D.BLACK,Phe),o=this._distanceDisplayConditionProperty.getValue(e),r={show:new xn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Yt.fromColor(i),distanceDisplayCondition:kn.fromDistanceDisplayCondition(o),offset:void 0};return l(this._options.offsetAttribute)&&(r.offset=$i.fromCartesian3(J.getValueOrDefault(this._terrainOffsetProperty,e,vhe,whe))),new Et({id:t,geometry:new k_(this._options),attributes:r})};Ch.prototype._computeCenter=function(e,t){let n=J.getValueOrUndefined(this._entity.rectangle.coordinates,e,l$e);if(!l(n))return;let i=ce.center(n,d$e);return he.toCartesian(i,ne.default,t)};Ch.prototype._isHidden=function(e,t){return!l(t.coordinates)||oi.prototype._isHidden.call(this,e,t)};Ch.prototype._isDynamic=function(e,t){return!t.coordinates.isConstant||!J.isConstant(t.height)||!J.isConstant(t.extrudedHeight)||!J.isConstant(t.granularity)||!J.isConstant(t.stRotation)||!J.isConstant(t.rotation)||!J.isConstant(t.outlineWidth)||!J.isConstant(t.zIndex)||this._onTerrain&&!J.isConstant(this._materialProperty)&&!(this._materialProperty instanceof Dt)};Ch.prototype._setStaticOptions=function(e,t){let n=this._materialProperty instanceof Dt,i=J.getValueOrUndefined(t.height,Be.MINIMUM_VALUE),o=J.getValueOrDefault(t.heightReference,Be.MINIMUM_VALUE,Je.NONE),r=J.getValueOrUndefined(t.extrudedHeight,Be.MINIMUM_VALUE),s=J.getValueOrDefault(t.extrudedHeightReference,Be.MINIMUM_VALUE,Je.NONE);l(r)&&!l(i)&&(i=0);let a=this._options;a.vertexFormat=n?dn.VERTEX_FORMAT:ao.MaterialSupport.TEXTURED.vertexFormat,a.rectangle=t.coordinates.getValue(Be.MINIMUM_VALUE,a.rectangle),a.granularity=J.getValueOrUndefined(t.granularity,Be.MINIMUM_VALUE),a.stRotation=J.getValueOrUndefined(t.stRotation,Be.MINIMUM_VALUE),a.rotation=J.getValueOrUndefined(t.rotation,Be.MINIMUM_VALUE),a.offsetAttribute=Yn.computeGeometryOffsetAttribute(i,o,r,s),a.height=Yn.getGeometryHeight(i,o),r=Yn.getGeometryExtrudedHeight(r,s),r===Yn.CLAMP_TO_GROUND&&(r=di.getMinimumMaximumHeights(mT.computeRectangle(a,Fhe)).minimumTerrainHeight),a.extrudedHeight=r};Ch.DynamicGeometryUpdater=lV;function lV(e,t,n){ii.call(this,e,t,n)}l(Object.create)&&(lV.prototype=Object.create(ii.prototype),lV.prototype.constructor=lV);lV.prototype._isHidden=function(e,t,n){return!l(this._options.rectangle)||ii.prototype._isHidden.call(this,e,t,n)};lV.prototype._setOptions=function(e,t,n){let i=this._options,o=J.getValueOrUndefined(t.height,n),r=J.getValueOrDefault(t.heightReference,n,Je.NONE),s=J.getValueOrUndefined(t.extrudedHeight,n),a=J.getValueOrDefault(t.extrudedHeightReference,n,Je.NONE);l(s)&&!l(o)&&(o=0),i.rectangle=J.getValueOrUndefined(t.coordinates,n,i.rectangle),i.granularity=J.getValueOrUndefined(t.granularity,n),i.stRotation=J.getValueOrUndefined(t.stRotation,n),i.rotation=J.getValueOrUndefined(t.rotation,n),i.offsetAttribute=Yn.computeGeometryOffsetAttribute(o,r,s,a),i.height=Yn.getGeometryHeight(o,r),s=Yn.getGeometryExtrudedHeight(s,a),s===Yn.CLAMP_TO_GROUND&&(s=di.getMinimumMaximumHeights(mT.computeRectangle(i,Fhe)).minimumTerrainHeight),i.extrudedHeight=s};var Tv=Ch;var uri=_(T(),1);var Poi=_(T(),1);var goi=_(T(),1);var Ahe={};function m$e(e,t){return X.equalsEpsilon(e.latitude,t.latitude,X.EPSILON10)&&X.equalsEpsilon(e.longitude,t.longitude,X.EPSILON10)}var h$e=new he,f$e=new he;function p$e(e,t,n,i){t=_o(t,m.equalsEpsilon);let o=t.length;if(o<2)return;let r=l(i),s=l(n),a=new Array(o),c=new Array(o),d=new Array(o),u=t[0];a[0]=u;let h=e.cartesianToCartographic(u,h$e);s&&(h.height=n[0]),c[0]=h.height,r?d[0]=i[0]:d[0]=0;let p=c[0],g=d[0],f=p===g,y=1;for(let x=1;x<o;++x){let S=t[x],C=e.cartesianToCartographic(S,f$e);s&&(C.height=n[x]),f=f&&C.height===0,m$e(h,C)?h.height<C.height&&(c[y-1]=C.height):(a[y]=S,c[y]=C.height,r?d[y]=i[x]:d[y]=0,f=f&&c[y]===d[y],he.clone(C,h),++y)}if(!(f||y<2))return a.length=y,c.length=y,d.length=y,{positions:a,topHeights:c,bottomHeights:d}}var b$e=new Array(2),g$e=new Array(2),y$e={positions:void 0,height:void 0,granularity:void 0,ellipsoid:void 0};Ahe.computePositions=function(e,t,n,i,o,r){let s=p$e(e,t,n,i);if(!l(s))return;t=s.positions,n=s.topHeights,i=s.bottomHeights;let a=t.length,c=a-2,d,u,h=X.chordLength(o,e.maximumRadius),p=y$e;if(p.minDistance=h,p.ellipsoid=e,r){let g=0,f;for(f=0;f<a-1;f++)g+=Pi.numberOfPoints(t[f],t[f+1],h)+1;d=new Float64Array(g*3),u=new Float64Array(g*3);let y=b$e,x=g$e;p.positions=y,p.height=x;let S=0;for(f=0;f<a-1;f++){y[0]=t[f],y[1]=t[f+1],x[0]=n[f],x[1]=n[f+1];let C=Pi.generateArc(p);d.set(C,S),x[0]=i[f],x[1]=i[f+1],u.set(Pi.generateArc(p),S),S+=C.length}}else p.positions=t,p.height=n,d=new Float64Array(Pi.generateArc(p)),p.height=i,u=new Float64Array(Pi.generateArc(p));return{bottomPositions:u,topPositions:d,numCorners:c}};var hT=Ahe;var IJ=new m,jk=new m,x$e=new m,Mhe=new m,_$e=new m,T$e=new m,S$e=new m;function fT(e){e=e??Y.EMPTY_OBJECT;let t=e.positions,n=e.maximumHeights,i=e.minimumHeights,o=e.vertexFormat??Xe.DEFAULT,r=e.granularity??X.RADIANS_PER_DEGREE,s=e.ellipsoid??ne.default;this._positions=t,this._minimumHeights=i,this._maximumHeights=n,this._vertexFormat=Xe.clone(o),this._granularity=r,this._ellipsoid=ne.clone(s),this._workerName="createWallGeometry";let a=1+t.length*m.packedLength+2;l(i)&&(a+=i.length),l(n)&&(a+=n.length),this.packedLength=a+ne.packedLength+Xe.packedLength+1}fT.pack=function(e,t,n){n=n??0;let i,o=e._positions,r=o.length;for(t[n++]=r,i=0;i<r;++i,n+=m.packedLength)m.pack(o[i],t,n);let s=e._minimumHeights;if(r=l(s)?s.length:0,t[n++]=r,l(s))for(i=0;i<r;++i)t[n++]=s[i];let a=e._maximumHeights;if(r=l(a)?a.length:0,t[n++]=r,l(a))for(i=0;i<r;++i)t[n++]=a[i];return ne.pack(e._ellipsoid,t,n),n+=ne.packedLength,Xe.pack(e._vertexFormat,t,n),n+=Xe.packedLength,t[n]=e._granularity,t};var Nhe=ne.clone(ne.UNIT_SPHERE),khe=new Xe,Sv={positions:void 0,minimumHeights:void 0,maximumHeights:void 0,ellipsoid:Nhe,vertexFormat:khe,granularity:void 0};fT.unpack=function(e,t,n){t=t??0;let i,o=e[t++],r=new Array(o);for(i=0;i<o;++i,t+=m.packedLength)r[i]=m.unpack(e,t);o=e[t++];let s;if(o>0)for(s=new Array(o),i=0;i<o;++i)s[i]=e[t++];o=e[t++];let a;if(o>0)for(a=new Array(o),i=0;i<o;++i)a[i]=e[t++];let c=ne.unpack(e,t,Nhe);t+=ne.packedLength;let d=Xe.unpack(e,t,khe);t+=Xe.packedLength;let u=e[t];return l(n)?(n._positions=r,n._minimumHeights=s,n._maximumHeights=a,n._ellipsoid=ne.clone(c,n._ellipsoid),n._vertexFormat=Xe.clone(d,n._vertexFormat),n._granularity=u,n):(Sv.positions=r,Sv.minimumHeights=s,Sv.maximumHeights=a,Sv.granularity=u,new fT(Sv))};fT.fromConstantHeights=function(e){e=e??Y.EMPTY_OBJECT;let t=e.positions,n,i,o=e.minimumHeight,r=e.maximumHeight,s=l(o),a=l(r);if(s||a){let d=t.length;n=s?new Array(d):void 0,i=a?new Array(d):void 0;for(let u=0;u<d;++u)s&&(n[u]=o),a&&(i[u]=r)}let c={positions:t,maximumHeights:i,minimumHeights:n,ellipsoid:e.ellipsoid,vertexFormat:e.vertexFormat};return new fT(c)};fT.createGeometry=function(e){let t=e._positions,n=e._minimumHeights,i=e._maximumHeights,o=e._vertexFormat,r=e._granularity,s=e._ellipsoid,a=hT.computePositions(s,t,i,n,r,!0);if(!l(a))return;let c=a.bottomPositions,d=a.topPositions,u=a.numCorners,h=d.length,p=h*2,g=o.position?new Float64Array(p):void 0,f=o.normal?new Float32Array(p):void 0,y=o.tangent?new Float32Array(p):void 0,x=o.bitangent?new Float32Array(p):void 0,S=o.st?new Float32Array(p/3*2):void 0,C=0,V=0,L=0,Z=0,E=0,P=S$e,W=T$e,v=_$e,A=!0;h/=3;let b,R=0,G=1/(h-u-1);for(b=0;b<h;++b){let k=b*3,O=m.fromArray(d,k,IJ),N=m.fromArray(c,k,jk);if(o.position&&(g[C++]=N.x,g[C++]=N.y,g[C++]=N.z,g[C++]=O.x,g[C++]=O.y,g[C++]=O.z),o.st&&(S[E++]=R,S[E++]=0,S[E++]=R,S[E++]=1),o.normal||o.tangent||o.bitangent){let z=m.clone(m.ZERO,Mhe),K=m.subtract(O,s.geodeticSurfaceNormal(O,jk),jk);if(b+1<h&&(z=m.fromArray(d,k+3,Mhe)),A){let te=m.subtract(z,O,x$e),H=m.subtract(K,O,IJ);P=m.normalize(m.cross(H,te,P),P),A=!1}m.equalsEpsilon(O,z,X.EPSILON10)?A=!0:(R+=G,o.tangent&&(W=m.normalize(m.subtract(z,O,W),W)),o.bitangent&&(v=m.normalize(m.cross(P,W,v),v))),o.normal&&(f[V++]=P.x,f[V++]=P.y,f[V++]=P.z,f[V++]=P.x,f[V++]=P.y,f[V++]=P.z),o.tangent&&(y[Z++]=W.x,y[Z++]=W.y,y[Z++]=W.z,y[Z++]=W.x,y[Z++]=W.y,y[Z++]=W.z),o.bitangent&&(x[L++]=v.x,x[L++]=v.y,x[L++]=v.z,x[L++]=v.x,x[L++]=v.y,x[L++]=v.z)}}let I=new mn;o.position&&(I.position=new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:g})),o.normal&&(I.normal=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:f})),o.tangent&&(I.tangent=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:y})),o.bitangent&&(I.bitangent=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:x})),o.st&&(I.st=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:S}));let w=p/3;p-=6*(u+1);let M=Ae.createTypedArray(w,p),B=0;for(b=0;b<w-2;b+=2){let k=b,O=b+2,N=m.fromArray(g,k*3,IJ),z=m.fromArray(g,O*3,jk);if(m.equalsEpsilon(N,z,X.EPSILON10))continue;let K=b+1,te=b+3;M[B++]=K,M[B++]=k,M[B++]=te,M[B++]=te,M[B++]=k,M[B++]=O}return new lt({attributes:I,indices:M,primitiveType:we.TRIANGLES,boundingSphere:new le.fromVertices(g)})};var Cv=fT;var Koi=_(T(),1);var Uhe=new m,Dhe=new m;function pT(e){e=e??Y.EMPTY_OBJECT;let t=e.positions,n=e.maximumHeights,i=e.minimumHeights,o=e.granularity??X.RADIANS_PER_DEGREE,r=e.ellipsoid??ne.default;this._positions=t,this._minimumHeights=i,this._maximumHeights=n,this._granularity=o,this._ellipsoid=ne.clone(r),this._workerName="createWallOutlineGeometry";let s=1+t.length*m.packedLength+2;l(i)&&(s+=i.length),l(n)&&(s+=n.length),this.packedLength=s+ne.packedLength+1}pT.pack=function(e,t,n){n=n??0;let i,o=e._positions,r=o.length;for(t[n++]=r,i=0;i<r;++i,n+=m.packedLength)m.pack(o[i],t,n);let s=e._minimumHeights;if(r=l(s)?s.length:0,t[n++]=r,l(s))for(i=0;i<r;++i)t[n++]=s[i];let a=e._maximumHeights;if(r=l(a)?a.length:0,t[n++]=r,l(a))for(i=0;i<r;++i)t[n++]=a[i];return ne.pack(e._ellipsoid,t,n),n+=ne.packedLength,t[n]=e._granularity,t};var Bhe=ne.clone(ne.UNIT_SPHERE),Vv={positions:void 0,minimumHeights:void 0,maximumHeights:void 0,ellipsoid:Bhe,granularity:void 0};pT.unpack=function(e,t,n){t=t??0;let i,o=e[t++],r=new Array(o);for(i=0;i<o;++i,t+=m.packedLength)r[i]=m.unpack(e,t);o=e[t++];let s;if(o>0)for(s=new Array(o),i=0;i<o;++i)s[i]=e[t++];o=e[t++];let a;if(o>0)for(a=new Array(o),i=0;i<o;++i)a[i]=e[t++];let c=ne.unpack(e,t,Bhe);t+=ne.packedLength;let d=e[t];return l(n)?(n._positions=r,n._minimumHeights=s,n._maximumHeights=a,n._ellipsoid=ne.clone(c,n._ellipsoid),n._granularity=d,n):(Vv.positions=r,Vv.minimumHeights=s,Vv.maximumHeights=a,Vv.granularity=d,new pT(Vv))};pT.fromConstantHeights=function(e){e=e??Y.EMPTY_OBJECT;let t=e.positions,n,i,o=e.minimumHeight,r=e.maximumHeight,s=l(o),a=l(r);if(s||a){let d=t.length;n=s?new Array(d):void 0,i=a?new Array(d):void 0;for(let u=0;u<d;++u)s&&(n[u]=o),a&&(i[u]=r)}let c={positions:t,maximumHeights:i,minimumHeights:n,ellipsoid:e.ellipsoid};return new pT(c)};pT.createGeometry=function(e){let t=e._positions,n=e._minimumHeights,i=e._maximumHeights,o=e._granularity,r=e._ellipsoid,s=hT.computePositions(r,t,i,n,o,!1);if(!l(s))return;let a=s.bottomPositions,c=s.topPositions,d=c.length,u=d*2,h=new Float64Array(u),p=0;d/=3;let g;for(g=0;g<d;++g){let C=g*3,V=m.fromArray(c,C,Uhe),L=m.fromArray(a,C,Dhe);h[p++]=L.x,h[p++]=L.y,h[p++]=L.z,h[p++]=V.x,h[p++]=V.y,h[p++]=V.z}let f=new mn({position:new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:h})}),y=u/3;u=2*y-4+y;let x=Ae.createTypedArray(y,u),S=0;for(g=0;g<y-2;g+=2){let C=g,V=g+2,L=m.fromArray(h,C*3,Uhe),Z=m.fromArray(h,V*3,Dhe);if(m.equalsEpsilon(L,Z,X.EPSILON10))continue;let E=g+1,P=g+3;x[S++]=E,x[S++]=C,x[S++]=E,x[S++]=P,x[S++]=C,x[S++]=V}return x[S++]=y-2,x[S++]=y-1,new lt({attributes:f,indices:x,primitiveType:we.LINES,boundingSphere:new le.fromVertices(h)})};var Lv=pT;var Ohe=new D;function C$e(e){this.id=e,this.vertexFormat=void 0,this.positions=void 0,this.minimumHeights=void 0,this.maximumHeights=void 0,this.granularity=void 0}function Vh(e,t){oi.call(this,{entity:e,scene:t,geometryOptions:new C$e(e),geometryPropertyName:"wall",observedPropertyNames:["availability","wall"]}),this._onEntityPropertyChanged(e,"wall",e.wall,void 0)}l(Object.create)&&(Vh.prototype=Object.create(oi.prototype),Vh.prototype.constructor=Vh);Vh.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i,o,r=new xn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._fillProperty.getValue(e)),s=this._distanceDisplayConditionProperty.getValue(e),a=kn.fromDistanceDisplayCondition(s);if(this._materialProperty instanceof Dt){let c;l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(c=this._materialProperty.color.getValue(e,Ohe)),l(c)||(c=D.WHITE),o=Yt.fromColor(c),i={show:r,distanceDisplayCondition:a,color:o}}else i={show:r,distanceDisplayCondition:a};return new Et({id:t,geometry:new Cv(this._options),attributes:i})};Vh.prototype.createOutlineGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=J.getValueOrDefault(this._outlineColorProperty,e,D.BLACK,Ohe),o=this._distanceDisplayConditionProperty.getValue(e);return new Et({id:t,geometry:new Lv(this._options),attributes:{show:new xn(n&&t.isShowing&&this._showProperty.getValue(e)&&this._showOutlineProperty.getValue(e)),color:Yt.fromColor(i),distanceDisplayCondition:kn.fromDistanceDisplayCondition(o)}})};Vh.prototype._isHidden=function(e,t){return!l(t.positions)||oi.prototype._isHidden.call(this,e,t)};Vh.prototype._getIsClosed=function(e){return!1};Vh.prototype._isDynamic=function(e,t){return!t.positions.isConstant||!J.isConstant(t.minimumHeights)||!J.isConstant(t.maximumHeights)||!J.isConstant(t.outlineWidth)||!J.isConstant(t.granularity)};Vh.prototype._setStaticOptions=function(e,t){let n=t.minimumHeights,i=t.maximumHeights,o=t.granularity,r=this._materialProperty instanceof Dt,s=this._options;s.vertexFormat=r?dn.VERTEX_FORMAT:ao.MaterialSupport.TEXTURED.vertexFormat,s.positions=t.positions.getValue(Be.MINIMUM_VALUE,s.positions),s.minimumHeights=l(n)?n.getValue(Be.MINIMUM_VALUE,s.minimumHeights):void 0,s.maximumHeights=l(i)?i.getValue(Be.MINIMUM_VALUE,s.maximumHeights):void 0,s.granularity=l(o)?o.getValue(Be.MINIMUM_VALUE):void 0};Vh.DynamicGeometryUpdater=dV;function dV(e,t,n){ii.call(this,e,t,n)}l(Object.create)&&(dV.prototype=Object.create(ii.prototype),dV.prototype.constructor=dV);dV.prototype._isHidden=function(e,t,n){return!l(this._options.positions)||ii.prototype._isHidden.call(this,e,t,n)};dV.prototype._setOptions=function(e,t,n){let i=this._options;i.positions=J.getValueOrUndefined(t.positions,n,i.positions),i.minimumHeights=J.getValueOrUndefined(t.minimumHeights,n,i.minimumHeights),i.maximumHeights=J.getValueOrUndefined(t.maximumHeights,n,i.maximumHeights),i.granularity=J.getValueOrUndefined(t.granularity,n)};var Rv=Vh;var bT=[VI,Y2,F2,ov,sv,lv,hv,_v,Tv,Rv];function gT(e,t){this.entity=e,this.scene=t;let n=new Array(bT.length),i=new be,o=new dr;for(let r=0;r<n.length;r++){let s=new bT[r](e,t);o.add(s.geometryChanged,a=>{i.raiseEvent(a)}),n[r]=s}this.updaters=n,this.geometryChanged=i,this.eventHelper=o,this._removeEntitySubscription=e.definitionChanged.addEventListener(gT.prototype._onEntityPropertyChanged,this)}gT.prototype._onEntityPropertyChanged=function(e,t,n,i){let o=this.updaters;for(let r=0;r<o.length;r++)o[r]._onEntityPropertyChanged(e,t,n,i)};gT.prototype.forEach=function(e){let t=this.updaters;for(let n=0;n<t.length;n++)e(t[n])};gT.prototype.destroy=function(){this.eventHelper.removeAll();let e=this.updaters;for(let t=0;t<e.length;t++)e[t].destroy();this._removeEntitySubscription(),me(this)};gT.registerUpdater=function(e){bT.includes(e)||bT.push(e)};gT.unregisterUpdater=function(e){if(bT.includes(e)){let t=bT.indexOf(e);bT.splice(t,1)}};var yT=gT;var Dri=_(T(),1);var Yhe=new D,V$e=new wt,L$e=new wt,R$e=m.ZERO,Z$e=new m;function Lh(e,t,n,i,o,r,s){this.translucent=t,this.appearanceType=n,this.depthFailAppearanceType=i,this.depthFailMaterialProperty=o,this.depthFailMaterial=void 0,this.closed=r,this.shadows=s,this.primitives=e,this.createPrimitive=!1,this.waitingOnCreate=!1,this.primitive=void 0,this.oldPrimitive=void 0,this.geometry=new Gt,this.updaters=new Gt,this.updatersWithAttributes=new Gt,this.attributes=new Gt,this.subscriptions=new Gt,this.showsUpdated=new Gt,this.itemsToRemove=[],this.invalidated=!1;let a;l(o)&&(a=o.definitionChanged.addEventListener(Lh.prototype.onMaterialChanged,this)),this.removeMaterialSubscription=a}Lh.prototype.onMaterialChanged=function(){this.invalidated=!0};Lh.prototype.isMaterial=function(e){let t=this.depthFailMaterialProperty,n=e.depthFailMaterialProperty;return n===t?!0:l(t)?t.equals(n):!1};Lh.prototype.add=function(e,t){let n=e.id;if(this.createPrimitive=!0,this.geometry.set(n,t),this.updaters.set(n,e),!e.hasConstantFill||!e.fillMaterialProperty.isConstant||!J.isConstant(e.distanceDisplayConditionProperty)||!J.isConstant(e.terrainOffsetProperty))this.updatersWithAttributes.set(n,e);else{let i=this;this.subscriptions.set(n,e.entity.definitionChanged.addEventListener(function(o,r,s,a){r==="isShowing"&&i.showsUpdated.set(e.id,e)}))}};Lh.prototype.remove=function(e){let t=e.id;if(this.createPrimitive=this.geometry.remove(t)||this.createPrimitive,this.updaters.remove(t)){this.updatersWithAttributes.remove(t);let n=this.subscriptions.get(t);return l(n)&&(n(),this.subscriptions.remove(t),this.showsUpdated.remove(t)),!0}return!1};Lh.prototype.update=function(e){let t=!0,n=0,i=this.primitive,o=this.primitives,r;if(this.createPrimitive){let s=this.geometry.values;if(s.length>0){l(i)&&(l(this.oldPrimitive)?o.remove(i):this.oldPrimitive=i);let c;l(this.depthFailAppearanceType)&&(l(this.depthFailMaterialProperty)&&(this.depthFailMaterial=Qo.getValue(e,this.depthFailMaterialProperty,this.depthFailMaterial)),c=new this.depthFailAppearanceType({material:this.depthFailMaterial,translucent:this.translucent,closed:this.closed})),i=new In({show:!1,asynchronous:!0,geometryInstances:s.slice(),appearance:new this.appearanceType({translucent:this.translucent,closed:this.closed}),depthFailAppearance:c,shadows:this.shadows}),o.add(i),t=!1}else{l(i)&&(o.remove(i),i=void 0);let c=this.oldPrimitive;l(c)&&(o.remove(c),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=i,this.createPrimitive=!1,this.waitingOnCreate=!0}else if(l(i)&&i.ready){i.show=!0,l(this.oldPrimitive)&&(o.remove(this.oldPrimitive),this.oldPrimitive=void 0),l(this.depthFailAppearanceType)&&!(this.depthFailMaterialProperty instanceof Dt)&&(this.depthFailMaterial=Qo.getValue(e,this.depthFailMaterialProperty,this.depthFailMaterial),this.primitive.depthFailAppearance.material=this.depthFailMaterial);let s=this.updatersWithAttributes.values,a=s.length,c=this.waitingOnCreate;for(r=0;r<a;r++){let d=s[r],u=this.geometry.get(d.id),h=this.attributes.get(u.id.id);if(l(h)||(h=i.getGeometryInstanceAttributes(u.id),this.attributes.set(u.id.id,h)),!d.fillMaterialProperty.isConstant||c){let x=d.fillMaterialProperty.color,S=J.getValueOrDefault(x,e,D.WHITE,Yhe);D.equals(h._lastColor,S)||(h._lastColor=D.clone(S,h._lastColor),h.color=Yt.toValue(S,h.color),(this.translucent&&h.color[3]===255||!this.translucent&&h.color[3]!==255)&&(this.itemsToRemove[n++]=d))}if(l(this.depthFailAppearanceType)&&d.depthFailMaterialProperty instanceof Dt&&(!d.depthFailMaterialProperty.isConstant||c)){let x=d.depthFailMaterialProperty.color,S=J.getValueOrDefault(x,e,D.WHITE,Yhe);D.equals(h._lastDepthFailColor,S)||(h._lastDepthFailColor=D.clone(S,h._lastDepthFailColor),h.depthFailColor=Yt.toValue(S,h.depthFailColor))}let p=d.entity.isShowing&&(d.hasConstantFill||d.isFilled(e)),g=h.show[0]===1;p!==g&&(h.show=xn.toValue(p,h.show));let f=d.distanceDisplayConditionProperty;if(!J.isConstant(f)){let x=J.getValueOrDefault(f,e,L$e,V$e);wt.equals(x,h._lastDistanceDisplayCondition)||(h._lastDistanceDisplayCondition=wt.clone(x,h._lastDistanceDisplayCondition),h.distanceDisplayCondition=kn.toValue(x,h.distanceDisplayCondition))}let y=d.terrainOffsetProperty;if(!J.isConstant(y)){let x=J.getValueOrDefault(y,e,R$e,Z$e);m.equals(x,h._lastOffset)||(h._lastOffset=m.clone(x,h._lastOffset),h.offset=$i.toValue(x,h.offset))}}this.updateShows(i),this.waitingOnCreate=!1}else l(i)&&!i.ready&&(t=!1);return this.itemsToRemove.length=n,t};Lh.prototype.updateShows=function(e){let t=this.showsUpdated.values,n=t.length;for(let i=0;i<n;i++){let o=t[i],r=this.geometry.get(o.id),s=this.attributes.get(r.id.id);l(s)||(s=e.getGeometryInstanceAttributes(r.id),this.attributes.set(r.id.id,s));let a=o.entity.isShowing,c=s.show[0]===1;a!==c&&(s.show=xn.toValue(a,s.show),r.attributes.show.value[0]=s.show[0])}this.showsUpdated.removeAll()};Lh.prototype.contains=function(e){return this.updaters.contains(e.id)};Lh.prototype.getBoundingSphere=function(e,t){let n=this.primitive;if(!n.ready)return dt.PENDING;let i=n.getGeometryInstanceAttributes(e.entity);return!l(i)||!l(i.boundingSphere)||l(i.show)&&i.show[0]===0?dt.FAILED:(i.boundingSphere.clone(t),dt.DONE)};Lh.prototype.destroy=function(){let e=this.primitive,t=this.primitives;l(e)&&t.remove(e);let n=this.oldPrimitive;l(n)&&t.remove(n),l(this.removeMaterialSubscription)&&this.removeMaterialSubscription()};function uV(e,t,n,i,o){this._solidItems=[],this._translucentItems=[],this._primitives=e,this._appearanceType=t,this._depthFailAppearanceType=n,this._closed=i,this._shadows=o}uV.prototype.add=function(e,t){let n,i,o=t.createFillGeometryInstance(e);o.attributes.color.value[3]===255?(n=this._solidItems,i=!1):(n=this._translucentItems,i=!0);let r=n.length;for(let a=0;a<r;a++){let c=n[a];if(c.isMaterial(t)){c.add(t,o);return}}let s=new Lh(this._primitives,i,this._appearanceType,this._depthFailAppearanceType,t.depthFailMaterialProperty,this._closed,this._shadows);s.add(t,o),n.push(s)};function zhe(e,t){let n=e.length;for(let i=n-1;i>=0;i--){let o=e[i];if(o.remove(t))return o.updaters.length===0&&(e.splice(i,1),o.destroy()),!0}return!1}uV.prototype.remove=function(e){zhe(this._solidItems,e)||zhe(this._translucentItems,e)};function Hhe(e,t,n){let i=!1,o=t.length;for(let r=0;r<o;++r){let s=t[r],a=s.itemsToRemove,c=a.length;if(c>0)for(r=0;r<c;r++){let d=a[r];s.remove(d),e.add(n,d),i=!0}}return i}function qk(e,t,n,i){let o=t.length,r;for(r=o-1;r>=0;r--){let s=t[r];if(s.invalidated){t.splice(r,1);let a=s.updaters.values,c=a.length;for(let d=0;d<c;d++)e.add(n,a[d]);s.destroy()}}for(o=t.length,r=0;r<o;++r)i=t[r].update(n)&&i;return i}uV.prototype.update=function(e){let t=qk(this,this._solidItems,e,!0);t=qk(this,this._translucentItems,e,t)&&t;let n=Hhe(this,this._solidItems,e),i=Hhe(this,this._translucentItems,e);return(n||i)&&(t=qk(this,this._solidItems,e,t)&&t,t=qk(this,this._translucentItems,e,t)&&t),t};function Khe(e,t,n){let i=e.length;for(let o=0;o<i;o++){let r=e[o];if(r.contains(t))return r.getBoundingSphere(t,n)}return dt.FAILED}uV.prototype.getBoundingSphere=function(e,t){let n=Khe(this._solidItems,e,t);return n===dt.FAILED?Khe(this._translucentItems,e,t):n};function Jhe(e){let t=e.length;for(let n=0;n<t;n++)e[n].destroy();e.length=0}uV.prototype.removeAllPrimitives=function(){Jhe(this._solidItems),Jhe(this._translucentItems)};var im=uV;var osi=_(T(),1);var G$e=new wt,E$e=new wt,I$e=m.ZERO,X$e=new m;function Rh(e,t,n,i,o,r,s){this.primitives=e,this.appearanceType=t,this.materialProperty=n,this.depthFailAppearanceType=i,this.depthFailMaterialProperty=o,this.closed=r,this.shadows=s,this.updaters=new Gt,this.createPrimitive=!0,this.primitive=void 0,this.oldPrimitive=void 0,this.geometry=new Gt,this.material=void 0,this.depthFailMaterial=void 0,this.updatersWithAttributes=new Gt,this.attributes=new Gt,this.invalidated=!1,this.removeMaterialSubscription=n.definitionChanged.addEventListener(Rh.prototype.onMaterialChanged,this),this.subscriptions=new Gt,this.showsUpdated=new Gt}Rh.prototype.onMaterialChanged=function(){this.invalidated=!0};Rh.prototype.isMaterial=function(e){let t=this.materialProperty,n=e.fillMaterialProperty,i=this.depthFailMaterialProperty,o=e.depthFailMaterialProperty;if(n===t&&o===i)return!0;let r=l(t)&&t.equals(n);return r=(!l(i)&&!l(o)||l(i)&&i.equals(o))&&r,r};Rh.prototype.add=function(e,t){let n=t.id;if(this.updaters.set(n,t),this.geometry.set(n,t.createFillGeometryInstance(e)),!t.hasConstantFill||!t.fillMaterialProperty.isConstant||!J.isConstant(t.distanceDisplayConditionProperty)||!J.isConstant(t.terrainOffsetProperty))this.updatersWithAttributes.set(n,t);else{let i=this;this.subscriptions.set(n,t.entity.definitionChanged.addEventListener(function(o,r,s,a){r==="isShowing"&&i.showsUpdated.set(t.id,t)}))}this.createPrimitive=!0};Rh.prototype.remove=function(e){let t=e.id;if(this.createPrimitive=this.geometry.remove(t)||this.createPrimitive,this.updaters.remove(t)){this.updatersWithAttributes.remove(t);let n=this.subscriptions.get(t);return l(n)&&(n(),this.subscriptions.remove(t),this.showsUpdated.remove(t)),!0}return!1};var W$e=new D;Rh.prototype.update=function(e){let t=!0,n=this.primitive,i=this.primitives,o=this.geometry.values,r;if(this.createPrimitive){if(o.length>0){l(n)&&(l(this.oldPrimitive)?i.remove(n):this.oldPrimitive=n),this.material=Qo.getValue(e,this.materialProperty,this.material);let a;l(this.depthFailMaterialProperty)&&(this.depthFailMaterial=Qo.getValue(e,this.depthFailMaterialProperty,this.depthFailMaterial),a=new this.depthFailAppearanceType({material:this.depthFailMaterial,translucent:this.depthFailMaterial.isTranslucent(),closed:this.closed})),n=new In({show:!1,asynchronous:!0,geometryInstances:o.slice(),appearance:new this.appearanceType({material:this.material,translucent:this.material.isTranslucent(),closed:this.closed}),depthFailAppearance:a,shadows:this.shadows}),i.add(n),t=!1}else{l(n)&&(i.remove(n),n=void 0);let a=this.oldPrimitive;l(a)&&(i.remove(a),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=n,this.createPrimitive=!1}else if(l(n)&&n.ready){n.show=!0,l(this.oldPrimitive)&&(i.remove(this.oldPrimitive),this.oldPrimitive=void 0),this.material=Qo.getValue(e,this.materialProperty,this.material),this.primitive.appearance.material=this.material,l(this.depthFailAppearanceType)&&!(this.depthFailMaterialProperty instanceof Dt)&&(this.depthFailMaterial=Qo.getValue(e,this.depthFailMaterialProperty,this.depthFailMaterial),this.primitive.depthFailAppearance.material=this.depthFailMaterial);let s=this.updatersWithAttributes.values,a=s.length;for(r=0;r<a;r++){let c=s[r],d=c.entity,u=this.geometry.get(c.id),h=this.attributes.get(u.id.id);if(l(h)||(h=n.getGeometryInstanceAttributes(u.id),this.attributes.set(u.id.id,h)),l(this.depthFailAppearanceType)&&this.depthFailMaterialProperty instanceof Dt&&!c.depthFailMaterialProperty.isConstant){let x=c.depthFailMaterialProperty.color,S=J.getValueOrDefault(x,e,D.WHITE,W$e);D.equals(h._lastDepthFailColor,S)||(h._lastDepthFailColor=D.clone(S,h._lastDepthFailColor),h.depthFailColor=Yt.toValue(S,h.depthFailColor))}let p=d.isShowing&&(c.hasConstantFill||c.isFilled(e)),g=h.show[0]===1;p!==g&&(h.show=xn.toValue(p,h.show));let f=c.distanceDisplayConditionProperty;if(!J.isConstant(f)){let x=J.getValueOrDefault(f,e,E$e,G$e);wt.equals(x,h._lastDistanceDisplayCondition)||(h._lastDistanceDisplayCondition=wt.clone(x,h._lastDistanceDisplayCondition),h.distanceDisplayCondition=kn.toValue(x,h.distanceDisplayCondition))}let y=c.terrainOffsetProperty;if(!J.isConstant(y)){let x=J.getValueOrDefault(y,e,I$e,X$e);m.equals(x,h._lastOffset)||(h._lastOffset=m.clone(x,h._lastOffset),h.offset=$i.toValue(x,h.offset))}}this.updateShows(n)}else l(n)&&!n.ready&&(t=!1);return t};Rh.prototype.updateShows=function(e){let t=this.showsUpdated.values,n=t.length;for(let i=0;i<n;i++){let o=t[i],r=o.entity,s=this.geometry.get(o.id),a=this.attributes.get(s.id.id);l(a)||(a=e.getGeometryInstanceAttributes(s.id),this.attributes.set(s.id.id,a));let c=r.isShowing,d=a.show[0]===1;c!==d&&(a.show=xn.toValue(c,a.show),s.attributes.show.value[0]=a.show[0])}this.showsUpdated.removeAll()};Rh.prototype.contains=function(e){return this.updaters.contains(e.id)};Rh.prototype.getBoundingSphere=function(e,t){let n=this.primitive;if(!n.ready)return dt.PENDING;let i=n.getGeometryInstanceAttributes(e.entity);return!l(i)||!l(i.boundingSphere)||l(i.show)&&i.show[0]===0?dt.FAILED:(i.boundingSphere.clone(t),dt.DONE)};Rh.prototype.destroy=function(){let e=this.primitive,t=this.primitives;l(e)&&t.remove(e);let n=this.oldPrimitive;l(n)&&t.remove(n),this.removeMaterialSubscription()};function mV(e,t,n,i,o){this._items=[],this._primitives=e,this._appearanceType=t,this._depthFailAppearanceType=n,this._closed=i,this._shadows=o}mV.prototype.add=function(e,t){let n=this._items,i=n.length;for(let r=0;r<i;r++){let s=n[r];if(s.isMaterial(t)){s.add(e,t);return}}let o=new Rh(this._primitives,this._appearanceType,t.fillMaterialProperty,this._depthFailAppearanceType,t.depthFailMaterialProperty,this._closed,this._shadows);o.add(e,t),n.push(o)};mV.prototype.remove=function(e){let t=this._items,n=t.length;for(let i=n-1;i>=0;i--){let o=t[i];if(o.remove(e)){o.updaters.length===0&&(t.splice(i,1),o.destroy());break}}};mV.prototype.update=function(e){let t,n=this._items,i=n.length;for(t=i-1;t>=0;t--){let r=n[t];if(r.invalidated){n.splice(t,1);let s=r.updaters.values,a=s.length;for(let c=0;c<a;c++)this.add(e,s[c]);r.destroy()}}let o=!0;for(t=0;t<n.length;t++)o=n[t].update(e)&&o;return o};mV.prototype.getBoundingSphere=function(e,t){let n=this._items,i=n.length;for(let o=0;o<i;o++){let r=n[o];if(r.contains(e))return r.getBoundingSphere(e,t)}return dt.FAILED};mV.prototype.removeAllPrimitives=function(){let e=this._items,t=e.length;for(let n=0;n<t;n++)e[n].destroy();this._items.length=0};var om=mV;var _si=_(T(),1);var asi=_(T(),1),jhe=_(Qhe(),1);function $k(){this._tree=new jhe.default}function xT(){this.minX=0,this.minY=0,this.maxX=0,this.maxY=0,this.id=""}xT.fromRectangleAndId=function(e,t,n){return n.minX=t.west,n.minY=t.south,n.maxX=t.east,n.maxY=t.north,n.id=e,n};$k.prototype.insert=function(e,t){let n=xT.fromRectangleAndId(e,t,new xT);this._tree.insert(n)};function P$e(e,t){return e.id===t.id}var v$e=new xT;$k.prototype.remove=function(e,t){let n=xT.fromRectangleAndId(e,t,v$e);this._tree.remove(n,P$e)};var w$e=new xT;$k.prototype.collides=function(e){let t=xT.fromRectangleAndId("",e,w$e);return this._tree.collides(t)};var _T=$k;var F$e=new D,A$e=new wt,M$e=new wt;function qb(e,t,n,i){this.primitives=e,this.zIndex=i,this.classificationType=t,this.color=n,this.createPrimitive=!1,this.waitingOnCreate=!1,this.primitive=void 0,this.oldPrimitive=void 0,this.geometry=new Gt,this.updaters=new Gt,this.updatersWithAttributes=new Gt,this.attributes=new Gt,this.subscriptions=new Gt,this.showsUpdated=new Gt,this.itemsToRemove=[],this.isDirty=!1,this.rectangleCollisionCheck=new _T}qb.prototype.overlapping=function(e){return this.rectangleCollisionCheck.collides(e)};qb.prototype.add=function(e,t){let n=e.id;if(this.createPrimitive=!0,this.geometry.set(n,t),this.updaters.set(n,e),this.rectangleCollisionCheck.insert(n,t.geometry.rectangle),!e.hasConstantFill||!e.fillMaterialProperty.isConstant||!J.isConstant(e.distanceDisplayConditionProperty))this.updatersWithAttributes.set(n,e);else{let i=this;this.subscriptions.set(n,e.entity.definitionChanged.addEventListener(function(o,r,s,a){r==="isShowing"&&i.showsUpdated.set(e.id,e)}))}};qb.prototype.remove=function(e){let t=e.id,n=this.geometry.get(t);if(this.createPrimitive=this.geometry.remove(t)||this.createPrimitive,this.updaters.remove(t)){this.rectangleCollisionCheck.remove(t,n.geometry.rectangle),this.updatersWithAttributes.remove(t);let i=this.subscriptions.get(t);return l(i)&&(i(),this.subscriptions.remove(t),this.showsUpdated.remove(t)),!0}return!1};qb.prototype.update=function(e){let t=!0,n=0,i=this.primitive,o=this.primitives,r;if(this.createPrimitive){let s=this.geometry.values;if(s.length>0)l(i)&&(l(this.oldPrimitive)?o.remove(i):this.oldPrimitive=i),i=new Dc({show:!1,asynchronous:!0,geometryInstances:s.slice(),classificationType:this.classificationType}),o.add(i,this.zIndex),t=!1;else{l(i)&&(o.remove(i),i=void 0);let c=this.oldPrimitive;l(c)&&(o.remove(c),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=i,this.createPrimitive=!1,this.waitingOnCreate=!0}else if(l(i)&&i.ready){i.show=!0,l(this.oldPrimitive)&&(o.remove(this.oldPrimitive),this.oldPrimitive=void 0);let s=this.updatersWithAttributes.values,a=s.length,c=this.waitingOnCreate;for(r=0;r<a;r++){let d=s[r],u=this.geometry.get(d.id),h=this.attributes.get(u.id.id);if(l(h)||(h=i.getGeometryInstanceAttributes(u.id),this.attributes.set(u.id.id,h)),!d.fillMaterialProperty.isConstant||c){let y=d.fillMaterialProperty.color,x=J.getValueOrDefault(y,e,D.WHITE,F$e);D.equals(h._lastColor,x)||(h._lastColor=D.clone(x,h._lastColor),h.color=Yt.toValue(x,h.color))}let p=d.entity.isShowing&&(d.hasConstantFill||d.isFilled(e)),g=h.show[0]===1;p!==g&&(h.show=xn.toValue(p,h.show));let f=d.distanceDisplayConditionProperty;if(!J.isConstant(f)){let y=J.getValueOrDefault(f,e,M$e,A$e);wt.equals(y,h._lastDistanceDisplayCondition)||(h._lastDistanceDisplayCondition=wt.clone(y,h._lastDistanceDisplayCondition),h.distanceDisplayCondition=kn.toValue(y,h.distanceDisplayCondition))}}this.updateShows(i),this.waitingOnCreate=!1}else l(i)&&!i.ready&&(t=!1);return this.itemsToRemove.length=n,t};qb.prototype.updateShows=function(e){let t=this.showsUpdated.values,n=t.length;for(let i=0;i<n;i++){let o=t[i],r=this.geometry.get(o.id),s=this.attributes.get(r.id.id);l(s)||(s=e.getGeometryInstanceAttributes(r.id),this.attributes.set(r.id.id,s));let a=o.entity.isShowing,c=s.show[0]===1;a!==c&&(s.show=xn.toValue(a,s.show),r.attributes.show.value[0]=s.show[0])}this.showsUpdated.removeAll()};qb.prototype.contains=function(e){return this.updaters.contains(e.id)};qb.prototype.getBoundingSphere=function(e,t){let n=this.primitive;if(!n.ready)return dt.PENDING;let i=n.getBoundingSphere(e.entity);return l(i)?(i.clone(t),dt.DONE):dt.FAILED};qb.prototype.removeAllPrimitives=function(){let e=this.primitives,t=this.primitive;l(t)&&(e.remove(t),this.primitive=void 0,this.geometry.removeAll(),this.updaters.removeAll());let n=this.oldPrimitive;l(n)&&(e.remove(n),this.oldPrimitive=void 0)};function hV(e,t){this._batches=[],this._primitives=e,this._classificationType=t}hV.prototype.add=function(e,t){let n=t.createFillGeometryInstance(e),i=this._batches,o=J.getValueOrDefault(t.zIndex,0),r,s=i.length;for(let a=0;a<s;++a){let c=i[a];if(c.zIndex===o&&!c.overlapping(n.geometry.rectangle)){r=c;break}}return l(r)||(r=new qb(this._primitives,this._classificationType,n.attributes.color.value,o),i.push(r)),r.add(t,n),r};hV.prototype.remove=function(e){let t=this._batches,n=t.length;for(let i=0;i<n;++i)if(t[i].remove(e))return};hV.prototype.update=function(e){let t,n,i=!0,o=this._batches,r=o.length;for(t=0;t<r;++t)i=o[t].update(e)&&i;for(t=0;t<r;++t){let s=o[t],a=s.itemsToRemove,c=a.length;for(let d=0;d<c;d++){n=a[d],s.remove(n);let u=this.add(e,n);s.isDirty=!0,u.isDirty=!0}}for(t=r-1;t>=0;--t){let s=o[t];s.isDirty&&(i=o[t].update(e)&&i,s.isDirty=!1),s.geometry.length===0&&o.splice(t,1)}return i};hV.prototype.getBoundingSphere=function(e,t){let n=this._batches,i=n.length;for(let o=0;o<i;++o){let r=n[o];if(r.contains(e))return r.getBoundingSphere(e,t)}return dt.FAILED};hV.prototype.removeAllPrimitives=function(){let e=this._batches,t=e.length;for(let n=0;n<t;++n)e[n].removeAllPrimitives()};var fV=hV;var vsi=_(T(),1);var N$e=new wt,k$e=new wt;function rm(e,t,n,i,o,r){this.primitives=e,this.classificationType=t,this.appearanceType=n,this.materialProperty=i,this.updaters=new Gt,this.createPrimitive=!0,this.primitive=void 0,this.oldPrimitive=void 0,this.geometry=new Gt,this.material=void 0,this.updatersWithAttributes=new Gt,this.attributes=new Gt,this.invalidated=!1,this.removeMaterialSubscription=i.definitionChanged.addEventListener(rm.prototype.onMaterialChanged,this),this.subscriptions=new Gt,this.showsUpdated=new Gt,this.usingSphericalTextureCoordinates=o,this.zIndex=r,this.rectangleCollisionCheck=new _T}rm.prototype.onMaterialChanged=function(){this.invalidated=!0};rm.prototype.overlapping=function(e){return this.rectangleCollisionCheck.collides(e)};rm.prototype.isMaterial=function(e){let t=this.materialProperty,n=e.fillMaterialProperty;return n===t||n instanceof Dt&&t instanceof Dt?!0:l(t)&&t.equals(n)};rm.prototype.add=function(e,t,n){let i=t.id;if(this.updaters.set(i,t),this.geometry.set(i,n),this.rectangleCollisionCheck.insert(i,n.geometry.rectangle),!t.hasConstantFill||!t.fillMaterialProperty.isConstant||!J.isConstant(t.distanceDisplayConditionProperty))this.updatersWithAttributes.set(i,t);else{let o=this;this.subscriptions.set(i,t.entity.definitionChanged.addEventListener(function(r,s,a,c){s==="isShowing"&&o.showsUpdated.set(t.id,t)}))}this.createPrimitive=!0};rm.prototype.remove=function(e){let t=e.id,n=this.geometry.get(t);if(this.createPrimitive=this.geometry.remove(t)||this.createPrimitive,this.updaters.remove(t)){this.rectangleCollisionCheck.remove(t,n.geometry.rectangle),this.updatersWithAttributes.remove(t);let i=this.subscriptions.get(t);return l(i)&&(i(),this.subscriptions.remove(t)),!0}return!1};rm.prototype.update=function(e){let t=!0,n=this.primitive,i=this.primitives,o=this.geometry.values,r;if(this.createPrimitive){if(o.length>0)l(n)&&(l(this.oldPrimitive)?i.remove(n):this.oldPrimitive=n),this.material=Qo.getValue(e,this.materialProperty,this.material),n=new Dc({show:!1,asynchronous:!0,geometryInstances:o.slice(),appearance:new this.appearanceType({material:this.material}),classificationType:this.classificationType}),i.add(n,this.zIndex),t=!1;else{l(n)&&(i.remove(n),n=void 0);let a=this.oldPrimitive;l(a)&&(i.remove(a),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=n,this.createPrimitive=!1}else if(l(n)&&n.ready){n.show=!0,l(this.oldPrimitive)&&(i.remove(this.oldPrimitive),this.oldPrimitive=void 0),this.material=Qo.getValue(e,this.materialProperty,this.material),this.primitive.appearance.material=this.material;let s=this.updatersWithAttributes.values,a=s.length;for(r=0;r<a;r++){let c=s[r],d=c.entity,u=this.geometry.get(c.id),h=this.attributes.get(u.id.id);l(h)||(h=n.getGeometryInstanceAttributes(u.id),this.attributes.set(u.id.id,h));let p=d.isShowing&&(c.hasConstantFill||c.isFilled(e)),g=h.show[0]===1;p!==g&&(h.show=xn.toValue(p,h.show));let f=c.distanceDisplayConditionProperty;if(!J.isConstant(f)){let y=J.getValueOrDefault(f,e,k$e,N$e);wt.equals(y,h._lastDistanceDisplayCondition)||(h._lastDistanceDisplayCondition=wt.clone(y,h._lastDistanceDisplayCondition),h.distanceDisplayCondition=kn.toValue(y,h.distanceDisplayCondition))}}this.updateShows(n)}else l(n)&&!n.ready&&(t=!1);return t};rm.prototype.updateShows=function(e){let t=this.showsUpdated.values,n=t.length;for(let i=0;i<n;i++){let o=t[i],r=o.entity,s=this.geometry.get(o.id),a=this.attributes.get(s.id.id);l(a)||(a=e.getGeometryInstanceAttributes(s.id),this.attributes.set(s.id.id,a));let c=r.isShowing,d=a.show[0]===1;c!==d&&(a.show=xn.toValue(c,a.show),s.attributes.show.value[0]=a.show[0])}this.showsUpdated.removeAll()};rm.prototype.contains=function(e){return this.updaters.contains(e.id)};rm.prototype.getBoundingSphere=function(e,t){let n=this.primitive;if(!n.ready)return dt.PENDING;let i=n.getGeometryInstanceAttributes(e.entity);return!l(i)||!l(i.boundingSphere)||l(i.show)&&i.show[0]===0?dt.FAILED:(i.boundingSphere.clone(t),dt.DONE)};rm.prototype.destroy=function(){let e=this.primitive,t=this.primitives;l(e)&&t.remove(e);let n=this.oldPrimitive;l(n)&&t.remove(n),this.removeMaterialSubscription()};function pV(e,t,n){this._items=[],this._primitives=e,this._classificationType=t,this._appearanceType=n}pV.prototype.add=function(e,t){let n=this._items,i=n.length,o=t.createFillGeometryInstance(e),r=gd.shouldUseSphericalCoordinates(o.geometry.rectangle),s=J.getValueOrDefault(t.zIndex,0);for(let c=0;c<i;++c){let d=n[c];if(d.isMaterial(t)&&d.usingSphericalTextureCoordinates===r&&d.zIndex===s&&!d.overlapping(o.geometry.rectangle)){d.add(e,t,o);return}}let a=new rm(this._primitives,this._classificationType,this._appearanceType,t.fillMaterialProperty,r,s);a.add(e,t,o),n.push(a)};pV.prototype.remove=function(e){let t=this._items,n=t.length;for(let i=n-1;i>=0;i--){let o=t[i];if(o.remove(e)){o.updaters.length===0&&(t.splice(i,1),o.destroy());break}}};pV.prototype.update=function(e){let t,n=this._items,i=n.length;for(t=i-1;t>=0;t--){let r=n[t];if(r.invalidated){n.splice(t,1);let s=r.updaters.values,a=s.length;for(let c=0;c<a;c++)this.add(e,s[c]);r.destroy()}}let o=!0;for(t=0;t<n.length;t++)o=n[t].update(e)&&o;return o};pV.prototype.getBoundingSphere=function(e,t){let n=this._items,i=n.length;for(let o=0;o<i;o++){let r=n[o];if(r.contains(e))return r.getBoundingSphere(e,t)}return dt.FAILED};pV.prototype.removeAllPrimitives=function(){let e=this._items,t=e.length;for(let n=0;n<t;n++)e[n].destroy();this._items.length=0};var Zv=pV;var Jsi=_(T(),1);var U$e=new D,D$e=new wt,B$e=new wt,O$e=m.ZERO,Y$e=new m;function $b(e,t,n,i){this.translucent=t,this.width=n,this.shadows=i,this.primitives=e,this.createPrimitive=!1,this.waitingOnCreate=!1,this.primitive=void 0,this.oldPrimitive=void 0,this.geometry=new Gt,this.updaters=new Gt,this.updatersWithAttributes=new Gt,this.attributes=new Gt,this.itemsToRemove=[],this.subscriptions=new Gt,this.showsUpdated=new Gt}$b.prototype.add=function(e,t){let n=e.id;if(this.createPrimitive=!0,this.geometry.set(n,t),this.updaters.set(n,e),!e.hasConstantOutline||!e.outlineColorProperty.isConstant||!J.isConstant(e.distanceDisplayConditionProperty)||!J.isConstant(e.terrainOffsetProperty))this.updatersWithAttributes.set(n,e);else{let i=this;this.subscriptions.set(n,e.entity.definitionChanged.addEventListener(function(o,r,s,a){r==="isShowing"&&i.showsUpdated.set(e.id,e)}))}};$b.prototype.remove=function(e){let t=e.id;if(this.createPrimitive=this.geometry.remove(t)||this.createPrimitive,this.updaters.remove(t)){this.updatersWithAttributes.remove(t);let n=this.subscriptions.get(t);return l(n)&&(n(),this.subscriptions.remove(t),this.showsUpdated.remove(t)),!0}return!1};$b.prototype.update=function(e){let t=!0,n=0,i=this.primitive,o=this.primitives,r;if(this.createPrimitive){let s=this.geometry.values;if(s.length>0)l(i)&&(l(this.oldPrimitive)?o.remove(i):this.oldPrimitive=i),i=new In({show:!1,asynchronous:!0,geometryInstances:s.slice(),appearance:new dn({flat:!0,translucent:this.translucent,renderState:{lineWidth:this.width}}),shadows:this.shadows}),o.add(i),t=!1;else{l(i)&&(o.remove(i),i=void 0);let c=this.oldPrimitive;l(c)&&(o.remove(c),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=i,this.createPrimitive=!1,this.waitingOnCreate=!0}else if(l(i)&&i.ready){i.show=!0,l(this.oldPrimitive)&&(o.remove(this.oldPrimitive),this.oldPrimitive=void 0);let s=this.updatersWithAttributes.values,a=s.length,c=this.waitingOnCreate;for(r=0;r<a;r++){let d=s[r],u=this.geometry.get(d.id),h=this.attributes.get(u.id.id);if(l(h)||(h=i.getGeometryInstanceAttributes(u.id),this.attributes.set(u.id.id,h)),!d.outlineColorProperty.isConstant||c){let x=d.outlineColorProperty,S=J.getValueOrDefault(x,e,D.WHITE,U$e);D.equals(h._lastColor,S)||(h._lastColor=D.clone(S,h._lastColor),h.color=Yt.toValue(S,h.color),(this.translucent&&h.color[3]===255||!this.translucent&&h.color[3]!==255)&&(this.itemsToRemove[n++]=d))}let p=d.entity.isShowing&&(d.hasConstantOutline||d.isOutlineVisible(e)),g=h.show[0]===1;p!==g&&(h.show=xn.toValue(p,h.show));let f=d.distanceDisplayConditionProperty;if(!J.isConstant(f)){let x=J.getValueOrDefault(f,e,B$e,D$e);wt.equals(x,h._lastDistanceDisplayCondition)||(h._lastDistanceDisplayCondition=wt.clone(x,h._lastDistanceDisplayCondition),h.distanceDisplayCondition=kn.toValue(x,h.distanceDisplayCondition))}let y=d.terrainOffsetProperty;if(!J.isConstant(y)){let x=J.getValueOrDefault(y,e,O$e,Y$e);m.equals(x,h._lastOffset)||(h._lastOffset=m.clone(x,h._lastOffset),h.offset=$i.toValue(x,h.offset))}}this.updateShows(i),this.waitingOnCreate=!1}else l(i)&&!i.ready&&(t=!1);return this.itemsToRemove.length=n,t};$b.prototype.updateShows=function(e){let t=this.showsUpdated.values,n=t.length;for(let i=0;i<n;i++){let o=t[i],r=this.geometry.get(o.id),s=this.attributes.get(r.id.id);l(s)||(s=e.getGeometryInstanceAttributes(r.id),this.attributes.set(r.id.id,s));let a=o.entity.isShowing,c=s.show[0]===1;a!==c&&(s.show=xn.toValue(a,s.show),r.attributes.show.value[0]=s.show[0])}this.showsUpdated.removeAll()};$b.prototype.contains=function(e){return this.updaters.contains(e.id)};$b.prototype.getBoundingSphere=function(e,t){let n=this.primitive;if(!n.ready)return dt.PENDING;let i=n.getGeometryInstanceAttributes(e.entity);return!l(i)||!l(i.boundingSphere)||l(i.show)&&i.show[0]===0?dt.FAILED:(i.boundingSphere.clone(t),dt.DONE)};$b.prototype.removeAllPrimitives=function(){let e=this.primitives,t=this.primitive;l(t)&&(e.remove(t),this.primitive=void 0,this.geometry.removeAll(),this.updaters.removeAll());let n=this.oldPrimitive;l(n)&&(e.remove(n),this.oldPrimitive=void 0)};function bV(e,t,n){this._primitives=e,this._scene=t,this._shadows=n,this._solidBatches=new Gt,this._translucentBatches=new Gt}bV.prototype.add=function(e,t){let n=t.createOutlineGeometryInstance(e),i=this._scene.clampLineWidth(t.outlineWidth),o,r;n.attributes.color.value[3]===255?(o=this._solidBatches,r=o.get(i),l(r)||(r=new $b(this._primitives,!1,i,this._shadows),o.set(i,r)),r.add(t,n)):(o=this._translucentBatches,r=o.get(i),l(r)||(r=new $b(this._primitives,!0,i,this._shadows),o.set(i,r)),r.add(t,n))};bV.prototype.remove=function(e){let t,n=this._solidBatches.values,i=n.length;for(t=0;t<i;t++)if(n[t].remove(e))return;let o=this._translucentBatches.values,r=o.length;for(t=0;t<r;t++)if(o[t].remove(e))return};bV.prototype.update=function(e){let t,n,i,o,r=this._solidBatches.values,s=r.length,a=this._translucentBatches.values,c=a.length,d,u=!0,h=!1;do{for(h=!1,n=0;n<s;n++){o=r[n],u=o.update(e),d=o.itemsToRemove;let p=d.length;if(p>0)for(h=!0,t=0;t<p;t++)i=d[t],o.remove(i),this.add(e,i)}for(n=0;n<c;n++){o=a[n],u=o.update(e),d=o.itemsToRemove;let p=d.length;if(p>0)for(h=!0,t=0;t<p;t++)i=d[t],o.remove(i),this.add(e,i)}}while(h);return u};bV.prototype.getBoundingSphere=function(e,t){let n,i=this._solidBatches.values,o=i.length;for(n=0;n<o;n++){let a=i[n];if(a.contains(e))return a.getBoundingSphere(e,t)}let r=this._translucentBatches.values,s=r.length;for(n=0;n<s;n++){let a=r[n];if(a.contains(e))return a.getBoundingSphere(e,t)}return dt.FAILED};bV.prototype.removeAllPrimitives=function(){let e,t=this._solidBatches.values,n=t.length;for(e=0;e<n;e++)t[e].removeAllPrimitives();let i=this._translucentBatches.values,o=i.length;for(e=0;e<o;e++)i[e].removeAllPrimitives()};var gV=bV;var z$e=[];function Kl(e,t,n,i){n=n??e.primitives,i=i??e.groundPrimitives,this._scene=e,this._primitives=n,this._groundPrimitives=i,this._entityCollection=void 0,this._addedObjects=new Gt,this._removedObjects=new Gt,this._changedObjects=new Gt;let o=_n.NUMBER_OF_SHADOW_MODES;this._outlineBatches=new Array(o*2),this._closedColorBatches=new Array(o*2),this._closedMaterialBatches=new Array(o*2),this._openColorBatches=new Array(o*2),this._openMaterialBatches=new Array(o*2);let r=jo.supportsMaterialsforEntitiesOnTerrain(e);this._supportsMaterialsforEntitiesOnTerrain=r;let s;for(s=0;s<o;++s)this._outlineBatches[s]=new gV(n,e,s,!1),this._outlineBatches[o+s]=new gV(n,e,s,!0),this._closedColorBatches[s]=new im(n,dn,void 0,!0,s,!0),this._closedColorBatches[o+s]=new im(n,dn,void 0,!0,s,!1),this._closedMaterialBatches[s]=new om(n,ao,void 0,!0,s,!0),this._closedMaterialBatches[o+s]=new om(n,ao,void 0,!0,s,!1),this._openColorBatches[s]=new im(n,dn,void 0,!1,s,!0),this._openColorBatches[o+s]=new im(n,dn,void 0,!1,s,!1),this._openMaterialBatches[s]=new om(n,ao,void 0,!1,s,!0),this._openMaterialBatches[o+s]=new om(n,ao,void 0,!1,s,!1);let a=Un.NUMBER_OF_CLASSIFICATION_TYPES,c=new Array(a),d=[];if(r)for(s=0;s<a;++s)d.push(new Zv(i,s,ao)),c[s]=new fV(i,s);else for(s=0;s<a;++s)c[s]=new fV(i,s);this._groundColorBatches=c,this._groundMaterialBatches=d,this._dynamicBatch=new aT(n,i),this._batches=this._outlineBatches.concat(this._closedColorBatches,this._closedMaterialBatches,this._openColorBatches,this._openMaterialBatches,this._groundColorBatches,this._groundMaterialBatches,this._dynamicBatch),this._subscriptions=new Gt,this._updaterSets=new Gt,this._entityCollection=t,t.collectionChanged.addEventListener(Kl.prototype._onCollectionChanged,this),this._onCollectionChanged(t,t.values,z$e)}Kl.registerUpdater=function(e){yT.registerUpdater(e)};Kl.unregisterUpdater=function(e){yT.unregisterUpdater(e)};Kl.prototype.update=function(e){let t=this._addedObjects,n=t.values,i=this._removedObjects,o=i.values,r=this._changedObjects,s=r.values,a,c,d,u,h=this;for(a=s.length-1;a>-1;a--)c=s[a],d=c.id,u=this._updaterSets.get(d),u.entity===c?u.forEach(function(y){h._removeUpdater(y),h._insertUpdaterIntoBatch(e,y)}):(o.push(c),n.push(c));for(a=o.length-1;a>-1;a--)c=o[a],d=c.id,u=this._updaterSets.get(d),u.forEach(this._removeUpdater.bind(this)),u.destroy(),this._updaterSets.remove(d),this._subscriptions.get(d)(),this._subscriptions.remove(d);for(a=n.length-1;a>-1;a--)c=n[a],d=c.id,u=new yT(c,this._scene),this._updaterSets.set(d,u),u.forEach(function(y){h._insertUpdaterIntoBatch(e,y)}),this._subscriptions.set(d,u.geometryChanged.addEventListener(Kl._onGeometryChanged,this));t.removeAll(),i.removeAll(),r.removeAll();let p=!0,g=this._batches,f=g.length;for(a=0;a<f;a++)p=g[a].update(e)&&p;return p};var H$e=[],K$e=new le;Kl.prototype.getBoundingSphere=function(e,t){let n=H$e,i=K$e,o=0,r=dt.DONE,s=this._batches,a=s.length,c=e.id,d=this._updaterSets.get(c).updaters;for(let u=0;u<d.length;u++){let h=d[u];for(let p=0;p<a;p++){if(r=s[p].getBoundingSphere(h,i),r===dt.PENDING)return dt.PENDING;r===dt.DONE&&(n[o]=le.clone(i,n[o]),o++)}}return o===0?dt.FAILED:(n.length=o,le.fromBoundingSpheres(n,t),dt.DONE)};Kl.prototype.isDestroyed=function(){return!1};Kl.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(Kl.prototype._onCollectionChanged,this),this._addedObjects.removeAll(),this._removedObjects.removeAll();let e,t=this._batches,n=t.length;for(e=0;e<n;e++)t[e].removeAllPrimitives();let i=this._subscriptions.values;for(n=i.length,e=0;e<n;e++)i[e]();this._subscriptions.removeAll();let o=this._updaterSets.values;for(n=o.length,e=0;e<n;e++)o[e].destroy();return this._updaterSets.removeAll(),me(this)};Kl.prototype._removeUpdater=function(e){let t=this._batches,n=t.length;for(let i=0;i<n;i++)t[i].remove(e)};Kl.prototype._insertUpdaterIntoBatch=function(e,t){if(t.isDynamic){this._dynamicBatch.add(e,t);return}let n;(t.outlineEnabled||t.fillEnabled)&&(n=t.shadowsProperty.getValue(e));let i=_n.NUMBER_OF_SHADOW_MODES;if(t.outlineEnabled&&(l(t.terrainOffsetProperty)?this._outlineBatches[i+n].add(e,t):this._outlineBatches[n].add(e,t)),t.fillEnabled)if(t.onTerrain){let o=t.classificationTypeProperty.getValue(e);t.fillMaterialProperty instanceof Dt?this._groundColorBatches[o].add(e,t):this._groundMaterialBatches[o].add(e,t)}else t.isClosed?t.fillMaterialProperty instanceof Dt?l(t.terrainOffsetProperty)?this._closedColorBatches[i+n].add(e,t):this._closedColorBatches[n].add(e,t):l(t.terrainOffsetProperty)?this._closedMaterialBatches[i+n].add(e,t):this._closedMaterialBatches[n].add(e,t):t.fillMaterialProperty instanceof Dt?l(t.terrainOffsetProperty)?this._openColorBatches[i+n].add(e,t):this._openColorBatches[n].add(e,t):l(t.terrainOffsetProperty)?this._openMaterialBatches[i+n].add(e,t):this._openMaterialBatches[n].add(e,t)};Kl._onGeometryChanged=function(e){let t=this._removedObjects,n=this._changedObjects,i=e.entity,o=i.id;!l(t.get(o))&&!l(n.get(o))&&n.set(o,i)};Kl.prototype._onCollectionChanged=function(e,t,n){let i=this._addedObjects,o=this._removedObjects,r=this._changedObjects,s,a,c;for(s=n.length-1;s>-1;s--)c=n[s],a=c.id,i.remove(a)||(o.set(a,c),r.remove(a));for(s=t.length-1;s>-1;s--)c=t[s],a=c.id,o.remove(a)?r.set(a,c):i.set(a,c)};var Gv=Kl;var Xai=_(T(),1);var J$e=1,Q$e="30px sans-serif",j$e=Do.FILL,q$e=D.WHITE,$$e=D.BLACK,eet=1,tet=!1,net=new D(.165,.165,.165,.8),iet=new U(7,5),oet=U.ZERO,ret=m.ZERO,set=Je.NONE,aet=_i.CENTER,cet=An.CENTER,det=new m,uet=new D,met=new D,het=new D,fet=new U,pet=new m,bet=new U,get=new kt,yet=new kt,xet=new kt,_et=new wt;function qhe(e){this.entity=e,this.label=void 0,this.index=void 0}function ny(e,t){t.collectionChanged.addEventListener(ny.prototype._onCollectionChanged,this),this._cluster=e,this._entityCollection=t,this._items=new Gt,this._onCollectionChanged(t,t.values,[],[])}ny.prototype.update=function(e){let t=this._items.values,n=this._cluster;for(let i=0,o=t.length;i<o;i++){let r=t[i],s=r.entity,a=s._label,c,d=r.label,u=s.isShowing&&s.isAvailable(e)&&J.getValueOrDefault(a._show,e,!0),h;if(u&&(h=J.getValueOrUndefined(s._position,e,det),c=J.getValueOrUndefined(a._text,e),u=l(h)&&l(c)),!u){PJ(r,s,n);continue}J.isConstant(s._position)||(n._clusterDirty=!0);let p=!1,g=J.getValueOrDefault(a._heightReference,e,set);l(d)||(d=n.getLabel(s),d.id=s,r.label=d,p=m.equals(d.position,h)&&d.heightReference===g),d.show=!0,d.position=h,d.text=c,d.scale=J.getValueOrDefault(a._scale,e,J$e),d.font=J.getValueOrDefault(a._font,e,Q$e),d.style=J.getValueOrDefault(a._style,e,j$e),d.fillColor=J.getValueOrDefault(a._fillColor,e,q$e,uet),d.outlineColor=J.getValueOrDefault(a._outlineColor,e,$$e,met),d.outlineWidth=J.getValueOrDefault(a._outlineWidth,e,eet),d.showBackground=J.getValueOrDefault(a._showBackground,e,tet),d.backgroundColor=J.getValueOrDefault(a._backgroundColor,e,net,het),d.backgroundPadding=J.getValueOrDefault(a._backgroundPadding,e,iet,fet),d.pixelOffset=J.getValueOrDefault(a._pixelOffset,e,oet,bet),d.eyeOffset=J.getValueOrDefault(a._eyeOffset,e,ret,pet),d.heightReference=g,d.horizontalOrigin=J.getValueOrDefault(a._horizontalOrigin,e,aet),d.verticalOrigin=J.getValueOrDefault(a._verticalOrigin,e,cet),d.translucencyByDistance=J.getValueOrUndefined(a._translucencyByDistance,e,get),d.pixelOffsetScaleByDistance=J.getValueOrUndefined(a._pixelOffsetScaleByDistance,e,yet),d.scaleByDistance=J.getValueOrUndefined(a._scaleByDistance,e,xet),d.distanceDisplayCondition=J.getValueOrUndefined(a._distanceDisplayCondition,e,_et),d.disableDepthTestDistance=J.getValueOrUndefined(a._disableDepthTestDistance,e),p&&d._updateClamping()}return!0};ny.prototype.getBoundingSphere=function(e,t){let n=this._items.get(e.id);if(!l(n)||!l(n.label))return dt.FAILED;let i=n.label;return t.center=m.clone(i._clampedPosition??i.position,t.center),t.radius=0,dt.DONE};ny.prototype.isDestroyed=function(){return!1};ny.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(ny.prototype._onCollectionChanged,this);let e=this._entityCollection.values;for(let t=0;t<e.length;t++)this._cluster.removeLabel(e[t]);return me(this)};ny.prototype._onCollectionChanged=function(e,t,n,i){let o,r,s=this._items,a=this._cluster;for(o=t.length-1;o>-1;o--)r=t[o],l(r._label)&&l(r._position)&&s.set(r.id,new qhe(r));for(o=i.length-1;o>-1;o--)r=i[o],l(r._label)&&l(r._position)?s.contains(r.id)||s.set(r.id,new qhe(r)):(PJ(s.get(r.id),r,a),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],PJ(s.get(r.id),r,a),s.remove(r.id)};function PJ(e,t,n){l(e)&&(e.label=void 0,n.removeLabel(t))}var Ev=ny;var jai=_(T(),1);var Tet=1,Cet=!0,Vet=0,Let=!0,Ret=!0,Zet=_n.ENABLED,Get=Je.NONE,Eet=D.RED,Iet=0,Xet=D.WHITE,Wet=pc.HIGHLIGHT,Pet=.5,vet=new U(1,1),$he={maximumPositionEpsilon:Number.POSITIVE_INFINITY},wet=new F,Fet=new F,efe=new D,tfe=new Array(4),Aet=new m;function iy(e,t){t.collectionChanged.addEventListener(iy.prototype._onCollectionChanged,this),this._scene=e,this._primitives=e.primitives,this._entityCollection=t,this._modelHash={},this._entitiesToVisualize=new Gt,this._onCollectionChanged(t,t.values,[],[])}async function Met(e,t,n,i,o){let r=e._primitives,s=e._modelHash;try{let a=await sh.fromGltfAsync({url:n,incrementallyLoadTextures:i,scene:e._scene,environmentMapOptions:o});if(e.isDestroyed()||!l(s[t.id]))return;a.id=t,r.add(a),s[t.id].modelPrimitive=a,a.errorEvent.addEventListener(c=>{l(s[t.id])&&(console.log(c),c.name!=="TextureError"&&a.incrementallyLoadTextures&&(s[t.id].loadFailed=!0))})}catch(a){if(e.isDestroyed()||!l(s[t.id]))return;console.log(a),s[t.id].loadFailed=!0}}iy.prototype.update=function(e){let t=this._entitiesToVisualize.values,n=this._modelHash,i=this._primitives;for(let o=0,r=t.length;o<r;o++){let s=t[o],a=s._model,c,d=n[s.id],u=s.isShowing&&s.isAvailable(e)&&J.getValueOrDefault(a._show,e,!0),h;if(u&&(h=s.computeModelMatrix(e,wet),c=Ze.createIfNeeded(J.getValueOrUndefined(a._uri,e)),u=l(h)&&l(c)),!u){l(d)&&d.modelPrimitive&&(d.modelPrimitive.show=!1);continue}if(!l(d)||c.url!==d.url){l(d?.modelPrimitive)&&(i.removeAndDestroy(d.modelPrimitive),delete n[s.id]),d={modelPrimitive:void 0,url:c.url,animationsRunning:!1,nodeTransformationsScratch:{},articulationsScratch:{},loadFailed:!1,modelUpdated:!1,environmentMapOptionsScratch:{...$he}},n[s.id]=d;let f=J.getValueOrDefault(a._incrementallyLoadTextures,e,Let),y=J.getValueOrDefault(a._environmentMapOptions,e,$he,d.environmentMapOptionsScratch);Met(this,s,c,f,y)}let p=d.modelPrimitive;if(!l(p))continue;p.show=!0,p.scale=J.getValueOrDefault(a._scale,e,Tet),p.enableVerticalExaggeration=J.getValueOrDefault(a._enableVerticalExaggeration,e,Cet),p.minimumPixelSize=J.getValueOrDefault(a._minimumPixelSize,e,Vet),p.maximumScale=J.getValueOrUndefined(a._maximumScale,e),p.modelMatrix=F.clone(h,p.modelMatrix),p.shadows=J.getValueOrDefault(a._shadows,e,Zet),p.heightReference=J.getValueOrDefault(a._heightReference,e,Get),p.distanceDisplayCondition=J.getValueOrUndefined(a._distanceDisplayCondition,e),p.silhouetteColor=J.getValueOrDefault(a._silhouetteColor,e,Eet,efe),p.silhouetteSize=J.getValueOrDefault(a._silhouetteSize,e,Iet),p.color=J.getValueOrDefault(a._color,e,Xet,efe),p.colorBlendMode=J.getValueOrDefault(a._colorBlendMode,e,Wet),p.colorBlendAmount=J.getValueOrDefault(a._colorBlendAmount,e,Pet),p.clippingPlanes=J.getValueOrUndefined(a._clippingPlanes,e),p.clampAnimations=J.getValueOrDefault(a._clampAnimations,e,Ret),p.imageBasedLighting.imageBasedLightingFactor=J.getValueOrDefault(a._imageBasedLightingFactor,e,vet);let g=J.getValueOrUndefined(a._lightColor,e);if(l(g)&&(D.pack(g,tfe,0),g=m.unpack(tfe,0,Aet)),p.lightColor=g,p.customShader=J.getValueOrUndefined(a._customShader,e),n[s.id].modelUpdated=!0,p.ready){let f=J.getValueOrDefault(a._runAnimations,e,!0);d.animationsRunning!==f&&(f?p.activeAnimations.addAll({loop:Nl.REPEAT}):p.activeAnimations.removeAll(),d.animationsRunning=f);let y=J.getValueOrUndefined(a._nodeTransformations,e,d.nodeTransformationsScratch);if(l(y)){let C=Object.keys(y);for(let V=0,L=C.length;V<L;++V){let Z=C[V],E=y[Z];if(!l(E))continue;let P=p.getNode(Z);if(!l(P))continue;let W=F.fromTranslationRotationScale(E,Fet);P.matrix=F.multiply(P.originalMatrix,W,W)}}let x=!1,S=J.getValueOrUndefined(a._articulations,e,d.articulationsScratch);if(l(S)){let C=Object.keys(S);for(let V=0,L=C.length;V<L;++V){let Z=C[V],E=S[Z];l(E)&&(x=!0,p.setArticulationStage(Z,E))}}x&&p.applyArticulations()}}return!0};iy.prototype.isDestroyed=function(){return!1};iy.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(iy.prototype._onCollectionChanged,this);let e=this._entitiesToVisualize.values,t=this._modelHash,n=this._primitives;for(let i=e.length-1;i>-1;i--)vJ(this,e[i],t,n);return me(this)};var eU=new m,Net=new he;iy.prototype.getBoundingSphere=function(e,t){let n=this._modelHash[e.id];if(!l(n))return dt.FAILED;if(n.loadFailed)return dt.FAILED;let i=n.modelPrimitive;if(!l(i)||!i.show)return dt.PENDING;if(!i.ready||!n.modelUpdated)return dt.PENDING;let o=this._scene,r=o.ellipsoid??ne.default;if(i.heightReference!==Je.NONE){let a=i.modelMatrix;eU.x=a[12],eU.y=a[13],eU.z=a[14];let c=r.cartesianToCartographic(eU,Net),d=o.getHeight(c,i.heightReference);return l(d)&&(Ru(i.heightReference)?c.height=d:c.height+=d),le.clone(i.boundingSphere,t),t.center=r.cartographicToCartesian(c),dt.DONE}return le.clone(i.boundingSphere,t),dt.DONE};iy.prototype._onCollectionChanged=function(e,t,n,i){let o,r,s=this._entitiesToVisualize,a=this._modelHash,c=this._primitives;for(o=t.length-1;o>-1;o--)r=t[o],l(r._model)&&l(r._position)&&s.set(r.id,r);for(o=i.length-1;o>-1;o--)r=i[o],l(r._model)&&l(r._position)?(ket(r,a),s.set(r.id,r)):(vJ(this,r,a,c),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],vJ(this,r,a,c),s.remove(r.id)};function vJ(e,t,n,i){let o=n[t.id];l(o)&&(i.removeAndDestroy(o.modelPrimitive),delete n[t.id])}function ket(e,t){let n=t[e.id];l(n)&&(n.nodeTransformationsScratch={},n.articulationsScratch={})}var Iv=iy;var Gci=_(T(),1);var rci=_(T(),1);function oy(e){this._definitionChanged=new be,this._value=void 0,this._removeSubscription=void 0,this.setValue(e)}Object.defineProperties(oy.prototype,{isConstant:{get:function(){return J.isConstant(this._value)}},definitionChanged:{get:function(){return this._definitionChanged}},referenceFrame:{get:function(){return l(this._value)?this._value.referenceFrame:ki.FIXED}}});var Uet=new q;oy.prototype.getValue=function(e,t){return l(e)||(e=q.now(Uet)),this.getValueInReferenceFrame(e,ki.FIXED,t)};oy.prototype.setValue=function(e){this._value!==e&&(this._value=e,l(this._removeSubscription)&&(this._removeSubscription(),this._removeSubscription=void 0),l(e)&&(this._removeSubscription=e.definitionChanged.addEventListener(this._raiseDefinitionChanged,this)),this._definitionChanged.raiseEvent(this))};oy.prototype.getValueInReferenceFrame=function(e,t,n){if(l(this._value))return n=this._value.getValueInReferenceFrame(e,t,n),l(n)?ne.default.scaleToGeodeticSurface(n,n):void 0};oy.prototype.equals=function(e){return this===e||e instanceof oy&&this._value===e._value};oy.prototype._raiseDefinitionChanged=function(){this._definitionChanged.raiseEvent(this)};var Af=oy;var Det=60,Bet=1,ife=new Ln,wJ=new Ln,FJ=new Ln;function nfe(e){this.entity=e,this.polyline=void 0,this.index=void 0,this.updater=void 0}function Oet(e,t,n,i,o,r,s,a,c){let d=a,u;u=e.getValueInReferenceFrame(t,r,c[d]),l(u)&&(c[d++]=u);let h=!l(o)||q.lessThanOrEquals(o,t)||q.greaterThanOrEquals(o,n),p=0,g=i.length,f=i[p],y=n,x=!1,S,C,V;for(;p<g;){if(!h&&q.greaterThanOrEquals(f,o)&&(u=e.getValueInReferenceFrame(o,r,c[d]),l(u)&&(c[d++]=u),h=!0),q.greaterThan(f,t)&&q.lessThan(f,y)&&!f.equals(o)&&(u=e.getValueInReferenceFrame(f,r,c[d]),l(u)&&(c[d++]=u)),p<g-1){if(s>0&&!x){let L=i[p+1],Z=q.secondsDifference(L,f);x=Z>s,x&&(S=Math.ceil(Z/s),C=0,V=Z/Math.max(S,2),S=Math.max(S-1,1))}if(x&&C<S){f=q.addSeconds(f,V,new q),C++;continue}}x=!1,p++,f=i[p]}return u=e.getValueInReferenceFrame(n,r,c[d]),l(u)&&(c[d++]=u),d}function Yet(e,t,n,i,o,r,s,a){let c,d=0,u=s,h=t,p=!l(i)||q.lessThanOrEquals(i,t)||q.greaterThanOrEquals(i,n);for(;q.lessThan(h,n);)!p&&q.greaterThanOrEquals(h,i)&&(p=!0,c=e.getValueInReferenceFrame(i,o,a[u]),l(c)&&(a[u]=c,u++)),c=e.getValueInReferenceFrame(h,o,a[u]),l(c)&&(a[u]=c,u++),d++,h=q.addSeconds(t,r*d,new q);return c=e.getValueInReferenceFrame(n,o,a[u]),l(c)&&(a[u]=c,u++),u}function zet(e,t,n,i,o,r,s,a){let c,d=0,u=s,h=t,p=Math.max(r,60),g=!l(i)||q.lessThanOrEquals(i,t)||q.greaterThanOrEquals(i,n);for(;q.lessThan(h,n);)!g&&q.greaterThanOrEquals(h,i)&&(g=!0,c=e.getValueInReferenceFrame(i,o,a[u]),l(c)&&(a[u]=c,u++)),c=e.getValueInReferenceFrame(h,o,a[u]),l(c)&&(a[u]=c,u++),d++,h=q.addSeconds(t,p*d,new q);return c=e.getValueInReferenceFrame(n,o,a[u]),l(c)&&(a[u]=c,u++),u}function Het(e,t,n,i,o,r,s,a){FJ.start=t,FJ.stop=n;let c=s,d=e.intervals;for(let u=0;u<d.length;u++){let h=d.get(u);if(!Ln.intersect(h,FJ,ife).isEmpty){let p=h.start;h.isStartIncluded||(h.isStopIncluded?p=h.stop:p=q.addSeconds(h.start,q.secondsDifference(h.stop,h.start)/2,new q));let g=e.getValueInReferenceFrame(p,o,a[c]);l(g)&&(a[c]=g,c++)}}return c}function Ket(e,t,n,i,o,r,s,a){let c=e.getValueInReferenceFrame(t,o,a[s]);return l(c)&&(a[s++]=c),s}function Jet(e,t,n,i,o,r,s,a){wJ.start=t,wJ.stop=n;let c=s,d=e.intervals;for(let u=0;u<d.length;u++){let h=d.get(u);if(!Ln.intersect(h,wJ,ife).isEmpty){let p=h.start,g=h.stop,f=t;q.greaterThan(p,f)&&(f=p);let y=n;q.lessThan(g,y)&&(y=g),c=ofe(h.data,f,y,i,o,r,c,a)}}return c}function ofe(e,t,n,i,o,r,s,a){for(;e instanceof Yb;)e=e.resolvedProperty;if(e instanceof _a){let c=e._property._times;s=Oet(e,t,n,c,i,o,r,s,a)}else e instanceof LI?s=Yet(e,t,n,i,o,r,s,a):e instanceof ya?s=Jet(e,t,n,i,o,r,s,a):e instanceof zb?s=Het(e,t,n,i,o,r,s,a):e instanceof Oc||e instanceof Af&&J.isConstant(e)?s=Ket(e,t,n,i,o,r,s,a):s=zet(e,t,n,i,o,r,s,a);return s}function rfe(e,t,n,i,o,r,s){l(s)||(s=[]);let a=ofe(e,t,n,i,o,r,0,s);return s.length=a,s}var Qet=new $;function Xv(e,t){this._unusedIndexes=[],this._polylineCollection=new lh,this._scene=e,this._referenceFrame=t,e.primitives.add(this._polylineCollection)}Xv.prototype.update=function(e){if(this._referenceFrame===ki.INERTIAL){let t=Pt.computeIcrfToCentralBodyFixedMatrix(e,Qet);F.fromRotationTranslation(t,m.ZERO,this._polylineCollection.modelMatrix)}};Xv.prototype.updateObject=function(e,t){let n=t.entity,i=n._path,o=n._position,r,s,a=i._show,c=t.polyline,d=n.isShowing&&n.isAvailable(e)&&(!l(a)||a.getValue(e));if(d){let h=J.getValueOrUndefined(i._leadTime,e),p=J.getValueOrUndefined(i._trailTime,e),g=n._availability,f=l(g),y=l(h),x=l(p);if(d=f||y&&x,d){if(x&&(r=q.addSeconds(e,-p,new q)),y&&(s=q.addSeconds(e,h,new q)),f){let S=g.start,C=g.stop;(!x||q.greaterThan(S,r))&&(r=S),(!y||q.lessThan(C,s))&&(s=C)}d=q.lessThan(r,s)}}if(!d){l(c)&&(this._unusedIndexes.push(t.index),t.polyline=void 0,c.show=!1,t.index=void 0);return}if(!l(c)){let h=this._unusedIndexes;if(h.length>0){let g=h.pop();c=this._polylineCollection.get(g),t.index=g}else t.index=this._polylineCollection.length,c=this._polylineCollection.add();c.id=n,t.polyline=c}let u=J.getValueOrDefault(i._resolution,e,Det);c.show=!0,c.positions=rfe(o,r,s,e,this._referenceFrame,u,c.positions.slice()),c.material=Qo.getValue(e,i._material,c.material),c.width=J.getValueOrDefault(i._width,e,Bet),c.distanceDisplayCondition=J.getValueOrUndefined(i._distanceDisplayCondition,e,c.distanceDisplayCondition)};Xv.prototype.removeObject=function(e){let t=e.polyline;l(t)&&(this._unusedIndexes.push(e.index),e.polyline=void 0,t.show=!1,t.id=void 0,e.index=void 0)};Xv.prototype.destroy=function(){return this._scene.primitives.remove(this._polylineCollection),me(this)};function ry(e,t){t.collectionChanged.addEventListener(ry.prototype._onCollectionChanged,this),this._scene=e,this._updaters={},this._entityCollection=t,this._items=new Gt,this._onCollectionChanged(t,t.values,[],[])}ry.prototype.update=function(e){let t=this._updaters;for(let i in t)t.hasOwnProperty(i)&&t[i].update(e);let n=this._items.values;if(n.length===0&&l(this._updaters)&&Object.keys(this._updaters).length>0){for(let i in t)t.hasOwnProperty(i)&&t[i].destroy();this._updaters={}}for(let i=0,o=n.length;i<o;i++){let r=n[i],a=r.entity._position,c=r.updater,d=ki.FIXED;this._scene.mode===oe.SCENE3D&&(d=a.referenceFrame);let u=this._updaters[d];if(c===u&&l(u)){u.updateObject(e,r);continue}l(c)&&c.removeObject(r),l(u)||(u=new Xv(this._scene,d),u.update(e),this._updaters[d]=u),r.updater=u,l(u)&&u.updateObject(e,r)}return!0};ry.prototype.isDestroyed=function(){return!1};ry.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(ry.prototype._onCollectionChanged,this);let e=this._updaters;for(let t in e)e.hasOwnProperty(t)&&e[t].destroy();return me(this)};ry.prototype._onCollectionChanged=function(e,t,n,i){let o,r,s,a=this._items;for(o=t.length-1;o>-1;o--)r=t[o],l(r._path)&&l(r._position)&&a.set(r.id,new nfe(r));for(o=i.length-1;o>-1;o--)r=i[o],l(r._path)&&l(r._position)?a.contains(r.id)||a.set(r.id,new nfe(r)):(s=a.get(r.id),l(s)&&(l(s.updater)&&s.updater.removeObject(s),a.remove(r.id)));for(o=n.length-1;o>-1;o--)r=n[o],s=a.get(r.id),l(s)&&(l(s.updater)&&s.updater.removeObject(s),a.remove(r.id))};ry._subSample=rfe;var Wv=ry;var Dci=_(T(),1);var sfe=D.WHITE,afe=D.BLACK,cfe=0,lfe=1,dfe=0,ufe=vr.NONE,mfe=new D,jet=new m,hfe=new D,ffe=new kt,pfe=new kt,bfe=new wt;function gfe(e){this.entity=e,this.pointPrimitive=void 0,this.billboard=void 0,this.color=void 0,this.outlineColor=void 0,this.pixelSize=void 0,this.outlineWidth=void 0}function sy(e,t){t.collectionChanged.addEventListener(sy.prototype._onCollectionChanged,this),this._cluster=e,this._entityCollection=t,this._items=new Gt,this._onCollectionChanged(t,t.values,[],[])}sy.prototype.update=function(e){let t=this._items.values,n=this._cluster;for(let i=0,o=t.length;i<o;i++){let r=t[i],s=r.entity,a=s._point,c=r.pointPrimitive,d=r.billboard,u=J.getValueOrDefault(a._heightReference,e,Je.NONE),h=s.isShowing&&s.isAvailable(e)&&J.getValueOrDefault(a._show,e,!0),p;if(h&&(p=J.getValueOrUndefined(s._position,e,jet),h=l(p)),!h){Pv(r,s,n);continue}J.isConstant(s._position)||(n._clusterDirty=!0);let g=!1,f=!1;if(u!==Je.NONE&&!l(d)?(l(c)&&(Pv(r,s,n),c=void 0),d=n.getBillboard(s),d.id=s,d.image=void 0,r.billboard=d,g=!0,f=m.equals(d.position,p)&&d.heightReference===u):u===Je.NONE&&!l(c)&&(l(d)&&(Pv(r,s,n),d=void 0),c=n.getPoint(s),c.id=s,r.pointPrimitive=c),l(c))c.show=!0,c.position=p,c.scaleByDistance=J.getValueOrUndefined(a._scaleByDistance,e,ffe),c.translucencyByDistance=J.getValueOrUndefined(a._translucencyByDistance,e,pfe),c.color=J.getValueOrDefault(a._color,e,sfe,mfe),c.outlineColor=J.getValueOrDefault(a._outlineColor,e,afe,hfe),c.outlineWidth=J.getValueOrDefault(a._outlineWidth,e,cfe),c.pixelSize=J.getValueOrDefault(a._pixelSize,e,lfe),c.distanceDisplayCondition=J.getValueOrUndefined(a._distanceDisplayCondition,e,bfe),c.disableDepthTestDistance=J.getValueOrDefault(a._disableDepthTestDistance,e,dfe),c.splitDirection=J.getValueOrDefault(a._splitDirection,e,ufe);else if(l(d)){d.show=!0,d.position=p,d.scaleByDistance=J.getValueOrUndefined(a._scaleByDistance,e,ffe),d.translucencyByDistance=J.getValueOrUndefined(a._translucencyByDistance,e,pfe),d.distanceDisplayCondition=J.getValueOrUndefined(a._distanceDisplayCondition,e,bfe),d.disableDepthTestDistance=J.getValueOrDefault(a._disableDepthTestDistance,e,dfe),d.splitDirection=J.getValueOrDefault(a._splitDirection,e,ufe),d.heightReference=u;let y=J.getValueOrDefault(a._color,e,sfe,mfe),x=J.getValueOrDefault(a._outlineColor,e,afe,hfe),S=Math.round(J.getValueOrDefault(a._outlineWidth,e,cfe)),C=Math.max(1,Math.round(J.getValueOrDefault(a._pixelSize,e,lfe)));if(S>0?(d.scale=1,g=g||S!==r.outlineWidth||C!==r.pixelSize||!D.equals(y,r.color)||!D.equals(x,r.outlineColor)):(d.scale=C/50,C=50,g=g||S!==r.outlineWidth||!D.equals(y,r.color)||!D.equals(x,r.outlineColor)),g){r.color=D.clone(y,r.color),r.outlineColor=D.clone(x,r.outlineColor),r.pixelSize=C,r.outlineWidth=S;let V=y.alpha,L=y.toCssColorString(),Z=x.toCssColorString(),E=JSON.stringify([L,C,Z,S]);d.setImage(E,W_(V,L,Z,S,C))}f&&d._updateClamping()}}return!0};sy.prototype.getBoundingSphere=function(e,t){let n=this._items.get(e.id);if(!l(n)||!(l(n.pointPrimitive)||l(n.billboard)))return dt.FAILED;if(l(n.pointPrimitive))t.center=m.clone(n.pointPrimitive.position,t.center);else{let i=n.billboard;if(!l(i._clampedPosition))return dt.PENDING;t.center=m.clone(i._clampedPosition,t.center)}return t.radius=0,dt.DONE};sy.prototype.isDestroyed=function(){return!1};sy.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(sy.prototype._onCollectionChanged,this);let e=this._entityCollection.values;for(let t=0;t<e.length;t++)this._cluster.removePoint(e[t]);return me(this)};sy.prototype._onCollectionChanged=function(e,t,n,i){let o,r,s=this._items,a=this._cluster;for(o=t.length-1;o>-1;o--)r=t[o],l(r._point)&&l(r._position)&&s.set(r.id,new gfe(r));for(o=i.length-1;o>-1;o--)r=i[o],l(r._point)&&l(r._position)?s.contains(r.id)||s.set(r.id,new gfe(r)):(Pv(s.get(r.id),r,a),s.remove(r.id));for(o=n.length-1;o>-1;o--)r=n[o],Pv(s.get(r.id),r,a),s.remove(r.id)};function Pv(e,t,n){if(l(e)){let i=e.pointPrimitive;if(l(i)){e.pointPrimitive=void 0,n.removePoint(t);return}let o=e.billboard;l(o)&&(e.billboard=void 0,n.removeBillboard(t))}}var vv=sy;var gdi=_(T(),1);var Mli=_(T(),1);var cli=_(T(),1);var Sfe=[];function qet(e,t,n,i,o){let r=Sfe;r.length=o;let s,a=n.red,c=n.green,d=n.blue,u=n.alpha,h=i.red,p=i.green,g=i.blue,f=i.alpha;if(D.equals(n,i)){for(s=0;s<o;s++)r[s]=D.clone(n);return r}let y=(h-a)/o,x=(p-c)/o,S=(g-d)/o,C=(f-u)/o;for(s=0;s<o;s++)r[s]=new D(a+s*y,c+s*x,d+s*S,u+s*C);return r}function wv(e){e=e??Y.EMPTY_OBJECT;let t=e.positions,n=e.colors,i=e.width??1,o=e.colorsPerVertex??!1;this._positions=t,this._colors=n,this._width=i,this._colorsPerVertex=o,this._vertexFormat=Xe.clone(e.vertexFormat??Xe.DEFAULT),this._arcType=e.arcType??en.GEODESIC,this._granularity=e.granularity??X.RADIANS_PER_DEGREE,this._ellipsoid=ne.clone(e.ellipsoid??ne.default),this._workerName="createPolylineGeometry";let r=1+t.length*m.packedLength;r+=l(n)?1+n.length*D.packedLength:1,this.packedLength=r+ne.packedLength+Xe.packedLength+4}wv.pack=function(e,t,n){n=n??0;let i,o=e._positions,r=o.length;for(t[n++]=r,i=0;i<r;++i,n+=m.packedLength)m.pack(o[i],t,n);let s=e._colors;for(r=l(s)?s.length:0,t[n++]=r,i=0;i<r;++i,n+=D.packedLength)D.pack(s[i],t,n);return ne.pack(e._ellipsoid,t,n),n+=ne.packedLength,Xe.pack(e._vertexFormat,t,n),n+=Xe.packedLength,t[n++]=e._width,t[n++]=e._colorsPerVertex?1:0,t[n++]=e._arcType,t[n]=e._granularity,t};var Cfe=ne.clone(ne.UNIT_SPHERE),Vfe=new Xe,TT={positions:void 0,colors:void 0,ellipsoid:Cfe,vertexFormat:Vfe,width:void 0,colorsPerVertex:void 0,arcType:void 0,granularity:void 0};wv.unpack=function(e,t,n){t=t??0;let i,o=e[t++],r=new Array(o);for(i=0;i<o;++i,t+=m.packedLength)r[i]=m.unpack(e,t);o=e[t++];let s=o>0?new Array(o):void 0;for(i=0;i<o;++i,t+=D.packedLength)s[i]=D.unpack(e,t);let a=ne.unpack(e,t,Cfe);t+=ne.packedLength;let c=Xe.unpack(e,t,Vfe);t+=Xe.packedLength;let d=e[t++],u=e[t++]===1,h=e[t++],p=e[t];return l(n)?(n._positions=r,n._colors=s,n._ellipsoid=ne.clone(a,n._ellipsoid),n._vertexFormat=Xe.clone(c,n._vertexFormat),n._width=d,n._colorsPerVertex=u,n._arcType=h,n._granularity=p,n):(TT.positions=r,TT.colors=s,TT.width=d,TT.colorsPerVertex=u,TT.arcType=h,TT.granularity=p,new wv(TT))};var yfe=new m,xfe=new m,_fe=new m,Tfe=new m;wv.createGeometry=function(e){let t=e._width,n=e._vertexFormat,i=e._colors,o=e._colorsPerVertex,r=e._arcType,s=e._granularity,a=e._ellipsoid,c,d,u,h=[],p=_o(e._positions,m.equalsEpsilon,!1,h);if(l(i)&&h.length>0){let w=0,M=h[0];i=i.filter(function(B,k){let O=!1;return o?O=k===M||k===0&&M===1:O=k+1===M,O?(w++,M=h[w],!1):!0})}let g=p.length;if(g<2||t<=0)return;if(r===en.GEODESIC||r===en.RHUMB){let w,M;r===en.GEODESIC?(w=X.chordLength(s,a.maximumRadius),M=Pi.numberOfPoints):(w=s,M=Pi.numberOfPointsRhumbLine);let B=Pi.extractHeights(p,a);if(l(i)){let k=1;for(c=0;c<g-1;++c)k+=M(p[c],p[c+1],w);let O=new Array(k),N=0;for(c=0;c<g-1;++c){let z=p[c],K=p[c+1],te=i[c],H=M(z,K,w);if(o&&c<k){let j=i[c+1],ee=qet(z,K,te,j,H),fe=ee.length;for(d=0;d<fe;++d)O[N++]=ee[d]}else for(d=0;d<H;++d)O[N++]=D.clone(te)}O[N]=D.clone(i[i.length-1]),i=O,Sfe.length=0}r===en.GEODESIC?p=Pi.generateCartesianArc({positions:p,minDistance:w,ellipsoid:a,height:B}):p=Pi.generateCartesianRhumbArc({positions:p,granularity:w,ellipsoid:a,height:B})}g=p.length;let f=g*4-4,y=new Float64Array(f*3),x=new Float64Array(f*3),S=new Float64Array(f*3),C=new Float32Array(f*2),V=n.st?new Float32Array(f*2):void 0,L=l(i)?new Uint8Array(f*4):void 0,Z=0,E=0,P=0,W=0,v;for(d=0;d<g;++d){d===0?(v=yfe,m.subtract(p[0],p[1],v),m.add(p[0],v,v)):v=p[d-1],m.clone(v,_fe),m.clone(p[d],xfe),d===g-1?(v=yfe,m.subtract(p[g-1],p[g-2],v),m.add(p[g-1],v,v)):v=p[d+1],m.clone(v,Tfe);let w,M;l(L)&&(d!==0&&!o?w=i[d-1]:w=i[d],d!==g-1&&(M=i[d]));let B=d===0?2:0,k=d===g-1?2:4;for(u=B;u<k;++u){m.pack(xfe,y,Z),m.pack(_fe,x,Z),m.pack(Tfe,S,Z),Z+=3;let O=u-2<0?-1:1;if(C[E++]=2*(u%2)-1,C[E++]=O*t,n.st&&(V[P++]=d/(g-1),V[P++]=Math.max(C[E-2],0)),l(L)){let N=u<2?w:M;L[W++]=D.floatToByte(N.red),L[W++]=D.floatToByte(N.green),L[W++]=D.floatToByte(N.blue),L[W++]=D.floatToByte(N.alpha)}}}let A=new mn;A.position=new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:y}),A.prevPosition=new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:x}),A.nextPosition=new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:S}),A.expandAndWidth=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:C}),n.st&&(A.st=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:V})),l(L)&&(A.color=new Ge({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:4,values:L,normalize:!0}));let b=Ae.createTypedArray(f,g*6-6),R=0,G=0,I=g-1;for(d=0;d<I;++d)b[G++]=R,b[G++]=R+2,b[G++]=R+1,b[G++]=R+1,b[G++]=R+2,b[G++]=R+3,R+=4;return new lt({attributes:A,indices:b,primitiveType:we.TRIANGLES,boundingSphere:le.fromPoints(p),geometryType:xu.POLYLINES})};var e0=wv;var $et=new Qn(0),tU={},Lfe=new D,ett=new Dt(D.WHITE),ttt=new Qn(!0),ntt=new Qn(_n.DISABLED),itt=new Qn(new wt),ott=new Qn(Un.BOTH);function rtt(){this.vertexFormat=void 0,this.positions=void 0,this.width=void 0,this.arcType=void 0,this.granularity=void 0}function stt(){this.positions=void 0,this.width=void 0,this.arcType=void 0,this.granularity=void 0}function Zh(e,t){this._entity=e,this._scene=t,this._entitySubscription=e.definitionChanged.addEventListener(Zh.prototype._onEntityPropertyChanged,this),this._fillEnabled=!1,this._dynamic=!1,this._geometryChanged=new be,this._showProperty=void 0,this._materialProperty=void 0,this._shadowsProperty=void 0,this._distanceDisplayConditionProperty=void 0,this._classificationTypeProperty=void 0,this._depthFailMaterialProperty=void 0,this._geometryOptions=new rtt,this._groundGeometryOptions=new stt,this._id=`polyline-${e.id}`,this._clampToGround=!1,this._supportsPolylinesOnTerrain=jo.supportsPolylinesOnTerrain(t),this._zIndex=0,this._onEntityPropertyChanged(e,"polyline",e.polyline,void 0)}Object.defineProperties(Zh.prototype,{id:{get:function(){return this._id}},entity:{get:function(){return this._entity}},fillEnabled:{get:function(){return this._fillEnabled}},hasConstantFill:{get:function(){return!this._fillEnabled||!l(this._entity.availability)&&J.isConstant(this._showProperty)}},fillMaterialProperty:{get:function(){return this._materialProperty}},depthFailMaterialProperty:{get:function(){return this._depthFailMaterialProperty}},outlineEnabled:{value:!1},hasConstantOutline:{value:!0},outlineColorProperty:{value:void 0},shadowsProperty:{get:function(){return this._shadowsProperty}},distanceDisplayConditionProperty:{get:function(){return this._distanceDisplayConditionProperty}},classificationTypeProperty:{get:function(){return this._classificationTypeProperty}},isDynamic:{get:function(){return this._dynamic}},isClosed:{value:!1},geometryChanged:{get:function(){return this._geometryChanged}},arcType:{get:function(){return this._arcType}},clampToGround:{get:function(){return this._clampToGround&&this._supportsPolylinesOnTerrain}},zIndex:{get:function(){return this._zIndex}}});Zh.prototype.isOutlineVisible=function(e){return!1};Zh.prototype.isFilled=function(e){let t=this._entity;return(this._fillEnabled&&t.isAvailable(e)&&this._showProperty.getValue(e))??!1};Zh.prototype.createFillGeometryInstance=function(e){let t=this._entity,n=t.isAvailable(e),i=new xn(n&&t.isShowing&&this._showProperty.getValue(e)),o=this._distanceDisplayConditionProperty.getValue(e),r=kn.fromDistanceDisplayCondition(o),s={show:i,distanceDisplayCondition:r},a;return this._materialProperty instanceof Dt&&(l(this._materialProperty.color)&&(this._materialProperty.color.isConstant||n)&&(a=this._materialProperty.color.getValue(e,Lfe)),l(a)||(a=D.WHITE),s.color=Yt.fromColor(a)),this.clampToGround?new Et({id:t,geometry:new Px(this._groundGeometryOptions),attributes:s}):(l(this._depthFailMaterialProperty)&&this._depthFailMaterialProperty instanceof Dt&&(l(this._depthFailMaterialProperty.color)&&(this._depthFailMaterialProperty.color.isConstant||n)&&(a=this._depthFailMaterialProperty.color.getValue(e,Lfe)),l(a)||(a=D.WHITE),s.depthFailColor=Yt.fromColor(a)),new Et({id:t,geometry:new e0(this._geometryOptions),attributes:s}))};Zh.prototype.createOutlineGeometryInstance=function(e){};Zh.prototype.isDestroyed=function(){return!1};Zh.prototype.destroy=function(){this._entitySubscription(),me(this)};Zh.prototype._onEntityPropertyChanged=function(e,t,n,i){if(!(t==="availability"||t==="polyline"))return;let o=this._entity.polyline;if(!l(o)){this._fillEnabled&&(this._fillEnabled=!1,this._geometryChanged.raiseEvent(this));return}let r=o.positions,s=o.show;if(l(s)&&s.isConstant&&!s.getValue(Be.MINIMUM_VALUE)||!l(r)){this._fillEnabled&&(this._fillEnabled=!1,this._geometryChanged.raiseEvent(this));return}let a=o.zIndex,c=o.material??ett,d=c instanceof Dt;this._materialProperty=c,this._depthFailMaterialProperty=o.depthFailMaterial,this._showProperty=s??ttt,this._shadowsProperty=o.shadows??ntt,this._distanceDisplayConditionProperty=o.distanceDisplayCondition??itt,this._classificationTypeProperty=o.classificationType??ott,this._fillEnabled=!0,this._zIndex=a??$et;let u=o.width,h=o.arcType,p=o.clampToGround,g=o.granularity;if(!r.isConstant||!J.isConstant(u)||!J.isConstant(h)||!J.isConstant(g)||!J.isConstant(p)||!J.isConstant(a))this._dynamic||(this._dynamic=!0,this._geometryChanged.raiseEvent(this));else{let f=this._geometryOptions,y=r.getValue(Be.MINIMUM_VALUE,f.positions);if(!l(y)||y.length<2){this._fillEnabled&&(this._fillEnabled=!1,this._geometryChanged.raiseEvent(this));return}let x;d&&(!l(this._depthFailMaterialProperty)||this._depthFailMaterialProperty instanceof Dt)?x=jr.VERTEX_FORMAT:x=ha.VERTEX_FORMAT,f.vertexFormat=x,f.positions=y,f.width=l(u)?u.getValue(Be.MINIMUM_VALUE):void 0,f.arcType=l(h)?h.getValue(Be.MINIMUM_VALUE):void 0,f.granularity=l(g)?g.getValue(Be.MINIMUM_VALUE):void 0;let S=this._groundGeometryOptions;S.positions=y,S.width=f.width,S.arcType=f.arcType,S.granularity=f.granularity,this._clampToGround=l(p)?p.getValue(Be.MINIMUM_VALUE):!1,!this._clampToGround&&l(a)&&_t("Entity polylines must have clampToGround: true when using zIndex. zIndex will be ignored."),this._dynamic=!1,this._geometryChanged.raiseEvent(this)}};Zh.prototype.createDynamicUpdater=function(e,t){return new Fv(e,t,this)};var yV={positions:void 0,granularity:void 0,height:void 0,ellipsoid:void 0};function Fv(e,t,n){this._line=void 0,this._primitives=e,this._groundPrimitives=t,this._groundPolylinePrimitive=void 0,this._material=void 0,this._geometryUpdater=n,this._positions=[]}function Rfe(e){if(l(e._line))return e._line;let t=e._primitives,n=e._geometryUpdater._scene.id+t._guid,i=tU[n];!l(i)||i.isDestroyed()?(i=new lh,tU[n]=i,t.add(i)):t.contains(i)||t.add(i);let o=i.add();return o.id=e._geometryUpdater._entity,e._line=o,o}Fv.prototype.update=function(e){let t=this._geometryUpdater,n=t._entity,i=n.polyline,o=i.positions,r=J.getValueOrUndefined(o,e,this._positions);t._clampToGround=J.getValueOrDefault(i._clampToGround,e,!1),t._groundGeometryOptions.positions=r,t._groundGeometryOptions.width=J.getValueOrDefault(i._width,e,1),t._groundGeometryOptions.arcType=J.getValueOrDefault(i._arcType,e,en.GEODESIC),t._groundGeometryOptions.granularity=J.getValueOrDefault(i._granularity,e,9999);let s=this._groundPrimitives;if(l(this._groundPolylinePrimitive)&&(s.remove(this._groundPolylinePrimitive),this._groundPolylinePrimitive=void 0),t.clampToGround){if(!n.isShowing||!n.isAvailable(e)||!J.getValueOrDefault(i._show,e,!0)||!l(r)||r.length<2)return;let h=t.fillMaterialProperty,p;if(h instanceof Dt)p=new jr;else{let g=Qo.getValue(e,h,this._material);p=new ha({material:g,translucent:g.isTranslucent()}),this._material=g}this._groundPolylinePrimitive=s.add(new Am({geometryInstances:t.createFillGeometryInstance(e),appearance:p,classificationType:t.classificationTypeProperty.getValue(e),asynchronous:!1}),J.getValueOrUndefined(t.zIndex,e)),l(this._line)&&(this._line.show=!1);return}let a=Rfe(this);if(!n.isShowing||!n.isAvailable(e)||!J.getValueOrDefault(i._show,e,!0)){a.show=!1;return}if(!l(r)||r.length<2){a.show=!1;return}let c=en.GEODESIC;c=J.getValueOrDefault(i._arcType,e,c);let d=t._scene.globe,u=t._scene.ellipsoid;c!==en.NONE&&l(d)&&(yV.ellipsoid=u,yV.positions=r,yV.granularity=J.getValueOrUndefined(i._granularity,e),yV.height=Pi.extractHeights(r,u),c===en.GEODESIC?r=Pi.generateCartesianArc(yV):r=Pi.generateCartesianRhumbArc(yV)),a.show=!0,a.positions=r.slice(),a.material=Qo.getValue(e,t.fillMaterialProperty,a.material),a.width=J.getValueOrDefault(i._width,e,1),a.distanceDisplayCondition=J.getValueOrUndefined(i._distanceDisplayCondition,e,a.distanceDisplayCondition)};Fv.prototype.getBoundingSphere=function(e){if(this._geometryUpdater.clampToGround){let t=this._groundPolylinePrimitive;if(l(t)&&t.show&&t.ready){let n=t.getGeometryInstanceAttributes(this._geometryUpdater._entity);if(l(n)&&l(n.boundingSphere))return le.clone(n.boundingSphere,e),dt.DONE}return l(t)&&!t.ready?dt.PENDING:dt.DONE}else{let t=Rfe(this);if(t.show&&t.positions.length>0)return le.fromPoints(t.positions,e),dt.DONE}return dt.FAILED};Fv.prototype.isDestroyed=function(){return!1};Fv.prototype.destroy=function(){let t=this._geometryUpdater._scene.id+this._primitives._guid,n=tU[t];l(n)&&(n.remove(this._line),n.length===0&&(this._primitives.removeAndDestroy(n),delete tU[t])),l(this._groundPolylinePrimitive)&&this._groundPrimitives.remove(this._groundPolylinePrimitive),me(this)};var Av=Zh;var edi=_(T(),1);var att=new D,ctt=new wt,ltt=new wt;function Gh(e,t,n,i,o){let r;n instanceof Dt?r=jr:r=ha,this.orderedGroundPrimitives=e,this.classificationType=t,this.appearanceType=r,this.materialProperty=n,this.updaters=new Gt,this.createPrimitive=!0,this.primitive=void 0,this.oldPrimitive=void 0,this.geometry=new Gt,this.material=void 0,this.updatersWithAttributes=new Gt,this.attributes=new Gt,this.invalidated=!1,this.removeMaterialSubscription=n.definitionChanged.addEventListener(Gh.prototype.onMaterialChanged,this),this.subscriptions=new Gt,this.showsUpdated=new Gt,this.zIndex=i,this._asynchronous=o}Gh.prototype.onMaterialChanged=function(){this.invalidated=!0};Gh.prototype.isMaterial=function(e){let t=this.materialProperty,n=e.fillMaterialProperty;return n===t||n instanceof Dt&&t instanceof Dt?!0:l(t)&&t.equals(n)};Gh.prototype.add=function(e,t,n){let i=t.id;if(this.updaters.set(i,t),this.geometry.set(i,n),!t.hasConstantFill||!t.fillMaterialProperty.isConstant||!J.isConstant(t.distanceDisplayConditionProperty))this.updatersWithAttributes.set(i,t);else{let o=this;this.subscriptions.set(i,t.entity.definitionChanged.addEventListener(function(r,s,a,c){s==="isShowing"&&o.showsUpdated.set(t.id,t)}))}this.createPrimitive=!0};Gh.prototype.remove=function(e){let t=e.id;if(this.createPrimitive=this.geometry.remove(t)||this.createPrimitive,this.updaters.remove(t)){this.updatersWithAttributes.remove(t);let n=this.subscriptions.get(t);return l(n)&&(n(),this.subscriptions.remove(t)),!0}return!1};Gh.prototype.update=function(e){let t=!0,n=this.primitive,i=this.orderedGroundPrimitives,o=this.geometry.values,r;if(this.createPrimitive){if(o.length>0)l(n)&&(l(this.oldPrimitive)?i.remove(n):this.oldPrimitive=n),n=new Am({show:!1,asynchronous:this._asynchronous,geometryInstances:o.slice(),appearance:new this.appearanceType,classificationType:this.classificationType}),this.appearanceType===ha&&(this.material=Qo.getValue(e,this.materialProperty,this.material),n.appearance.material=this.material),i.add(n,this.zIndex),t=!1;else{l(n)&&(i.remove(n),n=void 0);let a=this.oldPrimitive;l(a)&&(i.remove(a),this.oldPrimitive=void 0)}this.attributes.removeAll(),this.primitive=n,this.createPrimitive=!1}else if(l(n)&&n.ready){n.show=!0,l(this.oldPrimitive)&&(i.remove(this.oldPrimitive),this.oldPrimitive=void 0),this.appearanceType===ha&&(this.material=Qo.getValue(e,this.materialProperty,this.material),this.primitive.appearance.material=this.material);let s=this.updatersWithAttributes.values,a=s.length;for(r=0;r<a;r++){let c=s[r],d=c.entity,u=this.geometry.get(c.id),h=this.attributes.get(u.id.id);if(l(h)||(h=n.getGeometryInstanceAttributes(u.id),this.attributes.set(u.id.id,h)),!c.fillMaterialProperty.isConstant){let y=c.fillMaterialProperty.color,x=J.getValueOrDefault(y,e,D.WHITE,att);D.equals(h._lastColor,x)||(h._lastColor=D.clone(x,h._lastColor),h.color=Yt.toValue(x,h.color))}let p=d.isShowing&&(c.hasConstantFill||c.isFilled(e)),g=h.show[0]===1;p!==g&&(h.show=xn.toValue(p,h.show));let f=c.distanceDisplayConditionProperty;if(!J.isConstant(f)){let y=J.getValueOrDefault(f,e,ltt,ctt);wt.equals(y,h._lastDistanceDisplayCondition)||(h._lastDistanceDisplayCondition=wt.clone(y,h._lastDistanceDisplayCondition),h.distanceDisplayCondition=kn.toValue(y,h.distanceDisplayCondition))}}this.updateShows(n)}else l(n)&&!n.ready&&(t=!1);return t};Gh.prototype.updateShows=function(e){let t=this.showsUpdated.values,n=t.length;for(let i=0;i<n;i++){let o=t[i],r=o.entity,s=this.geometry.get(o.id),a=this.attributes.get(s.id.id);l(a)||(a=e.getGeometryInstanceAttributes(s.id),this.attributes.set(s.id.id,a));let c=r.isShowing,d=a.show[0]===1;c!==d&&(a.show=xn.toValue(c,a.show),s.attributes.show.value[0]=a.show[0])}this.showsUpdated.removeAll()};Gh.prototype.contains=function(e){return this.updaters.contains(e.id)};Gh.prototype.getBoundingSphere=function(e,t){let n=this.primitive;if(!n.ready)return dt.PENDING;let i=n.getGeometryInstanceAttributes(e.entity);return!l(i)||!l(i.boundingSphere)||l(i.show)&&i.show[0]===0?dt.FAILED:(i.boundingSphere.clone(t),dt.DONE)};Gh.prototype.destroy=function(){let e=this.primitive,t=this.orderedGroundPrimitives;l(e)&&t.remove(e);let n=this.oldPrimitive;l(n)&&t.remove(n),this.removeMaterialSubscription()};function xV(e,t,n){this._items=[],this._orderedGroundPrimitives=e,this._classificationType=t,this._asynchronous=n??!0}xV.prototype.add=function(e,t){let n=this._items,i=n.length,o=t.createFillGeometryInstance(e),r=J.getValueOrDefault(t.zIndex,0);for(let a=0;a<i;++a){let c=n[a];if(c.isMaterial(t)&&c.zIndex===r){c.add(e,t,o);return}}let s=new Gh(this._orderedGroundPrimitives,this._classificationType,t.fillMaterialProperty,r,this._asynchronous);s.add(e,t,o),n.push(s)};xV.prototype.remove=function(e){let t=this._items,n=t.length;for(let i=n-1;i>=0;i--){let o=t[i];if(o.remove(e)){o.updaters.length===0&&(t.splice(i,1),o.destroy());break}}};xV.prototype.update=function(e){let t,n=this._items,i=n.length;for(t=i-1;t>=0;t--){let r=n[t];if(r.invalidated){n.splice(t,1);let s=r.updaters.values,a=s.length;for(let c=0;c<a;c++)this.add(e,s[c]);r.destroy()}}let o=!0;for(t=0;t<n.length;t++)o=n[t].update(e)&&o;return o};xV.prototype.getBoundingSphere=function(e,t){let n=this._items,i=n.length;for(let o=0;o<i;o++){let r=n[o];if(r.contains(e))return r.getBoundingSphere(e,t)}return dt.FAILED};xV.prototype.removeAllPrimitives=function(){let e=this._items,t=e.length;for(let n=0;n<t;n++)e[n].destroy();this._items.length=0};var Mv=xV;var dtt=[];function Zfe(e,t){let n=e._batches,i=n.length;for(let o=0;o<i;o++)n[o].remove(t)}function Gfe(e,t,n){if(n.isDynamic){e._dynamicBatch.add(t,n);return}if(n.clampToGround&&n.fillEnabled){let s=n.classificationTypeProperty.getValue(t);e._groundBatches[s].add(t,n);return}let i;n.fillEnabled&&(i=n.shadowsProperty.getValue(t));let o=0;l(n.depthFailMaterialProperty)&&(o=n.depthFailMaterialProperty instanceof Dt?1:2);let r;l(i)&&(r=i+o*_n.NUMBER_OF_SHADOW_MODES),n.fillEnabled&&(n.fillMaterialProperty instanceof Dt?e._colorBatches[r].add(t,n):e._materialBatches[r].add(t,n))}function Mf(e,t,n,i){i=i??e.groundPrimitives,n=n??e.primitives,this._scene=e,this._primitives=n,this._entityCollection=void 0,this._addedObjects=new Gt,this._removedObjects=new Gt,this._changedObjects=new Gt;let o,r=_n.NUMBER_OF_SHADOW_MODES;for(this._colorBatches=new Array(r*3),this._materialBatches=new Array(r*3),o=0;o<r;++o)this._colorBatches[o]=new im(n,jr,void 0,!1,o),this._materialBatches[o]=new om(n,ha,void 0,!1,o),this._colorBatches[o+r]=new im(n,jr,jr,!1,o),this._materialBatches[o+r]=new om(n,ha,jr,!1,o),this._colorBatches[o+r*2]=new im(n,jr,ha,!1,o),this._materialBatches[o+r*2]=new om(n,ha,ha,!1,o);this._dynamicBatch=new aT(n,i);let s=Un.NUMBER_OF_CLASSIFICATION_TYPES;for(this._groundBatches=new Array(s),o=0;o<s;++o)this._groundBatches[o]=new Mv(i,o);this._batches=this._colorBatches.concat(this._materialBatches,this._dynamicBatch,this._groundBatches),this._subscriptions=new Gt,this._updaters=new Gt,this._entityCollection=t,t.collectionChanged.addEventListener(Mf.prototype._onCollectionChanged,this),this._onCollectionChanged(t,t.values,dtt)}Mf.prototype.update=function(e){let t=this._addedObjects,n=t.values,i=this._removedObjects,o=i.values,r=this._changedObjects,s=r.values,a,c,d,u;for(a=s.length-1;a>-1;a--)c=s[a],d=c.id,u=this._updaters.get(d),u.entity===c?(Zfe(this,u),Gfe(this,e,u)):(o.push(c),n.push(c));for(a=o.length-1;a>-1;a--)c=o[a],d=c.id,u=this._updaters.get(d),Zfe(this,u),u.destroy(),this._updaters.remove(d),this._subscriptions.get(d)(),this._subscriptions.remove(d);for(a=n.length-1;a>-1;a--)c=n[a],d=c.id,u=new Av(c,this._scene),this._updaters.set(d,u),Gfe(this,e,u),this._subscriptions.set(d,u.geometryChanged.addEventListener(Mf._onGeometryChanged,this));t.removeAll(),i.removeAll(),r.removeAll();let h=!0,p=this._batches,g=p.length;for(a=0;a<g;a++)h=p[a].update(e)&&h;return h};var utt=[],mtt=new le;Mf.prototype.getBoundingSphere=function(e,t){let n=utt,i=mtt,o=0,r=dt.DONE,s=this._batches,a=s.length,c=this._updaters.get(e.id);for(let d=0;d<a;d++){if(r=s[d].getBoundingSphere(c,i),r===dt.PENDING)return dt.PENDING;r===dt.DONE&&(n[o]=le.clone(i,n[o]),o++)}return o===0?dt.FAILED:(n.length=o,le.fromBoundingSpheres(n,t),dt.DONE)};Mf.prototype.isDestroyed=function(){return!1};Mf.prototype.destroy=function(){this._entityCollection.collectionChanged.removeEventListener(Mf.prototype._onCollectionChanged,this),this._addedObjects.removeAll(),this._removedObjects.removeAll();let e,t=this._batches,n=t.length;for(e=0;e<n;e++)t[e].removeAllPrimitives();let i=this._subscriptions.values;for(n=i.length,e=0;e<n;e++)i[e]();return this._subscriptions.removeAll(),me(this)};Mf._onGeometryChanged=function(e){let t=this._removedObjects,n=this._changedObjects,i=e.entity,o=i.id;!l(t.get(o))&&!l(n.get(o))&&n.set(o,i)};Mf.prototype._onCollectionChanged=function(e,t,n){let i=this._addedObjects,o=this._removedObjects,r=this._changedObjects,s,a,c;for(s=n.length-1;s>-1;s--)c=n[s],a=c.id,i.remove(a)||(o.set(a,c),r.remove(a));for(s=t.length-1;s>-1;s--)c=t[s],a=c.id,o.remove(a)?r.set(a,c):i.set(a,c)};var Nv=Mf;function Jl(e){Dc.initializeTerrainHeights(),Am.initializeTerrainHeights();let t=e.scene,n=e.dataSourceCollection;this._eventHelper=new dr,this._eventHelper.add(n.dataSourceAdded,this._onDataSourceAdded,this),this._eventHelper.add(n.dataSourceRemoved,this._onDataSourceRemoved,this),this._eventHelper.add(n.dataSourceMoved,this._onDataSourceMoved,this),this._eventHelper.add(t.postRender,this._postRender,this),this._dataSourceCollection=n,this._scene=t,this._visualizersCallback=e.visualizersCallback??Jl.defaultVisualizersCallback;let i=!1,o=new ll,r=new ll;n.length>0&&(t.primitives.add(o),t.groundPrimitives.add(r),i=!0),this._primitives=o,this._groundPrimitives=r;for(let d=0,u=n.length;d<u;d++)this._onDataSourceAdded(n,n.get(d));let s=new D2;this._onDataSourceAdded(void 0,s),this._defaultDataSource=s;let a,c;if(!i){let d=this,u=function(){t.primitives.add(o),t.groundPrimitives.add(r),a(),c(),d._removeDefaultDataSourceListener=void 0,d._removeDataSourceCollectionListener=void 0};a=s.entities.collectionChanged.addEventListener(u),c=n.dataSourceAdded.addEventListener(u)}this._removeDefaultDataSourceListener=a,this._removeDataSourceCollectionListener=c,this._ready=!1}var _V=[];Jl.registerVisualizer=function(e){_V.includes(e)||_V.push(e)};Jl.unregisterVisualizer=function(e){if(_V.includes(e)){let t=_V.indexOf(e);_V.splice(t,1)}};Jl.defaultVisualizersCallback=function(e,t,n){let i=n.entities;return[new mE(t,i),new Gv(e,i,n._primitives,n._groundPrimitives),new Ev(t,i),new Iv(e,i),new Z2(e,i),new vv(t,i),new Wv(e,i),new Nv(e,i,n._primitives,n._groundPrimitives),..._V.map(o=>new o(e,i))]};Object.defineProperties(Jl.prototype,{scene:{get:function(){return this._scene}},dataSources:{get:function(){return this._dataSourceCollection}},defaultDataSource:{get:function(){return this._defaultDataSource}},ready:{get:function(){return this._ready}}});Jl.prototype.isDestroyed=function(){return!1};Jl.prototype.destroy=function(){this._eventHelper.removeAll();let e=this._dataSourceCollection;for(let t=0,n=e.length;t<n;++t)this._onDataSourceRemoved(this._dataSourceCollection,e.get(t));return this._onDataSourceRemoved(void 0,this._defaultDataSource),l(this._removeDefaultDataSourceListener)?(this._removeDefaultDataSourceListener(),this._removeDataSourceCollectionListener()):(this._scene.primitives.remove(this._primitives),this._scene.groundPrimitives.remove(this._groundPrimitives)),me(this)};Jl.prototype.update=function(e){if(!di.initialized)return this._ready=!1,!1;let t=!0,n,i,o,r,s=this._dataSourceCollection,a=s.length;for(n=0;n<a;n++){let c=s.get(n);for(l(c.update)&&(t=c.update(e)&&t),o=c._visualizers,r=o.length,i=0;i<r;i++)t=o[i].update(e)&&t}for(o=this._defaultDataSource._visualizers,r=o.length,i=0;i<r;i++)t=o[i].update(e)&&t;return!this._ready&&t&&this._scene.requestRender(),this._ready=this._ready||t,t};Jl.prototype._postRender=function(){let e=this._scene.frameState,t=this._dataSourceCollection,n=t.length;for(let i=0;i<n;i++){let o=t.get(i),r=o.credit;l(r)&&e.creditDisplay.addCreditToNextFrame(r);let s=o._resourceCredits;if(l(s)){let a=s.length;for(let c=0;c<a;c++)e.creditDisplay.addCreditToNextFrame(s[c])}}};var htt=[],ftt=new le;Jl.prototype.getBoundingSphere=function(e,t,n){if(!this._ready)return dt.PENDING;let i,o,r=this._defaultDataSource;if(!r.entities.contains(e)){r=void 0;let p=this._dataSourceCollection;for(o=p.length,i=0;i<o;i++){let g=p.get(i);if(g.entities.contains(e)){r=g;break}}}if(!l(r))return dt.FAILED;let s=htt,a=ftt,c=0,d=dt.DONE,u=r._visualizers,h=u.length;for(i=0;i<h;i++){let p=u[i];if(l(p.getBoundingSphere)){if(d=u[i].getBoundingSphere(e,a),!t&&d===dt.PENDING)return dt.PENDING;d===dt.DONE&&(s[c]=le.clone(a,s[c]),c++)}}return c===0?dt.FAILED:(s.length=c,le.fromBoundingSpheres(s,n),dt.DONE)};Jl.prototype._onDataSourceAdded=function(e,t){let n=this._scene,i=this._primitives,o=this._groundPrimitives,r=i.add(new ll),s=o.add(new iv);t._primitives=r,t._groundPrimitives=s;let a=t.clustering;a._initialize(n),r.add(a),t._visualizers=this._visualizersCallback(n,a,t)};Jl.prototype._onDataSourceRemoved=function(e,t){let n=this._primitives,i=this._groundPrimitives,o=t._primitives,r=t._groundPrimitives,s=t.clustering;o.remove(s);let a=t._visualizers,c=a.length;for(let d=0;d<c;d++)a[d].destroy();n.remove(o),i.remove(r),t._visualizers=void 0};Jl.prototype._onDataSourceMoved=function(e,t,n){let i=this._primitives,o=this._groundPrimitives,r=e._primitives,s=e._groundPrimitives;t===n+1?(i.raise(r),o.raise(s)):t===n-1?(i.lower(r),o.lower(s)):t===0?(i.lowerToBottom(r),o.lowerToBottom(s),i.raise(r),o.raise(s)):(i.raiseToTop(r),o.raiseToTop(s))};var kv=Jl;var nui=_(T(),1);var Udi=_(T(),1);function AJ(e,t,n){this.heading=e??0,this.pitch=t??0,this.range=n??0}AJ.clone=function(e,t){if(l(e))return l(t)||(t=new AJ),t.heading=e.heading,t.pitch=e.pitch,t.range=e.range,t};var sm=AJ;var Efe=new $,Ife=new $,Xfe=new $,ptt=new F,nU=new m,Wfe=new m,MJ=new m,NJ=new m,Pfe=new m,vfe=new m,btt=new ve,gtt=new m,ytt=new $,TV=new q,xtt=1.25;function _tt(e,t,n,i,o,r,s,a,c,d){let u=e.scene.mode,h=o.getValue(c,e._lastCartesian);if(l(h)){let p=!1,g=!1,f,y,x;if(u===oe.SCENE3D){q.addSeconds(c,.001,TV);let P=o.getValue(TV,nU);if(l(P)||(q.addSeconds(c,-.001,TV),P=o.getValue(TV,nU),g=!0),l(P)){let W=Pt.computeFixedToIcrfMatrix(c,Efe),v=Pt.computeFixedToIcrfMatrix(TV,Ife),A;!l(W)||!l(v)?(A=Pt.computeTemeToPseudoFixedMatrix(c,Xfe),W=$.transpose(A,Efe),v=Pt.computeTemeToPseudoFixedMatrix(TV,Ife),$.transpose(v,v)):A=$.transpose(W,Xfe);let b=$.multiplyByVector(W,h,Pfe),R=$.multiplyByVector(v,P,vfe);m.subtract(b,R,NJ);let G=m.magnitude(NJ)*1e3,I=X.GRAVITATIONALPARAMETER,w=-I/(G*G-2*I/m.magnitude(b));w<0||w>xtt*d.maximumRadius?(f=Wfe,m.normalize(h,f),m.negate(f,f),x=m.clone(m.UNIT_Z,MJ),y=m.cross(x,f,nU),m.magnitude(y)>X.EPSILON7&&(m.normalize(f,f),m.normalize(y,y),x=m.cross(f,y,MJ),m.normalize(x,x),p=!0)):m.equalsEpsilon(h,P,X.EPSILON7)||(x=Wfe,m.normalize(b,x),m.normalize(R,R),y=m.cross(x,R,MJ),g&&(y=m.multiplyByScalar(y,-1,y)),m.equalsEpsilon(y,m.ZERO,X.EPSILON7)||(f=m.cross(y,x,nU),$.multiplyByVector(A,f,f),$.multiplyByVector(A,y,y),$.multiplyByVector(A,x,x),m.normalize(f,f),m.normalize(y,y),m.normalize(x,x),p=!0))}}l(e.boundingSphere)&&(h=e.boundingSphere.center);let S,C,V;i&&(S=m.clone(t.position,NJ),C=m.clone(t.direction,Pfe),V=m.clone(t.up,vfe));let L=ptt,Z;l(s)&&(Z=s.getValue(c,btt));let E=r.getValue(c,gtt);if(a===wp.INERTIAL&&l(Z))F.fromTranslationQuaternionRotationScale(h,Z,m.ONE,L);else if(a===wp.VELOCITY&&l(E)){let P=Pt.rotationMatrixFromPositionVelocity(h,E,d,ytt);F.fromRotationTranslation(P,h,L)}else a===wp.ENU||!p?Pt.eastNorthUpToFixedFrame(h,d,L):(L[0]=f.x,L[1]=f.y,L[2]=f.z,L[3]=0,L[4]=y.x,L[5]=y.y,L[6]=y.z,L[7]=0,L[8]=x.x,L[9]=x.y,L[10]=x.z,L[11]=0,L[12]=h.x,L[13]=h.y,L[14]=h.z,L[15]=0);t._setTransform(L),i&&(m.clone(S,t.position),m.clone(C,t.direction),m.clone(V,t.up),m.cross(C,V,t.right))}if(n){let p=u===oe.SCENE2D||m.equals(e._offset3D,m.ZERO)?void 0:e._offset3D;t.lookAtTransform(t.transform,p)}}function Uv(e,t,n){this.entity=e,this.scene=t,this.ellipsoid=n??ne.default,this.boundingSphere=void 0,this._lastEntity=void 0,this._mode=void 0,this._lastCartesian=new m,this._defaultOffset3D=void 0,this._velocityProperty=new Kb(e.position,!0),this._offset3D=new m}Object.defineProperties(Uv,{defaultOffset3D:{get:function(){return this._defaultOffset3D},set:function(e){this._defaultOffset3D=m.clone(e,new m)}}});Uv.defaultOffset3D=new m(-14e3,3500,3500);var iU=new sm,Ttt=new m;Uv.prototype.update=function(e,t){let n=this.scene,i=this.ellipsoid,o=n.mode;if(o===oe.MORPHING)return;let r=this.entity,s=r.trackingReferenceFrame,a=r.position;if(!l(a))return;let c=this._velocityProperty,d=r.orientation,u=r!==this._lastEntity,h=o!==this._mode,p=n.camera,g=u||h,f=!0;if(u){let y=r.viewFrom,x=l(y);if(!x&&l(t)){iU.pitch=-X.PI_OVER_FOUR,iU.range=0;let S=a.getValue(e,Ttt);if(l(S)){let C=2-1/Math.max(1,m.magnitude(S)/i.maximumRadius);iU.pitch*=C}p.viewBoundingSphere(t,iU),this.boundingSphere=t,g=!1,f=!1}else(!x||!l(y.getValue(e,this._offset3D)))&&m.clone(Uv._defaultOffset3D,this._offset3D)}else!h&&this._mode!==oe.SCENE2D&&m.clone(p.position,this._offset3D);this._lastEntity=r,this._mode=o,_tt(this,p,g,f,a,c,d,s,e,i)};var Dv=Uv;var vmi=_(T(),1);var lui=_(T(),1);function Ov(){this._cache={}}Ov.prototype.fromColor=function(e,t){return oU(void 0,void 0,e,t,this._cache)};Ov.prototype.fromUrl=function(e,t,n){return oU(e,void 0,t,n,this._cache)};Ov.prototype.fromMakiIconId=function(e,t,n){return oU(nn(`Assets/Textures/maki/${encodeURIComponent(e)}.png`),void 0,t,n,this._cache)};Ov.prototype.fromText=function(e,t,n){return oU(void 0,e,t,n,this._cache)};var Stt=new D;function Ctt(e,t,n){e.save(),e.scale(n/24,n/24),e.fillStyle=t.toCssColorString(),e.strokeStyle=t.brighten(.6,Stt).toCssColorString(),e.lineWidth=.846,e.beginPath(),e.moveTo(6.72,.422),e.lineTo(17.28,.422),e.bezierCurveTo(18.553,.422,19.577,1.758,19.577,3.415),e.lineTo(19.577,10.973),e.bezierCurveTo(19.577,12.63,18.553,13.966,17.282,13.966),e.lineTo(14.386,14.008),e.lineTo(11.826,23.578),e.lineTo(9.614,14.008),e.lineTo(6.719,13.965),e.bezierCurveTo(5.446,13.983,4.422,12.629,4.422,10.972),e.lineTo(4.422,3.416),e.bezierCurveTo(4.423,1.76,5.447,.423,6.718,.423),e.closePath(),e.fill(),e.stroke(),e.restore()}function wfe(e,t,n){let i=n/2.5,o=i,r=i;t.width>t.height?r=i*(t.height/t.width):t.width<t.height&&(o=i*(t.width/t.height));let s=Math.round((n-o)/2),a=Math.round(7/24*n-r/2);e.globalCompositeOperation="destination-out",e.drawImage(t,s-1,a,o,r),e.drawImage(t,s,a-1,o,r),e.drawImage(t,s+1,a,o,r),e.drawImage(t,s,a+1,o,r),e.globalCompositeOperation="destination-over",e.fillStyle=D.BLACK.toCssColorString(),e.fillRect(s-1,a-1,o+2,r+2),e.globalCompositeOperation="destination-out",e.drawImage(t,s,a,o,r),e.globalCompositeOperation="destination-over",e.fillStyle=D.WHITE.toCssColorString(),e.fillRect(s-1,a-2,o+2,r+2)}var Bv=new Array(4);function oU(e,t,n,i,o){Bv[0]=e,Bv[1]=t,Bv[2]=n,Bv[3]=i;let r=JSON.stringify(Bv),s=o[r];if(l(s))return s;let a=document.createElement("canvas");a.width=i,a.height=i;let c=a.getContext("2d");if(Ctt(c,n,i),l(e)){let u=Ze.createIfNeeded(e).fetchImage().then(function(h){return wfe(c,h,i),o[r]=a,a});return o[r]=u,u}else if(l(t)){let d=v_(t,{font:`bold ${i}px sans-serif`});wfe(c,d,i)}return o[r]=a,a}var t0=Ov;var $ui=_(T());var gui=_(T());var fui=_(T());var uui=_(T());function kJ(e){return e}function rU(e){if(e==null)return kJ;var t,n,i=e.scale[0],o=e.scale[1],r=e.translate[0],s=e.translate[1];return function(a,c){c||(t=n=0);var d=2,u=a.length,h=new Array(u);for(h[0]=(t+=a[0])*i+r,h[1]=(n+=a[1])*o+s;d<u;)h[d]=a[d],++d;return h}}var Cui=_(T());var xui=_(T());function Ffe(e,t){for(var n,i=e.length,o=i-t;o<--i;)n=e[o],e[o++]=e[i],e[i]=n}function UJ(e,t){return typeof t=="string"&&(t=e.objects[t]),t.type==="GeometryCollection"?{type:"FeatureCollection",features:t.geometries.map(function(n){return Afe(e,n)})}:Afe(e,t)}function Afe(e,t){var n=t.id,i=t.bbox,o=t.properties==null?{}:t.properties,r=DJ(e,t);return n==null&&i==null?{type:"Feature",properties:o,geometry:r}:i==null?{type:"Feature",id:n,properties:o,geometry:r}:{type:"Feature",id:n,bbox:i,properties:o,geometry:r}}function DJ(e,t){var n=rU(e.transform),i=e.arcs;function o(u,h){h.length&&h.pop();for(var p=i[u<0?~u:u],g=0,f=p.length;g<f;++g)h.push(n(p[g],g));u<0&&Ffe(h,f)}function r(u){return n(u)}function s(u){for(var h=[],p=0,g=u.length;p<g;++p)o(u[p],h);return h.length<2&&h.push(h[0]),h}function a(u){for(var h=s(u);h.length<4;)h.push(h[0]);return h}function c(u){return u.map(a)}function d(u){var h=u.type,p;switch(h){case"GeometryCollection":return{type:h,geometries:u.geometries.map(d)};case"Point":p=r(u.coordinates);break;case"MultiPoint":p=u.coordinates.map(r);break;case"LineString":p=s(u.arcs);break;case"MultiLineString":p=u.arcs.map(s);break;case"Polygon":p=c(u.arcs);break;case"MultiPolygon":p=u.arcs.map(c);break;default:return null}return{type:h,coordinates:p}}return d(t)}var Eui=_(T());var Lui=_(T());var Pui=_(T());var Nui=_(T());var wui=_(T());var zui=_(T());var Dui=_(T());function sU(e){return m.fromDegrees(e[0],e[1],e[2])}var BJ={"urn:ogc:def:crs:OGC:1.3:CRS84":sU,"EPSG:4326":sU,"urn:ogc:def:crs:EPSG::4326":sU},Mfe={},Nfe={},OJ=48,YJ,zJ=D.ROYALBLUE,HJ=D.YELLOW,KJ=2,JJ=D.fromBytes(255,255,0,100),QJ=!1,Gtt={small:24,medium:48,large:64},Ett=["title","description","marker-size","marker-symbol","marker-color","stroke","stroke-opacity","stroke-width","fill","fill-opacity"];function kfe(e,t){let n="";for(let i in e)if(e.hasOwnProperty(i)){if(i===t||Ett.indexOf(i)!==-1)continue;let o=e[i];l(o)&&(typeof o=="object"?n+=`<tr><th>${i}</th><td>${kfe(o)}</td></tr>`:n+=`<tr><th>${i}</th><td>${o}</td></tr>`)}return n.length>0&&(n=`<table class="cesium-infoBox-defaultTable"><tbody>${n}</tbody></table>`),n}function Itt(e,t,n){let i;return function(o,r){return l(i)||(i=e(t,n)),i}}function Xtt(e,t){return new Dm(Itt(kfe,e,t),!0)}function aU(e,t,n){let i=e.id;if(!l(i)||e.type!=="Feature")i=zn();else{let s=2,a=i;for(;l(t.getById(a));)a=`${i}_${s}`,s++;i=a}let o=t.getOrCreateEntity(i),r=e.properties;if(l(r)){o.properties=r;let s,a=r.title;if(l(a))o.name=a,s="title";else{let d=Number.MAX_VALUE;for(let u in r)if(r.hasOwnProperty(u)&&r[u]){let h=u.toLowerCase();if(d>1&&h==="title"){d=1,s=u;break}else d>2&&h==="name"?(d=2,s=u):d>3&&/title/i.test(u)?(d=3,s=u):d>4&&/name/i.test(u)&&(d=4,s=u)}l(s)&&(o.name=r[s])}let c=r.description;c!==null&&(o.description=l(c)?new Qn(c):n(r,s))}return o}function jJ(e,t){let n=new Array(e.length);for(let i=0;i<e.length;i++)n[i]=t(e[i]);return n}var Ufe={Feature:Bfe,FeatureCollection:Wtt,GeometryCollection:Ofe,LineString:Jfe,MultiLineString:Qfe,MultiPoint:Hfe,MultiPolygon:$fe,Point:zfe,Polygon:qfe,Topology:epe},Dfe={GeometryCollection:Ofe,LineString:Jfe,MultiLineString:Qfe,MultiPoint:Hfe,MultiPolygon:$fe,Point:zfe,Polygon:qfe,Topology:epe};function Bfe(e,t,n,i,o){if(t.geometry===null){aU(t,e._entityCollection,o.describe);return}if(!l(t.geometry))throw new ae("feature.geometry is required.");let r=t.geometry.type,s=Dfe[r];if(!l(s))throw new ae(`Unknown geometry type: ${r}`);s(e,t,t.geometry,i,o)}function Wtt(e,t,n,i,o){let r=t.features;for(let s=0,a=r.length;s<a;s++)Bfe(e,r[s],void 0,i,o)}function Ofe(e,t,n,i,o){let r=n.geometries;for(let s=0,a=r.length;s<a;s++){let c=r[s],d=c.type,u=Dfe[d];if(!l(u))throw new ae(`Unknown geometry type: ${d}`);u(e,t,c,i,o)}}function Yfe(e,t,n,i,o){let r=o.markerSymbol,s=o.markerColor,a=o.markerSize,c=t.properties;if(l(c)){let g=c["marker-color"];l(g)&&(s=D.fromCssColorString(g)),a=Gtt[c["marker-size"]]??a;let f=c["marker-symbol"];l(f)&&(r=f)}let d;l(r)?r.length===1?d=e._pinBuilder.fromText(r.toUpperCase(),s,a):d=e._pinBuilder.fromMakiIconId(r,s,a):d=e._pinBuilder.fromColor(s,a);let u=new ac;u.verticalOrigin=new Qn(An.BOTTOM),i.length===2&&o.clampToGround&&(u.heightReference=Je.CLAMP_TO_GROUND);let h=aU(t,e._entityCollection,o.describe);h.billboard=u,h.position=new Oc(n(i));let p=Promise.resolve(d).then(function(g){u.image=new Qn(g)}).catch(function(){u.image=new Qn(e._pinBuilder.fromColor(s,a))});e._promises.push(p)}function zfe(e,t,n,i,o){Yfe(e,t,i,n.coordinates,o)}function Hfe(e,t,n,i,o){let r=n.coordinates;for(let s=0;s<r.length;s++)Yfe(e,t,i,r[s],o)}function Kfe(e,t,n,i,o){let r=o.strokeMaterialProperty,s=o.strokeWidthProperty,a=t.properties;if(l(a)){let u=a["stroke-width"];l(u)&&(s=new Qn(u));let h,p=a.stroke;l(p)&&(h=D.fromCssColorString(p));let g=a["stroke-opacity"];l(g)&&g!==1&&(l(h)||(h=r.color.getValue().clone()),h.alpha=g),l(h)&&(r=new Dt(h))}let c=aU(t,e._entityCollection,o.describe),d=new dc;c.polyline=d,d.clampToGround=o.clampToGround,d.material=r,d.width=s,d.positions=new Qn(jJ(i,n)),d.arcType=en.RHUMB}function Jfe(e,t,n,i,o){Kfe(e,t,i,n.coordinates,o)}function Qfe(e,t,n,i,o){let r=n.coordinates;for(let s=0;s<r.length;s++)Kfe(e,t,i,r[s],o)}function jfe(e,t,n,i,o){if(i.length===0||i[0].length===0)return;let r=o.strokeMaterialProperty.color,s=o.fillMaterialProperty,a=o.strokeWidthProperty,c=t.properties;if(l(c)){let g=c["stroke-width"];l(g)&&(a=new Qn(g));let f,y=c.stroke;l(y)&&(f=D.fromCssColorString(y));let x=c["stroke-opacity"];l(x)&&x!==1&&(l(f)||(f=r.getValue().clone()),f.alpha=x),l(f)&&(r=new Qn(f));let S,C=c.fill,V=s.color.getValue();l(C)&&(S=D.fromCssColorString(C),S.alpha=V.alpha),x=c["fill-opacity"],l(x)&&x!==V.alpha&&(l(S)||(S=V.clone()),S.alpha=x),l(S)&&(s=new Dt(S))}let d=new km;d.outline=new Qn(!0),d.outlineColor=r,d.outlineWidth=a,d.material=s,d.arcType=en.RHUMB;let u=[];for(let g=1,f=i.length;g<f;g++)u.push(new Fa(jJ(i[g],n)));let h=i[0];d.hierarchy=new Qn(new Fa(jJ(h,n),u)),h[0].length>2?d.perPositionHeight=new Qn(!0):o.clampToGround||(d.height=0);let p=aU(t,e._entityCollection,o.describe);p.polygon=d}function qfe(e,t,n,i,o){jfe(e,t,i,n.coordinates,o)}function $fe(e,t,n,i,o){let r=n.coordinates;for(let s=0;s<r.length;s++)jfe(e,t,i,r[s],o)}function epe(e,t,n,i,o){for(let r in n.objects)if(n.objects.hasOwnProperty(r)){let s=UJ(n,n.objects[r]),a=Ufe[s.type];a(e,s,s,i,o)}}function ay(e){this._name=e,this._changed=new be,this._error=new be,this._isLoading=!1,this._loading=new be,this._entityCollection=new Qs(this),this._promises=[],this._pinBuilder=new t0,this._entityCluster=new vd,this._credit=void 0,this._resourceCredits=[]}ay.load=function(e,t){return new ay().load(e,t)};Object.defineProperties(ay,{markerSize:{get:function(){return OJ},set:function(e){OJ=e}},markerSymbol:{get:function(){return YJ},set:function(e){YJ=e}},markerColor:{get:function(){return zJ},set:function(e){zJ=e}},stroke:{get:function(){return HJ},set:function(e){HJ=e}},strokeWidth:{get:function(){return KJ},set:function(e){KJ=e}},fill:{get:function(){return JJ},set:function(e){JJ=e}},clampToGround:{get:function(){return QJ},set:function(e){QJ=e}},crsNames:{get:function(){return BJ}},crsLinkHrefs:{get:function(){return Mfe}},crsLinkTypes:{get:function(){return Nfe}}});Object.defineProperties(ay.prototype,{name:{get:function(){return this._name},set:function(e){this._name!==e&&(this._name=e,this._changed.raiseEvent(this))}},clock:{value:void 0,writable:!1},entities:{get:function(){return this._entityCollection}},isLoading:{get:function(){return this._isLoading}},changedEvent:{get:function(){return this._changed}},errorEvent:{get:function(){return this._error}},loadingEvent:{get:function(){return this._loading}},show:{get:function(){return this._entityCollection.show},set:function(e){this._entityCollection.show=e}},clustering:{get:function(){return this._entityCluster},set:function(e){this._entityCluster=e}},credit:{get:function(){return this._credit}}});ay.prototype.load=function(e,t){return tpe(this,e,t,!0)};ay.prototype.process=function(e,t){return tpe(this,e,t,!1)};function tpe(e,t,n,i){Br.setLoading(e,!0),n=n??Y.EMPTY_OBJECT;let o=n.credit;typeof o=="string"&&(o=new Ct(o)),e._credit=o;let r=t,s=n.sourceUri;if(typeof t=="string"||t instanceof Ze){t=Ze.createIfNeeded(t),r=t.fetchJson(),s=s??t.getUrlComponent();let a=e._resourceCredits,c=t.credits;if(l(c)){let d=c.length;for(let u=0;u<d;u++)a.push(c[u])}}return n={describe:n.describe??Xtt,markerSize:n.markerSize??OJ,markerSymbol:n.markerSymbol??YJ,markerColor:n.markerColor??zJ,strokeWidthProperty:new Qn(n.strokeWidth??KJ),strokeMaterialProperty:new Dt(n.stroke??HJ),fillMaterialProperty:new Dt(n.fill??JJ),clampToGround:n.clampToGround??QJ},Promise.resolve(r).then(function(a){return Ptt(e,a,n,s,i)}).catch(function(a){throw Br.setLoading(e,!1),e._error.raiseEvent(e,a),a})}ay.prototype.update=function(e){return!0};function Ptt(e,t,n,i,o){let r;l(i)&&(r=Db(i)),l(r)&&e._name!==r&&(e._name=r,e._changed.raiseEvent(e));let s=Ufe[t.type];if(!l(s))throw new ae(`Unsupported GeoJSON object type: ${t.type}`);let a=t.crs,c=a!==null?sU:null;if(l(a)){if(!l(a.properties))throw new ae("crs.properties is undefined.");let d=a.properties;if(a.type==="name"){if(c=BJ[d.name],!l(c))throw new ae(`Unknown crs name: ${d.name}`)}else if(a.type==="link"){let u=Mfe[d.href];if(l(u)||(u=Nfe[d.type]),!l(u))throw new ae(`Unable to resolve crs link: ${JSON.stringify(d)}`);c=u(d)}else if(a.type==="EPSG"){if(c=BJ[`EPSG:${d.code}`],!l(c))throw new ae(`Unknown crs EPSG code: ${d.code}`)}else throw new ae(`Unknown crs type: ${a.type}`)}return Promise.resolve(c).then(function(d){return o&&e._entityCollection.removeAll(),d!==null&&s(e,t,t,d,n),Promise.all(e._promises).then(function(){return e._promises.length=0,Br.setLoading(e,!1),e})})}var cy=ay;var Vpi=_(T(),1);var Mfi=_(T());var Sfi=_(T());var Fmi=_(T()),npe="4.1.0";var Mmi=_(T());function vtt(e){return e===void 0}function Bd(e){return typeof e=="boolean"}function ipe(e,t){for(var n in t)t.hasOwnProperty(n)&&vtt(e[n])&&(e[n]=t[n]);return e}function ope(e,t,n){var i;return e.length>t&&(n==null?(n="…",i=3):i=n.length,e=e.substring(0,t-i)+n),e}function Yo(e,t){for(var n=e.length-1;n>=0;n--)e[n]===t&&e.splice(n,1)}function ly(e,t){for(var n=e.length-1;n>=0;n--)t(e[n])===!0&&e.splice(n,1)}function Nf(e){throw new Error("Unhandled case for value: '".concat(e,"'"))}var ihi=_(T());var Omi=_(T());var Umi=_(T()),dy=/[A-Za-z]/,qs=/[\d]/;var Od=/\s/,cU=/['"]/,rpe=/[\x00-\x1F\x7F]/,spe=/A-Za-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC/.source,wtt=/\u2700-\u27bf\udde6-\uddff\ud800-\udbff\udc00-\udfff\ufe0e\ufe0f\u0300-\u036f\ufe20-\ufe23\u20d0-\u20f0\ud83c\udffb-\udfff\u200d\u3299\u3297\u303d\u3030\u24c2\ud83c\udd70-\udd71\udd7e-\udd7f\udd8e\udd91-\udd9a\udde6-\uddff\ude01-\ude02\ude1a\ude2f\ude32-\ude3a\ude50-\ude51\u203c\u2049\u25aa-\u25ab\u25b6\u25c0\u25fb-\u25fe\u00a9\u00ae\u2122\u2139\udc04\u2600-\u26FF\u2b05\u2b06\u2b07\u2b1b\u2b1c\u2b50\u2b55\u231a\u231b\u2328\u23cf\u23e9-\u23f3\u23f8-\u23fa\udccf\u2935\u2934\u2190-\u21ff/.source,Ftt=/\u0300-\u036F\u0483-\u0489\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u0610-\u061A\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED\u0711\u0730-\u074A\u07A6-\u07B0\u07EB-\u07F3\u0816-\u0819\u081B-\u0823\u0825-\u0827\u0829-\u082D\u0859-\u085B\u08D4-\u08E1\u08E3-\u0903\u093A-\u093C\u093E-\u094F\u0951-\u0957\u0962\u0963\u0981-\u0983\u09BC\u09BE-\u09C4\u09C7\u09C8\u09CB-\u09CD\u09D7\u09E2\u09E3\u0A01-\u0A03\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A70\u0A71\u0A75\u0A81-\u0A83\u0ABC\u0ABE-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AE2\u0AE3\u0B01-\u0B03\u0B3C\u0B3E-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B62\u0B63\u0B82\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD7\u0C00-\u0C03\u0C3E-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C62\u0C63\u0C81-\u0C83\u0CBC\u0CBE-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CE2\u0CE3\u0D01-\u0D03\u0D3E-\u0D44\u0D46-\u0D48\u0D4A-\u0D4D\u0D57\u0D62\u0D63\u0D82\u0D83\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DF2\u0DF3\u0E31\u0E34-\u0E3A\u0E47-\u0E4E\u0EB1\u0EB4-\u0EB9\u0EBB\u0EBC\u0EC8-\u0ECD\u0F18\u0F19\u0F35\u0F37\u0F39\u0F3E\u0F3F\u0F71-\u0F84\u0F86\u0F87\u0F8D-\u0F97\u0F99-\u0FBC\u0FC6\u102B-\u103E\u1056-\u1059\u105E-\u1060\u1062-\u1064\u1067-\u106D\u1071-\u1074\u1082-\u108D\u108F\u109A-\u109D\u135D-\u135F\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17B4-\u17D3\u17DD\u180B-\u180D\u1885\u1886\u18A9\u1920-\u192B\u1930-\u193B\u1A17-\u1A1B\u1A55-\u1A5E\u1A60-\u1A7C\u1A7F\u1AB0-\u1ABE\u1B00-\u1B04\u1B34-\u1B44\u1B6B-\u1B73\u1B80-\u1B82\u1BA1-\u1BAD\u1BE6-\u1BF3\u1C24-\u1C37\u1CD0-\u1CD2\u1CD4-\u1CE8\u1CED\u1CF2-\u1CF4\u1CF8\u1CF9\u1DC0-\u1DF5\u1DFB-\u1DFF\u20D0-\u20F0\u2CEF-\u2CF1\u2D7F\u2DE0-\u2DFF\u302A-\u302F\u3099\u309A\uA66F-\uA672\uA674-\uA67D\uA69E\uA69F\uA6F0\uA6F1\uA802\uA806\uA80B\uA823-\uA827\uA880\uA881\uA8B4-\uA8C5\uA8E0-\uA8F1\uA926-\uA92D\uA947-\uA953\uA980-\uA983\uA9B3-\uA9C0\uA9E5\uAA29-\uAA36\uAA43\uAA4C\uAA4D\uAA7B-\uAA7D\uAAB0\uAAB2-\uAAB4\uAAB7\uAAB8\uAABE\uAABF\uAAC1\uAAEB-\uAAEF\uAAF5\uAAF6\uABE3-\uABEA\uABEC\uABED\uFB1E\uFE00-\uFE0F\uFE20-\uFE2F/.source,Att=spe+wtt+Ftt,ape=/0-9\u0660-\u0669\u06F0-\u06F9\u07C0-\u07C9\u0966-\u096F\u09E6-\u09EF\u0A66-\u0A6F\u0AE6-\u0AEF\u0B66-\u0B6F\u0BE6-\u0BEF\u0C66-\u0C6F\u0CE6-\u0CEF\u0D66-\u0D6F\u0DE6-\u0DEF\u0E50-\u0E59\u0ED0-\u0ED9\u0F20-\u0F29\u1040-\u1049\u1090-\u1099\u17E0-\u17E9\u1810-\u1819\u1946-\u194F\u19D0-\u19D9\u1A80-\u1A89\u1A90-\u1A99\u1B50-\u1B59\u1BB0-\u1BB9\u1C40-\u1C49\u1C50-\u1C59\uA620-\uA629\uA8D0-\uA8D9\uA900-\uA909\uA9D0-\uA9D9\uA9F0-\uA9F9\uAA50-\uAA59\uABF0-\uABF9\uFF10-\uFF19/.source,Nmi=new RegExp("[".concat(spe+ape,"]")),qJ=Att+ape,Eh=new RegExp("[".concat(qJ,"]"));var lU=function(){function e(t){t===void 0&&(t={}),this.tagName="",this.attrs={},this.innerHTML="",this.tagName=t.tagName||"",this.attrs=t.attrs||{},this.innerHTML=t.innerHtml||t.innerHTML||""}return e.prototype.setTagName=function(t){return this.tagName=t,this},e.prototype.getTagName=function(){return this.tagName||""},e.prototype.setAttr=function(t,n){var i=this.getAttrs();return i[t]=n,this},e.prototype.getAttr=function(t){return this.getAttrs()[t]},e.prototype.setAttrs=function(t){return Object.assign(this.getAttrs(),t),this},e.prototype.getAttrs=function(){return this.attrs||(this.attrs={})},e.prototype.setClass=function(t){return this.setAttr("class",t)},e.prototype.addClass=function(t){for(var n=this.getClass(),i=n?n.split(Od):[],o=t.split(Od),r;r=o.shift();)i.indexOf(r)===-1&&i.push(r);return this.getAttrs().class=i.join(" "),this},e.prototype.removeClass=function(t){for(var n=this.getClass(),i=n?n.split(Od):[],o=t.split(Od),r;i.length&&(r=o.shift());){var s=i.indexOf(r);s!==-1&&i.splice(s,1)}return this.getAttrs().class=i.join(" "),this},e.prototype.getClass=function(){return this.getAttrs().class||""},e.prototype.hasClass=function(t){return(" "+this.getClass()+" ").indexOf(" "+t+" ")!==-1},e.prototype.setInnerHTML=function(t){return this.innerHTML=t,this},e.prototype.setInnerHtml=function(t){return this.setInnerHTML(t)},e.prototype.getInnerHTML=function(){return this.innerHTML||""},e.prototype.getInnerHtml=function(){return this.getInnerHTML()},e.prototype.toAnchorString=function(){var t=this.getTagName(),n=this.buildAttrsStr();return n=n?" "+n:"",["<",t,n,">",this.getInnerHtml(),"</",t,">"].join("")},e.prototype.buildAttrsStr=function(){if(!this.attrs)return"";var t=this.getAttrs(),n=[];for(var i in t)t.hasOwnProperty(i)&&n.push(i+'="'+t[i]+'"');return n.join(" ")},e}();var zmi=_(T());function cpe(e,t,n){var i,o;n==null?(n="…",o=3,i=8):(o=n.length,i=n.length);var r=function(C){var V={},L=C,Z=L.match(/^([a-z]+):\/\//i);return Z&&(V.scheme=Z[1],L=L.substr(Z[0].length)),Z=L.match(/^(.*?)(?=(\?|#|\/|$))/i),Z&&(V.host=Z[1],L=L.substr(Z[0].length)),Z=L.match(/^\/(.*?)(?=(\?|#|$))/i),Z&&(V.path=Z[1],L=L.substr(Z[0].length)),Z=L.match(/^\?(.*?)(?=(#|$))/i),Z&&(V.query=Z[1],L=L.substr(Z[0].length)),Z=L.match(/^#(.*?)$/i),Z&&(V.fragment=Z[1]),V},s=function(C){var V="";return C.scheme&&C.host&&(V+=C.scheme+"://"),C.host&&(V+=C.host),C.path&&(V+="/"+C.path),C.query&&(V+="?"+C.query),C.fragment&&(V+="#"+C.fragment),V},a=function(C,V){var L=V/2,Z=Math.ceil(L),E=-1*Math.floor(L),P="";return E<0&&(P=C.substr(E)),C.substr(0,Z)+n+P};if(e.length<=t)return e;var c=t-o,d=r(e);if(d.query){var u=d.query.match(/^(.*?)(?=(\?|\#))(.*?)$/i);u&&(d.query=d.query.substr(0,u[1].length),e=s(d))}if(e.length<=t||(d.host&&(d.host=d.host.replace(/^www\./,""),e=s(d)),e.length<=t))return e;var h="";if(d.host&&(h+=d.host),h.length>=c)return d.host.length==t?(d.host.substr(0,t-o)+n).substr(0,c+i):a(h,c).substr(0,c+i);var p="";if(d.path&&(p+="/"+d.path),d.query&&(p+="?"+d.query),p)if((h+p).length>=c){if((h+p).length==t)return(h+p).substr(0,t);var g=c-h.length;return(h+a(p,g)).substr(0,c+i)}else h+=p;if(d.fragment){var f="#"+d.fragment;if((h+f).length>=c){if((h+f).length==t)return(h+f).substr(0,t);var y=c-h.length;return(h+a(f,y)).substr(0,c+i)}else h+=f}if(d.scheme&&d.host){var x=d.scheme+"://";if((h+x).length<c)return(x+h).substr(0,t)}if(h.length<=t)return h;var S="";return c>0&&(S=h.substr(-1*Math.floor(c/2))),(h.substr(0,Math.ceil(c/2))+n+S).substr(0,c+i)}var Kmi=_(T());function lpe(e,t,n){if(e.length<=t)return e;var i,o;n==null?(n="…",i=8,o=3):(i=n.length,o=n.length);var r=t-o,s="";return r>0&&(s=e.substr(-1*Math.floor(r/2))),(e.substr(0,Math.ceil(r/2))+n+s).substr(0,r+i)}var jmi=_(T());function dpe(e,t,n){return ope(e,t,n)}var upe=function(){function e(t){t===void 0&&(t={}),this.newWindow=!1,this.truncate={},this.className="",this.newWindow=t.newWindow||!1,this.truncate=t.truncate||{},this.className=t.className||""}return e.prototype.build=function(t){return new lU({tagName:"a",attrs:this.createAttrs(t),innerHtml:this.processAnchorText(t.getAnchorText())})},e.prototype.createAttrs=function(t){var n={href:t.getAnchorHref()},i=this.createCssClass(t);return i&&(n.class=i),this.newWindow&&(n.target="_blank",n.rel="noopener noreferrer"),this.truncate&&this.truncate.length&&this.truncate.length<t.getAnchorText().length&&(n.title=t.getAnchorHref()),n},e.prototype.createCssClass=function(t){var n=this.className;if(n){for(var i=[n],o=t.getCssClassSuffixes(),r=0,s=o.length;r<s;r++)i.push(n+"-"+o[r]);return i.join(" ")}else return""},e.prototype.processAnchorText=function(t){return t=this.doTruncate(t),t},e.prototype.doTruncate=function(t){var n=this.truncate;if(!n||!n.length)return t;var i=n.length,o=n.location;return o==="smart"?cpe(t,i):o==="middle"?lpe(t,i):dpe(t,i)},e}();var afi=_(T());var yhi=_(T());var rhi=_(T(),1),$J=function(e,t){return $J=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,i){n.__proto__=i}||function(n,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(n[o]=i[o])},$J(e,t)};function kf(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");$J(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}var $s=function(){return $s=Object.assign||function(t){for(var n,i=1,o=arguments.length;i<o;i++){n=arguments[i];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},$s.apply(this,arguments)};var ahi=_(T()),Uf=function(){function e(t){this._=null,this.matchedText="",this.offset=0,this.tagBuilder=t.tagBuilder,this.matchedText=t.matchedText,this.offset=t.offset}return e.prototype.getMatchedText=function(){return this.matchedText},e.prototype.setOffset=function(t){this.offset=t},e.prototype.getOffset=function(){return this.offset},e.prototype.getCssClassSuffixes=function(){return[this.type]},e.prototype.buildTag=function(){return this.tagBuilder.build(this)},e}();var hhi=_(T());var lhi=_(T()),Mtt="(?:xn--vermgensberatung-pwb|xn--vermgensberater-ctb|xn--clchc0ea0b2g2a9gcd|xn--w4r85el8fhu5dnra|travelersinsurance|verm\xF6gensberatung|xn--5su34j936bgsg|xn--bck1b9a5dre4c|xn--mgbah1a3hjkrd|xn--mgbai9azgqp6j|xn--mgberp4a5d4ar|xn--xkc2dl3a5ee0h|verm\xF6gensberater|xn--fzys8d69uvgm|xn--mgba7c0bbn0a|xn--mgbcpq6gpa1a|xn--xkc2al3hye2a|americanexpress|kerryproperties|sandvikcoromant|xn--i1b6b1a6a2e|xn--kcrx77d1x4a|xn--lgbbat1ad8j|xn--mgba3a4f16a|xn--mgbc0a9azcg|xn--nqv7fs00ema|americanfamily|kerrylogistics|weatherchannel|xn--54b7fta0cc|xn--6qq986b3xl|xn--80aqecdr1a|xn--b4w605ferd|xn--fiq228c5hs|xn--h2breg3eve|xn--jlq480n2rg|xn--mgba3a3ejt|xn--mgbaam7a8h|xn--mgbayh7gpa|xn--mgbbh1a71e|xn--mgbca7dzdo|xn--mgbi4ecexp|xn--mgbx4cd0ab|xn--rvc1e0am3e|international|lifeinsurance|wolterskluwer|xn--cckwcxetd|xn--eckvdtc9d|xn--fpcrj9c3d|xn--fzc2c9e2c|xn--h2brj9c8c|xn--tiq49xqyj|xn--yfro4i67o|xn--ygbi2ammx|construction|lplfinancial|scholarships|versicherung|xn--3e0b707e|xn--45br5cyl|xn--4dbrk0ce|xn--80adxhks|xn--80asehdb|xn--8y0a063a|xn--gckr3f0f|xn--mgb9awbf|xn--mgbab2bd|xn--mgbgu82a|xn--mgbpl2fh|xn--mgbt3dhd|xn--mk1bu44c|xn--ngbc5azd|xn--ngbe9e0a|xn--ogbpf8fl|xn--qcka1pmc|accountants|barclaycard|blackfriday|blockbuster|bridgestone|calvinklein|contractors|creditunion|engineering|enterprises|investments|kerryhotels|lamborghini|motorcycles|olayangroup|photography|playstation|productions|progressive|redumbrella|williamhill|xn--11b4c3d|xn--1ck2e1b|xn--1qqw23a|xn--2scrj9c|xn--3bst00m|xn--3ds443g|xn--3hcrj9c|xn--42c2d9a|xn--45brj9c|xn--55qw42g|xn--6frz82g|xn--80ao21a|xn--9krt00a|xn--cck2b3b|xn--czr694b|xn--d1acj3b|xn--efvy88h|xn--fct429k|xn--fjq720a|xn--flw351e|xn--g2xx48c|xn--gecrj9c|xn--gk3at1e|xn--h2brj9c|xn--hxt814e|xn--imr513n|xn--j6w193g|xn--jvr189m|xn--kprw13d|xn--kpry57d|xn--mgbbh1a|xn--mgbtx2b|xn--mix891f|xn--nyqy26a|xn--otu796d|xn--pgbs0dh|xn--q9jyb4c|xn--rhqv96g|xn--rovu88b|xn--s9brj9c|xn--ses554g|xn--t60b56a|xn--vuq861b|xn--w4rs40l|xn--xhq521b|xn--zfr164b|\u0B9A\u0BBF\u0B99\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0BC2\u0BB0\u0BCD|accountant|apartments|associates|basketball|bnpparibas|boehringer|capitalone|consulting|creditcard|cuisinella|eurovision|extraspace|foundation|healthcare|immobilien|industries|management|mitsubishi|nextdirect|properties|protection|prudential|realestate|republican|restaurant|schaeffler|tatamotors|technology|university|vlaanderen|xn--30rr7y|xn--3pxu8k|xn--45q11c|xn--4gbrim|xn--55qx5d|xn--5tzm5g|xn--80aswg|xn--90a3ac|xn--9dbq2a|xn--9et52u|xn--c2br7g|xn--cg4bki|xn--czrs0t|xn--czru2d|xn--fiq64b|xn--fiqs8s|xn--fiqz9s|xn--io0a7i|xn--kput3i|xn--mxtq1m|xn--o3cw4h|xn--pssy2u|xn--q7ce6a|xn--unup4y|xn--wgbh1c|xn--wgbl6a|xn--y9a3aq|accenture|allfinanz|amsterdam|analytics|aquarelle|barcelona|bloomberg|christmas|community|directory|education|equipment|fairwinds|financial|firestone|fresenius|furniture|goldpoint|hisamitsu|homedepot|homegoods|homesense|institute|insurance|kuokgroup|lancaster|landrover|lifestyle|marketing|marshalls|melbourne|microsoft|panasonic|pramerica|richardli|shangrila|solutions|statebank|statefarm|stockholm|travelers|vacations|xn--90ais|xn--c1avg|xn--d1alf|xn--e1a4c|xn--fhbei|xn--j1aef|xn--j1amh|xn--l1acc|xn--ngbrx|xn--nqv7f|xn--p1acf|xn--qxa6a|xn--tckwe|xn--vhquv|yodobashi|\u0645\u0648\u0631\u064A\u062A\u0627\u0646\u064A\u0627|abudhabi|airforce|allstate|attorney|barclays|barefoot|bargains|baseball|boutique|bradesco|broadway|brussels|builders|business|capetown|catering|catholic|cipriani|cleaning|clinique|clothing|commbank|computer|delivery|deloitte|democrat|diamonds|discount|discover|download|engineer|ericsson|exchange|feedback|fidelity|firmdale|football|frontier|goodyear|grainger|graphics|hdfcbank|helsinki|holdings|hospital|infiniti|ipiranga|istanbul|jpmorgan|lighting|lundbeck|marriott|mckinsey|memorial|merckmsd|mortgage|observer|partners|pharmacy|pictures|plumbing|property|redstone|reliance|saarland|samsclub|security|services|shopping|softbank|software|stcgroup|supplies|training|vanguard|ventures|verisign|woodside|xn--90ae|xn--node|xn--p1ai|xn--qxam|yokohama|\u0627\u0644\u0633\u0639\u0648\u062F\u064A\u0629|abogado|academy|agakhan|alibaba|android|athleta|auction|audible|auspost|banamex|bauhaus|bentley|bestbuy|booking|brother|capital|caravan|careers|channel|charity|chintai|citadel|clubmed|college|cologne|company|compare|contact|cooking|corsica|country|coupons|courses|cricket|cruises|dentist|digital|domains|exposed|express|farmers|fashion|ferrari|ferrero|finance|fishing|fitness|flights|florist|flowers|forsale|frogans|fujitsu|gallery|genting|godaddy|grocery|guitars|hamburg|hangout|hitachi|holiday|hosting|hotmail|hyundai|ismaili|jewelry|juniper|kitchen|komatsu|lacaixa|lanxess|lasalle|latrobe|leclerc|limited|lincoln|markets|monster|netbank|netflix|network|neustar|okinawa|organic|origins|philips|pioneer|politie|realtor|recipes|rentals|reviews|rexroth|samsung|sandvik|schmidt|schwarz|science|shiksha|singles|staples|storage|support|surgery|systems|temasek|theater|theatre|tickets|toshiba|trading|walmart|wanggou|watches|weather|website|wedding|whoswho|windows|winners|yamaxun|youtube|zuerich|\u043A\u0430\u0442\u043E\u043B\u0438\u043A|\u0627\u0644\u0628\u062D\u0631\u064A\u0646|\u0627\u0644\u062C\u0632\u0627\u0626\u0631|\u0627\u0644\u0639\u0644\u064A\u0627\u0646|\u067E\u0627\u06A9\u0633\u062A\u0627\u0646|\u0643\u0627\u062B\u0648\u0644\u064A\u0643|\u0B87\u0BA8\u0BCD\u0BA4\u0BBF\u0BAF\u0BBE|abbott|abbvie|africa|agency|airbus|airtel|alipay|alsace|alstom|amazon|anquan|aramco|author|bayern|beauty|berlin|bharti|bostik|boston|broker|camera|career|casino|center|chanel|chrome|church|circle|claims|clinic|coffee|comsec|condos|coupon|credit|cruise|dating|datsun|dealer|degree|dental|design|direct|doctor|dunlop|dupont|durban|emerck|energy|estate|events|expert|family|flickr|futbol|gallup|garden|george|giving|global|google|gratis|health|hermes|hiphop|hockey|hotels|hughes|imamat|insure|intuit|jaguar|joburg|juegos|kaufen|kindle|kosher|latino|lawyer|lefrak|living|locker|london|luxury|madrid|maison|makeup|market|mattel|mobile|monash|mormon|moscow|museum|nagoya|nissan|nissay|norton|nowruz|office|olayan|online|oracle|orange|otsuka|pfizer|photos|physio|pictet|quebec|racing|realty|reisen|repair|report|review|rogers|ryukyu|safety|sakura|sanofi|school|schule|search|secure|select|shouji|soccer|social|stream|studio|supply|suzuki|swatch|sydney|taipei|taobao|target|tattoo|tennis|tienda|tjmaxx|tkmaxx|toyota|travel|unicom|viajes|viking|villas|virgin|vision|voting|voyage|walter|webcam|xihuan|yachts|yandex|zappos|\u043C\u043E\u0441\u043A\u0432\u0430|\u043E\u043D\u043B\u0430\u0439\u043D|\u0627\u0628\u0648\u0638\u0628\u064A|\u0627\u0631\u0627\u0645\u0643\u0648|\u0627\u0644\u0627\u0631\u062F\u0646|\u0627\u0644\u0645\u063A\u0631\u0628|\u0627\u0645\u0627\u0631\u0627\u062A|\u0641\u0644\u0633\u0637\u064A\u0646|\u0645\u0644\u064A\u0633\u064A\u0627|\u092D\u093E\u0930\u0924\u092E\u094D|\u0B87\u0BB2\u0B99\u0BCD\u0B95\u0BC8|\u30D5\u30A1\u30C3\u30B7\u30E7\u30F3|actor|adult|aetna|amfam|amica|apple|archi|audio|autos|azure|baidu|beats|bible|bingo|black|boats|bosch|build|canon|cards|chase|cheap|cisco|citic|click|cloud|coach|codes|crown|cymru|dance|deals|delta|drive|dubai|earth|edeka|email|epson|faith|fedex|final|forex|forum|gallo|games|gifts|gives|glass|globo|gmail|green|gripe|group|gucci|guide|homes|honda|horse|house|hyatt|ikano|irish|jetzt|koeln|kyoto|lamer|lease|legal|lexus|lilly|lipsy|loans|locus|lotte|lotto|mango|media|miami|money|movie|music|nexus|nikon|ninja|nokia|nowtv|omega|osaka|paris|parts|party|phone|photo|pizza|place|poker|praxi|press|prime|promo|quest|radio|rehab|reise|ricoh|rocks|rodeo|rugby|salon|sener|seven|sharp|shell|shoes|skype|sling|smart|smile|solar|space|sport|stada|store|study|style|sucks|swiss|tatar|tires|tirol|tmall|today|tokyo|tools|toray|total|tours|trade|trust|tunes|tushu|ubank|vegas|video|vodka|volvo|wales|watch|weber|weibo|works|world|xerox|yahoo|\u05D9\u05E9\u05E8\u05D0\u05DC|\u0627\u06CC\u0631\u0627\u0646|\u0628\u0627\u0632\u0627\u0631|\u0628\u06BE\u0627\u0631\u062A|\u0633\u0648\u062F\u0627\u0646|\u0633\u0648\u0631\u064A\u0629|\u0647\u0645\u0631\u0627\u0647|\u092D\u093E\u0930\u094B\u0924|\u0938\u0902\u0917\u0920\u0928|\u09AC\u09BE\u0982\u09B2\u09BE|\u0C2D\u0C3E\u0C30\u0C24\u0C4D|\u0D2D\u0D3E\u0D30\u0D24\u0D02|\u5609\u91CC\u5927\u9152\u5E97|aarp|able|aero|akdn|ally|amex|arab|army|arpa|arte|asda|asia|audi|auto|baby|band|bank|bbva|beer|best|bike|bing|blog|blue|bofa|bond|book|buzz|cafe|call|camp|care|cars|casa|case|cash|cbre|cern|chat|citi|city|club|cool|coop|cyou|data|date|dclk|deal|dell|desi|diet|dish|docs|dvag|erni|fage|fail|fans|farm|fast|fido|film|fire|fish|flir|food|ford|free|fund|game|gbiz|gent|ggee|gift|gmbh|gold|golf|goog|guge|guru|hair|haus|hdfc|help|here|host|hsbc|icbc|ieee|imdb|immo|info|itau|java|jeep|jobs|jprs|kddi|kids|kiwi|kpmg|kred|land|lego|lgbt|lidl|life|like|limo|link|live|loan|love|ltda|luxe|maif|meet|meme|menu|mini|mint|mobi|moda|moto|name|navy|news|next|nico|nike|ollo|open|page|pars|pccw|pics|ping|pink|play|plus|pohl|porn|post|prod|prof|qpon|read|reit|rent|rest|rich|room|rsvp|ruhr|safe|sale|sarl|save|saxo|scot|seat|seek|sexy|shia|shop|show|silk|sina|site|skin|sncf|sohu|song|sony|spot|star|surf|talk|taxi|team|tech|teva|tiaa|tips|town|toys|tube|vana|visa|viva|vivo|vote|voto|wang|weir|wien|wiki|wine|work|xbox|yoga|zara|zero|zone|\u0434\u0435\u0442\u0438|\u0441\u0430\u0439\u0442|\u0628\u0627\u0631\u062A|\u0628\u064A\u062A\u0643|\u0680\u0627\u0631\u062A|\u062A\u0648\u0646\u0633|\u0634\u0628\u0643\u0629|\u0639\u0631\u0627\u0642|\u0639\u0645\u0627\u0646|\u0645\u0648\u0642\u0639|\u092D\u093E\u0930\u0924|\u09AD\u09BE\u09B0\u09A4|\u09AD\u09BE\u09F0\u09A4|\u0A2D\u0A3E\u0A30\u0A24|\u0AAD\u0ABE\u0AB0\u0AA4|\u0B2D\u0B3E\u0B30\u0B24|\u0CAD\u0CBE\u0CB0\u0CA4|\u0DBD\u0D82\u0D9A\u0DCF|\u30A2\u30DE\u30BE\u30F3|\u30B0\u30FC\u30B0\u30EB|\u30AF\u30E9\u30A6\u30C9|\u30DD\u30A4\u30F3\u30C8|\u7EC4\u7EC7\u673A\u6784|\u96FB\u8A0A\u76C8\u79D1|\u9999\u683C\u91CC\u62C9|aaa|abb|abc|aco|ads|aeg|afl|aig|anz|aol|app|art|aws|axa|bar|bbc|bbt|bcg|bcn|bet|bid|bio|biz|bms|bmw|bom|boo|bot|box|buy|bzh|cab|cal|cam|car|cat|cba|cbn|ceo|cfa|cfd|com|cpa|crs|dad|day|dds|dev|dhl|diy|dnp|dog|dot|dtv|dvr|eat|eco|edu|esq|eus|fan|fit|fly|foo|fox|frl|ftr|fun|fyi|gal|gap|gay|gdn|gea|gle|gmo|gmx|goo|gop|got|gov|hbo|hiv|hkt|hot|how|ibm|ice|icu|ifm|inc|ing|ink|int|ist|itv|jcb|jio|jll|jmp|jnj|jot|joy|kfh|kia|kim|kpn|krd|lat|law|lds|llc|llp|lol|lpl|ltd|man|map|mba|med|men|mil|mit|mlb|mls|mma|moe|moi|mom|mov|msd|mtn|mtr|nab|nba|nec|net|new|nfl|ngo|nhk|now|nra|nrw|ntt|nyc|obi|one|ong|onl|ooo|org|ott|ovh|pay|pet|phd|pid|pin|pnc|pro|pru|pub|pwc|red|ren|ril|rio|rip|run|rwe|sap|sas|sbi|sbs|scb|sew|sex|sfr|ski|sky|soy|spa|srl|stc|tab|tax|tci|tdk|tel|thd|tjx|top|trv|tui|tvs|ubs|uno|uol|ups|vet|vig|vin|vip|wed|win|wme|wow|wtc|wtf|xin|xxx|xyz|you|yun|zip|\u0431\u0435\u043B|\u043A\u043E\u043C|\u049B\u0430\u0437|\u043C\u043A\u0434|\u043C\u043E\u043D|\u043E\u0440\u0433|\u0440\u0443\u0441|\u0441\u0440\u0431|\u0443\u043A\u0440|\u0570\u0561\u0575|\u05E7\u05D5\u05DD|\u0639\u0631\u0628|\u0642\u0637\u0631|\u0643\u0648\u0645|\u0645\u0635\u0631|\u0915\u0949\u092E|\u0928\u0947\u091F|\u0E04\u0E2D\u0E21|\u0E44\u0E17\u0E22|\u0EA5\u0EB2\u0EA7|\u30B9\u30C8\u30A2|\u30BB\u30FC\u30EB|\u307F\u3093\u306A|\u4E2D\u6587\u7F51|\u4E9A\u9A6C\u900A|\u5929\u4E3B\u6559|\u6211\u7231\u4F60|\u65B0\u52A0\u5761|\u6DE1\u9A6C\u9521|\u98DE\u5229\u6D66|ac|ad|ae|af|ag|ai|al|am|ao|aq|ar|as|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cw|cx|cy|cz|de|dj|dk|dm|do|dz|ec|ee|eg|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|iq|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|ss|st|su|sv|sx|sy|sz|tc|td|tf|tg|th|tj|tk|tl|tm|tn|to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|za|zm|zw|\u03B5\u03BB|\u03B5\u03C5|\u0431\u0433|\u0435\u044E|\u0440\u0444|\u10D2\u10D4|\uB2F7\uB137|\uB2F7\uCEF4|\uC0BC\uC131|\uD55C\uAD6D|\u30B3\u30E0|\u4E16\u754C|\u4E2D\u4FE1|\u4E2D\u56FD|\u4E2D\u570B|\u4F01\u4E1A|\u4F5B\u5C71|\u4FE1\u606F|\u5065\u5EB7|\u516B\u5366|\u516C\u53F8|\u516C\u76CA|\u53F0\u6E7E|\u53F0\u7063|\u5546\u57CE|\u5546\u5E97|\u5546\u6807|\u5609\u91CC|\u5728\u7EBF|\u5927\u62FF|\u5A31\u4E50|\u5BB6\u96FB|\u5E7F\u4E1C|\u5FAE\u535A|\u6148\u5584|\u624B\u673A|\u62DB\u8058|\u653F\u52A1|\u653F\u5E9C|\u65B0\u95FB|\u65F6\u5C1A|\u66F8\u7C4D|\u673A\u6784|\u6E38\u620F|\u6FB3\u9580|\u70B9\u770B|\u79FB\u52A8|\u7F51\u5740|\u7F51\u5E97|\u7F51\u7AD9|\u7F51\u7EDC|\u8054\u901A|\u8C37\u6B4C|\u8D2D\u7269|\u901A\u8CA9|\u96C6\u56E2|\u98DF\u54C1|\u9910\u5385|\u9999\u6E2F)",mpe=new RegExp("^"+Mtt+"$");var Ntt=/[\/?#]/,ktt=/[-+&@#/%=~_()|'$*\[\]{}\u2713]/,hpe=/[?!:,.;^]/,eQ=/https?:\/\//i,fpe=new RegExp("^"+eQ.source,"i"),ppe=new RegExp(hpe.source+"$"),Utt=/^(javascript|vbscript):/i,Dtt=/^[A-Za-z][-.+A-Za-z0-9]*:(\/\/)?([^:/]*)/,Btt=/^(?:\/\/)?([^/#?:]+)/;function SV(e){return dy.test(e)}function tQ(e){return dy.test(e)||qs.test(e)||e==="+"||e==="-"||e==="."}function n0(e){return Eh.test(e)}function dU(e){return e==="_"||n0(e)}function nQ(e){return Eh.test(e)||ktt.test(e)||hpe.test(e)}function uU(e){return Ntt.test(e)}function iQ(e){return mpe.test(e.toLowerCase())}function bpe(e){if(Utt.test(e))return!1;var t=e.match(Dtt);if(!t)return!1;var n=!!t[1],i=t[2];return n?!0:!(i.indexOf(".")===-1||!dy.test(i))}function gpe(e){var t=e.match(Btt);if(!t)return!1;var n=t[0],i=n.split(".");if(i.length<2)return!1;var o=i[i.length-1];return!!iQ(o)}var Ott=/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,Ytt=/[:/?#]/;function ype(e){var t=e.split(Ytt,1)[0];return Ott.test(t)}var ztt=/^(https?:\/\/)?(www\.)?/i,Htt=/^\/\//,xpe=function(e){kf(t,e);function t(n){var i=e.call(this,n)||this;return i.type="url",i.url="",i.urlMatchType="scheme",i.protocolRelativeMatch=!1,i.stripPrefix={scheme:!0,www:!0},i.stripTrailingSlash=!0,i.decodePercentEncoding=!0,i.protocolPrepended=!1,i.urlMatchType=n.urlMatchType,i.url=n.url,i.protocolRelativeMatch=n.protocolRelativeMatch,i.stripPrefix=n.stripPrefix,i.stripTrailingSlash=n.stripTrailingSlash,i.decodePercentEncoding=n.decodePercentEncoding,i}return t.prototype.getType=function(){return"url"},t.prototype.getUrlMatchType=function(){return this.urlMatchType},t.prototype.getUrl=function(){var n=this.url;return!this.protocolRelativeMatch&&this.urlMatchType!=="scheme"&&!this.protocolPrepended&&(n=this.url="http://"+n,this.protocolPrepended=!0),n},t.prototype.getAnchorHref=function(){var n=this.getUrl();return n.replace(/&/g,"&")},t.prototype.getAnchorText=function(){var n=this.getMatchedText();return this.protocolRelativeMatch&&(n=Qtt(n)),this.stripPrefix.scheme&&(n=Ktt(n)),this.stripPrefix.www&&(n=Jtt(n)),this.stripTrailingSlash&&(n=jtt(n)),this.decodePercentEncoding&&(n=qtt(n)),n},t}(Uf);function Ktt(e){return e.replace(fpe,"")}function Jtt(e){return e.replace(ztt,"$1")}function Qtt(e){return e.replace(Htt,"")}function jtt(e){return e.charAt(e.length-1)==="/"&&(e=e.slice(0,-1)),e}function qtt(e){var t=e.replace(/%22/gi,""").replace(/%26/gi,"&").replace(/%27/gi,"'").replace(/%3C/gi,"<").replace(/%3E/gi,">");try{return decodeURIComponent(t)}catch{return t}}var Shi=_(T());var _pe=/^mailto:/i,$tt=new RegExp("[".concat(qJ,"!#$%&'*+/=?^_`{|}~-]"));function Tpe(e){return Eh.test(e)}function mU(e){return $tt.test(e)}function Spe(e){var t=e.split(".").pop()||"";return iQ(t)}var Rhi=_(T());var Cpe=function(e){kf(t,e);function t(n){var i=e.call(this,n)||this;return i.type="email",i.email="",i.email=n.email,i}return t.prototype.getType=function(){return"email"},t.prototype.getEmail=function(){return this.email},t.prototype.getAnchorHref=function(){return"mailto:"+this.email},t.prototype.getAnchorText=function(){return this.email},t}(Uf);var Ehi=_(T());function oQ(e){return e==="_"||Eh.test(e)}function Vpe(e){return e.length<=140}var Lpe=["twitter","facebook","instagram","tiktok","youtube"];var vhi=_(T());var Rpe=function(e){kf(t,e);function t(n){var i=e.call(this,n)||this;return i.type="hashtag",i.serviceName="twitter",i.hashtag="",i.serviceName=n.serviceName,i.hashtag=n.hashtag,i}return t.prototype.getType=function(){return"hashtag"},t.prototype.getServiceName=function(){return this.serviceName},t.prototype.getHashtag=function(){return this.hashtag},t.prototype.getAnchorHref=function(){var n=this.serviceName,i=this.hashtag;switch(n){case"twitter":return"https://twitter.com/hashtag/"+i;case"facebook":return"https://www.facebook.com/hashtag/"+i;case"instagram":return"https://instagram.com/explore/tags/"+i;case"tiktok":return"https://www.tiktok.com/tag/"+i;case"youtube":return"https://youtube.com/hashtag/"+i;default:throw Nf(n),new Error("Invalid hashtag service: ".concat(n))}},t.prototype.getAnchorText=function(){return"#"+this.hashtag},t.prototype.getCssClassSuffixes=function(){var n=e.prototype.getCssClassSuffixes.call(this),i=this.getServiceName();return i&&n.push(i),n},t}(Uf);var Fhi=_(T()),ent={twitter:/^@\w{1,15}$/,instagram:/^@[_\w]{1,30}$/,soundcloud:/^@[-a-z0-9_]{3,25}$/,tiktok:/^@[.\w]{1,23}[\w]$/,youtube:/^@[-.·\w]{3,30}$/},tnt=/[-\w.]/;function rQ(e){return tnt.test(e)}function Zpe(e,t){var n=ent[t];return n.test(e)}var Gpe=["twitter","instagram","soundcloud","tiktok","youtube"];var Uhi=_(T());var Epe=function(e){kf(t,e);function t(n){var i=e.call(this,n)||this;return i.type="mention",i.serviceName="twitter",i.mention="",i.mention=n.mention,i.serviceName=n.serviceName,i}return t.prototype.getType=function(){return"mention"},t.prototype.getMention=function(){return this.mention},t.prototype.getServiceName=function(){return this.serviceName},t.prototype.getAnchorHref=function(){switch(this.serviceName){case"twitter":return"https://twitter.com/"+this.mention;case"instagram":return"https://instagram.com/"+this.mention;case"soundcloud":return"https://soundcloud.com/"+this.mention;case"tiktok":return"https://www.tiktok.com/@"+this.mention;case"youtube":return"https://youtube.com/@"+this.mention;default:throw Nf(this.serviceName),new Error("Unknown service name to point mention to: "+this.serviceName)}},t.prototype.getAnchorText=function(){return"@"+this.mention},t.prototype.getCssClassSuffixes=function(){var n=e.prototype.getCssClassSuffixes.call(this),i=this.getServiceName();return i&&n.push(i),n},t}(Uf);var Bhi=_(T()),nnt=/[-. ]/,int=/[-. ()]/,ont=/[,;]/,rnt=/(?:(?:(?:(\+)?\d{1,3}[-. ]?)?\(?\d{3}\)?[-. ]?\d{3}[-. ]?\d{4})|(?:(\+)(?:9[976]\d|8[987530]\d|6[987]\d|5[90]\d|42\d|3[875]\d|2[98654321]\d|9[8543210]|8[6421]|6[6543210]|5[87654321]|4[987654310]|3[9643210]|2[70]|7|1)[-. ]?(?:\d[-. ]?){6,12}\d+))([,;]+[0-9]+#?)*/,snt=/(0([1-9]-?[1-9]\d{3}|[1-9]{2}-?\d{3}|[1-9]{2}\d{1}-?\d{2}|[1-9]{2}\d{2}-?\d{1})-?\d{4}|0[789]0-?\d{4}-?\d{4}|050-?\d{4}-?\d{4})/,ant=new RegExp("^".concat(rnt.source,"|").concat(snt.source,"$"));function sQ(e){return nnt.test(e)}function hU(e){return ont.test(e)}function Ipe(e){var t=e.charAt(0)==="+"||int.test(e);return t&&ant.test(e)}var Hhi=_(T());var Xpe=function(e){kf(t,e);function t(n){var i=e.call(this,n)||this;return i.type="phone",i.number="",i.plusSign=!1,i.number=n.number,i.plusSign=n.plusSign,i}return t.prototype.getType=function(){return"phone"},t.prototype.getPhoneNumber=function(){return this.number},t.prototype.getNumber=function(){return this.getPhoneNumber()},t.prototype.getAnchorHref=function(){return"tel:"+(this.plusSign?"+":"")+this.number},t.prototype.getAnchorText=function(){return this.matchedText},t}(Uf);function vpe(e,t){for(var n=t.tagBuilder,i=t.stripPrefix,o=t.stripTrailingSlash,r=t.decodePercentEncoding,s=t.hashtagServiceName,a=t.mentionServiceName,c=[],d=e.length,u=[],h=0;h<d;h++){var p=e.charAt(h);if(u.length===0)S(p);else{for(var g=u.length-1;g>=0;g--){var f=u[g];switch(f.state){case 11:P(f,p);break;case 12:W(f,p);break;case 0:C(f,p);break;case 1:V(f,p);break;case 2:L(f,p);break;case 3:Z(f,p);break;case 4:E(f,p);break;case 5:v(f,p);break;case 6:A(f,p);break;case 7:b(f,p);break;case 13:R(f,p);break;case 14:G(f,p);break;case 8:I(f,p);break;case 9:w(f,p);break;case 10:M(f,p);break;case 15:B(f,p);break;case 16:k(f,p);break;case 17:O(f,p);break;case 18:N(f,p);break;case 19:z(f,p);break;case 20:K(f,p);break;case 21:te(f,p);break;case 22:H(f,p);break;case 23:j(f,p);break;case 24:ee(f,p);break;case 25:fe(f,p);break;case 26:Te(f,p);break;case 27:de(f,p);break;case 28:xe(f,p);break;case 29:Ce(f,p);break;case 30:Ie(f,p);break;case 31:Le(f,p);break;case 32:Oe(f,p);break;case 33:qe(f,p);break;case 34:Rt(f,p);break;case 35:Lt(f,p);break;case 36:ke(f,p);break;case 37:Ne(f,p);break;case 38:Ht(f,p);break;case 39:ut(f,p);break;case 40:mt(f,p);break;case 41:Pn(f,p);break;default:Nf(f.state)}}if(h>0&&SV(p)){var y=e.charAt(h-1);!SV(y)&&!u.some(fnt)&&u.push(fU(h,0))}}}for(var x=u.length-1;x>=0;x--)u.forEach(function(ge){return cn(ge)});return c;function S(ge){if(ge==="#")u.push(mnt(h,28));else if(ge==="@")u.push(hnt(h,30));else if(ge==="/")u.push(aQ(h,11));else if(ge==="+")u.push(cQ(h,37));else if(ge==="(")u.push(cQ(h,32));else{if(qs.test(ge)&&(u.push(cQ(h,38)),u.push(dnt(h,13))),Tpe(ge)){var Ve=ge.toLowerCase()==="m"?15:22;u.push(unt(h,Ve))}SV(ge)&&u.push(fU(h,0)),Eh.test(ge)&&u.push(aQ(h,5))}}function C(ge,Ve){Ve===":"?ge.state=2:Ve==="-"?ge.state=1:tQ(Ve)||Yo(u,ge)}function V(ge,Ve){Ve==="-"||(Ve==="/"?(Yo(u,ge),u.push(aQ(h,11))):tQ(Ve)?ge.state=0:Yo(u,ge))}function L(ge,Ve){Ve==="/"?ge.state=3:Ve==="."?Yo(u,ge):n0(Ve)?(ge.state=5,SV(Ve)&&u.push(fU(h,0))):Yo(u,ge)}function Z(ge,Ve){Ve==="/"?ge.state=4:nQ(Ve)?(ge.state=10,ge.acceptStateReached=!0):cn(ge)}function E(ge,Ve){Ve==="/"?ge.state=10:n0(Ve)?(ge.state=5,ge.acceptStateReached=!0):Yo(u,ge)}function P(ge,Ve){Ve==="/"?ge.state=12:Yo(u,ge)}function W(ge,Ve){n0(Ve)?ge.state=5:Yo(u,ge)}function v(ge,Ve){Ve==="."?ge.state=7:Ve==="-"?ge.state=6:Ve===":"?ge.state=8:uU(Ve)?ge.state=10:dU(Ve)||cn(ge)}function A(ge,Ve){Ve==="-"||(Ve==="."?cn(ge):n0(Ve)?ge.state=5:cn(ge))}function b(ge,Ve){Ve==="."?cn(ge):n0(Ve)?(ge.state=5,ge.acceptStateReached=!0):cn(ge)}function R(ge,Ve){Ve==="."?ge.state=14:Ve===":"?ge.state=8:qs.test(Ve)||(uU(Ve)?ge.state=10:Eh.test(Ve)?Yo(u,ge):cn(ge))}function G(ge,Ve){qs.test(Ve)?(ge.octetsEncountered++,ge.octetsEncountered===4&&(ge.acceptStateReached=!0),ge.state=13):cn(ge)}function I(ge,Ve){qs.test(Ve)?ge.state=9:cn(ge)}function w(ge,Ve){qs.test(Ve)||(uU(Ve)?ge.state=10:cn(ge))}function M(ge,Ve){nQ(Ve)||cn(ge)}function B(ge,Ve){Ve.toLowerCase()==="a"?ge.state=16:H(ge,Ve)}function k(ge,Ve){Ve.toLowerCase()==="i"?ge.state=17:H(ge,Ve)}function O(ge,Ve){Ve.toLowerCase()==="l"?ge.state=18:H(ge,Ve)}function N(ge,Ve){Ve.toLowerCase()==="t"?ge.state=19:H(ge,Ve)}function z(ge,Ve){Ve.toLowerCase()==="o"?ge.state=20:H(ge,Ve)}function K(ge,Ve){Ve.toLowerCase()===":"?ge.state=21:H(ge,Ve)}function te(ge,Ve){mU(Ve)?ge.state=22:Yo(u,ge)}function H(ge,Ve){Ve==="."?ge.state=23:Ve==="@"?ge.state=24:mU(Ve)?ge.state=22:Yo(u,ge)}function j(ge,Ve){Ve==="."?Yo(u,ge):Ve==="@"?Yo(u,ge):mU(Ve)?ge.state=22:Yo(u,ge)}function ee(ge,Ve){n0(Ve)?ge.state=25:Yo(u,ge)}function fe(ge,Ve){Ve==="."?ge.state=27:Ve==="-"?ge.state=26:dU(Ve)||cn(ge)}function Te(ge,Ve){Ve==="-"||Ve==="."?cn(ge):dU(Ve)?ge.state=25:cn(ge)}function de(ge,Ve){Ve==="."||Ve==="-"?cn(ge):n0(Ve)?(ge.state=25,ge.acceptStateReached=!0):cn(ge)}function xe(ge,Ve){oQ(Ve)?(ge.state=29,ge.acceptStateReached=!0):Yo(u,ge)}function Ce(ge,Ve){oQ(Ve)||cn(ge)}function Ie(ge,Ve){rQ(Ve)?(ge.state=31,ge.acceptStateReached=!0):Yo(u,ge)}function Le(ge,Ve){rQ(Ve)||(Eh.test(Ve)?Yo(u,ge):cn(ge))}function Ne(ge,Ve){qs.test(Ve)?ge.state=38:(Yo(u,ge),S(Ve))}function Oe(ge,Ve){qs.test(Ve)?ge.state=33:Yo(u,ge),S(Ve)}function qe(ge,Ve){qs.test(Ve)?ge.state=34:Yo(u,ge)}function Rt(ge,Ve){qs.test(Ve)?ge.state=35:Yo(u,ge)}function Lt(ge,Ve){Ve===")"?ge.state=36:Yo(u,ge)}function ke(ge,Ve){qs.test(Ve)?ge.state=38:sQ(Ve)?ge.state=39:Yo(u,ge)}function Ht(ge,Ve){ge.acceptStateReached=!0,hU(Ve)?ge.state=40:Ve==="#"?ge.state=41:qs.test(Ve)||(Ve==="("?ge.state=32:sQ(Ve)?ge.state=39:(cn(ge),SV(Ve)&&u.push(fU(h,0))))}function ut(ge,Ve){qs.test(Ve)?ge.state=38:Ve==="("?ge.state=32:(cn(ge),S(Ve))}function mt(ge,Ve){hU(Ve)||(Ve==="#"?ge.state=41:qs.test(Ve)?ge.state=38:cn(ge))}function Pn(ge,Ve){hU(Ve)?ge.state=40:qs.test(Ve)?Yo(u,ge):cn(ge)}function cn(ge){if(Yo(u,ge),!!ge.acceptStateReached){var Ve=ge.startIdx,bn=e.slice(ge.startIdx,h);if(bn=lnt(bn),ge.type==="url"){var pt=e.charAt(ge.startIdx-1);if(pt==="@")return;var so=ge.matchType;if(so==="scheme"){var Eo=eQ.exec(bn);if(Eo&&(Ve=Ve+Eo.index,bn=bn.slice(Eo.index)),!bpe(bn))return}else if(so==="tld"){if(!gpe(bn))return}else if(so==="ipV4"){if(!ype(bn))return}else Nf(so);c.push(new xpe({tagBuilder:n,matchedText:bn,offset:Ve,urlMatchType:so,url:bn,protocolRelativeMatch:bn.slice(0,2)==="//",stripPrefix:i,stripTrailingSlash:o,decodePercentEncoding:r}))}else if(ge.type==="email")Spe(bn)&&c.push(new Cpe({tagBuilder:n,matchedText:bn,offset:Ve,email:bn.replace(_pe,"")}));else if(ge.type==="hashtag")Vpe(bn)&&c.push(new Rpe({tagBuilder:n,matchedText:bn,offset:Ve,serviceName:s,hashtag:bn.slice(1)}));else if(ge.type==="mention")Zpe(bn,a)&&c.push(new Epe({tagBuilder:n,matchedText:bn,offset:Ve,serviceName:a,mention:bn.slice(1)}));else if(ge.type==="phone"){if(bn=bn.replace(/ +$/g,""),Ipe(bn)){var aa=bn.replace(/[^0-9,;#]/g,"");c.push(new Xpe({tagBuilder:n,matchedText:bn,offset:Ve,number:aa,plusSign:bn.charAt(0)==="+"}))}}else Nf(ge)}}}var cnt=/[\(\{\[]/,Wpe=/[\)\}\]]/,Ppe={")":"(","}":"{","]":"["};function lnt(e){for(var t={"(":0,"{":0,"[":0},n=0;n<e.length;n++){var i=e.charAt(n);cnt.test(i)?t[i]++:Wpe.test(i)&&t[Ppe[i]]--}for(var o=e.length-1,r;o>=0;)if(r=e.charAt(o),Wpe.test(r)){var s=Ppe[r];if(t[s]<0)t[s]++,o--;else break}else if(ppe.test(r))o--;else break;return e.slice(0,o+1)}function fU(e,t){return{type:"url",startIdx:e,state:t,acceptStateReached:!1,matchType:"scheme"}}function aQ(e,t){return{type:"url",startIdx:e,state:t,acceptStateReached:!1,matchType:"tld"}}function dnt(e,t){return{type:"url",startIdx:e,state:t,acceptStateReached:!1,matchType:"ipV4",octetsEncountered:1}}function unt(e,t){return{type:"email",startIdx:e,state:t,acceptStateReached:!1}}function mnt(e,t){return{type:"hashtag",startIdx:e,state:t,acceptStateReached:!1}}function hnt(e,t){return{type:"mention",startIdx:e,state:t,acceptStateReached:!1}}function cQ(e,t){return{type:"phone",startIdx:e,state:t,acceptStateReached:!1}}function fnt(e){return e.type==="url"&&e.matchType==="scheme"}var mfi=_(T());function wpe(e,t){for(var n=t.onOpenTag,i=t.onCloseTag,o=t.onText,r=t.onComment,s=t.onDoctype,a=new Df,c=0,d=e.length,u=0,h=0,p=a;c<d;){var g=e.charAt(c);switch(u){case 0:f(g);break;case 1:y(g);break;case 2:S(g);break;case 3:x(g);break;case 4:C(g);break;case 5:V(g);break;case 6:L(g);break;case 7:Z(g);break;case 8:E(g);break;case 9:P(g);break;case 10:W(g);break;case 11:v(g);break;case 12:A(g);break;case 13:b(g);break;case 14:R(g);break;case 15:G(g);break;case 16:I(g);break;case 17:w(g);break;case 18:M(g);break;case 19:B(g);break;case 20:k(g);break;default:Nf(u)}c++}h<c&&K();function f(j){j==="<"&&N()}function y(j){j==="!"?u=13:j==="/"?(u=2,p=new Df($s($s({},p),{isClosing:!0}))):j==="<"?N():dy.test(j)?(u=3,p=new Df($s($s({},p),{isOpening:!0}))):(u=0,p=a)}function x(j){Od.test(j)?(p=new Df($s($s({},p),{name:te()})),u=4):j==="<"?N():j==="/"?(p=new Df($s($s({},p),{name:te()})),u=12):j===">"?(p=new Df($s($s({},p),{name:te()})),z()):!dy.test(j)&&!qs.test(j)&&j!==":"&&O()}function S(j){j===">"?O():dy.test(j)?u=3:O()}function C(j){Od.test(j)||(j==="/"?u=12:j===">"?z():j==="<"?N():j==="="||cU.test(j)||rpe.test(j)?O():u=5)}function V(j){Od.test(j)?u=6:j==="/"?u=12:j==="="?u=7:j===">"?z():j==="<"?N():cU.test(j)&&O()}function L(j){Od.test(j)||(j==="/"?u=12:j==="="?u=7:j===">"?z():j==="<"?N():cU.test(j)?O():u=5)}function Z(j){Od.test(j)||(j==='"'?u=8:j==="'"?u=9:/[>=`]/.test(j)?O():j==="<"?N():u=10)}function E(j){j==='"'&&(u=11)}function P(j){j==="'"&&(u=11)}function W(j){Od.test(j)?u=4:j===">"?z():j==="<"&&N()}function v(j){Od.test(j)?u=4:j==="/"?u=12:j===">"?z():j==="<"?N():(u=4,H())}function A(j){j===">"?(p=new Df($s($s({},p),{isClosing:!0})),z()):u=4}function b(j){e.substr(c,2)==="--"?(c+=2,p=new Df($s($s({},p),{type:"comment"})),u=14):e.substr(c,7).toUpperCase()==="DOCTYPE"?(c+=7,p=new Df($s($s({},p),{type:"doctype"})),u=20):O()}function R(j){j==="-"?u=15:j===">"?O():u=16}function G(j){j==="-"?u=18:j===">"?O():u=16}function I(j){j==="-"&&(u=17)}function w(j){j==="-"?u=18:u=16}function M(j){j===">"?z():j==="!"?u=19:j==="-"||(u=16)}function B(j){j==="-"?u=17:j===">"?z():u=16}function k(j){j===">"?z():j==="<"&&N()}function O(){u=0,p=a}function N(){u=1,p=new Df({idx:c})}function z(){var j=e.slice(h,p.idx);j&&o(j,h),p.type==="comment"?r(p.idx):p.type==="doctype"?s(p.idx):(p.isOpening&&n(p.name,p.idx),p.isClosing&&i(p.name,p.idx)),O(),h=c+1}function K(){var j=e.slice(h,c);o(j,h),h=c+1}function te(){var j=p.idx+(p.isClosing?2:1);return e.slice(j,c).toLowerCase()}function H(){c--}}var Df=function(){function e(t){t===void 0&&(t={}),this.idx=t.idx!==void 0?t.idx:-1,this.type=t.type||"tag",this.name=t.name||"",this.isOpening=!!t.isOpening,this.isClosing=!!t.isClosing}return e}();var pnt=function(){function e(t){t===void 0&&(t={}),this.version=e.version,this.urls={},this.email=!0,this.phone=!0,this.hashtag=!1,this.mention=!1,this.newWindow=!0,this.stripPrefix={scheme:!0,www:!0},this.stripTrailingSlash=!0,this.decodePercentEncoding=!0,this.truncate={length:0,location:"end"},this.className="",this.replaceFn=null,this.context=void 0,this.sanitizeHtml=!1,this.tagBuilder=null,this.urls=bnt(t.urls),this.email=Bd(t.email)?t.email:this.email,this.phone=Bd(t.phone)?t.phone:this.phone,this.hashtag=t.hashtag||this.hashtag,this.mention=t.mention||this.mention,this.newWindow=Bd(t.newWindow)?t.newWindow:this.newWindow,this.stripPrefix=gnt(t.stripPrefix),this.stripTrailingSlash=Bd(t.stripTrailingSlash)?t.stripTrailingSlash:this.stripTrailingSlash,this.decodePercentEncoding=Bd(t.decodePercentEncoding)?t.decodePercentEncoding:this.decodePercentEncoding,this.sanitizeHtml=t.sanitizeHtml||!1;var n=this.mention;if(n!==!1&&Gpe.indexOf(n)===-1)throw new Error("invalid `mention` cfg '".concat(n,"' - see docs"));var i=this.hashtag;if(i!==!1&&Lpe.indexOf(i)===-1)throw new Error("invalid `hashtag` cfg '".concat(i,"' - see docs"));this.truncate=ynt(t.truncate),this.className=t.className||this.className,this.replaceFn=t.replaceFn||this.replaceFn,this.context=t.context||this}return e.link=function(t,n){var i=new e(n);return i.link(t)},e.parse=function(t,n){var i=new e(n);return i.parse(t)},e.prototype.parse=function(t){var n=this,i=["a","style","script"],o=0,r=[];return wpe(t,{onOpenTag:function(s){i.indexOf(s)>=0&&o++},onText:function(s,a){if(o===0){var c=/( | |<|<|>|>|"|"|')/gi,d=s.split(c),u=a;d.forEach(function(h,p){if(p%2===0){var g=n.parseText(h,u);r.push.apply(r,g)}u+=h.length})}},onCloseTag:function(s){i.indexOf(s)>=0&&(o=Math.max(o-1,0))},onComment:function(s){},onDoctype:function(s){}}),r=this.compactMatches(r),r=this.removeUnwantedMatches(r),r},e.prototype.compactMatches=function(t){t.sort(function(c,d){return c.getOffset()-d.getOffset()});for(var n=0;n<t.length-1;){var i=t[n],o=i.getOffset(),r=i.getMatchedText().length,s=o+r;if(n+1<t.length){if(t[n+1].getOffset()===o){var a=t[n+1].getMatchedText().length>r?n:n+1;t.splice(a,1);continue}if(t[n+1].getOffset()<s){t.splice(n+1,1);continue}}n++}return t},e.prototype.removeUnwantedMatches=function(t){return this.hashtag||ly(t,function(n){return n.getType()==="hashtag"}),this.email||ly(t,function(n){return n.getType()==="email"}),this.phone||ly(t,function(n){return n.getType()==="phone"}),this.mention||ly(t,function(n){return n.getType()==="mention"}),this.urls.schemeMatches||ly(t,function(n){return n.getType()==="url"&&n.getUrlMatchType()==="scheme"}),this.urls.tldMatches||ly(t,function(n){return n.getType()==="url"&&n.getUrlMatchType()==="tld"}),this.urls.ipV4Matches||ly(t,function(n){return n.getType()==="url"&&n.getUrlMatchType()==="ipV4"}),t},e.prototype.parseText=function(t,n){n===void 0&&(n=0),n=n||0;for(var i=vpe(t,{tagBuilder:this.getTagBuilder(),stripPrefix:this.stripPrefix,stripTrailingSlash:this.stripTrailingSlash,decodePercentEncoding:this.decodePercentEncoding,hashtagServiceName:this.hashtag,mentionServiceName:this.mention||"twitter"}),o=0,r=i.length;o<r;o++)i[o].setOffset(n+i[o].getOffset());return i},e.prototype.link=function(t){if(!t)return"";this.sanitizeHtml&&(t=t.replace(/</g,"<").replace(/>/g,">"));for(var n=this.parse(t),i=[],o=0,r=0,s=n.length;r<s;r++){var a=n[r];i.push(t.substring(o,a.getOffset())),i.push(this.createMatchReturnVal(a)),o=a.getOffset()+a.getMatchedText().length}return i.push(t.substring(o)),i.join("")},e.prototype.createMatchReturnVal=function(t){var n;if(this.replaceFn&&(n=this.replaceFn.call(this.context,t)),typeof n=="string")return n;if(n===!1)return t.getMatchedText();if(n instanceof lU)return n.toAnchorString();var i=t.buildTag();return i.toAnchorString()},e.prototype.getTagBuilder=function(){var t=this.tagBuilder;return t||(t=this.tagBuilder=new upe({newWindow:this.newWindow,truncate:this.truncate,className:this.className})),t},e.version=npe,e}(),Fpe=pnt;function bnt(e){return e==null&&(e=!0),Bd(e)?{schemeMatches:e,tldMatches:e,ipV4Matches:e}:{schemeMatches:Bd(e.schemeMatches)?e.schemeMatches:!0,tldMatches:Bd(e.tldMatches)?e.tldMatches:!0,ipV4Matches:Bd(e.ipV4Matches)?e.ipV4Matches:!0}}function gnt(e){return e==null&&(e=!0),Bd(e)?{scheme:e,www:e}:{scheme:Bd(e.scheme)?e.scheme:!0,www:Bd(e.www)?e.www:!0}}function ynt(e){return typeof e=="number"?{length:e,location:"end"}:ipe(e||{},{length:Number.POSITIVE_INFINITY,location:"end"})}var Lfi=_(T());var Cfi=_(T());var vfi=_(T());var pU=Fpe;var Ype;typeof DOMParser<"u"&&(Ype=new DOMParser);var xnt=new pU({stripPrefix:!1,email:!1,replaceFn:function(e,t){return t.urlMatchType==="scheme"||t.urlMatchType==="www"}}),bU=32,Ape=2414016,Mpe=1,Npe=16093e3,kpe=.1,_nt=[null,void 0,"http://www.topografix.com/GPX/1/1"],Ro={gpx:_nt};function Tnt(e){return new Promise((t,n)=>{let i=new FileReader;i.addEventListener("load",function(){t(i.result)}),i.addEventListener("error",function(){n(i.error)}),i.readAsText(e)})}function lQ(e,t){let n=Hv(e,"id");return n=l(n)?n:zn(),t.getOrCreateEntity(n)}function dQ(e){let t=Upe(e,"lon"),n=Upe(e,"lat"),i=Yv(e,"ele",Ro.gpx);return m.fromDegrees(t,n,i)}function Upe(e,t){if(!l(e))return;let n=e.getAttribute(t);if(n!==null){let i=parseFloat(n);return isNaN(i)?void 0:i}}function Hv(e,t){if(!l(e))return;let n=e.getAttribute(t);return n!==null?n:void 0}function uy(e,t,n){if(!l(e))return;let i=e.childNodes,o=i.length;for(let r=0;r<o;r++){let s=i[r];if(s.localName===t&&n.indexOf(s.namespaceURI)!==-1)return s}}function uQ(e,t,n){if(!l(e))return;let i=[],o=e.getElementsByTagName(t),r=o.length;for(let s=0;s<r;s++){let a=o[s];a.localName===t&&n.indexOf(a.namespaceURI)!==-1&&i.push(a)}return i}function Yv(e,t,n){let i=uy(e,t,n);if(l(i)){let o=parseFloat(i.textContent);return isNaN(o)?void 0:o}}function Ql(e,t,n){let i=uy(e,t,n);if(l(i))return i.textContent.trim()}function zpe(e){let t=new ac;return t.width=bU,t.height=bU,t.scaleByDistance=new kt(Ape,Mpe,Npe,kpe),t.pixelOffsetScaleByDistance=new kt(Ape,Mpe,Npe,kpe),t.verticalOrigin=new Qn(An.BOTTOM),t.image=e,t}function Snt(){let e=new Nm;return e.translucencyByDistance=new kt(3e6,1,5e6,0),e.pixelOffset=new U(17,0),e.horizontalOrigin=_i.LEFT,e.font="16px sans-serif",e.style=Do.FILL_AND_OUTLINE,e}function Hpe(e){let t=new dc;return t.width=4,t.material=new Jg,t.material.color=l(e)?e:D.RED,t.material.outlineWidth=2,t.material.outlineColor=D.BLACK,t}var Dpe={time:{text:"Time",tag:"time"},comment:{text:"Comment",tag:"cmt"},description:{text:"Description",tag:"desc"},source:{text:"Source",tag:"src"},number:{text:"GPS track/route number",tag:"number"},type:{text:"Type",tag:"type"}},zv;typeof document<"u"&&(zv=document.createElement("div"));function mQ(e,t){let n,i="",o=Object.keys(Dpe),r=o.length;for(n=0;n<r;n++){let u=o[n],h=Dpe[u];h.value=Ql(e,h.tag,Ro.gpx)??"",l(h.value)&&h.value!==""&&(i=`${i}<p>${h.text}: ${h.value}</p>`)}if(!l(i)||i==="")return;i=xnt.link(i),zv.innerHTML=i;let s=zv.querySelectorAll("a");for(n=0;n<s.length;n++)s[n].setAttribute("target","_blank");let a=D.WHITE,c=D.BLACK,d='<div class="cesium-infoBox-description-lighter" style="';return d+="overflow:auto;",d+="word-wrap:break-word;",d+=`background-color:${a.toCssColorString()};`,d+=`color:${c.toCssColorString()};`,d+='">',d+=`${zv.innerHTML}</div>`,zv.innerHTML="",d}function Kpe(e,t,n,i){let o=dQ(t),r=lQ(t,n);r.position=o;let s=l(i.waypointImage)?i.waypointImage:e._pinBuilder.fromMakiIconId("marker",D.RED,bU);r.billboard=zpe(s);let a=Ql(t,"name",Ro.gpx);r.name=a,r.label=Snt(),r.label.text=a,r.description=mQ(t,r),i.clampToGround&&(r.billboard.heightReference=Je.CLAMP_TO_GROUND,r.label.heightReference=Je.CLAMP_TO_GROUND)}function Cnt(e,t,n,i){let o=lQ(t,n);o.description=mQ(t,o);let r=uQ(t,"rtept",Ro.gpx),s=new Array(r.length);for(let a=0;a<r.length;a++)Kpe(e,r[a],n,i),s[a]=dQ(r[a]);o.polyline=Hpe(i.routeColor),i.clampToGround&&(o.polyline.clampToGround=!0),o.polyline.positions=s}function Vnt(e,t,n,i){let o=lQ(t,n);o.description=mQ(t,o);let r=uQ(t,"trkseg",Ro.gpx),s=[],a=[],c,d=!0,u=new _a;for(let h=0;h<r.length;h++)c=Lnt(r[h]),s=s.concat(c.positions),c.times.length>0?(a=a.concat(c.times),u.addSamples(a,s),d=d&&!0):d=!1;if(d){let h=l(i.waypointImage)?i.waypointImage:e._pinBuilder.fromMakiIconId("marker",D.RED,bU);o.billboard=zpe(h),o.position=u,i.clampToGround&&(o.billboard.heightReference=Je.CLAMP_TO_GROUND),o.availability=new Dr,o.availability.addInterval(new Ln({start:a[0],stop:a[a.length-1]}))}o.polyline=Hpe(i.trackColor),o.polyline.positions=s,i.clampToGround&&(o.polyline.clampToGround=!0)}function Lnt(e){let t={positions:[],times:[]},n=uQ(e,"trkpt",Ro.gpx),i;for(let o=0;o<n.length;o++){let r=dQ(n[o]);t.positions.push(r),i=Ql(n[o],"time",Ro.gpx),l(i)&&t.times.push(q.fromIso8601(i))}return t}function Rnt(e){let t=uy(e,"metadata",Ro.gpx);if(l(t)){let n={name:Ql(t,"name",Ro.gpx),desc:Ql(t,"desc",Ro.gpx),author:Znt(t),copyright:Ent(t),link:Jpe(t),time:Ql(t,"time",Ro.gpx),keywords:Ql(t,"keywords",Ro.gpx),bounds:Int(t)};if(l(n.name)||l(n.desc)||l(n.author)||l(n.copyright)||l(n.link)||l(n.time)||l(n.keywords)||l(n.bounds))return n}}function Znt(e){let t=uy(e,"author",Ro.gpx);if(l(t)){let n={name:Ql(t,"name",Ro.gpx),email:Gnt(t),link:Jpe(t)};if(l(n.name)||l(n.email)||l(n.link))return n}}function Gnt(e){let t=uy(e,"email",Ro.gpx);if(l(t)){let n=Ql(t,"id",Ro.gpx),i=Ql(t,"domain",Ro.gpx);return`${n}@${i}`}}function Jpe(e){let t=uy(e,"link",Ro.gpx);if(l(t)){let n={href:Hv(t,"href"),text:Ql(t,"text",Ro.gpx),mimeType:Ql(t,"type",Ro.gpx)};if(l(n.href)||l(n.text)||l(n.mimeType))return n}}function Ent(e){let t=uy(e,"copyright",Ro.gpx);if(l(t)){let n={author:Hv(t,"author"),year:Ql(t,"year",Ro.gpx),license:Ql(t,"license",Ro.gpx)};if(l(n.author)||l(n.year)||l(n.license))return n}}function Int(e){let t=uy(e,"bounds",Ro.gpx);if(l(t)){let n={minLat:Yv(t,"minlat",Ro.gpx),maxLat:Yv(t,"maxlat",Ro.gpx),minLon:Yv(t,"minlon",Ro.gpx),maxLon:Yv(t,"maxlon",Ro.gpx)};if(l(n.minLat)||l(n.maxLat)||l(n.minLon)||l(n.maxLon))return n}}var Bpe={wpt:Kpe,rte:Cnt,trk:Vnt};function Xnt(e,t,n,i){let o=Object.keys(Bpe),r=o.length;for(let s=0;s<r;s++){let a=o[s],c=Bpe[a],d=t.childNodes,u=d.length;for(let h=0;h<u;h++){let p=d[h];p.localName===a&&Ro.gpx.indexOf(p.namespaceURI)!==-1&&c(e,p,n,i)}}}function Ope(e,t,n){let i=e._entityCollection;i.removeAll();let o=t.documentElement,r=Hv(o,"version"),s=Hv(o,"creator"),a,c=Rnt(o);l(c)&&(a=c.name),o.localName==="gpx"?Xnt(e,o,i,n):console.log(`GPX - Unsupported node: ${o.localName}`);let d,u=i.computeAvailability(),h=u.start,p=u.stop,g=q.equals(h,Be.MINIMUM_VALUE),f=q.equals(p,Be.MAXIMUM_VALUE);if(!g||!f){let x;g&&(x=new Date,x.setHours(0,0,0,0),h=q.fromDate(x)),f&&(x=new Date,x.setHours(24,0,0,0),p=q.fromDate(x)),d=new _h,d.startTime=h,d.stopTime=p,d.currentTime=q.clone(h),d.clockRange=Or.LOOP_STOP,d.clockStep=fo.SYSTEM_CLOCK_MULTIPLIER,d.multiplier=Math.round(Math.min(Math.max(q.secondsDifference(p,h)/60,1),31556900))}let y=!1;return e._name!==a&&(e._name=a,y=!0),e._creator!==s&&(e._creator=s,y=!0),Wnt(e._metadata,c)&&(e._metadata=c,y=!0),e._version!==r&&(e._version=r,y=!0),d!==e._clock&&(y=!0,e._clock=d),y&&e._changed.raiseEvent(e),Br.setLoading(e,!1),e}function Wnt(e,t){return!l(e)&&!l(t)?!1:l(e)&&l(t)?e.name!==t.name||e.dec!==t.desc||e.src!==t.src||e.author!==t.author||e.copyright!==t.copyright||e.link!==t.link||e.time!==t.time||e.bounds!==t.bounds:!0}function Pnt(e,t,n,i){i=i??Y.EMPTY_OBJECT;let o=n;if(typeof n=="string"||n instanceof Ze){n=Ze.createIfNeeded(n),o=n.fetchBlob();let r=e._resourceCredits,s=n.credits;if(l(s)){let a=s.length;for(let c=0;c<a;c++)r.push(s[c])}}return Promise.resolve(o).then(function(r){return r instanceof Blob?Tnt(r).then(function(s){let a,c;try{a=Ype.parseFromString(s,"application/xml")}catch(d){c=d.toString()}if(l(c)||a.body||a.documentElement.tagName==="parsererror"){let d=l(c)?c:a.documentElement.firstChild.nodeValue;throw d||(d=a.body.innerText),new ae(d)}return Ope(e,a,i)}):Ope(e,r,i)}).catch(function(r){return e._error.raiseEvent(e,r),console.log(r),Promise.reject(r)})}function CV(){this._changed=new be,this._error=new be,this._loading=new be,this._clock=void 0,this._entityCollection=new Qs(this),this._entityCluster=new vd,this._name=void 0,this._version=void 0,this._creator=void 0,this._metadata=void 0,this._isLoading=!1,this._pinBuilder=new t0}CV.load=function(e,t){return new CV().load(e,t)};Object.defineProperties(CV.prototype,{name:{get:function(){return this._name}},version:{get:function(){return this._version}},creator:{get:function(){return this._creator}},metadata:{get:function(){return this._metadata}},clock:{get:function(){return this._clock}},entities:{get:function(){return this._entityCollection}},isLoading:{get:function(){return this._isLoading}},changedEvent:{get:function(){return this._changed}},errorEvent:{get:function(){return this._error}},loadingEvent:{get:function(){return this._loading}},show:{get:function(){return this._entityCollection.show},set:function(e){this._entityCollection.show=e}},clustering:{get:function(){return this._entityCluster},set:function(e){this._entityCluster=e}}});CV.prototype.update=function(e){return!0};CV.prototype.load=function(e,t){if(!l(e))throw new pe("data is required.");t=t??Y.EMPTY_OBJECT,Br.setLoading(this,!0);let n=this._name,i=this;return Pnt(this,this._entityCollection,e,t).then(function(){let o,r=i._entityCollection.computeAvailability(),s=r.start,a=r.stop,c=q.equals(s,Be.MINIMUM_VALUE),d=q.equals(a,Be.MAXIMUM_VALUE);if(!c||!d){let h;c&&(h=new Date,h.setHours(0,0,0,0),s=q.fromDate(h)),d&&(h=new Date,h.setHours(24,0,0,0),a=q.fromDate(h)),o=new _h,o.startTime=s,o.stopTime=a,o.currentTime=q.clone(s),o.clockRange=Or.LOOP_STOP,o.clockStep=fo.SYSTEM_CLOCK_MULTIPLIER,o.multiplier=Math.round(Math.min(Math.max(q.secondsDifference(a,s)/60,1),31556900))}let u=!1;return o!==i._clock&&(i._clock=o,u=!0),n!==i._name&&(u=!0),u&&i._changed.raiseEvent(i),Br.setLoading(i,!1),i}).catch(function(o){return Br.setLoading(i,!1),i._error.raiseEvent(i,o),console.log(o),Promise.reject(o)})};var Kv=CV;var Rpi=_(T(),1);function vnt(e,t){this.position=e,this.headingPitchRoll=t}var Jv=vnt;var syi=_(T(),1);var xw=_(dd(),1);var p0i=_(T(),1);var Gpi=_(T(),1);function CU(e){return VU(e.map(([t,n])=>new Array(t).fill(n,0,t)))}function VU(e){return e.reduce((t,n)=>t.concat(Array.isArray(n)?VU(n):n),[])}var Qpe=[0,1,2,3].concat(...CU([[2,4],[2,5],[4,6],[4,7],[8,8],[8,9],[16,10],[16,11],[32,12],[32,13],[64,14],[64,15],[2,0],[1,16],[1,17],[2,18],[2,19],[4,20],[4,21],[8,22],[8,23],[16,24],[16,25],[32,26],[32,27],[64,28],[64,29]]));function mr(){let e=this;function t(o){let r=e.dyn_tree,s=e.stat_desc.static_tree,a=e.stat_desc.extra_bits,c=e.stat_desc.extra_base,d=e.stat_desc.max_length,u,h,p,g,f,y,x=0;for(g=0;g<=15;g++)o.bl_count[g]=0;for(r[o.heap[o.heap_max]*2+1]=0,u=o.heap_max+1;u<573;u++)h=o.heap[u],g=r[r[h*2+1]*2+1]+1,g>d&&(g=d,x++),r[h*2+1]=g,!(h>e.max_code)&&(o.bl_count[g]++,f=0,h>=c&&(f=a[h-c]),y=r[h*2],o.opt_len+=y*(g+f),s&&(o.static_len+=y*(s[h*2+1]+f)));if(x!==0){do{for(g=d-1;o.bl_count[g]===0;)g--;o.bl_count[g]--,o.bl_count[g+1]+=2,o.bl_count[d]--,x-=2}while(x>0);for(g=d;g!==0;g--)for(h=o.bl_count[g];h!==0;)p=o.heap[--u],!(p>e.max_code)&&(r[p*2+1]!=g&&(o.opt_len+=(g-r[p*2+1])*r[p*2],r[p*2+1]=g),h--)}}function n(o,r){let s=0;do s|=o&1,o>>>=1,s<<=1;while(--r>0);return s>>>1}function i(o,r,s){let a=[],c=0,d,u,h;for(d=1;d<=15;d++)a[d]=c=c+s[d-1]<<1;for(u=0;u<=r;u++)h=o[u*2+1],h!==0&&(o[u*2]=n(a[h]++,h))}e.build_tree=function(o){let r=e.dyn_tree,s=e.stat_desc.static_tree,a=e.stat_desc.elems,c,d,u=-1,h;for(o.heap_len=0,o.heap_max=573,c=0;c<a;c++)r[c*2]!==0?(o.heap[++o.heap_len]=u=c,o.depth[c]=0):r[c*2+1]=0;for(;o.heap_len<2;)h=o.heap[++o.heap_len]=u<2?++u:0,r[h*2]=1,o.depth[h]=0,o.opt_len--,s&&(o.static_len-=s[h*2+1]);for(e.max_code=u,c=Math.floor(o.heap_len/2);c>=1;c--)o.pqdownheap(r,c);h=a;do c=o.heap[1],o.heap[1]=o.heap[o.heap_len--],o.pqdownheap(r,1),d=o.heap[1],o.heap[--o.heap_max]=c,o.heap[--o.heap_max]=d,r[h*2]=r[c*2]+r[d*2],o.depth[h]=Math.max(o.depth[c],o.depth[d])+1,r[c*2+1]=r[d*2+1]=h,o.heap[1]=h++,o.pqdownheap(r,1);while(o.heap_len>=2);o.heap[--o.heap_max]=o.heap[1],t(o),i(r,e.max_code,o.bl_count)}}mr._length_code=[0,1,2,3,4,5,6,7].concat(...CU([[2,8],[2,9],[2,10],[2,11],[4,12],[4,13],[4,14],[4,15],[8,16],[8,17],[8,18],[8,19],[16,20],[16,21],[16,22],[16,23],[32,24],[32,25],[32,26],[31,27],[1,28]]));mr.base_length=[0,1,2,3,4,5,6,7,8,10,12,14,16,20,24,28,32,40,48,56,64,80,96,112,128,160,192,224,0];mr.base_dist=[0,1,2,3,4,6,8,12,16,24,32,48,64,96,128,192,256,384,512,768,1024,1536,2048,3072,4096,6144,8192,12288,16384,24576];mr.d_code=function(e){return e<256?Qpe[e]:Qpe[256+(e>>>7)]};mr.extra_lbits=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];mr.extra_dbits=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];mr.extra_blbits=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];mr.bl_order=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];function Ua(e,t,n,i,o){let r=this;r.static_tree=e,r.extra_bits=t,r.extra_base=n,r.elems=i,r.max_length=o}var wnt=[12,140,76,204,44,172,108,236,28,156,92,220,60,188,124,252,2,130,66,194,34,162,98,226,18,146,82,210,50,178,114,242,10,138,74,202,42,170,106,234,26,154,90,218,58,186,122,250,6,134,70,198,38,166,102,230,22,150,86,214,54,182,118,246,14,142,78,206,46,174,110,238,30,158,94,222,62,190,126,254,1,129,65,193,33,161,97,225,17,145,81,209,49,177,113,241,9,137,73,201,41,169,105,233,25,153,89,217,57,185,121,249,5,133,69,197,37,165,101,229,21,149,85,213,53,181,117,245,13,141,77,205,45,173,109,237,29,157,93,221,61,189,125,253,19,275,147,403,83,339,211,467,51,307,179,435,115,371,243,499,11,267,139,395,75,331,203,459,43,299,171,427,107,363,235,491,27,283,155,411,91,347,219,475,59,315,187,443,123,379,251,507,7,263,135,391,71,327,199,455,39,295,167,423,103,359,231,487,23,279,151,407,87,343,215,471,55,311,183,439,119,375,247,503,15,271,143,399,79,335,207,463,47,303,175,431,111,367,239,495,31,287,159,415,95,351,223,479,63,319,191,447,127,383,255,511,0,64,32,96,16,80,48,112,8,72,40,104,24,88,56,120,4,68,36,100,20,84,52,116,3,131,67,195,35,163,99,227],Fnt=CU([[144,8],[112,9],[24,7],[8,8]]);Ua.static_ltree=VU(wnt.map((e,t)=>[e,Fnt[t]]));var Ant=[0,16,8,24,4,20,12,28,2,18,10,26,6,22,14,30,1,17,9,25,5,21,13,29,3,19,11,27,7,23],Mnt=CU([[30,5]]);Ua.static_dtree=VU(Ant.map((e,t)=>[e,Mnt[t]]));Ua.static_l_desc=new Ua(Ua.static_ltree,mr.extra_lbits,257,286,15);Ua.static_d_desc=new Ua(Ua.static_dtree,mr.extra_dbits,0,30,15);Ua.static_bl_desc=new Ua(null,mr.extra_blbits,0,19,7);var Nnt=9,knt=8;function Bf(e,t,n,i,o){let r=this;r.good_length=e,r.max_lazy=t,r.nice_length=n,r.max_chain=i,r.func=o}var qpe=0,TU=1,ST=2,Ih=[new Bf(0,0,0,0,qpe),new Bf(4,4,8,4,TU),new Bf(4,5,16,8,TU),new Bf(4,6,32,32,TU),new Bf(4,4,16,16,ST),new Bf(8,16,32,32,ST),new Bf(8,16,128,128,ST),new Bf(8,32,128,256,ST),new Bf(32,128,258,1024,ST),new Bf(32,258,258,4096,ST)],gU=["need dictionary","stream end","","","stream error","data error","","buffer error","",""],am=0,yU=1,Qv=2,xU=3,Unt=32,hQ=42,_U=113,jv=666,fQ=8,Dnt=0,pQ=1,Bnt=2,Rr=3,SU=258,Yd=SU+Rr+1;function jpe(e,t,n,i){let o=e[t*2],r=e[n*2];return o<r||o==r&&i[t]<=i[n]}function Ont(){let e=this,t,n,i,o,r,s,a,c,d,u,h,p,g,f,y,x,S,C,V,L,Z,E,P,W,v,A,b,R,G,I,w,M,B,k=new mr,O=new mr,N=new mr;e.depth=[];let z,K,te,H,j,ee;e.bl_count=[],e.heap=[],w=[],M=[],B=[];function fe(){d=2*r,h[g-1]=0;for(let Fe=0;Fe<g-1;Fe++)h[Fe]=0;A=Ih[b].max_lazy,G=Ih[b].good_length,I=Ih[b].nice_length,v=Ih[b].max_chain,Z=0,S=0,P=0,C=W=Rr-1,L=0,p=0}function Te(){let Fe;for(Fe=0;Fe<286;Fe++)w[Fe*2]=0;for(Fe=0;Fe<30;Fe++)M[Fe*2]=0;for(Fe=0;Fe<19;Fe++)B[Fe*2]=0;w[256*2]=1,e.opt_len=e.static_len=0,K=te=0}function de(){k.dyn_tree=w,k.stat_desc=Ua.static_l_desc,O.dyn_tree=M,O.stat_desc=Ua.static_d_desc,N.dyn_tree=B,N.stat_desc=Ua.static_bl_desc,j=0,ee=0,H=8,Te()}e.pqdownheap=function(Fe,rt){let He=e.heap,Qe=He[rt],bt=rt<<1;for(;bt<=e.heap_len&&(bt<e.heap_len&&jpe(Fe,He[bt+1],He[bt],e.depth)&&bt++,!jpe(Fe,Qe,He[bt],e.depth));)He[rt]=He[bt],rt=bt,bt<<=1;He[rt]=Qe};function xe(Fe,rt){let He=-1,Qe,bt=Fe[0*2+1],Ot=0,Cn=7,Io=4;bt===0&&(Cn=138,Io=3),Fe[(rt+1)*2+1]=65535;for(let So=0;So<=rt;So++)Qe=bt,bt=Fe[(So+1)*2+1],!(++Ot<Cn&&Qe==bt)&&(Ot<Io?B[Qe*2]+=Ot:Qe!==0?(Qe!=He&&B[Qe*2]++,B[16*2]++):Ot<=10?B[17*2]++:B[18*2]++,Ot=0,He=Qe,bt===0?(Cn=138,Io=3):Qe==bt?(Cn=6,Io=3):(Cn=7,Io=4))}function Ce(){let Fe;for(xe(w,k.max_code),xe(M,O.max_code),N.build_tree(e),Fe=18;Fe>=3&&B[mr.bl_order[Fe]*2+1]===0;Fe--);return e.opt_len+=3*(Fe+1)+5+5+4,Fe}function Ie(Fe){e.pending_buf[e.pending++]=Fe}function Le(Fe){Ie(Fe&255),Ie(Fe>>>8&255)}function Ne(Fe){Ie(Fe>>8&255),Ie(Fe&255&255)}function Oe(Fe,rt){let He,Qe=rt;ee>16-Qe?(He=Fe,j|=He<<ee&65535,Le(j),j=He>>>16-ee,ee+=Qe-16):(j|=Fe<<ee&65535,ee+=Qe)}function qe(Fe,rt){let He=Fe*2;Oe(rt[He]&65535,rt[He+1]&65535)}function Rt(Fe,rt){let He,Qe=-1,bt,Ot=Fe[0*2+1],Cn=0,Io=7,So=4;for(Ot===0&&(Io=138,So=3),He=0;He<=rt;He++)if(bt=Ot,Ot=Fe[(He+1)*2+1],!(++Cn<Io&&bt==Ot)){if(Cn<So)do qe(bt,B);while(--Cn!==0);else bt!==0?(bt!=Qe&&(qe(bt,B),Cn--),qe(16,B),Oe(Cn-3,2)):Cn<=10?(qe(17,B),Oe(Cn-3,3)):(qe(18,B),Oe(Cn-11,7));Cn=0,Qe=bt,Ot===0?(Io=138,So=3):bt==Ot?(Io=6,So=3):(Io=7,So=4)}}function Lt(Fe,rt,He){let Qe;for(Oe(Fe-257,5),Oe(rt-1,5),Oe(He-4,4),Qe=0;Qe<He;Qe++)Oe(B[mr.bl_order[Qe]*2+1],3);Rt(w,Fe-1),Rt(M,rt-1)}function ke(){ee==16?(Le(j),j=0,ee=0):ee>=8&&(Ie(j&255),j>>>=8,ee-=8)}function Ht(){Oe(pQ<<1,3),qe(256,Ua.static_ltree),ke(),1+H+10-ee<9&&(Oe(pQ<<1,3),qe(256,Ua.static_ltree),ke()),H=7}function ut(Fe,rt){let He,Qe,bt;if(e.dist_buf[K]=Fe,e.lc_buf[K]=rt&255,K++,Fe===0?w[rt*2]++:(te++,Fe--,w[(mr._length_code[rt]+256+1)*2]++,M[mr.d_code(Fe)*2]++),(K&8191)===0&&b>2){for(He=K*8,Qe=Z-S,bt=0;bt<30;bt++)He+=M[bt*2]*(5+mr.extra_dbits[bt]);if(He>>>=3,te<Math.floor(K/2)&&He<Math.floor(Qe/2))return!0}return K==z-1}function mt(Fe,rt){let He,Qe,bt=0,Ot,Cn;if(K!==0)do He=e.dist_buf[bt],Qe=e.lc_buf[bt],bt++,He===0?qe(Qe,Fe):(Ot=mr._length_code[Qe],qe(Ot+256+1,Fe),Cn=mr.extra_lbits[Ot],Cn!==0&&(Qe-=mr.base_length[Ot],Oe(Qe,Cn)),He--,Ot=mr.d_code(He),qe(Ot,rt),Cn=mr.extra_dbits[Ot],Cn!==0&&(He-=mr.base_dist[Ot],Oe(He,Cn)));while(bt<K);qe(256,Fe),H=Fe[256*2+1]}function Pn(){ee>8?Le(j):ee>0&&Ie(j&255),j=0,ee=0}function cn(Fe,rt,He){Pn(),H=8,He&&(Le(rt),Le(~rt)),e.pending_buf.set(c.subarray(Fe,Fe+rt),e.pending),e.pending+=rt}function ge(Fe,rt,He){Oe((Dnt<<1)+(He?1:0),3),cn(Fe,rt,!0)}function Ve(Fe,rt,He){let Qe,bt,Ot=0;b>0?(k.build_tree(e),O.build_tree(e),Ot=Ce(),Qe=e.opt_len+3+7>>>3,bt=e.static_len+3+7>>>3,bt<=Qe&&(Qe=bt)):Qe=bt=rt+5,rt+4<=Qe&&Fe!=-1?ge(Fe,rt,He):bt==Qe?(Oe((pQ<<1)+(He?1:0),3),mt(Ua.static_ltree,Ua.static_dtree)):(Oe((Bnt<<1)+(He?1:0),3),Lt(k.max_code+1,O.max_code+1,Ot+1),mt(w,M)),Te(),He&&Pn()}function bn(Fe){Ve(S>=0?S:-1,Z-S,Fe),S=Z,t.flush_pending()}function pt(){let Fe,rt,He,Qe;do{if(Qe=d-P-Z,Qe===0&&Z===0&&P===0)Qe=r;else if(Qe==-1)Qe--;else if(Z>=r+r-Yd){c.set(c.subarray(r,r+r),0),E-=r,Z-=r,S-=r,Fe=g,He=Fe;do rt=h[--He]&65535,h[He]=rt>=r?rt-r:0;while(--Fe!==0);Fe=r,He=Fe;do rt=u[--He]&65535,u[He]=rt>=r?rt-r:0;while(--Fe!==0);Qe+=r}if(t.avail_in===0)return;Fe=t.read_buf(c,Z+P,Qe),P+=Fe,P>=Rr&&(p=c[Z]&255,p=(p<<x^c[Z+1]&255)&y)}while(P<Yd&&t.avail_in!==0)}function so(Fe){let rt=65535,He;for(rt>i-5&&(rt=i-5);;){if(P<=1){if(pt(),P===0&&Fe==0)return am;if(P===0)break}if(Z+=P,P=0,He=S+rt,(Z===0||Z>=He)&&(P=Z-He,Z=He,bn(!1),t.avail_out===0)||Z-S>=r-Yd&&(bn(!1),t.avail_out===0))return am}return bn(Fe==4),t.avail_out===0?Fe==4?Qv:am:Fe==4?xU:yU}function Eo(Fe){let rt=v,He=Z,Qe,bt,Ot=W,Cn=Z>r-Yd?Z-(r-Yd):0,Io=I,So=a,Qa=Z+SU,ja=c[He+Ot-1],Vi=c[He+Ot];W>=G&&(rt>>=2),Io>P&&(Io=P);do if(Qe=Fe,!(c[Qe+Ot]!=Vi||c[Qe+Ot-1]!=ja||c[Qe]!=c[He]||c[++Qe]!=c[He+1])){He+=2,Qe++;do;while(c[++He]==c[++Qe]&&c[++He]==c[++Qe]&&c[++He]==c[++Qe]&&c[++He]==c[++Qe]&&c[++He]==c[++Qe]&&c[++He]==c[++Qe]&&c[++He]==c[++Qe]&&c[++He]==c[++Qe]&&He<Qa);if(bt=SU-(Qa-He),He=Qa-SU,bt>Ot){if(E=Fe,Ot=bt,bt>=Io)break;ja=c[He+Ot-1],Vi=c[He+Ot]}}while((Fe=u[Fe&So]&65535)>Cn&&--rt!==0);return Ot<=P?Ot:P}function aa(Fe){let rt=0,He;for(;;){if(P<Yd){if(pt(),P<Yd&&Fe==0)return am;if(P===0)break}if(P>=Rr&&(p=(p<<x^c[Z+(Rr-1)]&255)&y,rt=h[p]&65535,u[Z&a]=h[p],h[p]=Z),rt!==0&&(Z-rt&65535)<=r-Yd&&R!=2&&(C=Eo(rt)),C>=Rr)if(He=ut(Z-E,C-Rr),P-=C,C<=A&&P>=Rr){C--;do Z++,p=(p<<x^c[Z+(Rr-1)]&255)&y,rt=h[p]&65535,u[Z&a]=h[p],h[p]=Z;while(--C!==0);Z++}else Z+=C,C=0,p=c[Z]&255,p=(p<<x^c[Z+1]&255)&y;else He=ut(0,c[Z]&255),P--,Z++;if(He&&(bn(!1),t.avail_out===0))return am}return bn(Fe==4),t.avail_out===0?Fe==4?Qv:am:Fe==4?xU:yU}function Gr(Fe){let rt=0,He,Qe;for(;;){if(P<Yd){if(pt(),P<Yd&&Fe==0)return am;if(P===0)break}if(P>=Rr&&(p=(p<<x^c[Z+(Rr-1)]&255)&y,rt=h[p]&65535,u[Z&a]=h[p],h[p]=Z),W=C,V=E,C=Rr-1,rt!==0&&W<A&&(Z-rt&65535)<=r-Yd&&(R!=2&&(C=Eo(rt)),C<=5&&(R==1||C==Rr&&Z-E>4096)&&(C=Rr-1)),W>=Rr&&C<=W){Qe=Z+P-Rr,He=ut(Z-1-V,W-Rr),P-=W-1,W-=2;do++Z<=Qe&&(p=(p<<x^c[Z+(Rr-1)]&255)&y,rt=h[p]&65535,u[Z&a]=h[p],h[p]=Z);while(--W!==0);if(L=0,C=Rr-1,Z++,He&&(bn(!1),t.avail_out===0))return am}else if(L!==0){if(He=ut(0,c[Z-1]&255),He&&bn(!1),Z++,P--,t.avail_out===0)return am}else L=1,Z++,P--}return L!==0&&(He=ut(0,c[Z-1]&255),L=0),bn(Fe==4),t.avail_out===0?Fe==4?Qv:am:Fe==4?xU:yU}function Ts(Fe){return Fe.total_in=Fe.total_out=0,Fe.msg=null,e.pending=0,e.pending_out=0,n=_U,o=0,de(),fe(),0}e.deflateInit=function(Fe,rt,He,Qe,bt,Ot){return Qe||(Qe=fQ),bt||(bt=knt),Ot||(Ot=0),Fe.msg=null,rt==-1&&(rt=6),bt<1||bt>Nnt||Qe!=fQ||He<9||He>15||rt<0||rt>9||Ot<0||Ot>2?-2:(Fe.dstate=e,s=He,r=1<<s,a=r-1,f=bt+7,g=1<<f,y=g-1,x=Math.floor((f+Rr-1)/Rr),c=new Uint8Array(r*2),u=[],h=[],z=1<<bt+6,e.pending_buf=new Uint8Array(z*4),i=z*4,e.dist_buf=new Uint16Array(z),e.lc_buf=new Uint8Array(z),b=rt,R=Ot,Ts(Fe))},e.deflateEnd=function(){return n!=hQ&&n!=_U&&n!=jv?-2:(e.lc_buf=null,e.dist_buf=null,e.pending_buf=null,h=null,u=null,c=null,e.dstate=null,n==_U?-3:0)},e.deflateParams=function(Fe,rt,He){let Qe=0;return rt==-1&&(rt=6),rt<0||rt>9||He<0||He>2?-2:(Ih[b].func!=Ih[rt].func&&Fe.total_in!==0&&(Qe=Fe.deflate(1)),b!=rt&&(b=rt,A=Ih[b].max_lazy,G=Ih[b].good_length,I=Ih[b].nice_length,v=Ih[b].max_chain),R=He,Qe)},e.deflateSetDictionary=function(Fe,rt,He){let Qe=He,bt,Ot=0;if(!rt||n!=hQ)return-2;if(Qe<Rr)return 0;for(Qe>r-Yd&&(Qe=r-Yd,Ot=He-Qe),c.set(rt.subarray(Ot,Ot+Qe),0),Z=Qe,S=Qe,p=c[0]&255,p=(p<<x^c[1]&255)&y,bt=0;bt<=Qe-Rr;bt++)p=(p<<x^c[bt+(Rr-1)]&255)&y,u[bt&a]=h[p],h[p]=bt;return 0},e.deflate=function(Fe,rt){let He,Qe,bt,Ot,Cn;if(rt>4||rt<0)return-2;if(!Fe.next_out||!Fe.next_in&&Fe.avail_in!==0||n==jv&&rt!=4)return Fe.msg=gU[4],-2;if(Fe.avail_out===0)return Fe.msg=gU[7],-5;if(t=Fe,Ot=o,o=rt,n==hQ&&(Qe=fQ+(s-8<<4)<<8,bt=(b-1&255)>>1,bt>3&&(bt=3),Qe|=bt<<6,Z!==0&&(Qe|=Unt),Qe+=31-Qe%31,n=_U,Ne(Qe)),e.pending!==0){if(t.flush_pending(),t.avail_out===0)return o=-1,0}else if(t.avail_in===0&&rt<=Ot&&rt!=4)return t.msg=gU[7],-5;if(n==jv&&t.avail_in!==0)return Fe.msg=gU[7],-5;if(t.avail_in!==0||P!==0||rt!=0&&n!=jv){switch(Cn=-1,Ih[b].func){case qpe:Cn=so(rt);break;case TU:Cn=aa(rt);break;case ST:Cn=Gr(rt);break;default:}if((Cn==Qv||Cn==xU)&&(n=jv),Cn==am||Cn==Qv)return t.avail_out===0&&(o=-1),0;if(Cn==yU){if(rt==1)Ht();else if(ge(0,0,!1),rt==3)for(He=0;He<g;He++)h[He]=0;if(t.flush_pending(),t.avail_out===0)return o=-1,0}}return rt!=4?0:1}}function $pe(){let e=this;e.next_in_index=0,e.next_out_index=0,e.avail_in=0,e.total_in=0,e.avail_out=0,e.total_out=0}$pe.prototype={deflateInit(e,t){let n=this;return n.dstate=new Ont,t||(t=15),n.dstate.deflateInit(n,e,t)},deflate(e){let t=this;return t.dstate?t.dstate.deflate(t,e):-2},deflateEnd(){let e=this;if(!e.dstate)return-2;let t=e.dstate.deflateEnd();return e.dstate=null,t},deflateParams(e,t){let n=this;return n.dstate?n.dstate.deflateParams(n,e,t):-2},deflateSetDictionary(e,t){let n=this;return n.dstate?n.dstate.deflateSetDictionary(n,e,t):-2},read_buf(e,t,n){let i=this,o=i.avail_in;return o>n&&(o=n),o===0?0:(i.avail_in-=o,e.set(i.next_in.subarray(i.next_in_index,i.next_in_index+o),t),i.next_in_index+=o,i.total_in+=o,o)},flush_pending(){let e=this,t=e.dstate.pending;t>e.avail_out&&(t=e.avail_out),t!==0&&(e.next_out.set(e.dstate.pending_buf.subarray(e.dstate.pending_out,e.dstate.pending_out+t),e.next_out_index),e.next_out_index+=t,e.dstate.pending_out+=t,e.total_out+=t,e.avail_out-=t,e.dstate.pending-=t,e.dstate.pending===0&&(e.dstate.pending_out=0))}};function ebe(e){let t=this,n=new $pe,i=Ynt(e&&e.chunkSize?e.chunkSize:64*1024),o=0,r=new Uint8Array(i),s=e?e.level:-1;typeof s>"u"&&(s=-1),n.deflateInit(s),n.next_out=r,t.append=function(a,c){let d,u,h=0,p=0,g=0,f=[];if(a.length){n.next_in_index=0,n.next_in=a,n.avail_in=a.length;do{if(n.next_out_index=0,n.avail_out=i,d=n.deflate(o),d!=0)throw new Error("deflating: "+n.msg);n.next_out_index&&(n.next_out_index==i?f.push(new Uint8Array(r)):f.push(r.subarray(0,n.next_out_index))),g+=n.next_out_index,c&&n.next_in_index>0&&n.next_in_index!=h&&(c(n.next_in_index),h=n.next_in_index)}while(n.avail_in>0||n.avail_out===0);return f.length>1?(u=new Uint8Array(g),f.forEach(function(y){u.set(y,p),p+=y.length})):u=f[0]?new Uint8Array(f[0]):new Uint8Array,u}},t.flush=function(){let a,c,d=0,u=0,h=[];do{if(n.next_out_index=0,n.avail_out=i,a=n.deflate(4),a!=1&&a!=0)throw new Error("deflating: "+n.msg);i-n.avail_out>0&&h.push(r.slice(0,n.next_out_index)),u+=n.next_out_index}while(n.avail_in>0||n.avail_out===0);return n.deflateEnd(),c=new Uint8Array(u),h.forEach(function(p){c.set(p,d),d+=p.length}),c}}function Ynt(e){return e+5*(Math.floor(e/16383)+1)}var Ipi=_(T(),1);var zd=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535],_be=1440,znt=0,Hnt=4,Knt=9,Jnt=5,Qnt=[96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,192,80,7,10,0,8,96,0,8,32,0,9,160,0,8,0,0,8,128,0,8,64,0,9,224,80,7,6,0,8,88,0,8,24,0,9,144,83,7,59,0,8,120,0,8,56,0,9,208,81,7,17,0,8,104,0,8,40,0,9,176,0,8,8,0,8,136,0,8,72,0,9,240,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,200,81,7,13,0,8,100,0,8,36,0,9,168,0,8,4,0,8,132,0,8,68,0,9,232,80,7,8,0,8,92,0,8,28,0,9,152,84,7,83,0,8,124,0,8,60,0,9,216,82,7,23,0,8,108,0,8,44,0,9,184,0,8,12,0,8,140,0,8,76,0,9,248,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,196,81,7,11,0,8,98,0,8,34,0,9,164,0,8,2,0,8,130,0,8,66,0,9,228,80,7,7,0,8,90,0,8,26,0,9,148,84,7,67,0,8,122,0,8,58,0,9,212,82,7,19,0,8,106,0,8,42,0,9,180,0,8,10,0,8,138,0,8,74,0,9,244,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,204,81,7,15,0,8,102,0,8,38,0,9,172,0,8,6,0,8,134,0,8,70,0,9,236,80,7,9,0,8,94,0,8,30,0,9,156,84,7,99,0,8,126,0,8,62,0,9,220,82,7,27,0,8,110,0,8,46,0,9,188,0,8,14,0,8,142,0,8,78,0,9,252,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,194,80,7,10,0,8,97,0,8,33,0,9,162,0,8,1,0,8,129,0,8,65,0,9,226,80,7,6,0,8,89,0,8,25,0,9,146,83,7,59,0,8,121,0,8,57,0,9,210,81,7,17,0,8,105,0,8,41,0,9,178,0,8,9,0,8,137,0,8,73,0,9,242,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,202,81,7,13,0,8,101,0,8,37,0,9,170,0,8,5,0,8,133,0,8,69,0,9,234,80,7,8,0,8,93,0,8,29,0,9,154,84,7,83,0,8,125,0,8,61,0,9,218,82,7,23,0,8,109,0,8,45,0,9,186,0,8,13,0,8,141,0,8,77,0,9,250,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,198,81,7,11,0,8,99,0,8,35,0,9,166,0,8,3,0,8,131,0,8,67,0,9,230,80,7,7,0,8,91,0,8,27,0,9,150,84,7,67,0,8,123,0,8,59,0,9,214,82,7,19,0,8,107,0,8,43,0,9,182,0,8,11,0,8,139,0,8,75,0,9,246,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,206,81,7,15,0,8,103,0,8,39,0,9,174,0,8,7,0,8,135,0,8,71,0,9,238,80,7,9,0,8,95,0,8,31,0,9,158,84,7,99,0,8,127,0,8,63,0,9,222,82,7,27,0,8,111,0,8,47,0,9,190,0,8,15,0,8,143,0,8,79,0,9,254,96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,193,80,7,10,0,8,96,0,8,32,0,9,161,0,8,0,0,8,128,0,8,64,0,9,225,80,7,6,0,8,88,0,8,24,0,9,145,83,7,59,0,8,120,0,8,56,0,9,209,81,7,17,0,8,104,0,8,40,0,9,177,0,8,8,0,8,136,0,8,72,0,9,241,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,201,81,7,13,0,8,100,0,8,36,0,9,169,0,8,4,0,8,132,0,8,68,0,9,233,80,7,8,0,8,92,0,8,28,0,9,153,84,7,83,0,8,124,0,8,60,0,9,217,82,7,23,0,8,108,0,8,44,0,9,185,0,8,12,0,8,140,0,8,76,0,9,249,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,197,81,7,11,0,8,98,0,8,34,0,9,165,0,8,2,0,8,130,0,8,66,0,9,229,80,7,7,0,8,90,0,8,26,0,9,149,84,7,67,0,8,122,0,8,58,0,9,213,82,7,19,0,8,106,0,8,42,0,9,181,0,8,10,0,8,138,0,8,74,0,9,245,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,205,81,7,15,0,8,102,0,8,38,0,9,173,0,8,6,0,8,134,0,8,70,0,9,237,80,7,9,0,8,94,0,8,30,0,9,157,84,7,99,0,8,126,0,8,62,0,9,221,82,7,27,0,8,110,0,8,46,0,9,189,0,8,14,0,8,142,0,8,78,0,9,253,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,195,80,7,10,0,8,97,0,8,33,0,9,163,0,8,1,0,8,129,0,8,65,0,9,227,80,7,6,0,8,89,0,8,25,0,9,147,83,7,59,0,8,121,0,8,57,0,9,211,81,7,17,0,8,105,0,8,41,0,9,179,0,8,9,0,8,137,0,8,73,0,9,243,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,203,81,7,13,0,8,101,0,8,37,0,9,171,0,8,5,0,8,133,0,8,69,0,9,235,80,7,8,0,8,93,0,8,29,0,9,155,84,7,83,0,8,125,0,8,61,0,9,219,82,7,23,0,8,109,0,8,45,0,9,187,0,8,13,0,8,141,0,8,77,0,9,251,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,199,81,7,11,0,8,99,0,8,35,0,9,167,0,8,3,0,8,131,0,8,67,0,9,231,80,7,7,0,8,91,0,8,27,0,9,151,84,7,67,0,8,123,0,8,59,0,9,215,82,7,19,0,8,107,0,8,43,0,9,183,0,8,11,0,8,139,0,8,75,0,9,247,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,207,81,7,15,0,8,103,0,8,39,0,9,175,0,8,7,0,8,135,0,8,71,0,9,239,80,7,9,0,8,95,0,8,31,0,9,159,84,7,99,0,8,127,0,8,63,0,9,223,82,7,27,0,8,111,0,8,47,0,9,191,0,8,15,0,8,143,0,8,79,0,9,255],jnt=[80,5,1,87,5,257,83,5,17,91,5,4097,81,5,5,89,5,1025,85,5,65,93,5,16385,80,5,3,88,5,513,84,5,33,92,5,8193,82,5,9,90,5,2049,86,5,129,192,5,24577,80,5,2,87,5,385,83,5,25,91,5,6145,81,5,7,89,5,1537,85,5,97,93,5,24577,80,5,4,88,5,769,84,5,49,92,5,12289,82,5,13,90,5,3073,86,5,193,192,5,24577],qnt=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],$nt=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,112,112],eit=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],tit=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],my=15;function xQ(){let e=this,t,n,i,o,r,s;function a(d,u,h,p,g,f,y,x,S,C,V){let L,Z,E,P,W,v,A,b,R,G,I,w,M,B,k;G=0,W=h;do i[d[u+G]]++,G++,W--;while(W!==0);if(i[0]==h)return y[0]=-1,x[0]=0,0;for(b=x[0],v=1;v<=my&&i[v]===0;v++);for(A=v,b<v&&(b=v),W=my;W!==0&&i[W]===0;W--);for(E=W,b>W&&(b=W),x[0]=b,B=1<<v;v<W;v++,B<<=1)if((B-=i[v])<0)return-3;if((B-=i[W])<0)return-3;for(i[W]+=B,s[1]=v=0,G=1,M=2;--W!==0;)s[M]=v+=i[G],M++,G++;W=0,G=0;do(v=d[u+G])!==0&&(V[s[v]++]=W),G++;while(++W<h);for(h=s[E],s[0]=W=0,G=0,P=-1,w=-b,r[0]=0,I=0,k=0;A<=E;A++)for(L=i[A];L--!==0;){for(;A>w+b;){if(P++,w+=b,k=E-w,k=k>b?b:k,(Z=1<<(v=A-w))>L+1&&(Z-=L+1,M=A,v<k))for(;++v<k&&!((Z<<=1)<=i[++M]);)Z-=i[M];if(k=1<<v,C[0]+k>_be)return-3;r[P]=I=C[0],C[0]+=k,P!==0?(s[P]=W,o[0]=v,o[1]=b,v=W>>>w-b,o[2]=I-r[P-1]-v,S.set(o,(r[P-1]+v)*3)):y[0]=I}for(o[1]=A-w,G>=h?o[0]=192:V[G]<p?(o[0]=V[G]<256?0:96,o[2]=V[G++]):(o[0]=f[V[G]-p]+16+64,o[2]=g[V[G++]-p]),Z=1<<A-w,v=W>>>w;v<k;v+=Z)S.set(o,(I+v)*3);for(v=1<<A-1;(W&v)!==0;v>>>=1)W^=v;for(W^=v,R=(1<<w)-1;(W&R)!=s[P];)P--,w-=b,R=(1<<w)-1}return B!==0&&E!=1?-5:0}function c(d){let u;for(t||(t=[],n=[],i=new Int32Array(my+1),o=[],r=new Int32Array(my),s=new Int32Array(my+1)),n.length<d&&(n=[]),u=0;u<d;u++)n[u]=0;for(u=0;u<my+1;u++)i[u]=0;for(u=0;u<3;u++)o[u]=0;r.set(i.subarray(0,my),0),s.set(i.subarray(0,my+1),0)}e.inflate_trees_bits=function(d,u,h,p,g){let f;return c(19),t[0]=0,f=a(d,0,19,19,null,null,h,u,p,t,n),f==-3?g.msg="oversubscribed dynamic bit lengths tree":(f==-5||u[0]===0)&&(g.msg="incomplete dynamic bit lengths tree",f=-3),f},e.inflate_trees_dynamic=function(d,u,h,p,g,f,y,x,S){let C;return c(288),t[0]=0,C=a(h,0,d,257,qnt,$nt,f,p,x,t,n),C!=0||p[0]===0?(C==-3?S.msg="oversubscribed literal/length tree":C!=-4&&(S.msg="incomplete literal/length tree",C=-3),C):(c(288),C=a(h,d,u,0,eit,tit,y,g,x,t,n),C!=0||g[0]===0&&d>257?(C==-3?S.msg="oversubscribed distance tree":C==-5?(S.msg="incomplete distance tree",C=-3):C!=-4&&(S.msg="empty distance tree with lengths",C=-3),C):0)}}xQ.inflate_trees_fixed=function(e,t,n,i){return e[0]=Knt,t[0]=Jnt,n[0]=Qnt,i[0]=jnt,0};var LU=0,tbe=1,nbe=2,ibe=3,obe=4,rbe=5,sbe=6,bQ=7,abe=8,RU=9;function nit(){let e=this,t,n=0,i,o=0,r=0,s=0,a=0,c=0,d=0,u=0,h,p=0,g,f=0;function y(x,S,C,V,L,Z,E,P){let W,v,A,b,R,G,I,w,M,B,k,O,N,z,K,te;I=P.next_in_index,w=P.avail_in,R=E.bitb,G=E.bitk,M=E.write,B=M<E.read?E.read-M-1:E.end-M,k=zd[x],O=zd[S];do{for(;G<20;)w--,R|=(P.read_byte(I++)&255)<<G,G+=8;if(W=R&k,v=C,A=V,te=(A+W)*3,(b=v[te])===0){R>>=v[te+1],G-=v[te+1],E.win[M++]=v[te+2],B--;continue}do{if(R>>=v[te+1],G-=v[te+1],(b&16)!==0){for(b&=15,N=v[te+2]+(R&zd[b]),R>>=b,G-=b;G<15;)w--,R|=(P.read_byte(I++)&255)<<G,G+=8;W=R&O,v=L,A=Z,te=(A+W)*3,b=v[te];do if(R>>=v[te+1],G-=v[te+1],(b&16)!==0){for(b&=15;G<b;)w--,R|=(P.read_byte(I++)&255)<<G,G+=8;if(z=v[te+2]+(R&zd[b]),R>>=b,G-=b,B-=N,M>=z)K=M-z,M-K>0&&2>M-K?(E.win[M++]=E.win[K++],E.win[M++]=E.win[K++],N-=2):(E.win.set(E.win.subarray(K,K+2),M),M+=2,K+=2,N-=2);else{K=M-z;do K+=E.end;while(K<0);if(b=E.end-K,N>b){if(N-=b,M-K>0&&b>M-K)do E.win[M++]=E.win[K++];while(--b!==0);else E.win.set(E.win.subarray(K,K+b),M),M+=b,K+=b,b=0;K=0}}if(M-K>0&&N>M-K)do E.win[M++]=E.win[K++];while(--N!==0);else E.win.set(E.win.subarray(K,K+N),M),M+=N,K+=N,N=0;break}else if((b&64)===0)W+=v[te+2],W+=R&zd[b],te=(A+W)*3,b=v[te];else return P.msg="invalid distance code",N=P.avail_in-w,N=G>>3<N?G>>3:N,w+=N,I-=N,G-=N<<3,E.bitb=R,E.bitk=G,P.avail_in=w,P.total_in+=I-P.next_in_index,P.next_in_index=I,E.write=M,-3;while(!0);break}if((b&64)===0){if(W+=v[te+2],W+=R&zd[b],te=(A+W)*3,(b=v[te])===0){R>>=v[te+1],G-=v[te+1],E.win[M++]=v[te+2],B--;break}}else return(b&32)!==0?(N=P.avail_in-w,N=G>>3<N?G>>3:N,w+=N,I-=N,G-=N<<3,E.bitb=R,E.bitk=G,P.avail_in=w,P.total_in+=I-P.next_in_index,P.next_in_index=I,E.write=M,1):(P.msg="invalid literal/length code",N=P.avail_in-w,N=G>>3<N?G>>3:N,w+=N,I-=N,G-=N<<3,E.bitb=R,E.bitk=G,P.avail_in=w,P.total_in+=I-P.next_in_index,P.next_in_index=I,E.write=M,-3)}while(!0)}while(B>=258&&w>=10);return N=P.avail_in-w,N=G>>3<N?G>>3:N,w+=N,I-=N,G-=N<<3,E.bitb=R,E.bitk=G,P.avail_in=w,P.total_in+=I-P.next_in_index,P.next_in_index=I,E.write=M,0}e.init=function(x,S,C,V,L,Z){t=LU,d=x,u=S,h=C,p=V,g=L,f=Z,i=null},e.proc=function(x,S,C){let V,L,Z,E=0,P=0,W=0,v,A,b,R;for(W=S.next_in_index,v=S.avail_in,E=x.bitb,P=x.bitk,A=x.write,b=A<x.read?x.read-A-1:x.end-A;;)switch(t){case LU:if(b>=258&&v>=10&&(x.bitb=E,x.bitk=P,S.avail_in=v,S.total_in+=W-S.next_in_index,S.next_in_index=W,x.write=A,C=y(d,u,h,p,g,f,x,S),W=S.next_in_index,v=S.avail_in,E=x.bitb,P=x.bitk,A=x.write,b=A<x.read?x.read-A-1:x.end-A,C!=0)){t=C==1?bQ:RU;break}r=d,i=h,o=p,t=tbe;case tbe:for(V=r;P<V;){if(v!==0)C=0;else return x.bitb=E,x.bitk=P,S.avail_in=v,S.total_in+=W-S.next_in_index,S.next_in_index=W,x.write=A,x.inflate_flush(S,C);v--,E|=(S.read_byte(W++)&255)<<P,P+=8}if(L=(o+(E&zd[V]))*3,E>>>=i[L+1],P-=i[L+1],Z=i[L],Z===0){s=i[L+2],t=sbe;break}if((Z&16)!==0){a=Z&15,n=i[L+2],t=nbe;break}if((Z&64)===0){r=Z,o=L/3+i[L+2];break}if((Z&32)!==0){t=bQ;break}return t=RU,S.msg="invalid literal/length code",C=-3,x.bitb=E,x.bitk=P,S.avail_in=v,S.total_in+=W-S.next_in_index,S.next_in_index=W,x.write=A,x.inflate_flush(S,C);case nbe:for(V=a;P<V;){if(v!==0)C=0;else return x.bitb=E,x.bitk=P,S.avail_in=v,S.total_in+=W-S.next_in_index,S.next_in_index=W,x.write=A,x.inflate_flush(S,C);v--,E|=(S.read_byte(W++)&255)<<P,P+=8}n+=E&zd[V],E>>=V,P-=V,r=u,i=g,o=f,t=ibe;case ibe:for(V=r;P<V;){if(v!==0)C=0;else return x.bitb=E,x.bitk=P,S.avail_in=v,S.total_in+=W-S.next_in_index,S.next_in_index=W,x.write=A,x.inflate_flush(S,C);v--,E|=(S.read_byte(W++)&255)<<P,P+=8}if(L=(o+(E&zd[V]))*3,E>>=i[L+1],P-=i[L+1],Z=i[L],(Z&16)!==0){a=Z&15,c=i[L+2],t=obe;break}if((Z&64)===0){r=Z,o=L/3+i[L+2];break}return t=RU,S.msg="invalid distance code",C=-3,x.bitb=E,x.bitk=P,S.avail_in=v,S.total_in+=W-S.next_in_index,S.next_in_index=W,x.write=A,x.inflate_flush(S,C);case obe:for(V=a;P<V;){if(v!==0)C=0;else return x.bitb=E,x.bitk=P,S.avail_in=v,S.total_in+=W-S.next_in_index,S.next_in_index=W,x.write=A,x.inflate_flush(S,C);v--,E|=(S.read_byte(W++)&255)<<P,P+=8}c+=E&zd[V],E>>=V,P-=V,t=rbe;case rbe:for(R=A-c;R<0;)R+=x.end;for(;n!==0;){if(b===0&&(A==x.end&&x.read!==0&&(A=0,b=A<x.read?x.read-A-1:x.end-A),b===0&&(x.write=A,C=x.inflate_flush(S,C),A=x.write,b=A<x.read?x.read-A-1:x.end-A,A==x.end&&x.read!==0&&(A=0,b=A<x.read?x.read-A-1:x.end-A),b===0)))return x.bitb=E,x.bitk=P,S.avail_in=v,S.total_in+=W-S.next_in_index,S.next_in_index=W,x.write=A,x.inflate_flush(S,C);x.win[A++]=x.win[R++],b--,R==x.end&&(R=0),n--}t=LU;break;case sbe:if(b===0&&(A==x.end&&x.read!==0&&(A=0,b=A<x.read?x.read-A-1:x.end-A),b===0&&(x.write=A,C=x.inflate_flush(S,C),A=x.write,b=A<x.read?x.read-A-1:x.end-A,A==x.end&&x.read!==0&&(A=0,b=A<x.read?x.read-A-1:x.end-A),b===0)))return x.bitb=E,x.bitk=P,S.avail_in=v,S.total_in+=W-S.next_in_index,S.next_in_index=W,x.write=A,x.inflate_flush(S,C);C=0,x.win[A++]=s,b--,t=LU;break;case bQ:if(P>7&&(P-=8,v++,W--),x.write=A,C=x.inflate_flush(S,C),A=x.write,b=A<x.read?x.read-A-1:x.end-A,x.read!=x.write)return x.bitb=E,x.bitk=P,S.avail_in=v,S.total_in+=W-S.next_in_index,S.next_in_index=W,x.write=A,x.inflate_flush(S,C);t=abe;case abe:return C=1,x.bitb=E,x.bitk=P,S.avail_in=v,S.total_in+=W-S.next_in_index,S.next_in_index=W,x.write=A,x.inflate_flush(S,C);case RU:return C=-3,x.bitb=E,x.bitk=P,S.avail_in=v,S.total_in+=W-S.next_in_index,S.next_in_index=W,x.write=A,x.inflate_flush(S,C);default:return C=-2,x.bitb=E,x.bitk=P,S.avail_in=v,S.total_in+=W-S.next_in_index,S.next_in_index=W,x.write=A,x.inflate_flush(S,C)}},e.free=function(){}}var cbe=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],VV=0,gQ=1,lbe=2,dbe=3,ube=4,mbe=5,ZU=6,GU=7,hbe=8,CT=9;function iit(e,t){let n=this,i=VV,o=0,r=0,s=0,a,c=[0],d=[0],u=new nit,h=0,p=new Int32Array(_be*3),g=0,f=new xQ;n.bitk=0,n.bitb=0,n.win=new Uint8Array(t),n.end=t,n.read=0,n.write=0,n.reset=function(y,x){x&&(x[0]=g),i==ZU&&u.free(y),i=VV,n.bitk=0,n.bitb=0,n.read=n.write=0},n.reset(e,null),n.inflate_flush=function(y,x){let S,C,V;return C=y.next_out_index,V=n.read,S=(V<=n.write?n.write:n.end)-V,S>y.avail_out&&(S=y.avail_out),S!==0&&x==-5&&(x=0),y.avail_out-=S,y.total_out+=S,y.next_out.set(n.win.subarray(V,V+S),C),C+=S,V+=S,V==n.end&&(V=0,n.write==n.end&&(n.write=0),S=n.write-V,S>y.avail_out&&(S=y.avail_out),S!==0&&x==-5&&(x=0),y.avail_out-=S,y.total_out+=S,y.next_out.set(n.win.subarray(V,V+S),C),C+=S,V+=S),y.next_out_index=C,n.read=V,x},n.proc=function(y,x){let S,C,V,L,Z,E,P,W;for(L=y.next_in_index,Z=y.avail_in,C=n.bitb,V=n.bitk,E=n.write,P=E<n.read?n.read-E-1:n.end-E;;){let v,A,b,R,G,I,w,M;switch(i){case VV:for(;V<3;){if(Z!==0)x=0;else return n.bitb=C,n.bitk=V,y.avail_in=Z,y.total_in+=L-y.next_in_index,y.next_in_index=L,n.write=E,n.inflate_flush(y,x);Z--,C|=(y.read_byte(L++)&255)<<V,V+=8}switch(S=C&7,h=S&1,S>>>1){case 0:C>>>=3,V-=3,S=V&7,C>>>=S,V-=S,i=gQ;break;case 1:v=[],A=[],b=[[]],R=[[]],xQ.inflate_trees_fixed(v,A,b,R),u.init(v[0],A[0],b[0],0,R[0],0),C>>>=3,V-=3,i=ZU;break;case 2:C>>>=3,V-=3,i=dbe;break;case 3:return C>>>=3,V-=3,i=CT,y.msg="invalid block type",x=-3,n.bitb=C,n.bitk=V,y.avail_in=Z,y.total_in+=L-y.next_in_index,y.next_in_index=L,n.write=E,n.inflate_flush(y,x)}break;case gQ:for(;V<32;){if(Z!==0)x=0;else return n.bitb=C,n.bitk=V,y.avail_in=Z,y.total_in+=L-y.next_in_index,y.next_in_index=L,n.write=E,n.inflate_flush(y,x);Z--,C|=(y.read_byte(L++)&255)<<V,V+=8}if((~C>>>16&65535)!=(C&65535))return i=CT,y.msg="invalid stored block lengths",x=-3,n.bitb=C,n.bitk=V,y.avail_in=Z,y.total_in+=L-y.next_in_index,y.next_in_index=L,n.write=E,n.inflate_flush(y,x);o=C&65535,C=V=0,i=o!==0?lbe:h!==0?GU:VV;break;case lbe:if(Z===0||P===0&&(E==n.end&&n.read!==0&&(E=0,P=E<n.read?n.read-E-1:n.end-E),P===0&&(n.write=E,x=n.inflate_flush(y,x),E=n.write,P=E<n.read?n.read-E-1:n.end-E,E==n.end&&n.read!==0&&(E=0,P=E<n.read?n.read-E-1:n.end-E),P===0)))return n.bitb=C,n.bitk=V,y.avail_in=Z,y.total_in+=L-y.next_in_index,y.next_in_index=L,n.write=E,n.inflate_flush(y,x);if(x=0,S=o,S>Z&&(S=Z),S>P&&(S=P),n.win.set(y.read_buf(L,S),E),L+=S,Z-=S,E+=S,P-=S,(o-=S)!==0)break;i=h!==0?GU:VV;break;case dbe:for(;V<14;){if(Z!==0)x=0;else return n.bitb=C,n.bitk=V,y.avail_in=Z,y.total_in+=L-y.next_in_index,y.next_in_index=L,n.write=E,n.inflate_flush(y,x);Z--,C|=(y.read_byte(L++)&255)<<V,V+=8}if(r=S=C&16383,(S&31)>29||(S>>5&31)>29)return i=CT,y.msg="too many length or distance symbols",x=-3,n.bitb=C,n.bitk=V,y.avail_in=Z,y.total_in+=L-y.next_in_index,y.next_in_index=L,n.write=E,n.inflate_flush(y,x);if(S=258+(S&31)+(S>>5&31),!a||a.length<S)a=[];else for(W=0;W<S;W++)a[W]=0;C>>>=14,V-=14,s=0,i=ube;case ube:for(;s<4+(r>>>10);){for(;V<3;){if(Z!==0)x=0;else return n.bitb=C,n.bitk=V,y.avail_in=Z,y.total_in+=L-y.next_in_index,y.next_in_index=L,n.write=E,n.inflate_flush(y,x);Z--,C|=(y.read_byte(L++)&255)<<V,V+=8}a[cbe[s++]]=C&7,C>>>=3,V-=3}for(;s<19;)a[cbe[s++]]=0;if(c[0]=7,S=f.inflate_trees_bits(a,c,d,p,y),S!=0)return x=S,x==-3&&(a=null,i=CT),n.bitb=C,n.bitk=V,y.avail_in=Z,y.total_in+=L-y.next_in_index,y.next_in_index=L,n.write=E,n.inflate_flush(y,x);s=0,i=mbe;case mbe:for(;S=r,!(s>=258+(S&31)+(S>>5&31));){let B,k;for(S=c[0];V<S;){if(Z!==0)x=0;else return n.bitb=C,n.bitk=V,y.avail_in=Z,y.total_in+=L-y.next_in_index,y.next_in_index=L,n.write=E,n.inflate_flush(y,x);Z--,C|=(y.read_byte(L++)&255)<<V,V+=8}if(S=p[(d[0]+(C&zd[S]))*3+1],k=p[(d[0]+(C&zd[S]))*3+2],k<16)C>>>=S,V-=S,a[s++]=k;else{for(W=k==18?7:k-14,B=k==18?11:3;V<S+W;){if(Z!==0)x=0;else return n.bitb=C,n.bitk=V,y.avail_in=Z,y.total_in+=L-y.next_in_index,y.next_in_index=L,n.write=E,n.inflate_flush(y,x);Z--,C|=(y.read_byte(L++)&255)<<V,V+=8}if(C>>>=S,V-=S,B+=C&zd[W],C>>>=W,V-=W,W=s,S=r,W+B>258+(S&31)+(S>>5&31)||k==16&&W<1)return a=null,i=CT,y.msg="invalid bit length repeat",x=-3,n.bitb=C,n.bitk=V,y.avail_in=Z,y.total_in+=L-y.next_in_index,y.next_in_index=L,n.write=E,n.inflate_flush(y,x);k=k==16?a[W-1]:0;do a[W++]=k;while(--B!==0);s=W}}if(d[0]=-1,G=[],I=[],w=[],M=[],G[0]=9,I[0]=6,S=r,S=f.inflate_trees_dynamic(257+(S&31),1+(S>>5&31),a,G,I,w,M,p,y),S!=0)return S==-3&&(a=null,i=CT),x=S,n.bitb=C,n.bitk=V,y.avail_in=Z,y.total_in+=L-y.next_in_index,y.next_in_index=L,n.write=E,n.inflate_flush(y,x);u.init(G[0],I[0],p,w[0],p,M[0]),i=ZU;case ZU:if(n.bitb=C,n.bitk=V,y.avail_in=Z,y.total_in+=L-y.next_in_index,y.next_in_index=L,n.write=E,(x=u.proc(n,y,x))!=1)return n.inflate_flush(y,x);if(x=0,u.free(y),L=y.next_in_index,Z=y.avail_in,C=n.bitb,V=n.bitk,E=n.write,P=E<n.read?n.read-E-1:n.end-E,h===0){i=VV;break}i=GU;case GU:if(n.write=E,x=n.inflate_flush(y,x),E=n.write,P=E<n.read?n.read-E-1:n.end-E,n.read!=n.write)return n.bitb=C,n.bitk=V,y.avail_in=Z,y.total_in+=L-y.next_in_index,y.next_in_index=L,n.write=E,n.inflate_flush(y,x);i=hbe;case hbe:return x=1,n.bitb=C,n.bitk=V,y.avail_in=Z,y.total_in+=L-y.next_in_index,y.next_in_index=L,n.write=E,n.inflate_flush(y,x);case CT:return x=-3,n.bitb=C,n.bitk=V,y.avail_in=Z,y.total_in+=L-y.next_in_index,y.next_in_index=L,n.write=E,n.inflate_flush(y,x);default:return x=-2,n.bitb=C,n.bitk=V,y.avail_in=Z,y.total_in+=L-y.next_in_index,y.next_in_index=L,n.write=E,n.inflate_flush(y,x)}}},n.free=function(y){n.reset(y,null),n.win=null,p=null},n.set_dictionary=function(y,x,S){n.win.set(y.subarray(x,x+S),0),n.read=n.write=S},n.sync_point=function(){return i==gQ?1:0}}var oit=32,rit=8,sit=0,fbe=1,pbe=2,bbe=3,gbe=4,ybe=5,yQ=6,qv=7,xbe=12,hy=13,ait=[0,0,255,255];function cit(){let e=this;e.mode=0,e.method=0,e.was=[0],e.need=0,e.marker=0,e.wbits=0;function t(n){return!n||!n.istate?-2:(n.total_in=n.total_out=0,n.msg=null,n.istate.mode=qv,n.istate.blocks.reset(n,null),0)}e.inflateEnd=function(n){return e.blocks&&e.blocks.free(n),e.blocks=null,0},e.inflateInit=function(n,i){return n.msg=null,e.blocks=null,i<8||i>15?(e.inflateEnd(n),-2):(e.wbits=i,n.istate.blocks=new iit(n,1<<i),t(n),0)},e.inflate=function(n,i){let o,r;if(!n||!n.istate||!n.next_in)return-2;let s=n.istate;for(i=i==Hnt?-5:0,o=-5;;)switch(s.mode){case sit:if(n.avail_in===0)return o;if(o=i,n.avail_in--,n.total_in++,((s.method=n.read_byte(n.next_in_index++))&15)!=rit){s.mode=hy,n.msg="unknown compression method",s.marker=5;break}if((s.method>>4)+8>s.wbits){s.mode=hy,n.msg="invalid win size",s.marker=5;break}s.mode=fbe;case fbe:if(n.avail_in===0)return o;if(o=i,n.avail_in--,n.total_in++,r=n.read_byte(n.next_in_index++)&255,((s.method<<8)+r)%31!==0){s.mode=hy,n.msg="incorrect header check",s.marker=5;break}if((r&oit)===0){s.mode=qv;break}s.mode=pbe;case pbe:if(n.avail_in===0)return o;o=i,n.avail_in--,n.total_in++,s.need=(n.read_byte(n.next_in_index++)&255)<<24&4278190080,s.mode=bbe;case bbe:if(n.avail_in===0)return o;o=i,n.avail_in--,n.total_in++,s.need+=(n.read_byte(n.next_in_index++)&255)<<16&16711680,s.mode=gbe;case gbe:if(n.avail_in===0)return o;o=i,n.avail_in--,n.total_in++,s.need+=(n.read_byte(n.next_in_index++)&255)<<8&65280,s.mode=ybe;case ybe:return n.avail_in===0?o:(o=i,n.avail_in--,n.total_in++,s.need+=n.read_byte(n.next_in_index++)&255,s.mode=yQ,2);case yQ:return s.mode=hy,n.msg="need dictionary",s.marker=0,-2;case qv:if(o=s.blocks.proc(n,o),o==-3){s.mode=hy,s.marker=0;break}if(o==0&&(o=i),o!=1)return o;o=i,s.blocks.reset(n,s.was),s.mode=xbe;case xbe:return n.avail_in=0,1;case hy:return-3;default:return-2}},e.inflateSetDictionary=function(n,i,o){let r=0,s=o;if(!n||!n.istate||n.istate.mode!=yQ)return-2;let a=n.istate;return s>=1<<a.wbits&&(s=(1<<a.wbits)-1,r=o-s),a.blocks.set_dictionary(i,r,s),a.mode=qv,0},e.inflateSync=function(n){let i,o,r,s,a;if(!n||!n.istate)return-2;let c=n.istate;if(c.mode!=hy&&(c.mode=hy,c.marker=0),(i=n.avail_in)===0)return-5;for(o=n.next_in_index,r=c.marker;i!==0&&r<4;)n.read_byte(o)==ait[r]?r++:n.read_byte(o)!==0?r=0:r=4-r,o++,i--;return n.total_in+=o-n.next_in_index,n.next_in_index=o,n.avail_in=i,c.marker=r,r!=4?-3:(s=n.total_in,a=n.total_out,t(n),n.total_in=s,n.total_out=a,c.mode=qv,0)},e.inflateSyncPoint=function(n){return!n||!n.istate||!n.istate.blocks?-2:n.istate.blocks.sync_point()}}function Tbe(){}Tbe.prototype={inflateInit(e){let t=this;return t.istate=new cit,e||(e=15),t.istate.inflateInit(t,e)},inflate(e){let t=this;return t.istate?t.istate.inflate(t,e):-2},inflateEnd(){let e=this;if(!e.istate)return-2;let t=e.istate.inflateEnd(e);return e.istate=null,t},inflateSync(){let e=this;return e.istate?e.istate.inflateSync(e):-2},inflateSetDictionary(e,t){let n=this;return n.istate?n.istate.inflateSetDictionary(n,e,t):-2},read_byte(e){return this.next_in[e]},read_buf(e,t){return this.next_in.subarray(e,e+t)}};function Sbe(e){let t=this,n=new Tbe,i=e&&e.chunkSize?Math.floor(e.chunkSize*2):128*1024,o=znt,r=new Uint8Array(i),s=!1;n.inflateInit(),n.next_out=r,t.append=function(a,c){let d=[],u,h,p=0,g=0,f=0;if(a.length!==0){n.next_in_index=0,n.next_in=a,n.avail_in=a.length;do{if(n.next_out_index=0,n.avail_out=i,n.avail_in===0&&!s&&(n.next_in_index=0,s=!0),u=n.inflate(o),s&&u===-5){if(n.avail_in!==0)throw new Error("inflating: bad input")}else if(u!==0&&u!==1)throw new Error("inflating: "+n.msg);if((s||u===1)&&n.avail_in===a.length)throw new Error("inflating: bad input");n.next_out_index&&(n.next_out_index===i?d.push(new Uint8Array(r)):d.push(r.subarray(0,n.next_out_index))),f+=n.next_out_index,c&&n.next_in_index>0&&n.next_in_index!=p&&(c(n.next_in_index),p=n.next_in_index)}while(n.avail_in>0||n.avail_out===0);return d.length>1?(h=new Uint8Array(f),d.forEach(function(y){h.set(y,g),g+=y.length})):h=d[0]?new Uint8Array(d[0]):new Uint8Array,h}},t.flush=function(){n.inflateEnd()}}var Npi=_(T(),1);var Wpi=_(T(),1);var VT="/",_Q=new Date(2107,11,31),TQ=new Date(1980,0,1),bi=void 0,Hd="undefined",i0="function";var vpi=_(T(),1);var $v=class{constructor(t){return class extends TransformStream{constructor(n,i){let o=new t(i);super({transform(r,s){s.enqueue(o.append(r))},flush(r){let s=o.flush();s&&r.enqueue(s)}})}}}};var lit=64,Cbe=2;try{typeof navigator!=Hd&&navigator.hardwareConcurrency&&(Cbe=navigator.hardwareConcurrency)}catch{}var dit={chunkSize:512*1024,maxWorkers:Cbe,terminateWorkerTimeout:5e3,useWebWorkers:!0,useCompressionStream:!0,workerScripts:bi,CompressionStreamNative:typeof CompressionStream!=Hd&&CompressionStream,DecompressionStreamNative:typeof DecompressionStream!=Hd&&DecompressionStream},py=Object.assign({},dit);function ew(){return py}function EU(e){return Math.max(e.chunkSize,lit)}function LV(e){let{baseURL:t,chunkSize:n,maxWorkers:i,terminateWorkerTimeout:o,useCompressionStream:r,useWebWorkers:s,Deflate:a,Inflate:c,CompressionStream:d,DecompressionStream:u,workerScripts:h}=e;if(fy("baseURL",t),fy("chunkSize",n),fy("maxWorkers",i),fy("terminateWorkerTimeout",o),fy("useCompressionStream",r),fy("useWebWorkers",s),a&&(py.CompressionStream=new $v(a)),c&&(py.DecompressionStream=new $v(c)),fy("CompressionStream",d),fy("DecompressionStream",u),h!==bi){let{deflate:p,inflate:g}=h;if((p||g)&&(py.workerScripts||(py.workerScripts={})),p){if(!Array.isArray(p))throw new Error("workerScripts.deflate must be an array");py.workerScripts.deflate=p}if(g){if(!Array.isArray(g))throw new Error("workerScripts.inflate must be an array");py.workerScripts.inflate=g}}}function fy(e,t){t!==bi&&(py[e]=t)}var Upi=_(T(),1);var Pbi=_(T(),1);var Vbi=_(T(),1);var Tbi=_(T(),1);var zpi=_(T(),1);var Bpi=_(T(),1),Vbe=[];for(let e=0;e<256;e++){let t=e;for(let n=0;n<8;n++)t&1?t=t>>>1^3988292384:t=t>>>1;Vbe[e]=t}var o0=class{constructor(t){this.crc=t||-1}append(t){let n=this.crc|0;for(let i=0,o=t.length|0;i<o;i++)n=n>>>8^Vbe[(n^t[i])&255];this.crc=n}get(){return~this.crc}};var tw=class extends TransformStream{constructor(){let t,n=new o0;super({transform(i,o){n.append(i),o.enqueue(i)},flush(){let i=new Uint8Array(4);new DataView(i.buffer).setUint32(0,n.get()),t.value=i}}),t=this}};var ubi=_(T(),1);var Jpi=_(T(),1);function RV(e){if(typeof TextEncoder==Hd){e=unescape(encodeURIComponent(e));let t=new Uint8Array(e.length);for(let n=0;n<t.length;n++)t[n]=e.charCodeAt(n);return t}else return new TextEncoder().encode(e)}var jpi=_(T(),1),ul={concat(e,t){if(e.length===0||t.length===0)return e.concat(t);let n=e[e.length-1],i=ul.getPartial(n);return i===32?e.concat(t):ul._shiftRight(t,i,n|0,e.slice(0,e.length-1))},bitLength(e){let t=e.length;if(t===0)return 0;let n=e[t-1];return(t-1)*32+ul.getPartial(n)},clamp(e,t){if(e.length*32<t)return e;e=e.slice(0,Math.ceil(t/32));let n=e.length;return t=t&31,n>0&&t&&(e[n-1]=ul.partial(t,e[n-1]&2147483648>>t-1,1)),e},partial(e,t,n){return e===32?t:(n?t|0:t<<32-e)+e*1099511627776},getPartial(e){return Math.round(e/1099511627776)||32},_shiftRight(e,t,n,i){for(i===void 0&&(i=[]);t>=32;t-=32)i.push(n),n=0;if(t===0)return i.concat(e);for(let s=0;s<e.length;s++)i.push(n|e[s]>>>t),n=e[s]<<32-t;let o=e.length?e[e.length-1]:0,r=ul.getPartial(o);return i.push(ul.partial(t+r&31,t+r>32?n:i.pop(),1)),i}},nw={bytes:{fromBits(e){let n=ul.bitLength(e)/8,i=new Uint8Array(n),o;for(let r=0;r<n;r++)(r&3)===0&&(o=e[r/4]),i[r]=o>>>24,o<<=8;return i},toBits(e){let t=[],n,i=0;for(n=0;n<e.length;n++)i=i<<8|e[n],(n&3)===3&&(t.push(i),i=0);return n&3&&t.push(ul.partial(8*(n&3),i)),t}}},Lbe={};Lbe.sha1=class{constructor(e){let t=this;t.blockSize=512,t._init=[1732584193,4023233417,2562383102,271733878,3285377520],t._key=[1518500249,1859775393,2400959708,3395469782],e?(t._h=e._h.slice(0),t._buffer=e._buffer.slice(0),t._length=e._length):t.reset()}reset(){let e=this;return e._h=e._init.slice(0),e._buffer=[],e._length=0,e}update(e){let t=this;typeof e=="string"&&(e=nw.utf8String.toBits(e));let n=t._buffer=ul.concat(t._buffer,e),i=t._length,o=t._length=i+ul.bitLength(e);if(o>9007199254740991)throw new Error("Cannot hash more than 2^53 - 1 bits");let r=new Uint32Array(n),s=0;for(let a=t.blockSize+i-(t.blockSize+i&t.blockSize-1);a<=o;a+=t.blockSize)t._block(r.subarray(16*s,16*(s+1))),s+=1;return n.splice(0,16*s),t}finalize(){let e=this,t=e._buffer,n=e._h;t=ul.concat(t,[ul.partial(1,1)]);for(let i=t.length+2;i&15;i++)t.push(0);for(t.push(Math.floor(e._length/4294967296)),t.push(e._length|0);t.length;)e._block(t.splice(0,16));return e.reset(),n}_f(e,t,n,i){if(e<=19)return t&n|~t&i;if(e<=39)return t^n^i;if(e<=59)return t&n|t&i|n&i;if(e<=79)return t^n^i}_S(e,t){return t<<e|t>>>32-e}_block(e){let t=this,n=t._h,i=Array(80);for(let d=0;d<16;d++)i[d]=e[d];let o=n[0],r=n[1],s=n[2],a=n[3],c=n[4];for(let d=0;d<=79;d++){d>=16&&(i[d]=t._S(1,i[d-3]^i[d-8]^i[d-14]^i[d-16]));let u=t._S(5,o)+t._f(d,r,s,a)+c+i[d]+t._key[Math.floor(d/20)]|0;c=a,a=s,s=t._S(30,r),r=o,o=u}n[0]=n[0]+o|0,n[1]=n[1]+r|0,n[2]=n[2]+s|0,n[3]=n[3]+a|0,n[4]=n[4]+c|0}};var SQ={};SQ.aes=class{constructor(e){let t=this;t._tables=[[[],[],[],[],[]],[[],[],[],[],[]]],t._tables[0][0][0]||t._precompute();let n=t._tables[0][4],i=t._tables[1],o=e.length,r,s,a,c=1;if(o!==4&&o!==6&&o!==8)throw new Error("invalid aes key size");for(t._key=[s=e.slice(0),a=[]],r=o;r<4*o+28;r++){let d=s[r-1];(r%o===0||o===8&&r%o===4)&&(d=n[d>>>24]<<24^n[d>>16&255]<<16^n[d>>8&255]<<8^n[d&255],r%o===0&&(d=d<<8^d>>>24^c<<24,c=c<<1^(c>>7)*283)),s[r]=s[r-o]^d}for(let d=0;r;d++,r--){let u=s[d&3?r:r-4];r<=4||d<4?a[d]=u:a[d]=i[0][n[u>>>24]]^i[1][n[u>>16&255]]^i[2][n[u>>8&255]]^i[3][n[u&255]]}}encrypt(e){return this._crypt(e,0)}decrypt(e){return this._crypt(e,1)}_precompute(){let e=this._tables[0],t=this._tables[1],n=e[4],i=t[4],o=[],r=[],s,a,c,d;for(let u=0;u<256;u++)r[(o[u]=u<<1^(u>>7)*283)^u]=u;for(let u=s=0;!n[u];u^=a||1,s=r[s]||1){let h=s^s<<1^s<<2^s<<3^s<<4;h=h>>8^h&255^99,n[u]=h,i[h]=u,d=o[c=o[a=o[u]]];let p=d*16843009^c*65537^a*257^u*16843008,g=o[h]*257^h*16843008;for(let f=0;f<4;f++)e[f][u]=g=g<<24^g>>>8,t[f][h]=p=p<<24^p>>>8}for(let u=0;u<5;u++)e[u]=e[u].slice(0),t[u]=t[u].slice(0)}_crypt(e,t){if(e.length!==4)throw new Error("invalid aes block size");let n=this._key[t],i=n.length/4-2,o=[0,0,0,0],r=this._tables[t],s=r[0],a=r[1],c=r[2],d=r[3],u=r[4],h=e[0]^n[0],p=e[t?3:1]^n[1],g=e[2]^n[2],f=e[t?1:3]^n[3],y=4,x,S,C;for(let V=0;V<i;V++)x=s[h>>>24]^a[p>>16&255]^c[g>>8&255]^d[f&255]^n[y],S=s[p>>>24]^a[g>>16&255]^c[f>>8&255]^d[h&255]^n[y+1],C=s[g>>>24]^a[f>>16&255]^c[h>>8&255]^d[p&255]^n[y+2],f=s[f>>>24]^a[h>>16&255]^c[p>>8&255]^d[g&255]^n[y+3],y+=4,h=x,p=S,g=C;for(let V=0;V<4;V++)o[t?3&-V:V]=u[h>>>24]<<24^u[p>>16&255]<<16^u[g>>8&255]<<8^u[f&255]^n[y++],x=h,h=p,p=g,g=f,f=x;return o}};var Rbe={getRandomValues(e){let t=new Uint32Array(e.buffer),n=i=>{let o=987654321,r=4294967295;return function(){return o=36969*(o&65535)+(o>>16)&r,i=18e3*(i&65535)+(i>>16)&r,(((o<<16)+i&r)/4294967296+.5)*(Math.random()>.5?1:-1)}};for(let i=0,o;i<e.length;i+=4){let r=n((o||Math.random())*4294967296);o=r()*987654071,t[i/4]=r()*4294967296|0}return e}},CQ={};CQ.ctrGladman=class{constructor(e,t){this._prf=e,this._initIv=t,this._iv=t}reset(){this._iv=this._initIv}update(e){return this.calculate(this._prf,e,this._iv)}incWord(e){if((e>>24&255)===255){let t=e>>16&255,n=e>>8&255,i=e&255;t===255?(t=0,n===255?(n=0,i===255?i=0:++i):++n):++t,e=0,e+=t<<16,e+=n<<8,e+=i}else e+=1<<24;return e}incCounter(e){(e[0]=this.incWord(e[0]))===0&&(e[1]=this.incWord(e[1]))}calculate(e,t,n){let i;if(!(i=t.length))return[];let o=ul.bitLength(t);for(let r=0;r<i;r+=4){this.incCounter(n);let s=e.encrypt(n);t[r]^=s[0],t[r+1]^=s[1],t[r+2]^=s[2],t[r+3]^=s[3]}return ul.clamp(t,o)}};var by={importKey(e){return new by.hmacSha1(nw.bytes.toBits(e))},pbkdf2(e,t,n,i){if(n=n||1e4,i<0||n<0)throw new Error("invalid params to pbkdf2");let o=(i>>5)+1<<2,r,s,a,c,d,u=new ArrayBuffer(o),h=new DataView(u),p=0,g=ul;for(t=nw.bytes.toBits(t),d=1;p<(o||1);d++){for(r=s=e.encrypt(g.concat(t,[d])),a=1;a<n;a++)for(s=e.encrypt(s),c=0;c<s.length;c++)r[c]^=s[c];for(a=0;p<(o||1)&&a<r.length;a++)h.setInt32(p,r[a]),p+=4}return u.slice(0,i/8)}};by.hmacSha1=class{constructor(e){let t=this,n=t._hash=Lbe.sha1,i=[[],[]];t._baseHash=[new n,new n];let o=t._baseHash[0].blockSize/32;e.length>o&&(e=new n().update(e).finalize());for(let r=0;r<o;r++)i[0][r]=e[r]^909522486,i[1][r]=e[r]^1549556828;t._baseHash[0].update(i[0]),t._baseHash[1].update(i[1]),t._resultHash=new n(t._baseHash[0])}reset(){let e=this;e._resultHash=new e._hash(e._baseHash[0]),e._updated=!1}update(e){let t=this;t._updated=!0,t._resultHash.update(e)}digest(){let e=this,t=e._resultHash.finalize(),n=new e._hash(e._baseHash[1]).update(t).finalize();return e.reset(),n}encrypt(e){if(this._updated)throw new Error("encrypt on already updated hmac called!");return this.update(e),this.digest(e)}};var rbi=_(T(),1);var uit=typeof crypto!=Hd&&typeof crypto.getRandomValues==i0,gy="Invalid password",LT="Invalid signature",r0="zipjs-abort-check-password";function IU(e){return uit?crypto.getRandomValues(e):Rbe.getRandomValues(e)}var ZV=16,mit="raw",Ebe={name:"PBKDF2"},hit={name:"HMAC"},fit="SHA-1",pit=Object.assign({hash:hit},Ebe),VQ=Object.assign({iterations:1e3,hash:{name:fit}},Ebe),bit=["deriveBits"],ow=[8,12,16],iw=[16,24,32],yy=10,git=[0,0,0,0],PU=typeof crypto!=Hd,aw=PU&&crypto.subtle,Ibe=PU&&typeof aw!=Hd,Of=nw.bytes,yit=SQ.aes,xit=CQ.ctrGladman,_it=by.hmacSha1,Zbe=PU&&Ibe&&typeof aw.importKey==i0,Gbe=PU&&Ibe&&typeof aw.deriveBits==i0,XU=class extends TransformStream{constructor({password:t,rawPassword:n,signed:i,encryptionStrength:o,checkPasswordOnly:r}){super({start(){Object.assign(this,{ready:new Promise(s=>this.resolveReady=s),password:Pbe(t,n),signed:i,strength:o-1,pending:new Uint8Array})},async transform(s,a){let c=this,{password:d,strength:u,resolveReady:h,ready:p}=c;d?(await Tit(c,u,d,cm(s,0,ow[u]+2)),s=cm(s,ow[u]+2),r?a.error(new Error(r0)):h()):await p;let g=new Uint8Array(s.length-yy-(s.length-yy)%ZV);a.enqueue(Xbe(c,s,g,0,yy,!0))},async flush(s){let{signed:a,ctr:c,hmac:d,pending:u,ready:h}=this;if(d&&c){await h;let p=cm(u,0,u.length-yy),g=cm(u,u.length-yy),f=new Uint8Array;if(p.length){let y=sw(Of,p);d.update(y);let x=c.update(y);f=rw(Of,x)}if(a){let y=cm(rw(Of,d.digest()),0,yy);for(let x=0;x<yy;x++)if(y[x]!=g[x])throw new Error(LT)}s.enqueue(f)}}})}},WU=class extends TransformStream{constructor({password:t,rawPassword:n,encryptionStrength:i}){let o;super({start(){Object.assign(this,{ready:new Promise(r=>this.resolveReady=r),password:Pbe(t,n),strength:i-1,pending:new Uint8Array})},async transform(r,s){let a=this,{password:c,strength:d,resolveReady:u,ready:h}=a,p=new Uint8Array;c?(p=await Sit(a,d,c),u()):await h;let g=new Uint8Array(p.length+r.length-r.length%ZV);g.set(p,0),s.enqueue(Xbe(a,r,g,p.length,0))},async flush(r){let{ctr:s,hmac:a,pending:c,ready:d}=this;if(a&&s){await d;let u=new Uint8Array;if(c.length){let h=s.update(sw(Of,c));a.update(h),u=rw(Of,h)}o.signature=rw(Of,a.digest()).slice(0,yy),r.enqueue(LQ(u,o.signature))}}}),o=this}};function Xbe(e,t,n,i,o,r){let{ctr:s,hmac:a,pending:c}=e,d=t.length-o;c.length&&(t=LQ(c,t),n=Lit(n,d-d%ZV));let u;for(u=0;u<=d-ZV;u+=ZV){let h=sw(Of,cm(t,u,u+ZV));r&&a.update(h);let p=s.update(h);r||a.update(p),n.set(rw(Of,p),u+i)}return e.pending=cm(t,u),n}async function Tit(e,t,n,i){let o=await Wbe(e,t,n,cm(i,0,ow[t])),r=cm(i,ow[t]);if(o[0]!=r[0]||o[1]!=r[1])throw new Error(gy)}async function Sit(e,t,n){let i=IU(new Uint8Array(ow[t])),o=await Wbe(e,t,n,i);return LQ(i,o)}async function Wbe(e,t,n,i){e.password=null;let o=await Cit(mit,n,pit,!1,bit),r=await Vit(Object.assign({salt:i},VQ),o,8*(iw[t]*2+2)),s=new Uint8Array(r),a=sw(Of,cm(s,0,iw[t])),c=sw(Of,cm(s,iw[t],iw[t]*2)),d=cm(s,iw[t]*2);return Object.assign(e,{keys:{key:a,authentication:c,passwordVerification:d},ctr:new xit(new yit(a),Array.from(git)),hmac:new _it(c)}),d}async function Cit(e,t,n,i,o){if(Zbe)try{return await aw.importKey(e,t,n,i,o)}catch{return Zbe=!1,by.importKey(t)}else return by.importKey(t)}async function Vit(e,t,n){if(Gbe)try{return await aw.deriveBits(e,t,n)}catch{return Gbe=!1,by.pbkdf2(t,e.salt,VQ.iterations,n)}else return by.pbkdf2(t,e.salt,VQ.iterations,n)}function Pbe(e,t){return t===bi?RV(e):t}function LQ(e,t){let n=e;return e.length+t.length&&(n=new Uint8Array(e.length+t.length),n.set(e,0),n.set(t,e.length)),n}function Lit(e,t){if(t&&t>e.length){let n=e;e=new Uint8Array(t),e.set(n,0)}return e}function cm(e,t,n){return e.subarray(t,n)}function rw(e,t){return e.fromBits(t)}function sw(e,t){return e.toBits(t)}var pbi=_(T(),1);var GV=12,vU=class extends TransformStream{constructor({password:t,passwordVerification:n,checkPasswordOnly:i}){super({start(){Object.assign(this,{password:t,passwordVerification:n}),Abe(this,t)},transform(o,r){let s=this;if(s.password){let a=vbe(s,o.subarray(0,GV));if(s.password=null,a[GV-1]!=s.passwordVerification)throw new Error(gy);o=o.subarray(GV)}i?r.error(new Error(r0)):r.enqueue(vbe(s,o))}})}},wU=class extends TransformStream{constructor({password:t,passwordVerification:n}){super({start(){Object.assign(this,{password:t,passwordVerification:n}),Abe(this,t)},transform(i,o){let r=this,s,a;if(r.password){r.password=null;let c=IU(new Uint8Array(GV));c[GV-1]=r.passwordVerification,s=new Uint8Array(i.length+c.length),s.set(wbe(r,c),0),a=GV}else s=new Uint8Array(i.length),a=0;s.set(wbe(r,i),a),o.enqueue(s)}})}};function vbe(e,t){let n=new Uint8Array(t.length);for(let i=0;i<t.length;i++)n[i]=Mbe(e)^t[i],RQ(e,n[i]);return n}function wbe(e,t){let n=new Uint8Array(t.length);for(let i=0;i<t.length;i++)n[i]=Mbe(e)^t[i],RQ(e,t[i]);return n}function Abe(e,t){let n=[305419896,591751049,878082192];Object.assign(e,{keys:n,crcKey0:new o0(n[0]),crcKey2:new o0(n[2])});for(let i=0;i<t.length;i++)RQ(e,t.charCodeAt(i))}function RQ(e,t){let[n,i,o]=e.keys;e.crcKey0.append([t]),n=~e.crcKey0.get(),i=Fbe(Math.imul(Fbe(i+Nbe(n)),134775813)+1),e.crcKey2.append([i>>>24]),o=~e.crcKey2.get(),e.keys=[n,i,o]}function Mbe(e){let t=e.keys[2]|2;return Nbe(Math.imul(t,t^1)>>>8)}function Nbe(e){return e&255}function Fbe(e){return e&4294967295}var kbe="deflate-raw",FU=class extends TransformStream{constructor(t,{chunkSize:n,CompressionStream:i,CompressionStreamNative:o}){super({});let{compressed:r,encrypted:s,useCompressionStream:a,zipCrypto:c,signed:d,level:u}=t,h=this,p,g,f=Ube(super.readable);(!s||c)&&d&&(p=new tw,f=Yf(f,p)),r&&(f=Bbe(f,a,{level:u,chunkSize:n},o,i)),s&&(c?f=Yf(f,new wU(t)):(g=new WU(t),f=Yf(f,g))),Dbe(h,f,()=>{let y;s&&!c&&(y=g.signature),(!s||c)&&d&&(y=new DataView(p.value.buffer).getUint32(0)),h.signature=y})}},AU=class extends TransformStream{constructor(t,{chunkSize:n,DecompressionStream:i,DecompressionStreamNative:o}){super({});let{zipCrypto:r,encrypted:s,signed:a,signature:c,compressed:d,useCompressionStream:u}=t,h,p,g=Ube(super.readable);s&&(r?g=Yf(g,new vU(t)):(p=new XU(t),g=Yf(g,p))),d&&(g=Bbe(g,u,{chunkSize:n},o,i)),(!s||r)&&a&&(h=new tw,g=Yf(g,h)),Dbe(this,g,()=>{if((!s||r)&&a){let f=new DataView(h.value.buffer);if(c!=f.getUint32(0,!1))throw new Error(LT)}})}};function Ube(e){return Yf(e,new TransformStream({transform(t,n){t&&t.length&&n.enqueue(t)}}))}function Dbe(e,t,n){t=Yf(t,new TransformStream({flush:n})),Object.defineProperty(e,"readable",{get(){return t}})}function Bbe(e,t,n,i,o){try{let r=t&&i?i:o;e=Yf(e,new r(kbe,n))}catch{if(t)try{e=Yf(e,new o(kbe,n))}catch{return e}else return e}return e}function Yf(e,t){return e.pipeThrough(t)}var Obe="message",Ybe="start",zbe="pull",ZQ="data",Hbe="ack",GQ="close",kU="deflate",UU="inflate";var MU=class extends TransformStream{constructor(t,n){super({});let i=this,{codecType:o}=t,r;o.startsWith(kU)?r=FU:o.startsWith(UU)&&(r=AU);let s=0,a=0,c=new r(t,n),d=super.readable,u=new TransformStream({transform(p,g){p&&p.length&&(a+=p.length,g.enqueue(p))},flush(){Object.assign(i,{inputSize:a})}}),h=new TransformStream({transform(p,g){p&&p.length&&(s+=p.length,g.enqueue(p))},flush(){let{signature:p}=c;Object.assign(i,{signature:p,outputSize:s,inputSize:a})}});Object.defineProperty(i,"readable",{get(){return d.pipeThrough(u).pipeThrough(c).pipeThrough(h)}})}},NU=class extends TransformStream{constructor(t){let n;super({transform:i,flush(o){n&&n.length&&o.enqueue(n)}});function i(o,r){if(n){let s=new Uint8Array(n.length+o.length);s.set(n),s.set(o,n.length),o=s,n=null}o.length>t?(r.enqueue(o.slice(0,t)),i(o.slice(t),r)):n=o}}};var Gbi=_(T(),1);var Qbe=typeof Worker!=Hd;var EV=class{constructor(t,{readable:n,writable:i},{options:o,config:r,streamOptions:s,useWebWorkers:a,transferStreams:c,scripts:d},u){let{signal:h}=s;return Object.assign(t,{busy:!0,readable:n.pipeThrough(new NU(r.chunkSize)).pipeThrough(new IQ(n,s),{signal:h}),writable:i,options:Object.assign({},o),scripts:d,transferStreams:c,terminate(){return new Promise(p=>{let{worker:g,busy:f}=t;g?(f?t.resolveTerminated=p:(g.terminate(),p()),t.interface=null):p()})},onTaskFinished(){let{resolveTerminated:p}=t;p&&(t.resolveTerminated=null,t.terminated=!0,t.worker.terminate(),p()),t.busy=!1,u(t)}}),(a&&Qbe?Rit:jbe)(t,r)}},IQ=class extends TransformStream{constructor(t,{onstart:n,onprogress:i,size:o,onend:r}){let s=0;super({async start(){n&&await EQ(n,o)},async transform(a,c){s+=a.length,i&&await EQ(i,s,o),c.enqueue(a)},async flush(){t.size=s,r&&await EQ(r,s)}})}};async function EQ(e,...t){try{await e(...t)}catch{}}function jbe(e,t){return{run:()=>Zit(e,t)}}function Rit(e,t){let{baseURL:n,chunkSize:i}=t;if(!e.interface){let o;try{o=Iit(e.scripts[0],n,e)}catch{return Qbe=!1,jbe(e,t)}Object.assign(e,{worker:o,interface:{run:()=>Git(e,{chunkSize:i})}})}return e.interface}async function Zit({options:e,readable:t,writable:n,onTaskFinished:i},o){try{let r=new MU(e,o);await t.pipeThrough(r).pipeTo(n,{preventClose:!0,preventAbort:!0});let{signature:s,inputSize:a,outputSize:c}=r;return{signature:s,inputSize:a,outputSize:c}}finally{i()}}async function Git(e,t){let n,i,o=new Promise((p,g)=>{n=p,i=g});Object.assign(e,{reader:null,writer:null,resolveResult:n,rejectResult:i,result:o});let{readable:r,options:s,scripts:a}=e,{writable:c,closed:d}=Eit(e.writable),u=DU({type:Ybe,scripts:a.slice(1),options:s,config:t,readable:r,writable:c},e);u||Object.assign(e,{reader:r.getReader(),writer:c.getWriter()});let h=await o;return u||await c.getWriter().close(),await d,h}function Eit(e){let t,n=new Promise(o=>t=o);return{writable:new WritableStream({async write(o){let r=e.getWriter();await r.ready,await r.write(o),r.releaseLock()},close(){t()},abort(o){return e.getWriter().abort(o)}}),closed:n}}var Kbe=!0,Jbe=!0;function Iit(e,t,n){let i={type:"module"},o,r;typeof e==i0&&(e=e());try{o=new URL(e,t)}catch{o=e}if(Kbe)try{r=new Worker(o)}catch{Kbe=!1,r=new Worker(o,i)}else r=new Worker(o,i);return r.addEventListener(Obe,s=>Xit(s,n)),r}function DU(e,{worker:t,writer:n,onTaskFinished:i,transferStreams:o}){try{let{value:r,readable:s,writable:a}=e,c=[];if(r&&(r.byteLength<r.buffer.byteLength?e.value=r.buffer.slice(0,r.byteLength):e.value=r.buffer,c.push(e.value)),o&&Jbe?(s&&c.push(s),a&&c.push(a)):e.readable=e.writable=null,c.length)try{return t.postMessage(e,c),!0}catch{Jbe=!1,e.readable=e.writable=null,t.postMessage(e)}else t.postMessage(e)}catch(r){throw n&&n.releaseLock(),i(),r}}async function Xit({data:e},t){let{type:n,value:i,messageId:o,result:r,error:s}=e,{reader:a,writer:c,resolveResult:d,rejectResult:u,onTaskFinished:h}=t;try{if(s){let{message:g,stack:f,code:y,name:x}=s,S=new Error(g);Object.assign(S,{stack:f,code:y,name:x}),p(S)}else{if(n==zbe){let{value:g,done:f}=await a.read();DU({type:ZQ,value:g,done:f,messageId:o},t)}n==ZQ&&(await c.ready,await c.write(new Uint8Array(i)),DU({type:Hbe,messageId:o},t)),n==GQ&&p(null,r)}}catch(g){DU({type:GQ,messageId:o},t),p(g)}function p(g,f){g?u(g):d(f),c&&c.releaseLock(),h()}}var RT=[],XQ=[];var qbe=0;async function BU(e,t){let{options:n,config:i}=t,{transferStreams:o,useWebWorkers:r,useCompressionStream:s,codecType:a,compressed:c,signed:d,encrypted:u}=n,{workerScripts:h,maxWorkers:p}=i;t.transferStreams=o||o===bi;let g=!c&&!d&&!u&&!t.transferStreams;return t.useWebWorkers=!g&&(r||r===bi&&i.useWebWorkers),t.scripts=t.useWebWorkers&&h?h[a]:[],n.useCompressionStream=s||s===bi&&i.useCompressionStream,(await f()).run();async function f(){let x=RT.find(S=>!S.busy);if(x)return $be(x),new EV(x,e,t,y);if(RT.length<p){let S={indexWorker:qbe};return qbe++,RT.push(S),new EV(S,e,t,y)}else return new Promise(S=>XQ.push({resolve:S,stream:e,workerOptions:t}))}function y(x){if(XQ.length){let[{resolve:S,stream:C,workerOptions:V}]=XQ.splice(0,1);S(new EV(x,C,V,y))}else x.worker?($be(x),Wit(x,t)):RT=RT.filter(S=>S!=x)}}function Wit(e,t){let{config:n}=t,{terminateWorkerTimeout:i}=n;Number.isFinite(i)&&i>=0&&(e.terminated?e.terminated=!1:e.terminateTimeout=setTimeout(async()=>{RT=RT.filter(o=>o!=e);try{await e.terminate()}catch{}},i))}function $be(e){let{terminateTimeout:t}=e;t&&(clearTimeout(t),e.terminateTimeout=null)}var Abi=_(T(),1);var Pit="Writer iterator completed too soon",vit="Writer not initialized",wit="text/plain";var Fit="Content-Type";var Ait=64*1024,vQ="writable",IV=class{constructor(){this.size=0}init(){this.initialized=!0}},OU=class extends IV{get readable(){let t=this,{chunkSize:n=Ait}=t,i=new ReadableStream({start(){this.chunkOffset=0},async pull(o){let{offset:r=0,size:s,diskNumberStart:a}=i,{chunkOffset:c}=this,d=s===bi?n:Math.min(n,s-c),u=await Da(t,r+c,d,a);o.enqueue(u),c+n>s||s===bi&&!u.length&&d?o.close():this.chunkOffset+=n}});return i}},WQ=class extends IV{constructor(){super();let t=this,n=new WritableStream({write(i){if(!t.initialized)throw new Error(vit);return t.writeUint8Array(i)}});Object.defineProperty(t,vQ,{get(){return n}})}writeUint8Array(){}};var YU=class extends WQ{constructor(t){super(),Object.assign(this,{data:"data:"+(t||"")+";base64,",pending:[]})}writeUint8Array(t){let n=this,i=0,o=n.pending,r=n.pending.length;for(n.pending="",i=0;i<Math.floor((r+t.length)/3)*3-r;i++)o+=String.fromCharCode(t[i]);for(;i<t.length;i++)n.pending+=String.fromCharCode(t[i]);o.length>2?n.data+=btoa(o):n.pending=o}getData(){return this.data+btoa(this.pending)}},s0=class extends OU{constructor(t){super(),Object.assign(this,{blob:t,size:t.size})}async readUint8Array(t,n){let i=this,o=t+n,s=await(t||o<i.size?i.blob.slice(t,o):i.blob).arrayBuffer();return s.byteLength>n&&(s=s.slice(t,o)),new Uint8Array(s)}},cw=class extends IV{constructor(t){super();let n=this,i=new TransformStream,o=[];t&&o.push([Fit,t]),Object.defineProperty(n,vQ,{get(){return i.writable}}),n.blob=new Response(i.readable,{headers:o}).blob()}getData(){return this.blob}},zU=class extends s0{constructor(t){super(new Blob([t],{type:wit}))}},HU=class extends cw{constructor(t){super(t),Object.assign(this,{encoding:t,utf8:!t||t.toLowerCase()=="utf-8"})}async getData(){let{encoding:t,utf8:n}=this,i=await super.getData();if(i.text&&n)return i.text();{let o=new FileReader;return new Promise((r,s)=>{Object.assign(o,{onload:({target:a})=>r(a.result),onerror:()=>s(o.error)}),o.readAsText(i,t)})}}};var PQ=class extends OU{constructor(t){super(),this.readers=t}async init(){let t=this,{readers:n}=t;t.lastDiskNumber=0,t.lastDiskOffset=0,await Promise.all(n.map(async(i,o)=>{await i.init(),o!=n.length-1&&(t.lastDiskOffset+=i.size),t.size+=i.size})),super.init()}async readUint8Array(t,n,i=0){let o=this,{readers:r}=this,s,a=i;a==-1&&(a=r.length-1);let c=t;for(;c>=r[a].size;)c-=r[a].size,a++;let d=r[a],u=d.size;if(c+n<=u)s=await Da(d,c,n);else{let h=u-c;s=new Uint8Array(n),s.set(await Da(d,c,h)),s.set(await o.readUint8Array(t+h,n-h,i),h)}return o.lastDiskNumber=Math.max(a,o.lastDiskNumber),s}},KU=class extends IV{constructor(t,n=4294967295){super();let i=this;Object.assign(i,{diskNumber:0,diskOffset:0,size:0,maxSize:n,availableSize:n});let o,r,s,a=new WritableStream({async write(u){let{availableSize:h}=i;if(s)u.length>=h?(await c(u.slice(0,h)),await d(),i.diskOffset+=o.size,i.diskNumber++,s=null,await this.write(u.slice(h))):await c(u);else{let{value:p,done:g}=await t.next();if(g&&!p)throw new Error(Pit);o=p,o.size=0,o.maxSize&&(i.maxSize=o.maxSize),i.availableSize=i.maxSize,await Hf(o),r=p.writable,s=r.getWriter(),await this.write(u)}},async close(){await s.ready,await d()}});Object.defineProperty(i,vQ,{get(){return a}});async function c(u){let h=u.length;h&&(await s.ready,await s.write(u),o.size+=h,i.size+=h,i.availableSize-=h)}async function d(){r.size=o.size,await s.close()}}};async function Hf(e,t){if(e.init&&!e.initialized)await e.init(t);else return Promise.resolve()}function JU(e){return Array.isArray(e)&&(e=new PQ(e)),e instanceof ReadableStream&&(e={readable:e}),e}function QU(e){e.writable===bi&&typeof e.next==i0&&(e=new KU(e)),e instanceof WritableStream&&(e={writable:e});let{writable:t}=e;return t.size===bi&&(t.size=0),e instanceof KU||Object.assign(e,{diskNumber:0,diskOffset:0,availableSize:1/0,maxSize:1/0}),e}function Da(e,t,n,i){return e.readUint8Array(t,n,i)}var $bi=_(T(),1);var Dbi=_(T(),1);var Nbi=_(T(),1),e0e="\0\u263A\u263B\u2665\u2666\u2663\u2660\u2022\u25D8\u25CB\u25D9\u2642\u2640\u266A\u266B\u263C\u25BA\u25C4\u2195\u203C\xB6\xA7\u25AC\u21A8\u2191\u2193\u2192\u2190\u221F\u2194\u25B2\u25BC !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u2302\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xA2\xA3\xA5\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0 ".split(""),Mit=e0e.length==256;function t0e(e){if(Mit){let t="";for(let n=0;n<e.length;n++)t+=e0e[e[n]];return t}else return new TextDecoder().decode(e)}function lw(e,t){return t&&t.trim().toLowerCase()=="cp437"?t0e(e):new TextDecoder(t).decode(e)}var Obi=_(T(),1),wQ="filename",FQ="rawFilename",AQ="comment",MQ="rawComment",NQ="uncompressedSize",kQ="compressedSize",UQ="offset",jU="diskNumberStart",XV="lastModDate",qU="rawLastModDate",dw="lastAccessDate",n0e="rawLastAccessDate",uw="creationDate",i0e="rawCreationDate",DQ="internalFileAttribute",BQ="internalFileAttributes",OQ="externalFileAttribute",YQ="externalFileAttributes",zQ="msDosCompatible",$U="zip64",HQ="encrypted",KQ="version",JQ="versionMadeBy",QQ="zipCrypto",jQ="directory",qQ="executable",Nit=[wQ,FQ,kQ,NQ,XV,qU,AQ,MQ,dw,uw,UQ,jU,jU,DQ,BQ,OQ,YQ,zQ,$U,HQ,KQ,JQ,QQ,jQ,qQ,"bitFlag","signature","filenameUTF8","commentUTF8","compressionMethod","extraField","rawExtraField","extraFieldZip64","extraFieldUnicodePath","extraFieldUnicodeComment","extraFieldAES","extraFieldNTFS","extraFieldExtendedTimestamp"],xy=class{constructor(t){Nit.forEach(n=>this[n]=t[n])}};var $Q="File format is not recognized",Bit="End of central directory not found",Oit="End of Zip64 central directory locator not found",Yit="Central directory header not found",zit="Local file header not found",Hit="Zip64 extra field not found",Kit="File contains encrypted entry",Jit="Encryption method not supported",o0e="Compression method not supported",r0e="Split zip file",s0e="utf-8",a0e="cp437",Qit=[[NQ,4294967295],[kQ,4294967295],[UQ,4294967295],[jU,65535]],jit={[65535]:{getValue:ys,bytes:4},[4294967295]:{getValue:eD,bytes:8}},lD=class{constructor(t,n={}){Object.assign(this,{reader:JU(t),options:n,config:ew()})}async*getEntriesGenerator(t={}){let n=this,{reader:i}=n,{config:o}=n;if(await Hf(i),(i.size===bi||!i.readUint8Array)&&(i=new s0(await new Response(i.readable).blob()),await Hf(i)),i.size<22)throw new Error($Q);i.chunkSize=EU(o);let r=await not(i,101010256,i.size,22,65535*16);if(!r){let A=await Da(i,0,4),b=Ca(A);throw ys(b)==134695760?new Error(r0e):new Error(Bit)}let s=Ca(r),a=ys(s,12),c=ys(s,16),d=r.offset,u=Sa(s,20),h=d+22+u,p=Sa(s,4),g=i.lastDiskNumber||0,f=Sa(s,6),y=Sa(s,8),x=0,S=0;if(c==4294967295||a==4294967295||y==65535||f==65535){let A=await Da(i,r.offset-20,20),b=Ca(A);if(ys(b,0)==117853008){c=eD(b,8);let R=await Da(i,c,56,-1),G=Ca(R),I=r.offset-20-56;if(ys(G,0)!=101075792&&c!=I){let w=c;c=I,x=c-w,R=await Da(i,c,56,-1),G=Ca(R)}if(ys(G,0)!=101075792)throw new Error(Oit);p==65535&&(p=ys(G,16)),f==65535&&(f=ys(G,20)),y==65535&&(y=eD(G,32)),a==4294967295&&(a=eD(G,40)),c-=a}}if(c>=i.size&&(x=i.size-c-a-22,c=i.size-a-22),g!=p)throw new Error(r0e);if(c<0)throw new Error($Q);let C=0,V=await Da(i,c,a,f),L=Ca(V);if(a){let A=r.offset-a;if(ys(L,C)!=33639248&&c!=A){let b=c;c=A,x+=c-b,V=await Da(i,c,a,f),L=Ca(V)}}let Z=r.offset-c-(i.lastDiskOffset||0);if(a!=Z&&Z>=0&&(a=Z,V=await Da(i,c,a,f),L=Ca(V)),c<0||c>=i.size)throw new Error($Q);let E=ml(n,t,"filenameEncoding"),P=ml(n,t,"commentEncoding");for(let A=0;A<y;A++){let b=new t4(i,o,n.options);if(ys(L,C)!=33639248)throw new Error(Yit);l0e(b,L,C+6);let R=!!b.bitFlag.languageEncodingFlag,G=C+46,I=G+b.filenameLength,w=I+b.extraFieldLength,M=Sa(L,C+4),B=M>>8==0,k=M>>8==3,O=V.subarray(G,I),N=Sa(L,C+32),z=w+N,K=V.subarray(w,z),te=R,H=R,j=ys(L,C+38),ee=B&&(WV(L,C+38)&16)==16||k&&(j>>16&16384)==16384||O.length&&O[O.length-1]==VT.charCodeAt(0),fe=k&&(j>>16&73)==73,Te=ys(L,C+42)+x;Object.assign(b,{versionMadeBy:M,msDosCompatible:B,compressedSize:0,uncompressedSize:0,commentLength:N,directory:ee,offset:Te,diskNumberStart:Sa(L,C+34),internalFileAttributes:Sa(L,C+36),externalFileAttributes:j,rawFilename:O,filenameUTF8:te,commentUTF8:H,rawExtraField:V.subarray(I,w),executable:fe}),b.internalFileAttribute=b.internalFileAttributes,b.externalFileAttribute=b.externalFileAttributes;let de=ml(n,t,"decodeText")||lw,xe=te?s0e:E||a0e,Ce=H?s0e:P||a0e,Ie=de(O,xe);Ie===bi&&(Ie=lw(O,xe));let Le=de(K,Ce);Le===bi&&(Le=lw(K,Ce)),Object.assign(b,{rawComment:K,filename:Ie,comment:Le,directory:ee||Ie.endsWith(VT)}),S=Math.max(Te,S),d0e(b,b,L,C+6),b.zipCrypto=b.encrypted&&!b.extraFieldAES;let Ne=new xy(b);Ne.getData=(qe,Rt)=>b.getData(qe,Ne,Rt),C=z;let{onprogress:Oe}=t;if(Oe)try{await Oe(A+1,y,new xy(b))}catch{}yield Ne}let W=ml(n,t,"extractPrependedData"),v=ml(n,t,"extractAppendedData");return W&&(n.prependedData=S>0?await Da(i,0,S):new Uint8Array),n.comment=u?await Da(i,d+22,u):new Uint8Array,v&&(n.appendedData=h<i.size?await Da(i,h,i.size-h):new Uint8Array),!0}async getEntries(t={}){let n=[];for await(let i of this.getEntriesGenerator(t))n.push(i);return n}async close(){}};var t4=class{constructor(t,n,i){Object.assign(this,{reader:t,config:n,options:i})}async getData(t,n,i={}){let o=this,{reader:r,offset:s,diskNumberStart:a,extraFieldAES:c,compressionMethod:d,config:u,bitFlag:h,signature:p,rawLastModDate:g,uncompressedSize:f,compressedSize:y}=o,x=n.localDirectory={},S=await Da(r,s,30,a),C=Ca(S),V=ml(o,i,"password"),L=ml(o,i,"rawPassword"),Z=ml(o,i,"passThrough");if(V=V&&V.length&&V,L=L&&L.length&&L,c&&c.originalCompressionMethod!=99)throw new Error(o0e);if(d!=0&&d!=8&&!Z)throw new Error(o0e);if(ys(C,0)!=67324752)throw new Error(zit);l0e(x,C,4),x.rawExtraField=x.extraFieldLength?await Da(r,s+30+x.filenameLength,x.extraFieldLength,a):new Uint8Array,d0e(o,x,C,4,!0),Object.assign(n,{lastAccessDate:x.lastAccessDate,creationDate:x.creationDate});let E=o.encrypted&&x.encrypted&&!Z,P=E&&!c;if(Z||(n.zipCrypto=P),E){if(!P&&c.strength===bi)throw new Error(Jit);if(!V&&!L)throw new Error(Kit)}let W=s+30+x.filenameLength+x.extraFieldLength,v=y,A=r.readable;Object.assign(A,{diskNumberStart:a,offset:W,size:v});let b=ml(o,i,"signal"),R=ml(o,i,"checkPasswordOnly");R&&(t=new WritableStream),t=QU(t),await Hf(t,Z?y:f);let{writable:G}=t,{onstart:I,onprogress:w,onend:M}=i,B={options:{codecType:UU,password:V,rawPassword:L,zipCrypto:P,encryptionStrength:c&&c.strength,signed:ml(o,i,"checkSignature")&&!Z,passwordVerification:P&&(h.dataDescriptor?g>>>8&255:p>>>24&255),signature:p,compressed:d!=0&&!Z,encrypted:o.encrypted&&!Z,useWebWorkers:ml(o,i,"useWebWorkers"),useCompressionStream:ml(o,i,"useCompressionStream"),transferStreams:ml(o,i,"transferStreams"),checkPasswordOnly:R},config:u,streamOptions:{signal:b,size:v,onstart:I,onprogress:w,onend:M}},k=0;try{({outputSize:k}=await BU({readable:A,writable:G},B))}catch(O){if(!R||O.message!=r0)throw O}finally{let O=ml(o,i,"preventClose");G.size+=k,!O&&!G.locked&&await G.getWriter().close()}return R?bi:t.getData?t.getData():G}};function l0e(e,t,n){let i=e.rawBitFlag=Sa(t,n+2),o=(i&1)==1,r=ys(t,n+6);Object.assign(e,{encrypted:o,version:Sa(t,n),bitFlag:{level:(i&6)>>1,dataDescriptor:(i&8)==8,languageEncodingFlag:(i&2048)==2048},rawLastModDate:r,lastModDate:iot(r),filenameLength:Sa(t,n+22),extraFieldLength:Sa(t,n+24)})}function d0e(e,t,n,i,o){let{rawExtraField:r}=t,s=t.extraField=new Map,a=Ca(new Uint8Array(r)),c=0;try{for(;c<r.length;){let S=Sa(a,c),C=Sa(a,c+2);s.set(S,{type:S,data:r.slice(c+4,c+4+C)}),c+=4+C}}catch{}let d=Sa(n,i+4);Object.assign(t,{signature:ys(n,i+10),uncompressedSize:ys(n,i+18),compressedSize:ys(n,i+14)});let u=s.get(1);u&&(qit(u,t),t.extraFieldZip64=u);let h=s.get(28789);h&&(c0e(h,wQ,FQ,t,e),t.extraFieldUnicodePath=h);let p=s.get(25461);p&&(c0e(p,AQ,MQ,t,e),t.extraFieldUnicodeComment=p);let g=s.get(39169);g?($it(g,t,d),t.extraFieldAES=g):t.compressionMethod=d;let f=s.get(10);f&&(eot(f,t),t.extraFieldNTFS=f);let y=s.get(21589);y&&(tot(y,t,o),t.extraFieldExtendedTimestamp=y);let x=s.get(6534);x&&(t.extraFieldUSDZ=x)}function qit(e,t){t.zip64=!0;let n=Ca(e.data),i=Qit.filter(([o,r])=>t[o]==r);for(let o=0,r=0;o<i.length;o++){let[s,a]=i[o];if(t[s]==a){let c=jit[a];t[s]=e[s]=c.getValue(n,r),r+=c.bytes}else if(e[s])throw new Error(Hit)}}function c0e(e,t,n,i,o){let r=Ca(e.data),s=new o0;s.append(o[n]);let a=Ca(new Uint8Array(4));a.setUint32(0,s.get(),!0);let c=ys(r,1);Object.assign(e,{version:WV(r,0),[t]:lw(e.data.subarray(5)),valid:!o.bitFlag.languageEncodingFlag&&c==ys(a,0)}),e.valid&&(i[t]=e[t],i[t+"UTF8"]=!0)}function $it(e,t,n){let i=Ca(e.data),o=WV(i,4);Object.assign(e,{vendorVersion:WV(i,0),vendorId:WV(i,2),strength:o,originalCompressionMethod:n,compressionMethod:Sa(i,5)}),t.compressionMethod=e.compressionMethod}function eot(e,t){let n=Ca(e.data),i=4,o;try{for(;i<e.data.length&&!o;){let r=Sa(n,i),s=Sa(n,i+2);r==1&&(o=e.data.slice(i+4,i+4+s)),i+=4+s}}catch{}try{if(o&&o.length==24){let r=Ca(o),s=r.getBigUint64(0,!0),a=r.getBigUint64(8,!0),c=r.getBigUint64(16,!0);Object.assign(e,{rawLastModDate:s,rawLastAccessDate:a,rawCreationDate:c});let d=e4(s),u=e4(a),h=e4(c),p={lastModDate:d,lastAccessDate:u,creationDate:h};Object.assign(e,p),Object.assign(t,p)}}catch{}}function tot(e,t,n){let i=Ca(e.data),o=WV(i,0),r=[],s=[];n?((o&1)==1&&(r.push(XV),s.push(qU)),(o&2)==2&&(r.push(dw),s.push(n0e)),(o&4)==4&&(r.push(uw),s.push(i0e))):e.data.length>=5&&(r.push(XV),s.push(qU));let a=1;r.forEach((c,d)=>{if(e.data.length>=a+4){let u=ys(i,a);t[c]=e[c]=new Date(u*1e3);let h=s[d];e[h]=u}a+=4})}async function not(e,t,n,i,o){let r=new Uint8Array(4),s=Ca(r);oot(s,0,t);let a=i+o;return await c(i)||await c(Math.min(a,n));async function c(d){let u=n-d,h=await Da(e,u,d);for(let p=h.length-i;p>=0;p--)if(h[p]==r[0]&&h[p+1]==r[1]&&h[p+2]==r[2]&&h[p+3]==r[3])return{offset:u+p,buffer:h.slice(p,p+i).buffer}}}function ml(e,t,n){return t[n]===bi?e.options[n]:t[n]}function iot(e){let t=(e&4294901760)>>16,n=e&65535;try{return new Date(1980+((t&65024)>>9),((t&480)>>5)-1,t&31,(n&63488)>>11,(n&2016)>>5,(n&31)*2,0)}catch{}}function e4(e){return new Date(Number(e/BigInt(1e4)-BigInt(116444736e5)))}function WV(e,t){return e.getUint8(t)}function Sa(e,t){return e.getUint16(t,!0)}function ys(e,t){return e.getUint32(t,!0)}function eD(e,t){return Number(e.getBigUint64(t,!0))}function oot(e,t,n){e.setUint32(t,n,!0)}function Ca(e){return new DataView(e.buffer)}var a0i=_(T(),1);var cot="File already exists",lot="Zip file comment exceeds 64KB",dot="File entry comment exceeds 64KB",uot="File entry name exceeds 64KB",f0e="Version exceeds 65535",mot="The strength must equal 1, 2, or 3",hot="Extra field type exceeds 65535",fot="Extra field data exceeds 64KB",b4="Zip64 is not supported (make sure 'keepOrder' is set to 'true')",pot="Undefined uncompressed size",p0e=new Uint8Array([7,0,2,0,65,69,3,0,0]),h4=0,b0e=[],mD=class{constructor(t,n={}){t=QU(t);let i=t.availableSize!==bi&&t.availableSize>0&&t.availableSize!==1/0&&t.maxSize!==bi&&t.maxSize>0&&t.maxSize!==1/0;Object.assign(this,{writer:t,addSplitZipSignature:i,options:n,config:ew(),files:new Map,filenames:new Set,offset:n.offset===bi?t.writable.size:n.offset,pendingEntriesSize:0,pendingAddFileCalls:new Set,bufferedWrites:0})}async add(t="",n,i={}){let o=this,{pendingAddFileCalls:r,config:s}=o;h4<s.maxWorkers?h4++:await new Promise(c=>b0e.push(c));let a;try{if(t=t.trim(),o.filenames.has(t))throw new Error(cot);return o.filenames.add(t),a=bot(o,t,n,i),r.add(a),await a}catch(c){throw o.filenames.delete(t),c}finally{r.delete(a);let c=b0e.shift();c?c():h4--}}async close(t=new Uint8Array,n={}){let i=this,{pendingAddFileCalls:o,writer:r}=this,{writable:s}=r;for(;o.size;)await Promise.allSettled(Array.from(o));return await Lot(this,t,n),Ji(i,n,"preventClose")||await s.getWriter().close(),r.getData?r.getData():s}};async function bot(e,t,n,i){t=t.trim();let o=Ji(e,i,zQ),r=Ji(e,i,JQ,o?20:768),s=Ji(e,i,qQ);if(r>65535)throw new Error(f0e);let a=Ji(e,i,YQ,0);a===0&&(a=Ji(e,i,OQ,0)),!i.directory&&t.endsWith(VT)&&(i.directory=!0),Ji(e,i,jQ)?(t.endsWith(VT)||(t+=VT),a===0&&(o?a=16:a=16384<<16)):!o&&a===0&&(s?a=493<<16:a=420<<16);let d=Ji(e,i,"encodeText",RV),u=d(t);if(u===bi&&(u=RV(t)),ji(u)>65535)throw new Error(uot);let h=i.comment||"",p=d(h);if(p===bi&&(p=RV(h)),ji(p)>65535)throw new Error(dot);let g=Ji(e,i,KQ,20);if(g>65535)throw new Error(f0e);let f=Ji(e,i,XV,new Date),y=Ji(e,i,dw),x=Ji(e,i,uw),S=Ji(e,i,BQ,0);S===0&&(S=Ji(e,i,DQ,0));let C=Ji(e,i,"passThrough"),V,L;C||(V=Ji(e,i,"password"),L=Ji(e,i,"rawPassword"));let Z=Ji(e,i,"encryptionStrength",3),E=Ji(e,i,QQ),P=Ji(e,i,"extendedTimestamp",!0),W=Ji(e,i,"keepOrder",!0),v=Ji(e,i,"level"),A=Ji(e,i,"useWebWorkers"),b=Ji(e,i,"bufferedWrite"),R=Ji(e,i,"dataDescriptorSignature",!1),G=Ji(e,i,"signal"),I=Ji(e,i,"useUnicodeFileNames",!0),w=Ji(e,i,"useCompressionStream"),M=Ji(e,i,"compressionMethod"),B=Ji(e,i,"dataDescriptor",!0),k=Ji(e,i,$U);if(!E&&(V!==bi||L!==bi)&&!(Z>=1&&Z<=3))throw new Error(mot);let O=new Uint8Array,{extraField:N}=i;if(N){let ke=0,Ht=0;N.forEach(ut=>ke+=4+ji(ut)),O=new Uint8Array(ke),N.forEach((ut,mt)=>{if(mt>65535)throw new Error(hot);if(ji(ut)>65535)throw new Error(fot);Xs(O,new Uint16Array([mt]),Ht),Xs(O,new Uint16Array([ji(ut)]),Ht+2),Xs(O,ut,Ht+4),Ht+=4+ji(ut)})}let z=0,K=0,te=0;if(C&&({uncompressedSize:te}=i,te===bi))throw new Error(pot);let H=k===!0;n&&(n=JU(n),await Hf(n),C?z=g0e(te):n.size===bi?(B=!0,(k||k===bi)&&(k=!0,te=z=4294967296)):(te=n.size,z=g0e(te)));let{diskOffset:j,diskNumber:ee,maxSize:fe}=e.writer,Te=H||te>4294967295,de=H||z>4294967295,xe=H||e.offset+e.pendingEntriesSize-j>4294967295,Ie=Ji(e,i,"supportZip64SplitFile",!0)&&H||ee+Math.ceil(e.pendingEntriesSize/fe)>65535;if(xe||Te||de||Ie){if(k===!1||!W)throw new Error(b4);k=!0}k=k||!1;let Le=Ji(e,i,HQ),{signature:Ne}=i;i=Object.assign({},i,{rawFilename:u,rawComment:p,version:g,versionMadeBy:r,lastModDate:f,lastAccessDate:y,creationDate:x,rawExtraField:O,zip64:k,zip64UncompressedSize:Te,zip64CompressedSize:de,zip64Offset:xe,zip64DiskNumberStart:Ie,password:V,rawPassword:L,level:!w&&e.config.CompressionStream===bi&&e.config.CompressionStreamNative===bi?0:v,useWebWorkers:A,encryptionStrength:Z,extendedTimestamp:P,zipCrypto:E,bufferedWrite:b,keepOrder:W,useUnicodeFileNames:I,dataDescriptor:B,dataDescriptorSignature:R,signal:G,msDosCompatible:o,internalFileAttribute:S,internalFileAttributes:S,externalFileAttribute:a,externalFileAttributes:a,useCompressionStream:w,passThrough:C,encrypted:!!(V&&ji(V)||L&&ji(L))||C&&Le,signature:Ne,compressionMethod:M});let Oe=xot(i),qe=Tot(i),Rt=ji(Oe.localHeaderArray,qe.dataDescriptorArray);K=Rt+z,e.options.usdz&&(K+=K+64),e.pendingEntriesSize+=K;let Lt;try{Lt=await got(e,t,n,{headerInfo:Oe,dataDescriptorInfo:qe,metadataSize:Rt},i)}finally{e.pendingEntriesSize-=K}return Object.assign(Lt,{name:t,comment:h,extraField:N}),new xy(Lt)}async function got(e,t,n,i,o){let{files:r,writer:s}=e,{keepOrder:a,dataDescriptor:c,signal:d}=o,{headerInfo:u}=i,{usdz:h}=e.options,p=Array.from(r.values()).pop(),g={},f,y,x,S,C,V,L;r.set(t,g);try{let W;a&&(W=p&&p.lock,Z()),(o.bufferedWrite||e.writerLocked||e.bufferedWrites&&a||!c)&&!h?(V=new TransformStream,L=new Response(V.readable).blob(),V.writable.size=0,f=!0,e.bufferedWrites++,await Hf(s)):(V=s,await E()),await Hf(V);let{writable:v}=s,{diskOffset:A}=s;if(e.addSplitZipSignature){delete e.addSplitZipSignature;let R=new Uint8Array(4),G=Ba(R);Qi(G,0,134695760),await Kf(v,R),e.offset+=4}h&&_ot(i,e.offset-A),f||(await W,await P(v));let{diskNumber:b}=s;if(C=!0,g.diskNumberStart=b,g=await yot(n,V,g,i,e.config,o),C=!1,r.set(t,g),g.filename=t,f){await V.writable.getWriter().close();let R=await L;await W,await E(),S=!0,c||(R=await Cot(g,R,v,o)),await P(v),g.diskNumberStart=s.diskNumber,A=s.diskOffset,await R.stream().pipeTo(v,{preventClose:!0,preventAbort:!0,signal:d}),v.size+=R.size,S=!1}if(g.offset=e.offset-A,g.zip64)Vot(g,o);else if(g.offset>4294967295)throw new Error(b4);return e.offset+=g.size,g}catch(W){if(f&&S||!f&&C){if(e.hasCorruptedEntries=!0,W)try{W.corruptedEntry=!0}catch{}f?e.offset+=V.writable.size:e.offset=V.writable.size}throw r.delete(t),W}finally{f&&e.bufferedWrites--,x&&x(),y&&y()}function Z(){g.lock=new Promise(W=>x=W)}async function E(){e.writerLocked=!0;let{lockWriter:W}=e;e.lockWriter=new Promise(v=>y=()=>{e.writerLocked=!1,v()}),await W}async function P(W){ji(u.localHeaderArray)>s.availableSize&&(s.availableSize=0,await Kf(W,new Uint8Array))}}async function yot(e,t,{diskNumberStart:n,lock:i},o,r,s){let{headerInfo:a,dataDescriptorInfo:c,metadataSize:d}=o,{localHeaderArray:u,headerArray:h,lastModDate:p,rawLastModDate:g,encrypted:f,compressed:y,version:x,compressionMethod:S,rawExtraFieldExtendedTimestamp:C,extraFieldExtendedTimestampFlag:V,rawExtraFieldNTFS:L,rawExtraFieldAES:Z}=a,{dataDescriptorArray:E}=c,{rawFilename:P,lastAccessDate:W,creationDate:v,password:A,rawPassword:b,level:R,zip64:G,zip64UncompressedSize:I,zip64CompressedSize:w,zip64Offset:M,zip64DiskNumberStart:B,zipCrypto:k,dataDescriptor:O,directory:N,executable:z,versionMadeBy:K,rawComment:te,rawExtraField:H,useWebWorkers:j,onstart:ee,onprogress:fe,onend:Te,signal:de,encryptionStrength:xe,extendedTimestamp:Ce,msDosCompatible:Ie,internalFileAttributes:Le,externalFileAttributes:Ne,useCompressionStream:Oe,passThrough:qe}=s,Rt={lock:i,versionMadeBy:K,zip64:G,directory:!!N,executable:!!z,filenameUTF8:!0,rawFilename:P,commentUTF8:!0,rawComment:te,rawExtraFieldExtendedTimestamp:C,rawExtraFieldNTFS:L,rawExtraFieldAES:Z,rawExtraField:H,extendedTimestamp:Ce,msDosCompatible:Ie,internalFileAttributes:Le,externalFileAttributes:Ne,diskNumberStart:n},{signature:Lt,uncompressedSize:ke}=s,Ht=0;qe||(ke=0);let{writable:ut}=t;if(e){e.chunkSize=EU(r),await Kf(ut,u);let Pn=e.readable,cn=Pn.size=e.size,ge={options:{codecType:kU,level:R,rawPassword:b,password:A,encryptionStrength:xe,zipCrypto:f&&k,passwordVerification:f&&k&&g>>8&255,signed:!qe,compressed:y&&!qe,encrypted:f&&!qe,useWebWorkers:j,useCompressionStream:Oe,transferStreams:!1},config:r,streamOptions:{signal:de,size:cn,onstart:ee,onprogress:fe,onend:Te}},Ve=await BU({readable:Pn,writable:ut},ge);Ht=Ve.outputSize,qe||(ke=Ve.inputSize,Lt=Ve.signature),ut.size+=ke}else await Kf(ut,u);let mt;if(G){let Pn=4;I&&(Pn+=8),w&&(Pn+=8),M&&(Pn+=8),B&&(Pn+=4),mt=new Uint8Array(Pn)}else mt=new Uint8Array;return Sot({signature:Lt,rawExtraFieldZip64:mt,compressedSize:Ht,uncompressedSize:ke,headerInfo:a,dataDescriptorInfo:c},s),O&&await Kf(ut,E),Object.assign(Rt,{uncompressedSize:ke,compressedSize:Ht,lastModDate:p,rawLastModDate:g,creationDate:v,lastAccessDate:W,encrypted:f,zipCrypto:k,size:d+Ht,compressionMethod:S,version:x,headerArray:h,signature:Lt,rawExtraFieldZip64:mt,extraFieldExtendedTimestampFlag:V,zip64UncompressedSize:I,zip64CompressedSize:w,zip64Offset:M,zip64DiskNumberStart:B}),Rt}function xot(e){let{rawFilename:t,lastModDate:n,lastAccessDate:i,creationDate:o,level:r,zip64:s,zipCrypto:a,useUnicodeFileNames:c,dataDescriptor:d,directory:u,rawExtraField:h,encryptionStrength:p,extendedTimestamp:g,encrypted:f}=e,{version:y,compressionMethod:x}=e,S=!u&&(r>0||r===bi&&x!==0),C;if(f&&!a){C=new Uint8Array(ji(p0e)+2);let M=Ba(C);oo(M,0,39169),Xs(C,p0e,2),p4(M,8,p)}else C=new Uint8Array;let V,L,Z;if(g){L=new Uint8Array(9+(i?4:0)+(o?4:0));let M=Ba(L);oo(M,0,21589),oo(M,2,ji(L)-4),Z=1+(i?2:0)+(o?4:0),p4(M,4,Z);let B=5;Qi(M,B,Math.floor(n.getTime()/1e3)),B+=4,i&&(Qi(M,B,Math.floor(i.getTime()/1e3)),B+=4),o&&Qi(M,B,Math.floor(o.getTime()/1e3));try{V=new Uint8Array(36);let k=Ba(V),O=f4(n);oo(k,0,10),oo(k,2,32),oo(k,8,1),oo(k,10,24),jl(k,12,O),jl(k,20,f4(i)||O),jl(k,28,f4(o)||O)}catch{V=new Uint8Array}}else V=L=new Uint8Array;let E=0;c&&(E=E|2048),d&&(E=E|8),x===bi&&(x=S?8:0),x==8&&(r>=1&&r<3&&(E=E|6),r>=3&&r<5&&(E=E|1),r===9&&(E=E|2)),s&&(y=y>45?y:45),f&&(E=E|1,a||(y=y>51?y:51,C[9]=x,x=99));let P=new Uint8Array(26),W=Ba(P);oo(W,0,y),oo(W,2,E),oo(W,4,x);let v=new Uint32Array(1),A=Ba(v),b;n<TQ?b=TQ:n>_Q?b=_Q:b=n,oo(A,0,(b.getHours()<<6|b.getMinutes())<<5|b.getSeconds()/2),oo(A,2,(b.getFullYear()-1980<<4|b.getMonth()+1)<<5|b.getDate());let R=v[0];Qi(W,6,R),oo(W,22,ji(t));let G=ji(C,L,V,h);oo(W,24,G);let I=new Uint8Array(30+ji(t)+G),w=Ba(I);return Qi(w,0,67324752),Xs(I,P,4),Xs(I,t,30),Xs(I,C,30+ji(t)),Xs(I,L,30+ji(t,C)),Xs(I,V,30+ji(t,C,L)),Xs(I,h,30+ji(t,C,L,V)),{localHeaderArray:I,headerArray:P,headerView:W,lastModDate:n,rawLastModDate:R,encrypted:f,compressed:S,version:y,compressionMethod:x,extraFieldExtendedTimestampFlag:Z,rawExtraFieldExtendedTimestamp:L,rawExtraFieldNTFS:V,rawExtraFieldAES:C,extraFieldLength:G}}function _ot(e,t){let{headerInfo:n}=e,{localHeaderArray:i,extraFieldLength:o}=n,r=Ba(i),s=64-(t+ji(i))%64;s<4&&(s+=64);let a=new Uint8Array(s),c=Ba(a);oo(c,0,6534),oo(c,2,s-2);let d=i;n.localHeaderArray=i=new Uint8Array(ji(d)+s),Xs(i,d),Xs(i,a,ji(d)),r=Ba(i),oo(r,28,o+s),e.metadataSize+=s}function Tot(e){let{zip64:t,dataDescriptor:n,dataDescriptorSignature:i}=e,o=new Uint8Array,r,s=0;return n&&(o=new Uint8Array(t?i?24:20:i?16:12),r=Ba(o),i&&(s=4,Qi(r,0,134695760))),{dataDescriptorArray:o,dataDescriptorView:r,dataDescriptorOffset:s}}function Sot(e,t){let{signature:n,rawExtraFieldZip64:i,compressedSize:o,uncompressedSize:r,headerInfo:s,dataDescriptorInfo:a}=e,{headerView:c,encrypted:d}=s,{dataDescriptorView:u,dataDescriptorOffset:h}=a,{zip64:p,zip64UncompressedSize:g,zip64CompressedSize:f,zipCrypto:y,dataDescriptor:x}=t;if((!d||y)&&n!==bi&&(Qi(c,10,n),x&&Qi(u,h,n)),p){let S=Ba(i);oo(S,0,1),oo(S,2,ji(i)-4);let C=4;g&&(Qi(c,18,4294967295),jl(S,C,BigInt(r)),C+=8),f&&(Qi(c,14,4294967295),jl(S,C,BigInt(o))),x&&(jl(u,h+4,BigInt(o)),jl(u,h+12,BigInt(r)))}else Qi(c,14,o),Qi(c,18,r),x&&(Qi(u,h+4,o),Qi(u,h+8,r))}async function Cot(e,t,n,{zipCrypto:i}){let o;o=await t.slice(0,26).arrayBuffer(),o.byteLength!=26&&(o=o.slice(0,26));let r=new DataView(o);return(!e.encrypted||i)&&Qi(r,14,e.signature),e.zip64?(Qi(r,18,4294967295),Qi(r,22,4294967295)):(Qi(r,18,e.compressedSize),Qi(r,22,e.uncompressedSize)),await Kf(n,new Uint8Array(o)),t.slice(o.byteLength)}function Vot(e,t){let{rawExtraFieldZip64:n,offset:i,diskNumberStart:o}=e,{zip64UncompressedSize:r,zip64CompressedSize:s,zip64Offset:a,zip64DiskNumberStart:c}=t,d=Ba(n),u=4;r&&(u+=8),s&&(u+=8),a&&(jl(d,u,BigInt(i)),u+=8),c&&Qi(d,u,o)}async function Lot(e,t,n){let{files:i,writer:o}=e,{diskOffset:r,writable:s}=o,{diskNumber:a}=o,c=0,d=0,u=e.offset-r,h=i.size;for(let[,Z]of i){let{rawFilename:E,rawExtraFieldZip64:P,rawExtraFieldAES:W,rawComment:v,rawExtraFieldNTFS:A,rawExtraField:b,extendedTimestamp:R,extraFieldExtendedTimestampFlag:G,lastModDate:I}=Z,w;if(R){w=new Uint8Array(9);let M=Ba(w);oo(M,0,21589),oo(M,2,5),p4(M,4,G),Qi(M,5,Math.floor(I.getTime()/1e3))}else w=new Uint8Array;Z.rawExtraFieldCDExtendedTimestamp=w,d+=46+ji(E,v,P,W,A,w,b)}let p=new Uint8Array(d),g=Ba(p);await Hf(o);let f=0;for(let[Z,E]of Array.from(i.values()).entries()){let{offset:P,rawFilename:W,rawExtraFieldZip64:v,rawExtraFieldAES:A,rawExtraFieldCDExtendedTimestamp:b,rawExtraFieldNTFS:R,rawExtraField:G,rawComment:I,versionMadeBy:w,headerArray:M,zip64:B,zip64UncompressedSize:k,zip64CompressedSize:O,zip64DiskNumberStart:N,zip64Offset:z,internalFileAttributes:K,externalFileAttributes:te,diskNumberStart:H,uncompressedSize:j,compressedSize:ee}=E,fe=ji(v,A,b,R,G);Qi(g,c,33639248),oo(g,c+4,w);let Te=Ba(M);k||Qi(Te,18,j),O||Qi(Te,14,ee),Xs(p,M,c+6),oo(g,c+30,fe),oo(g,c+32,ji(I)),oo(g,c+34,B&&N?65535:H),oo(g,c+36,K),te&&Qi(g,c+38,te),Qi(g,c+42,B&&z?4294967295:P),Xs(p,W,c+46),Xs(p,v,c+46+ji(W)),Xs(p,A,c+46+ji(W,v)),Xs(p,b,c+46+ji(W,v,A)),Xs(p,R,c+46+ji(W,v,A,b)),Xs(p,G,c+46+ji(W,v,A,b,R)),Xs(p,I,c+46+ji(W)+fe);let de=46+ji(W,I)+fe;if(c-f>o.availableSize&&(o.availableSize=0,await Kf(s,p.slice(f,c)),f=c),c+=de,n.onprogress)try{await n.onprogress(Z+1,i.size,new xy(E))}catch{}}await Kf(s,f?p.slice(f):p);let y=o.diskNumber,{availableSize:x}=o;x<22&&y++;let S=Ji(e,n,$U);if(u>4294967295||d>4294967295||h>65535||y>65535){if(S===!1)throw new Error(b4);S=!0}let C=new Uint8Array(S?98:22),V=Ba(C);c=0,S&&(Qi(V,0,101075792),jl(V,4,BigInt(44)),oo(V,12,45),oo(V,14,45),Qi(V,16,y),Qi(V,20,a),jl(V,24,BigInt(h)),jl(V,32,BigInt(h)),jl(V,40,BigInt(d)),jl(V,48,BigInt(u)),Qi(V,56,117853008),jl(V,64,BigInt(u)+BigInt(d)),Qi(V,72,y+1),Ji(e,n,"supportZip64SplitFile",!0)&&(y=65535,a=65535),h=65535,u=4294967295,d=4294967295,c+=76),Qi(V,c,101010256),oo(V,c+4,y),oo(V,c+6,a),oo(V,c+8,h),oo(V,c+10,h),Qi(V,c+12,d),Qi(V,c+16,u);let L=ji(t);if(L)if(L<=65535)oo(V,c+20,L);else throw new Error(lot);await Kf(s,C),L&&await Kf(s,t)}async function Kf(e,t){let n=e.getWriter();try{await n.ready,e.size+=ji(t),await n.write(t)}finally{n.releaseLock()}}function f4(e){if(e)return(BigInt(e.getTime())+BigInt(116444736e5))*BigInt(1e4)}function Ji(e,t,n,i){let o=t[n]===bi?e.options[n]:t[n];return o===bi?i:o}function g0e(e){return e+5*(Math.floor(e/16383)+1)}function p4(e,t,n){e.setUint8(t,n)}function oo(e,t,n){e.setUint16(t,n,!0)}function Qi(e,t,n){e.setUint32(t,n,!0)}function jl(e,t,n){e.setBigUint64(t,n,!0)}function Xs(e,t,n){e.set(t,n)}function Ba(e){return new DataView(e.buffer)}function ji(...e){let t=0;return e.forEach(n=>n&&(t+=n.length)),t}LV({Deflate:ebe,Inflate:Sbe});var _0i=_(T(),1);function Rot(e){return typeof e=="string"&&(e=document.getElementById(e)),e}var Xn=Rot;var S0i=_(T(),1);function Zot(e,t){this.position=e,this.headingPitchRange=t}var fw=Zot;var R0i=_(T(),1);function hD(e,t){this.id=t,this.name=e,this.playlistIndex=0,this.playlist=[],this.tourStart=new be,this.tourEnd=new be,this.entryStart=new be,this.entryEnd=new be,this._activeEntries=[]}hD.prototype.addPlaylistEntry=function(e){this.playlist.push(e)};hD.prototype.play=function(e,t){this.tourStart.raiseEvent();let n=this;_0e.call(this,e,t,function(i){n.playlistIndex=0,i||x0e(n._activeEntries),n.tourEnd.raiseEvent(i)})};hD.prototype.stop=function(){x0e(this._activeEntries)};function x0e(e){for(let t=e.pop();t!==void 0;t=e.pop())t.stop()}function _0e(e,t,n){let i=this.playlist[this.playlistIndex];if(i){let o=Got.bind(this,e,t,n);if(this._activeEntries.push(i),this.entryStart.raiseEvent(i),i.blocking)i.play(o,e.scene.camera,t);else{let r=this;i.play(function(){r.entryEnd.raiseEvent(i);let s=r._activeEntries.indexOf(i);s>=0&&r._activeEntries.splice(s,1)}),o(e,t,n)}}else l(n)&&n(!1)}function Got(e,t,n,i){let o=this.playlist[this.playlistIndex];if(this.entryEnd.raiseEvent(o,i),i)n(i);else{let r=this._activeEntries.indexOf(o);r>=0&&this._activeEntries.splice(r,1),this.playlistIndex++,_0e.call(this,e,t,n)}}var pw=hD;var B0i=_(T(),1);var A0i=_(T(),1);var v0i=_(T(),1),wi=Object.freeze({Linear:Object.freeze({None:function(e){return e},In:function(e){return e},Out:function(e){return e},InOut:function(e){return e}}),Quadratic:Object.freeze({In:function(e){return e*e},Out:function(e){return e*(2-e)},InOut:function(e){return(e*=2)<1?.5*e*e:-.5*(--e*(e-2)-1)}}),Cubic:Object.freeze({In:function(e){return e*e*e},Out:function(e){return--e*e*e+1},InOut:function(e){return(e*=2)<1?.5*e*e*e:.5*((e-=2)*e*e+2)}}),Quartic:Object.freeze({In:function(e){return e*e*e*e},Out:function(e){return 1- --e*e*e*e},InOut:function(e){return(e*=2)<1?.5*e*e*e*e:-.5*((e-=2)*e*e*e-2)}}),Quintic:Object.freeze({In:function(e){return e*e*e*e*e},Out:function(e){return--e*e*e*e*e+1},InOut:function(e){return(e*=2)<1?.5*e*e*e*e*e:.5*((e-=2)*e*e*e*e+2)}}),Sinusoidal:Object.freeze({In:function(e){return 1-Math.sin((1-e)*Math.PI/2)},Out:function(e){return Math.sin(e*Math.PI/2)},InOut:function(e){return .5*(1-Math.sin(Math.PI*(.5-e)))}}),Exponential:Object.freeze({In:function(e){return e===0?0:Math.pow(1024,e-1)},Out:function(e){return e===1?1:1-Math.pow(2,-10*e)},InOut:function(e){return e===0?0:e===1?1:(e*=2)<1?.5*Math.pow(1024,e-1):.5*(-Math.pow(2,-10*(e-1))+2)}}),Circular:Object.freeze({In:function(e){return 1-Math.sqrt(1-e*e)},Out:function(e){return Math.sqrt(1- --e*e)},InOut:function(e){return(e*=2)<1?-.5*(Math.sqrt(1-e*e)-1):.5*(Math.sqrt(1-(e-=2)*e)+1)}}),Elastic:Object.freeze({In:function(e){return e===0?0:e===1?1:-Math.pow(2,10*(e-1))*Math.sin((e-1.1)*5*Math.PI)},Out:function(e){return e===0?0:e===1?1:Math.pow(2,-10*e)*Math.sin((e-.1)*5*Math.PI)+1},InOut:function(e){return e===0?0:e===1?1:(e*=2,e<1?-.5*Math.pow(2,10*(e-1))*Math.sin((e-1.1)*5*Math.PI):.5*Math.pow(2,-10*(e-1))*Math.sin((e-1.1)*5*Math.PI)+1)}}),Back:Object.freeze({In:function(e){var t=1.70158;return e===1?1:e*e*((t+1)*e-t)},Out:function(e){var t=1.70158;return e===0?0:--e*e*((t+1)*e+t)+1},InOut:function(e){var t=2.5949095;return(e*=2)<1?.5*(e*e*((t+1)*e-t)):.5*((e-=2)*e*((t+1)*e+t)+2)}}),Bounce:Object.freeze({In:function(e){return 1-wi.Bounce.Out(1-e)},Out:function(e){return e<.36363636363636365?7.5625*e*e:e<.7272727272727273?7.5625*(e-=.5454545454545454)*e+.75:e<.9090909090909091?7.5625*(e-=.8181818181818182)*e+.9375:7.5625*(e-=.9545454545454546)*e+.984375},InOut:function(e){return e<.5?wi.Bounce.In(e*2)*.5:wi.Bounce.Out(e*2-1)*.5+.5}}),generatePow:function(e){return e===void 0&&(e=4),e=e<Number.EPSILON?Number.EPSILON:e,e=e>1e4?1e4:e,{In:function(t){return Math.pow(t,e)},Out:function(t){return 1-Math.pow(1-t,e)},InOut:function(t){return t<.5?Math.pow(t*2,e)/2:(1-Math.pow(2-t*2,e))/2+.5}}}}),bw=function(){return performance.now()},Eot=function(){function e(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];this._tweens={},this._tweensAddedDuringUpdate={},this.add.apply(this,t)}return e.prototype.getAll=function(){var t=this;return Object.keys(this._tweens).map(function(n){return t._tweens[n]})},e.prototype.removeAll=function(){this._tweens={}},e.prototype.add=function(){for(var t,n=[],i=0;i<arguments.length;i++)n[i]=arguments[i];for(var o=0,r=n;o<r.length;o++){var s=r[o];(t=s._group)===null||t===void 0||t.remove(s),s._group=this,this._tweens[s.getId()]=s,this._tweensAddedDuringUpdate[s.getId()]=s}},e.prototype.remove=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];for(var i=0,o=t;i<o.length;i++){var r=o[i];r._group=void 0,delete this._tweens[r.getId()],delete this._tweensAddedDuringUpdate[r.getId()]}},e.prototype.allStopped=function(){return this.getAll().every(function(t){return!t.isPlaying()})},e.prototype.update=function(t,n){t===void 0&&(t=bw()),n===void 0&&(n=!0);var i=Object.keys(this._tweens);if(i.length!==0)for(;i.length>0;){this._tweensAddedDuringUpdate={};for(var o=0;o<i.length;o++){var r=this._tweens[i[o]],s=!n;r&&r.update(t,s)===!1&&!n&&this.remove(r)}i=Object.keys(this._tweensAddedDuringUpdate)}},e}(),PV={Linear:function(e,t){var n=e.length-1,i=n*t,o=Math.floor(i),r=PV.Utils.Linear;return t<0?r(e[0],e[1],i):t>1?r(e[n],e[n-1],n-i):r(e[o],e[o+1>n?n:o+1],i-o)},Bezier:function(e,t){for(var n=0,i=e.length-1,o=Math.pow,r=PV.Utils.Bernstein,s=0;s<=i;s++)n+=o(1-t,i-s)*o(t,s)*e[s]*r(i,s);return n},CatmullRom:function(e,t){var n=e.length-1,i=n*t,o=Math.floor(i),r=PV.Utils.CatmullRom;return e[0]===e[n]?(t<0&&(o=Math.floor(i=n*(1+t))),r(e[(o-1+n)%n],e[o],e[(o+1)%n],e[(o+2)%n],i-o)):t<0?e[0]-(r(e[0],e[0],e[1],e[1],-i)-e[0]):t>1?e[n]-(r(e[n],e[n],e[n-1],e[n-1],i-n)-e[n]):r(e[o?o-1:0],e[o],e[n<o+1?n:o+1],e[n<o+2?n:o+2],i-o)},Utils:{Linear:function(e,t,n){return(t-e)*n+e},Bernstein:function(e,t){var n=PV.Utils.Factorial;return n(e)/n(t)/n(e-t)},Factorial:function(){var e=[1];return function(t){var n=1;if(e[t])return e[t];for(var i=t;i>1;i--)n*=i;return e[t]=n,n}}(),CatmullRom:function(e,t,n,i,o){var r=(n-e)*.5,s=(i-t)*.5,a=o*o,c=o*a;return(2*t-2*n+r+s)*c+(-3*t+3*n-2*r-s)*a+r*o+t}}},T0e=function(){function e(){}return e.nextId=function(){return e._nextId++},e._nextId=0,e}(),g4=new Eot,S0e=function(){function e(t,n){this._isPaused=!1,this._pauseStart=0,this._valuesStart={},this._valuesEnd={},this._valuesStartRepeat={},this._duration=1e3,this._isDynamic=!1,this._initialRepeat=0,this._repeat=0,this._yoyo=!1,this._isPlaying=!1,this._reversed=!1,this._delayTime=0,this._startTime=0,this._easingFunction=wi.Linear.None,this._interpolationFunction=PV.Linear,this._chainedTweens=[],this._onStartCallbackFired=!1,this._onEveryStartCallbackFired=!1,this._id=T0e.nextId(),this._isChainStopped=!1,this._propertiesAreSetUp=!1,this._goToEnd=!1,this._object=t,typeof n=="object"?(this._group=n,n.add(this)):n===!0&&(this._group=g4,g4.add(this))}return e.prototype.getId=function(){return this._id},e.prototype.isPlaying=function(){return this._isPlaying},e.prototype.isPaused=function(){return this._isPaused},e.prototype.getDuration=function(){return this._duration},e.prototype.to=function(t,n){if(n===void 0&&(n=1e3),this._isPlaying)throw new Error("Can not call Tween.to() while Tween is already started or paused. Stop the Tween first.");return this._valuesEnd=t,this._propertiesAreSetUp=!1,this._duration=n<0?0:n,this},e.prototype.duration=function(t){return t===void 0&&(t=1e3),this._duration=t<0?0:t,this},e.prototype.dynamic=function(t){return t===void 0&&(t=!1),this._isDynamic=t,this},e.prototype.start=function(t,n){if(t===void 0&&(t=bw()),n===void 0&&(n=!1),this._isPlaying)return this;if(this._repeat=this._initialRepeat,this._reversed){this._reversed=!1;for(var i in this._valuesStartRepeat)this._swapEndStartRepeatValues(i),this._valuesStart[i]=this._valuesStartRepeat[i]}if(this._isPlaying=!0,this._isPaused=!1,this._onStartCallbackFired=!1,this._onEveryStartCallbackFired=!1,this._isChainStopped=!1,this._startTime=t,this._startTime+=this._delayTime,!this._propertiesAreSetUp||n){if(this._propertiesAreSetUp=!0,!this._isDynamic){var o={};for(var r in this._valuesEnd)o[r]=this._valuesEnd[r];this._valuesEnd=o}this._setupProperties(this._object,this._valuesStart,this._valuesEnd,this._valuesStartRepeat,n)}return this},e.prototype.startFromCurrentValues=function(t){return this.start(t,!0)},e.prototype._setupProperties=function(t,n,i,o,r){for(var s in i){var a=t[s],c=Array.isArray(a),d=c?"array":typeof a,u=!c&&Array.isArray(i[s]);if(!(d==="undefined"||d==="function")){if(u){var h=i[s];if(h.length===0)continue;for(var p=[a],g=0,f=h.length;g<f;g+=1){var y=this._handleRelativeValue(a,h[g]);if(isNaN(y)){u=!1,console.warn("Found invalid interpolation list. Skipping.");break}p.push(y)}u&&(i[s]=p)}if((d==="object"||c)&&a&&!u){n[s]=c?[]:{};var x=a;for(var S in x)n[s][S]=x[S];o[s]=c?[]:{};var h=i[s];if(!this._isDynamic){var C={};for(var S in h)C[S]=h[S];i[s]=h=C}this._setupProperties(x,n[s],h,o[s],r)}else(typeof n[s]>"u"||r)&&(n[s]=a),c||(n[s]*=1),u?o[s]=i[s].slice().reverse():o[s]=n[s]||0}}},e.prototype.stop=function(){return this._isChainStopped||(this._isChainStopped=!0,this.stopChainedTweens()),this._isPlaying?(this._isPlaying=!1,this._isPaused=!1,this._onStopCallback&&this._onStopCallback(this._object),this):this},e.prototype.end=function(){return this._goToEnd=!0,this.update(this._startTime+this._duration),this},e.prototype.pause=function(t){return t===void 0&&(t=bw()),this._isPaused||!this._isPlaying?this:(this._isPaused=!0,this._pauseStart=t,this)},e.prototype.resume=function(t){return t===void 0&&(t=bw()),!this._isPaused||!this._isPlaying?this:(this._isPaused=!1,this._startTime+=t-this._pauseStart,this._pauseStart=0,this)},e.prototype.stopChainedTweens=function(){for(var t=0,n=this._chainedTweens.length;t<n;t++)this._chainedTweens[t].stop();return this},e.prototype.group=function(t){return t?(t.add(this),this):(console.warn("tween.group() without args has been removed, use group.add(tween) instead."),this)},e.prototype.remove=function(){var t;return(t=this._group)===null||t===void 0||t.remove(this),this},e.prototype.delay=function(t){return t===void 0&&(t=0),this._delayTime=t,this},e.prototype.repeat=function(t){return t===void 0&&(t=0),this._initialRepeat=t,this._repeat=t,this},e.prototype.repeatDelay=function(t){return this._repeatDelayTime=t,this},e.prototype.yoyo=function(t){return t===void 0&&(t=!1),this._yoyo=t,this},e.prototype.easing=function(t){return t===void 0&&(t=wi.Linear.None),this._easingFunction=t,this},e.prototype.interpolation=function(t){return t===void 0&&(t=PV.Linear),this._interpolationFunction=t,this},e.prototype.chain=function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return this._chainedTweens=t,this},e.prototype.onStart=function(t){return this._onStartCallback=t,this},e.prototype.onEveryStart=function(t){return this._onEveryStartCallback=t,this},e.prototype.onUpdate=function(t){return this._onUpdateCallback=t,this},e.prototype.onRepeat=function(t){return this._onRepeatCallback=t,this},e.prototype.onComplete=function(t){return this._onCompleteCallback=t,this},e.prototype.onStop=function(t){return this._onStopCallback=t,this},e.prototype.update=function(t,n){var i=this,o;if(t===void 0&&(t=bw()),n===void 0&&(n=e.autoStartOnUpdate),this._isPaused)return!0;var r;if(!this._goToEnd&&!this._isPlaying)if(n)this.start(t,!0);else return!1;if(this._goToEnd=!1,t<this._startTime)return!0;this._onStartCallbackFired===!1&&(this._onStartCallback&&this._onStartCallback(this._object),this._onStartCallbackFired=!0),this._onEveryStartCallbackFired===!1&&(this._onEveryStartCallback&&this._onEveryStartCallback(this._object),this._onEveryStartCallbackFired=!0);var s=t-this._startTime,a=this._duration+((o=this._repeatDelayTime)!==null&&o!==void 0?o:this._delayTime),c=this._duration+this._repeat*a,d=function(){if(i._duration===0||s>c)return 1;var y=Math.trunc(s/a),x=s-y*a,S=Math.min(x/i._duration,1);return S===0&&s===i._duration?1:S},u=d(),h=this._easingFunction(u);if(this._updateProperties(this._object,this._valuesStart,this._valuesEnd,h),this._onUpdateCallback&&this._onUpdateCallback(this._object,u),this._duration===0||s>=this._duration)if(this._repeat>0){var p=Math.min(Math.trunc((s-this._duration)/a)+1,this._repeat);isFinite(this._repeat)&&(this._repeat-=p);for(r in this._valuesStartRepeat)!this._yoyo&&typeof this._valuesEnd[r]=="string"&&(this._valuesStartRepeat[r]=this._valuesStartRepeat[r]+parseFloat(this._valuesEnd[r])),this._yoyo&&this._swapEndStartRepeatValues(r),this._valuesStart[r]=this._valuesStartRepeat[r];return this._yoyo&&(this._reversed=!this._reversed),this._startTime+=a*p,this._onRepeatCallback&&this._onRepeatCallback(this._object),this._onEveryStartCallbackFired=!1,!0}else{this._onCompleteCallback&&this._onCompleteCallback(this._object);for(var g=0,f=this._chainedTweens.length;g<f;g++)this._chainedTweens[g].start(this._startTime+this._duration,!1);return this._isPlaying=!1,!1}return!0},e.prototype._updateProperties=function(t,n,i,o){for(var r in i)if(n[r]!==void 0){var s=n[r]||0,a=i[r],c=Array.isArray(t[r]),d=Array.isArray(a),u=!c&&d;u?t[r]=this._interpolationFunction(a,o):typeof a=="object"&&a?this._updateProperties(t[r],s,a,o):(a=this._handleRelativeValue(s,a),typeof a=="number"&&(t[r]=s+(a-s)*o))}},e.prototype._handleRelativeValue=function(t,n){return typeof n!="string"?n:n.charAt(0)==="+"||n.charAt(0)==="-"?t+parseFloat(n):parseFloat(n)},e.prototype._swapEndStartRepeatValues=function(t){var n=this._valuesStartRepeat[t],i=this._valuesEnd[t];typeof i=="string"?this._valuesStartRepeat[t]=this._valuesStartRepeat[t]+parseFloat(i):this._valuesStartRepeat[t]=this._valuesEnd[t],this._valuesEnd[t]=n},e.autoStartOnUpdate=!1,e}();var Z0i=T0e.nextId,Jf=g4,G0i=Jf.getAll.bind(Jf),E0i=Jf.removeAll.bind(Jf),I0i=Jf.add.bind(Jf),X0i=Jf.remove.bind(Jf),W0i=Jf.update.bind(Jf);var Iot={LINEAR_NONE:wi.Linear.None,QUADRATIC_IN:wi.Quadratic.In,QUADRATIC_OUT:wi.Quadratic.Out,QUADRATIC_IN_OUT:wi.Quadratic.InOut,CUBIC_IN:wi.Cubic.In,CUBIC_OUT:wi.Cubic.Out,CUBIC_IN_OUT:wi.Cubic.InOut,QUARTIC_IN:wi.Quartic.In,QUARTIC_OUT:wi.Quartic.Out,QUARTIC_IN_OUT:wi.Quartic.InOut,QUINTIC_IN:wi.Quintic.In,QUINTIC_OUT:wi.Quintic.Out,QUINTIC_IN_OUT:wi.Quintic.InOut,SINUSOIDAL_IN:wi.Sinusoidal.In,SINUSOIDAL_OUT:wi.Sinusoidal.Out,SINUSOIDAL_IN_OUT:wi.Sinusoidal.InOut,EXPONENTIAL_IN:wi.Exponential.In,EXPONENTIAL_OUT:wi.Exponential.Out,EXPONENTIAL_IN_OUT:wi.Exponential.InOut,CIRCULAR_IN:wi.Circular.In,CIRCULAR_OUT:wi.Circular.Out,CIRCULAR_IN_OUT:wi.Circular.InOut,ELASTIC_IN:wi.Elastic.In,ELASTIC_OUT:wi.Elastic.Out,ELASTIC_IN_OUT:wi.Elastic.InOut,BACK_IN:wi.Back.In,BACK_OUT:wi.Back.Out,BACK_IN_OUT:wi.Back.InOut,BOUNCE_IN:wi.Bounce.In,BOUNCE_OUT:wi.Bounce.Out,BOUNCE_IN_OUT:wi.Bounce.InOut},zr=Object.freeze(Iot);function fD(e,t,n){this.type="KmlTourFlyTo",this.blocking=!0,this.activeCamera=null,this.activeCallback=null,this.duration=e,this.view=n,this.flyToMode=t}fD.prototype.play=function(e,t,n){if(this.activeCamera=t,l(e)&&e!==null){let o=this;this.activeCallback=function(r){delete o.activeCallback,delete o.activeCamera,e(l(r)?!1:r)}}let i=this.getCameraOptions(n);if(this.view.headingPitchRoll)t.flyTo(i);else if(this.view.headingPitchRange){let o=new le(this.view.position);t.flyToBoundingSphere(o,i)}};fD.prototype.stop=function(){l(this.activeCamera)&&this.activeCamera.cancelFlight(),l(this.activeCallback)&&this.activeCallback(!0)};fD.prototype.getCameraOptions=function(e){let t={duration:this.duration};return l(this.activeCallback)&&(t.complete=this.activeCallback),this.flyToMode==="smooth"&&(t.easingFunction=zr.LINEAR_NONE),this.view.headingPitchRoll?(t.destination=this.view.position,t.orientation=this.view.headingPitchRoll):this.view.headingPitchRange&&(t.offset=this.view.headingPitchRange),l(e)&&(t=St(t,e)),t};var gw=fD;var z0i=_(T(),1);function y4(e){this.type="KmlTourWait",this.blocking=!0,this.duration=e,this.timeout=null}y4.prototype.play=function(e){let t=this;this.activeCallback=e,this.timeout=setTimeout(function(){delete t.activeCallback,e(!1)},this.duration*1e3)};y4.prototype.stop=function(){clearTimeout(this.timeout),l(this.activeCallback)&&this.activeCallback(!0)};var yw=y4;var W0e={avi:"video/x-msvideo",bmp:"image/bmp",bz2:"application/x-bzip2",chm:"application/vnd.ms-htmlhelp",css:"text/css",csv:"text/csv",doc:"application/msword",dvi:"application/x-dvi",eps:"application/postscript",flv:"video/x-flv",gif:"image/gif",gz:"application/x-gzip",htm:"text/html",html:"text/html",ico:"image/vnd.microsoft.icon",jnlp:"application/x-java-jnlp-file",jpeg:"image/jpeg",jpg:"image/jpeg",m3u:"audio/x-mpegurl",m4v:"video/mp4",mathml:"application/mathml+xml",mid:"audio/midi",midi:"audio/midi",mov:"video/quicktime",mp3:"audio/mpeg",mp4:"video/mp4",mp4v:"video/mp4",mpeg:"video/mpeg",mpg:"video/mpeg",odp:"application/vnd.oasis.opendocument.presentation",ods:"application/vnd.oasis.opendocument.spreadsheet",odt:"application/vnd.oasis.opendocument.text",ogg:"application/ogg",pdf:"application/pdf",png:"image/png",pps:"application/vnd.ms-powerpoint",ppt:"application/vnd.ms-powerpoint",ps:"application/postscript",qt:"video/quicktime",rdf:"application/rdf+xml",rss:"application/rss+xml",rtf:"application/rtf",svg:"image/svg+xml",swf:"application/x-shockwave-flash",text:"text/plain",tif:"image/tiff",tiff:"image/tiff",txt:"text/plain",wav:"audio/x-wav",wma:"audio/x-ms-wma",wmv:"video/x-ms-wmv",xml:"application/xml",zip:"application/zip",detectFromFilename:function(e){let t=e.toLowerCase();return t=nx(t),W0e[t]}},L4;typeof DOMParser<"u"&&(L4=new DOMParser);var Xot=new pU({stripPrefix:!1,email:!1,replaceFn:function(e){return e.urlMatchType==="scheme"||e.urlMatchType==="www"}}),_y=32,C0e=2414016,V0e=1,L0e=16093e3,R0e=.1,Z0e=[null,void 0,"http://www.opengis.net/kml/2.2","http://earth.google.com/kml/2.2","http://earth.google.com/kml/2.1","http://earth.google.com/kml/2.0"],G0e=["http://www.google.com/kml/ext/2.2"],Wot=["http://www.w3.org/2005/Atom"],Pe={kml:Z0e,gx:G0e,atom:Wot,kmlgx:Z0e.concat(G0e)},R4={Document:D0e,Folder:jot,Placemark:qot,NetworkLink:art,GroundOverlay:ort,PhotoOverlay:Y0e,ScreenOverlay:irt,Tour:ert};function Qf(e){this._dataSource=e,this._deferred=Ll(),this._stack=[],this._promises=[],this._timeoutSet=!1,this._used=!1,this._started=0,this._timeThreshold=1e3}Object.defineProperties(Qf.prototype,{dataSource:{get:function(){return this._dataSource}}});Qf.prototype.addNodes=function(e,t){this._stack.push({nodes:e,index:0,processingData:t}),this._used=!0};Qf.prototype.addPromise=function(e){this._promises.push(e)};Qf.prototype.wait=function(){let e=this._deferred;return this._used||e.resolve(),Promise.all([e.promise,Promise.all(this._promises)])};Qf.prototype.process=function(){let e=this._stack.length===1;return e&&(this._started=Qd._getTimestamp()),this._process(e)};Qf.prototype._giveUpTime=function(){if(this._timeoutSet)return;this._timeoutSet=!0,this._timeThreshold=50;let e=this;setTimeout(function(){e._timeoutSet=!1,e._started=Qd._getTimestamp(),e._process(!0)},0)};Qf.prototype._nextNode=function(){let e=this._stack,t=e[e.length-1],n=t.index,i=t.nodes;if(n!==i.length)return++t.index,i[n]};Qf.prototype._pop=function(){let e=this._stack;return e.pop(),e.length===0?(this._deferred.resolve(),!1):!0};Qf.prototype._process=function(e){let t=this.dataSource,n=this._stack[this._stack.length-1].processingData,i=this._nextNode();for(;l(i);){let o=R4[i.localName];if(l(o)&&(Pe.kml.indexOf(i.namespaceURI)!==-1||Pe.gx.indexOf(i.namespaceURI)!==-1)&&(o(t,i,n,this),this._timeoutSet||Qd._getTimestamp()>this._started+this._timeThreshold)){this._giveUpTime();return}i=this._nextNode()}this._pop()&&e&&this._process(!0)};function Pot(e){let t=e.slice(0,Math.min(4,e.size)),n=Ll(),i=new FileReader;return i.addEventListener("load",function(){n.resolve(new DataView(i.result).getUint32(0,!1)===1347093252)}),i.addEventListener("error",function(){n.reject(i.error)}),i.readAsArrayBuffer(t),n.promise}function vot(e){let t=Ll(),n=new FileReader;return n.addEventListener("load",function(){t.resolve(n.result)}),n.addEventListener("error",function(){t.reject(n.error)}),n.readAsText(e),t.promise}function P0e(e){let t={xsi:"http://www.w3.org/2001/XMLSchema-instance"},n,i,o,r;for(let s in t)t.hasOwnProperty(s)&&(o=RegExp(`[< ]${s}:`),r=`xmlns:${s}=`,o.test(e)&&e.indexOf(r)===-1&&(l(n)||(n=e.substr(0,e.indexOf("<kml")+4),i=e.substr(n.length)),n+=` ${r}"${t[s]}"`));return l(n)&&(e=n+i),e}function v0e(e){let t=e.indexOf("xmlns:"),n=e.indexOf(">",t),i,o,r;for(;t!==-1&&t<n;)i=e.slice(t,e.indexOf('"',t)),o=t,t=e.indexOf(i,t+1),t!==-1?(r=e.indexOf('"',e.indexOf('"',t)+1),e=e.slice(0,t-1)+e.slice(r+1,e.length),t=e.indexOf("xmlns:",o-1)):t=e.indexOf("xmlns:",o+1);return e}function wot(e,t){return Promise.resolve(e.getData(new HU)).then(function(n){n=P0e(n),n=v0e(n),t.kml=L4.parseFromString(n,"application/xml")})}function x4(e,t){let n=W0e.detectFromFilename(e.filename)??"application/octet-stream";return Promise.resolve(e.getData(new YU(n))).then(function(i){t[e.filename]=i})}function Kd(e,t,n,i){let o=i.keys,r=new xw.default("."),s=e.querySelectorAll(t);for(let a=0;a<s.length;a++){let c=s[a],d=c.getAttribute(n);if(l(d)){let h=new xw.default(d).absoluteTo(r).toString(),p=o.indexOf(h);if(p!==-1){let g=o[p];c.setAttribute(n,i[g]),t==="a"&&c.getAttribute("download")===null&&c.setAttribute("download",g)}}}}function Jd(e,t,n,i){let o=e.querySelectorAll(t);for(let r=0;r<o.length;r++){let s=o[r],a=s.getAttribute(n),c=Z4(a,i);l(c)&&s.setAttribute(n,c.url)}}function w0e(e,t,n){let i=Ws(e,"id");i=l(i)&&i.length!==0?i:zn(),l(n)&&(i=n+i);let o=t.getById(i);return l(o)&&(i=zn(),l(n)&&(i=n+i)),o=t.add(new jo({id:i})),l(o.kml)||(o.addProperty("kml"),o.kml=new urt),o}function _w(e,t){return e==="absolute"||e==="relativeToGround"||t==="relativeToSeaFloor"}function yD(e,t){if(!l(e))return m.fromDegrees(0,0,0,t);let n=e.match(/[^\s,\n]+/g);if(!l(n))return m.fromDegrees(0,0,0,t);let i=parseFloat(n[0]),o=parseFloat(n[1]),r=parseFloat(n[2]);return i=isNaN(i)?0:i,o=isNaN(o)?0:o,r=isNaN(r)?0:r,m.fromDegrees(i,o,r,t)}function pD(e,t){if(!l(e))return;let n=e.textContent.match(/[^\s\n]+/g);if(!l(n))return;let i=n.length,o=new Array(i),r=0;for(let s=0;s<i;s++)o[r++]=yD(n[s],t);return o}function Ty(e,t){if(!l(e))return;let n=e.getAttribute(t);if(n!==null){let i=parseFloat(n);return isNaN(i)?void 0:i}}function Ws(e,t){if(!l(e))return;let n=e.getAttribute(t);return n!==null?n:void 0}function Fi(e,t,n){if(!l(e))return;let i=e.childNodes,o=i.length;for(let r=0;r<o;r++){let s=i[r];if(s.localName===t&&n.indexOf(s.namespaceURI)!==-1)return s}}function E0e(e,t,n){if(!l(e))return;let i=[],o=e.getElementsByTagNameNS("*",t),r=o.length;for(let s=0;s<r;s++){let a=o[s];a.localName===t&&n.indexOf(a.namespaceURI)!==-1&&i.push(a)}return i}function Xh(e,t,n){if(!l(e))return[];let i=[],o=e.childNodes,r=o.length;for(let s=0;s<r;s++){let a=o[s];a.localName===t&&n.indexOf(a.namespaceURI)!==-1&&i.push(a)}return i}function ei(e,t,n){let i=Fi(e,t,n);if(l(i)){let o=parseFloat(i.textContent);return isNaN(o)?void 0:o}}function Wn(e,t,n){let i=Fi(e,t,n);if(l(i))return i.textContent.trim()}function Wh(e,t,n){let i=Fi(e,t,n);if(l(i)){let o=i.textContent.trim();return o==="1"||/^true$/i.test(o)}}function Z4(e,t,n){if(!l(e))return;let i;if(l(n)){e=e.replace(/\\/g,"/");let o=n[e];if(l(o))i=new Ze({url:o});else{let r=new xw.default(t.getUrlComponent()),s=new xw.default(e);o=n[s.absoluteTo(r)],l(o)&&(i=new Ze({url:o}))}}return l(i)||(i=t.getDerivedResource({url:e})),i}var ql={maximumRed:void 0,red:void 0,maximumGreen:void 0,green:void 0,maximumBlue:void 0,blue:void 0};function C4(e,t){if(!l(e)||/^\s*$/gm.test(e))return;e[0]==="#"&&(e=e.substring(1));let n=parseInt(e.substring(0,2),16)/255,i=parseInt(e.substring(2,4),16)/255,o=parseInt(e.substring(4,6),16)/255,r=parseInt(e.substring(6,8),16)/255;return t?(r>0?(ql.maximumRed=r,ql.red=void 0):(ql.maximumRed=void 0,ql.red=0),o>0?(ql.maximumGreen=o,ql.green=void 0):(ql.maximumGreen=void 0,ql.green=0),i>0?(ql.maximumBlue=i,ql.blue=void 0):(ql.maximumBlue=void 0,ql.blue=0),ql.alpha=n,D.fromRandom(ql)):new D(r,o,i,n)}function ZT(e,t,n){let i=Wn(e,t,n);if(l(i))return C4(i,Wn(e,"colorMode",n)==="random")}function Fot(e){let t=Fi(e,"TimeStamp",Pe.kmlgx),n=Wn(t,"when",Pe.kmlgx);if(!l(t)||!l(n)||n.length===0)return;let i=q.fromIso8601(n),o=new Dr;return o.addInterval(new Ln({start:i,stop:Be.MAXIMUM_VALUE})),o}function Aot(e){let t=Fi(e,"TimeSpan",Pe.kmlgx);if(!l(t))return;let n,i=Fi(t,"begin",Pe.kmlgx),o=l(i)?q.fromIso8601(i.textContent):void 0,r=Fi(t,"end",Pe.kmlgx),s=l(r)?q.fromIso8601(r.textContent):void 0;if(l(o)&&l(s)){if(q.lessThan(s,o)){let a=o;o=s,s=a}n=new Dr,n.addInterval(new Ln({start:o,stop:s}))}else l(o)?(n=new Dr,n.addInterval(new Ln({start:o,stop:Be.MAXIMUM_VALUE}))):l(s)&&(n=new Dr,n.addInterval(new Ln({start:Be.MINIMUM_VALUE,stop:s})));return n}function F0e(){let e=new ac;return e.width=_y,e.height=_y,e.scaleByDistance=new kt(C0e,V0e,L0e,R0e),e.pixelOffsetScaleByDistance=new kt(C0e,V0e,L0e,R0e),e}function G4(){let e=new km;return e.outline=!0,e.outlineColor=D.WHITE,e}function A0e(){let e=new Nm;return e.translucencyByDistance=new kt(3e6,1,5e6,0),e.pixelOffset=new U(17,0),e.horizontalOrigin=_i.LEFT,e.font="16px sans-serif",e.style=Do.FILL_AND_OUTLINE,e}function E4(e,t,n,i,o){let r=Wn(e,"href",Pe.kml);if(!l(r)||r.length===0)return;if(r.indexOf("root://icons/palette-")===0){let a=r.charAt(21),c=ei(e,"x",Pe.gx)??0,d=ei(e,"y",Pe.gx)??0;c=Math.min(c/32,7),d=7-Math.min(d/32,7);let u=8*d+c;r=`https://maps.google.com/mapfiles/kml/pal${a}/icon${u}.png`}let s=Z4(r,n,i);if(o){let a=Wn(e,"refreshMode",Pe.kml),c=Wn(e,"viewRefreshMode",Pe.kml);a==="onInterval"||a==="onExpire"?_t(`kml-refreshMode-${a}`,`KML - Unsupported Icon refreshMode: ${a}`):(c==="onStop"||c==="onRegion")&&_t(`kml-refreshMode-${c}`,`KML - Unsupported Icon viewRefreshMode: ${c}`);let d=Wn(e,"viewBoundScale",Pe.kml)??1,u=c==="onStop"?"BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]":"",h=Wn(e,"viewFormat",Pe.kml)??u,p=Wn(e,"httpQuery",Pe.kml);l(h)&&s.setQueryParameters(ud(gD(h))),l(p)&&s.setQueryParameters(ud(gD(p)));let g=t._ellipsoid;return X4(s,t.camera,t.canvas,d,t._lastCameraView.bbox,g),s}return s}function Mot(e,t,n,i,o){let r=ei(t,"scale",Pe.kml),s=ei(t,"heading",Pe.kml),a=ZT(t,"color",Pe.kml),c=Fi(t,"Icon",Pe.kml),d=E4(c,e,i,o,!1);l(c)&&!l(d)&&(d=!1);let u=ei(c,"x",Pe.gx),h=ei(c,"y",Pe.gx),p=ei(c,"w",Pe.gx),g=ei(c,"h",Pe.gx),f=Fi(t,"hotSpot",Pe.kml),y=Ty(f,"x"),x=Ty(f,"y"),S=Ws(f,"xunits"),C=Ws(f,"yunits"),V=n.billboard;l(V)||(V=F0e(),n.billboard=V),V.image=d,V.scale=r,V.color=a,(l(u)||l(h)||l(p)||l(g))&&(V.imageSubRegion=new Ke(u,h,p,g)),l(s)&&s!==0&&(V.rotation=X.toRadians(-s),V.alignedAxis=m.UNIT_Z),r=r??1;let L,Z;l(y)&&(S==="pixels"?L=-y*r:S==="insetPixels"?L=(y-_y)*r:S==="fraction"&&(L=-y*_y*r),L+=_y*.5*r),l(x)&&(C==="pixels"?Z=x*r:C==="insetPixels"?Z=(-x+_y)*r:C==="fraction"&&(Z=x*_y*r),Z-=_y*.5*r),(l(L)||l(Z))&&(V.pixelOffset=new U(L,Z))}function bD(e,t,n,i,o){for(let r=0,s=t.childNodes.length;r<s;r++){let a=t.childNodes.item(r);if(a.localName==="IconStyle")Mot(e,a,n,i,o);else if(a.localName==="LabelStyle"){let c=n.label;l(c)||(c=A0e(),n.label=c),c.scale=ei(a,"scale",Pe.kml)??c.scale,c.fillColor=ZT(a,"color",Pe.kml)??c.fillColor,c.text=n.name}else if(a.localName==="LineStyle"){let c=n.polyline;l(c)||(c=new dc,n.polyline=c),c.width=ei(a,"width",Pe.kml),c.material=ZT(a,"color",Pe.kml),l(ZT(a,"outerColor",Pe.gx))&&_t("kml-gx:outerColor","KML - gx:outerColor is not supported in a LineStyle"),l(ei(a,"outerWidth",Pe.gx))&&_t("kml-gx:outerWidth","KML - gx:outerWidth is not supported in a LineStyle"),l(ei(a,"physicalWidth",Pe.gx))&&_t("kml-gx:physicalWidth","KML - gx:physicalWidth is not supported in a LineStyle"),l(Wh(a,"labelVisibility",Pe.gx))&&_t("kml-gx:labelVisibility","KML - gx:labelVisibility is not supported in a LineStyle")}else if(a.localName==="PolyStyle"){let c=n.polygon;l(c)||(c=G4(),n.polygon=c),c.material=ZT(a,"color",Pe.kml)??c.material,c.fill=Wh(a,"fill",Pe.kml)??c.fill,c.outline=Wh(a,"outline",Pe.kml)??c.outline}else if(a.localName==="BalloonStyle"){let c=C4(Wn(a,"bgColor",Pe.kml))??D.WHITE,d=C4(Wn(a,"textColor",Pe.kml))??D.BLACK,u=Wn(a,"text",Pe.kml);n.addProperty("balloonStyle"),n.balloonStyle={bgColor:c,textColor:d,text:u}}else if(a.localName==="ListStyle"){let c=Wn(a,"listItemType",Pe.kml);(c==="radioFolder"||c==="checkOffOnly")&&_t(`kml-listStyle-${c}`,`KML - Unsupported ListStyle with listItemType: ${c}`)}}}function Not(e,t,n,i,o){let r=new jo,s,a=-1,c=t.childNodes,d=c.length;for(let h=0;h<d;h++){let p=c[h];(p.localName==="Style"||p.localName==="StyleMap")&&(a=h)}if(a!==-1){let h=c[a];if(h.localName==="Style")bD(e,h,r,i,o);else{let p=Xh(h,"Pair",Pe.kml);for(let g=0;g<p.length;g++){let f=p[g],y=Wn(f,"key",Pe.kml);if(y==="normal"){let x=Wn(f,"styleUrl",Pe.kml);if(l(x))s=n.getById(x),l(s)||(s=n.getById(`#${x}`)),l(s)&&r.merge(s);else{let S=Fi(f,"Style",Pe.kml);bD(e,S,r,i,o)}}else _t(`kml-styleMap-${y}`,`KML - Unsupported StyleMap key: ${y}`)}}}let u=Wn(t,"styleUrl",Pe.kml);if(l(u)){let h=u;if(u[0]!=="#"&&u.indexOf("#")!==-1){let p=u.split("#"),g=p[0];h=`${i.getDerivedResource({url:g}).getUrlComponent()}#${p[1]}`}s=n.getById(h),l(s)||(s=n.getById(`#${h}`)),l(s)&&r.merge(s)}return r}function kot(e,t,n){return t.fetchXML().then(function(i){return M0e(e,i,n,t,!0)})}function M0e(e,t,n,i,o,r){let s,a,c,d,u=E0e(t,"Style",Pe.kml);if(l(u)){let y=u.length;for(s=0;s<y;s++)d=u[s],a=Ws(d,"id"),l(a)&&(a=`#${a}`,o&&l(i)&&(a=i.getUrlComponent()+a),l(n.getById(a))||(c=new jo({id:a}),n.add(c),bD(e,d,c,i,r)))}let h=E0e(t,"StyleMap",Pe.kml);if(l(h)){let y=h.length;for(s=0;s<y;s++){let x=h[s];if(a=Ws(x,"id"),l(a)){let S=Xh(x,"Pair",Pe.kml);for(let C=0;C<S.length;C++){let V=S[C],L=Wn(V,"key",Pe.kml);if(L==="normal"){if(a=`#${a}`,o&&l(i)&&(a=i.getUrlComponent()+a),!l(n.getById(a))){c=n.getOrCreateEntity(a);let Z=Wn(V,"styleUrl",Pe.kml);if(l(Z)){Z[0]!=="#"&&(Z=`#${Z}`),o&&l(i)&&(Z=i.getUrlComponent()+Z);let E=n.getById(Z);l(E)&&c.merge(E)}else d=Fi(V,"Style",Pe.kml),bD(e,d,c,i,r)}}else _t(`kml-styleMap-${L}`,`KML - Unsupported StyleMap key: ${L}`)}}}}let p=[],g=t.getElementsByTagName("styleUrl"),f=g.length;for(s=0;s<f;s++){let y=g[s].textContent;if(y[0]!=="#"){let x=y.split("#");if(x.length===2){let S=x[0],C=i.getDerivedResource({url:S});p.push(kot(e,C,n))}}}return p}function I4(e,t,n){let i=new Yb(e,t.id,["position"]),o=new Af(t.position);t.polyline=l(n.polyline)?n.polyline.clone():new dc,t.polyline.positions=new Ob([i,o])}function N0e(e,t){return!l(e)&&!l(t)||e==="clampToGround"?Je.CLAMP_TO_GROUND:e==="relativeToGround"?Je.RELATIVE_TO_GROUND:e==="absolute"?Je.NONE:t==="clampToSeaFloor"?(_t("kml-gx:altitudeMode-clampToSeaFloor","KML - <gx:altitudeMode>:clampToSeaFloor is currently not supported, using <kml:altitudeMode>:clampToGround."),Je.CLAMP_TO_GROUND):t==="relativeToSeaFloor"?(_t("kml-gx:altitudeMode-relativeToSeaFloor","KML - <gx:altitudeMode>:relativeToSeaFloor is currently not supported, using <kml:altitudeMode>:relativeToGround."),Je.RELATIVE_TO_GROUND):(l(e)?_t("kml-altitudeMode-unknown",`KML - Unknown <kml:altitudeMode>:${e}, using <kml:altitudeMode>:CLAMP_TO_GROUND.`):_t("kml-gx:altitudeMode-unknown",`KML - Unknown <gx:altitudeMode>:${t}, using <kml:altitudeMode>:CLAMP_TO_GROUND.`),Je.CLAMP_TO_GROUND)}function Uot(e,t,n){return n==="relativeToSeaFloor"||t==="absolute"||t==="relativeToGround"?e:((l(t)&&t!=="clampToGround"||l(n)&&n!=="clampToSeaFloor")&&_t("kml-altitudeMode-unknown",`KML - Unknown altitudeMode: ${t??n}`),new Af(e))}function Dot(e,t,n,i){if(!l(e))return;if(n==="relativeToSeaFloor"||t==="absolute"||t==="relativeToGround")return e;(l(t)&&t!=="clampToGround"||l(n)&&n!=="clampToSeaFloor")&&_t("kml-altitudeMode-unknown",`KML - Unknown altitudeMode: ${t??n}`);let o=e.length;for(let r=0;r<o;r++){let s=e[r];i.scaleToGeodeticSurface(s,s)}return e}function xD(e,t,n,i){let o=t.label;l(o)||(o=l(n.label)?n.label.clone():A0e(),t.label=o),o.text=t.name;let r=t.billboard;l(r)||(r=l(n.billboard)?n.billboard.clone():F0e(),t.billboard=r),l(r.image)?r.image.getValue()||(r.image=void 0):r.image=e._pinBuilder.fromColor(D.YELLOW,64);let s=1;l(r.scale)&&(s=r.scale.getValue(),s!==0?o.pixelOffset=new U(s*16+1,0):(o.pixelOffset=void 0,o.horizontalOrigin=void 0)),l(i)&&e._clampToGround&&(r.heightReference=i,o.heightReference=i)}function k0e(e,t){let n=e.path;l(n)||(n=new Dp,n.leadTime=0,e.path=n);let i=t.polyline;l(i)&&(n.material=i.material,n.width=i.width)}function Bot(e,t,n,i,o){let r=Wn(n,"coordinates",Pe.kml),s=Wn(n,"altitudeMode",Pe.kml),a=Wn(n,"altitudeMode",Pe.gx),c=Wh(n,"extrude",Pe.kml),d=e._ellipsoid,u=yD(r,d);return i.position=u,xD(e,i,o,N0e(s,a)),c&&_w(s,a)&&I4(t,i,o),!0}function I0e(e,t,n,i,o){let r=Fi(n,"coordinates",Pe.kml),s=Wn(n,"altitudeMode",Pe.kml),a=Wn(n,"altitudeMode",Pe.gx),c=Wh(n,"extrude",Pe.kml),d=Wh(n,"tessellate",Pe.kml),u=_w(s,a),h=ei(n,"drawOrder",Pe.gx),p=e._ellipsoid,g=pD(r,p),f=o.polyline;if(u&&c){let y=new Bp;i.wall=y,y.positions=g;let x=o.polygon;l(x)&&(y.fill=x.fill,y.material=x.material),y.outline=!0,l(f)?(y.outlineColor=l(f.material)?f.material.color:D.WHITE,y.outlineWidth=f.width):l(x)&&(y.outlineColor=l(x.material)?x.material.color:D.WHITE)}else if(e._clampToGround&&!u&&d){let y=new dc;y.clampToGround=!0,i.polyline=y,y.positions=g,l(f)?(y.material=l(f.material)?f.material.color.getValue(Be.MINIMUM_VALUE):D.WHITE,y.width=f.width??1):(y.material=D.WHITE,y.width=1),y.zIndex=h}else l(h)&&_t("kml-gx:drawOrder","KML - gx:drawOrder is not supported in LineStrings when clampToGround is false"),e._clampToGround&&!d&&_t("kml-line-tesselate","Ignoring clampToGround for KML lines without the tessellate flag."),f=l(f)?f.clone():new dc,i.polyline=f,f.positions=Dot(g,s,a,p),(!d||u)&&(f.arcType=en.NONE);return!0}function Oot(e,t,n,i,o){let r=Fi(n,"outerBoundaryIs",Pe.kml),s=Fi(r,"LinearRing",Pe.kml),a=Fi(s,"coordinates",Pe.kml),c=e._ellipsoid,d=pD(a,c),u=Wh(n,"extrude",Pe.kml),h=Wn(n,"altitudeMode",Pe.kml),p=Wn(n,"altitudeMode",Pe.gx),g=_w(h,p),f=l(o.polygon)?o.polygon.clone():G4(),y=o.polyline;if(l(y)&&(f.outlineColor=l(y.material)?y.material.color:D.WHITE,f.outlineWidth=y.width),i.polygon=f,g?(f.perPositionHeight=!0,f.extrudedHeight=u?0:void 0):e._clampToGround||(f.height=0),l(d)){let x=new Fa(d),S=Xh(n,"innerBoundaryIs",Pe.kml);for(let C=0;C<S.length;C++){s=Xh(S[C],"LinearRing",Pe.kml);for(let V=0;V<s.length;V++)a=Fi(s[V],"coordinates",Pe.kml),d=pD(a,c),l(d)&&x.holes.push(new Fa(d))}f.hierarchy=x}return!0}function Yot(e,t,n,i,o){let r=Wn(n,"altitudeMode",Pe.kml),s=Wn(n,"altitudeMode",Pe.gx),a=Xh(n,"coord",Pe.gx),c=Xh(n,"angles",Pe.gx),d=Xh(n,"when",Pe.kml),u=Wh(n,"extrude",Pe.kml),h=_w(r,s),p=e._ellipsoid;c.length>0&&_t("kml-gx:angles","KML - gx:angles are not supported in gx:Tracks");let g=Math.min(a.length,d.length),f=[],y=[];for(let S=0;S<g;S++){let C=yD(a[S].textContent,p);f.push(C),y.push(q.fromIso8601(d[S].textContent))}let x=new _a;return x.addSamples(y,f),i.position=x,xD(e,i,o,N0e(r,s)),k0e(i,o),i.availability=new Dr,d.length>0&&i.availability.addInterval(new Ln({start:y[0],stop:y[y.length-1]})),h&&u&&I4(t,i,o),!0}function X0e(e,t,n,i,o,r,s,a,c){let d=e[0],u=e[e.length-1],h=new _a;h.addSamples(e,t),n.intervals.addInterval(new Ln({start:d,stop:u,isStartIncluded:c,isStopIncluded:c,data:Uot(h,s,a)})),i.addInterval(new Ln({start:d,stop:u,isStartIncluded:c,isStopIncluded:c})),o.intervals.addInterval(new Ln({start:d,stop:u,isStartIncluded:c,isStopIncluded:c,data:r}))}function zot(e,t,n,i,o){let r=Wh(n,"interpolate",Pe.gx),s=Xh(n,"Track",Pe.gx),a,c,d,u=!1,h=new Hb,p=new Dr,g=new ya,f=e._ellipsoid;for(let y=0,x=s.length;y<x;y++){let S=s[y],C=Xh(S,"when",Pe.kml),V=Xh(S,"coord",Pe.gx),L=Wn(S,"altitudeMode",Pe.kml),Z=Wn(S,"altitudeMode",Pe.gx),E=_w(L,Z),P=Wh(S,"extrude",Pe.kml),W=Math.min(V.length,C.length),v=[];a=[];for(let A=0;A<W;A++){let b=yD(V[A].textContent,f);v.push(b),a.push(q.fromIso8601(C[A].textContent))}r&&(l(c)&&X0e([c,a[0]],[d,v[0]],g,p,h,!1,"absolute",void 0,!1),c=a[W-1],d=v[v.length-1]),X0e(a,v,g,p,h,E&&P,L,Z,!0),u=u||E&&P}return i.availability=p,i.position=g,xD(e,i,o),k0e(i,o),u&&(I4(t,i,o),i.polyline.show=h),!0}var U0e={Point:Bot,LineString:I0e,LinearRing:I0e,Polygon:Oot,Track:Yot,MultiTrack:zot,MultiGeometry:Hot,Model:Kot};function Hot(e,t,n,i,o,r){let s=n.childNodes,a=!1;for(let c=0,d=s.length;c<d;c++){let u=s.item(c),h=U0e[u.localName];if(l(h)){let p=w0e(u,t,r);p.parent=i,p.name=i.name,p.availability=i.availability,p.description=i.description,p.kml=i.kml,h(e,t,u,p,o)&&(a=!0)}}return a}function Kot(e,t,n,i,o){return _t("kml-unsupportedGeometry",`KML - Unsupported geometry: ${n.localName}`),!1}function Jot(e,t){let n=Fi(e,"ExtendedData",Pe.kml);if(!l(n))return;l(Fi(n,"SchemaData",Pe.kml))&&_t("kml-schemaData","KML - SchemaData is unsupported"),l(Ws(n,"xmlns:prefix"))&&_t("kml-extendedData","KML - ExtendedData with xmlns:prefix is unsupported");let i={},o=Xh(n,"Data",Pe.kml);if(l(o)){let r=o.length;for(let s=0;s<r;s++){let a=o[s],c=Ws(a,"name");l(c)&&(i[c]={displayName:Wn(a,"displayName",Pe.kml),value:Wn(a,"value",Pe.kml)})}}t.kml.extendedData=i}var po;typeof document<"u"&&(po=document.createElement("div"));function Qot(e,t,n,i,o){let r,s,a,c=t.kml,d=c.extendedData,u=Wn(e,"description",Pe.kml),h=t.balloonStyle??n.balloonStyle,p=D.WHITE,g=D.BLACK,f=u;l(h)&&(p=h.bgColor??D.WHITE,g=h.textColor??D.BLACK,f=h.text??u);let y;if(l(f)){if(f=f.replace("$[name]",t.name??""),f=f.replace("$[description]",u??""),f=f.replace("$[address]",c.address??""),f=f.replace("$[Snippet]",c.snippet??""),f=f.replace("$[id]",t.id),f=f.replace("$[geDirections]",""),l(d)){let C=f.match(/\$\[.+?\]/g);if(C!==null)for(r=0;r<C.length;r++){let V=C[r],L=V.substr(2,V.length-3),Z=/\/displayName$/.test(L);L=L.replace(/\/displayName$/,""),y=d[L],l(y)&&(y=Z?y.displayName:y.value),l(y)&&(f=f.replace(V,y??""))}}}else if(l(d)&&(a=Object.keys(d),a.length>0)){for(f='<table class="cesium-infoBox-defaultTable cesium-infoBox-defaultTable-lighter"><tbody>',r=0;r<a.length;r++)s=a[r],y=d[s],f+=`<tr><th>${y.displayName??s}</th><td>${y.value??""}</td></tr>`;f+="</tbody></table>"}if(!l(f))return;f=Xot.link(f),po.innerHTML=f;let x=po.querySelectorAll("a");for(r=0;r<x.length;r++)x[r].setAttribute("target","_blank");l(i)&&i.keys.length>1&&(Kd(po,"a","href",i),Kd(po,"link","href",i),Kd(po,"area","href",i),Kd(po,"img","src",i),Kd(po,"iframe","src",i),Kd(po,"video","src",i),Kd(po,"audio","src",i),Kd(po,"source","src",i),Kd(po,"track","src",i),Kd(po,"input","src",i),Kd(po,"embed","src",i),Kd(po,"script","src",i),Kd(po,"video","poster",i)),Jd(po,"a","href",o),Jd(po,"link","href",o),Jd(po,"area","href",o),Jd(po,"img","src",o),Jd(po,"iframe","src",o),Jd(po,"video","src",o),Jd(po,"audio","src",o),Jd(po,"source","src",o),Jd(po,"track","src",o),Jd(po,"input","src",o),Jd(po,"embed","src",o),Jd(po,"script","src",o),Jd(po,"video","poster",o);let S='<div class="cesium-infoBox-description-lighter" style="';S+="overflow:auto;",S+="word-wrap:break-word;",S+=`background-color:${p.toCssColorString()};`,S+=`color:${g.toCssColorString()};`,S+='">',S+=`${po.innerHTML}</div>`,po.innerHTML="",t.description=S}function _D(e,t,n){let i=n.entityCollection,o=n.parentEntity,r=n.sourceResource,s=n.uriResolver,a=w0e(t,i,n.context),c=a.kml,d=Not(e,t,n.styleCollection,r,s),u=Wn(t,"name",Pe.kml);a.name=u,a.parent=o;let h=Aot(t);l(h)||(h=Fot(t)),a.availability=h,P4(a);function p(V){return V?V.show&&p(V.parent):!0}let g=Wh(t,"visibility",Pe.kml);a.show=p(o)&&(g??!0);let f=Fi(t,"author",Pe.atom),y=c.author;y.name=Wn(f,"name",Pe.atom),y.uri=Wn(f,"uri",Pe.atom),y.email=Wn(f,"email",Pe.atom);let x=Fi(t,"link",Pe.atom),S=c.link;S.href=Ws(x,"href"),S.hreflang=Ws(x,"hreflang"),S.rel=Ws(x,"rel"),S.type=Ws(x,"type"),S.title=Ws(x,"title"),S.length=Ws(x,"length"),c.address=Wn(t,"address",Pe.kml),c.phoneNumber=Wn(t,"phoneNumber",Pe.kml),c.snippet=Wn(t,"Snippet",Pe.kml),Jot(t,a),Qot(t,a,d,s,r);let C=e._ellipsoid;return O0e(t,a,C),B0e(t,a,C),l(Fi(t,"Region",Pe.kml))&&_t("kml-region","KML - Placemark Regions are unsupported"),{entity:a,styleEntity:d}}function D0e(e,t,n,i){i.addNodes(t.childNodes,n),i.process()}function jot(e,t,n,i){let o=_D(e,t,n),r=Ye(n);r.parentEntity=o.entity,D0e(e,t,r,i)}function qot(e,t,n,i){let o=_D(e,t,n),r=o.entity,s=o.styleEntity,a=!1,c=t.childNodes;for(let d=0,u=c.length;d<u&&!a;d++){let h=c.item(d),p=U0e[h.localName];l(p)&&(p(e,n.entityCollection,h,r,s,r.id),a=!0)}a||(r.merge(s),xD(e,r,s))}var $ot={FlyTo:nrt,Wait:trt,SoundCue:_4,AnimatedUpdate:_4,TourControl:_4};function ert(e,t,n,i){let o=Wn(t,"name",Pe.kml),r=Ws(t,"id"),s=new pw(o,r),a=Fi(t,"Playlist",Pe.gx);if(a){let c=e._ellipsoid,d=a.childNodes;for(let u=0;u<d.length;u++){let h=d[u];if(h.localName){let p=$ot[h.localName];p?p(s,h,c):console.log(`Unknown KML Tour playlist entry type ${h.localName}`)}}}e._kmlTours.push(s)}function _4(e,t){_t(`KML Tour unsupported node ${t.localName}`)}function trt(e,t){let n=ei(t,"duration",Pe.gx);e.addPlaylistEntry(new yw(n))}function nrt(e,t,n){let i=ei(t,"duration",Pe.gx),o=Wn(t,"flyToMode",Pe.gx),r={kml:{}};O0e(t,r,n),B0e(t,r,n);let s=r.kml.lookAt||r.kml.camera,a=new gw(i,o,s);e.addPlaylistEntry(a)}function B0e(e,t,n){let i=Fi(e,"Camera",Pe.kml);if(l(i)){let o=ei(i,"longitude",Pe.kml)??0,r=ei(i,"latitude",Pe.kml)??0,s=ei(i,"altitude",Pe.kml)??0,a=ei(i,"heading",Pe.kml)??0,c=ei(i,"tilt",Pe.kml)??0,d=ei(i,"roll",Pe.kml)??0,u=m.fromDegrees(o,r,s,n),h=Ea.fromDegrees(a,c-90,d);t.kml.camera=new Jv(u,h)}}function O0e(e,t,n){let i=Fi(e,"LookAt",Pe.kml);if(l(i)){let o=ei(i,"longitude",Pe.kml)??0,r=ei(i,"latitude",Pe.kml)??0,s=ei(i,"altitude",Pe.kml)??0,a=ei(i,"heading",Pe.kml),c=ei(i,"tilt",Pe.kml),d=ei(i,"range",Pe.kml)??0;c=X.toRadians(c??0),a=X.toRadians(a??0);let u=new sm(a,c-X.PI_OVER_TWO,d),h=m.fromDegrees(o,r,s,n);t.kml.lookAt=new fw(h,u)}}function irt(e,t,n,i){let o=n.screenOverlayContainer;if(!l(o))return;let r=n.sourceResource,s=n.uriResolver,a=Fi(t,"Icon",Pe.kml),c=E4(a,e,r,s,!1);if(!l(c))return;let d=document.createElement("img");e._screenOverlays.push(d),d.src=c.url,d.onload=function(){let u=["position: absolute"],h=Fi(t,"screenXY",Pe.kml),p=Fi(t,"overlayXY",Pe.kml),g=Fi(t,"size",Pe.kml),f,y,x,S,C,V;l(g)&&(f=Ty(g,"x"),y=Ty(g,"y"),x=Ws(g,"xunits"),S=Ws(g,"yunits"),l(f)&&f!==-1&&f!==0&&(x==="fraction"?C=`width: ${Math.floor(f*100)}%`:x==="pixels"&&(C=`width: ${f}px`),u.push(C)),l(y)&&y!==-1&&y!==0&&(S==="fraction"?V=`height: ${Math.floor(y*100)}%`:S==="pixels"&&(V=`height: ${y}px`),u.push(V))),d.style=u.join(";");let L=0,Z=d.height;l(p)&&(f=Ty(p,"x"),y=Ty(p,"y"),x=Ws(p,"xunits"),S=Ws(p,"yunits"),l(f)&&(x==="fraction"?L=f*d.width:(x==="pixels"||x==="insetPixels")&&(L=f)),l(y)&&(S==="fraction"?Z=y*d.height:(S==="pixels"||S==="insetPixels")&&(Z=y))),l(h)&&(f=Ty(h,"x"),y=Ty(h,"y"),x=Ws(h,"xunits"),S=Ws(h,"yunits"),l(f)&&(x==="fraction"?C=`left: calc(${Math.floor(f*100)}% - ${L}px)`:x==="pixels"?C=`left: ${f-L}px`:x==="insetPixels"&&(C=`right: ${f-L}px`),u.push(C)),l(y)&&(S==="fraction"?V=`bottom: calc(${Math.floor(y*100)}% - ${Z}px)`:S==="pixels"?V=`bottom: ${y-Z}px`:S==="insetPixels"&&(V=`top: ${y-Z}px`),u.push(V))),d.style=u.join(";")},o.appendChild(d)}function ort(e,t,n,i){let r=_D(e,t,n).entity,s,a=!1,c=e._ellipsoid,d=pD(Fi(t,"LatLonQuad",Pe.gx),c),u=ei(t,"drawOrder",Pe.kml);if(l(d))s=G4(),s.hierarchy=new Fa(d),s.zIndex=u,r.polygon=s,a=!0;else{s=new Um,s.zIndex=u,r.rectangle=s;let f=Fi(t,"LatLonBox",Pe.kml);if(l(f)){let y=ei(f,"west",Pe.kml),x=ei(f,"south",Pe.kml),S=ei(f,"east",Pe.kml),C=ei(f,"north",Pe.kml);l(y)&&(y=X.negativePiToPi(X.toRadians(y))),l(x)&&(x=X.clampToLatitudeRange(X.toRadians(x))),l(S)&&(S=X.negativePiToPi(X.toRadians(S))),l(C)&&(C=X.clampToLatitudeRange(X.toRadians(C))),s.coordinates=new ce(y,x,S,C);let V=ei(f,"rotation",Pe.kml);if(l(V)){let L=X.toRadians(V);s.rotation=L,s.stRotation=L}}}let h=Fi(t,"Icon",Pe.kml),p=E4(h,e,n.sourceResource,n.uriResolver,!0);if(l(p)){a&&_t("kml-gx:LatLonQuad","KML - gx:LatLonQuad Icon does not support texture projection.");let f=ei(h,"x",Pe.gx),y=ei(h,"y",Pe.gx),x=ei(h,"w",Pe.gx),S=ei(h,"h",Pe.gx);(l(f)||l(y)||l(x)||l(S))&&_t("kml-groundOverlay-xywh","KML - gx:x, gx:y, gx:w, gx:h aren't supported for GroundOverlays"),s.material=p,s.material.color=ZT(t,"color",Pe.kml),s.material.transparent=!0}else s.material=ZT(t,"color",Pe.kml);let g=Wn(t,"altitudeMode",Pe.kml);l(g)?g==="absolute"?(s.height=ei(t,"altitude",Pe.kml),s.zIndex=void 0):g!=="clampToGround"&&_t("kml-altitudeMode-unknown",`KML - Unknown altitudeMode: ${g}`):(g=Wn(t,"altitudeMode",Pe.gx),g==="relativeToSeaFloor"?(_t("kml-altitudeMode-relativeToSeaFloor","KML - altitudeMode relativeToSeaFloor is currently not supported, treating as absolute."),s.height=ei(t,"altitude",Pe.kml),s.zIndex=void 0):g==="clampToSeaFloor"?_t("kml-altitudeMode-clampToSeaFloor","KML - altitudeMode clampToSeaFloor is currently not supported, treating as clampToGround."):l(g)&&_t("kml-altitudeMode-unknown",`KML - Unknown altitudeMode: ${g}`))}function Y0e(e,t,n,i){e._unsupportedNode.raiseEvent(e,n.parentEntity,t,n.entityCollection,n.styleCollection,n.sourceResource,n.uriResolver),_t(`kml-unsupportedFeature-${t.nodeName}`,`KML - Unsupported feature: ${t.nodeName}`)}var Sy={INTERVAL:0,EXPIRE:1,STOP:2};function gD(e){if(!l(e)||e.length===0)return"";let t=e[0];return(t==="&"||t==="?")&&(e=e.substring(1)),e}var rrt=new ce,vV=new he,T4=new U,srt=new m;function X4(e,t,n,i,o,r){function s(d){return d<-X.PI_OVER_TWO?-X.PI_OVER_TWO:d>X.PI_OVER_TWO?X.PI_OVER_TWO:d}function a(d){return d>X.PI?d-X.TWO_PI:d<-X.PI?d+X.TWO_PI:d}let c=rx(e.queryParameters);if(c=c.replace(/%5B/g,"[").replace(/%5D/g,"]"),l(t)&&t._mode!==oe.MORPHING){let d,u;if(o=o??rrt,l(n)&&(T4.x=n.clientWidth*.5,T4.y=n.clientHeight*.5,d=t.pickEllipsoid(T4,r,srt)),l(d)?u=r.cartesianToCartographic(d,vV):(u=ce.center(o,vV),d=r.cartographicToCartesian(u)),l(i)&&!X.equalsEpsilon(i,1,X.EPSILON9)){let S=o.width*i*.5,C=o.height*i*.5;o=new ce(a(u.longitude-S),s(u.latitude-C),a(u.longitude+S),s(u.latitude+C))}c=c.replace("[bboxWest]",X.toDegrees(o.west).toString()),c=c.replace("[bboxSouth]",X.toDegrees(o.south).toString()),c=c.replace("[bboxEast]",X.toDegrees(o.east).toString()),c=c.replace("[bboxNorth]",X.toDegrees(o.north).toString());let h=X.toDegrees(u.longitude).toString(),p=X.toDegrees(u.latitude).toString();c=c.replace("[lookatLon]",h),c=c.replace("[lookatLat]",p),c=c.replace("[lookatTilt]",X.toDegrees(t.pitch).toString()),c=c.replace("[lookatHeading]",X.toDegrees(t.heading).toString()),c=c.replace("[lookatRange]",m.distance(t.positionWC,d)),c=c.replace("[lookatTerrainLon]",h),c=c.replace("[lookatTerrainLat]",p),c=c.replace("[lookatTerrainAlt]",u.height.toString()),r.cartesianToCartographic(t.positionWC,vV),c=c.replace("[cameraLon]",X.toDegrees(vV.longitude).toString()),c=c.replace("[cameraLat]",X.toDegrees(vV.latitude).toString()),c=c.replace("[cameraAlt]",X.toDegrees(vV.height).toString());let g=t.frustum,f=g.aspectRatio,y="",x="";if(l(f)){let S=X.toDegrees(g.fov);f>1?(y=S,x=S/f):(x=S,y=S*f)}c=c.replace("[horizFov]",y.toString()),c=c.replace("[vertFov]",x.toString())}else c=c.replace("[bboxWest]","-180"),c=c.replace("[bboxSouth]","-90"),c=c.replace("[bboxEast]","180"),c=c.replace("[bboxNorth]","90"),c=c.replace("[lookatLon]",""),c=c.replace("[lookatLat]",""),c=c.replace("[lookatRange]",""),c=c.replace("[lookatTilt]",""),c=c.replace("[lookatHeading]",""),c=c.replace("[lookatTerrainLon]",""),c=c.replace("[lookatTerrainLat]",""),c=c.replace("[lookatTerrainAlt]",""),c=c.replace("[cameraLon]",""),c=c.replace("[cameraLat]",""),c=c.replace("[cameraAlt]",""),c=c.replace("[horizFov]",""),c=c.replace("[vertFov]","");l(n)?(c=c.replace("[horizPixels]",n.clientWidth),c=c.replace("[vertPixels]",n.clientHeight)):(c=c.replace("[horizPixels]",""),c=c.replace("[vertPixels]","")),c=c.replace("[terrainEnabled]","1"),c=c.replace("[clientVersion]","1"),c=c.replace("[kmlVersion]","2.2"),c=c.replace("[clientName]","Cesium"),c=c.replace("[language]","English"),e.setQueryParameters(ud(c))}function art(e,t,n,i){let r=_D(e,t,n).entity,s=n.sourceResource,a=n.uriResolver,c=Fi(t,"Link",Pe.kml);if(l(c)||(c=Fi(t,"Url",Pe.kml)),l(c)){let d=Wn(c,"href",Pe.kml),u,h;if(l(d)){let p=d;if(d=Z4(d,s,n.uriResolver),/^data:/.test(d.getUrlComponent()))/\.kmz/i.test(s.getUrlComponent())||(p=s.getDerivedResource({url:p}));else{if(p=d.clone(),u=Wn(c,"viewRefreshMode",Pe.kml),u==="onRegion"){_t("kml-refrehMode-onRegion","KML - Unsupported viewRefreshMode: onRegion");return}h=Wn(c,"viewBoundScale",Pe.kml)??1;let x=u==="onStop"?"BBOX=[bboxWest],[bboxSouth],[bboxEast],[bboxNorth]":"",S=Wn(c,"viewFormat",Pe.kml)??x,C=Wn(c,"httpQuery",Pe.kml);l(S)&&d.setQueryParameters(ud(gD(S))),l(C)&&d.setQueryParameters(ud(gD(C)));let V=e._ellipsoid;X4(d,e.camera,e.canvas,h,e._lastCameraView.bbox,V)}let g={sourceUri:p,uriResolver:a,context:r.id,screenOverlayContainer:n.screenOverlayContainer},f=new Qs,y=W4(e,f,d,g).then(function(x){let S=e._entityCollection,C=f.values;S.suspendEvents();for(let Z=0;Z<C.length;Z++){let E=C[Z];l(E.parent)||(E.parent=r,P4(E)),S.add(E)}S.resumeEvents();let V=Wn(c,"refreshMode",Pe.kml),L=ei(c,"refreshInterval",Pe.kml)??0;if(V==="onInterval"&&L>0||V==="onExpire"||u==="onStop"){let Z=Fi(x,"NetworkLinkControl",Pe.kml),E=l(Z),P=q.now(),W={id:zn(),href:d,cookie:{},lastUpdated:P,updating:!1,entity:r,viewBoundScale:h,needsUpdate:!1,cameraUpdateTime:P},v=0;if(E&&(W.cookie=ud(Wn(Z,"cookie",Pe.kml)??""),v=ei(Z,"minRefreshPeriod",Pe.kml)??0),V==="onInterval")E&&(L=Math.max(v,L)),W.refreshMode=Sy.INTERVAL,W.time=L;else if(V==="onExpire"){let A;if(E&&(A=Wn(Z,"expires",Pe.kml)),l(A))try{let b=q.fromIso8601(A),R=q.secondsDifference(b,P);R>0&&R<v&&q.addSeconds(P,v,b),W.refreshMode=Sy.EXPIRE,W.time=b}catch{_t("kml-refreshMode-onInterval-onExpire","KML - NetworkLinkControl expires is not a valid date")}else _t("kml-refreshMode-onExpire","KML - refreshMode of onExpire requires the NetworkLinkControl to have an expires element")}else l(e.camera)?(W.refreshMode=Sy.STOP,W.time=ei(c,"viewRefreshTime",Pe.kml)??0):_t("kml-refrehMode-onStop-noCamera","A NetworkLink with viewRefreshMode=onStop requires the `camera` property to be defined.");l(W.refreshMode)&&e._networkLinks.set(W.id,W)}}).catch(function(x){_t(`An error occured during loading ${d.url}`),e._error.raiseEvent(e,x)});i.addPromise(y)}}}function crt(e,t,n,i){let o=R4[t.localName];return l(o)?o(e,t,n,i):Y0e(e,t,n,i)}function V4(e,t,n,i,o,r,s){t.removeAll();let a=n.documentElement,c=a.localName==="Document"?a:Fi(a,"Document",Pe.kml),d=Wn(c,"name",Pe.kml);l(d)||(d=Db(i.getUrlComponent())),l(e._name)||(e._name=d);let u=new Qd._DeferredLoading(e),h=new Qs(e);return Promise.all(M0e(e,n,h,i,!1,o)).then(function(){let p=n.documentElement;if(p.localName==="kml"){let f=p.childNodes;for(let y=0;y<f.length;y++){let x=f[y];if(l(R4[x.localName])){p=x;break}}}let g={parentEntity:void 0,entityCollection:t,styleCollection:h,sourceResource:i,uriResolver:o,context:s,screenOverlayContainer:r};return t.suspendEvents(),crt(e,p,g,u),t.resumeEvents(),u.wait().then(function(){return n.documentElement})})}function lrt(e,t,n,i,o){let r=nn("ThirdParty/Workers/z-worker-pako.js");LV({workerScripts:{deflate:[r,"./pako_deflate.min.js"],inflate:[r,"./pako_inflate.min.js"]}});let s=new lD(new s0(n));return Promise.resolve(s.getEntries()).then(function(a){let c=[],d={},u;for(let h=0;h<a.length;h++){let p=a[h];p.directory||(/\.kml$/i.test(p.filename)&&(!l(u)||!/\//i.test(p.filename))?(l(u)&&c.push(x4(u,d)),u=p):c.push(x4(p,d)))}return l(u)&&c.push(wot(u,d)),Promise.all(c).then(function(){if(s.close(),!l(d.kml))throw new ae("KMZ file does not contain a KML document.");return d.keys=Object.keys(d),V4(e,t,d.kml,i,d,o)})})}function W4(e,t,n,i){i=i??Y.EMPTY_OBJECT;let o=i.sourceUri,r=i.uriResolver,s=i.context,a=i.screenOverlayContainer,c=n;if(typeof n=="string"||n instanceof Ze){n=Ze.createIfNeeded(n),c=n.fetchBlob(),o=o??n.clone();let d=e._resourceCredits,u=n.credits;if(l(u)){let h=u.length;for(let p=0;p<h;p++)d.push(u[p])}}else o=o??Ze.DEFAULT.clone();return o=Ze.createIfNeeded(o),l(a)&&(a=Xn(a)),Promise.resolve(c).then(function(d){return d instanceof Blob?Pot(d).then(function(u){return u?lrt(e,t,d,o,a):vot(d).then(function(h){h=P0e(h),h=v0e(h);let p,g;try{p=L4.parseFromString(h,"application/xml")}catch(f){g=f.toString()}if(l(g)||p.body||p.documentElement.tagName==="parsererror"){let f=l(g)?g:p.documentElement.firstChild.nodeValue;throw f||(f=p.body.innerText),new ae(f)}return V4(e,t,p,o,r,a,s)})}):V4(e,t,d,o,r,a,s)}).catch(function(d){return e._error.raiseEvent(e,d),console.log(d),Promise.reject(d)})}function Qd(e){e=e??Y.EMPTY_OBJECT;let t=e.camera,n=e.canvas;this._changed=new be,this._error=new be,this._loading=new be,this._refresh=new be,this._unsupportedNode=new be,this._clock=void 0,this._entityCollection=new Qs(this),this._name=void 0,this._isLoading=!1,this._pinBuilder=new t0,this._networkLinks=new Gt,this._entityCluster=new vd,this.canvas=n,this.camera=t,this._lastCameraView={position:l(t)?m.clone(t.positionWC):void 0,direction:l(t)?m.clone(t.directionWC):void 0,up:l(t)?m.clone(t.upWC):void 0,bbox:l(t)?t.computeViewRectangle():ce.clone(ce.MAX_VALUE)},this._ellipsoid=e.ellipsoid??ne.default;let i=e.credit;typeof i=="string"&&(i=new Ct(i)),this._credit=i,this._resourceCredits=[],this._kmlTours=[],this._screenOverlays=[]}Qd.load=function(e,t){return t=t??Y.EMPTY_OBJECT,new Qd(t).load(e,t)};Object.defineProperties(Qd.prototype,{name:{get:function(){return this._name},set:function(e){this._name!==e&&(this._name=e,this._changed.raiseEvent(this))}},clock:{get:function(){return this._clock}},entities:{get:function(){return this._entityCollection}},isLoading:{get:function(){return this._isLoading}},changedEvent:{get:function(){return this._changed}},errorEvent:{get:function(){return this._error}},loadingEvent:{get:function(){return this._loading}},refreshEvent:{get:function(){return this._refresh}},unsupportedNodeEvent:{get:function(){return this._unsupportedNode}},show:{get:function(){return this._entityCollection.show},set:function(e){this._entityCollection.show=e}},clustering:{get:function(){return this._entityCluster},set:function(e){this._entityCluster=e}},credit:{get:function(){return this._credit}},kmlTours:{get:function(){return this._kmlTours}}});Qd.prototype.load=function(e,t){t=t??Y.EMPTY_OBJECT,Br.setLoading(this,!0);let n=this._name;this._name=void 0,this._clampToGround=t.clampToGround??!1;let i=this;return W4(this,this._entityCollection,e,t).then(function(){let o,r=i._entityCollection.computeAvailability(),s=r.start,a=r.stop,c=q.equals(s,Be.MINIMUM_VALUE),d=q.equals(a,Be.MAXIMUM_VALUE);if(!c||!d){let h;c&&(h=new Date,h.setHours(0,0,0,0),s=q.fromDate(h)),d&&(h=new Date,h.setHours(24,0,0,0),a=q.fromDate(h)),o=new _h,o.startTime=s,o.stopTime=a,o.currentTime=q.clone(s),o.clockRange=Or.LOOP_STOP,o.clockStep=fo.SYSTEM_CLOCK_MULTIPLIER,o.multiplier=Math.round(Math.min(Math.max(q.secondsDifference(a,s)/60,1),31556900))}let u=!1;return o!==i._clock&&(i._clock=o,u=!0),n!==i._name&&(u=!0),u&&i._changed.raiseEvent(i),Br.setLoading(i,!1),i}).catch(function(o){return Br.setLoading(i,!1),i._error.raiseEvent(i,o),console.log(o),Promise.reject(o)})};Qd.prototype.destroy=function(){for(;this._screenOverlays.length>0;)this._screenOverlays.pop().remove()};function P4(e){let t=e.parent;if(l(t)){let n=t.availability;if(l(n)){let i=e.availability;l(i)?i.intersect(n):e.availability=n}}}function drt(e,t,n,i,o){return function(r){if(!i.contains(t.id))return;let s=!1,a=Fi(r,"NetworkLinkControl",Pe.kml),c=l(a),d=0;if(c){if(l(Fi(a,"Update",Pe.kml))){_t("kml-networkLinkControl-update","KML - NetworkLinkControl updates aren't supported."),t.updating=!1,i.remove(t.id);return}t.cookie=ud(Wn(a,"cookie",Pe.kml)??""),d=ei(a,"minRefreshPeriod",Pe.kml)??0}let u=q.now(),h=t.refreshMode;if(h===Sy.INTERVAL)l(a)&&(t.time=Math.max(d,t.time));else if(h===Sy.EXPIRE){let P;if(l(a)&&(P=Wn(a,"expires",Pe.kml)),l(P))try{let W=q.fromIso8601(P),v=q.secondsDifference(W,u);v>0&&v<d&&q.addSeconds(u,d,W),t.time=W}catch{_t("kml-networkLinkControl-expires","KML - NetworkLinkControl expires is not a valid date"),s=!0}else _t("kml-refreshMode-onExpire","KML - refreshMode of onExpire requires the NetworkLinkControl to have an expires element"),s=!0}let p=t.entity,g=e._entityCollection,f=n.values;function y(P){g.remove(P);let W=P._children,v=W.length;for(let A=0;A<v;++A)y(W[A])}g.suspendEvents();let x=g.values.slice(),S;for(S=0;S<x.length;++S){let P=x[S];P.parent===p&&(P.parent=void 0,y(P))}for(g.resumeEvents(),g.suspendEvents(),S=0;S<f.length;S++){let P=f[S];l(P.parent)||(P.parent=p,P4(P)),g.add(P)}g.resumeEvents(),s?i.remove(t.id):t.lastUpdated=u;let C=g.computeAvailability(),V=C.start,L=C.stop,Z=q.equals(V,Be.MINIMUM_VALUE),E=q.equals(L,Be.MAXIMUM_VALUE);if(!Z||!E){let P=e._clock;(P.startTime!==V||P.stopTime!==L)&&(P.startTime=V,P.stopTime=L,e._changed.raiseEvent(e))}t.updating=!1,t.needsUpdate=!1,e._refresh.raiseEvent(e,o.getUrlComponent(!0))}}var S4=new Gt;Qd.prototype.update=function(e){let t=this._networkLinks;if(t.length===0)return!0;let n=q.now(),i=this;S4.removeAll();function o(u){let h=u._children,p=h.length;for(let g=0;g<p;++g){let f=h[g];S4.set(f.id,f),o(f)}}let r=!1,s=this._lastCameraView,a=this.camera;l(a)&&!(a.positionWC.equalsEpsilon(s.position,X.EPSILON7)&&a.directionWC.equalsEpsilon(s.direction,X.EPSILON7)&&a.upWC.equalsEpsilon(s.up,X.EPSILON7))&&(s.position=m.clone(a.positionWC),s.direction=m.clone(a.directionWC),s.up=m.clone(a.upWC),s.bbox=a.computeViewRectangle(),r=!0);let c=new Gt,d=!1;return t.values.forEach(function(u){let h=u.entity;if(!S4.contains(h.id)){if(!u.updating){let p=!1;if(u.refreshMode===Sy.INTERVAL?q.secondsDifference(n,u.lastUpdated)>u.time&&(p=!0):u.refreshMode===Sy.EXPIRE?q.greaterThan(n,u.time)&&(p=!0):u.refreshMode===Sy.STOP&&(r&&(u.needsUpdate=!0,u.cameraUpdateTime=n),u.needsUpdate&&q.secondsDifference(n,u.cameraUpdateTime)>=u.time&&(p=!0)),p){o(h),u.updating=!0;let g=new Qs,f=u.href.clone();f.setQueryParameters(u.cookie);let y=i._ellipsoid??ne.default;X4(f,i.camera,i.canvas,u.viewBoundScale,s.bbox,y),W4(i,g,f,{context:h.id}).then(drt(i,u,g,c,f)).catch(function(x){let S=`NetworkLink ${u.href} refresh failed: ${x}`;console.log(S),i._error.raiseEvent(i,S)}),d=!0}}c.set(u.id,u)}}),d&&(this._networkLinks=c,this._changed.raiseEvent(this)),!0};function urt(){this.author={name:void 0,uri:void 0,email:void 0},this.link={href:void 0,hreflang:void 0,rel:void 0,type:void 0,title:void 0,length:void 0},this.address=void 0,this.phoneNumber=void 0,this.snippet=void 0,this.extendedData=void 0}Qd._DeferredLoading=Qf;Qd._getTimestamp=Si;var GT=Qd;var lyi=_(T(),1);function Tw(){pe.throwInstantiationError()}Tw.prototype.update=pe.throwInstantiationError;Tw.prototype.getBoundingSphere=pe.throwInstantiationError;Tw.prototype.isDestroyed=pe.throwInstantiationError;Tw.prototype.destroy=pe.throwInstantiationError;var v4=Tw;var Nyi=_(T(),1);var w4=32,mrt="http://www.opengis.net/kml/2.2",vh="http://www.google.com/kml/ext/2.2",hrt="http://www.w3.org/2000/xmlns/";function TD(e){this._files={},this._promises=[],this._count=0,this._modelCallback=e}var frt=/^data:image\/([^,;]+)/;TD.prototype.texture=function(e){let t=this,n;if(typeof e=="string"||e instanceof Ze){if(e=Ze.createIfNeeded(e),!e.isDataUri)return e.url;let i=e.url.match(frt);n=`texture_${++this._count}`,l(i)&&(n+=`.${i[1]}`);let o=e.fetchBlob().then(function(r){t._files[n]=r});return this._promises.push(o),n}if(e instanceof HTMLCanvasElement){n=`texture_${++this._count}.png`;let i=new Promise(o=>{e.toBlob(function(r){t._files[n]=r,o()})});return this._promises.push(i),n}return""};function prt(e,t){return function(n){e._files[t]=n}}TD.prototype.model=function(e,t){let n=this._modelCallback;if(!l(n))throw new ae("Encountered a model entity while exporting to KML, but no model callback was supplied.");let i={},o=n(e,t,i);for(let r in i)if(i.hasOwnProperty(r)){let s=Promise.resolve(i[r]);this._promises.push(s),s.then(prt(this,r))}return o};Object.defineProperties(TD.prototype,{promise:{get:function(){return Promise.all(this._promises)}},files:{get:function(){return this._files}}});function SD(e){this._time=e}SD.prototype.get=function(e,t,n){let i;return l(e)&&(i=l(e.getValue)?e.getValue(this._time,n):e),i??t};SD.prototype.getColor=function(e,t){let n=this.get(e,t);if(l(n))return IT(n)};SD.prototype.getMaterialType=function(e){if(l(e))return e.getType(this._time)};function F4(){this._ids={},this._styles={},this._count=0}F4.prototype.get=function(e){let t=this._ids,n=e.innerHTML;if(l(t[n]))return t[n];let i=`style-${++this._count}`;return e.setAttribute("id",i),i=`#${i}`,t[n]=i,this._styles[n]=e,i};F4.prototype.save=function(e){let t=this._styles,n=e.childNodes[0];for(let i in t)t.hasOwnProperty(i)&&e.insertBefore(t[i],n)};function K0e(){this._ids={}}K0e.prototype.get=function(e){if(!l(e))return this.get(zn());let t=this._ids;return l(t[e])?`${e.toString()}-${++t[e]}`:(t[e]=0,e)};function A4(e){e=e??Y.EMPTY_OBJECT;let t=e.entities,n=e.kmz??!1,i=A4._createState(e),o=t.values.filter(function(d){return!l(d.parent)}),r=i.kmlDoc,s=r.documentElement;s.setAttributeNS(hrt,"xmlns:gx",vh);let a=r.createElement("Document");s.appendChild(a),Q0e(i,a,o),i.styleCache.save(a);let c=i.externalFileHandler;return c.promise.then(function(){let u=new XMLSerializer().serializeToString(i.kmlDoc);return n?brt(u,c.files):{kml:u,externalFiles:c.files}})}function brt(e,t){let n=nn("ThirdParty/Workers/z-worker-pako.js");LV({workerScripts:{deflate:[n,"./pako_deflate.min.js"],inflate:[n,"./pako_inflate.min.js"]}});let i=new cw,o=new mD(i);return o.add("doc.kml",new zU(e)).then(function(){let r=Object.keys(t);return J0e(o,r,t,0)}).then(function(){return o.close()}).then(function(r){return{kmz:r}})}function J0e(e,t,n,i){if(t.length===i)return;let o=t[i];return e.add(o,new s0(n[o])).then(function(){return J0e(e,t,n,i+1)})}A4._createState=function(e){let t=e.entities,n=new F4,i=t.computeAvailability(),o=l(e.time)?e.time:i.start,r=e.defaultAvailability??i,s=e.sampleDuration??60;r.start===Be.MINIMUM_VALUE?r.stop===Be.MAXIMUM_VALUE?r=new Ln:q.addSeconds(r.stop,-10*s,r.start):r.stop===Be.MAXIMUM_VALUE&&q.addSeconds(r.start,10*s,r.stop);let a=new TD(e.modelCallback);return{kmlDoc:document.implementation.createDocument(mrt,"kml"),ellipsoid:e.ellipsoid??ne.default,idManager:new K0e,styleCache:n,externalFileHandler:a,time:o,valueGetter:new SD(o),sampleDuration:s,defaultAvailability:new Dr([r])}};function Q0e(e,t,n){let i=e.kmlDoc,o=e.styleCache,r=e.valueGetter,s=e.idManager,a=n.length,c,d,u;for(let h=0;h<a;++h){let p=n[h];c=[],d=[],u=[],grt(e,p,d,u),yrt(e,p.polyline,d,u),H0e(e,p.rectangle,d,u,c),H0e(e,p.polygon,d,u,c),Srt(e,p,p.model,d,u);let g,f=p.availability;l(f)&&(g=i.createElement("TimeSpan"),q.equals(f.start,Be.MINIMUM_VALUE)||g.appendChild(hn(i,"begin",q.toIso8601(f.start))),q.equals(f.stop,Be.MAXIMUM_VALUE)||g.appendChild(hn(i,"end",q.toIso8601(f.stop))));for(let S=0;S<c.length;++S){let C=c[S];C.setAttribute("id",s.get(p.id)),C.appendChild(hn(i,"name",p.name)),C.appendChild(hn(i,"visibility",p.show)),C.appendChild(hn(i,"description",p.description)),l(g)&&C.appendChild(g),t.appendChild(C)}let y=d.length;if(y>0){let S=i.createElement("Placemark");S.setAttribute("id",s.get(p.id));let C=p.name,V=p.label;if(l(V)){let Z=i.createElement("LabelStyle"),E=r.get(V.text);C=l(E)&&E.length>0?E:C;let P=r.getColor(V.fillColor);l(P)&&(Z.appendChild(hn(i,"color",P)),Z.appendChild(hn(i,"colorMode","normal")));let W=r.get(V.scale);l(W)&&Z.appendChild(hn(i,"scale",W)),u.push(Z)}S.appendChild(hn(i,"name",C)),S.appendChild(hn(i,"visibility",p.show)),S.appendChild(hn(i,"description",p.description)),l(g)&&S.appendChild(g),t.appendChild(S);let L=u.length;if(L>0){let Z=i.createElement("Style");for(let E=0;E<L;++E)Z.appendChild(u[E]);S.appendChild(hn(i,"styleUrl",o.get(Z)))}if(d.length===1)S.appendChild(d[0]);else if(d.length>1){let Z=i.createElement("MultiGeometry");for(let E=0;E<y;++E)Z.appendChild(d[E]);S.appendChild(Z)}}let x=p._children;if(x.length>0){let S=i.createElement("Folder");S.setAttribute("id",s.get(p.id)),S.appendChild(hn(i,"name",p.name)),S.appendChild(hn(i,"visibility",p.show)),S.appendChild(hn(i,"description",p.description)),t.appendChild(S),Q0e(e,S,x)}}}var $l=new m,hl=new he,Ph=new q;function grt(e,t,n,i){let o=e.kmlDoc,r=e.ellipsoid,s=e.valueGetter,a=t.billboard??t.point;if(!l(a)&&!l(t.path))return;let c=t.position;if(!c.isConstant){j0e(e,t,a,n,i);return}s.get(c,void 0,$l);let d=hn(o,"coordinates",ET($l,r)),u=o.createElement("Point"),h=o.createElement("altitudeMode");h.appendChild(XT(e,a.heightReference)),u.appendChild(h),u.appendChild(d),n.push(u);let p=a instanceof ac?$0e(e,a):q0e(e,a);i.push(p)}function j0e(e,t,n,i,o){let r=e.kmlDoc,s=e.ellipsoid,a=e.valueGetter,c,d=t.position,u=!0;d instanceof ya?(c=d.intervals,u=!1):c=t.availability??e.defaultAvailability;let h=n instanceof Up,p,g,f,y=[];for(p=0;p<c.length;++p){let S=c.get(p),C=u?d:S.data,V=r.createElement("altitudeMode");C instanceof Af?(C=C._value,V.appendChild(XT(e,Je.CLAMP_TO_GROUND))):l(n)?V.appendChild(XT(e,n.heightReference)):V.appendChild(XT(e,Je.NONE));let L=[],Z=[];if(C.isConstant){a.get(C,void 0,$l);let P=hn(r,"coordinates",ET($l,s));L.push(q.toIso8601(S.start)),Z.push(P),L.push(q.toIso8601(S.stop)),Z.push(P)}else if(C instanceof _a)for(f=C._property._times,g=0;g<f.length;++g)L.push(q.toIso8601(f[g])),C.getValueInReferenceFrame(f[g],ki.FIXED,$l),Z.push(ET($l,s));else if(C instanceof Md){f=C._times;let P=C._values;for(g=0;g<f.length;++g)L.push(q.toIso8601(f[g])),m.fromArray(P,g*3,$l),Z.push(ET($l,s))}else{let P=e.sampleDuration;S.start.clone(Ph),S.isStartIncluded||q.addSeconds(Ph,P,Ph);let W=S.stop;for(;q.lessThan(Ph,W);)C.getValue(Ph,$l),L.push(q.toIso8601(Ph)),Z.push(ET($l,s)),q.addSeconds(Ph,P,Ph);S.isStopIncluded&&q.equals(Ph,W)&&(C.getValue(Ph,$l),L.push(q.toIso8601(Ph)),Z.push(ET($l,s)))}let E=r.createElementNS(vh,"Track");E.appendChild(V);for(let P=0;P<L.length;++P){let W=hn(r,"when",L[P]),v=hn(r,"coord",Z[P],vh);E.appendChild(W),E.appendChild(v)}h&&E.appendChild(ege(e,n)),y.push(E)}if(y.length===1)i.push(y[0]);else if(y.length>1){let S=r.createElementNS(vh,"MultiTrack");for(p=0;p<y.length;++p)S.appendChild(y[p]);i.push(S)}if(l(n)&&!h){let S=n instanceof ac?$0e(e,n):q0e(e,n);o.push(S)}let x=t.path;if(l(x)){let S=a.get(x.width),C=x.material;if(l(C)||l(S)){let V=r.createElement("LineStyle");l(S)&&V.appendChild(hn(r,"width",S)),M4(e,C,V),o.push(V)}}}function q0e(e,t){let n=e.kmlDoc,i=e.valueGetter,o=n.createElement("IconStyle"),r=i.getColor(t.color);l(r)&&(o.appendChild(hn(n,"color",r)),o.appendChild(hn(n,"colorMode","normal")));let s=i.get(t.pixelSize);return l(s)&&o.appendChild(hn(n,"scale",s/w4)),o}function $0e(e,t){let n=e.kmlDoc,i=e.valueGetter,o=e.externalFileHandler,r=n.createElement("IconStyle"),s=i.get(t.image);if(l(s)){s=o.texture(s);let p=n.createElement("Icon");p.appendChild(hn(n,"href",s));let g=i.get(t.imageSubRegion);l(g)&&(p.appendChild(hn(n,"x",g.x,vh)),p.appendChild(hn(n,"y",g.y,vh)),p.appendChild(hn(n,"w",g.width,vh)),p.appendChild(hn(n,"h",g.height,vh))),r.appendChild(p)}let a=i.getColor(t.color);l(a)&&(r.appendChild(hn(n,"color",a)),r.appendChild(hn(n,"colorMode","normal")));let c=i.get(t.scale);l(c)&&r.appendChild(hn(n,"scale",c));let d=i.get(t.pixelOffset);if(l(d)){c=c??1,U.divideByScalar(d,c,d);let p=i.get(t.width,w4),g=i.get(t.height,w4),f=i.get(t.horizontalOrigin,_i.CENTER);f===_i.CENTER?d.x-=p*.5:f===_i.RIGHT&&(d.x-=p);let y=i.get(t.verticalOrigin,An.CENTER);y===An.TOP?d.y+=g:y===An.CENTER&&(d.y+=g*.5);let x=n.createElement("hotSpot");x.setAttribute("x",-d.x),x.setAttribute("y",d.y),x.setAttribute("xunits","pixels"),x.setAttribute("yunits","pixels"),r.appendChild(x)}let u=i.get(t.rotation),h=i.get(t.alignedAxis);return l(u)&&m.equals(m.UNIT_Z,h)&&(u=X.toDegrees(-u),u===0&&(u=360),r.appendChild(hn(n,"heading",u))),r}function yrt(e,t,n,i){let o=e.kmlDoc,r=e.ellipsoid,s=e.valueGetter;if(!l(t))return;let a=o.createElement("LineString"),c=o.createElement("altitudeMode"),d=s.get(t.clampToGround,!1),u;d?(a.appendChild(hn(o,"tessellate",!0)),u=o.createTextNode("clampToGround")):u=o.createTextNode("absolute"),c.appendChild(u),a.appendChild(c);let h=t.positions,p=s.get(h),g=hn(o,"coordinates",ET(p,r));a.appendChild(g);let f=s.get(t.zIndex);d&&l(f)&&a.appendChild(hn(o,"drawOrder",f,vh)),n.push(a);let y=o.createElement("LineStyle"),x=s.get(t.width);l(x)&&y.appendChild(hn(o,"width",x)),M4(e,t.material,y),i.push(y)}function xrt(e,t,n){let i=e.kmlDoc,o=e.valueGetter,r=o.get(t.height,0);n>0&&(r=n);let s=t.coordinates,a=o.get(s),c=[],d=[ce.northeast,ce.southeast,ce.southwest,ce.northwest];for(let g=0;g<4;++g)d[g](a,hl),c.push(`${X.toDegrees(hl.longitude)},${X.toDegrees(hl.latitude)},${r}`);let u=hn(i,"coordinates",c.join(" ")),h=i.createElement("outerBoundaryIs"),p=i.createElement("LinearRing");return p.appendChild(u),h.appendChild(p),[h]}function z0e(e,t,n,i){let o=e.kmlDoc,r=e.ellipsoid,s=[],a=t.length;for(let u=0;u<a;++u)he.fromCartesian(t[u],r,hl),s.push(`${X.toDegrees(hl.longitude)},${X.toDegrees(hl.latitude)},${i?hl.height:n}`);let c=hn(o,"coordinates",s.join(" ")),d=o.createElement("LinearRing");return d.appendChild(c),d}function _rt(e,t,n){let i=e.kmlDoc,o=e.valueGetter,r=o.get(t.height,0),s=o.get(t.perPositionHeight,!1);!s&&n>0&&(r=n);let a=[],c=t.hierarchy,d=o.get(c),u=Array.isArray(d)?d:d.positions,h=i.createElement("outerBoundaryIs");h.appendChild(z0e(e,u,r,s)),a.push(h);let p=d.holes;if(l(p)){let g=p.length;for(let f=0;f<g;++f){let y=i.createElement("innerBoundaryIs");y.appendChild(z0e(e,p[f].positions,r,s)),a.push(y)}}return a}function H0e(e,t,n,i,o){let r=e.kmlDoc,s=e.valueGetter;if(!l(t))return;let a=t instanceof Um;if(a&&s.getMaterialType(t.material)==="Image"){Trt(e,t,o);return}let c=r.createElement("Polygon"),d=s.get(t.extrudedHeight,0);d>0&&c.appendChild(hn(r,"extrude",!0));let u=a?xrt(e,t,d):_rt(e,t,d),h=u.length;for(let x=0;x<h;++x)c.appendChild(u[x]);let p=r.createElement("altitudeMode");p.appendChild(XT(e,t.heightReference)),c.appendChild(p),n.push(c);let g=r.createElement("PolyStyle"),f=s.get(t.fill,!1);f&&g.appendChild(hn(r,"fill",f)),M4(e,t.material,g);let y=s.get(t.outline,!1);if(y){g.appendChild(hn(r,"outline",y));let x=r.createElement("LineStyle"),S=s.get(t.outlineWidth,1);x.appendChild(hn(r,"width",S));let C=s.getColor(t.outlineColor,D.BLACK);x.appendChild(hn(r,"color",C)),x.appendChild(hn(r,"colorMode","normal")),i.push(x)}i.push(g)}function Trt(e,t,n){let i=e.kmlDoc,o=e.valueGetter,r=e.externalFileHandler,s=i.createElement("GroundOverlay"),a=i.createElement("altitudeMode");a.appendChild(XT(e,t.heightReference)),s.appendChild(a);let c=o.get(t.height);l(c)&&s.appendChild(hn(i,"altitude",c));let d=o.get(t.coordinates),u=i.createElement("LatLonBox");u.appendChild(hn(i,"north",X.toDegrees(d.north))),u.appendChild(hn(i,"south",X.toDegrees(d.south))),u.appendChild(hn(i,"east",X.toDegrees(d.east))),u.appendChild(hn(i,"west",X.toDegrees(d.west))),s.appendChild(u);let h=o.get(t.material),p=r.texture(h.image),g=i.createElement("Icon");g.appendChild(hn(i,"href",p)),s.appendChild(g);let f=h.color;l(f)&&s.appendChild(hn(i,"color",IT(h.color))),n.push(s)}function ege(e,t){let n=e.kmlDoc,i=e.valueGetter,o=e.externalFileHandler,r=n.createElement("Model"),s=i.get(t.scale);if(l(s)){let d=n.createElement("scale");d.appendChild(hn(n,"x",s)),d.appendChild(hn(n,"y",s)),d.appendChild(hn(n,"z",s)),r.appendChild(d)}let a=n.createElement("Link"),c=o.model(t,e.time);return a.appendChild(hn(n,"href",c)),r.appendChild(a),r}function Srt(e,t,n,i,o){let r=e.kmlDoc,s=e.ellipsoid,a=e.valueGetter;if(!l(n))return;let c=t.position;if(!c.isConstant){j0e(e,t,n,i,o);return}let d=ege(e,n),u=r.createElement("altitudeMode");u.appendChild(XT(e,n.heightReference)),d.appendChild(u),a.get(c,void 0,$l),he.fromCartesian($l,s,hl);let h=r.createElement("Location");h.appendChild(hn(r,"longitude",X.toDegrees(hl.longitude))),h.appendChild(hn(r,"latitude",X.toDegrees(hl.latitude))),h.appendChild(hn(r,"altitude",hl.height)),d.appendChild(h),i.push(d)}function M4(e,t,n){let i=e.kmlDoc,o=e.valueGetter;if(!l(t))return;let r=o.get(t);if(!l(r))return;let s,a=o.getMaterialType(t),c,d;switch(a){case"Image":s=IT(D.WHITE);break;case"Color":case"Grid":case"PolylineGlow":case"PolylineArrow":case"PolylineDash":s=IT(r.color);break;case"PolylineOutline":s=IT(r.color),c=IT(r.outlineColor),d=r.outlineWidth,n.appendChild(hn(i,"outerColor",c,vh)),n.appendChild(hn(i,"outerWidth",d,vh));break;case"Stripe":s=IT(r.oddColor);break}l(s)&&(n.appendChild(hn(i,"color",s)),n.appendChild(hn(i,"colorMode","normal")))}function XT(e,t){let n=e.kmlDoc,o=e.valueGetter.get(t,Je.NONE),r;switch(o){case Je.NONE:r=n.createTextNode("absolute");break;case Je.CLAMP_TO_GROUND:r=n.createTextNode("clampToGround");break;case Je.RELATIVE_TO_GROUND:r=n.createTextNode("relativeToGround");break}return r}function ET(e,t){Array.isArray(e)||(e=[e]);let n=e.length,i=[];for(let o=0;o<n;++o)he.fromCartesian(e[o],t,hl),i.push(`${X.toDegrees(hl.longitude)},${X.toDegrees(hl.latitude)},${hl.height}`);return i.join(" ")}function hn(e,t,n,i){n=n??"",typeof n=="boolean"&&(n=n?"1":"0");let o=l(i)?e.createElementNS(i,t):e.createElement(t),r=n==="string"&&n.indexOf("<")!==-1?e.createCDATASection(n):e.createTextNode(n);return o.appendChild(r),o}function IT(e){let t="",n=e.toBytes();for(let i=3;i>=0;--i)t+=n[i]<16?`0${n[i].toString(16)}`:n[i].toString(16);return t}var N4=A4;var XHi=_(T(),1);var Dyi=_(T(),1);function Crt(e){let t,n=e.name,i=e.message;l(n)&&l(i)?t=`${n}: ${i}`:t=e.toString();let o=e.stack;return l(o)&&(t+=` ${o}`),t}var jf=Crt;var nxi=_(T(),1);var Qyi=_(T(),1);var Yyi=_(T(),1);async function Vrt(e,t,n,i){return l(i)||(i=!1),Zrt(e,t,n,i)}function Lrt(e,t,n){let i=e[0],o=i.terrainProvider.requestTileGeometry(i.x,i.y,i.level);if(!o)return!1;let r;return n?r=o.then(nge(i)):r=o.then(nge(i)).catch(Grt(i)),e.shift(),t.push(r),!0}function Rrt(e){return new Promise(function(t){setTimeout(t,e)})}function k4(e,t,n){return e.length?Lrt(e,t,n)?k4(e,t,n):Rrt(100).then(()=>k4(e,t,n)):Promise.resolve()}function Zrt(e,t,n,i){let o=e.tilingScheme,r,s=[],a={};for(r=0;r<n.length;++r){let d=o.positionToTileXY(n[r],t);if(!l(d))continue;let u=d.toString();if(!a.hasOwnProperty(u)){let h={x:d.x,y:d.y,level:t,tilingScheme:o,terrainProvider:e,positions:[]};a[u]=h,s.push(h)}a[u].positions.push(n[r])}let c=[];return k4(s,c,i).then(function(){return Promise.all(c).then(function(){return n})})}function tge(e,t,n){let i=t.interpolateHeight(n,e.longitude,e.latitude);return i===void 0?!1:(e.height=i,!0)}function nge(e){let t=e.positions,n=e.tilingScheme.tileXYToRectangle(e.x,e.y,e.level);return function(i){let o=!1;for(let r=0;r<t.length;++r){let s=t[r];if(!tge(s,i,n)){o=!0;break}}return o?i.createMesh({tilingScheme:e.tilingScheme,x:e.x,y:e.y,level:e.level,throttle:!1}).then(function(){for(let r=0;r<t.length;++r){let s=t[r];tge(s,i,n)}}):Promise.resolve()}}function Grt(e){let t=e.positions;return function(){for(let n=0;n<t.length;++n){let i=t[n];i.height=void 0}}}var Sw=Vrt;var U4=new U;async function ige(e,t,n){l(n)||(n=!1);let i=[],o=[],r=e.availability,s=[];for(let c=0;c<t.length;++c){let d=t[c],u=r.computeMaximumLevelAtPosition(d);if(o[c]=u,u===0){e.tilingScheme.positionToTileXY(d,1,U4);let p=e.loadTileDataAvailability(U4.x,U4.y,1);l(p)&&s.push(p)}let h=i[u];l(h)||(i[u]=h=[]),h.push(d)}await Promise.all(s),await Promise.all(i.map(function(c,d){if(l(c))return Sw(e,d,c,n)}));let a=[];for(let c=0;c<t.length;++c){let d=t[c];r.computeMaximumLevelAtPosition(d)!==o[c]&&a.push(d)}return a.length>0&&await ige(e,a,n),t}var WT=ige;async function D4(e,t){let n=t.terrainProvider,i=t.mapProjection,o=i.ellipsoid,r,s=t.camera.getRectangleCameraCoordinates(e);if(t.mode===oe.SCENE3D?r=o.cartesianToCartographic(s):r=i.unproject(s),!l(n))return r;let a=n.availability;if(!l(a)||t.mode===oe.SCENE2D)return r;let c=[ce.center(e),ce.southeast(e),ce.southwest(e),ce.northeast(e),ce.northwest(e)],d=await D4._sampleTerrainMostDetailed(n,c),u=!1,h=d.reduce(function(g,f){return l(f.height)?(u=!0,Math.max(f.height,g)):g},-Number.MAX_VALUE),p=r;return u&&(p.height+=h),p}D4._sampleTerrainMostDetailed=WT;var PT=D4;var KZi=_(T(),1);var b_i=_(T(),1);var a_i=_(T(),1);var oxi=_(T(),1),Ert={NONE:0,LERC:1},lm=Object.freeze(Ert);var Pxi=_(T(),1);var gxi=_(T(),1);var sxi=_(T(),1),Irt={NONE:0,BITS12:1},ea=Object.freeze(Irt);var vT=new m,Xrt=new m,dm=new U,CD=new F,Wrt=new F,Prt=Math.pow(2,12);function Lc(e,t,n,i,o,r,s,a,c,d){let u=ea.NONE,h,p;if(l(t)&&l(n)&&l(i)&&l(o)){let g=t.minimum,f=t.maximum,y=m.subtract(f,g,Xrt),x=i-n;Math.max(m.maximumComponent(y),x)<Prt-1?u=ea.BITS12:u=ea.NONE,h=F.inverseTransformation(o,new F);let C=m.negate(g,vT);F.multiply(F.fromTranslation(C,CD),h,h);let V=vT;V.x=1/y.x,V.y=1/y.y,V.z=1/y.z,F.multiply(F.fromScale(V,CD),h,h),p=F.clone(o),F.setTranslation(p,m.ZERO,p),o=F.clone(o,new F);let L=F.fromTranslation(g,CD),Z=F.fromScale(y,Wrt),E=F.multiply(L,Z,CD);F.multiply(o,E,o),F.multiply(p,E,p)}this.quantization=u,this.minimumHeight=n,this.maximumHeight=i,this.center=m.clone(e),this.toScaledENU=h,this.fromScaledENU=o,this.matrix=p,this.hasVertexNormals=r,this.hasWebMercatorT=s??!1,this.hasGeodeticSurfaceNormals=a??!1,this.exaggeration=c??1,this.exaggerationRelativeHeight=d??0,this.stride=0,this._offsetGeodeticSurfaceNormal=0,this._offsetVertexNormal=0,this._calculateStrideAndOffsets()}Lc.prototype.encode=function(e,t,n,i,o,r,s,a){let c=i.x,d=i.y;if(this.quantization===ea.BITS12){n=F.multiplyByPoint(this.toScaledENU,n,vT),n.x=X.clamp(n.x,0,1),n.y=X.clamp(n.y,0,1),n.z=X.clamp(n.z,0,1);let u=this.maximumHeight-this.minimumHeight,h=X.clamp((o-this.minimumHeight)/u,0,1);U.fromElements(n.x,n.y,dm);let p=wn.compressTextureCoordinates(dm);U.fromElements(n.z,h,dm);let g=wn.compressTextureCoordinates(dm);U.fromElements(c,d,dm);let f=wn.compressTextureCoordinates(dm);if(e[t++]=p,e[t++]=g,e[t++]=f,this.hasWebMercatorT){U.fromElements(s,0,dm);let y=wn.compressTextureCoordinates(dm);e[t++]=y}}else m.subtract(n,this.center,vT),e[t++]=vT.x,e[t++]=vT.y,e[t++]=vT.z,e[t++]=o,e[t++]=c,e[t++]=d,this.hasWebMercatorT&&(e[t++]=s);return this.hasVertexNormals&&(e[t++]=wn.octPackFloat(r)),this.hasGeodeticSurfaceNormals&&(e[t++]=a.x,e[t++]=a.y,e[t++]=a.z),t};var vrt=new m,oge=new m;Lc.prototype.addGeodeticSurfaceNormals=function(e,t,n){if(this.hasGeodeticSurfaceNormals)return;let i=this.stride,o=e.length/i;this.hasGeodeticSurfaceNormals=!0,this._calculateStrideAndOffsets();let r=this.stride;for(let s=0;s<o;s++){for(let u=0;u<i;u++){let h=s*i+u,p=s*r+u;t[p]=e[h]}let a=this.decodePosition(t,s,vrt),c=n.geodeticSurfaceNormal(a,oge),d=s*r+this._offsetGeodeticSurfaceNormal;t[d]=c.x,t[d+1]=c.y,t[d+2]=c.z}};Lc.prototype.removeGeodeticSurfaceNormals=function(e,t){if(!this.hasGeodeticSurfaceNormals)return;let n=this.stride,i=e.length/n;this.hasGeodeticSurfaceNormals=!1,this._calculateStrideAndOffsets();let o=this.stride;for(let r=0;r<i;r++)for(let s=0;s<o;s++){let a=r*n+s,c=r*o+s;t[c]=e[a]}};Lc.prototype.decodePosition=function(e,t,n){if(l(n)||(n=new m),t*=this.stride,this.quantization===ea.BITS12){let i=wn.decompressTextureCoordinates(e[t],dm);n.x=i.x,n.y=i.y;let o=wn.decompressTextureCoordinates(e[t+1],dm);return n.z=o.x,F.multiplyByPoint(this.fromScaledENU,n,n)}return n.x=e[t],n.y=e[t+1],n.z=e[t+2],m.add(n,this.center,n)};Lc.prototype.getExaggeratedPosition=function(e,t,n){n=this.decodePosition(e,t,n);let i=this.exaggeration,o=this.exaggerationRelativeHeight;if(i!==1&&this.hasGeodeticSurfaceNormals){let s=this.decodeGeodeticSurfaceNormal(e,t,oge),a=this.decodeHeight(e,t),c=Tr.getHeight(a,i,o)-a;n.x+=s.x*c,n.y+=s.y*c,n.z+=s.z*c}return n};Lc.prototype.decodeTextureCoordinates=function(e,t,n){return l(n)||(n=new U),t*=this.stride,this.quantization===ea.BITS12?wn.decompressTextureCoordinates(e[t+2],n):U.fromElements(e[t+4],e[t+5],n)};Lc.prototype.decodeHeight=function(e,t){return t*=this.stride,this.quantization===ea.BITS12?wn.decompressTextureCoordinates(e[t+1],dm).y*(this.maximumHeight-this.minimumHeight)+this.minimumHeight:e[t+3]};Lc.prototype.decodeWebMercatorT=function(e,t){return t*=this.stride,this.quantization===ea.BITS12?wn.decompressTextureCoordinates(e[t+3],dm).x:e[t+6]};Lc.prototype.getOctEncodedNormal=function(e,t,n){t=t*this.stride+this._offsetVertexNormal;let i=e[t]/256,o=Math.floor(i),r=(i-o)*256;return U.fromElements(o,r,n)};Lc.prototype.decodeGeodeticSurfaceNormal=function(e,t,n){return t=t*this.stride+this._offsetGeodeticSurfaceNormal,n.x=e[t],n.y=e[t+1],n.z=e[t+2],n};Lc.prototype._calculateStrideAndOffsets=function(){let e=0;switch(this.quantization){case ea.BITS12:e+=3;break;default:e+=6}this.hasWebMercatorT&&(e+=1),this.hasVertexNormals&&(this._offsetVertexNormal=e,e+=1),this.hasGeodeticSurfaceNormals&&(this._offsetGeodeticSurfaceNormal=e,e+=3),this.stride=e};var VD={position3DAndHeight:0,textureCoordAndEncodedNormals:1,geodeticSurfaceNormal:2},LD={compressed0:0,compressed1:1,geodeticSurfaceNormal:2};Lc.prototype.getAttributes=function(e){let t=Q.FLOAT,n=Q.getSizeInBytes(t),i=this.stride*n,o=0,r=[];function s(a,c){r.push({index:a,vertexBuffer:e,componentDatatype:t,componentsPerAttribute:c,offsetInBytes:o,strideInBytes:i}),o+=c*n}if(this.quantization===ea.NONE){s(VD.position3DAndHeight,4);let a=2;a+=this.hasWebMercatorT?1:0,a+=this.hasVertexNormals?1:0,s(VD.textureCoordAndEncodedNormals,a),this.hasGeodeticSurfaceNormals&&s(VD.geodeticSurfaceNormal,3)}else{let a=this.hasWebMercatorT||this.hasVertexNormals,c=this.hasWebMercatorT&&this.hasVertexNormals;s(LD.compressed0,a?4:3),c&&s(LD.compressed1,1),this.hasGeodeticSurfaceNormals&&s(LD.geodeticSurfaceNormal,3)}return r};Lc.prototype.getAttributeLocations=function(){return this.quantization===ea.NONE?VD:LD};Lc.clone=function(e,t){if(l(e))return l(t)||(t=new Lc),t.quantization=e.quantization,t.minimumHeight=e.minimumHeight,t.maximumHeight=e.maximumHeight,t.center=m.clone(e.center),t.toScaledENU=F.clone(e.toScaledENU),t.fromScaledENU=F.clone(e.fromScaledENU),t.matrix=F.clone(e.matrix),t.hasVertexNormals=e.hasVertexNormals,t.hasWebMercatorT=e.hasWebMercatorT,t.hasGeodeticSurfaceNormals=e.hasGeodeticSurfaceNormals,t.exaggeration=e.exaggeration,t.exaggerationRelativeHeight=e.exaggerationRelativeHeight,t._calculateStrideAndOffsets(),t};var Rc=Lc;var qf={};qf.DEFAULT_STRUCTURE=Object.freeze({heightScale:1,heightOffset:0,elementsPerHeight:1,stride:1,elementMultiplier:256,isBigEndian:!1});var B4=new m,wrt=new F,Frt=new m,Art=new m;qf.computeVertices=function(e){let t=Math.cos,n=Math.sin,i=Math.sqrt,o=Math.atan,r=Math.exp,s=X.PI_OVER_TWO,a=X.toRadians,c=e.heightmap,d=e.width,u=e.height,h=e.skirtHeight,p=h>0,g=e.isGeographic??!0,f=e.ellipsoid??ne.default,y=1/f.maximumRadius,x=ce.clone(e.nativeRectangle),S=ce.clone(e.rectangle),C,V,L,Z;l(S)?(C=S.west,V=S.south,L=S.east,Z=S.north):g?(C=a(x.west),V=a(x.south),L=a(x.east),Z=a(x.north)):(C=x.west*y,V=s-2*o(r(-x.south*y)),L=x.east*y,Z=s-2*o(r(-x.north*y)));let E=e.relativeToCenter,P=l(E);E=P?E:m.ZERO;let W=e.includeWebMercatorT??!1,v=e.exaggeration??1,A=e.exaggerationRelativeHeight??0,R=v!==1,G=e.structure??qf.DEFAULT_STRUCTURE,I=G.heightScale??qf.DEFAULT_STRUCTURE.heightScale,w=G.heightOffset??qf.DEFAULT_STRUCTURE.heightOffset,M=G.elementsPerHeight??qf.DEFAULT_STRUCTURE.elementsPerHeight,B=G.stride??qf.DEFAULT_STRUCTURE.stride,k=G.elementMultiplier??qf.DEFAULT_STRUCTURE.elementMultiplier,O=G.isBigEndian??qf.DEFAULT_STRUCTURE.isBigEndian,N=ce.computeWidth(x),z=ce.computeHeight(x),K=N/(d-1),te=z/(u-1);g||(N*=y,z*=y);let H=f.radiiSquared,j=H.x,ee=H.y,fe=H.z,Te=65536,de=-65536,xe=Pt.eastNorthUpToFixedFrame(E,f),Ce=F.inverseTransformation(xe,wrt),Ie,Le;W&&(Ie=Xi.geodeticLatitudeToMercatorAngle(V),Le=1/(Xi.geodeticLatitudeToMercatorAngle(Z)-Ie));let Ne=Frt;Ne.x=Number.POSITIVE_INFINITY,Ne.y=Number.POSITIVE_INFINITY,Ne.z=Number.POSITIVE_INFINITY;let Oe=Art;Oe.x=Number.NEGATIVE_INFINITY,Oe.y=Number.NEGATIVE_INFINITY,Oe.z=Number.NEGATIVE_INFINITY;let qe=Number.POSITIVE_INFINITY,Rt=d*u,Lt=h>0?d*2+u*2:0,ke=Rt+Lt,Ht=new Array(ke),ut=new Array(ke),mt=new Array(ke),Pn=W?new Array(ke):[],cn=R?new Array(ke):[],ge=0,Ve=u,bn=0,pt=d;p&&(--ge,++Ve,--bn,++pt);let so=1e-5;for(let Qe=ge;Qe<Ve;++Qe){let bt=Qe;bt<0&&(bt=0),bt>=u&&(bt=u-1);let Ot=x.north-te*bt;g?Ot=a(Ot):Ot=s-2*o(r(-Ot*y));let Cn=(Ot-V)/(Z-V);Cn=X.clamp(Cn,0,1);let Io=Qe===ge,So=Qe===Ve-1;h>0&&(Io?Ot+=so*z:So&&(Ot-=so*z));let Qa=t(Ot),ja=n(Ot),Vi=fe*ja,gi;W&&(gi=(Xi.geodeticLatitudeToMercatorAngle(Ot)-Ie)*Le);for(let ca=bn;ca<pt;++ca){let Hr=ca;Hr<0&&(Hr=0),Hr>=d&&(Hr=d-1);let Tl=bt*(d*B)+Hr*B,go;if(M===1)go=c[Tl];else{go=0;let Fo;if(O)for(Fo=0;Fo<M;++Fo)go=go*k+c[Tl+Fo];else for(Fo=M-1;Fo>=0;--Fo)go=go*k+c[Tl+Fo]}go=go*I+w,de=Math.max(de,go),Te=Math.min(Te,go);let Er=x.west+K*Hr;g?Er=a(Er):Er=Er*y;let gp=(Er-C)/(L-C);gp=X.clamp(gp,0,1);let Kr=bt*d+Hr;if(h>0){let Fo=ca===bn,ln=ca===pt-1,Re=Io||So||Fo||ln;if((Io||So)&&(Fo||ln))continue;Re&&(go-=h,Fo?(Kr=Rt+(u-bt-1),Er-=so*N):So?Kr=Rt+u+(d-Hr-1):ln?(Kr=Rt+u+d+bt,Er+=so*N):Io&&(Kr=Rt+u+d+u+Hr))}let mu=Qa*t(Er),qa=Qa*n(Er),qy=j*mu,la=ee*qa,Pc=1/i(qy*mu+la*qa+Vi*ja),ls=qy*Pc,hu=la*Pc,fu=Vi*Pc,pu=new m;pu.x=ls+mu*go,pu.y=hu+qa*go,pu.z=fu+ja*go,F.multiplyByPoint(Ce,pu,B4),m.minimumByComponent(B4,Ne,Ne),m.maximumByComponent(B4,Oe,Oe),qe=Math.min(qe,go),Ht[Kr]=pu,mt[Kr]=new U(gp,Cn),ut[Kr]=go,W&&(Pn[Kr]=gi),R&&(cn[Kr]=f.geodeticSurfaceNormal(pu))}}let Eo=le.fromPoints(Ht),aa;l(S)&&(aa=En.fromRectangle(S,Te,de,f));let Gr;P&&(Gr=new kb(f).computeHorizonCullingPointPossiblyUnderEllipsoid(E,Ht,Te));let Ts=new K0(Ne,Oe,E),Fe=new Rc(E,Ts,qe,de,xe,!1,W,R,v,A),rt=new Float32Array(ke*Fe.stride),He=0;for(let Qe=0;Qe<ke;++Qe)He=Fe.encode(rt,He,Ht[Qe],mt[Qe],ut[Qe],void 0,Pn[Qe],cn[Qe]);return{vertices:rt,maximumHeight:de,minimumHeight:Te,encoding:Fe,boundingSphere3D:Eo,orientedBoundingBox:aa,occludeePointInScaledSpace:Gr}};var wV=qf;var Fxi=_(T(),1);function Cy(){pe.throwInstantiationError()}Object.defineProperties(Cy.prototype,{credits:{get:pe.throwInstantiationError},waterMask:{get:pe.throwInstantiationError}});Cy.prototype.interpolateHeight=pe.throwInstantiationError;Cy.prototype.isChildAvailable=pe.throwInstantiationError;Cy.prototype.createMesh=pe.throwInstantiationError;Cy.prototype.upsample=pe.throwInstantiationError;Cy.prototype.wasCreatedByUpsampling=pe.throwInstantiationError;Cy.maximumAsynchronousTasks=5;var wh=Cy;var Mxi=_(T(),1);function Mrt(e,t,n,i,o,r,s,a,c,d,u,h,p,g,f,y){this.center=e,this.vertices=t,this.stride=d??6,this.indices=n,this.indexCountWithoutSkirts=i,this.vertexCountWithoutSkirts=o,this.minimumHeight=r,this.maximumHeight=s,this.boundingSphere3D=a,this.occludeePointInScaledSpace=c,this.orientedBoundingBox=u,this.encoding=h,this.westIndicesSouthToNorth=p,this.southIndicesEastToWest=g,this.eastIndicesNorthToSouth=f,this.northIndicesWestToEast=y}var um=Mrt;var Oxi=_(T(),1);function fl(){pe.throwInstantiationError()}Object.defineProperties(fl.prototype,{errorEvent:{get:pe.throwInstantiationError},credit:{get:pe.throwInstantiationError},tilingScheme:{get:pe.throwInstantiationError},hasWaterMask:{get:pe.throwInstantiationError},hasVertexNormals:{get:pe.throwInstantiationError},availability:{get:pe.throwInstantiationError}});var rge=[];fl.getRegularGridIndices=function(e,t){let n=rge[e];l(n)||(rge[e]=n=[]);let i=n[t];return l(i)||(e*t<X.SIXTY_FOUR_KILOBYTES?i=n[t]=new Uint16Array((e-1)*(t-1)*6):i=n[t]=new Uint32Array((e-1)*(t-1)*6),lge(e,t,i,0)),i};var sge=[];fl.getRegularGridIndicesAndEdgeIndices=function(e,t){let n=sge[e];l(n)||(sge[e]=n=[]);let i=n[t];if(!l(i)){let o=fl.getRegularGridIndices(e,t),r=cge(e,t),s=r.westIndicesSouthToNorth,a=r.southIndicesEastToWest,c=r.eastIndicesNorthToSouth,d=r.northIndicesWestToEast;i=n[t]={indices:o,westIndicesSouthToNorth:s,southIndicesEastToWest:a,eastIndicesNorthToSouth:c,northIndicesWestToEast:d}}return i};var age=[];fl.getRegularGridAndSkirtIndicesAndEdgeIndices=function(e,t){let n=age[e];l(n)||(age[e]=n=[]);let i=n[t];if(!l(i)){let o=e*t,r=(e-1)*(t-1)*6,s=e*2+t*2,a=Math.max(0,s-4)*6,c=o+s,d=r+a,u=cge(e,t),h=u.westIndicesSouthToNorth,p=u.southIndicesEastToWest,g=u.eastIndicesNorthToSouth,f=u.northIndicesWestToEast,y=Ae.createTypedArray(c,d);lge(e,t,y,0),fl.addSkirtIndices(h,p,g,f,o,y,r),i=n[t]={indices:y,westIndicesSouthToNorth:h,southIndicesEastToWest:p,eastIndicesNorthToSouth:g,northIndicesWestToEast:f,indexCountWithoutSkirts:r}}return i};fl.addSkirtIndices=function(e,t,n,i,o,r,s){let a=o;s=RD(e,a,r,s),a+=e.length,s=RD(t,a,r,s),a+=t.length,s=RD(n,a,r,s),a+=n.length,RD(i,a,r,s)};function cge(e,t){let n=new Array(t),i=new Array(e),o=new Array(t),r=new Array(e),s;for(s=0;s<e;++s)r[s]=s,i[s]=e*t-1-s;for(s=0;s<t;++s)o[s]=(s+1)*e-1,n[s]=(t-s-1)*e;return{westIndicesSouthToNorth:n,southIndicesEastToWest:i,eastIndicesNorthToSouth:o,northIndicesWestToEast:r}}function lge(e,t,n,i){let o=0;for(let r=0;r<t-1;++r){for(let s=0;s<e-1;++s){let a=o,c=a+e,d=c+1,u=a+1;n[i++]=a,n[i++]=c,n[i++]=u,n[i++]=u,n[i++]=c,n[i++]=d,++o}++o}}function RD(e,t,n,i){let o=e[0],r=e.length;for(let s=1;s<r;++s){let a=e[s];n[i++]=o,n[i++]=a,n[i++]=t,n[i++]=t,n[i++]=a,n[i++]=t+1,o=a,++t}return i}fl.heightmapTerrainQuality=.25;fl.getEstimatedLevelZeroGeometricErrorForAHeightmap=function(e,t,n){return e.maximumRadius*2*Math.PI*fl.heightmapTerrainQuality/(t*n)};fl.prototype.requestTileGeometry=pe.throwInstantiationError;fl.prototype.getLevelMaximumGeometricError=pe.throwInstantiationError;fl.prototype.getTileDataAvailable=pe.throwInstantiationError;fl.prototype.loadTileDataAvailability=pe.throwInstantiationError;var os=fl;function a0(e){this._buffer=e.buffer,this._width=e.width,this._height=e.height,this._childTileMask=e.childTileMask??15,this._encoding=e.encoding??lm.NONE;let t=wV.DEFAULT_STRUCTURE,n=e.structure;l(n)?n!==t&&(n.heightScale=n.heightScale??t.heightScale,n.heightOffset=n.heightOffset??t.heightOffset,n.elementsPerHeight=n.elementsPerHeight??t.elementsPerHeight,n.stride=n.stride??t.stride,n.elementMultiplier=n.elementMultiplier??t.elementMultiplier,n.isBigEndian=n.isBigEndian??t.isBigEndian):n=t,this._structure=n,this._createdByUpsampling=e.createdByUpsampling??!1,this._waterMask=e.waterMask,this._skirtHeight=void 0,this._bufferType=this._encoding===lm.LERC?Float32Array:this._buffer.constructor,this._mesh=void 0}Object.defineProperties(a0.prototype,{credits:{get:function(){}},waterMask:{get:function(){return this._waterMask}},childTileMask:{get:function(){return this._childTileMask}}});var dge="createVerticesFromHeightmap",Nrt=new xi(dge),krt=new xi(dge,wh.maximumAsynchronousTasks);a0.prototype.createMesh=function(e){e=e??Y.EMPTY_OBJECT;let t=e.tilingScheme,n=e.x,i=e.y,o=e.level,r=e.exaggeration??1,s=e.exaggerationRelativeHeight??0,a=e.throttle??!0,c=t.ellipsoid,d=t.tileXYToNativeRectangle(n,i,o),u=t.tileXYToRectangle(n,i,o),h=c.cartographicToCartesian(ce.center(u)),p=this._structure,f=os.getEstimatedLevelZeroGeometricErrorForAHeightmap(c,this._width,t.getNumberOfXTilesAtLevel(0))/(1<<o);this._skirtHeight=Math.min(f*4,1e3);let x=(a?krt:Nrt).scheduleTask({heightmap:this._buffer,structure:p,includeWebMercatorT:!0,width:this._width,height:this._height,nativeRectangle:d,rectangle:u,relativeToCenter:h,ellipsoid:c,skirtHeight:this._skirtHeight,isGeographic:t.projection instanceof Ei,exaggeration:r,exaggerationRelativeHeight:s,encoding:this._encoding});if(!l(x))return;let S=this;return Promise.resolve(x).then(function(C){let V;S._skirtHeight>0?V=os.getRegularGridAndSkirtIndicesAndEdgeIndices(C.gridWidth,C.gridHeight):V=os.getRegularGridIndicesAndEdgeIndices(C.gridWidth,C.gridHeight);let L=C.gridWidth*C.gridHeight;return S._mesh=new um(h,new Float32Array(C.vertices),V.indices,V.indexCountWithoutSkirts,L,C.minimumHeight,C.maximumHeight,le.clone(C.boundingSphere3D),m.clone(C.occludeePointInScaledSpace),C.numberOfAttributes,En.clone(C.orientedBoundingBox),Rc.clone(C.encoding),V.westIndicesSouthToNorth,V.southIndicesEastToWest,V.eastIndicesNorthToSouth,V.northIndicesWestToEast),S._buffer=void 0,S._mesh})};a0.prototype._createMeshSync=function(e){let t=e.tilingScheme,n=e.x,i=e.y,o=e.level,r=e.exaggeration??1,s=e.exaggerationRelativeHeight??0,a=t.ellipsoid,c=t.tileXYToNativeRectangle(n,i,o),d=t.tileXYToRectangle(n,i,o),u=a.cartographicToCartesian(ce.center(d)),h=this._structure,g=os.getEstimatedLevelZeroGeometricErrorForAHeightmap(a,this._width,t.getNumberOfXTilesAtLevel(0))/(1<<o);this._skirtHeight=Math.min(g*4,1e3);let f=wV.computeVertices({heightmap:this._buffer,structure:h,includeWebMercatorT:!0,width:this._width,height:this._height,nativeRectangle:c,rectangle:d,relativeToCenter:u,ellipsoid:a,skirtHeight:this._skirtHeight,isGeographic:t.projection instanceof Ei,exaggeration:r,exaggerationRelativeHeight:s});this._buffer=void 0;let y;this._skirtHeight>0?y=os.getRegularGridAndSkirtIndicesAndEdgeIndices(this._width,this._height):y=os.getRegularGridIndicesAndEdgeIndices(this._width,this._height);let x=f.gridWidth*f.gridHeight;return this._mesh=new um(u,f.vertices,y.indices,y.indexCountWithoutSkirts,x,f.minimumHeight,f.maximumHeight,f.boundingSphere3D,f.occludeePointInScaledSpace,f.encoding.stride,f.orientedBoundingBox,f.encoding,y.westIndicesSouthToNorth,y.southIndicesEastToWest,y.eastIndicesNorthToSouth,y.northIndicesWestToEast),this._mesh};a0.prototype.interpolateHeight=function(e,t,n){let i=this._width,o=this._height,r=this._structure,s=r.stride,a=r.elementsPerHeight,c=r.elementMultiplier,d=r.isBigEndian,u=r.heightOffset,h=r.heightScale,p=l(this._mesh),g=this._encoding===lm.LERC;if(!p&&g)return;let y;if(p){let x=this._mesh.vertices,S=this._mesh.encoding;y=uge(x,S,u,h,e,i,o,t,n)}else y=Urt(this._buffer,a,c,s,d,e,i,o,t,n),y=y*h+u;return y};a0.prototype.upsample=function(e,t,n,i,o,r,s){let a=this._mesh;if(!l(a))return;let c=this._width,d=this._height,u=this._structure,h=u.stride,p=new this._bufferType(c*d*h),g=a.vertices,f=a.encoding,y=e.tileXYToRectangle(t,n,i),x=e.tileXYToRectangle(o,r,s),S=u.heightOffset,C=u.heightScale,V=u.elementsPerHeight,L=u.elementMultiplier,Z=u.isBigEndian,E=Math.pow(L,V-1);for(let P=0;P<d;++P){let W=X.lerp(x.north,x.south,P/(d-1));for(let v=0;v<c;++v){let A=X.lerp(x.west,x.east,v/(c-1)),b=uge(g,f,S,C,y,c,d,A,W);b=b<u.lowestEncodedHeight?u.lowestEncodedHeight:b,b=b>u.highestEncodedHeight?u.highestEncodedHeight:b,Drt(p,V,L,E,h,Z,P*c+v,b)}}return Promise.resolve(new a0({buffer:p,width:c,height:d,childTileMask:0,structure:this._structure,createdByUpsampling:!0}))};a0.prototype.isChildAvailable=function(e,t,n,i){let o=2;return n!==e*2&&++o,i!==t*2&&(o-=2),(this._childTileMask&1<<o)!==0};a0.prototype.wasCreatedByUpsampling=function(){return this._createdByUpsampling};function Urt(e,t,n,i,o,r,s,a,c,d){let u=(c-r.west)*(s-1)/(r.east-r.west),h=(d-r.south)*(a-1)/(r.north-r.south),p=u|0,g=p+1;g>=s&&(g=s-1,p=s-2);let f=h|0,y=f+1;y>=a&&(y=a-1,f=a-2);let x=u-p,S=h-f;f=a-1-f,y=a-1-y;let C=ZD(e,t,n,i,o,f*s+p),V=ZD(e,t,n,i,o,f*s+g),L=ZD(e,t,n,i,o,y*s+p),Z=ZD(e,t,n,i,o,y*s+g);return mge(x,S,C,V,L,Z)}function uge(e,t,n,i,o,r,s,a,c){let d=(a-o.west)*(r-1)/(o.east-o.west),u=(c-o.south)*(s-1)/(o.north-o.south),h=d|0,p=h+1;p>=r&&(p=r-1,h=r-2);let g=u|0,f=g+1;f>=s&&(f=s-1,g=s-2);let y=d-h,x=u-g;g=s-1-g,f=s-1-f;let S=(t.decodeHeight(e,g*r+h)-n)/i,C=(t.decodeHeight(e,g*r+p)-n)/i,V=(t.decodeHeight(e,f*r+h)-n)/i,L=(t.decodeHeight(e,f*r+p)-n)/i;return mge(y,x,S,C,V,L)}function mge(e,t,n,i,o,r){return t<e?n+e*(i-n)+t*(r-i):n+e*(r-o)+t*(o-n)}function ZD(e,t,n,i,o,r){r*=i;let s=0,a;if(o)for(a=0;a<t;++a)s=s*n+e[r+a];else for(a=t-1;a>=0;--a)s=s*n+e[r+a];return s}function Drt(e,t,n,i,o,r,s,a){s*=o;let c;if(r)for(c=0;c<t-1;++c)e[s+c]=a/i|0,a-=e[s+c]*i,i/=n;else for(c=t-1;c>0;--c)e[s+c]=a/i|0,a-=e[s+c]*i,i/=n;e[s+c]=a}var Oa=a0;function FV(e){e=e??Y.EMPTY_OBJECT,this._tilingScheme=e.tilingScheme,l(this._tilingScheme)||(this._tilingScheme=new Hi({ellipsoid:e.ellipsoid??ne.default})),this._levelZeroMaximumGeometricError=os.getEstimatedLevelZeroGeometricErrorForAHeightmap(this._tilingScheme.ellipsoid,64,this._tilingScheme.getNumberOfXTilesAtLevel(0)),this._errorEvent=new be}Object.defineProperties(FV.prototype,{errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){}},tilingScheme:{get:function(){return this._tilingScheme}},hasWaterMask:{get:function(){return!1}},hasVertexNormals:{get:function(){return!1}},availability:{get:function(){}}});FV.prototype.requestTileGeometry=function(e,t,n,i){return Promise.resolve(new Oa({buffer:new Uint8Array(16*16),width:16,height:16}))};FV.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};FV.prototype.getTileDataAvailable=function(e,t,n){};FV.prototype.loadTileDataAvailability=function(e,t,n){};var $f=FV;var y_i=_(T(),1),Cw=`uniform vec4 u_initialColor; #if TEXTURE_UNITS > 0 uniform sampler2D u_dayTextures[TEXTURE_UNITS]; uniform vec4 u_dayTextureTranslationAndScale[TEXTURE_UNITS]; uniform bool u_dayTextureUseWebMercatorT[TEXTURE_UNITS]; #ifdef APPLY_ALPHA uniform float u_dayTextureAlpha[TEXTURE_UNITS]; #endif #ifdef APPLY_DAY_NIGHT_ALPHA uniform float u_dayTextureNightAlpha[TEXTURE_UNITS]; uniform float u_dayTextureDayAlpha[TEXTURE_UNITS]; #endif #ifdef APPLY_SPLIT uniform float u_dayTextureSplit[TEXTURE_UNITS]; #endif #ifdef APPLY_BRIGHTNESS uniform float u_dayTextureBrightness[TEXTURE_UNITS]; #endif #ifdef APPLY_CONTRAST uniform float u_dayTextureContrast[TEXTURE_UNITS]; #endif #ifdef APPLY_HUE uniform float u_dayTextureHue[TEXTURE_UNITS]; #endif #ifdef APPLY_SATURATION uniform float u_dayTextureSaturation[TEXTURE_UNITS]; #endif #ifdef APPLY_GAMMA uniform float u_dayTextureOneOverGamma[TEXTURE_UNITS]; #endif #ifdef APPLY_IMAGERY_CUTOUT uniform vec4 u_dayTextureCutoutRectangles[TEXTURE_UNITS]; #endif #ifdef APPLY_COLOR_TO_ALPHA uniform vec4 u_colorsToAlpha[TEXTURE_UNITS]; #endif uniform vec4 u_dayTextureTexCoordsRectangle[TEXTURE_UNITS]; #endif #if defined(HAS_WATER_MASK) && (defined(SHOW_REFLECTIVE_OCEAN) || defined(APPLY_MATERIAL)) uniform sampler2D u_waterMask; uniform vec4 u_waterMaskTranslationAndScale; uniform float u_zoomedOutOceanSpecularIntensity; #endif #ifdef SHOW_OCEAN_WAVES uniform sampler2D u_oceanNormalMap; #endif #if defined(ENABLE_DAYNIGHT_SHADING) || defined(GROUND_ATMOSPHERE) uniform vec2 u_lightingFadeDistance; #endif #ifdef TILE_LIMIT_RECTANGLE uniform vec4 u_cartographicLimitRectangle; #endif #ifdef GROUND_ATMOSPHERE uniform vec2 u_nightFadeDistance; #endif #ifdef ENABLE_CLIPPING_PLANES uniform highp sampler2D u_clippingPlanes; uniform mat4 u_clippingPlanesMatrix; uniform vec4 u_clippingPlanesEdgeStyle; #endif #ifdef ENABLE_CLIPPING_POLYGONS uniform highp sampler2D u_clippingDistance; in vec2 v_clippingPosition; flat in int v_regionIndex; #endif #if defined(GROUND_ATMOSPHERE) || defined(FOG) && defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_VERTEX_LIGHTING) || defined(ENABLE_DAYNIGHT_SHADING)) uniform float u_minimumBrightness; #endif #ifdef COLOR_CORRECT uniform vec3 u_hsbShift; // Hue, saturation, brightness #endif #ifdef HIGHLIGHT_FILL_TILE uniform vec4 u_fillHighlightColor; #endif #ifdef TRANSLUCENT uniform vec4 u_frontFaceAlphaByDistance; uniform vec4 u_backFaceAlphaByDistance; uniform vec4 u_translucencyRectangle; #endif #ifdef UNDERGROUND_COLOR uniform vec4 u_undergroundColor; uniform vec4 u_undergroundColorAlphaByDistance; #endif #ifdef ENABLE_VERTEX_LIGHTING uniform float u_lambertDiffuseMultiplier; uniform float u_vertexShadowDarkness; #endif in vec3 v_positionMC; in vec3 v_positionEC; in vec3 v_textureCoordinates; in vec3 v_normalMC; in vec3 v_normalEC; #ifdef APPLY_MATERIAL in float v_height; in float v_slope; in float v_aspect; #endif #if defined(FOG) || defined(GROUND_ATMOSPHERE) || defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT) in float v_distance; #endif #if defined(GROUND_ATMOSPHERE) || defined(FOG) in vec3 v_atmosphereRayleighColor; in vec3 v_atmosphereMieColor; in float v_atmosphereOpacity; #endif #if defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT) float interpolateByDistance(vec4 nearFarScalar, float distance) { float startDistance = nearFarScalar.x; float startValue = nearFarScalar.y; float endDistance = nearFarScalar.z; float endValue = nearFarScalar.w; float t = clamp((distance - startDistance) / (endDistance - startDistance), 0.0, 1.0); return mix(startValue, endValue, t); } #endif #if defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT) || defined(APPLY_MATERIAL) vec4 alphaBlend(vec4 sourceColor, vec4 destinationColor) { return sourceColor * vec4(sourceColor.aaa, 1.0) + destinationColor * (1.0 - sourceColor.a); } #endif #ifdef TRANSLUCENT bool inTranslucencyRectangle() { return v_textureCoordinates.x > u_translucencyRectangle.x && v_textureCoordinates.x < u_translucencyRectangle.z && v_textureCoordinates.y > u_translucencyRectangle.y && v_textureCoordinates.y < u_translucencyRectangle.w; } #endif vec4 sampleAndBlend( vec4 previousColor, sampler2D textureToSample, vec2 tileTextureCoordinates, vec4 textureCoordinateRectangle, vec4 textureCoordinateTranslationAndScale, float textureAlpha, float textureNightAlpha, float textureDayAlpha, float textureBrightness, float textureContrast, float textureHue, float textureSaturation, float textureOneOverGamma, float split, vec4 colorToAlpha, float nightBlend) { // This crazy step stuff sets the alpha to 0.0 if this following condition is true: // tileTextureCoordinates.s < textureCoordinateRectangle.s || // tileTextureCoordinates.s > textureCoordinateRectangle.p || // tileTextureCoordinates.t < textureCoordinateRectangle.t || // tileTextureCoordinates.t > textureCoordinateRectangle.q // In other words, the alpha is zero if the fragment is outside the rectangle // covered by this texture. Would an actual 'if' yield better performance? vec2 alphaMultiplier = step(textureCoordinateRectangle.st, tileTextureCoordinates); textureAlpha = textureAlpha * alphaMultiplier.x * alphaMultiplier.y; alphaMultiplier = step(vec2(0.0), textureCoordinateRectangle.pq - tileTextureCoordinates); textureAlpha = textureAlpha * alphaMultiplier.x * alphaMultiplier.y; #if defined(APPLY_DAY_NIGHT_ALPHA) && defined(ENABLE_DAYNIGHT_SHADING) textureAlpha *= mix(textureDayAlpha, textureNightAlpha, nightBlend); #endif vec2 translation = textureCoordinateTranslationAndScale.xy; vec2 scale = textureCoordinateTranslationAndScale.zw; vec2 textureCoordinates = tileTextureCoordinates * scale + translation; vec4 value = texture(textureToSample, textureCoordinates); vec3 color = value.rgb; float alpha = value.a; #ifdef APPLY_COLOR_TO_ALPHA vec3 colorDiff = abs(color.rgb - colorToAlpha.rgb); colorDiff.r = czm_maximumComponent(colorDiff); alpha = czm_branchFreeTernary(colorDiff.r < colorToAlpha.a, 0.0, alpha); #endif #if !defined(APPLY_GAMMA) vec4 tempColor = czm_gammaCorrect(vec4(color, alpha)); color = tempColor.rgb; alpha = tempColor.a; #else color = pow(color, vec3(textureOneOverGamma)); #endif #ifdef APPLY_SPLIT float splitPosition = czm_splitPosition; // Split to the left if (split < 0.0 && gl_FragCoord.x > splitPosition) { alpha = 0.0; } // Split to the right else if (split > 0.0 && gl_FragCoord.x < splitPosition) { alpha = 0.0; } #endif #ifdef APPLY_BRIGHTNESS color = mix(vec3(0.0), color, textureBrightness); #endif #ifdef APPLY_CONTRAST color = mix(vec3(0.5), color, textureContrast); #endif #ifdef APPLY_HUE color = czm_hue(color, textureHue); #endif #ifdef APPLY_SATURATION color = czm_saturation(color, textureSaturation); #endif float sourceAlpha = alpha * textureAlpha; float outAlpha = mix(previousColor.a, 1.0, sourceAlpha); outAlpha += sign(outAlpha) - 1.0; vec3 outColor = mix(previousColor.rgb * previousColor.a, color, sourceAlpha) / outAlpha; // When rendering imagery for a tile in multiple passes, // some GPU/WebGL implementation combinations will not blend fragments in // additional passes correctly if their computation includes an unmasked // divide-by-zero operation, // even if it's not in the output or if the output has alpha zero. // // For example, without sanitization for outAlpha, // this renders without artifacts: // if (outAlpha == 0.0) { outColor = vec3(0.0); } // // but using czm_branchFreeTernary will cause portions of the tile that are // alpha-zero in the additional pass to render as black instead of blending // with the previous pass: // outColor = czm_branchFreeTernary(outAlpha == 0.0, vec3(0.0), outColor); // // So instead, sanitize against divide-by-zero, // store this state on the sign of outAlpha, and correct on return. return vec4(outColor, max(outAlpha, 0.0)); } vec4 computeDayColor(vec4 initialColor, vec3 textureCoordinates, float nightBlend); vec4 computeWaterColor(vec3 positionEyeCoordinates, vec2 textureCoordinates, mat3 enuToEye, vec4 imageryColor, float specularMapValue, float fade); const float fExposure = 2.0; vec3 computeEllipsoidPosition() { float mpp = czm_metersPerPixel(vec4(0.0, 0.0, -czm_currentFrustum.x, 1.0), 1.0); vec2 xy = gl_FragCoord.xy / czm_viewport.zw * 2.0 - vec2(1.0); xy *= czm_viewport.zw * mpp * 0.5; vec3 direction; if (czm_orthographicIn3D == 1.0) { direction = vec3(0.0, 0.0, -1.0); } else { direction = normalize(vec3(xy, -czm_currentFrustum.x)); } czm_ray ray = czm_ray(vec3(0.0), direction); vec3 ellipsoid_center = czm_view[3].xyz; czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoid_center, czm_ellipsoidInverseRadii); vec3 ellipsoidPosition = czm_pointAlongRay(ray, intersection.start); return (czm_inverseView * vec4(ellipsoidPosition, 1.0)).xyz; } void main() { #ifdef TILE_LIMIT_RECTANGLE if (v_textureCoordinates.x < u_cartographicLimitRectangle.x || u_cartographicLimitRectangle.z < v_textureCoordinates.x || v_textureCoordinates.y < u_cartographicLimitRectangle.y || u_cartographicLimitRectangle.w < v_textureCoordinates.y) { discard; } #endif #ifdef ENABLE_CLIPPING_PLANES float clipDistance = clip(gl_FragCoord, u_clippingPlanes, u_clippingPlanesMatrix); #endif #if defined(SHOW_REFLECTIVE_OCEAN) || defined(ENABLE_DAYNIGHT_SHADING) || defined(HDR) vec3 normalMC = czm_geodeticSurfaceNormal(v_positionMC, vec3(0.0), vec3(1.0)); // normalized surface normal in model coordinates vec3 normalEC = czm_normal3D * normalMC; // normalized surface normal in eye coordinates #endif #if defined(APPLY_DAY_NIGHT_ALPHA) && defined(ENABLE_DAYNIGHT_SHADING) float nightBlend = 1.0 - clamp(czm_getLambertDiffuse(czm_lightDirectionEC, normalEC) * 5.0, 0.0, 1.0); #else float nightBlend = 0.0; #endif // The clamp below works around an apparent bug in Chrome Canary v23.0.1241.0 // where the fragment shader sees textures coordinates < 0.0 and > 1.0 for the // fragments on the edges of tiles even though the vertex shader is outputting // coordinates strictly in the 0-1 range. vec4 color = computeDayColor(u_initialColor, clamp(v_textureCoordinates, 0.0, 1.0), nightBlend); #ifdef SHOW_TILE_BOUNDARIES if (v_textureCoordinates.x < (1.0/256.0) || v_textureCoordinates.x > (255.0/256.0) || v_textureCoordinates.y < (1.0/256.0) || v_textureCoordinates.y > (255.0/256.0)) { color = vec4(1.0, 0.0, 0.0, 1.0); } #endif #if defined(ENABLE_DAYNIGHT_SHADING) || defined(GROUND_ATMOSPHERE) float cameraDist; if (czm_sceneMode == czm_sceneMode2D) { cameraDist = max(czm_frustumPlanes.x - czm_frustumPlanes.y, czm_frustumPlanes.w - czm_frustumPlanes.z) * 0.5; } else if (czm_sceneMode == czm_sceneModeColumbusView) { cameraDist = -czm_view[3].z; } else { cameraDist = length(czm_view[3]); } float fadeOutDist = u_lightingFadeDistance.x; float fadeInDist = u_lightingFadeDistance.y; if (czm_sceneMode != czm_sceneMode3D) { vec3 radii = czm_ellipsoidRadii; float maxRadii = max(radii.x, max(radii.y, radii.z)); fadeOutDist -= maxRadii; fadeInDist -= maxRadii; } float fade = clamp((cameraDist - fadeOutDist) / (fadeInDist - fadeOutDist), 0.0, 1.0); #else float fade = 0.0; #endif #if defined(HAS_WATER_MASK) && (defined(SHOW_REFLECTIVE_OCEAN) || defined(APPLY_MATERIAL)) vec2 waterMaskTranslation = u_waterMaskTranslationAndScale.xy; vec2 waterMaskScale = u_waterMaskTranslationAndScale.zw; vec2 waterMaskTextureCoordinates = v_textureCoordinates.xy * waterMaskScale + waterMaskTranslation; waterMaskTextureCoordinates.y = 1.0 - waterMaskTextureCoordinates.y; float mask = texture(u_waterMask, waterMaskTextureCoordinates).r; #ifdef SHOW_REFLECTIVE_OCEAN if (mask > 0.0) { mat3 enuToEye = czm_eastNorthUpToEyeCoordinates(v_positionMC, normalEC); vec2 ellipsoidTextureCoordinates = czm_ellipsoidTextureCoordinates(normalMC); vec2 ellipsoidFlippedTextureCoordinates = czm_ellipsoidTextureCoordinates(normalMC.zyx); vec2 textureCoordinates = mix(ellipsoidTextureCoordinates, ellipsoidFlippedTextureCoordinates, czm_morphTime * smoothstep(0.9, 0.95, normalMC.z)); color = computeWaterColor(v_positionEC, textureCoordinates, enuToEye, color, mask, fade); } #endif #endif #ifdef APPLY_MATERIAL czm_materialInput materialInput; materialInput.st = v_textureCoordinates.st; materialInput.normalEC = normalize(v_normalEC); materialInput.positionToEyeEC = -v_positionEC; materialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(v_positionMC, normalize(v_normalEC)); materialInput.slope = v_slope; materialInput.height = v_height; materialInput.aspect = v_aspect; #ifdef HAS_WATER_MASK materialInput.waterMask = mask; #endif czm_material material = czm_getMaterial(materialInput); vec4 materialColor = vec4(material.diffuse, material.alpha); color = alphaBlend(materialColor, color); #endif #ifdef ENABLE_VERTEX_LIGHTING float diffuseIntensity = clamp(czm_getLambertDiffuse(czm_lightDirectionEC, normalize(v_normalEC)) * u_lambertDiffuseMultiplier + u_vertexShadowDarkness, 0.0, 1.0); vec4 finalColor = vec4(color.rgb * czm_lightColor * diffuseIntensity, color.a); #elif defined(ENABLE_DAYNIGHT_SHADING) float diffuseIntensity = clamp(czm_getLambertDiffuse(czm_lightDirectionEC, normalEC) * 5.0 + 0.3, 0.0, 1.0); diffuseIntensity = mix(1.0, diffuseIntensity, fade); vec4 finalColor = vec4(color.rgb * czm_lightColor * diffuseIntensity, color.a); #else vec4 finalColor = color; #endif #ifdef ENABLE_CLIPPING_PLANES vec4 clippingPlanesEdgeColor = vec4(1.0); clippingPlanesEdgeColor.rgb = u_clippingPlanesEdgeStyle.rgb; float clippingPlanesEdgeWidth = u_clippingPlanesEdgeStyle.a; if (clipDistance < clippingPlanesEdgeWidth) { finalColor = clippingPlanesEdgeColor; } #endif #ifdef ENABLE_CLIPPING_POLYGONS vec2 clippingPosition = v_clippingPosition; int regionIndex = v_regionIndex; clipPolygons(u_clippingDistance, CLIPPING_POLYGON_REGIONS_LENGTH, clippingPosition, regionIndex); #endif #ifdef HIGHLIGHT_FILL_TILE finalColor = vec4(mix(finalColor.rgb, u_fillHighlightColor.rgb, u_fillHighlightColor.a), finalColor.a); #endif #if defined(DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN) vec3 atmosphereLightDirection = czm_sunDirectionWC; #else vec3 atmosphereLightDirection = czm_lightDirectionWC; #endif #if defined(GROUND_ATMOSPHERE) || defined(FOG) if (!czm_backFacing()) { bool dynamicLighting = false; #if defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_DAYNIGHT_SHADING) || defined(ENABLE_VERTEX_LIGHTING)) dynamicLighting = true; #endif vec3 rayleighColor; vec3 mieColor; float opacity; vec3 positionWC; vec3 lightDirection; // When the camera is far away (camera distance > nightFadeOutDistance), the scattering is computed in the fragment shader. // Otherwise, the scattering is computed in the vertex shader. #ifdef PER_FRAGMENT_GROUND_ATMOSPHERE positionWC = computeEllipsoidPosition(); lightDirection = czm_branchFreeTernary(dynamicLighting, atmosphereLightDirection, normalize(positionWC)); computeAtmosphereScattering( positionWC, lightDirection, rayleighColor, mieColor, opacity ); #else positionWC = v_positionMC; lightDirection = czm_branchFreeTernary(dynamicLighting, atmosphereLightDirection, normalize(positionWC)); rayleighColor = v_atmosphereRayleighColor; mieColor = v_atmosphereMieColor; opacity = v_atmosphereOpacity; #endif #ifdef COLOR_CORRECT const bool ignoreBlackPixels = true; rayleighColor = czm_applyHSBShift(rayleighColor, u_hsbShift, ignoreBlackPixels); mieColor = czm_applyHSBShift(mieColor, u_hsbShift, ignoreBlackPixels); #endif vec4 groundAtmosphereColor = computeAtmosphereColor(positionWC, lightDirection, rayleighColor, mieColor, opacity); // Fog is applied to tiles selected for fog, close to the Earth. #ifdef FOG vec3 fogColor = groundAtmosphereColor.rgb; // If there is lighting, apply that to the fog. #if defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_VERTEX_LIGHTING) || defined(ENABLE_DAYNIGHT_SHADING)) float darken = clamp(dot(normalize(czm_viewerPositionWC), atmosphereLightDirection), u_minimumBrightness, 1.0); fogColor *= darken; #endif #ifndef HDR fogColor.rgb = czm_pbrNeutralTonemapping(fogColor.rgb); fogColor.rgb = czm_inverseGamma(fogColor.rgb); #endif finalColor = vec4(czm_fog(v_distance, finalColor.rgb, fogColor.rgb, czm_fogVisualDensityScalar), finalColor.a); #else // Apply ground atmosphere. This happens when the camera is far away from the earth. // The transmittance is based on optical depth i.e. the length of segment of the ray inside the atmosphere. // This value is larger near the "circumference", as it is further away from the camera. We use it to // brighten up that area of the ground atmosphere. const float transmittanceModifier = 0.5; float transmittance = transmittanceModifier + clamp(1.0 - groundAtmosphereColor.a, 0.0, 1.0); vec3 finalAtmosphereColor = finalColor.rgb + groundAtmosphereColor.rgb * transmittance; #if defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_VERTEX_LIGHTING) || defined(ENABLE_DAYNIGHT_SHADING)) float fadeInDist = u_nightFadeDistance.x; float fadeOutDist = u_nightFadeDistance.y; float sunlitAtmosphereIntensity = clamp((cameraDist - fadeOutDist) / (fadeInDist - fadeOutDist), 0.05, 1.0); float darken = clamp(dot(normalize(positionWC), atmosphereLightDirection), 0.0, 1.0); vec3 darkenendGroundAtmosphereColor = mix(groundAtmosphereColor.rgb, finalAtmosphereColor.rgb, darken); finalAtmosphereColor = mix(darkenendGroundAtmosphereColor, finalAtmosphereColor, sunlitAtmosphereIntensity); #endif #ifndef HDR finalAtmosphereColor.rgb = vec3(1.0) - exp(-fExposure * finalAtmosphereColor.rgb); #else finalAtmosphereColor.rgb = czm_saturation(finalAtmosphereColor.rgb, 1.6); #endif finalColor.rgb = mix(finalColor.rgb, finalAtmosphereColor.rgb, fade); #endif } #endif #ifdef UNDERGROUND_COLOR if (czm_backFacing()) { float distanceFromEllipsoid = max(czm_eyeHeight, 0.0); float distance = max(v_distance - distanceFromEllipsoid, 0.0); float blendAmount = interpolateByDistance(u_undergroundColorAlphaByDistance, distance); vec4 undergroundColor = vec4(u_undergroundColor.rgb, u_undergroundColor.a * blendAmount); finalColor = alphaBlend(undergroundColor, finalColor); } #endif #ifdef TRANSLUCENT if (inTranslucencyRectangle()) { vec4 alphaByDistance = gl_FrontFacing ? u_frontFaceAlphaByDistance : u_backFaceAlphaByDistance; finalColor.a *= interpolateByDistance(alphaByDistance, v_distance); } #endif out_FragColor = finalColor; } #ifdef SHOW_REFLECTIVE_OCEAN float waveFade(float edge0, float edge1, float x) { float y = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0); return pow(1.0 - y, 5.0); } float linearFade(float edge0, float edge1, float x) { return clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0); } // Based on water rendering by Jonas Wagner: // http://29a.ch/2012/7/19/webgl-terrain-rendering-water-fog // low altitude wave settings const float oceanFrequencyLowAltitude = 825000.0; const float oceanAnimationSpeedLowAltitude = 0.004; const float oceanOneOverAmplitudeLowAltitude = 1.0 / 2.0; const float oceanSpecularIntensity = 0.5; // high altitude wave settings const float oceanFrequencyHighAltitude = 125000.0; const float oceanAnimationSpeedHighAltitude = 0.008; const float oceanOneOverAmplitudeHighAltitude = 1.0 / 2.0; vec4 computeWaterColor(vec3 positionEyeCoordinates, vec2 textureCoordinates, mat3 enuToEye, vec4 imageryColor, float maskValue, float fade) { vec3 positionToEyeEC = -positionEyeCoordinates; float positionToEyeECLength = length(positionToEyeEC); // The double normalize below works around a bug in Firefox on Android devices. vec3 normalizedPositionToEyeEC = normalize(normalize(positionToEyeEC)); // Fade out the waves as the camera moves far from the surface. float waveIntensity = waveFade(70000.0, 1000000.0, positionToEyeECLength); #ifdef SHOW_OCEAN_WAVES // high altitude waves float time = czm_frameNumber * oceanAnimationSpeedHighAltitude; vec4 noise = czm_getWaterNoise(u_oceanNormalMap, textureCoordinates * oceanFrequencyHighAltitude, time, 0.0); vec3 normalTangentSpaceHighAltitude = vec3(noise.xy, noise.z * oceanOneOverAmplitudeHighAltitude); // low altitude waves time = czm_frameNumber * oceanAnimationSpeedLowAltitude; noise = czm_getWaterNoise(u_oceanNormalMap, textureCoordinates * oceanFrequencyLowAltitude, time, 0.0); vec3 normalTangentSpaceLowAltitude = vec3(noise.xy, noise.z * oceanOneOverAmplitudeLowAltitude); // blend the 2 wave layers based on distance to surface float highAltitudeFade = linearFade(0.0, 60000.0, positionToEyeECLength); float lowAltitudeFade = 1.0 - linearFade(20000.0, 60000.0, positionToEyeECLength); vec3 normalTangentSpace = (highAltitudeFade * normalTangentSpaceHighAltitude) + (lowAltitudeFade * normalTangentSpaceLowAltitude); normalTangentSpace = normalize(normalTangentSpace); // fade out the normal perturbation as we move farther from the water surface normalTangentSpace.xy *= waveIntensity; normalTangentSpace = normalize(normalTangentSpace); #else vec3 normalTangentSpace = vec3(0.0, 0.0, 1.0); #endif vec3 normalEC = enuToEye * normalTangentSpace; const vec3 waveHighlightColor = vec3(0.3, 0.45, 0.6); // Use diffuse light to highlight the waves float diffuseIntensity = czm_getLambertDiffuse(czm_lightDirectionEC, normalEC) * maskValue; vec3 diffuseHighlight = waveHighlightColor * diffuseIntensity * (1.0 - fade); #ifdef SHOW_OCEAN_WAVES // Where diffuse light is low or non-existent, use wave highlights based solely on // the wave bumpiness and no particular light direction. float tsPerturbationRatio = normalTangentSpace.z; vec3 nonDiffuseHighlight = mix(waveHighlightColor * 5.0 * (1.0 - tsPerturbationRatio), vec3(0.0), diffuseIntensity); #else vec3 nonDiffuseHighlight = vec3(0.0); #endif // Add specular highlights in 3D, and in all modes when zoomed in. float specularIntensity = czm_getSpecular(czm_lightDirectionEC, normalizedPositionToEyeEC, normalEC, 10.0); float surfaceReflectance = mix(0.0, mix(u_zoomedOutOceanSpecularIntensity, oceanSpecularIntensity, waveIntensity), maskValue); float specular = specularIntensity * surfaceReflectance; #ifdef HDR specular *= 1.4; float e = 0.2; float d = 3.3; float c = 1.7; vec3 color = imageryColor.rgb + (c * (vec3(e) + imageryColor.rgb * d) * (diffuseHighlight + nonDiffuseHighlight + specular)); #else vec3 color = imageryColor.rgb + diffuseHighlight + nonDiffuseHighlight + specular; #endif return vec4(color, imageryColor.a); } #endif // #ifdef SHOW_REFLECTIVE_OCEAN `;var __i=_(T(),1),Vw=`#ifdef QUANTIZATION_BITS12 in vec4 compressed0; in float compressed1; #else in vec4 position3DAndHeight; in vec4 textureCoordAndEncodedNormals; #endif #ifdef GEODETIC_SURFACE_NORMALS in vec3 geodeticSurfaceNormal; #endif #ifdef EXAGGERATION uniform vec2 u_verticalExaggerationAndRelativeHeight; #endif uniform vec3 u_center3D; uniform mat4 u_modifiedModelView; uniform mat4 u_modifiedModelViewProjection; uniform vec4 u_tileRectangle; // Uniforms for 2D Mercator projection uniform vec2 u_southAndNorthLatitude; uniform vec2 u_southMercatorYAndOneOverHeight; out vec3 v_positionMC; out vec3 v_positionEC; out vec3 v_textureCoordinates; out vec3 v_normalMC; out vec3 v_normalEC; #ifdef APPLY_MATERIAL out float v_slope; out float v_aspect; out float v_height; #endif #if defined(FOG) || defined(GROUND_ATMOSPHERE) || defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT) out float v_distance; #endif #if defined(FOG) || defined(GROUND_ATMOSPHERE) out vec3 v_atmosphereRayleighColor; out vec3 v_atmosphereMieColor; out float v_atmosphereOpacity; #endif #ifdef ENABLE_CLIPPING_POLYGONS uniform highp sampler2D u_clippingExtents; out vec2 v_clippingPosition; flat out int v_regionIndex; #endif // These functions are generated at runtime. vec4 getPosition(vec3 position, float height, vec2 textureCoordinates); float get2DYPositionFraction(vec2 textureCoordinates); vec4 getPosition3DMode(vec3 position, float height, vec2 textureCoordinates) { return u_modifiedModelViewProjection * vec4(position, 1.0); } float get2DMercatorYPositionFraction(vec2 textureCoordinates) { // The width of a tile at level 11, in radians and assuming a single root tile, is // 2.0 * czm_pi / pow(2.0, 11.0) // We want to just linearly interpolate the 2D position from the texture coordinates // when we're at this level or higher. The constant below is the expression // above evaluated and then rounded up at the 4th significant digit. const float maxTileWidth = 0.003068; float positionFraction = textureCoordinates.y; float southLatitude = u_southAndNorthLatitude.x; float northLatitude = u_southAndNorthLatitude.y; if (northLatitude - southLatitude > maxTileWidth) { float southMercatorY = u_southMercatorYAndOneOverHeight.x; float oneOverMercatorHeight = u_southMercatorYAndOneOverHeight.y; float currentLatitude = mix(southLatitude, northLatitude, textureCoordinates.y); currentLatitude = clamp(currentLatitude, -czm_webMercatorMaxLatitude, czm_webMercatorMaxLatitude); positionFraction = czm_latitudeToWebMercatorFraction(currentLatitude, southMercatorY, oneOverMercatorHeight); } return positionFraction; } float get2DGeographicYPositionFraction(vec2 textureCoordinates) { return textureCoordinates.y; } vec4 getPositionPlanarEarth(vec3 position, float height, vec2 textureCoordinates) { float yPositionFraction = get2DYPositionFraction(textureCoordinates); vec4 rtcPosition2D = vec4(height, mix(u_tileRectangle.st, u_tileRectangle.pq, vec2(textureCoordinates.x, yPositionFraction)), 1.0); return u_modifiedModelViewProjection * rtcPosition2D; } vec4 getPosition2DMode(vec3 position, float height, vec2 textureCoordinates) { return getPositionPlanarEarth(position, 0.0, textureCoordinates); } vec4 getPositionColumbusViewMode(vec3 position, float height, vec2 textureCoordinates) { return getPositionPlanarEarth(position, height, textureCoordinates); } vec4 getPositionMorphingMode(vec3 position, float height, vec2 textureCoordinates) { // We do not do RTC while morphing, so there is potential for jitter. // This is unlikely to be noticeable, though. vec3 position3DWC = position + u_center3D; float yPositionFraction = get2DYPositionFraction(textureCoordinates); vec4 position2DWC = vec4(height, mix(u_tileRectangle.st, u_tileRectangle.pq, vec2(textureCoordinates.x, yPositionFraction)), 1.0); vec4 morphPosition = czm_columbusViewMorph(position2DWC, vec4(position3DWC, 1.0), czm_morphTime); return czm_modelViewProjection * morphPosition; } #ifdef QUANTIZATION_BITS12 uniform vec2 u_minMaxHeight; uniform mat4 u_scaleAndBias; #endif void main() { #ifdef QUANTIZATION_BITS12 vec2 xy = czm_decompressTextureCoordinates(compressed0.x); vec2 zh = czm_decompressTextureCoordinates(compressed0.y); vec3 position = vec3(xy, zh.x); float height = zh.y; vec2 textureCoordinates = czm_decompressTextureCoordinates(compressed0.z); height = height * (u_minMaxHeight.y - u_minMaxHeight.x) + u_minMaxHeight.x; position = (u_scaleAndBias * vec4(position, 1.0)).xyz; #if (defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL)) && defined(INCLUDE_WEB_MERCATOR_Y) || defined(APPLY_MATERIAL) float webMercatorT = czm_decompressTextureCoordinates(compressed0.w).x; float encodedNormal = compressed1; #elif defined(INCLUDE_WEB_MERCATOR_Y) float webMercatorT = czm_decompressTextureCoordinates(compressed0.w).x; float encodedNormal = 0.0; #elif defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL) float webMercatorT = textureCoordinates.y; float encodedNormal = compressed0.w; #else float webMercatorT = textureCoordinates.y; float encodedNormal = 0.0; #endif #else // A single float per element vec3 position = position3DAndHeight.xyz; float height = position3DAndHeight.w; vec2 textureCoordinates = textureCoordAndEncodedNormals.xy; #if (defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL) || defined(APPLY_MATERIAL)) && defined(INCLUDE_WEB_MERCATOR_Y) float webMercatorT = textureCoordAndEncodedNormals.z; float encodedNormal = textureCoordAndEncodedNormals.w; #elif defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL) || defined(APPLY_MATERIAL) float webMercatorT = textureCoordinates.y; float encodedNormal = textureCoordAndEncodedNormals.z; #elif defined(INCLUDE_WEB_MERCATOR_Y) float webMercatorT = textureCoordAndEncodedNormals.z; float encodedNormal = 0.0; #else float webMercatorT = textureCoordinates.y; float encodedNormal = 0.0; #endif #endif vec3 position3DWC = position + u_center3D; #ifdef GEODETIC_SURFACE_NORMALS vec3 ellipsoidNormal = geodeticSurfaceNormal; #else vec3 ellipsoidNormal = normalize(position3DWC); #endif #if defined(EXAGGERATION) && defined(GEODETIC_SURFACE_NORMALS) float exaggeration = u_verticalExaggerationAndRelativeHeight.x; float relativeHeight = u_verticalExaggerationAndRelativeHeight.y; float newHeight = (height - relativeHeight) * exaggeration + relativeHeight; // stop from going through center of earth float minRadius = min(min(czm_ellipsoidRadii.x, czm_ellipsoidRadii.y), czm_ellipsoidRadii.z); newHeight = max(newHeight, -minRadius); vec3 offset = ellipsoidNormal * (newHeight - height); position += offset; position3DWC += offset; height = newHeight; #endif gl_Position = getPosition(position, height, textureCoordinates); v_positionEC = (u_modifiedModelView * vec4(position, 1.0)).xyz; v_positionMC = position3DWC; // position in model coordinates v_textureCoordinates = vec3(textureCoordinates, webMercatorT); #if defined(ENABLE_VERTEX_LIGHTING) || defined(GENERATE_POSITION_AND_NORMAL) || defined(APPLY_MATERIAL) vec3 normalMC = czm_octDecode(encodedNormal); #if defined(EXAGGERATION) && defined(GEODETIC_SURFACE_NORMALS) vec3 projection = dot(normalMC, ellipsoidNormal) * ellipsoidNormal; vec3 rejection = normalMC - projection; normalMC = normalize(projection + rejection * exaggeration); #endif v_normalMC = normalMC; v_normalEC = czm_normal3D * v_normalMC; #endif #ifdef ENABLE_CLIPPING_POLYGONS vec2 sphericalLatLong = czm_approximateSphericalCoordinates(position3DWC); sphericalLatLong.y = czm_branchFreeTernary(sphericalLatLong.y < czm_pi, sphericalLatLong.y, sphericalLatLong.y - czm_twoPi); vec2 minDistance = vec2(czm_infinity); v_clippingPosition = vec2(czm_infinity); v_regionIndex = -1; for (int regionIndex = 0; regionIndex < CLIPPING_POLYGON_REGIONS_LENGTH; regionIndex++) { vec4 extents = unpackClippingExtents(u_clippingExtents, regionIndex); vec2 rectUv = (sphericalLatLong.yx - extents.yx) * extents.wz; vec2 clamped = clamp(rectUv, vec2(0.0), vec2(1.0)); vec2 distance = abs(rectUv - clamped) * extents.wz; float threshold = 0.01; if (minDistance.x > distance.x || minDistance.y > distance.y) { minDistance = distance; v_clippingPosition = rectUv; if (rectUv.x > threshold && rectUv.y > threshold && rectUv.x < 1.0 - threshold && rectUv.y < 1.0 - threshold) { v_regionIndex = regionIndex; } } } #endif #if defined(FOG) || (defined(GROUND_ATMOSPHERE) && !defined(PER_FRAGMENT_GROUND_ATMOSPHERE)) bool dynamicLighting = false; #if defined(DYNAMIC_ATMOSPHERE_LIGHTING) && (defined(ENABLE_DAYNIGHT_SHADING) || defined(ENABLE_VERTEX_LIGHTING)) dynamicLighting = true; #endif #if defined(DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN) vec3 atmosphereLightDirection = czm_sunDirectionWC; #else vec3 atmosphereLightDirection = czm_lightDirectionWC; #endif vec3 lightDirection = czm_branchFreeTernary(dynamicLighting, atmosphereLightDirection, normalize(position3DWC)); computeAtmosphereScattering( position3DWC, lightDirection, v_atmosphereRayleighColor, v_atmosphereMieColor, v_atmosphereOpacity ); #endif #if defined(FOG) || defined(GROUND_ATMOSPHERE) || defined(UNDERGROUND_COLOR) || defined(TRANSLUCENT) v_distance = length((czm_modelView3D * vec4(position3DWC, 1.0)).xyz); #endif #ifdef APPLY_MATERIAL float northPoleZ = czm_ellipsoidRadii.z; vec3 northPolePositionMC = vec3(0.0, 0.0, northPoleZ); vec3 vectorEastMC = normalize(cross(northPolePositionMC - v_positionMC, ellipsoidNormal)); float dotProd = abs(dot(ellipsoidNormal, v_normalMC)); v_slope = acos(dotProd); vec3 normalRejected = ellipsoidNormal * dotProd; vec3 normalProjected = v_normalMC - normalRejected; vec3 aspectVector = normalize(normalProjected); v_aspect = acos(dot(aspectVector, vectorEastMC)); float determ = dot(cross(vectorEastMC, aspectVector), ellipsoidNormal); v_aspect = czm_branchFreeTernary(determ < 0.0, 2.0 * czm_pi - v_aspect, v_aspect); v_height = height; #endif } `;var S_i=_(T(),1),AV=`void computeAtmosphereScattering(vec3 positionWC, vec3 lightDirection, out vec3 rayleighColor, out vec3 mieColor, out float opacity) { vec3 cameraToPositionWC = positionWC - czm_viewerPositionWC; vec3 cameraToPositionWCDirection = normalize(cameraToPositionWC); czm_ray primaryRay = czm_ray(czm_viewerPositionWC, cameraToPositionWCDirection); float atmosphereInnerRadius = length(positionWC); computeScattering( primaryRay, length(cameraToPositionWC), lightDirection, atmosphereInnerRadius, rayleighColor, mieColor, opacity ); } `;var v_i=_(T(),1);var R_i=_(T(),1);var Brt=new U;function Ort(e,t){let n=e.unionClippingRegions,i=e.length,o=fs.useFloatTexture(t),r=fs.getTextureResolution(e,t,Brt),s=r.x,a=r.y,c=o?Hrt(s,a):Krt(s,a);return c+=` `,c+=n?Yrt(i):zrt(i),c}function Yrt(e){return`float clip(vec4 fragCoord, sampler2D clippingPlanes, mat4 clippingPlanesMatrix) { vec4 position = czm_windowToEyeCoordinates(fragCoord); vec3 clipNormal = vec3(0.0); vec3 clipPosition = vec3(0.0); float clipAmount; float pixelWidth = czm_metersPerPixel(position); bool breakAndDiscard = false; for (int i = 0; i < ${e}; ++i) { vec4 clippingPlane = getClippingPlane(clippingPlanes, i, clippingPlanesMatrix); clipNormal = clippingPlane.xyz; clipPosition = -clippingPlane.w * clipNormal; float amount = dot(clipNormal, (position.xyz - clipPosition)) / pixelWidth; clipAmount = czm_branchFreeTernary(i == 0, amount, min(amount, clipAmount)); if (amount <= 0.0) { breakAndDiscard = true; break; } } if (breakAndDiscard) { discard; } return clipAmount; } `}function zrt(e){return`float clip(vec4 fragCoord, sampler2D clippingPlanes, mat4 clippingPlanesMatrix) { bool clipped = true; vec4 position = czm_windowToEyeCoordinates(fragCoord); vec3 clipNormal = vec3(0.0); vec3 clipPosition = vec3(0.0); float clipAmount = 0.0; float pixelWidth = czm_metersPerPixel(position); for (int i = 0; i < ${e}; ++i) { vec4 clippingPlane = getClippingPlane(clippingPlanes, i, clippingPlanesMatrix); clipNormal = clippingPlane.xyz; clipPosition = -clippingPlane.w * clipNormal; float amount = dot(clipNormal, (position.xyz - clipPosition)) / pixelWidth; clipAmount = max(amount, clipAmount); clipped = clipped && (amount <= 0.0); } if (clipped) { discard; } return clipAmount; } `}function Hrt(e,t){let n=1/e,i=1/t,o=`${n}`;o.indexOf(".")===-1&&(o+=".0");let r=`${i}`;return r.indexOf(".")===-1&&(r+=".0"),`vec4 getClippingPlane(highp sampler2D packedClippingPlanes, int clippingPlaneNumber, mat4 transform) { int pixY = clippingPlaneNumber / ${e}; int pixX = clippingPlaneNumber - (pixY * ${e}); float u = (float(pixX) + 0.5) * ${o}; float v = (float(pixY) + 0.5) * ${r}; vec4 plane = texture(packedClippingPlanes, vec2(u, v)); return czm_transformPlane(plane, transform); } `}function Krt(e,t){let n=1/e,i=1/t,o=`${n}`;o.indexOf(".")===-1&&(o+=".0");let r=`${i}`;return r.indexOf(".")===-1&&(r+=".0"),`vec4 getClippingPlane(highp sampler2D packedClippingPlanes, int clippingPlaneNumber, mat4 transform) { int clippingPlaneStartIndex = clippingPlaneNumber * 2; int pixY = clippingPlaneStartIndex / ${e}; int pixX = clippingPlaneStartIndex - (pixY * ${e}); float u = (float(pixX) + 0.5) * ${o}; float v = (float(pixY) + 0.5) * ${r}; vec4 oct32 = texture(packedClippingPlanes, vec2(u, v)) * 255.0; vec2 oct = vec2(oct32.x * 256.0 + oct32.y, oct32.z * 256.0 + oct32.w); vec4 plane; plane.xyz = czm_octDecode(oct, 65535.0); plane.w = czm_unpackFloat(texture(packedClippingPlanes, vec2(u + ${o}, v))); return czm_transformPlane(plane, transform); } `}var c0=Ort;function Jrt(e,t,n,i,o,r){this.numberOfDayTextures=e,this.flags=t,this.material=n,this.shaderProgram=i,this.clippingShaderState=o,this.clippingPolygonShaderState=r}function O4(){this.baseVertexShaderSource=void 0,this.baseFragmentShaderSource=void 0,this._shadersByTexturesFlags=[],this.material=void 0}function Qrt(e){let t="vec4 getPosition(vec3 position, float height, vec2 textureCoordinates) { return getPosition3DMode(position, height, textureCoordinates); }",n="vec4 getPosition(vec3 position, float height, vec2 textureCoordinates) { return getPositionColumbusViewMode(position, height, textureCoordinates); }",i="vec4 getPosition(vec3 position, float height, vec2 textureCoordinates) { return getPositionMorphingMode(position, height, textureCoordinates); }",o;switch(e){case oe.SCENE3D:o=t;break;case oe.SCENE2D:case oe.COLUMBUS_VIEW:o=n;break;case oe.MORPHING:o=i;break}return o}function jrt(e){return e.webgl2?`void clipPolygons(highp sampler2D clippingDistance, int regionsLength, vec2 clippingPosition, int regionIndex) { czm_clipPolygons(clippingDistance, regionsLength, clippingPosition, regionIndex); }`:`void clipPolygons(highp sampler2D clippingDistance, int regionsLength, vec2 clippingPosition, int regionIndex) { }`}function qrt(e){return e.webgl2?`vec4 unpackClippingExtents(highp sampler2D extentsTexture, int index) { return czm_unpackClippingExtents(extentsTexture, index); }`:`vec4 unpackClippingExtents(highp sampler2D extentsTexture, int index) { return vec4(); }`}function $rt(e){return e?"float get2DYPositionFraction(vec2 textureCoordinates) { return get2DMercatorYPositionFraction(textureCoordinates); }":"float get2DYPositionFraction(vec2 textureCoordinates) { return get2DGeographicYPositionFraction(textureCoordinates); }"}O4.prototype.getShaderProgram=function(e){let t=e.frameState,n=e.surfaceTile,i=e.numberOfDayTextures,o=e.applyBrightness,r=e.applyContrast,s=e.applyHue,a=e.applySaturation,c=e.applyGamma,d=e.applyAlpha,u=e.applyDayNightAlpha,h=e.applySplit,p=e.hasWaterMask,g=e.showReflectiveOcean,f=e.showOceanWaves,y=e.enableLighting,x=e.dynamicAtmosphereLighting,S=e.dynamicAtmosphereLightingFromSun,C=e.showGroundAtmosphere,V=e.perFragmentGroundAtmosphere,L=e.hasVertexNormals,Z=e.useWebMercatorProjection,E=e.enableFog,P=e.enableClippingPlanes,W=e.clippingPlanes,v=e.enableClippingPolygons,A=e.clippingPolygons,b=e.clippedByBoundaries,R=e.hasImageryLayerCutout,G=e.colorCorrect,I=e.highlightFillTile,w=e.colorToAlpha,M=e.hasGeodeticSurfaceNormals,B=e.hasExaggeration,k=e.showUndergroundColor,O=e.translucent,N=0,z="",te=n.renderedMesh.encoding;te.quantization===ea.BITS12&&(N=1,z="QUANTIZATION_BITS12");let j=0,ee="";b&&(j=1,ee="TILE_LIMIT_RECTANGLE");let fe=0,Te="";R&&(fe=1,Te="APPLY_IMAGERY_CUTOUT");let de=t.mode,xe=de|o<<2|r<<3|s<<4|a<<5|c<<6|d<<7|p<<8|g<<9|f<<10|y<<11|x<<12|S<<13|C<<14|V<<15|L<<16|Z<<17|E<<18|N<<19|h<<20|P<<21|v<<22|j<<23|fe<<24|G<<25|I<<26|w<<27|M<<28|B<<29|k<<30|O<<31|u<<32,Ce=0;l(W)&&W.length>0&&(Ce=P?W.clippingPlanesState:0);let Ie=0;l(A)&&A.length>0&&(Ie=v?A.clippingPolygonsState:0);let Le=n.surfaceShader;if(l(Le)&&Le.numberOfDayTextures===i&&Le.flags===xe&&Le.material===this.material&&Le.clippingShaderState===Ce&&Le.clippingPolygonShaderState===Ie)return Le.shaderProgram;let Ne=this._shadersByTexturesFlags[i];if(l(Ne)||(Ne=this._shadersByTexturesFlags[i]=[]),Le=Ne[xe],!l(Le)||Le.material!==this.material||Le.clippingShaderState!==Ce||Le.clippingPolygonShaderState!==Ie){let Oe=this.baseVertexShaderSource.clone(),qe=this.baseFragmentShaderSource.clone();Ce!==0&&qe.sources.unshift(c0(W,t.context)),Ie!==0&&(qe.sources.unshift(jrt(t.context)),Oe.sources.unshift(qrt(t.context))),Oe.defines.push(z),qe.defines.push(`TEXTURE_UNITS ${i}`,ee,Te),o&&qe.defines.push("APPLY_BRIGHTNESS"),r&&qe.defines.push("APPLY_CONTRAST"),s&&qe.defines.push("APPLY_HUE"),a&&qe.defines.push("APPLY_SATURATION"),c&&qe.defines.push("APPLY_GAMMA"),d&&qe.defines.push("APPLY_ALPHA"),u&&qe.defines.push("APPLY_DAY_NIGHT_ALPHA"),p&&qe.defines.push("HAS_WATER_MASK"),g&&(qe.defines.push("SHOW_REFLECTIVE_OCEAN"),Oe.defines.push("SHOW_REFLECTIVE_OCEAN")),f&&qe.defines.push("SHOW_OCEAN_WAVES"),w&&qe.defines.push("APPLY_COLOR_TO_ALPHA"),k&&(Oe.defines.push("UNDERGROUND_COLOR"),qe.defines.push("UNDERGROUND_COLOR")),O&&(Oe.defines.push("TRANSLUCENT"),qe.defines.push("TRANSLUCENT")),y&&(L?(Oe.defines.push("ENABLE_VERTEX_LIGHTING"),qe.defines.push("ENABLE_VERTEX_LIGHTING")):(Oe.defines.push("ENABLE_DAYNIGHT_SHADING"),qe.defines.push("ENABLE_DAYNIGHT_SHADING"))),x&&(Oe.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING"),qe.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING"),S&&(Oe.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN"),qe.defines.push("DYNAMIC_ATMOSPHERE_LIGHTING_FROM_SUN"))),C&&(Oe.defines.push("GROUND_ATMOSPHERE"),qe.defines.push("GROUND_ATMOSPHERE"),V&&(Oe.defines.push("PER_FRAGMENT_GROUND_ATMOSPHERE"),qe.defines.push("PER_FRAGMENT_GROUND_ATMOSPHERE"))),Oe.defines.push("INCLUDE_WEB_MERCATOR_Y"),qe.defines.push("INCLUDE_WEB_MERCATOR_Y"),E&&(Oe.defines.push("FOG"),qe.defines.push("FOG")),h&&qe.defines.push("APPLY_SPLIT"),P&&qe.defines.push("ENABLE_CLIPPING_PLANES"),v&&(qe.defines.push("ENABLE_CLIPPING_POLYGONS"),Oe.defines.push("ENABLE_CLIPPING_POLYGONS"),A.inverse&&qe.defines.push("CLIPPING_INVERSE"),qe.defines.push(`CLIPPING_POLYGON_REGIONS_LENGTH ${A.extentsCount}`),Oe.defines.push(`CLIPPING_POLYGON_REGIONS_LENGTH ${A.extentsCount}`)),G&&qe.defines.push("COLOR_CORRECT"),I&&qe.defines.push("HIGHLIGHT_FILL_TILE"),M&&Oe.defines.push("GEODETIC_SURFACE_NORMALS"),B&&Oe.defines.push("EXAGGERATION");let Rt=` vec4 computeDayColor(vec4 initialColor, vec3 textureCoordinates, float nightBlend) { vec4 color = initialColor; `;R&&(Rt+=` vec4 cutoutAndColorResult; bool texelUnclipped; `);for(let ke=0;ke<i;++ke)R?Rt+=` cutoutAndColorResult = u_dayTextureCutoutRectangles[${ke}]; texelUnclipped = v_textureCoordinates.x < cutoutAndColorResult.x || cutoutAndColorResult.z < v_textureCoordinates.x || v_textureCoordinates.y < cutoutAndColorResult.y || cutoutAndColorResult.w < v_textureCoordinates.y; cutoutAndColorResult = sampleAndBlend( `:Rt+=` color = sampleAndBlend( `,Rt+=` color, u_dayTextures[${ke}], u_dayTextureUseWebMercatorT[${ke}] ? textureCoordinates.xz : textureCoordinates.xy, u_dayTextureTexCoordsRectangle[${ke}], u_dayTextureTranslationAndScale[${ke}], ${d?`u_dayTextureAlpha[${ke}]`:"1.0"}, ${u?`u_dayTextureNightAlpha[${ke}]`:"1.0"}, ${u?`u_dayTextureDayAlpha[${ke}]`:"1.0"}, ${o?`u_dayTextureBrightness[${ke}]`:"0.0"}, ${r?`u_dayTextureContrast[${ke}]`:"0.0"}, ${s?`u_dayTextureHue[${ke}]`:"0.0"}, ${a?`u_dayTextureSaturation[${ke}]`:"0.0"}, ${c?`u_dayTextureOneOverGamma[${ke}]`:"0.0"}, ${h?`u_dayTextureSplit[${ke}]`:"0.0"}, ${w?`u_colorsToAlpha[${ke}]`:"vec4(0.0)"}, nightBlend ); `,R&&(Rt+=` color = czm_branchFreeTernary(texelUnclipped, cutoutAndColorResult, color); `);Rt+=` return color; }`,qe.sources.push(Rt),Oe.sources.push(Qrt(de)),Oe.sources.push($rt(Z));let Lt=$t.fromCache({context:t.context,vertexShaderSource:Oe,fragmentShaderSource:qe,attributeLocations:te.getAttributeLocations()});Le=Ne[xe]=new Jrt(i,xe,this.material,Lt,Ce,Ie)}return n.surfaceShader=Le,Le.shaderProgram};O4.prototype.destroy=function(){let e,t,n=this._shadersByTexturesFlags;for(let i in n)if(n.hasOwnProperty(i)){let o=n[i];if(!l(o))continue;for(e in o)o.hasOwnProperty(e)&&(t=o[e],l(t)&&t.shaderProgram.destroy())}return me(this)};var Lw=O4;var LRi=_(T(),1);var F_i=_(T(),1),est={NONE:-1,PARTIAL:0,FULL:1},hr=Object.freeze(est);var TTi=_(T(),1);var k_i=_(T(),1);function GD(e,t,n,i,o,r,s){this.provider=e,this.message=t,this.x=n,this.y=i,this.level=o,this.timesRetried=r??0,this.retry=!1,this.error=s}GD.reportError=function(e,t,n,i,o,r,s,a){let c=e;return l(e)?(c.provider=t,c.message=i,c.x=o,c.y=r,c.level=s,c.retry=!1,c.error=a,++c.timesRetried):c=new GD(t,i,o,r,s,0,a),l(n)&&n.numberOfListeners>0?n.raiseEvent(c):l(t)&&console.log(`An error occurred in "${t.constructor.name}": ${jf(i)}`),c};GD.reportSuccess=function(e){l(e)&&(e.timesRetried=-1)};var Zo=GD;var D_i=_(T(),1),tst={UNLOADED:0,TRANSITIONING:1,RECEIVED:2,TEXTURE_LOADED:3,READY:4,FAILED:5,INVALID:6,PLACEHOLDER:7},ci=Object.freeze(tst);var O_i=_(T(),1),nst={START:0,LOADING:1,DONE:2,FAILED:3},ta=Object.freeze(nst);var z_i=_(T(),1),ist={FAILED:0,UNLOADED:1,RECEIVING:2,RECEIVED:3,TRANSFORMING:4,TRANSFORMED:5,READY:6},mo=Object.freeze(ist);function ir(){this.imagery=[],this.waterMaskTexture=void 0,this.waterMaskTranslationAndScale=new se(0,0,1,1),this.terrainData=void 0,this.vertexArray=void 0,this.tileBoundingRegion=void 0,this.occludeePointInScaledSpace=new m,this.boundingVolumeSourceTile=void 0,this.boundingVolumeIsFromMesh=!1,this.terrainState=mo.UNLOADED,this.mesh=void 0,this.fill=void 0,this.pickBoundingSphere=new le,this.surfaceShader=void 0,this.isClipped=!0,this.clippedByBoundaries=!1}Object.defineProperties(ir.prototype,{eligibleForUnloading:{get:function(){let e=this.terrainState,n=!(e===mo.RECEIVING||e===mo.TRANSFORMING),i=this.imagery;for(let o=0,r=i.length;n&&o<r;++o){let s=i[o];n=!l(s.loadingImagery)||s.loadingImagery.state!==ci.TRANSITIONING}return n}},renderedMesh:{get:function(){if(l(this.vertexArray))return this.mesh;if(l(this.fill))return this.fill.mesh}}});var ost=new he;function Y4(e,t,n,i,o,r){let s=e.getExaggeratedPosition(i,o,r);if(l(t)&&t!==oe.SCENE3D){let c=n.ellipsoid.cartesianToCartographic(s,ost);s=n.project(c,r),s=m.fromElements(s.z,s.x,s.y,r)}return s}var rst=new m,sst=new m,ast=new m;ir.prototype.pick=function(e,t,n,i,o){let r=this.renderedMesh;if(!l(r))return;let s=r.vertices,a=r.indices,c=r.encoding,d=a.length,u=Number.MAX_VALUE;for(let h=0;h<d;h+=3){let p=a[h],g=a[h+1],f=a[h+2],y=Y4(c,t,n,s,p,rst),x=Y4(c,t,n,s,g,sst),S=Y4(c,t,n,s,f,ast),C=qn.rayTriangleParametric(e,y,x,S,i);l(C)&&C<u&&C>=0&&(u=C)}return u!==Number.MAX_VALUE?pn.getPoint(e,u,o):void 0};ir.prototype.freeResources=function(){l(this.waterMaskTexture)&&(--this.waterMaskTexture.referenceCount,this.waterMaskTexture.referenceCount===0&&this.waterMaskTexture.destroy(),this.waterMaskTexture=void 0),this.terrainData=void 0,this.terrainState=mo.UNLOADED,this.mesh=void 0,this.fill=this.fill&&this.fill.destroy();let e=this.imagery;for(let t=0,n=e.length;t<n;++t)e[t].freeResources();this.imagery.length=0,this.freeVertexArray()};ir.prototype.freeVertexArray=function(){ir._freeVertexArray(this.vertexArray),this.vertexArray=void 0,ir._freeVertexArray(this.wireframeVertexArray),this.wireframeVertexArray=void 0};ir.initialize=function(e,t,n){let i=e.data;l(i)||(i=e.data=new ir),e.state===ta.START&&(cst(e,t,n),e.state=ta.LOADING)};ir.processStateMachine=function(e,t,n,i,o,r,s){ir.initialize(e,n,i);let a=e.data;if(e.state===ta.LOADING&&lst(e,t,n,i,o,r),s)return;let c=e.renderable;e.renderable=l(a.vertexArray);let d=a.terrainState===mo.READY;e.upsampledFromParent=l(a.terrainData)&&a.terrainData.wasCreatedByUpsampling();let u=a.processImagery(e,n,t);if(d&&u){let h=e._loadedCallbacks,p={};for(let g in h)h.hasOwnProperty(g)&&(h[g](e)||(p[g]=h[g]));e._loadedCallbacks=p,e.state=ta.DONE}c&&(e.renderable=!0)};ir.prototype.processImagery=function(e,t,n,i){let o=e.data,r=e.upsampledFromParent,s=!1,a=!0,c=o.imagery,d,u;for(d=0,u=c.length;d<u;++d){let h=c[d];if(!l(h.loadingImagery)){r=!1;continue}if(h.loadingImagery.state===ci.PLACEHOLDER){let g=h.loadingImagery.imageryLayer;if(g.ready){h.freeResources(),c.splice(d,1),g._createTileImagerySkeletons(e,t,d),--d,u=c.length;continue}else r=!1}let p=h.processStateMachine(e,n,i);a=a&&p,s=s||p||l(h.readyImagery),r=r&&l(h.loadingImagery)&&(h.loadingImagery.state===ci.FAILED||h.loadingImagery.state===ci.INVALID)}return e.upsampledFromParent=r,e.renderable=e.renderable&&(s||a),a};function hge(e,t,n,i){let o=e.renderedMesh,r=o.vertices,s=o.encoding,a=r.length/s.stride,c=Rc.clone(s);c.hasGeodeticSurfaceNormals=t,c=Rc.clone(c);let d=c.stride,u=new Float32Array(a*d);t?s.addGeodeticSurfaceNormals(r,u,n):s.removeGeodeticSurfaceNormals(r,u),o.vertices=u,o.stride=d,o!==e.mesh?(ir._freeVertexArray(e.fill.vertexArray),e.fill.vertexArray=ir._createVertexArrayForMesh(i.context,o)):(ir._freeVertexArray(e.vertexArray),e.vertexArray=ir._createVertexArrayForMesh(i.context,o)),ir._freeVertexArray(e.wireframeVertexArray),e.wireframeVertexArray=void 0}ir.prototype.addGeodeticSurfaceNormals=function(e,t){hge(this,!0,e,t)};ir.prototype.removeGeodeticSurfaceNormals=function(e){hge(this,!1,void 0,e)};ir.prototype.updateExaggeration=function(e,t,n){let i=this,o=i.renderedMesh;if(o===void 0)return;let r=t.verticalExaggeration,s=t.verticalExaggerationRelativeHeight,a=r!==1,c=o.encoding,d=c.exaggeration!==r,u=c.exaggerationRelativeHeight!==s;if(d||u){if(d)if(a&&!c.hasGeodeticSurfaceNormals){let h=e.tilingScheme.ellipsoid;i.addGeodeticSurfaceNormals(h,t)}else!a&&c.hasGeodeticSurfaceNormals&&i.removeGeodeticSurfaceNormals(t);if(c.exaggeration=r,c.exaggerationRelativeHeight=s,n!==void 0){n._tileToUpdateHeights.push(e);let h=e.customData,p=h.length;for(let g=0;g<p;g++){let f=h[g];f.level=-1}}}};function cst(e,t,n){let i=t.getTileDataAvailable(e.x,e.y,e.level);if(!l(i)&&l(e.parent)){let o=e.parent,r=o.data;l(r)&&l(r.terrainData)&&(i=r.terrainData.isChildAvailable(o.x,o.y,e.x,e.y))}i===!1&&(e.data.terrainState=mo.FAILED);for(let o=0,r=n.length;o<r;++o){let s=n.get(o);s.show&&s._createTileImagerySkeletons(e,t)}}function lst(e,t,n,i,o,r){let s=e.data,a=e.parent;if(s.terrainState===mo.FAILED&&a!==void 0&&(a.data!==void 0&&a.data.terrainData!==void 0&&a.data.terrainData.canUpsample!==!1||ir.processStateMachine(a,t,n,i,o,r,!0)),s.terrainState===mo.FAILED&&dst(s,e,t,n,e.x,e.y,e.level),s.terrainState===mo.UNLOADED&&ust(s,n,e.x,e.y,e.level),s.terrainState===mo.RECEIVED&&hst(s,t,n,e.x,e.y,e.level),s.terrainState===mo.TRANSFORMED&&(fst(s,t.context,n,e.x,e.y,e.level,r),s.updateExaggeration(e,t,o)),s.terrainState>=mo.RECEIVED&&s.waterMaskTexture===void 0&&n.hasWaterMask)if(s.terrainData.waterMask!==void 0)bst(t.context,s);else{let d=s._findAncestorTileWithTerrainData(e);l(d)&&l(d.data.waterMaskTexture)&&(s.waterMaskTexture=d.data.waterMaskTexture,++s.waterMaskTexture.referenceCount,s._computeWaterMaskTranslationAndScale(e,d,s.waterMaskTranslationAndScale))}}function dst(e,t,n,i,o,r,s){let a=t.parent;if(!a){t.state=ta.FAILED;return}let c=a.data.terrainData,d=a.x,u=a.y,h=a.level;if(!l(c))return;let p=c.upsample(i.tilingScheme,d,u,h,o,r,s);l(p)&&(e.terrainState=mo.RECEIVING,Promise.resolve(p).then(function(g){l(g)&&(e.terrainData=g,e.terrainState=mo.RECEIVED)}).catch(function(){e.terrainState=mo.FAILED}))}function ust(e,t,n,i,o){function r(c){if(!l(c)){e.terrainState=mo.UNLOADED,e.request=void 0;return}e.terrainData=c,e.terrainState=mo.RECEIVED,e.request=void 0}function s(c){if(e.request.state===jn.CANCELLED){e.terrainData=void 0,e.terrainState=mo.UNLOADED,e.request=void 0;return}e.terrainState=mo.FAILED,e.request=void 0;let d=`Failed to obtain terrain tile X: ${n} Y: ${i} Level: ${o}. Error message: "${c}"`;t._requestError=Zo.reportError(t._requestError,t,t.errorEvent,d,n,i,o),t._requestError.retry&&a()}function a(){let c=new zo({throttle:!1,throttleByServer:!0,type:ds.TERRAIN});e.request=c;let d=t.requestTileGeometry(n,i,o,c);l(d)?(e.terrainState=mo.RECEIVING,Promise.resolve(d).then(function(u){r(u)}).catch(function(u){s(u)})):(e.terrainState=mo.UNLOADED,e.request=void 0)}a()}var mst={tilingScheme:void 0,x:0,y:0,level:0,exaggeration:1,exaggerationRelativeHeight:0,throttle:!0};function hst(e,t,n,i,o,r){let s=n.tilingScheme,a=mst;a.tilingScheme=s,a.x=i,a.y=o,a.level=r,a.exaggeration=t.verticalExaggeration,a.exaggerationRelativeHeight=t.verticalExaggerationRelativeHeight,a.throttle=!0;let d=e.terrainData.createMesh(a);l(d)&&(e.terrainState=mo.TRANSFORMING,Promise.resolve(d).then(function(u){e.mesh=u,e.terrainState=mo.TRANSFORMED}).catch(function(){e.terrainState=mo.FAILED}))}ir._createVertexArrayForMesh=function(e,t){let n=t.vertices,i=xt.createVertexBuffer({context:e,typedArray:n,usage:Me.STATIC_DRAW}),o=t.encoding.getAttributes(i),r=t.indices.indexBuffers||{},s=r[e.id];if(!l(s)||s.isDestroyed()){let a=t.indices;s=xt.createIndexBuffer({context:e,typedArray:a,usage:Me.STATIC_DRAW,indexDatatype:Ae.fromSizeInBytes(a.BYTES_PER_ELEMENT)}),s.vertexArrayDestroyable=!1,s.referenceCount=1,r[e.id]=s,t.indices.indexBuffers=r}else++s.referenceCount;return new ni({context:e,attributes:o,indexBuffer:s})};ir._freeVertexArray=function(e){if(l(e)){let t=e.indexBuffer;e.isDestroyed()||e.destroy(),l(t)&&!t.isDestroyed()&&l(t.referenceCount)&&(--t.referenceCount,t.referenceCount===0&&t.destroy())}};function fst(e,t,n,i,o,r,s){e.vertexArray=ir._createVertexArrayForMesh(t,e.mesh),e.terrainState=mo.READY,e.fill=e.fill&&e.fill.destroy(s)}function pst(e){let t=e.cache.tile_waterMaskData;if(!l(t)){let n=vt.create({context:e,pixelFormat:it.LUMINANCE,pixelDatatype:je.UNSIGNED_BYTE,source:{arrayBufferView:new Uint8Array([255]),width:1,height:1}});n.referenceCount=1;let i=new qt({wrapS:Vn.CLAMP_TO_EDGE,wrapT:Vn.CLAMP_TO_EDGE,minificationFilter:jt.LINEAR,magnificationFilter:hi.LINEAR});t={allWaterTexture:n,sampler:i,destroy:function(){this.allWaterTexture.destroy()}},e.cache.tile_waterMaskData=t}return t}function bst(e,t){let n=t.terrainData.waterMask,i=pst(e),o,r=n.length;if(r===1)if(n[0]!==0)o=i.allWaterTexture;else return;else{let s=Math.sqrt(r);o=vt.create({context:e,pixelFormat:it.LUMINANCE,pixelDatatype:je.UNSIGNED_BYTE,source:{width:s,height:s,arrayBufferView:n},sampler:i.sampler,flipY:!1}),o.referenceCount=0}++o.referenceCount,t.waterMaskTexture=o,se.fromElements(0,0,1,1,t.waterMaskTranslationAndScale)}ir.prototype._findAncestorTileWithTerrainData=function(e){let t=e.parent;for(;l(t)&&(!l(t.data)||!l(t.data.terrainData)||t.data.terrainData.wasCreatedByUpsampling());)t=t.parent;return t};ir.prototype._computeWaterMaskTranslationAndScale=function(e,t,n){let i=t.rectangle,o=e.rectangle,r=o.width,s=o.height,a=r/i.width,c=s/i.height;return n.x=a*(o.west-i.west)/r,n.y=c*(o.south-i.south)/s,n.z=a,n.w=c,n};var mm=ir;var $Vi=_(T(),1);var eVi=_(T(),1);var H1i=_(T(),1);var xSi=_(T(),1);var ETi=_(T(),1);function Vy(e){if(e=e??Y.EMPTY_OBJECT,this._ellipsoid=e.ellipsoid??ne.default,this._numberOfLevelZeroTilesX=e.numberOfLevelZeroTilesX??1,this._numberOfLevelZeroTilesY=e.numberOfLevelZeroTilesY??1,this._projection=new Xi(this._ellipsoid),l(e.rectangleSouthwestInMeters)&&l(e.rectangleNortheastInMeters))this._rectangleSouthwestInMeters=e.rectangleSouthwestInMeters,this._rectangleNortheastInMeters=e.rectangleNortheastInMeters;else{let i=this._ellipsoid.maximumRadius*Math.PI;this._rectangleSouthwestInMeters=new U(-i,-i),this._rectangleNortheastInMeters=new U(i,i)}let t=this._projection.unproject(this._rectangleSouthwestInMeters),n=this._projection.unproject(this._rectangleNortheastInMeters);this._rectangle=new ce(t.longitude,t.latitude,n.longitude,n.latitude)}Object.defineProperties(Vy.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},rectangle:{get:function(){return this._rectangle}},projection:{get:function(){return this._projection}}});Vy.prototype.getNumberOfXTilesAtLevel=function(e){return this._numberOfLevelZeroTilesX<<e};Vy.prototype.getNumberOfYTilesAtLevel=function(e){return this._numberOfLevelZeroTilesY<<e};Vy.prototype.rectangleToNativeRectangle=function(e,t){let n=this._projection,i=n.project(ce.southwest(e)),o=n.project(ce.northeast(e));return l(t)?(t.west=i.x,t.south=i.y,t.east=o.x,t.north=o.y,t):new ce(i.x,i.y,o.x,o.y)};Vy.prototype.tileXYToNativeRectangle=function(e,t,n,i){let o=this.getNumberOfXTilesAtLevel(n),r=this.getNumberOfYTilesAtLevel(n),s=(this._rectangleNortheastInMeters.x-this._rectangleSouthwestInMeters.x)/o,a=this._rectangleSouthwestInMeters.x+e*s,c=this._rectangleSouthwestInMeters.x+(e+1)*s,d=(this._rectangleNortheastInMeters.y-this._rectangleSouthwestInMeters.y)/r,u=this._rectangleNortheastInMeters.y-t*d,h=this._rectangleNortheastInMeters.y-(t+1)*d;return l(i)?(i.west=a,i.south=h,i.east=c,i.north=u,i):new ce(a,h,c,u)};Vy.prototype.tileXYToRectangle=function(e,t,n,i){let o=this.tileXYToNativeRectangle(e,t,n,i),r=this._projection,s=r.unproject(new U(o.west,o.south)),a=r.unproject(new U(o.east,o.north));return o.west=s.longitude,o.south=s.latitude,o.east=a.longitude,o.north=a.latitude,o};Vy.prototype.positionToTileXY=function(e,t,n){let i=this._rectangle;if(!ce.contains(i,e))return;let o=this.getNumberOfXTilesAtLevel(t),r=this.getNumberOfYTilesAtLevel(t),a=(this._rectangleNortheastInMeters.x-this._rectangleSouthwestInMeters.x)/o,d=(this._rectangleNortheastInMeters.y-this._rectangleSouthwestInMeters.y)/r,h=this._projection.project(e),p=h.x-this._rectangleSouthwestInMeters.x,g=this._rectangleNortheastInMeters.y-h.y,f=p/a|0;f>=o&&(f=o-1);let y=g/d|0;return y>=r&&(y=r-1),l(n)?(n.x=f,n.y=y,n):new U(f,y)};var rs=Vy;var vTi=_(T(),1);var z4,fge="AAPTxy8BH1VEsoebNVZXo8HurEOF051kAEKlhkOhBEc9BmQHrJmkly5GMmeyeds7qlqGckHbEMszNoB_aHL967jpcpMFlqzgl75smE9bSxUFgvbMH9RZ-1bNm94gP0mBkZCj49YnVLAsh3PgcdtfgQwNxkZdUV2dz75e_dsw_O0bYHnpqlqyefjc7B5QgSv6ClYuonoi55ZvXmrydipr6sBClFcIjCyO89XNoxG1N4yuLS0.AT1_EEoMffUB",MV={};MV.defaultAccessToken=fge;MV.defaultWorldImageryServer=new Ze({url:"https://ibasemaps-api.arcgis.com/arcgis/rest/services/World_Imagery/MapServer"});MV.defaultWorldHillshadeServer=new Ze({url:"https://ibasemaps-api.arcgis.com/arcgis/rest/services/Elevation/World_Hillshade/MapServer"});MV.defaultWorldOceanServer=new Ze({url:"https://ibasemaps-api.arcgis.com/arcgis/rest/services/Ocean/World_Ocean_Base/MapServer"});MV.getDefaultTokenCredit=function(e){if(e===fge){if(!l(z4)){let t='<b> This application is using a default ArcGIS access token. Please assign <i>Cesium.ArcGisMapService.defaultAccessToken</i> with an API key from your ArcGIS Developer account before using the ArcGIS tile services. You can sign up for a free ArcGIS Developer account at <a href="https://developers.arcgis.com/">https://developers.arcgis.com/</a>.</b>';z4=new Ct(t,!0)}return z4}};var jd=MV;var kTi=_(T(),1);function H4(e){e=e??Y.EMPTY_OBJECT,this._pixelsToCheck=e.pixelsToCheck,this._missingImagePixels=void 0,this._missingImageByteLength=void 0,this._isReady=!1;let t=Ze.createIfNeeded(e.missingImageUrl),n=this;function i(r){l(r.blob)&&(n._missingImageByteLength=r.blob.size);let s=Zm(r);if(e.disableCheckIfAllPixelsAreTransparent){let a=!0,c=r.width,d=e.pixelsToCheck;for(let u=0,h=d.length;a&&u<h;++u){let p=d[u],g=p.x*4+p.y*c;s[g+3]>0&&(a=!1)}a&&(s=void 0)}n._missingImagePixels=s,n._isReady=!0}function o(){n._missingImagePixels=void 0,n._isReady=!0}t.fetchImage({preferBlob:!0,preferImageBitmap:!0,flipY:!0}).then(i).catch(o)}H4.prototype.isReady=function(){return this._isReady};H4.prototype.shouldDiscardImage=function(e){let t=this._pixelsToCheck,n=this._missingImagePixels;if(!l(n)||l(e.blob)&&e.blob.size!==this._missingImageByteLength)return!1;let i=Zm(e),o=e.width;for(let r=0,s=t.length;r<s;++r){let a=t[r],c=a.x*4+a.y*o;for(let d=0;d<4;++d){let u=c+d;if(i[u]!==n[u])return!1}}return!0};var Rw=H4;var BTi=_(T(),1);function K4(){this.name=void 0,this.description=void 0,this.position=void 0,this.data=void 0,this.imageryLayer=void 0}K4.prototype.configureNameFromProperties=function(e){let t=10,n;for(let i in e)if(e.hasOwnProperty(i)&&e[i]){let o=i.toLowerCase();t>1&&o==="name"?(t=1,n=i):t>2&&o==="title"?(t=2,n=i):t>3&&/name/i.test(i)?(t=3,n=i):t>4&&/title/i.test(i)&&(t=4,n=i)}l(n)&&(this.name=e[n])};K4.prototype.configureDescriptionFromProperties=function(e){function t(n){let i='<table class="cesium-infoBox-defaultTable">';for(let o in n)if(n.hasOwnProperty(o)){let r=n[o];l(r)&&(typeof r=="object"?i+=`<tr><td>${o}</td><td>${t(r)}</td></tr>`:i+=`<tr><td>${o}</td><td>${r}</td></tr>`)}return i+="</table>",i}this.description=t(e)};var Fh=K4;var JTi=_(T(),1);function NV(){pe.throwInstantiationError()}Object.defineProperties(NV.prototype,{rectangle:{get:pe.throwInstantiationError},tileWidth:{get:pe.throwInstantiationError},tileHeight:{get:pe.throwInstantiationError},maximumLevel:{get:pe.throwInstantiationError},minimumLevel:{get:pe.throwInstantiationError},tilingScheme:{get:pe.throwInstantiationError},tileDiscardPolicy:{get:pe.throwInstantiationError},errorEvent:{get:pe.throwInstantiationError},credit:{get:pe.throwInstantiationError},proxy:{get:pe.throwInstantiationError},hasAlphaChannel:{get:pe.throwInstantiationError}});NV.prototype.getTileCredits=function(e,t,n){pe.throwInstantiationError()};NV.prototype.requestImage=function(e,t,n,i){pe.throwInstantiationError()};NV.prototype.pickFeatures=function(e,t,n,i,o){pe.throwInstantiationError()};var gst=/\.ktx2$/i;NV.loadImage=function(e,t){let n=Ze.createIfNeeded(t);return gst.test(n.url)?Zl(n):l(e)&&l(e.tileDiscardPolicy)?n.fetchImage({preferBlob:!0,preferImageBitmap:!0,flipY:!0}):n.fetchImage({preferImageBitmap:!0,flipY:!0})};var pl=NV;var jTi=_(T(),1),yst={SATELLITE:1,OCEANS:2,HILLSHADE:3},Ah=Object.freeze(yst);function pge(e){this.useTiles=e.usePreCachedTilesIfAvailable??!0;let t=e.ellipsoid;this.tilingScheme=e.tilingScheme??new Hi({ellipsoid:t}),this.rectangle=e.rectangle??this.tilingScheme.rectangle,this.ellipsoid=t;let n=e.credit;typeof n=="string"&&(n=new Ct(n)),this.credit=n,this.tileCredits=void 0,this.tileDiscardPolicy=e.tileDiscardPolicy,this.tileWidth=e.tileWidth??256,this.tileHeight=e.tileHeight??256,this.maximumLevel=e.maximumLevel}pge.prototype.build=function(e){e._useTiles=this.useTiles,e._tilingScheme=this.tilingScheme,e._rectangle=this.rectangle,e._credit=this.credit,e._tileCredits=this.tileCredits,e._tileDiscardPolicy=this.tileDiscardPolicy,e._tileWidth=this.tileWidth,e._tileHeight=this.tileHeight,e._maximumLevel=this.maximumLevel,this.useTiles&&!l(this.tileDiscardPolicy)&&(e._tileDiscardPolicy=new Rw({missingImageUrl:bge(e,0,0,this.maximumLevel).url,pixelsToCheck:[new U(0,0),new U(200,20),new U(20,200),new U(80,110),new U(160,130)],disableCheckIfAllPixelsAreTransparent:!0}))};function xst(e,t){let n=e.tileInfo;if(!l(n))t.useTiles=!1;else{if(t.tileWidth=n.rows,t.tileHeight=n.cols,n.spatialReference.wkid===102100||n.spatialReference.wkid===102113)t.tilingScheme=new rs({ellipsoid:t.ellipsoid});else if(e.tileInfo.spatialReference.wkid===4326)t.tilingScheme=new Hi({ellipsoid:t.ellipsoid});else{let i=`Tile spatial reference WKID ${e.tileInfo.spatialReference.wkid} is not supported.`;throw new ae(i)}if(t.maximumLevel=e.tileInfo.lods.length-1,l(e.fullExtent)){if(l(e.fullExtent.spatialReference)&&l(e.fullExtent.spatialReference.wkid))if(e.fullExtent.spatialReference.wkid===102100||e.fullExtent.spatialReference.wkid===102113){let i=new Xi,o=e.fullExtent,r=i.unproject(new m(Math.max(o.xmin,-t.tilingScheme.ellipsoid.maximumRadius*Math.PI),Math.max(o.ymin,-t.tilingScheme.ellipsoid.maximumRadius*Math.PI),0)),s=i.unproject(new m(Math.min(o.xmax,t.tilingScheme.ellipsoid.maximumRadius*Math.PI),Math.min(o.ymax,t.tilingScheme.ellipsoid.maximumRadius*Math.PI),0));t.rectangle=new ce(r.longitude,r.latitude,s.longitude,s.latitude)}else if(e.fullExtent.spatialReference.wkid===4326)t.rectangle=ce.fromDegrees(e.fullExtent.xmin,e.fullExtent.ymin,e.fullExtent.xmax,e.fullExtent.ymax);else{let i=`fullExtent.spatialReference WKID ${e.fullExtent.spatialReference.wkid} is not supported.`;throw new ae(i)}}else t.rectangle=t.tilingScheme.rectangle;t.useTiles=!0}l(e.copyrightText)&&e.copyrightText.length>0&&(l(t.credit)?t.tileCredits=[new Ct(e.copyrightText)]:t.credit=new Ct(e.copyrightText))}function _st(e,t){let n=`An error occurred while accessing ${e.url}`;throw l(t)&&l(t.message)&&(n+=`: ${t.message}`),new ae(n)}async function Tst(e,t){let n=e.getDerivedResource({queryParameters:{f:"json"}});try{let i=await n.fetchJson();xst(i,t)}catch(i){_st(e,i)}}function ep(e){e=e??Y.EMPTY_OBJECT,this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this._tileDiscardPolicy=e.tileDiscardPolicy,this._tileWidth=e.tileWidth??256,this._tileHeight=e.tileHeight??256,this._maximumLevel=e.maximumLevel,this._tilingScheme=e.tilingScheme??new Hi({ellipsoid:e.ellipsoid}),this._useTiles=e.usePreCachedTilesIfAvailable??!0,this._rectangle=e.rectangle??this._tilingScheme.rectangle,this._layers=e.layers,this._credit=e.credit,this._tileCredits=void 0;let t=e.credit;typeof t=="string"&&(t=new Ct(t)),this.enablePickFeatures=e.enablePickFeatures??!0,this._errorEvent=new be}ep.fromBasemapType=async function(e,t){t=t??Y.EMPTY_OBJECT;let n,i,o;switch(e){case Ah.SATELLITE:{n=t.token??jd.defaultAccessToken,i=Ze.createIfNeeded(jd.defaultWorldImageryServer),i.appendForwardSlash();let r=jd.getDefaultTokenCredit(n);l(r)&&(o=Ct.clone(r))}break;case Ah.OCEANS:{n=t.token??jd.defaultAccessToken,i=Ze.createIfNeeded(jd.defaultWorldOceanServer),i.appendForwardSlash();let r=jd.getDefaultTokenCredit(n);l(r)&&(o=Ct.clone(r))}break;case Ah.HILLSHADE:{n=t.token??jd.defaultAccessToken,i=Ze.createIfNeeded(jd.defaultWorldHillshadeServer),i.appendForwardSlash();let r=jd.getDefaultTokenCredit(n);l(r)&&(o=Ct.clone(r))}break;default:}return ep.fromUrl(i,{...t,token:n,credit:o,usePreCachedTilesIfAvailable:!0})};function bge(e,t,n,i,o){let r;if(e._useTiles)r=e._resource.getDerivedResource({url:`tile/${i}/${n}/${t}`,request:o});else{let s=e._tilingScheme.tileXYToNativeRectangle(t,n,i),c={bbox:`${s.west},${s.south},${s.east},${s.north}`,size:`${e._tileWidth},${e._tileHeight}`,format:"png32",transparent:!0,f:"image"};e._tilingScheme.projection instanceof Ei?(c.bboxSR=4326,c.imageSR=4326):(c.bboxSR=3857,c.imageSR=3857),e.layers&&(c.layers=`show:${e.layers}`),r=e._resource.getDerivedResource({url:"export",request:o,queryParameters:c})}return r}Object.defineProperties(ep.prototype,{url:{get:function(){return this._resource._url}},token:{get:function(){return this._resource.queryParameters.token}},proxy:{get:function(){return this._resource.proxy}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){return this._maximumLevel}},minimumLevel:{get:function(){return 0}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._rectangle}},tileDiscardPolicy:{get:function(){return this._tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},usingPrecachedTiles:{get:function(){return this._useTiles}},hasAlphaChannel:{get:function(){return!0}},layers:{get:function(){return this._layers}}});ep.fromUrl=async function(e,t){t=t??Y.EMPTY_OBJECT;let n=Ze.createIfNeeded(e);n.appendForwardSlash(),l(t.token)&&n.setQueryParameters({token:t.token});let i=new ep(t);i._resource=n;let o=new pge(t);return(t.usePreCachedTilesIfAvailable??!0)&&await Tst(n,o),o.build(i),i};ep.prototype.getTileCredits=function(e,t,n){return this._tileCredits};ep.prototype.requestImage=function(e,t,n,i){return pl.loadImage(this,bge(this,e,t,n,i))};ep.prototype.pickFeatures=function(e,t,n,i,o){if(!this.enablePickFeatures)return;let r=this._tilingScheme.tileXYToNativeRectangle(e,t,n),s,a,c;if(this._tilingScheme.projection instanceof Ei)s=X.toDegrees(i),a=X.toDegrees(o),c="4326";else{let p=this._tilingScheme.projection.project(new he(i,o,0));s=p.x,a=p.y,c="3857"}let d="visible";l(this._layers)&&(d+=`:${this._layers}`);let u={f:"json",tolerance:2,geometryType:"esriGeometryPoint",geometry:`${s},${a}`,mapExtent:`${r.west},${r.south},${r.east},${r.north}`,imageDisplay:`${this._tileWidth},${this._tileHeight},96`,sr:c,layers:d};return this._resource.getDerivedResource({url:"identify",queryParameters:u}).fetchJson().then(function(p){let g=[],f=p.results;if(!l(f))return g;for(let y=0;y<f.length;++y){let x=f[y],S=new Fh;if(S.data=x,S.name=x.value,S.properties=x.attributes,S.configureDescriptionFromProperties(x.attributes),x.geometryType==="esriGeometryPoint"&&x.geometry){let C=x.geometry.spatialReference&&x.geometry.spatialReference.wkid?x.geometry.spatialReference.wkid:4326;if(C===4326||C===4283)S.position=he.fromDegrees(x.geometry.x,x.geometry.y,x.geometry.z);else if(C===102100||C===900913||C===3857){let V=new Xi;S.position=V.unproject(new m(x.geometry.x,x.geometry.y,x.geometry.z))}}g.push(S)}return g})};ep._metadataCache={};var l0=ep;var kSi=_(T(),1);var TSi=_(T(),1),Sst={AERIAL:"Aerial",AERIAL_WITH_LABELS:"AerialWithLabels",AERIAL_WITH_LABELS_ON_DEMAND:"AerialWithLabelsOnDemand",ROAD:"Road",ROAD_ON_DEMAND:"RoadOnDemand",CANVAS_DARK:"CanvasDark",CANVAS_LIGHT:"CanvasLight",CANVAS_GRAY:"CanvasGray",ORDNANCE_SURVEY:"OrdnanceSurvey",COLLINS_BART:"CollinsBart"},kV=Object.freeze(Sst);var VSi=_(T(),1);function Zw(e){}Zw.prototype.isReady=function(){return!0};Zw.prototype.shouldDiscardImage=function(e){return Zw.EMPTY_IMAGE===e};var ED;Object.defineProperties(Zw,{EMPTY_IMAGE:{get:function(){return l(ED)||(ED=new Image,ED.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="),ED}}});var UV=Zw;function gge(e){this.tileWidth=void 0,this.tileHeight=void 0,this.maximumLevel=void 0,this.imageUrlSubdomains=void 0,this.imageUrlTemplate=void 0,this.attributionList=void 0}gge.prototype.build=function(e){e._tileWidth=this.tileWidth,e._tileHeight=this.tileHeight,e._maximumLevel=this.maximumLevel,e._imageUrlSubdomains=this.imageUrlSubdomains,e._imageUrlTemplate=this.imageUrlTemplate;let t=e._attributionList=this.attributionList;t||(t=[]),e._attributionList=t;for(let n=0,i=t.length;n<i;++n){let o=t[n];if(o.credit instanceof Ct)break;o.credit=new Ct(o.attribution);let r=o.coverageAreas;for(let s=0,a=o.coverageAreas.length;s<a;++s){let c=r[s],d=c.bbox;c.bbox=new ce(X.toRadians(d[1]),X.toRadians(d[0]),X.toRadians(d[3]),X.toRadians(d[2]))}}};function Cst(e,t){if(e.resourceSets.length!==1)throw new ae("metadata does not specify one resource in resourceSets");let n=e.resourceSets[0].resources[0];t.tileWidth=n.imageWidth,t.tileHeight=n.imageHeight,t.maximumLevel=n.zoomMax-1,t.imageUrlSubdomains=n.imageUrlSubdomains,t.imageUrlTemplate=n.imageUrl;let i=n.imageryProviders;l(n.imageryProviders)&&(i=n.imageryProviders.filter(o=>o.coverageAreas?.some(r=>l(r.bbox)))),t.attributionList=i}function Vst(e,t,n){let i=`An error occurred while accessing ${e.url}`;throw l(t)&&l(t.message)&&(i+=`: ${t.message}`),Zo.reportError(void 0,n,l(n)?n._errorEvent:void 0,i,void 0,void 0,void 0,t),new ae(i)}async function Lst(e,t,n){let i=e.url,o=Ps._metadataCache[i];l(o)||(o=e.fetchJsonp("jsonp"),Ps._metadataCache[i]=o);try{let r=await o;return Cst(r,t)}catch(r){Vst(e,r,n)}}function Ps(e){e=e??Y.EMPTY_OBJECT,this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=1,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this._mapStyle=e.mapStyle??kV.AERIAL,this._mapLayer=e.mapLayer,this._culture=e.culture??"",this._key=e.key,this._tileDiscardPolicy=e.tileDiscardPolicy,l(this._tileDiscardPolicy)||(this._tileDiscardPolicy=new UV),this._proxy=e.proxy,this._credit=new Ct(`<a href="https://www.microsoft.com/en-us/maps/bing-maps/product"><img src="${Ps.logoUrl}" title="Bing Imagery"/></a>`),this._tilingScheme=new rs({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:2,ellipsoid:e.ellipsoid}),this._tileWidth=void 0,this._tileHeight=void 0,this._maximumLevel=void 0,this._imageUrlTemplate=void 0,this._imageUrlSubdomains=void 0,this._attributionList=void 0,this._errorEvent=new be}Object.defineProperties(Ps.prototype,{url:{get:function(){return this._resource.url}},proxy:{get:function(){return this._resource.proxy}},key:{get:function(){return this._key}},mapStyle:{get:function(){return this._mapStyle}},mapLayer:{get:function(){return this._mapLayer}},culture:{get:function(){return this._culture}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){return this._maximumLevel}},minimumLevel:{get:function(){return 0}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){return this._tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},hasAlphaChannel:{get:function(){return l(this.mapLayer)}}});Ps.fromUrl=async function(e,t){t=t??Y.EMPTY_OBJECT;let n=t.tileProtocol;l(n)?n.length>0&&n[n.length-1]===":"&&(n=n.substr(0,n.length-1)):n=document.location.protocol==="http:"?"http":"https";let i=t.mapStyle??kV.AERIAL,o=Ze.createIfNeeded(e);o.appendForwardSlash();let r={incl:"ImageryProviders",key:t.key,uriScheme:n};l(t.mapLayer)&&(r.mapLayer=t.mapLayer),l(t.culture)&&(r.culture=t.culture);let s=o.getDerivedResource({url:`REST/v1/Imagery/Metadata/${i}`,queryParameters:r}),a=new Ps(t);a._resource=o;let c=new gge(t);return await Lst(s,c),c.build(a),a};var Rst=new ce;Ps.prototype.getTileCredits=function(e,t,n){let i=this._tilingScheme.tileXYToRectangle(e,t,n,Rst);return Est(this._attributionList,n,i)};Ps.prototype.requestImage=function(e,t,n,i){let o=pl.loadImage(this,Zst(this,e,t,n,i));if(l(o))return o.catch(function(r){return l(r.blob)&&r.blob.size===0?UV.EMPTY_IMAGE:Promise.reject(r)})};Ps.prototype.pickFeatures=function(e,t,n,i,o){};Ps.tileXYToQuadKey=function(e,t,n){let i="";for(let o=n;o>=0;--o){let r=1<<o,s=0;(e&r)!==0&&(s|=1),(t&r)!==0&&(s|=2),i+=s}return i};Ps.quadKeyToTileXY=function(e){let t=0,n=0,i=e.length-1;for(let o=i;o>=0;--o){let r=1<<o,s=+e[i-o];(s&1)!==0&&(t|=r),(s&2)!==0&&(n|=r)}return{x:t,y:n,level:i}};Ps._logoUrl=void 0;Object.defineProperties(Ps,{logoUrl:{get:function(){return l(Ps._logoUrl)||(Ps._logoUrl=nn("Assets/Images/bing_maps_credit.png")),Ps._logoUrl},set:function(e){Ps._logoUrl=e}}});function Zst(e,t,n,i,o){let r=e._imageUrlTemplate,s=e._imageUrlSubdomains,a=(t+n+i)%s.length;return e._resource.getDerivedResource({url:r,request:o,templateValues:{quadkey:Ps.tileXYToQuadKey(t,n,i),subdomain:s[a],culture:e._culture},queryParameters:{n:"z"}})}var Gst=new ce;function Est(e,t,n){++t;let i=[];for(let o=0,r=e.length;o<r;++o){let s=e[o],a=s.coverageAreas,c=!1;for(let d=0,u=s.coverageAreas.length;!c&&d<u;++d){let h=a[d];if(t>=h.zoomMin&&t<=h.zoomMax){let p=ce.intersection(n,h.bbox,Gst);l(p)&&(c=!0)}}c&&i.push(s.credit)}return i}Ps._metadataCache={};var Gw=Ps;var gCi=_(T(),1);var nCi=_(T(),1);var yge=/{[^}]+}/g,xge={x:Pst,y:wst,z:Mst,s:Nst,reverseX:vst,reverseY:Fst,reverseZ:Ast,westDegrees:kst,southDegrees:Ust,eastDegrees:Dst,northDegrees:Bst,westProjected:Ost,southProjected:Yst,eastProjected:zst,northProjected:Hst,width:Kst,height:Jst},Ist=St(xge,{i:Qst,j:jst,reverseI:qst,reverseJ:$st,longitudeDegrees:tat,latitudeDegrees:nat,longitudeProjected:iat,latitudeProjected:oat,format:sat});function Ew(e){e=e??Y.EMPTY_OBJECT,this._errorEvent=new be;let t=Ze.createIfNeeded(e.url),n=Ze.createIfNeeded(e.pickFeaturesUrl);this._resource=t,this._urlSchemeZeroPadding=e.urlSchemeZeroPadding,this._getFeatureInfoFormats=e.getFeatureInfoFormats,this._pickFeaturesResource=n;let i=e.subdomains;Array.isArray(i)?i=i.slice():l(i)&&i.length>0?i=i.split(""):i=["a","b","c"],this._subdomains=i,this._tileWidth=e.tileWidth??256,this._tileHeight=e.tileHeight??256,this._minimumLevel=e.minimumLevel??0,this._maximumLevel=e.maximumLevel,this._tilingScheme=e.tilingScheme??new rs({ellipsoid:e.ellipsoid}),this._rectangle=e.rectangle??this._tilingScheme.rectangle,this._rectangle=ce.intersection(this._rectangle,this._tilingScheme.rectangle),this._tileDiscardPolicy=e.tileDiscardPolicy;let o=e.credit;typeof o=="string"&&(o=new Ct(o)),this._credit=o,this._hasAlphaChannel=e.hasAlphaChannel??!0;let r=e.customTags,s=St(xge,r),a=St(Ist,r);this._tags=s,this._pickFeaturesTags=a,this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this.enablePickFeatures=e.enablePickFeatures??!0}Object.defineProperties(Ew.prototype,{url:{get:function(){return this._resource.url}},urlSchemeZeroPadding:{get:function(){return this._urlSchemeZeroPadding}},pickFeaturesUrl:{get:function(){return this._pickFeaturesResource.url}},proxy:{get:function(){return this._resource.proxy}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){return this._maximumLevel}},minimumLevel:{get:function(){return this._minimumLevel}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._rectangle}},tileDiscardPolicy:{get:function(){return this._tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},hasAlphaChannel:{get:function(){return this._hasAlphaChannel}}});Ew.prototype.getTileCredits=function(e,t,n){};Ew.prototype.requestImage=function(e,t,n,i){return pl.loadImage(this,Xst(this,e,t,n,i))};Ew.prototype.pickFeatures=function(e,t,n,i,o){if(!this.enablePickFeatures||!l(this._pickFeaturesResource)||this._getFeatureInfoFormats.length===0)return;let r=0,s=this;function a(d,u){return d.callback(u)}function c(){if(r>=s._getFeatureInfoFormats.length)return Promise.resolve([]);let d=s._getFeatureInfoFormats[r],u=Wst(s,e,t,n,i,o,d.format);return++r,d.type==="json"?u.fetchJson().then(d.callback).catch(c):d.type==="xml"?u.fetchXML().then(d.callback).catch(c):d.type==="text"||d.type==="html"?u.fetchText().then(d.callback).catch(c):u.fetch({responseType:d.format}).then(a.bind(void 0,d)).catch(c)}return c()};var ID=!1,qd=new ce,XD=!1,Iw=new ce;function Xst(e,t,n,i,o){ID=!1,XD=!1;let r=e._resource,s=r.getUrlComponent(!0),a=e._tags,c={},d=s.match(yge);return l(d)&&d.forEach(function(u){let h=u.substring(1,u.length-1);l(a[h])&&(c[h]=a[h](e,t,n,i))}),r.getDerivedResource({request:o,templateValues:c})}var J4=!1,BV=new U,Q4=!1;function Wst(e,t,n,i,o,r,s){ID=!1,XD=!1,J4=!1,Q4=!1;let a=e._pickFeaturesResource,c=a.getUrlComponent(!0),d=e._pickFeaturesTags,u={},h=c.match(yge);return l(h)&&h.forEach(function(p){let g=p.substring(1,p.length-1);l(d[g])&&(u[g]=d[g](e,t,n,i,o,r,s))}),a.getDerivedResource({templateValues:u})}function OV(e,t,n){if(e&&e.urlSchemeZeroPadding&&e.urlSchemeZeroPadding.hasOwnProperty(t)){let i=e.urlSchemeZeroPadding[t];if(typeof i=="string"){let o=i.length;o>1&&(n=n.length>=o?n:new Array(o-n.toString().length+1).join("0")+n)}}return n}function Pst(e,t,n,i){return OV(e,"{x}",t)}function vst(e,t,n,i){let o=e.tilingScheme.getNumberOfXTilesAtLevel(i)-t-1;return OV(e,"{reverseX}",o)}function wst(e,t,n,i){return OV(e,"{y}",n)}function Fst(e,t,n,i){let o=e.tilingScheme.getNumberOfYTilesAtLevel(i)-n-1;return OV(e,"{reverseY}",o)}function Ast(e,t,n,i){let o=e.maximumLevel,r=l(o)&&i<o?o-i-1:i;return OV(e,"{reverseZ}",r)}function Mst(e,t,n,i){return OV(e,"{z}",i)}function Nst(e,t,n,i){let o=(t+n+i)%e._subdomains.length;return e._subdomains[o]}function WD(e,t,n,i){ID||(e.tilingScheme.tileXYToRectangle(t,n,i,qd),qd.west=X.toDegrees(qd.west),qd.south=X.toDegrees(qd.south),qd.east=X.toDegrees(qd.east),qd.north=X.toDegrees(qd.north),ID=!0)}function kst(e,t,n,i){return WD(e,t,n,i),qd.west}function Ust(e,t,n,i){return WD(e,t,n,i),qd.south}function Dst(e,t,n,i){return WD(e,t,n,i),qd.east}function Bst(e,t,n,i){return WD(e,t,n,i),qd.north}function PD(e,t,n,i){XD||(e.tilingScheme.tileXYToNativeRectangle(t,n,i,Iw),XD=!0)}function Ost(e,t,n,i){return PD(e,t,n,i),Iw.west}function Yst(e,t,n,i){return PD(e,t,n,i),Iw.south}function zst(e,t,n,i){return PD(e,t,n,i),Iw.east}function Hst(e,t,n,i){return PD(e,t,n,i),Iw.north}function Kst(e,t,n,i){return e.tileWidth}function Jst(e,t,n,i){return e.tileHeight}function Qst(e,t,n,i,o,r,s){return vD(e,t,n,i,o,r),BV.x}function jst(e,t,n,i,o,r,s){return vD(e,t,n,i,o,r),BV.y}function qst(e,t,n,i,o,r,s){return vD(e,t,n,i,o,r),e.tileWidth-BV.x-1}function $st(e,t,n,i,o,r,s){return vD(e,t,n,i,o,r),e.tileHeight-BV.y-1}var eat=new ce,DV=new m;function vD(e,t,n,i,o,r,s){if(J4)return;j4(e,t,n,i,o,r);let a=DV,c=e.tilingScheme.tileXYToNativeRectangle(t,n,i,eat);BV.x=e.tileWidth*(a.x-c.west)/c.width|0,BV.y=e.tileHeight*(c.north-a.y)/c.height|0,J4=!0}function tat(e,t,n,i,o,r,s){return X.toDegrees(o)}function nat(e,t,n,i,o,r,s){return X.toDegrees(r)}function iat(e,t,n,i,o,r,s){return j4(e,t,n,i,o,r),DV.x}function oat(e,t,n,i,o,r,s){return j4(e,t,n,i,o,r),DV.y}var rat=new he;function j4(e,t,n,i,o,r,s){if(!Q4){if(e.tilingScheme.projection instanceof Ei)DV.x=X.toDegrees(o),DV.y=X.toDegrees(r);else{let a=rat;a.longitude=o,a.latitude=r,e.tilingScheme.projection.project(a,DV)}Q4=!0}}function sat(e,t,n,i,o,r,s){return s}var Ya=Ew;function hm(e){Ya.call(this,e)}hm._requestMetadata=async function(e,t,n,i){try{let o=await n.fetchXML();return hm._metadataSuccess(o,e,t,n,i)}catch(o){if(o instanceof tf)return hm._metadataFailure(e,t);throw o}};hm.fromUrl=async function(e,t){let n=Ze.createIfNeeded(e);n.appendForwardSlash();let i=n,o=n.getDerivedResource({url:"tilemapresource.xml"});t=t??Y.EMPTY_OBJECT;let r=await hm._requestMetadata(t,i,o);return new hm(r)};l(Object.create)&&(hm.prototype=Object.create(Ya.prototype),hm.prototype.constructor=hm);function _ge(e,t){return e.west<t.rectangle.west&&(e.west=t.rectangle.west),e.east>t.rectangle.east&&(e.east=t.rectangle.east),e.south<t.rectangle.south&&(e.south=t.rectangle.south),e.north>t.rectangle.north&&(e.north=t.rectangle.north),e}function Tge(e,t,n){let i=e.positionToTileXY(ce.southwest(t),n),o=e.positionToTileXY(ce.northeast(t),n);return(Math.abs(o.x-i.x)+1)*(Math.abs(o.y-i.y)+1)>4?0:n}hm._metadataSuccess=function(e,t,n,i,o){let r=/tileformat/i,s=/tileset/i,a=/tilesets/i,c=/boundingbox/i,d,u,h,p=[],g=e.childNodes[0].childNodes;for(let W=0;W<g.length;W++)if(r.test(g.item(W).nodeName))d=g.item(W);else if(a.test(g.item(W).nodeName)){h=g.item(W);let v=g.item(W).childNodes;for(let A=0;A<v.length;A++)s.test(v.item(A).nodeName)&&p.push(v.item(A))}else c.test(g.item(W).nodeName)&&(u=g.item(W));let f;if(!l(h)||!l(u))throw f=`Unable to find expected tilesets or bbox attributes in ${i.url}.`,l(o)&&Zo.reportError(void 0,o,o.errorEvent,f),new ae(f);let y=t.fileExtension??d.getAttribute("extension"),x=t.tileWidth??parseInt(d.getAttribute("width"),10),S=t.tileHeight??parseInt(d.getAttribute("height"),10),C=t.minimumLevel??parseInt(p[0].getAttribute("order"),10),V=t.maximumLevel??parseInt(p[p.length-1].getAttribute("order"),10),L=h.getAttribute("profile"),Z=t.tilingScheme;if(!l(Z))if(L==="geodetic"||L==="global-geodetic")Z=new Hi({ellipsoid:t.ellipsoid});else if(L==="mercator"||L==="global-mercator")Z=new rs({ellipsoid:t.ellipsoid});else throw f=`${i.url} specifies an unsupported profile attribute, ${L}.`,l(o)&&Zo.reportError(void 0,o,o.errorEvent,f),new ae(f);let E=ce.clone(t.rectangle);if(!l(E)){let W,v,A,b;t.flipXY??!1?(A=new U(parseFloat(u.getAttribute("miny")),parseFloat(u.getAttribute("minx"))),b=new U(parseFloat(u.getAttribute("maxy")),parseFloat(u.getAttribute("maxx")))):(A=new U(parseFloat(u.getAttribute("minx")),parseFloat(u.getAttribute("miny"))),b=new U(parseFloat(u.getAttribute("maxx")),parseFloat(u.getAttribute("maxy"))));let G=L==="geodetic"||L==="mercator";if(Z.projection instanceof Ei||G)W=he.fromDegrees(A.x,A.y),v=he.fromDegrees(b.x,b.y);else{let I=Z.projection;W=I.unproject(A),v=I.unproject(b)}E=new ce(W.longitude,W.latitude,v.longitude,v.latitude)}return E=_ge(E,Z),C=Tge(Z,E,C),{url:n.getDerivedResource({url:`{z}/{x}/{reverseY}.${y}`}),tilingScheme:Z,rectangle:E,tileWidth:x,tileHeight:S,minimumLevel:C,maximumLevel:V,tileDiscardPolicy:t.tileDiscardPolicy,credit:t.credit}};hm._metadataFailure=function(e,t){let n=e.fileExtension??"png",i=e.tileWidth??256,o=e.tileHeight??256,r=e.maximumLevel,s=l(e.tilingScheme)?e.tilingScheme:new rs({ellipsoid:e.ellipsoid}),a=e.rectangle??s.rectangle;a=_ge(a,s);let c=Tge(s,a,e.minimumLevel);return{url:t.getDerivedResource({url:`{z}/{x}/{reverseY}.${n}`}),tilingScheme:s,rectangle:a,tileWidth:i,tileHeight:o,minimumLevel:c,maximumLevel:r,tileDiscardPolicy:e.tileDiscardPolicy,credit:e.credit}};var Ly=hm;var ICi=_(T(),1);function Sge(e){this.channel=e.channel,this.ellipsoid=e.ellipsoid,this.tilingScheme=void 0,this.version=void 0}Sge.prototype.build=function(e){e._channel=this.channel,e._version=this.version,e._tilingScheme=this.tilingScheme};function aat(e,t){let n;try{n=JSON.parse(e)}catch{n=JSON.parse(e.replace(/([\[\{,])[\n\r ]*([A-Za-z0-9]+)[\n\r ]*:/g,'$1"$2":'))}let i;for(let o=0;o<n.layers.length;o++)if(n.layers[o].id===t.channel){i=n.layers[o];break}if(!l(i)){let o=`Could not find layer with channel (id) of ${t.channel}.`;throw new ae(o)}if(!l(i.version)){let o=`Could not find a version in channel (id) ${t.channel}.`;throw new ae(o)}if(t.version=i.version,l(n.projection)&&n.projection==="flat")t.tilingScheme=new Hi({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:2,rectangle:new ce(-Math.PI,-Math.PI,Math.PI,Math.PI),ellipsoid:t.ellipsoid});else if(!l(n.projection)||n.projection==="mercator")t.tilingScheme=new rs({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:2,ellipsoid:t.ellipsoid});else{let o=`Unsupported projection ${n.projection}.`;throw new ae(o)}return!0}function cat(e,t,n){let i=`An error occurred while accessing ${t.url}.`;throw l(e)&&l(e.message)&&(i+=`: ${e.message}`),Zo.reportError(void 0,n,l(n)?n._errorEvent:void 0,i),new ae(i)}async function lat(e,t,n){try{let i=await e.fetchText();aat(i,t)}catch(i){cat(i,e,n)}}function ed(e){e=e??{},this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=1.9,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this._tileDiscardPolicy=e.tileDiscardPolicy,this._channel=e.channel,this._requestType="ImageryMaps",this._credit=new Ct(`<a href="http://www.google.com/enterprise/mapsearth/products/earthenterprise.html"><img src="${ed.logoUrl}" title="Google Imagery"/></a>`),this._tilingScheme=void 0,this._version=void 0,this._tileWidth=256,this._tileHeight=256,this._maximumLevel=e.maximumLevel,this._errorEvent=new be}Object.defineProperties(ed.prototype,{url:{get:function(){return this._url}},path:{get:function(){return this._path}},proxy:{get:function(){return this._resource.proxy}},channel:{get:function(){return this._channel}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){return this._maximumLevel}},minimumLevel:{get:function(){return 0}},tilingScheme:{get:function(){return this._tilingScheme}},version:{get:function(){return this._version}},requestType:{get:function(){return this._requestType}},rectangle:{get:function(){return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){return this._tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},hasAlphaChannel:{get:function(){return!0}}});ed.fromUrl=async function(e,t,n){n=n??{};let i=n.path??"/default_map",o=Ze.createIfNeeded(e).getDerivedResource({url:i[0]==="/"?i.substring(1):i});o.appendForwardSlash();let r=o.getDerivedResource({url:"query",queryParameters:{request:"Json",vars:"geeServerDefs",is2d:"t"}}),s=new Sge(n);s.channel=t,await lat(r,s);let a=new ed(n);return s.build(a),a._resource=o,a._url=e,a._path=i,a};ed.prototype.getTileCredits=function(e,t,n){};ed.prototype.requestImage=function(e,t,n,i){let o=this._resource.getDerivedResource({url:"query",request:i,queryParameters:{request:this._requestType,channel:this._channel,version:this._version,x:e,y:t,z:n+1}});return pl.loadImage(this,o)};ed.prototype.pickFeatures=function(e,t,n,i,o){};ed._logoUrl=void 0;Object.defineProperties(ed,{logoUrl:{get:function(){return l(ed._logoUrl)||(ed._logoUrl=nn("Assets/Images/google_earth_credit.png")),ed._logoUrl},set:function(e){ed._logoUrl=e}}});var Xw=ed;var ACi=_(T(),1);var dat=/\/$/,Cge=new Ct('© <a href="https://www.mapbox.com/about/maps/">Mapbox</a> © <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> <strong><a href="https://www.mapbox.com/map-feedback/">Improve this map</a></strong>');function YV(e){e=e??Y.EMPTY_OBJECT;let t=e.mapId,n=e.accessToken;this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0;let i=Ze.createIfNeeded(e.url??"https://{s}.tiles.mapbox.com/v4/");this._mapId=t,this._accessToken=n;let o=e.format??"png";/\./.test(o)||(o=`.${o}`),this._format=o;let r=i.getUrlComponent();dat.test(r)||(r+="/"),r+=`${t}/{z}/{x}/{y}${this._format}`,i.url=r,i.setQueryParameters({access_token:n});let s;l(e.credit)?(s=e.credit,typeof s=="string"&&(s=new Ct(s))):s=Cge,this._resource=i,this._imageryProvider=new Ya({url:i,credit:s,ellipsoid:e.ellipsoid,minimumLevel:e.minimumLevel,maximumLevel:e.maximumLevel,rectangle:e.rectangle})}Object.defineProperties(YV.prototype,{url:{get:function(){return this._imageryProvider.url}},rectangle:{get:function(){return this._imageryProvider.rectangle}},tileWidth:{get:function(){return this._imageryProvider.tileWidth}},tileHeight:{get:function(){return this._imageryProvider.tileHeight}},maximumLevel:{get:function(){return this._imageryProvider.maximumLevel}},minimumLevel:{get:function(){return this._imageryProvider.minimumLevel}},tilingScheme:{get:function(){return this._imageryProvider.tilingScheme}},tileDiscardPolicy:{get:function(){return this._imageryProvider.tileDiscardPolicy}},errorEvent:{get:function(){return this._imageryProvider.errorEvent}},credit:{get:function(){return this._imageryProvider.credit}},proxy:{get:function(){return this._imageryProvider.proxy}},hasAlphaChannel:{get:function(){return this._imageryProvider.hasAlphaChannel}}});YV.prototype.getTileCredits=function(e,t,n){};YV.prototype.requestImage=function(e,t,n,i){return this._imageryProvider.requestImage(e,t,n,i)};YV.prototype.pickFeatures=function(e,t,n,i,o){return this._imageryProvider.pickFeatures(e,t,n,i,o)};YV._defaultCredit=Cge;var Ww=YV;var JCi=_(T(),1);function wT(e){e=e??Y.EMPTY_OBJECT,this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0;let t=e.rectangle??ce.MAX_VALUE,n=new Hi({rectangle:t,numberOfLevelZeroTilesX:1,numberOfLevelZeroTilesY:1,ellipsoid:e.ellipsoid});this._tilingScheme=n,this._image=void 0,this._texture=void 0,this._hasError=!1,this._errorEvent=new be;let i=e.credit;typeof i=="string"&&(i=new Ct(i)),this._credit=i;let o=Ze.createIfNeeded(e.url);this._resource=o,this._tileWidth=e.tileWidth,this._tileHeight=e.tileHeight}Object.defineProperties(wT.prototype,{url:{get:function(){return this._resource.url}},proxy:{get:function(){return this._resource.proxy}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){return 0}},minimumLevel:{get:function(){return 0}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},hasAlphaChannel:{get:function(){return!0}}});function uat(e,t,n,i){let o=`Failed to load image ${e.url}`;l(t)&&l(t.message)&&(o+=`: ${t.message}`);let r=Zo.reportError(i,n,l(n)?n._errorEvent:void 0,o,0,0,0,t);if(r.retry)return q4(e,n,r);throw l(n)&&(n._hasError=!0),new ae(o)}async function q4(e,t,n){try{return await pl.loadImage(null,e)}catch(i){return uat(e,i,t,n)}}wT.fromUrl=async function(e,t){let n=Ze.createIfNeeded(e),i=await q4(n);t=t??Y.EMPTY_OBJECT;let o=new wT({...t,url:e,tileWidth:i.width,tileHeight:i.height});return o._image=i,o};wT.prototype.getTileCredits=function(e,t,n){};wT.prototype.requestImage=async function(e,t,n,i){if(!this._hasError&&!l(this._image)){let o=await q4(this._resource,this);return this._image=o,Zo.reportSuccess(this._errorEvent),o}return this._image};wT.prototype.pickFeatures=function(e,t,n,i,o){};var Pw=wT;var x1i=_(T(),1);var t1i=_(T(),1);function mat(e,t,n){this.type=e,l(t)||(e==="json"?t="application/json":e==="xml"?t="text/xml":e==="html"?t="text/html":e==="text"&&(t="text/plain")),this.format=t,l(n)||(e==="json"?n=hat:e==="xml"?n=gat:(e==="html"||e==="text")&&(n=Vge)),this.callback=n}function hat(e){let t=[],n=e.features;for(let i=0;i<n.length;++i){let o=n[i],r=new Fh;if(r.data=o,r.properties=o.properties,r.configureNameFromProperties(o.properties),r.configureDescriptionFromProperties(o.properties),l(o.geometry)&&o.geometry.type==="Point"){let s=o.geometry.coordinates[0],a=o.geometry.coordinates[1];r.position=he.fromDegrees(s,a)}t.push(r)}return t}var $4="http://www.mapinfo.com/mxp",fat="http://www.esri.com/wms",pat="http://www.opengis.net/wfs",bat="http://www.opengis.net/gml";function gat(e){let t=e.documentElement;if(t.localName==="MultiFeatureCollection"&&t.namespaceURI===$4)return yat(e);if(t.localName==="FeatureInfoResponse"&&t.namespaceURI===fat)return xat(e);if(t.localName==="FeatureCollection"&&t.namespaceURI===pat)return _at(e);if(t.localName==="ServiceExceptionReport")throw new ae(new XMLSerializer().serializeToString(t));return t.localName==="msGMLOutput"?Tat(e):Sat(e)}function yat(e){let t=[],i=e.documentElement.getElementsByTagNameNS($4,"Feature");for(let o=0;o<i.length;++o){let r=i[o],s={},a=r.getElementsByTagNameNS($4,"Val");for(let d=0;d<a.length;++d){let u=a[d];if(u.hasAttribute("ref")){let h=u.getAttribute("ref"),p=u.textContent.trim();s[h]=p}}let c=new Fh;c.data=r,c.properties=s,c.configureNameFromProperties(s),c.configureDescriptionFromProperties(s),t.push(c)}return t}function xat(e){let t=e.documentElement,n=[],i,o=t.getElementsByTagNameNS("*","FIELDS");if(o.length>0)for(let r=0;r<o.length;++r){let s=o[r];i={};let a=s.attributes;for(let c=0;c<a.length;++c){let d=a[c];i[d.name]=d.value}n.push(wD(s,i))}else{let r=t.getElementsByTagNameNS("*","FeatureInfo");for(let s=0;s<r.length;++s){let a=r[s];i={};let c=a.childNodes;for(let d=0;d<c.length;++d){let u=c[d];u.nodeType===Node.ELEMENT_NODE&&(i[u.localName]=u.textContent)}n.push(wD(a,i))}}return n}function _at(e){let t=[],i=e.documentElement.getElementsByTagNameNS(bat,"featureMember");for(let o=0;o<i.length;++o){let r=i[o],s={};ej(r,s),t.push(wD(r,s))}return t}function Tat(e){let t=[],n,i=e.documentElement.childNodes;for(let r=0;r<i.length;r++)if(i[r].nodeType===Node.ELEMENT_NODE){n=i[r];break}if(!l(n))throw new ae("Unable to find first child of the feature info xml document");let o=n.childNodes;for(let r=0;r<o.length;++r){let s=o[r];if(s.nodeType===Node.ELEMENT_NODE){let a={};ej(s,a),t.push(wD(s,a))}}return t}function ej(e,t){let n=!0;for(let i=0;i<e.childNodes.length;++i){let o=e.childNodes[i];o.nodeType===Node.ELEMENT_NODE&&(n=!1),!(o.localName==="Point"||o.localName==="LineString"||o.localName==="Polygon"||o.localName==="boundedBy")&&o.hasChildNodes()&&ej(o,t)&&(t[o.localName]=o.textContent)}return n}function wD(e,t){let n=new Fh;return n.data=e,n.properties=t,n.configureNameFromProperties(t),n.configureDescriptionFromProperties(t),n}function Sat(e){let t=new XMLSerializer().serializeToString(e),n=document.createElement("div"),i=document.createElement("pre");i.textContent=t,n.appendChild(i);let o=new Fh;return o.data=e,o.description=n.innerHTML,[o]}var Cat=/<body>\s*<\/body>/im,Vat=/<ServiceExceptionReport([\s\S]*)<\/ServiceExceptionReport>/im,Lat=/<title>([\s\S]*)<\/title>/im;function Vge(e){if(Cat.test(e)||Vat.test(e))return;let t,n=Lat.exec(e);n&&n.length>1&&(t=n[1]);let i=new Fh;return i.name=t,i.description=e,i.data=e,[i]}var FT=mat;var c1i=_(T(),1);function vw(e){e=e??Y.EMPTY_OBJECT,this._tileCache={},this._tilesRequestedForInterval=[];let t=this._clock=e.clock;this._times=e.times,this._requestImageFunction=e.requestImageFunction,this._reloadFunction=e.reloadFunction,this._currentIntervalIndex=-1,t.onTick.addEventListener(this._clockOnTick,this),this._clockOnTick(t)}Object.defineProperties(vw.prototype,{clock:{get:function(){return this._clock},set:function(e){this._clock!==e&&(this._clock=e,this._clockOnTick(e),this._reloadFunction())}},times:{get:function(){return this._times},set:function(e){this._times!==e&&(this._times=e,this._clockOnTick(this._clock),this._reloadFunction())}},currentInterval:{get:function(){return this._times.get(this._currentIntervalIndex)}}});vw.prototype.getFromCache=function(e,t,n,i){let o=Lge(e,t,n),r,s=this._tileCache[this._currentIntervalIndex];if(l(s)&&l(s[o])){let a=s[o];r=a.promise.catch(function(c){throw i.state=a.request.state,c}),delete s[o]}return r};vw.prototype.checkApproachingInterval=function(e,t,n,i){let o=Lge(e,t,n),r=this._tilesRequestedForInterval,s=Rge(this),a={key:o,priorityFunction:i.priorityFunction};(!l(s)||!Zge(this,a,s))&&r.push(a),r.length>=512&&r.splice(0,256)};vw.prototype._clockOnTick=function(e){let t=e.currentTime,i=this._times.indexOf(t),o=this._currentIntervalIndex;if(i!==o){let s=this._tileCache[o];for(let a in s)s.hasOwnProperty(a)&&s[a].request.cancel();delete this._tileCache[o],this._tilesRequestedForInterval=[],this._currentIntervalIndex=i,this._reloadFunction();return}let r=Rge(this);if(l(r)){let s=this._tilesRequestedForInterval,a=!0;for(;a&&s.length!==0;){let c=s.pop();a=Zge(this,c,r),a||s.push(c)}}};function Lge(e,t,n){return`${e}-${t}-${n}`}function Rat(e){let t=e.split("-");if(t.length===3)return{x:Number(t[0]),y:Number(t[1]),level:Number(t[2])}}function Rge(e){let t=e._times;if(!l(t))return;let n=e._clock,i=n.currentTime,o=n.canAnimate&&n.shouldAnimate,r=n.multiplier;if(!o&&r!==0)return;let s,a=t.indexOf(i);if(a<0)return;let c=t.get(a);return r>0?(s=q.secondsDifference(c.stop,i),++a):(s=q.secondsDifference(c.start,i),--a),s/=r,a>=0&&s<=5?t.get(a):void 0}function Zge(e,t,n){let i=e._times.indexOf(n.start),o=e._tileCache,r=o[i];l(r)||(r=o[i]={});let s=t.key;if(l(r[s]))return!0;let a=Rat(s),c=new zo({throttle:!1,throttleByServer:!0,type:ds.IMAGERY,priorityFunction:t.priorityFunction}),d=e._requestImageFunction(a.x,a.y,a.level,c,n);return l(d)?(r[s]={promise:d,request:c},!0):!1}var AT=vw;var Zat=[3034,3035,3042,3043,3044],Gat=[4471,4559];function Mh(e){if(e=e??Y.EMPTY_OBJECT,l(e.times)&&!l(e.clock))throw new pe("options.times was specified, so options.clock is required.");this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this._getFeatureInfoUrl=e.getFeatureInfoUrl??e.url;let t=Ze.createIfNeeded(e.url),n=Ze.createIfNeeded(this._getFeatureInfoUrl);t.setQueryParameters(Mh.DefaultParameters,!0),n.setQueryParameters(Mh.GetFeatureInfoDefaultParameters,!0),l(e.parameters)&&t.setQueryParameters(Gge(e.parameters)),l(e.getFeatureInfoParameters)&&n.setQueryParameters(Gge(e.getFeatureInfoParameters));let i=this;this._reload=void 0,l(e.times)&&(this._timeDynamicImagery=new AT({clock:e.clock,times:e.times,requestImageFunction:function(s,a,c,d,u){return Ege(i,s,a,c,d,u)},reloadFunction:function(){l(i._reload)&&i._reload()}}));let o={};if(o.layers=e.layers,o.bbox="{westProjected},{southProjected},{eastProjected},{northProjected}",o.width="{width}",o.height="{height}",parseFloat(t.queryParameters.version)>=1.3){o.crs=e.crs??(e.tilingScheme&&e.tilingScheme.projection instanceof Xi?"EPSG:3857":"CRS:84");let s=o.crs.split(":");if(s[0]==="EPSG"&&s.length===2){let a=Number(s[1]);(a>=4e3&&a<5e3&&!Gat.includes(a)||Zat.includes(a))&&(o.bbox="{southProjected},{westProjected},{northProjected},{eastProjected}")}}else o.srs=e.srs??(e.tilingScheme&&e.tilingScheme.projection instanceof Xi?"EPSG:3857":"EPSG:4326");t.setQueryParameters(o,!0),n.setQueryParameters(o,!0);let r={query_layers:e.layers,info_format:"{format}"};parseFloat(n.queryParameters.version)>=1.3?(r.i="{i}",r.j="{j}"):(r.x="{i}",r.y="{j}"),n.setQueryParameters(r,!0),this._resource=t,this._pickFeaturesResource=n,this._layers=e.layers,this._tileProvider=new Ya({url:t,pickFeaturesUrl:n,tilingScheme:e.tilingScheme??new Hi({ellipsoid:e.ellipsoid}),rectangle:e.rectangle,tileWidth:e.tileWidth,tileHeight:e.tileHeight,minimumLevel:e.minimumLevel,maximumLevel:e.maximumLevel,subdomains:e.subdomains,tileDiscardPolicy:e.tileDiscardPolicy,credit:e.credit,getFeatureInfoFormats:e.getFeatureInfoFormats??Mh.DefaultGetFeatureInfoFormats,enablePickFeatures:e.enablePickFeatures})}function Ege(e,t,n,i,o,r){let s=l(r)?r.data:void 0,a=e._tileProvider;return l(s)&&a._resource.setQueryParameters(s),a.requestImage(t,n,i,o)}function Eat(e,t,n,i,o,r,s){let a=l(s)?s.data:void 0,c=e._tileProvider;return l(a)&&c._pickFeaturesResource.setQueryParameters(a),c.pickFeatures(t,n,i,o,r)}Object.defineProperties(Mh.prototype,{url:{get:function(){return this._resource._url}},proxy:{get:function(){return this._resource.proxy}},layers:{get:function(){return this._layers}},tileWidth:{get:function(){return this._tileProvider.tileWidth}},tileHeight:{get:function(){return this._tileProvider.tileHeight}},maximumLevel:{get:function(){return this._tileProvider.maximumLevel}},minimumLevel:{get:function(){return this._tileProvider.minimumLevel}},tilingScheme:{get:function(){return this._tileProvider.tilingScheme}},rectangle:{get:function(){return this._tileProvider.rectangle}},tileDiscardPolicy:{get:function(){return this._tileProvider.tileDiscardPolicy}},errorEvent:{get:function(){return this._tileProvider.errorEvent}},credit:{get:function(){return this._tileProvider.credit}},hasAlphaChannel:{get:function(){return this._tileProvider.hasAlphaChannel}},enablePickFeatures:{get:function(){return this._tileProvider.enablePickFeatures},set:function(e){this._tileProvider.enablePickFeatures=e}},clock:{get:function(){return this._timeDynamicImagery.clock},set:function(e){this._timeDynamicImagery.clock=e}},times:{get:function(){return this._timeDynamicImagery.times},set:function(e){this._timeDynamicImagery.times=e}},getFeatureInfoUrl:{get:function(){return this._getFeatureInfoUrl}}});Mh.prototype.getTileCredits=function(e,t,n){return this._tileProvider.getTileCredits(e,t,n)};Mh.prototype.requestImage=function(e,t,n,i){let o,r=this._timeDynamicImagery,s;return l(r)&&(s=r.currentInterval,o=r.getFromCache(e,t,n,i)),l(o)||(o=Ege(this,e,t,n,i,s)),l(o)&&l(r)&&r.checkApproachingInterval(e,t,n,i),o};Mh.prototype.pickFeatures=function(e,t,n,i,o){let r=this._timeDynamicImagery,s=l(r)?r.currentInterval:void 0;return Eat(this,e,t,n,i,o,s)};Mh.DefaultParameters=Object.freeze({service:"WMS",version:"1.1.1",request:"GetMap",styles:"",format:"image/jpeg"});Mh.GetFeatureInfoDefaultParameters=Object.freeze({service:"WMS",version:"1.1.1",request:"GetFeatureInfo"});Mh.DefaultGetFeatureInfoFormats=Object.freeze([Object.freeze(new FT("json","application/json")),Object.freeze(new FT("xml","text/xml")),Object.freeze(new FT("text","text/html"))]);function Gge(e){let t={};for(let n in e)e.hasOwnProperty(n)&&(t[n.toLowerCase()]=e[n]);return t}var ww=Mh;var X1i=_(T(),1);var Iat=Object.freeze({service:"WMTS",version:"1.0.0",request:"GetTile"});function Fw(e){e=e??Y.EMPTY_OBJECT,this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0;let t=Ze.createIfNeeded(e.url),n=e.style,i=e.tileMatrixSetID,o=t.url,r=o.match(/{/g);if(!l(r)||r.length===1&&/{s}/.test(o))t.setQueryParameters(Iat),this._useKvp=!0;else{let h={style:n,Style:n,TileMatrixSet:i};t.setTemplateValues(h),this._useKvp=!1}this._resource=t,this._layer=e.layer,this._style=n,this._tileMatrixSetID=i,this._tileMatrixLabels=e.tileMatrixLabels,this._format=e.format??"image/jpeg",this._tileDiscardPolicy=e.tileDiscardPolicy,this._tilingScheme=l(e.tilingScheme)?e.tilingScheme:new rs({ellipsoid:e.ellipsoid}),this._tileWidth=e.tileWidth??256,this._tileHeight=e.tileHeight??256,this._minimumLevel=e.minimumLevel??0,this._maximumLevel=e.maximumLevel,this._rectangle=e.rectangle??this._tilingScheme.rectangle,this._dimensions=e.dimensions;let s=this;this._reload=void 0,l(e.times)&&(this._timeDynamicImagery=new AT({clock:e.clock,times:e.times,requestImageFunction:function(h,p,g,f,y){return Ige(s,h,p,g,f,y)},reloadFunction:function(){l(s._reload)&&s._reload()}}));let a=this._tilingScheme.positionToTileXY(ce.southwest(this._rectangle),this._minimumLevel),c=this._tilingScheme.positionToTileXY(ce.northeast(this._rectangle),this._minimumLevel),d=(Math.abs(c.x-a.x)+1)*(Math.abs(c.y-a.y)+1);this._errorEvent=new be;let u=e.credit;this._credit=typeof u=="string"?new Ct(u):u,this._subdomains=e.subdomains,Array.isArray(this._subdomains)?this._subdomains=this._subdomains.slice():l(this._subdomains)&&this._subdomains.length>0?this._subdomains=this._subdomains.split(""):this._subdomains=["a","b","c"]}function Ige(e,t,n,i,o,r){let s=e._tileMatrixLabels,a=l(s)?s[i]:i.toString(),c=e._subdomains,d=e._dimensions,u=l(r)?r.data:void 0,h,p;if(!e._useKvp)p={TileMatrix:a,TileRow:n.toString(),TileCol:t.toString(),s:c[(t+n+i)%c.length]},h=e._resource.getDerivedResource({request:o}),h.setTemplateValues(p),l(d)&&h.setTemplateValues(d),l(u)&&h.setTemplateValues(u);else{let g={};g.tilematrix=a,g.layer=e._layer,g.style=e._style,g.tilerow=n,g.tilecol=t,g.tilematrixset=e._tileMatrixSetID,g.format=e._format,l(d)&&(g=St(g,d)),l(u)&&(g=St(g,u)),p={s:c[(t+n+i)%c.length]},h=e._resource.getDerivedResource({queryParameters:g,request:o}),h.setTemplateValues(p)}return pl.loadImage(e,h)}Object.defineProperties(Fw.prototype,{url:{get:function(){return this._resource.url}},proxy:{get:function(){return this._resource.proxy}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){return this._maximumLevel}},minimumLevel:{get:function(){return this._minimumLevel}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._rectangle}},tileDiscardPolicy:{get:function(){return this._tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},format:{get:function(){return this._format}},credit:{get:function(){return this._credit}},hasAlphaChannel:{get:function(){return!0}},clock:{get:function(){return this._timeDynamicImagery.clock},set:function(e){this._timeDynamicImagery.clock=e}},times:{get:function(){return this._timeDynamicImagery.times},set:function(e){this._timeDynamicImagery.times=e}},dimensions:{get:function(){return this._dimensions},set:function(e){this._dimensions!==e&&(this._dimensions=e,l(this._reload)&&this._reload())}}});Fw.prototype.getTileCredits=function(e,t,n){};Fw.prototype.requestImage=function(e,t,n,i){let o,r=this._timeDynamicImagery,s;return l(r)&&(s=r.currentInterval,o=r.getFromCache(e,t,n,i)),l(o)||(o=Ige(this,e,t,n,i,s)),l(o)&&l(r)&&r.checkApproachingInterval(e,t,n,i),o};Fw.prototype.pickFeatures=function(e,t,n,i,o){};var Aw=Fw;var Xat={ARCGIS_MAPSERVER:l0.fromUrl,BING:async(e,t)=>Gw.fromUrl(e,t),GOOGLE_EARTH:async(e,t)=>{let n=t.channel;return delete t.channel,Xw.fromUrl(e,n,t)},MAPBOX:(e,t)=>new Ww({url:e,...t}),SINGLE_TILE:Pw.fromUrl,TMS:Ly.fromUrl,URL_TEMPLATE:(e,t)=>new Ya({url:e,...t}),WMS:(e,t)=>new ww({url:e,...t}),WMTS:(e,t)=>new Aw({url:e,...t})};function tp(e){e=e??Y.EMPTY_OBJECT,this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this._tileCredits=void 0,this._errorEvent=new be}Object.defineProperties(tp.prototype,{rectangle:{get:function(){return this._imageryProvider.rectangle}},tileWidth:{get:function(){return this._imageryProvider.tileWidth}},tileHeight:{get:function(){return this._imageryProvider.tileHeight}},maximumLevel:{get:function(){return this._imageryProvider.maximumLevel}},minimumLevel:{get:function(){return this._imageryProvider.minimumLevel}},tilingScheme:{get:function(){return this._imageryProvider.tilingScheme}},tileDiscardPolicy:{get:function(){return this._imageryProvider.tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._imageryProvider.credit}},hasAlphaChannel:{get:function(){return this._imageryProvider.hasAlphaChannel}},proxy:{get:function(){}}});tp.fromAssetId=async function(e,t){t=t??Y.EMPTY_OBJECT;let n=_d._createEndpointResource(e,t),i=e.toString()+t.accessToken+t.server,o=tp._endpointCache[i];l(o)||(o=n.fetchJson(),tp._endpointCache[i]=o);let r=await o;if(r.type!=="IMAGERY")throw new ae(`Cesium ion asset ${e} is not an imagery asset.`);let s,a=r.externalType;if(!l(a))s=await Ly.fromUrl(new _d(r,n));else{let d=Xat[a];if(!l(d))throw new ae(`Unrecognized Cesium ion imagery type: ${a}`);let u={...r.options},h=u.url;delete u.url,s=await d(h,u)}let c=new tp(t);return s.errorEvent.addEventListener(function(d){d.provider=c,c._errorEvent.raiseEvent(d)}),c._tileCredits=_d.getCreditsFromEndpoint(r,n),c._imageryProvider=s,c};tp.prototype.getTileCredits=function(e,t,n){let i=this._imageryProvider.getTileCredits(e,t,n);return l(i)?this._tileCredits.concat(i):this._tileCredits};tp.prototype.requestImage=function(e,t,n,i){return this._imageryProvider.requestImage(e,t,n,i)};tp.prototype.pickFeatures=function(e,t,n,i,o){return this._imageryProvider.pickFeatures(e,t,n,i,o)};tp._endpointCache={};var d0=tp;var J1i=_(T(),1),Wat={AERIAL:2,AERIAL_WITH_LABELS:3,ROAD:4},u0=Object.freeze(Wat);function Pat(e){e=e??Y.EMPTY_OBJECT;let t=e.style??u0.AERIAL;return d0.fromAssetId(t)}var m0=Pat;var nVi=_(T(),1),Mw=`uniform sampler2D u_texture; in vec2 v_textureCoordinates; void main() { out_FragColor = texture(u_texture, v_textureCoordinates); } `;var oVi=_(T(),1),Nw=`in vec4 position; in float webMercatorT; uniform vec2 u_textureDimensions; out vec2 v_textureCoordinates; void main() { v_textureCoordinates = vec2(position.x, webMercatorT); gl_Position = czm_viewportOrthographic * (position * vec4(u_textureDimensions, 1.0, 1.0)); } `;var lVi=_(T(),1);function zV(e,t,n,i,o){if(this.imageryLayer=e,this.x=t,this.y=n,this.level=i,this.request=void 0,i!==0){let r=t/2|0,s=n/2|0,a=i-1;this.parent=e.getImageryFromCache(r,s,a)}this.state=ci.UNLOADED,this.imageUrl=void 0,this.image=void 0,this.texture=void 0,this.textureWebMercator=void 0,this.credits=void 0,this.referenceCount=0,!l(o)&&e.ready&&(o=e.imageryProvider.tilingScheme.tileXYToRectangle(t,n,i)),this.rectangle=o}zV.createPlaceholder=function(e){let t=new zV(e,0,0,0);return t.addReference(),t.state=ci.PLACEHOLDER,t};zV.prototype.addReference=function(){++this.referenceCount};zV.prototype.releaseReference=function(){return--this.referenceCount,this.referenceCount===0?(this.imageryLayer.removeImageryFromCache(this),l(this.parent)&&this.parent.releaseReference(),l(this.image)&&l(this.image.destroy)&&this.image.destroy(),l(this.texture)&&this.texture.destroy(),l(this.textureWebMercator)&&this.texture!==this.textureWebMercator&&this.textureWebMercator.destroy(),me(this),0):this.referenceCount};zV.prototype.processStateMachine=function(e,t,n){this.state===ci.UNLOADED&&!n&&(this.state=ci.TRANSITIONING,this.imageryLayer._requestImagery(this)),this.state===ci.RECEIVED&&(this.state=ci.TRANSITIONING,this.imageryLayer._createTexture(e.context,this));let i=this.state===ci.READY&&t&&!this.texture;(this.state===ci.TEXTURE_LOADED||i)&&(this.state=ci.TRANSITIONING,this.imageryLayer._reprojectTexture(e,this,t))};var HV=zV;var hVi=_(T(),1);function tj(e,t,n){this.readyImagery=void 0,this.loadingImagery=e,this.textureCoordinateRectangle=t,this.textureTranslationAndScale=void 0,this.useWebMercatorT=n}tj.prototype.freeResources=function(){l(this.readyImagery)&&this.readyImagery.releaseReference(),l(this.loadingImagery)&&this.loadingImagery.releaseReference()};tj.prototype.processStateMachine=function(e,t,n){let i=this.loadingImagery,o=i.imageryLayer;if(i.processStateMachine(t,!this.useWebMercatorT,n),i.state===ci.READY)return l(this.readyImagery)&&this.readyImagery.releaseReference(),this.readyImagery=this.loadingImagery,this.loadingImagery=void 0,this.textureTranslationAndScale=o._calculateTextureTranslationAndScale(e,this),!0;let r=i.parent,s;for(;l(r)&&(r.state!==ci.READY||!this.useWebMercatorT&&!l(r.texture));)r.state!==ci.FAILED&&r.state!==ci.INVALID&&(s=s||r),r=r.parent;return this.readyImagery!==r&&(l(this.readyImagery)&&this.readyImagery.releaseReference(),this.readyImagery=r,l(r)&&(r.addReference(),this.textureTranslationAndScale=o._calculateTextureTranslationAndScale(e,this))),i.state===ci.FAILED||i.state===ci.INVALID?l(s)?(s.processStateMachine(t,!this.useWebMercatorT,n),!1):!0:!1};var KV=tj;function Ci(e,t){this._imageryProvider=e,this._readyEvent=new be,this._errorEvent=new be,t=t??Y.EMPTY_OBJECT,e=e??Y.EMPTY_OBJECT,this.alpha=t.alpha??e._defaultAlpha??1,this.nightAlpha=t.nightAlpha??e._defaultNightAlpha??1,this.dayAlpha=t.dayAlpha??e._defaultDayAlpha??1,this.brightness=t.brightness??e._defaultBrightness??Ci.DEFAULT_BRIGHTNESS,this.contrast=t.contrast??e._defaultContrast??Ci.DEFAULT_CONTRAST,this.hue=t.hue??e._defaultHue??Ci.DEFAULT_HUE,this.saturation=t.saturation??e._defaultSaturation??Ci.DEFAULT_SATURATION,this.gamma=t.gamma??e._defaultGamma??Ci.DEFAULT_GAMMA,this.splitDirection=t.splitDirection??Ci.DEFAULT_SPLIT,this.minificationFilter=t.minificationFilter??e._defaultMinificationFilter??Ci.DEFAULT_MINIFICATION_FILTER,this.magnificationFilter=t.magnificationFilter??e._defaultMagnificationFilter??Ci.DEFAULT_MAGNIFICATION_FILTER,this.show=t.show??!0,this._minimumTerrainLevel=t.minimumTerrainLevel,this._maximumTerrainLevel=t.maximumTerrainLevel,this._rectangle=t.rectangle??ce.MAX_VALUE,this._maximumAnisotropy=t.maximumAnisotropy,this._imageryCache={},this._skeletonPlaceholder=new KV(HV.createPlaceholder(this)),this._show=!0,this._layerIndex=-1,this._isBaseLayer=!1,this._requestImageError=void 0,this._reprojectComputeCommands=[],this.cutoutRectangle=t.cutoutRectangle,this.colorToAlpha=t.colorToAlpha,this.colorToAlphaThreshold=t.colorToAlphaThreshold??Ci.DEFAULT_APPLY_COLOR_TO_ALPHA_THRESHOLD}Object.defineProperties(Ci.prototype,{imageryProvider:{get:function(){return this._imageryProvider}},ready:{get:function(){return l(this._imageryProvider)}},errorEvent:{get:function(){return this._errorEvent}},readyEvent:{get:function(){return this._readyEvent}},rectangle:{get:function(){return this._rectangle}}});Ci.DEFAULT_BRIGHTNESS=1;Ci.DEFAULT_CONTRAST=1;Ci.DEFAULT_HUE=0;Ci.DEFAULT_SATURATION=1;Ci.DEFAULT_GAMMA=1;Ci.DEFAULT_SPLIT=vr.NONE;Ci.DEFAULT_MINIFICATION_FILTER=jt.LINEAR;Ci.DEFAULT_MAGNIFICATION_FILTER=hi.LINEAR;Ci.DEFAULT_APPLY_COLOR_TO_ALPHA_THRESHOLD=.004;Ci.fromProviderAsync=function(e,t){let n=new Ci(void 0,t);return Mat(n,Promise.resolve(e)),n};Ci.fromWorldImagery=function(e){return e=e??Y.EMPTY_OBJECT,Ci.fromProviderAsync(m0({style:e.style}),e)};Ci.prototype.isBaseLayer=function(){return this._isBaseLayer};Ci.prototype.isDestroyed=function(){return!1};Ci.prototype.destroy=function(){return me(this)};var Pge=new ce,Xge=new ce,nj=new ce,vge=new ce;Ci.prototype.getImageryRectangle=function(){let e=this._imageryProvider,t=this._rectangle;return ce.intersection(e.rectangle,t)};Ci.prototype._createTileImagerySkeletons=function(e,t,n){let i=e.data;if(!l(t)||l(this._minimumTerrainLevel)&&e.level<this._minimumTerrainLevel||l(this._maximumTerrainLevel)&&e.level>this._maximumTerrainLevel)return!1;l(n)||(n=i.imagery.length);let o=this._imageryProvider;if(!this.ready)return this._skeletonPlaceholder.loadingImagery.addReference(),i.imagery.splice(n,0,this._skeletonPlaceholder),!0;let r=o.tilingScheme.projection instanceof Xi&&e.rectangle.north<Xi.MaximumLatitude&&e.rectangle.south>-Xi.MaximumLatitude,s=ce.intersection(o.rectangle,this._rectangle,Pge),a=ce.intersection(e.rectangle,s,Xge);if(!l(a)){if(!this.isBaseLayer())return!1;let G=s,I=e.rectangle;a=Xge,I.south>=G.north?a.north=a.south=G.north:I.north<=G.south?a.north=a.south=G.south:(a.south=Math.max(I.south,G.south),a.north=Math.min(I.north,G.north)),I.west>=G.east?a.west=a.east=G.east:I.east<=G.west?a.west=a.east=G.west:(a.west=Math.max(I.west,G.west),a.east=Math.min(I.east,G.east))}let c=0;a.south>0?c=a.south:a.north<0&&(c=a.north);let u=1*t.getLevelMaximumGeometricError(e.level),h=Fat(this,u,c);h=Math.max(0,h);let p=o.maximumLevel;if(h>p&&(h=p),l(o.minimumLevel)){let G=o.minimumLevel;h<G&&(h=G)}let g=o.tilingScheme,f=g.positionToTileXY(ce.northwest(a),h),y=g.positionToTileXY(ce.southeast(a),h),x=e.rectangle.width/512,S=e.rectangle.height/512,C=g.tileXYToRectangle(f.x,f.y,h);Math.abs(C.south-e.rectangle.north)<S&&f.y<y.y&&++f.y,Math.abs(C.east-e.rectangle.west)<x&&f.x<y.x&&++f.x;let V=g.tileXYToRectangle(y.x,y.y,h);Math.abs(V.north-e.rectangle.south)<S&&y.y>f.y&&--y.y,Math.abs(V.west-e.rectangle.east)<x&&y.x>f.x&&--y.x;let L=ce.clone(e.rectangle,vge),Z=g.tileXYToRectangle(f.x,f.y,h),E=ce.intersection(Z,s,nj),P;r?(g.rectangleToNativeRectangle(L,L),g.rectangleToNativeRectangle(Z,Z),g.rectangleToNativeRectangle(E,E),g.rectangleToNativeRectangle(s,s),P=g.tileXYToNativeRectangle.bind(g),x=L.width/512,S=L.height/512):P=g.tileXYToRectangle.bind(g);let W,v=0,A=1,b;!this.isBaseLayer()&&Math.abs(E.west-L.west)>=x&&(v=Math.min(1,(E.west-L.west)/L.width)),!this.isBaseLayer()&&Math.abs(E.north-L.north)>=S&&(A=Math.max(0,(E.north-L.south)/L.height));let R=A;for(let G=f.x;G<=y.x;G++)if(W=v,Z=P(G,f.y,h),E=ce.simpleIntersection(Z,s,nj),!!l(E)){v=Math.min(1,(E.east-L.west)/L.width),G===y.x&&(this.isBaseLayer()||Math.abs(E.east-L.east)<x)&&(v=1),A=R;for(let I=f.y;I<=y.y;I++){if(b=A,Z=P(G,I,h),E=ce.simpleIntersection(Z,s,nj),!l(E))continue;A=Math.max(0,(E.south-L.south)/L.height),I===y.y&&(this.isBaseLayer()||Math.abs(E.south-L.south)<S)&&(A=0);let w=new se(W,A,v,b),M=this.getImageryFromCache(G,I,h);i.imagery.splice(n,0,new KV(M,w,r)),++n}}return!0};Ci.prototype._calculateTextureTranslationAndScale=function(e,t){let n=t.readyImagery.rectangle,i=e.rectangle;if(t.useWebMercatorT){let c=t.readyImagery.imageryLayer.imageryProvider.tilingScheme;n=c.rectangleToNativeRectangle(n,Pge),i=c.rectangleToNativeRectangle(i,vge)}let o=i.width,r=i.height,s=o/n.width,a=r/n.height;return new se(s*(i.west-n.west)/o,a*(i.south-n.south)/r,s,a)};Ci.prototype._requestImagery=function(e){let t=this._imageryProvider,n=this;function i(s){if(!l(s))return o();e.image=s,e.state=ci.RECEIVED,e.request=void 0,Zo.reportSuccess(n._requestImageError)}function o(s){if(e.request.state===jn.CANCELLED){e.state=ci.UNLOADED,e.request=void 0;return}e.state=ci.FAILED,e.request=void 0;let a=`Failed to obtain image tile X: ${e.x} Y: ${e.y} Level: ${e.level}.`;n._requestImageError=Zo.reportError(n._requestImageError,t,t.errorEvent,a,e.x,e.y,e.level,s),n._requestImageError.retry&&r()}function r(){let s=new zo({throttle:!1,throttleByServer:!0,type:ds.IMAGERY});e.request=s,e.state=ci.TRANSITIONING;let a=t.requestImage(e.x,e.y,e.level,s);if(!l(a)){e.state=ci.UNLOADED,e.request=void 0;return}l(t.getTileCredits)&&(e.credits=t.getTileCredits(e.x,e.y,e.level)),a.then(function(c){i(c)}).catch(function(c){o(c)})}r()};Ci.prototype._createTextureWebGL=function(e,t){let n=new qt({minificationFilter:this.minificationFilter,magnificationFilter:this.magnificationFilter}),i=t.image;return l(i.internalFormat)?new vt({context:e,pixelFormat:i.internalFormat,width:i.width,height:i.height,source:{arrayBufferView:i.bufferView},sampler:n}):new vt({context:e,source:i,pixelFormat:this._imageryProvider.hasAlphaChannel?it.RGBA:it.RGB,sampler:n})};Ci.prototype._createTexture=function(e,t){let n=this._imageryProvider,i=t.image;if(l(n.tileDiscardPolicy)){let r=n.tileDiscardPolicy;if(l(r)){if(!r.isReady()){t.state=ci.RECEIVED;return}if(r.shouldDiscardImage(i)){t.state=ci.INVALID;return}}}let o=this._createTextureWebGL(e,t);n.tilingScheme.projection instanceof Xi?t.textureWebMercator=o:t.texture=o,t.image=void 0,t.state=ci.TEXTURE_LOADED};function Wge(e,t,n){return`${e}:${t}:${n}`}Ci.prototype._finalizeReprojectTexture=function(e,t){let n=this.minificationFilter,i=this.magnificationFilter;if(n===jt.LINEAR&&i===hi.LINEAR&&!it.isCompressedFormat(t.pixelFormat)&&X.isPowerOfTwo(t.width)&&X.isPowerOfTwo(t.height)){n=jt.LINEAR_MIPMAP_LINEAR;let r=Nt.maximumTextureFilterAnisotropy,s=Math.min(r,this._maximumAnisotropy??r),a=Wge(n,i,s),c=e.cache.imageryLayerMipmapSamplers;l(c)||(c={},e.cache.imageryLayerMipmapSamplers=c);let d=c[a];l(d)||(d=c[a]=new qt({wrapS:Vn.CLAMP_TO_EDGE,wrapT:Vn.CLAMP_TO_EDGE,minificationFilter:n,magnificationFilter:i,maximumAnisotropy:s})),t.generateMipmap(df.NICEST),t.sampler=d}else{let r=Wge(n,i,0),s=e.cache.imageryLayerNonMipmapSamplers;l(s)||(s={},e.cache.imageryLayerNonMipmapSamplers=s);let a=s[r];l(a)||(a=s[r]=new qt({wrapS:Vn.CLAMP_TO_EDGE,wrapT:Vn.CLAMP_TO_EDGE,minificationFilter:n,magnificationFilter:i})),t.sampler=a}};Ci.prototype._reprojectTexture=function(e,t,n){let i=t.textureWebMercator||t.texture,o=t.rectangle,r=e.context;if(n=n??!0,n&&!(this._imageryProvider.tilingScheme.projection instanceof Ei)&&o.width/i.width>1e-5){let s=this;t.addReference();let a=new Fc({persists:!0,owner:this,preExecute:function(c){wat(c,r,i,t.rectangle)},postExecute:function(c){t.texture=c,s._finalizeReprojectTexture(r,c),t.state=ci.READY,t.releaseReference()},canceled:function(){t.state=ci.TEXTURE_LOADED,t.releaseReference()}});this._reprojectComputeCommands.push(a)}else n&&(t.texture=i),this._finalizeReprojectTexture(r,i),t.state=ci.READY};Ci.prototype.queueReprojectionCommands=function(e){let t=this._reprojectComputeCommands,n=t.length;for(let i=0;i<n;++i)e.commandList.push(t[i]);t.length=0};Ci.prototype.cancelReprojections=function(){this._reprojectComputeCommands.forEach(function(e){l(e.canceled)&&e.canceled()}),this._reprojectComputeCommands.length=0};Ci.prototype.getImageryFromCache=function(e,t,n,i){let o=wge(e,t,n),r=this._imageryCache[o];return l(r)||(r=new HV(this,e,t,n,i),this._imageryCache[o]=r),r.addReference(),r};Ci.prototype.removeImageryFromCache=function(e){let t=wge(e.x,e.y,e.level);delete this._imageryCache[t]};function wge(e,t,n){return JSON.stringify([e,t,n])}var FD={u_textureDimensions:function(){return this.textureDimensions},u_texture:function(){return this.texture},textureDimensions:new U,texture:void 0},vat=Bt.supportsTypedArrays()?new Float32Array(2*64):void 0;function wat(e,t,n,i){let o=t.cache.imageryLayer_reproject;if(!l(o)){o=t.cache.imageryLayer_reproject={vertexArray:void 0,shaderProgram:void 0,sampler:void 0,destroy:function(){l(this.framebuffer)&&this.framebuffer.destroy(),l(this.vertexArray)&&this.vertexArray.destroy(),l(this.shaderProgram)&&this.shaderProgram.destroy()}};let x=new Float32Array(2*64*2),S=0;for(let E=0;E<64;++E){let P=E/63;x[S++]=0,x[S++]=P,x[S++]=1,x[S++]=P}let C={position:0,webMercatorT:1},V=os.getRegularGridIndices(2,64),L=xt.createIndexBuffer({context:t,typedArray:V,usage:Me.STATIC_DRAW,indexDatatype:Ae.UNSIGNED_SHORT});o.vertexArray=new ni({context:t,attributes:[{index:C.position,vertexBuffer:xt.createVertexBuffer({context:t,typedArray:x,usage:Me.STATIC_DRAW}),componentsPerAttribute:2},{index:C.webMercatorT,vertexBuffer:xt.createVertexBuffer({context:t,sizeInBytes:64*2*4,usage:Me.STREAM_DRAW}),componentsPerAttribute:1}],indexBuffer:L});let Z=new De({sources:[Nw]});o.shaderProgram=$t.fromCache({context:t,vertexShaderSource:Z,fragmentShaderSource:Mw,attributeLocations:C}),o.sampler=new qt({wrapS:Vn.CLAMP_TO_EDGE,wrapT:Vn.CLAMP_TO_EDGE,minificationFilter:jt.LINEAR,magnificationFilter:hi.LINEAR})}n.sampler=o.sampler;let r=n.width,s=n.height;FD.textureDimensions.x=r,FD.textureDimensions.y=s,FD.texture=n;let a=Math.sin(i.south),c=.5*Math.log((1+a)/(1-a));a=Math.sin(i.north);let u=1/(.5*Math.log((1+a)/(1-a))-c),h=new vt({context:t,width:r,height:s,pixelFormat:n.pixelFormat,pixelDatatype:n.pixelDatatype,preMultiplyAlpha:n.preMultiplyAlpha});X.isPowerOfTwo(r)&&X.isPowerOfTwo(s)&&h.generateMipmap(df.NICEST);let p=i.south,g=i.north,f=vat,y=0;for(let x=0;x<64;++x){let S=x/63,C=X.lerp(p,g,S);a=Math.sin(C);let L=(.5*Math.log((1+a)/(1-a))-c)*u;f[y++]=L,f[y++]=L}o.vertexArray.getAttribute(1).vertexBuffer.copyFromArrayView(f),e.shaderProgram=o.shaderProgram,e.outputTexture=h,e.uniformMap=FD,e.vertexArray=o.vertexArray}function Fat(e,t,n){let i=e._imageryProvider,o=i.tilingScheme,r=o.ellipsoid,s=e._imageryProvider.tilingScheme.projection instanceof Ei?1:Math.cos(n),a=o.rectangle,d=r.maximumRadius*a.width*s/(i.tileWidth*o.getNumberOfXTilesAtLevel(0))/t,u=Math.log(d)/Math.log(2);return Math.round(u)|0}function Aat(e,t){e.numberOfListeners>0?e.raiseEvent(t):console.error(t)}async function Mat(e,t){let n;try{if(n=await Promise.resolve(t),e.isDestroyed())return;e._imageryProvider=n,e._readyEvent.raiseEvent(n)}catch(i){Aat(e._errorEvent,i)}}var za=Ci;var LLi=_(T(),1);var tLi=_(T(),1),Nat={WEST:0,NORTH:1,EAST:2,SOUTH:3,NORTHWEST:4,NORTHEAST:5,SOUTHWEST:6,SOUTHEAST:7},yn=Nat;var iLi=_(T(),1),Fge={NONE:0,CULLED:1,RENDERED:2,REFINED:3,RENDERED_AND_KICKED:6,REFINED_AND_KICKED:7,CULLED_BUT_NEEDED:9,wasKicked:function(e){return e>=Fge.RENDERED_AND_KICKED},originalResult:function(e){return e&3},kick:function(e){return e|4}},Jn=Fge;function QV(e){this.tile=e,this.frameLastUpdated=void 0,this.westMeshes=[],this.westTiles=[],this.southMeshes=[],this.southTiles=[],this.eastMeshes=[],this.eastTiles=[],this.northMeshes=[],this.northTiles=[],this.southwestMesh=void 0,this.southwestTile=void 0,this.southeastMesh=void 0,this.southeastTile=void 0,this.northwestMesh=void 0,this.northwestTile=void 0,this.northeastMesh=void 0,this.northeastTile=void 0,this.changedThisFrame=!0,this.visitedFrame=void 0,this.enqueuedFrame=void 0,this.mesh=void 0,this.vertexArray=void 0,this.waterMaskTexture=void 0,this.waterMaskTranslationAndScale=new se}QV.prototype.update=function(e,t,n){this.changedThisFrame&&(Bge(e,t,this.tile,n),this.changedThisFrame=!1)};QV.prototype.destroy=function(e){this._destroyVertexArray(e),l(this.waterMaskTexture)&&(--this.waterMaskTexture.referenceCount,this.waterMaskTexture.referenceCount===0&&this.waterMaskTexture.destroy(),this.waterMaskTexture=void 0)};QV.prototype._destroyVertexArray=function(e){l(this.vertexArray)&&(l(e)?e.push(this.vertexArray):mm._freeVertexArray(this.vertexArray),this.vertexArray=void 0)};var kat=new yg;QV.updateFillTiles=function(e,t,n,i){let o=e._quadtree,r=o._levelZeroTiles,s=o._lastSelectionFrameNumber,a=kat;a.clear();for(let d=0;d<t.length;++d){let u=t[d];l(u.data.vertexArray)&&a.enqueue(t[d])}let c=a.dequeue();for(;c!==void 0;){let d=c.findTileToWest(r),u=c.findTileToSouth(r),h=c.findTileToEast(r),p=c.findTileToNorth(r);vs(e,n,c,d,s,yn.EAST,!1,a,i),vs(e,n,c,u,s,yn.NORTH,!1,a,i),vs(e,n,c,h,s,yn.WEST,!1,a,i),vs(e,n,c,p,s,yn.SOUTH,!1,a,i);let g=d.findTileToNorth(r),f=d.findTileToSouth(r),y=h.findTileToNorth(r),x=h.findTileToSouth(r);vs(e,n,c,g,s,yn.SOUTHEAST,!1,a,i),vs(e,n,c,y,s,yn.SOUTHWEST,!1,a,i),vs(e,n,c,f,s,yn.NORTHEAST,!1,a,i),vs(e,n,c,x,s,yn.NORTHWEST,!1,a,i),c=a.dequeue()}};function vs(e,t,n,i,o,r,s,a,c){if(i===void 0)return;let d=i;for(;d&&(d._lastSelectionResultFrame!==o||Jn.wasKicked(d._lastSelectionResult)||Jn.originalResult(d._lastSelectionResult)===Jn.CULLED);){if(s)return;let u=d.parent;if(r>=yn.NORTHWEST&&u!==void 0)switch(r){case yn.NORTHWEST:d=d===u.northwestChild?u:void 0;break;case yn.NORTHEAST:d=d===u.northeastChild?u:void 0;break;case yn.SOUTHWEST:d=d===u.southwestChild?u:void 0;break;case yn.SOUTHEAST:d=d===u.southeastChild?u:void 0;break}else d=u}if(d!==void 0){if(d._lastSelectionResult===Jn.RENDERED){if(l(d.data.vertexArray))return;Uat(e,t,n,d,r,o,a,c);return}if(Jn.originalResult(i._lastSelectionResult)!==Jn.CULLED)switch(r){case yn.WEST:vs(e,t,n,i.northwestChild,o,r,!0,a,c),vs(e,t,n,i.southwestChild,o,r,!0,a,c);break;case yn.EAST:vs(e,t,n,i.southeastChild,o,r,!0,a,c),vs(e,t,n,i.northeastChild,o,r,!0,a,c);break;case yn.SOUTH:vs(e,t,n,i.southwestChild,o,r,!0,a,c),vs(e,t,n,i.southeastChild,o,r,!0,a,c);break;case yn.NORTH:vs(e,t,n,i.northeastChild,o,r,!0,a,c),vs(e,t,n,i.northwestChild,o,r,!0,a,c);break;case yn.NORTHWEST:vs(e,t,n,i.northwestChild,o,r,!0,a,c);break;case yn.NORTHEAST:vs(e,t,n,i.northeastChild,o,r,!0,a,c);break;case yn.SOUTHWEST:vs(e,t,n,i.southwestChild,o,r,!0,a,c);break;case yn.SOUTHEAST:vs(e,t,n,i.southeastChild,o,r,!0,a,c);break;default:throw new pe("Invalid edge")}}}function Uat(e,t,n,i,o,r,s,a){let c=i.data;if(c.fill===void 0)c.fill=new QV(i);else if(c.fill.visitedFrame===r)return;c.fill.enqueuedFrame!==r&&(c.fill.enqueuedFrame=r,c.fill.changedThisFrame=!1,s.enqueue(i)),Dat(e,t,n,i,o,a)}function Dat(e,t,n,i,o,r){let s=i.data.fill,a,c=n.data.fill;l(c)?(c.visitedFrame=t.frameNumber,c.changedThisFrame&&(Bge(e,t,n,r),c.changedThisFrame=!1),a=n.data.fill.mesh):a=n.data.mesh;let d,u;switch(o){case yn.WEST:d=s.westMeshes,u=s.westTiles;break;case yn.SOUTH:d=s.southMeshes,u=s.southTiles;break;case yn.EAST:d=s.eastMeshes,u=s.eastTiles;break;case yn.NORTH:d=s.northMeshes,u=s.northTiles;break;case yn.NORTHWEST:s.changedThisFrame=s.changedThisFrame||s.northwestMesh!==a,s.northwestMesh=a,s.northwestTile=n;return;case yn.NORTHEAST:s.changedThisFrame=s.changedThisFrame||s.northeastMesh!==a,s.northeastMesh=a,s.northeastTile=n;return;case yn.SOUTHWEST:s.changedThisFrame=s.changedThisFrame||s.southwestMesh!==a,s.southwestMesh=a,s.southwestTile=n;return;case yn.SOUTHEAST:s.changedThisFrame=s.changedThisFrame||s.southeastMesh!==a,s.southeastMesh=a,s.southeastTile=n;return}if(n.level<=i.level){s.changedThisFrame=s.changedThisFrame||d[0]!==a||d.length!==1,d[0]=a,u[0]=n,d.length=1,u.length=1;return}let h,p,g,f,y=n.rectangle,x,S=i.rectangle;switch(o){case yn.WEST:for(x=(S.north-S.south)*X.EPSILON5,h=0;h<u.length&&(g=u[h],f=g.rectangle,!X.greaterThan(y.north,f.south,x));++h);for(p=h;p<u.length&&(g=u[p],f=g.rectangle,!X.greaterThanOrEquals(y.south,f.north,x));++p);break;case yn.SOUTH:for(x=(S.east-S.west)*X.EPSILON5,h=0;h<u.length&&(g=u[h],f=g.rectangle,!X.lessThan(y.west,f.east,x));++h);for(p=h;p<u.length&&(g=u[p],f=g.rectangle,!X.lessThanOrEquals(y.east,f.west,x));++p);break;case yn.EAST:for(x=(S.north-S.south)*X.EPSILON5,h=0;h<u.length&&(g=u[h],f=g.rectangle,!X.lessThan(y.south,f.north,x));++h);for(p=h;p<u.length&&(g=u[p],f=g.rectangle,!X.lessThanOrEquals(y.north,f.south,x));++p);break;case yn.NORTH:for(x=(S.east-S.west)*X.EPSILON5,h=0;h<u.length&&(g=u[h],f=g.rectangle,!X.greaterThan(y.east,f.west,x));++h);for(p=h;p<u.length&&(g=u[p],f=g.rectangle,!X.greaterThanOrEquals(y.west,f.east,x));++p);break}p-h===1?(s.changedThisFrame=s.changedThisFrame||d[h]!==a,d[h]=a,u[h]=n):(s.changedThisFrame=!0,d.splice(h,p-h,a),u.splice(h,p-h,n))}var MT=new he,Bat=new he,JV=new m,sj=new m,ij=new U,oj=new U,$d=new U;function BD(){this.height=0,this.encodedNormal=new U}function AD(e,t,n,i,o,r,s,a,c){if(l(o))return o;let d;if(l(r)&&l(s))d=(r.height+s.height)*.5;else if(l(r))d=r.height;else if(l(s))d=s.height;else if(l(a))d=a.height;else{let h=e.tile.data.tileBoundingRegion,p=0,g=0;l(h)&&(p=h.minimumHeight,g=h.maximumHeight),d=(p+g)*.5}return Oge(e,t,n,i,d,c),c}var Oat={minimumHeight:0,maximumHeight:0},Yat=new m,Age=new BD,Mge=new BD,Nge=new BD,kge=new BD,zat=typeof Uint8Array<"u"?new Uint8Array(9*9):void 0,Hat={tilingScheme:void 0,x:0,y:0,level:0,exaggeration:1,exaggerationRelativeHeight:0};function Bge(e,t,n,i){mm.initialize(n,e.terrainProvider,e._imageryLayers);let o=n.data,r=o.fill,s=n.rectangle,a=t.verticalExaggeration,c=t.verticalExaggerationRelativeHeight,d=a!==1,u=n.tilingScheme.ellipsoid,h=ND(r,u,0,1,r.northwestTile,r.northwestMesh,r.northTiles,r.northMeshes,r.westTiles,r.westMeshes,Nge),p=ND(r,u,0,0,r.southwestTile,r.southwestMesh,r.westTiles,r.westMeshes,r.southTiles,r.southMeshes,Age),g=ND(r,u,1,0,r.southeastTile,r.southeastMesh,r.southTiles,r.southMeshes,r.eastTiles,r.eastMeshes,Mge),f=ND(r,u,1,1,r.northeastTile,r.northeastMesh,r.eastTiles,r.eastMeshes,r.northTiles,r.northMeshes,kge);h=AD(r,u,0,1,h,p,f,g,Nge),p=AD(r,u,0,0,p,h,g,f,Age),g=AD(r,u,1,1,g,p,f,h,Mge),f=AD(r,u,1,1,f,g,h,p,kge);let y=p.height,x=g.height,S=h.height,C=f.height,V=Math.min(y,x,S,C),L=Math.max(y,x,S,C),Z=(V+L)*.5,E,P,W=e.getLevelMaximumGeometricError(n.level),v=u.maximumRadius-W,A=Math.acos(v/u.maximumRadius)*4;if(A*=1.5,s.width>A&&L-V<=W){let G=new Oa({width:9,height:9,buffer:zat,structure:{heightOffset:L}}),I=Hat;I.tilingScheme=n.tilingScheme,I.x=n.x,I.y=n.y,I.level=n.level,I.exaggeration=a,I.exaggerationRelativeHeight=c,r.mesh=G._createMeshSync(I)}else{let G=d,I=ce.center(s,Bat);I.height=Z;let w=u.cartographicToCartesian(I,Yat),M=new Rc(w,void 0,void 0,void 0,void 0,!0,!0,G,a,c),B=5,k;for(k=r.westMeshes,E=0,P=k.length;E<P;++E)B+=k[E].eastIndicesNorthToSouth.length;for(k=r.southMeshes,E=0,P=k.length;E<P;++E)B+=k[E].northIndicesWestToEast.length;for(k=r.eastMeshes,E=0,P=k.length;E<P;++E)B+=k[E].westIndicesSouthToNorth.length;for(k=r.northMeshes,E=0,P=k.length;E<P;++E)B+=k[E].southIndicesEastToWest.length;let O=Oat;O.minimumHeight=V,O.maximumHeight=L;let N=M.stride,z=new Float32Array(B*N),K=0,te=K;K=MD(u,s,M,z,K,0,1,h.height,h.encodedNormal,1,O),K=UD(r,u,M,z,K,r.westTiles,r.westMeshes,yn.EAST,O);let H=K;K=MD(u,s,M,z,K,0,0,p.height,p.encodedNormal,0,O),K=UD(r,u,M,z,K,r.southTiles,r.southMeshes,yn.NORTH,O);let j=K;K=MD(u,s,M,z,K,1,0,g.height,g.encodedNormal,0,O),K=UD(r,u,M,z,K,r.eastTiles,r.eastMeshes,yn.WEST,O);let ee=K;K=MD(u,s,M,z,K,1,1,f.height,f.encodedNormal,1,O),K=UD(r,u,M,z,K,r.northTiles,r.northMeshes,yn.SOUTH,O),V=O.minimumHeight,L=O.maximumHeight;let fe=En.fromRectangle(s,V,L,n.tilingScheme.ellipsoid),Te=Xi.geodeticLatitudeToMercatorAngle(s.south),de=1/(Xi.geodeticLatitudeToMercatorAngle(s.north)-Te),xe=(Xi.geodeticLatitudeToMercatorAngle(I.latitude)-Te)*de,Ce=u.geodeticSurfaceNormalCartographic(MT,sj),Ie=wn.octEncode(Ce,ij),Le=K;M.encode(z,K*N,fe.center,U.fromElements(.5,.5,$d),Z,Ie,xe,Ce),++K;let Ne=K,Oe=Ne<256?1:2,qe=(Ne-1)*3,Rt=qe*Oe,Lt=(z.length-Ne*N)*Float32Array.BYTES_PER_ELEMENT,ke;if(Lt>=Rt){let ge=Ne*N*Float32Array.BYTES_PER_ELEMENT;ke=Ne<256?new Uint8Array(z.buffer,ge,qe):new Uint16Array(z.buffer,ge,qe)}else ke=Ne<256?new Uint8Array(qe):new Uint16Array(qe);z=new Float32Array(z.buffer,0,Ne*N);let Ht=0;for(E=0;E<Ne-2;++E)ke[Ht++]=Le,ke[Ht++]=E,ke[Ht++]=E+1;ke[Ht++]=Le,ke[Ht++]=E,ke[Ht++]=0;let ut=[];for(E=H;E>=te;--E)ut.push(E);let mt=[];for(E=j;E>=H;--E)mt.push(E);let Pn=[];for(E=ee;E>=j;--E)Pn.push(E);let cn=[];for(cn.push(0),E=Le-1;E>=ee;--E)cn.push(E);r.mesh=new um(M.center,z,ke,qe,Ne,V,L,le.fromOrientedBoundingBox(fe),ect(e,fe.center,s,V,L),M.stride,fe,M,ut,mt,Pn,cn)}let b=t.context;r._destroyVertexArray(i),r.vertexArray=mm._createVertexArrayForMesh(b,r.mesh),o.processImagery(n,e.terrainProvider,t,!0);let R=r.waterMaskTexture;if(r.waterMaskTexture=void 0,e.terrainProvider.hasWaterMask){let G=o._findAncestorTileWithTerrainData(n);l(G)&&l(G.data.waterMaskTexture)&&(r.waterMaskTexture=G.data.waterMaskTexture,++r.waterMaskTexture.referenceCount,o._computeWaterMaskTranslationAndScale(n,G,r.waterMaskTranslationAndScale))}l(R)&&(--R.referenceCount,R.referenceCount===0&&R.destroy())}function MD(e,t,n,i,o,r,s,a,c,d,u){let h=MT;h.longitude=X.lerp(t.west,t.east,r),h.latitude=X.lerp(t.south,t.north,s),h.height=a;let p=e.cartographicToCartesian(h,JV),g;n.hasGeodeticSurfaceNormals&&(g=e.geodeticSurfaceNormal(p,sj));let f=oj;return f.x=r,f.y=s,n.encode(i,o*n.stride,p,f,a,c,d,g),u.minimumHeight=Math.min(u.minimumHeight,a),u.maximumHeight=Math.max(u.maximumHeight,a),o+1}var DD=new ce;function kw(e,t,n,i){let o=e.rectangle,r=t.rectangle;t.x===0&&n.x===1&&e.x===e.tilingScheme.getNumberOfXTilesAtLevel(e.level)-1?(o=ce.clone(e.rectangle,DD),o.west-=X.TWO_PI,o.east-=X.TWO_PI):e.x===0&&n.x===0&&t.x===t.tilingScheme.getNumberOfXTilesAtLevel(t.level)-1&&(o=ce.clone(e.rectangle,DD),o.west+=X.TWO_PI,o.east+=X.TWO_PI);let s=o.east-o.west,a=(r.west-o.west)/s,c=(r.east-o.west)/s,d=o.north-o.south,u=(r.south-o.south)/d,h=(r.north-o.south)/d,p=(n.x-a)/(c-a),g=(n.y-u)/(h-u);return Math.abs(p)<Math.EPSILON5?p=0:Math.abs(p-1)<Math.EPSILON5&&(p=1),Math.abs(g)<Math.EPSILON5?g=0:Math.abs(g-1)<Math.EPSILON5&&(g=1),i.x=p,i.y=g,i}var Kat=new U;function rj(e,t,n,i,o){let r=e.encoding,s=e.vertices;if(o.height=r.decodeHeight(s,t),r.hasVertexNormals)r.getOctEncodedNormal(s,t,o.encodedNormal);else{let a=o.encodedNormal;a.x=0,a.y=0}}var Jat=new U,Qat=new m;function jat(e,t,n,i,o,r,s,a,c,d){let u=i.encoding,h=i.vertices,p=kw(t,n,u.decodeTextureCoordinates(h,o,$d),$d),g=kw(t,n,u.decodeTextureCoordinates(h,r,oj),oj),f;c?f=(s-p.x)/(g.x-p.x):f=(a-p.y)/(g.y-p.y);let y=u.decodeHeight(h,o),x=u.decodeHeight(h,r),S=n.rectangle;MT.longitude=X.lerp(S.west,S.east,s),MT.latitude=X.lerp(S.south,S.north,a),d.height=MT.height=X.lerp(y,x,f);let C;if(u.hasVertexNormals){let V=u.getOctEncodedNormal(h,o,Kat),L=u.getOctEncodedNormal(h,r,Jat),Z=wn.octDecode(V.x,V.y,JV),E=wn.octDecode(L.x,L.y,Qat);C=m.lerp(Z,E,f,JV),m.normalize(C,C),wn.octEncode(C,d.encodedNormal)}else C=e.geodeticSurfaceNormalCartographic(MT,JV),wn.octEncode(C,d.encodedNormal)}function Oge(e,t,n,i,o,r){r.height=o;let s=t.geodeticSurfaceNormalCartographic(MT,JV);wn.octEncode(s,r.encodedNormal)}function ND(e,t,n,i,o,r,s,a,c,d,u){if(Dge(e,t,a,s,!1,n,i,u)||Dge(e,t,d,c,!0,n,i,u))return u;let p;if(aj(o,r))return n===0?i===0?p=r.eastIndicesNorthToSouth[0]:p=r.southIndicesEastToWest[0]:i===0?p=r.northIndicesWestToEast[0]:p=r.westIndicesSouthToNorth[0],rj(r,p,n,i,u),u;let g;if(n===0?i===0?g=kD(e.westMeshes,e.westTiles,yn.EAST,e.southMeshes,e.southTiles,yn.NORTH,n,i):g=kD(e.northMeshes,e.northTiles,yn.SOUTH,e.westMeshes,e.westTiles,yn.EAST,n,i):i===0?g=kD(e.southMeshes,e.southTiles,yn.NORTH,e.eastMeshes,e.eastTiles,yn.WEST,n,i):g=kD(e.eastMeshes,e.eastTiles,yn.WEST,e.northMeshes,e.northTiles,yn.SOUTH,n,i),l(g))return Oge(e,t,n,i,g,u),u}function kD(e,t,n,i,o,r,s,a){let c=Uge(e,t,!1,n,s,a),d=Uge(i,o,!0,r,s,a);return l(c)&&l(d)?(c+d)*.5:l(c)?c:d}function UD(e,t,n,i,o,r,s,a,c){for(let d=0;d<r.length;++d)o=qat(e,t,n,i,o,r[d],s[d],a,c);return o}function qat(e,t,n,i,o,r,s,a,c){let d=r.rectangle;a===yn.EAST&&e.tile.x===0?(d=ce.clone(r.rectangle,DD),d.west-=X.TWO_PI,d.east-=X.TWO_PI):a===yn.WEST&&r.x===0&&(d=ce.clone(r.rectangle,DD),d.west+=X.TWO_PI,d.east+=X.TWO_PI);let u=e.tile.rectangle,h,p;o>0&&(n.decodeTextureCoordinates(i,o-1,$d),h=$d.x,p=$d.y);let g,f;switch(a){case yn.WEST:g=s.westIndicesSouthToNorth,f=!1;break;case yn.NORTH:g=s.northIndicesWestToEast,f=!0;break;case yn.EAST:g=s.eastIndicesNorthToSouth,f=!1;break;case yn.SOUTH:g=s.southIndicesEastToWest,f=!0;break}let y=r,x=e.tile,S=s.encoding,C=s.vertices,V=n.stride,L,Z;S.hasWebMercatorT&&(L=Xi.geodeticLatitudeToMercatorAngle(u.south),Z=1/(Xi.geodeticLatitudeToMercatorAngle(u.north)-L));for(let E=0;E<g.length;++E){let P=g[E],W=S.decodeTextureCoordinates(C,P,$d);kw(y,x,W,W);let v=W.x,A=W.y,b=f?v:A;if(b<0||b>1||Math.abs(v-h)<X.EPSILON5&&Math.abs(A-p)<X.EPSILON5)continue;let R=Math.abs(v)<X.EPSILON5||Math.abs(v-1)<X.EPSILON5,G=Math.abs(A)<X.EPSILON5||Math.abs(A-1)<X.EPSILON5;if(R&&G)continue;let I=S.decodePosition(C,P,JV),w=S.decodeHeight(C,P),M;S.hasVertexNormals?M=S.getOctEncodedNormal(C,P,ij):(M=ij,M.x=0,M.y=0);let B=A;if(S.hasWebMercatorT){let O=X.lerp(u.south,u.north,A);B=(Xi.geodeticLatitudeToMercatorAngle(O)-L)*Z}let k;n.hasGeodeticSurfaceNormals&&(k=t.geodeticSurfaceNormal(I,sj)),n.encode(i,o*V,I,W,w,M,B,k),c.minimumHeight=Math.min(c.minimumHeight,w),c.maximumHeight=Math.max(c.maximumHeight,w),++o}return o}function Uge(e,t,n,i,o,r){let s,a,c;n?(s=0,a=e.length,c=1):(s=e.length-1,a=-1,c=-1);for(let d=s;d!==a;d+=c){let u=e[d],h=t[d];if(!aj(h,u))continue;let p;switch(i){case yn.WEST:p=u.westIndicesSouthToNorth;break;case yn.SOUTH:p=u.southIndicesEastToWest;break;case yn.EAST:p=u.eastIndicesNorthToSouth;break;case yn.NORTH:p=u.northIndicesWestToEast;break}let g=p[n?0:p.length-1];if(l(g))return u.encoding.decodeHeight(u.vertices,g)}}function aj(e,t){return l(t)&&(!l(e.data.fill)||!e.data.fill.changedThisFrame)}function Dge(e,t,n,i,o,r,s,a){let c,d,u,h,p,g=i[o?0:n.length-1],f=n[o?0:n.length-1];if(aj(g,f)&&(r===0?s===0?(c=o?f.northIndicesWestToEast:f.eastIndicesNorthToSouth,d=o,u=o):(c=o?f.eastIndicesNorthToSouth:f.southIndicesEastToWest,d=!o,u=!1):s===0?(c=o?f.westIndicesSouthToNorth:f.northIndicesWestToEast,d=!o,u=!0):(c=o?f.southIndicesEastToWest:f.westIndicesSouthToNorth,d=o,u=!o),c.length>0)){h=o?0:c.length-1,p=c[h],f.encoding.decodeTextureCoordinates(f.vertices,p,$d);let y=kw(g,e.tile,$d,$d);if(y.x===r&&y.y===s)return rj(f,p,r,s,a),!0;if(h=Xo(c,d?r:s,function(x,S){f.encoding.decodeTextureCoordinates(f.vertices,x,$d);let C=kw(g,e.tile,$d,$d);return u?d?C.x-r:C.y-s:d?r-C.x:s-C.y}),h<0){if(h=~h,h>0&&h<c.length)return jat(t,g,e.tile,f,c[h-1],c[h],r,s,d,a),!0}else return rj(f,c[h],r,s,a),!0}return!1}var $at=[new m,new m,new m,new m];function ect(e,t,n,i,o,r){let s=e.quadtree._occluders.ellipsoid,a=s.ellipsoid,c=$at;return m.fromRadians(n.west,n.south,o,a,c[0]),m.fromRadians(n.east,n.south,o,a,c[1]),m.fromRadians(n.west,n.north,o,a,c[2]),m.fromRadians(n.east,n.north,o,a,c[3]),s.computeHorizonCullingPointPossiblyUnderEllipsoid(t,c,i,r)}var jV=QV;function or(e){this.lightingFadeOutDistance=65e5,this.lightingFadeInDistance=9e6,this.hasWaterMask=!1,this.showWaterEffect=!1,this.oceanNormalMap=void 0,this.zoomedOutOceanSpecularIntensity=.5,this.enableLighting=!1,this.dynamicAtmosphereLighting=!1,this.dynamicAtmosphereLightingFromSun=!1,this.showGroundAtmosphere=!1,this.shadows=_n.RECEIVE_ONLY,this.vertexShadowDarkness=.3,this.fillHighlightColor=void 0,this.hueShift=0,this.saturationShift=0,this.brightnessShift=0,this.showSkirts=!0,this.backFaceCulling=!0,this.undergroundColor=void 0,this.undergroundColorAlphaByDistance=void 0,this.lambertDiffuseMultiplier=0,this.materialUniformMap=void 0,this._materialUniformMap=void 0,this._quadtree=void 0,this._terrainProvider=e.terrainProvider,this._imageryLayers=e.imageryLayers,this._surfaceShaderSet=e.surfaceShaderSet,this._renderState=void 0,this._blendRenderState=void 0,this._disableCullingRenderState=void 0,this._disableCullingBlendRenderState=void 0,this._errorEvent=new be,this._removeLayerAddedListener=this._imageryLayers.layerAdded.addEventListener(or.prototype._onLayerAdded,this),this._removeLayerRemovedListener=this._imageryLayers.layerRemoved.addEventListener(or.prototype._onLayerRemoved,this),this._removeLayerMovedListener=this._imageryLayers.layerMoved.addEventListener(or.prototype._onLayerMoved,this),this._removeLayerShownListener=this._imageryLayers.layerShownOrHidden.addEventListener(or.prototype._onLayerShownOrHidden,this),this._imageryLayersUpdatedEvent=new be,this._layerOrderChanged=!1,this._tilesToRenderByTextureCount=[],this._drawCommands=[],this._uniformMaps=[],this._usedDrawCommands=0,this._vertexArraysToDestroy=[],this._debug={wireframe:!1,boundingSphereTile:void 0},this._baseColor=void 0,this._firstPassInitialColor=void 0,this.baseColor=new D(0,0,.5,1),this._clippingPlanes=void 0,this._clippingPolygons=void 0,this.cartographicLimitRectangle=ce.clone(ce.MAX_VALUE),this._hasLoadedTilesThisFrame=!1,this._hasFillTilesThisFrame=!1,this._oldVerticalExaggeration=void 0,this._oldVerticalExaggerationRelativeHeight=void 0}Object.defineProperties(or.prototype,{baseColor:{get:function(){return this._baseColor},set:function(e){this._baseColor=e,this._firstPassInitialColor=se.fromColor(e,this._firstPassInitialColor)}},quadtree:{get:function(){return this._quadtree},set:function(e){this._quadtree=e}},tilingScheme:{get:function(){if(l(this._terrainProvider))return this._terrainProvider.tilingScheme}},errorEvent:{get:function(){return this._errorEvent}},imageryLayersUpdatedEvent:{get:function(){return this._imageryLayersUpdatedEvent}},terrainProvider:{get:function(){return this._terrainProvider},set:function(e){this._terrainProvider!==e&&(this._terrainProvider=e,l(this._quadtree)&&this._quadtree.invalidateAllTiles())}},clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){fs.setOwner(e,this,"_clippingPlanes")}},clippingPolygons:{get:function(){return this._clippingPolygons},set:function(e){qm.setOwner(e,this,"_clippingPolygons")}}});function tct(e,t){let n=e.loadingImagery;l(n)||(n=e.readyImagery);let i=t.loadingImagery;return l(i)||(i=t.readyImagery),n.imageryLayer._layerIndex-i.imageryLayer._layerIndex}or.prototype.update=function(e){this._imageryLayers._update()};function nct(e,t){let n=t.creditDisplay,i=e._terrainProvider;l(i)&&l(i.credit)&&n.addCreditToNextFrame(i.credit);let o=e._imageryLayers;for(let r=0,s=o.length;r<s;++r){let a=o.get(r);a.ready&&a.show&&l(a.imageryProvider.credit)&&n.addCreditToNextFrame(a.imageryProvider.credit)}}or.prototype.initialize=function(e){this._imageryLayers.queueReprojectionCommands(e),this._layerOrderChanged&&(this._layerOrderChanged=!1,this._quadtree.forEachLoadedTile(function(i){i.data.imagery.sort(tct)})),nct(this,e);let t=this._vertexArraysToDestroy,n=t.length;for(let i=0;i<n;++i)mm._freeVertexArray(t[i]);t.length=0};or.prototype.beginUpdate=function(e){let t=this._tilesToRenderByTextureCount;for(let o=0,r=t.length;o<r;++o){let s=t[o];l(s)&&(s.length=0)}let n=this._clippingPlanes;l(n)&&n.enabled&&n.update(e);let i=this._clippingPolygons;l(i)&&i.enabled&&(i.update(e),i.queueCommands(e)),this._usedDrawCommands=0,this._hasLoadedTilesThisFrame=!1,this._hasFillTilesThisFrame=!1};or.prototype.endUpdate=function(e){if(!l(this._renderState)){this._renderState=Ue.fromCache({cull:{enabled:!0},depthTest:{enabled:!0,func:cc.LESS}}),this._blendRenderState=Ue.fromCache({cull:{enabled:!0},depthTest:{enabled:!0,func:cc.LESS_OR_EQUAL},blending:un.ALPHA_BLEND});let s=Ye(this._renderState,!0);s.cull.enabled=!1,this._disableCullingRenderState=Ue.fromCache(s),s=Ye(this._blendRenderState,!0),s.cull.enabled=!1,this._disableCullingBlendRenderState=Ue.fromCache(s)}this._hasFillTilesThisFrame&&this._hasLoadedTilesThisFrame&&jV.updateFillTiles(this,this._quadtree._tilesToRender,e,this._vertexArraysToDestroy);let t=this.quadtree,n=e.verticalExaggeration,i=e.verticalExaggerationRelativeHeight,o=this._oldVerticalExaggeration!==n||this._oldVerticalExaggerationRelativeHeight!==i;this._oldVerticalExaggeration=n,this._oldVerticalExaggerationRelativeHeight=i,o&&t.forEachLoadedTile(function(s){s.data.updateExaggeration(s,e,t)});let r=this._tilesToRenderByTextureCount;for(let s=0,a=r.length;s<a;++s){let c=r[s];if(l(c))for(let d=0,u=c.length;d<u;++d){let h=c[d],p=h.data.tileBoundingRegion;Rct(this,h,e),e.minimumTerrainHeight=Math.min(e.minimumTerrainHeight,p.minimumHeight)}}};function Jge(e,t){let n=t.globeTranslucencyState;if(n.translucent){let i=e.renderState.blending.enabled;n.pushDerivedCommands(e,i,t)}else t.commandList.push(e)}or.prototype.updateForPick=function(e){let t=this._drawCommands;for(let n=0,i=this._usedDrawCommands;n<i;++n)Jge(t[n],e)};or.prototype.cancelReprojections=function(){this._imageryLayers.cancelReprojections()};or.prototype.getLevelMaximumGeometricError=function(e){return l(this._terrainProvider)?this._terrainProvider.getLevelMaximumGeometricError(e):0};or.prototype.loadTile=function(e,t){let n=t.data,i=!0,o;l(n)&&(i=n.boundingVolumeSourceTile!==t||t._lastSelectionResult===Jn.CULLED_BUT_NEEDED,o=n.terrainState),mm.processStateMachine(t,e,this.terrainProvider,this._imageryLayers,this.quadtree,this._vertexArraysToDestroy,i),n=t.data,i&&o!==t.data.terrainState&&this.computeTileVisibility(t,e,this.quadtree.occluders)!==hr.NONE&&n.boundingVolumeSourceTile===t&&(i=!1,mm.processStateMachine(t,e,this.terrainProvider,this._imageryLayers,this.quadtree,this._vertexArraysToDestroy,i))};var ict=new le,Qge=new ce,oct=new ce,rct=new he;function YD(e,t){if(t.west<t.east)return t;let n=ce.clone(t,oct);return ce.center(e,rct).longitude>0?n.east=X.PI:n.west=-X.PI,n}function jge(e,t){if(t.cameraUnderground||t.globeTranslucencyState.translucent)return!0;if(e.backFaceCulling)return!1;let n=e._clippingPlanes;if(l(n)&&n.enabled)return!0;let i=e._clippingPolygons;return!!(l(i)&&i.enabled||!ce.equals(e.cartographicLimitRectangle,ce.MAX_VALUE))}or.prototype.computeTileVisibility=function(e,t,n){let i=this.computeDistanceToTile(e,t);e._distance=i;let o=jge(this,t);if(t.fog.enabled&&!o&&X.fog(i,t.fog.density)>=1)return hr.NONE;let r=e.data,s=r.tileBoundingRegion;if(r.boundingVolumeSourceTile===void 0)return hr.PARTIAL;let a=t.cullingVolume,c=s.boundingVolume;l(c)||(c=s.boundingSphere),r.clippedByBoundaries=!1;let d=YD(e.rectangle,this.cartographicLimitRectangle),u=ce.simpleIntersection(d,e.rectangle,Qge);if(!l(u))return hr.NONE;if(ce.equals(u,e.rectangle)||(r.clippedByBoundaries=!0),t.mode!==oe.SCENE3D&&(c=ict,le.fromRectangleWithHeights2D(e.rectangle,t.mapProjection,s.minimumHeight,s.maximumHeight,c),m.fromElements(c.center.z,c.center.x,c.center.y,c.center),t.mode===oe.MORPHING&&l(r.renderedMesh)&&(c=le.union(s.boundingSphere,c,c))),!l(c))return hr.PARTIAL;let h=this._clippingPlanes;if(l(h)&&h.enabled){let x=h.computeIntersectionWithBoundingVolume(c);if(e.isClipped=x!==zt.INSIDE,x===zt.OUTSIDE)return hr.NONE}let p=this._clippingPolygons;if(l(p)&&p.enabled){let x=p.computeIntersectionWithBoundingVolume(s);e.isClipped=x!==zt.OUTSIDE}let g,f=a.computeVisibility(c);if(f===zt.OUTSIDE?g=hr.NONE:f===zt.INTERSECTING?g=hr.PARTIAL:f===zt.INSIDE&&(g=hr.FULL),g===hr.NONE)return g;let y=t.mode===oe.SCENE3D&&t.camera.frustum instanceof an;if(t.mode===oe.SCENE3D&&!y&&l(n)&&!o){let x=r.occludeePointInScaledSpace;return!l(x)||n.ellipsoid.isScaledSpacePointVisiblePossiblyUnderEllipsoid(x,s.minimumHeight)?g:hr.NONE}return g};or.prototype.canRefine=function(e){return l(e.data.terrainData)?!0:this.terrainProvider.getTileDataAvailable(e.x*2,e.y*2,e.level+1)!==void 0};var sct=[],act=[];or.prototype.canRenderWithoutLosingDetail=function(e,t){let n=e.data,i=sct;i.length=this._imageryLayers.length;let o=!1,r=!1,s;l(n)&&(o=n.terrainState===mo.READY,r=!0,s=n.imagery);let a,c;for(a=0,c=i.length;a<c;++a)i[a]=r;if(l(s))for(a=0,c=s.length;a<c;++a){let h=s[a],p=h.loadingImagery,g=!l(p)||p.state===ci.FAILED||p.state===ci.INVALID,f=(h.loadingImagery||h.readyImagery).imageryLayer._layerIndex;i[f]=g&&i[f]}let d=this.quadtree._lastSelectionFrameNumber,u=act;for(u.length=0,u.push(e.southwestChild,e.southeastChild,e.northwestChild,e.northeastChild);u.length>0;){let h=u.pop(),p=h._lastSelectionResultFrame===d?h._lastSelectionResult:Jn.NONE;if(p===Jn.RENDERED){let g=h.data;if(!l(g))continue;if(!o&&h.data.terrainState===mo.READY)return!1;let f=h.data.imagery;for(a=0,c=f.length;a<c;++a){let y=f[a],x=y.loadingImagery,S=!l(x)||x.state===ci.FAILED||x.state===ci.INVALID,C=(y.loadingImagery||y.readyImagery).imageryLayer._layerIndex;if(S&&!i[C])return!1}}else p===Jn.REFINED&&u.push(h.southwestChild,h.southeastChild,h.northwestChild,h.northeastChild)}return!0};var cct=new m;or.prototype.computeTileLoadPriority=function(e,t){let n=e.data;if(n===void 0)return 0;let i=n.tileBoundingRegion.boundingVolume;if(i===void 0)return 0;let o=t.camera.positionWC,r=t.camera.directionWC,s=m.subtract(i.center,o,cct),a=m.magnitude(s);return a<X.EPSILON5?0:(m.divideByScalar(s,a,s),(1-m.dot(s,r))*e._distance)};var Yge=new F,OD=new F,lct=new se,dct=new se,uct=new se,mct=new m,zge=new m,hct=new m,fct=new m;or.prototype.showTileThisFrame=function(e,t){let n=0,i=e.data.imagery;for(let a=0,c=i.length;a<c;++a){let d=i[a];l(d.readyImagery)&&d.readyImagery.imageryLayer.alpha!==0&&++n}let o=this._tilesToRenderByTextureCount[n];l(o)||(o=[],this._tilesToRenderByTextureCount[n]=o),o.push(e);let r=e.data;l(r.vertexArray)?this._hasLoadedTilesThisFrame=!0:this._hasFillTilesThisFrame=!0;let s=this._debug;++s.tilesRendered,s.texturesRendered+=n};var pct=[new m,new m,new m,new m];function Hge(e,t,n,i,o,r){let s=e.quadtree._occluders.ellipsoid,a=s.ellipsoid,c=pct;return m.fromRadians(n.west,n.south,o,a,c[0]),m.fromRadians(n.east,n.south,o,a,c[1]),m.fromRadians(n.west,n.north,o,a,c[2]),m.fromRadians(n.east,n.north,o,a,c[3]),s.computeHorizonCullingPointPossiblyUnderEllipsoid(t,c,i,r)}or.prototype.computeDistanceToTile=function(e,t){bct(e,this,t);let n=e.data;if(n.boundingVolumeSourceTile===void 0)return 9999999999;let o=n.tileBoundingRegion,r=o.minimumHeight,s=o.maximumHeight;if(n.boundingVolumeSourceTile!==e){let c=t.camera.positionCartographic.height,d=Math.abs(c-r),u=Math.abs(c-s);d>u?(o.minimumHeight=r,o.maximumHeight=r):(o.minimumHeight=s,o.maximumHeight=s)}let a=o.distanceToCamera(t);return o.minimumHeight=r,o.maximumHeight=s,a};function bct(e,t,n){let i=e.data;i===void 0&&(i=e.data=new mm);let o=e.tilingScheme.ellipsoid;i.tileBoundingRegion===void 0&&(i.tileBoundingRegion=new Xd({computeBoundingVolumes:!1,rectangle:e.rectangle,ellipsoid:o,minimumHeight:0,maximumHeight:0}));let r=i.tileBoundingRegion,s=r.minimumHeight,a=r.maximumHeight,c=!1,d=e,u=i.mesh,h=i.terrainData;if(u!==void 0&&u.minimumHeight!==void 0&&u.maximumHeight!==void 0)r.minimumHeight=u.minimumHeight,r.maximumHeight=u.maximumHeight,c=!0;else if(h!==void 0&&h._minimumHeight!==void 0&&h._maximumHeight!==void 0)r.minimumHeight=h._minimumHeight,r.maximumHeight=h._maximumHeight;else{r.minimumHeight=Number.NaN,r.maximumHeight=Number.NaN;let p=e.parent;for(;p!==void 0;){let g=p.data;if(g!==void 0){let f=g.mesh,y=g.terrainData;if(f!==void 0&&f.minimumHeight!==void 0&&f.maximumHeight!==void 0){r.minimumHeight=f.minimumHeight,r.maximumHeight=f.maximumHeight;break}else if(y!==void 0&&y._minimumHeight!==void 0&&y._maximumHeight!==void 0){r.minimumHeight=y._minimumHeight,r.maximumHeight=y._maximumHeight;break}}p=p.parent}d=p}if(d!==void 0){let p=n.verticalExaggeration,g=n.verticalExaggerationRelativeHeight;if(p!==1&&(c=!1,r.minimumHeight=Tr.getHeight(r.minimumHeight,p,g),r.maximumHeight=Tr.getHeight(r.maximumHeight,p,g)),c)i.boundingVolumeIsFromMesh||(r._orientedBoundingBox=En.clone(u.orientedBoundingBox,r._orientedBoundingBox),r._boundingSphere=le.clone(u.boundingSphere3D,r._boundingSphere),i.occludeePointInScaledSpace=m.clone(u.occludeePointInScaledSpace,i.occludeePointInScaledSpace),l(i.occludeePointInScaledSpace)||(i.occludeePointInScaledSpace=Hge(t,r._orientedBoundingBox.center,e.rectangle,r.minimumHeight,r.maximumHeight,i.occludeePointInScaledSpace)));else{let y=r._orientedBoundingBox===void 0||r._boundingSphere===void 0;(r.minimumHeight!==s||r.maximumHeight!==a||y)&&(r.computeBoundingVolumes(o),i.occludeePointInScaledSpace=Hge(t,r._orientedBoundingBox.center,e.rectangle,r.minimumHeight,r.maximumHeight,i.occludeePointInScaledSpace))}i.boundingVolumeSourceTile=d,i.boundingVolumeIsFromMesh=c}else i.boundingVolumeSourceTile=void 0,i.boundingVolumeIsFromMesh=!1}or.prototype.isDestroyed=function(){return!1};or.prototype.destroy=function(){return this._tileProvider=this._tileProvider&&this._tileProvider.destroy(),this._clippingPlanes=this._clippingPlanes&&this._clippingPlanes.destroy(),this._clippingPolygons=this._clippingPolygons&&this._clippingPolygons.destroy(),this._removeLayerAddedListener=this._removeLayerAddedListener&&this._removeLayerAddedListener(),this._removeLayerRemovedListener=this._removeLayerRemovedListener&&this._removeLayerRemovedListener(),this._removeLayerMovedListener=this._removeLayerMovedListener&&this._removeLayerMovedListener(),this._removeLayerShownListener=this._removeLayerShownListener&&this._removeLayerShownListener(),me(this)};function gct(e,t,n){return function(i){let o,r,s=-1,a=i.data.imagery,c=a.length,d;for(d=0;d<c;++d)if(o=a[d],r=o.readyImagery??o.loadingImagery,r.imageryLayer===t){s=d;break}if(s!==-1){let u=s+e;if(o=a[u],r=l(o)?o.readyImagery??o.loadingImagery:void 0,!l(r)||r.imageryLayer!==t)return!t._createTileImagerySkeletons(i,n,u);for(d=s;d<u;++d)a[d].freeResources();a.splice(s,e)}return!0}}or.prototype._onLayerAdded=function(e,t){if(!this.isDestroyed()&&e.show){let n=this._terrainProvider,i=this,o=this._imageryLayersUpdatedEvent,r=function(){e._imageryCache={},i._quadtree.forEachLoadedTile(function(s){if(l(s._loadedCallbacks[e._layerIndex]))return;let a,c=s.data.imagery,d=c.length,u=-1,h=0;for(a=0;a<d;++a){let g=c[a];if((g.readyImagery??g.loadingImagery).imageryLayer===e)u===-1&&(u=a),++h;else if(u!==-1)break}if(u===-1)return;let p=u+h;e._createTileImagerySkeletons(s,n,p)&&(s._loadedCallbacks[e._layerIndex]=gct(h,e,n),s.state=ta.LOADING)})};if(e.ready){let s=e.imageryProvider;s._reload=r}this._quadtree.forEachLoadedTile(function(s){e._createTileImagerySkeletons(s,n)&&(s.state=ta.LOADING,s.level!==0&&(s._lastSelectionResultFrame!==i.quadtree._lastSelectionFrameNumber||s._lastSelectionResult!==Jn.RENDERED)&&(s.renderable=!1))}),this._layerOrderChanged=!0,o.raiseEvent()}};or.prototype._onLayerRemoved=function(e,t){this._quadtree.forEachLoadedTile(function(n){let i=n.data.imagery,o=-1,r=0;for(let s=0,a=i.length;s<a;++s){let c=i[s],d=c.loadingImagery;if(l(d)||(d=c.readyImagery),d.imageryLayer===e)o===-1&&(o=s),c.freeResources(),++r;else if(o!==-1)break}o!==-1&&i.splice(o,r)}),l(e.imageryProvider)&&(e.imageryProvider._reload=void 0),this._imageryLayersUpdatedEvent.raiseEvent()};or.prototype._onLayerMoved=function(e,t,n){this._layerOrderChanged=!0,this._imageryLayersUpdatedEvent.raiseEvent()};or.prototype._onLayerShownOrHidden=function(e,t,n){n?this._onLayerAdded(e,t):this._onLayerRemoved(e,t)};var yct=new F,xct=new F;function Kge(e,t){let n={u_initialColor:function(){return this.properties.initialColor},u_fillHighlightColor:function(){return this.properties.fillHighlightColor},u_zoomedOutOceanSpecularIntensity:function(){return this.properties.zoomedOutOceanSpecularIntensity},u_oceanNormalMap:function(){return this.properties.oceanNormalMap},u_atmosphereLightIntensity:function(){return this.properties.atmosphereLightIntensity},u_atmosphereRayleighCoefficient:function(){return this.properties.atmosphereRayleighCoefficient},u_atmosphereMieCoefficient:function(){return this.properties.atmosphereMieCoefficient},u_atmosphereRayleighScaleHeight:function(){return this.properties.atmosphereRayleighScaleHeight},u_atmosphereMieScaleHeight:function(){return this.properties.atmosphereMieScaleHeight},u_atmosphereMieAnisotropy:function(){return this.properties.atmosphereMieAnisotropy},u_lightingFadeDistance:function(){return this.properties.lightingFadeDistance},u_nightFadeDistance:function(){return this.properties.nightFadeDistance},u_center3D:function(){return this.properties.center3D},u_verticalExaggerationAndRelativeHeight:function(){return this.properties.verticalExaggerationAndRelativeHeight},u_tileRectangle:function(){return this.properties.tileRectangle},u_modifiedModelView:function(){let i=e.context.uniformState.view,o=F.multiplyByPoint(i,this.properties.rtc,zge);return F.setTranslation(i,o,Yge),Yge},u_modifiedModelViewProjection:function(){let i=e.context.uniformState.view,o=e.context.uniformState.projection,r=F.multiplyByPoint(i,this.properties.rtc,zge);return F.setTranslation(i,r,OD),F.multiply(o,OD,OD),OD},u_dayTextures:function(){return this.properties.dayTextures},u_dayTextureTranslationAndScale:function(){return this.properties.dayTextureTranslationAndScale},u_dayTextureTexCoordsRectangle:function(){return this.properties.dayTextureTexCoordsRectangle},u_dayTextureUseWebMercatorT:function(){return this.properties.dayTextureUseWebMercatorT},u_dayTextureAlpha:function(){return this.properties.dayTextureAlpha},u_dayTextureNightAlpha:function(){return this.properties.dayTextureNightAlpha},u_dayTextureDayAlpha:function(){return this.properties.dayTextureDayAlpha},u_dayTextureBrightness:function(){return this.properties.dayTextureBrightness},u_dayTextureContrast:function(){return this.properties.dayTextureContrast},u_dayTextureHue:function(){return this.properties.dayTextureHue},u_dayTextureSaturation:function(){return this.properties.dayTextureSaturation},u_dayTextureOneOverGamma:function(){return this.properties.dayTextureOneOverGamma},u_dayIntensity:function(){return this.properties.dayIntensity},u_southAndNorthLatitude:function(){return this.properties.southAndNorthLatitude},u_southMercatorYAndOneOverHeight:function(){return this.properties.southMercatorYAndOneOverHeight},u_waterMask:function(){return this.properties.waterMask},u_waterMaskTranslationAndScale:function(){return this.properties.waterMaskTranslationAndScale},u_minMaxHeight:function(){return this.properties.minMaxHeight},u_scaleAndBias:function(){return this.properties.scaleAndBias},u_dayTextureSplit:function(){return this.properties.dayTextureSplit},u_dayTextureCutoutRectangles:function(){return this.properties.dayTextureCutoutRectangles},u_clippingPlanes:function(){let i=t._clippingPlanes;return l(i)&&l(i.texture)?i.texture:e.context.defaultTexture},u_cartographicLimitRectangle:function(){return this.properties.localizedCartographicLimitRectangle},u_clippingPlanesMatrix:function(){let i=t._clippingPlanes,o=l(i)?F.multiply(e.context.uniformState.view,i.modelMatrix,yct):F.IDENTITY;return F.inverseTranspose(o,xct)},u_clippingPlanesEdgeStyle:function(){let i=this.properties.clippingPlanesEdgeColor;return i.alpha=this.properties.clippingPlanesEdgeWidth,i},u_clippingDistance:function(){let i=t._clippingPolygons.clippingTexture;return l(i)?i:e.context.defaultTexture},u_clippingExtents:function(){let i=t._clippingPolygons.extentsTexture;return l(i)?i:e.context.defaultTexture},u_minimumBrightness:function(){return e.fog.minimumBrightness},u_hsbShift:function(){return this.properties.hsbShift},u_colorsToAlpha:function(){return this.properties.colorsToAlpha},u_frontFaceAlphaByDistance:function(){return this.properties.frontFaceAlphaByDistance},u_backFaceAlphaByDistance:function(){return this.properties.backFaceAlphaByDistance},u_translucencyRectangle:function(){return this.properties.localizedTranslucencyRectangle},u_undergroundColor:function(){return this.properties.undergroundColor},u_undergroundColorAlphaByDistance:function(){return this.properties.undergroundColorAlphaByDistance},u_lambertDiffuseMultiplier:function(){return this.properties.lambertDiffuseMultiplier},u_vertexShadowDarkness:function(){return this.properties.vertexShadowDarkness},properties:{initialColor:new se(0,0,.5,1),fillHighlightColor:new D(0,0,0,0),zoomedOutOceanSpecularIntensity:.5,oceanNormalMap:void 0,lightingFadeDistance:new U(65e5,9e6),nightFadeDistance:new U(1e7,4e7),atmosphereLightIntensity:10,atmosphereRayleighCoefficient:new m(55e-7,13e-6,284e-7),atmosphereMieCoefficient:new m(21e-6,21e-6,21e-6),atmosphereRayleighScaleHeight:1e4,atmosphereMieScaleHeight:3200,atmosphereMieAnisotropy:.9,hsbShift:new m,center3D:void 0,rtc:new m,modifiedModelView:new F,tileRectangle:new se,verticalExaggerationAndRelativeHeight:new U(1,0),dayTextures:[],dayTextureTranslationAndScale:[],dayTextureTexCoordsRectangle:[],dayTextureUseWebMercatorT:[],dayTextureAlpha:[],dayTextureNightAlpha:[],dayTextureDayAlpha:[],dayTextureBrightness:[],dayTextureContrast:[],dayTextureHue:[],dayTextureSaturation:[],dayTextureOneOverGamma:[],dayTextureSplit:[],dayTextureCutoutRectangles:[],dayIntensity:0,colorsToAlpha:[],southAndNorthLatitude:new U,southMercatorYAndOneOverHeight:new U,waterMask:void 0,waterMaskTranslationAndScale:new se,minMaxHeight:new U,scaleAndBias:new F,clippingPlanesEdgeColor:D.clone(D.WHITE),clippingPlanesEdgeWidth:0,localizedCartographicLimitRectangle:new se,frontFaceAlphaByDistance:new se,backFaceAlphaByDistance:new se,localizedTranslucencyRectangle:new se,undergroundColor:D.clone(D.TRANSPARENT),undergroundColorAlphaByDistance:new se,lambertDiffuseMultiplier:0,vertexShadowDarkness:0}};return l(t.materialUniformMap)?St(n,t.materialUniformMap):n}function _ct(e,t,n){let i=n.data,o,r;if(l(i.vertexArray)?(o=i.mesh,r=i.vertexArray):l(i.fill)&&l(i.fill.vertexArray)&&(o=i.fill.mesh,r=i.fill.vertexArray),!(!l(o)||!l(r))){if(l(i.wireframeVertexArray)){if(i.wireframeVertexArray.mesh===o)return;i.wireframeVertexArray.destroy(),i.wireframeVertexArray=void 0}i.wireframeVertexArray=Tct(e,r,o),i.wireframeVertexArray.mesh=o}}function Tct(e,t,n){let o={indices:n.indices,primitiveType:we.TRIANGLES};Fn.toWireframe(o);let r=o.indices,s=xt.createIndexBuffer({context:e,typedArray:r,usage:Me.STATIC_DRAW,indexDatatype:Ae.fromSizeInBytes(r.BYTES_PER_ELEMENT)});return new ni({context:e,attributes:t._attributes,indexBuffer:s})}var qge,$ge,zD;(function(){let e=new Et({geometry:Fm.fromDimensions({dimensions:new m(2,2,2)})}),t=new Et({geometry:new Xb({radius:1})}),n=new F,i,o;function r(s){return new In({geometryInstances:s,appearance:new dn({translucent:!1,flat:!0}),asynchronous:!1})}qge=function(s,a){return s===i||(zD(),i=s,n=F.fromRotationTranslation(s.halfAxes,s.center,n),e.modelMatrix=n,e.attributes.color=Yt.fromColor(a),o=r(e)),o},$ge=function(s,a){return s===i||(zD(),i=s,n=F.fromTranslation(s.center,n),n=F.multiplyByUniformScale(n,s.radius,n),t.modelMatrix=n,t.attributes.color=Yt.fromColor(a),o=r(t)),o},zD=function(){l(o)&&(o.destroy(),o=void 0,i=void 0)}})();var Sct=new se(0,0,0,0),Cct={frameState:void 0,surfaceTile:void 0,numberOfDayTextures:void 0,applyBrightness:void 0,applyContrast:void 0,applyHue:void 0,applySaturation:void 0,applyGamma:void 0,applyAlpha:void 0,applyDayNightAlpha:void 0,applySplit:void 0,showReflectiveOcean:void 0,showOceanWaves:void 0,enableLighting:void 0,dynamicAtmosphereLighting:void 0,dynamicAtmosphereLightingFromSun:void 0,showGroundAtmosphere:void 0,perFragmentGroundAtmosphere:void 0,hasVertexNormals:void 0,useWebMercatorProjection:void 0,enableFog:void 0,enableClippingPlanes:void 0,clippingPlanes:void 0,enableClippingPolygons:void 0,clippingPolygons:void 0,clippedByBoundaries:void 0,hasImageryLayerCutout:void 0,colorCorrect:void 0,colorToAlpha:void 0,hasGeodeticSurfaceNormals:void 0,hasExaggeration:void 0},Vct=D.TRANSPARENT,Lct=new kt;function Rct(e,t,n){let i=t.data;l(i.vertexArray)||(i.fill===void 0&&(i.fill=new jV(t)),i.fill.update(e,n));let o=n.creditDisplay,r=i.terrainData;if(l(r)&&l(r.credits)){let ge=r.credits;for(let Ve=0,bn=ge.length;Ve<bn;++Ve)o.addCreditToNextFrame(ge[Ve])}let s=Nt.maximumTextureImageUnits,a=i.waterMaskTexture,c=i.waterMaskTranslationAndScale;!l(a)&&l(i.fill)&&(a=i.fill.waterMaskTexture,c=i.fill.waterMaskTranslationAndScale);let d=n.cameraUnderground,u=n.globeTranslucencyState,h=u.translucent,p=u.frontFaceAlphaByDistance,g=u.backFaceAlphaByDistance,f=u.rectangle,y=e.undergroundColor??Vct,x=e.undergroundColorAlphaByDistance??Lct,S=jge(e,n)&&n.mode===oe.SCENE3D&&y.alpha>0&&(x.nearValue>0||x.farValue>0),C=e.lambertDiffuseMultiplier,V=e.vertexShadowDarkness,L=e.hasWaterMask&&l(a),Z=L&&e.showWaterEffect,E=e.oceanNormalMap,P=Z&&l(E),W=e.terrainProvider,v=l(W)&&e.terrainProvider.hasVertexNormals,A=n.fog.enabled&&n.fog.renderable&&!d,b=e.showGroundAtmosphere&&n.mode===oe.SCENE3D,R=_n.castShadows(e.shadows)&&!h,G=_n.receiveShadows(e.shadows)&&!h,I=e.hueShift,w=e.saturationShift,M=e.brightnessShift,B=!(X.equalsEpsilon(I,0,X.EPSILON7)&&X.equalsEpsilon(w,0,X.EPSILON7)&&X.equalsEpsilon(M,0,X.EPSILON7)),k=!1;if(b){let ge=m.magnitude(n.camera.positionWC),Ve=e.nightFadeOutDistance;k=ge>Ve}L&&--s,P&&--s,l(n.shadowState)&&n.shadowState.shadowsEnabled&&--s,l(e.clippingPlanes)&&e.clippingPlanes.enabled&&--s,l(e.clippingPolygons)&&e.clippingPolygons.enabled&&(--s,--s),s-=u.numberOfTextureUniforms;let O=i.renderedMesh,N=O.center,z=O.encoding,K=i.tileBoundingRegion,te=n.verticalExaggeration,H=n.verticalExaggerationRelativeHeight,j=te!==1,ee=z.hasGeodeticSurfaceNormals,fe=lct,Te=0,de=0,xe=0,Ce=0,Ie=!1;if(n.mode!==oe.SCENE3D){let ge=n.mapProjection,Ve=ge.project(ce.southwest(t.rectangle),hct),bn=ge.project(ce.northeast(t.rectangle),fct);if(fe.x=Ve.x,fe.y=Ve.y,fe.z=bn.x,fe.w=bn.y,n.mode!==oe.MORPHING&&(N=mct,N.x=0,N.y=(fe.z+fe.x)*.5,N.z=(fe.w+fe.y)*.5,fe.x-=N.y,fe.y-=N.z,fe.z-=N.y,fe.w-=N.z),n.mode===oe.SCENE2D&&z.quantization===ea.BITS12){let pt=1/(Math.pow(2,12)-1)*.5,so=(fe.z-fe.x)*pt,Eo=(fe.w-fe.y)*pt;fe.x-=so,fe.y-=Eo,fe.z+=so,fe.w+=Eo}ge instanceof Xi&&(Te=t.rectangle.south,de=t.rectangle.north,xe=Xi.geodeticLatitudeToMercatorAngle(Te),Ce=1/(Xi.geodeticLatitudeToMercatorAngle(de)-xe),Ie=!0)}let Le=Cct;Le.frameState=n,Le.surfaceTile=i,Le.hasWaterMask=L,Le.showReflectiveOcean=Z,Le.showOceanWaves=P,Le.enableLighting=e.enableLighting,Le.dynamicAtmosphereLighting=e.dynamicAtmosphereLighting,Le.dynamicAtmosphereLightingFromSun=e.dynamicAtmosphereLightingFromSun,Le.showGroundAtmosphere=b,Le.atmosphereLightIntensity=e.atmosphereLightIntensity,Le.atmosphereRayleighCoefficient=e.atmosphereRayleighCoefficient,Le.atmosphereMieCoefficient=e.atmosphereMieCoefficient,Le.atmosphereRayleighScaleHeight=e.atmosphereRayleighScaleHeight,Le.atmosphereMieScaleHeight=e.atmosphereMieScaleHeight,Le.atmosphereMieAnisotropy=e.atmosphereMieAnisotropy,Le.perFragmentGroundAtmosphere=k,Le.hasVertexNormals=v,Le.useWebMercatorProjection=Ie,Le.clippedByBoundaries=i.clippedByBoundaries,Le.hasGeodeticSurfaceNormals=ee,Le.hasExaggeration=j;let Ne=i.imagery,Oe=0,qe=Ne.length,Rt=e.showSkirts&&!d&&!h,Lt=e.backFaceCulling&&!d&&!h,ke=Lt?e._renderState:e._disableCullingRenderState,Ht=Lt?e._blendRenderState:e._disableCullingBlendRenderState,ut=ke,mt=e._firstPassInitialColor,Pn=n.context;if(l(e._debug.boundingSphereTile)||zD(),e._materialUniformMap!==e.materialUniformMap){e._materialUniformMap=e.materialUniformMap;let ge=e._drawCommands.length;for(let Ve=0;Ve<ge;++Ve)e._uniformMaps[Ve]=Kge(n,e)}do{let ge=0,Ve,bn;if(e._drawCommands.length<=e._usedDrawCommands?(Ve=new $e,Ve.owner=t,Ve.cull=!1,Ve.boundingVolume=new le,Ve.orientedBoundingBox=void 0,bn=Kge(n,e),e._drawCommands.push(Ve),e._uniformMaps.push(bn)):(Ve=e._drawCommands[e._usedDrawCommands],bn=e._uniformMaps[e._usedDrawCommands]),Ve.owner=t,++e._usedDrawCommands,t===e._debug.boundingSphereTile){let la=K.boundingVolume,Sl=K.boundingSphere;l(la)?qge(la,D.RED).update(n):l(Sl)&&$ge(Sl,D.RED).update(n)}let pt=bn.properties;se.clone(mt,pt.initialColor),pt.oceanNormalMap=E,pt.lightingFadeDistance.x=e.lightingFadeOutDistance,pt.lightingFadeDistance.y=e.lightingFadeInDistance,pt.nightFadeDistance.x=e.nightFadeOutDistance,pt.nightFadeDistance.y=e.nightFadeInDistance,pt.atmosphereLightIntensity=e.atmosphereLightIntensity,pt.atmosphereRayleighCoefficient=e.atmosphereRayleighCoefficient,pt.atmosphereMieCoefficient=e.atmosphereMieCoefficient,pt.atmosphereRayleighScaleHeight=e.atmosphereRayleighScaleHeight,pt.atmosphereMieScaleHeight=e.atmosphereMieScaleHeight,pt.atmosphereMieAnisotropy=e.atmosphereMieAnisotropy,pt.zoomedOutOceanSpecularIntensity=e.zoomedOutOceanSpecularIntensity;let so=d?g:p,Eo=d?p:g;l(so)&&(se.fromElements(so.near,so.nearValue,so.far,so.farValue,pt.frontFaceAlphaByDistance),se.fromElements(Eo.near,Eo.nearValue,Eo.far,Eo.farValue,pt.backFaceAlphaByDistance)),se.fromElements(x.near,x.nearValue,x.far,x.farValue,pt.undergroundColorAlphaByDistance),D.clone(y,pt.undergroundColor),pt.lambertDiffuseMultiplier=C,pt.vertexShadowDarkness=V;let aa=!l(i.vertexArray)&&l(e.fillHighlightColor)&&e.fillHighlightColor.alpha>0;aa&&D.clone(e.fillHighlightColor,pt.fillHighlightColor),pt.verticalExaggerationAndRelativeHeight.x=te,pt.verticalExaggerationAndRelativeHeight.y=H,pt.center3D=O.center,m.clone(N,pt.rtc),se.clone(fe,pt.tileRectangle),pt.southAndNorthLatitude.x=Te,pt.southAndNorthLatitude.y=de,pt.southMercatorYAndOneOverHeight.x=xe,pt.southMercatorYAndOneOverHeight.y=Ce;let Gr=dct,Ts=YD(t.rectangle,e.cartographicLimitRectangle),Fe=uct,rt=YD(t.rectangle,f);m.fromElements(I,w,M,pt.hsbShift);let He=t.rectangle,Qe=1/He.width,bt=1/He.height;Gr.x=(Ts.west-He.west)*Qe,Gr.y=(Ts.south-He.south)*bt,Gr.z=(Ts.east-He.west)*Qe,Gr.w=(Ts.north-He.south)*bt,se.clone(Gr,pt.localizedCartographicLimitRectangle),Fe.x=(rt.west-He.west)*Qe,Fe.y=(rt.south-He.south)*bt,Fe.z=(rt.east-He.west)*Qe,Fe.w=(rt.north-He.south)*bt,se.clone(Fe,pt.localizedTranslucencyRectangle);let Ot=A&&X.fog(t._distance,n.fog.density)>X.EPSILON3;B=B&&(Ot||b);let Cn=!1,Io=!1,So=!1,Qa=!1,ja=!1,Vi=!1,gi=!1,ca=!1,Hr=!1,Tl=!1;for(;ge<s&&Oe<qe;){let la=Ne[Oe],Sl=la.readyImagery;if(++Oe,!l(Sl)||Sl.imageryLayer.alpha===0)continue;let Pc=la.useWebMercatorT?Sl.textureWebMercator:Sl.texture,ls=Sl.imageryLayer;l(la.textureTranslationAndScale)||(la.textureTranslationAndScale=ls._calculateTextureTranslationAndScale(t,la)),pt.dayTextures[ge]=Pc,pt.dayTextureTranslationAndScale[ge]=la.textureTranslationAndScale,pt.dayTextureTexCoordsRectangle[ge]=la.textureCoordinateRectangle,pt.dayTextureUseWebMercatorT[ge]=la.useWebMercatorT,pt.dayTextureAlpha[ge]=ls.alpha,Vi=Vi||pt.dayTextureAlpha[ge]!==1,pt.dayTextureNightAlpha[ge]=ls.nightAlpha,gi=gi||pt.dayTextureNightAlpha[ge]!==1,pt.dayTextureDayAlpha[ge]=ls.dayAlpha,gi=gi||pt.dayTextureDayAlpha[ge]!==1,pt.dayTextureBrightness[ge]=ls.brightness,Cn=Cn||pt.dayTextureBrightness[ge]!==za.DEFAULT_BRIGHTNESS,pt.dayTextureContrast[ge]=ls.contrast,Io=Io||pt.dayTextureContrast[ge]!==za.DEFAULT_CONTRAST,pt.dayTextureHue[ge]=ls.hue,So=So||pt.dayTextureHue[ge]!==za.DEFAULT_HUE,pt.dayTextureSaturation[ge]=ls.saturation,Qa=Qa||pt.dayTextureSaturation[ge]!==za.DEFAULT_SATURATION,pt.dayTextureOneOverGamma[ge]=1/ls.gamma,ja=ja||pt.dayTextureOneOverGamma[ge]!==1/za.DEFAULT_GAMMA,pt.dayTextureSplit[ge]=ls.splitDirection,ca=ca||pt.dayTextureSplit[ge]!==0;let hu=pt.dayTextureCutoutRectangles[ge];if(l(hu)||(hu=pt.dayTextureCutoutRectangles[ge]=new se),se.clone(se.ZERO,hu),l(ls.cutoutRectangle)){let Fo=YD(He,ls.cutoutRectangle),ln=ce.simpleIntersection(Fo,He,Qge);Hr=l(ln)||Hr,hu.x=(Fo.west-He.west)*Qe,hu.y=(Fo.south-He.south)*bt,hu.z=(Fo.east-He.west)*Qe,hu.w=(Fo.north-He.south)*bt}let fu=pt.colorsToAlpha[ge];l(fu)||(fu=pt.colorsToAlpha[ge]=new se);let pu=l(ls.colorToAlpha)&&ls.colorToAlphaThreshold>0;if(Tl=Tl||pu,pu){let Fo=ls.colorToAlpha;fu.x=Fo.red,fu.y=Fo.green,fu.z=Fo.blue,fu.w=ls.colorToAlphaThreshold}else fu.w=-1;if(l(Sl.credits)){let Fo=Sl.credits;for(let ln=0,Re=Fo.length;ln<Re;++ln)o.addCreditToNextFrame(Fo[ln])}++ge}pt.dayTextures.length=ge,pt.waterMask=a,se.clone(c,pt.waterMaskTranslationAndScale),pt.minMaxHeight.x=z.minimumHeight,pt.minMaxHeight.y=z.maximumHeight,F.clone(z.matrix,pt.scaleAndBias);let go=e._clippingPlanes,Er=l(go)&&go.enabled&&t.isClipped;Er&&(pt.clippingPlanesEdgeColor=D.clone(go.edgeColor,pt.clippingPlanesEdgeColor),pt.clippingPlanesEdgeWidth=go.edgeWidth);let gp=e._clippingPolygons,Kr=l(gp)&&gp.enabled&&t.isClipped;Le.numberOfDayTextures=ge,Le.applyBrightness=Cn,Le.applyContrast=Io,Le.applyHue=So,Le.applySaturation=Qa,Le.applyGamma=ja,Le.applyAlpha=Vi,Le.applyDayNightAlpha=gi,Le.applySplit=ca,Le.enableFog=Ot,Le.enableClippingPlanes=Er,Le.clippingPlanes=go,Le.enableClippingPolygons=Kr,Le.clippingPolygons=gp,Le.hasImageryLayerCutout=Hr,Le.colorCorrect=B,Le.highlightFillTile=aa,Le.colorToAlpha=Tl,Le.showUndergroundColor=S,Le.translucent=h;let mu=i.renderedMesh.indices.length;Rt||(mu=i.renderedMesh.indexCountWithoutSkirts),Ve.shaderProgram=e._surfaceShaderSet.getShaderProgram(Le),Ve.castShadows=R,Ve.receiveShadows=G,Ve.renderState=ut,Ve.primitiveType=we.TRIANGLES,Ve.vertexArray=i.vertexArray||i.fill.vertexArray,Ve.count=mu,Ve.uniformMap=bn,Ve.pass=Ee.GLOBE,e._debug.wireframe&&(_ct(Pn,e,t),l(i.wireframeVertexArray)&&(Ve.vertexArray=i.wireframeVertexArray,Ve.primitiveType=we.LINES,Ve.count=mu*2));let qa=Ve.boundingVolume,qy=Ve.orientedBoundingBox;n.mode!==oe.SCENE3D?(le.fromRectangleWithHeights2D(t.rectangle,n.mapProjection,K.minimumHeight,K.maximumHeight,qa),m.fromElements(qa.center.z,qa.center.x,qa.center.y,qa.center),n.mode===oe.MORPHING&&(qa=le.union(K.boundingSphere,qa,qa))):(Ve.boundingVolume=le.clone(K.boundingSphere,qa),Ve.orientedBoundingBox=En.clone(K.boundingVolume,qy)),Ve.dirty=!0,h&&u.updateDerivedCommands(Ve,n),Jge(Ve,n),ut=Ht,mt=Sct}while(Oe<qe)}var Uw=or;var IRi=_(T(),1);function eye(){this._enabled=!1,this._frontFaceAlpha=1,this._frontFaceAlphaByDistance=void 0,this._backFaceAlpha=1,this._backFaceAlphaByDistance=void 0,this._rectangle=ce.clone(ce.MAX_VALUE)}Object.defineProperties(eye.prototype,{enabled:{get:function(){return this._enabled},set:function(e){this._enabled=e}},frontFaceAlpha:{get:function(){return this._frontFaceAlpha},set:function(e){this._frontFaceAlpha=e}},frontFaceAlphaByDistance:{get:function(){return this._frontFaceAlphaByDistance},set:function(e){this._frontFaceAlphaByDistance=kt.clone(e,this._frontFaceAlphaByDistance)}},backFaceAlpha:{get:function(){return this._backFaceAlpha},set:function(e){this._backFaceAlpha=e}},backFaceAlphaByDistance:{get:function(){return this._backFaceAlphaByDistance},set:function(e){this._backFaceAlphaByDistance=kt.clone(e,this._backFaceAlphaByDistance)}},rectangle:{get:function(){return this._rectangle},set:function(e){l(e)||(e=ce.clone(ce.MAX_VALUE)),ce.clone(e,this._rectangle)}}});var Dw=eye;var MRi=_(T(),1);function ws(){this._layers=[],this.layerAdded=new be,this.layerRemoved=new be,this.layerMoved=new be,this.layerShownOrHidden=new be}Object.defineProperties(ws.prototype,{length:{get:function(){return this._layers.length}}});ws.prototype.add=function(e,t){l(t)?this._layers.splice(t,0,e):(t=this._layers.length,this._layers.push(e)),this._update(),this.layerAdded.raiseEvent(e,t);let i=e.readyEvent.addEventListener(()=>{this.layerShownOrHidden.raiseEvent(e,e._layerIndex,e.show),i()})};ws.prototype.addImageryProvider=function(e,t){let n=new za(e);return this.add(n,t),n};ws.prototype.remove=function(e,t){t=t??!0;let n=this._layers.indexOf(e);return n!==-1?(this._layers.splice(n,1),this._update(),this.layerRemoved.raiseEvent(e,n),t&&e.destroy(),!0):!1};ws.prototype.removeAll=function(e){e=e??!0;let t=this._layers;for(let n=0,i=t.length;n<i;n++){let o=t[n];this.layerRemoved.raiseEvent(o,n),e&&o.destroy()}this._layers=[]};ws.prototype.contains=function(e){return this.indexOf(e)!==-1};ws.prototype.indexOf=function(e){return this._layers.indexOf(e)};ws.prototype.get=function(e){return this._layers[e]};function HD(e,t){return e.indexOf(t)}function tye(e,t,n){let i=e._layers;if(t=X.clamp(t,0,i.length-1),n=X.clamp(n,0,i.length-1),t===n)return;let o=i[t];i[t]=i[n],i[n]=o,e._update(),e.layerMoved.raiseEvent(o,n,t)}ws.prototype.raise=function(e){let t=HD(this._layers,e);tye(this,t,t+1)};ws.prototype.lower=function(e){let t=HD(this._layers,e);tye(this,t,t-1)};ws.prototype.raiseToTop=function(e){let t=HD(this._layers,e);t!==this._layers.length-1&&(this._layers.splice(t,1),this._layers.push(e),this._update(),this.layerMoved.raiseEvent(e,this._layers.length-1,t))};ws.prototype.lowerToBottom=function(e){let t=HD(this._layers,e);t!==0&&(this._layers.splice(t,1),this._layers.splice(0,0,e),this._update(),this.layerMoved.raiseEvent(e,0,t))};var Zct=new ce;function nye(e,t,n,i){let o=e.globe._surface._tilesToRender,r;for(let a=0;!l(r)&&a<o.length;++a){let c=o[a];ce.contains(c.rectangle,t)&&(r=c)}if(!l(r))return;let s=r.data.imagery;for(let a=s.length-1;a>=0;--a){let c=s[a],d=c.readyImagery;if(!l(d)||!d.imageryLayer.ready)continue;let u=d.imageryLayer.imageryProvider;if(n&&!l(u.pickFeatures)||!ce.contains(d.rectangle,t))continue;let h=Zct,p=1/1024;h.west=X.lerp(r.rectangle.west,r.rectangle.east,c.textureCoordinateRectangle.x-p),h.east=X.lerp(r.rectangle.west,r.rectangle.east,c.textureCoordinateRectangle.z+p),h.south=X.lerp(r.rectangle.south,r.rectangle.north,c.textureCoordinateRectangle.y-p),h.north=X.lerp(r.rectangle.south,r.rectangle.north,c.textureCoordinateRectangle.w+p),ce.contains(h,t)&&i(d)}}ws.prototype.pickImageryLayers=function(e,t){let n=t.globe.pick(e,t);if(!l(n))return;let i=t.ellipsoid.cartesianToCartographic(n),o=[];if(nye(t,i,!1,function(r){o.push(r.imageryLayer)}),o.length!==0)return o};ws.prototype.pickImageryLayerFeatures=function(e,t){let n=t.globe.pick(e,t);if(!l(n))return;let i=t.ellipsoid.cartesianToCartographic(n),o=[],r=[];if(nye(t,i,!0,function(s){if(!s.imageryLayer.ready)return;let c=s.imageryLayer.imageryProvider.pickFeatures(s.x,s.y,s.level,i.longitude,i.latitude);l(c)&&(o.push(c),r.push(s.imageryLayer))}),o.length!==0)return Promise.all(o).then(function(s){let a=[];for(let c=0;c<s.length;++c){let d=s[c],u=r[c];if(l(d)&&d.length>0)for(let h=0;h<d.length;++h){let p=d[h];p.imageryLayer=u,l(p.position)||(p.position=i),a.push(p)}}return a})};ws.prototype.queueReprojectionCommands=function(e){let t=this._layers;for(let n=0,i=t.length;n<i;++n)t[n].queueReprojectionCommands(e)};ws.prototype.cancelReprojections=function(){let e=this._layers;for(let t=0,n=e.length;t<n;++t)e[t].cancelReprojections()};ws.prototype.isDestroyed=function(){return!1};ws.prototype.destroy=function(){return this.removeAll(!0),me(this)};ws.prototype._update=function(){let e=!0,t=this._layers,n,i,o,r;for(o=0,r=t.length;o<r;++o)i=t[o],i._layerIndex=o,i.show?(i._isBaseLayer=e,e=!1):i._isBaseLayer=!1,i.show!==i._show&&(l(i._show)&&(l(n)||(n=[]),n.push(i)),i._show=i.show);if(l(n))for(o=0,r=n.length;o<r;++o)i=n[o],this.layerShownOrHidden.raiseEvent(i,i._layerIndex,i.show)};var Bw=ws;var gZi=_(T(),1);var DRi=_(T(),1);function iye(e){this._ellipsoid=new kb(e.ellipsoid,m.ZERO)}Object.defineProperties(iye.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}});var Ow=iye;var KRi=_(T(),1);var cj=class{constructor(t){this.maxSize=t,this.cache=new Map}get(t){if(!this.cache.has(t))return;let n=this.cache.get(t);return this.cache.delete(t),this.cache.set(t,n),n}set(t,n){if(this.cache.has(t))this.cache.delete(t);else if(this.cache.size>=this.maxSize){let i=this.cache.keys().next().value;this.cache.delete(i)}this.cache.set(t,n)}clear(){this.cache.clear()}},Gct=1e3;function na(e){this._tilingScheme=e.tilingScheme,this._x=e.x,this._y=e.y,this._level=e.level,this._parent=e.parent,this._rectangle=this._tilingScheme.tileXYToRectangle(this._x,this._y,this._level),this._southwestChild=void 0,this._southeastChild=void 0,this._northwestChild=void 0,this._northeastChild=void 0,this.replacementPrevious=void 0,this.replacementNext=void 0,this._distance=0,this._loadPriority=0,this._customData=[],this._frameUpdated=void 0,this._lastSelectionResult=Jn.NONE,this._lastSelectionResultFrame=void 0,this._loadedCallbacks={},this._positionCache=new cj(Gct),this.state=ta.START,this.renderable=!1,this.upsampledFromParent=!1,this.data=void 0}na.createLevelZeroTiles=function(e){let t=e.getNumberOfXTilesAtLevel(0),n=e.getNumberOfYTilesAtLevel(0),i=new Array(t*n),o=0;for(let r=0;r<n;++r)for(let s=0;s<t;++s)i[o++]=new na({tilingScheme:e,x:s,y:r,level:0});return i};var Ect=256;function Ict(e,t,n,i){let o=n.width/Ect*i,r=Math.floor(e/o)*o,s=Math.floor(t/o)*o;return`${r.toFixed(10)},${s.toFixed(10)}`}na.prototype._getCacheKey=function(e,t){return Ict(e.longitude,e.latitude,this._rectangle,t)};na.prototype.getPositionCacheEntry=function(e,t){return this._positionCache.get(this._getCacheKey(e,t))};na.prototype.setPositionCacheEntry=function(e,t,n){this._positionCache.set(this._getCacheKey(e,t),n)};na.prototype.clearPositionCache=function(){this._positionCache.size>0&&this._positionCache.clear()};na.prototype._updateCustomData=function(e,t,n){let i=this.customData,o,r,s;if(l(t)&&l(n)){for(i=i.filter(function(a){return n.indexOf(a)===-1}),this._customData=i,s=this._rectangle,o=0;o<t.length;++o)r=t[o],ce.contains(s,r.positionCartographic)&&i.push(r);this._frameUpdated=e}else{let a=this._parent;if(l(a)&&this._frameUpdated!==a._frameUpdated){i.length=0,s=this._rectangle;let c=a.customData;for(o=0;o<c.length;++o)r=c[o],ce.contains(s,r.positionCartographic)&&i.push(r);this._frameUpdated=a._frameUpdated}}};Object.defineProperties(na.prototype,{tilingScheme:{get:function(){return this._tilingScheme}},x:{get:function(){return this._x}},y:{get:function(){return this._y}},level:{get:function(){return this._level}},parent:{get:function(){return this._parent}},rectangle:{get:function(){return this._rectangle}},children:{get:function(){return[this.northwestChild,this.northeastChild,this.southwestChild,this.southeastChild]}},southwestChild:{get:function(){return l(this._southwestChild)||(this._southwestChild=new na({tilingScheme:this.tilingScheme,x:this.x*2,y:this.y*2+1,level:this.level+1,parent:this})),this._southwestChild}},southeastChild:{get:function(){return l(this._southeastChild)||(this._southeastChild=new na({tilingScheme:this.tilingScheme,x:this.x*2+1,y:this.y*2+1,level:this.level+1,parent:this})),this._southeastChild}},northwestChild:{get:function(){return l(this._northwestChild)||(this._northwestChild=new na({tilingScheme:this.tilingScheme,x:this.x*2,y:this.y*2,level:this.level+1,parent:this})),this._northwestChild}},northeastChild:{get:function(){return l(this._northeastChild)||(this._northeastChild=new na({tilingScheme:this.tilingScheme,x:this.x*2+1,y:this.y*2,level:this.level+1,parent:this})),this._northeastChild}},customData:{get:function(){return this._customData}},needsLoading:{get:function(){return this.state<ta.DONE}},eligibleForUnloading:{get:function(){let e=!0;return l(this.data)&&(e=this.data.eligibleForUnloading,l(e)||(e=!0)),e}}});na.prototype.findLevelZeroTile=function(e,t,n){let i=this.tilingScheme.getNumberOfXTilesAtLevel(0);if(t<0?t+=i:t>=i&&(t-=i),!(n<0||n>=this.tilingScheme.getNumberOfYTilesAtLevel(0)))return e.filter(function(o){return o.x===t&&o.y===n})[0]};na.prototype.findTileToWest=function(e){let t=this.parent;if(t===void 0)return this.findLevelZeroTile(e,this.x-1,this.y);if(t.southeastChild===this)return t.southwestChild;if(t.northeastChild===this)return t.northwestChild;let n=t.findTileToWest(e);if(n!==void 0)return t.southwestChild===this?n.southeastChild:n.northeastChild};na.prototype.findTileToEast=function(e){let t=this.parent;if(t===void 0)return this.findLevelZeroTile(e,this.x+1,this.y);if(t.southwestChild===this)return t.southeastChild;if(t.northwestChild===this)return t.northeastChild;let n=t.findTileToEast(e);if(n!==void 0)return t.southeastChild===this?n.southwestChild:n.northwestChild};na.prototype.findTileToSouth=function(e){let t=this.parent;if(t===void 0)return this.findLevelZeroTile(e,this.x,this.y+1);if(t.northwestChild===this)return t.southwestChild;if(t.northeastChild===this)return t.southeastChild;let n=t.findTileToSouth(e);if(n!==void 0)return t.southwestChild===this?n.northwestChild:n.northeastChild};na.prototype.findTileToNorth=function(e){let t=this.parent;if(t===void 0)return this.findLevelZeroTile(e,this.x,this.y-1);if(t.southwestChild===this)return t.northwestChild;if(t.southeastChild===this)return t.northeastChild;let n=t.findTileToNorth(e);if(n!==void 0)return t.northwestChild===this?n.southwestChild:n.southeastChild};na.prototype.freeResources=function(){this.clearPositionCache(),this.state=ta.START,this.renderable=!1,this.upsampledFromParent=!1,l(this.data)&&l(this.data.freeResources)&&this.data.freeResources(),KD(this._southwestChild),this._southwestChild=void 0,KD(this._southeastChild),this._southeastChild=void 0,KD(this._northwestChild),this._northwestChild=void 0,KD(this._northeastChild),this._northeastChild=void 0};function KD(e){l(e)&&e.freeResources()}var Yw=na;var jRi=_(T(),1);function JD(){this.head=void 0,this.tail=void 0,this.count=0,this._lastBeforeStartOfFrame=void 0}JD.prototype.markStartOfRenderFrame=function(){this._lastBeforeStartOfFrame=this.head};JD.prototype.trimTiles=function(e){let t=this.tail,n=!0;for(;n&&l(this._lastBeforeStartOfFrame)&&this.count>e&&l(t);){n=t!==this._lastBeforeStartOfFrame;let i=t.replacementPrevious;t.eligibleForUnloading&&(t.freeResources(),oye(this,t)),t=i}};function oye(e,t){let n=t.replacementPrevious,i=t.replacementNext;t===e._lastBeforeStartOfFrame&&(e._lastBeforeStartOfFrame=i),t===e.head?e.head=i:n.replacementNext=i,t===e.tail?e.tail=n:i.replacementPrevious=n,t.replacementPrevious=void 0,t.replacementNext=void 0,--e.count}JD.prototype.markTileRendered=function(e){let t=this.head;if(t===e){e===this._lastBeforeStartOfFrame&&(this._lastBeforeStartOfFrame=e.replacementNext);return}if(++this.count,!l(t)){e.replacementPrevious=void 0,e.replacementNext=void 0,this.head=e,this.tail=e;return}(l(e.replacementPrevious)||l(e.replacementNext))&&oye(this,e),e.replacementPrevious=void 0,e.replacementNext=t,t.replacementPrevious=e,this.head=e};var zw=JD;function fm(e){this._tileProvider=e.tileProvider,this._tileProvider.quadtree=this,this._debug={enableDebugOutput:!1,maxDepth:0,maxDepthVisited:0,tilesVisited:0,tilesCulled:0,tilesRendered:0,tilesWaitingForChildren:0,lastMaxDepth:-1,lastMaxDepthVisited:-1,lastTilesVisited:-1,lastTilesCulled:-1,lastTilesRendered:-1,lastTilesWaitingForChildren:-1,suspendLodUpdate:!1};let n=this._tileProvider.tilingScheme.ellipsoid;this._tilesToRender=[],this._tileLoadQueueHigh=[],this._tileLoadQueueMedium=[],this._tileLoadQueueLow=[],this._tileReplacementQueue=new zw,this._levelZeroTiles=void 0,this._loadQueueTimeSlice=5,this._tilesInvalidated=!1,this._addHeightCallbacks=[],this._removeHeightCallbacks=[],this._tileToUpdateHeights=[],this._lastTileIndex=0,this._updateHeightsTimeSlice=2,this._cameraPositionCartographic=void 0,this._cameraReferenceFrameOriginCartographic=void 0,this.maximumScreenSpaceError=e.maximumScreenSpaceError??2,this.tileCacheSize=e.tileCacheSize??100,this.loadingDescendantLimit=20,this.preloadAncestors=!0,this.preloadSiblings=!1,this._occluders=new Ow({ellipsoid:n}),this._tileLoadProgressEvent=new be,this._lastTileLoadQueueLength=0,this._lastSelectionFrameNumber=void 0}Object.defineProperties(fm.prototype,{tileProvider:{get:function(){return this._tileProvider}},tileLoadProgressEvent:{get:function(){return this._tileLoadProgressEvent}},occluders:{get:function(){return this._occluders}}});fm.prototype.invalidateAllTiles=function(){this._tilesInvalidated=!0};function Xct(e){let t=e._tileReplacementQueue;t.head=void 0,t.tail=void 0,t.count=0,sye(e);let n=e._levelZeroTiles;if(l(n))for(let i=0;i<n.length;++i){let r=n[i].customData,s=r.length;for(let a=0;a<s;++a){let c=r[a];c.level=0,e._addHeightCallbacks.push(c)}n[i].freeResources()}e._levelZeroTiles=void 0,e._tileProvider.cancelReprojections()}fm.prototype.forEachLoadedTile=function(e){let t=this._tileReplacementQueue.head;for(;l(t);)t.state!==ta.START&&e(t),t=t.replacementNext};fm.prototype.forEachRenderedTile=function(e){let t=this._tilesToRender;for(let n=0,i=t.length;n<i;++n)e(t[n])};fm.prototype.updateHeight=function(e,t){let n=this,i={positionOnEllipsoidSurface:void 0,positionCartographic:e,level:-1,callback:t};return i.removeFunc=function(){let o=n._addHeightCallbacks,r=o.length;for(let s=0;s<r;++s)if(o[s]===i){o.splice(s,1);break}n._removeHeightCallbacks.push(i),i.callback&&(i.callback=void 0)},n._addHeightCallbacks.push(i),i.removeFunc};fm.prototype.update=function(e){l(this._tileProvider.update)&&this._tileProvider.update(e)};function sye(e){let t=e._debug;t.maxDepth=0,t.maxDepthVisited=0,t.tilesVisited=0,t.tilesCulled=0,t.tilesRendered=0,t.tilesWaitingForChildren=0,e._tileLoadQueueHigh.length=0,e._tileLoadQueueMedium.length=0,e._tileLoadQueueLow.length=0}fm.prototype.beginFrame=function(e){e.passes.render&&(this._tilesInvalidated&&(Xct(this),this._tilesInvalidated=!1),this._tileProvider.initialize(e),sye(this),!this._debug.suspendLodUpdate&&this._tileReplacementQueue.markStartOfRenderFrame())};fm.prototype.render=function(e){let t=e.passes,n=this._tileProvider;t.render&&(n.beginUpdate(e),wct(this,e),Yct(this,e),n.endUpdate(e)),t.pick&&this._tilesToRender.length>0&&n.updateForPick(e)};function Wct(e,t){let n=e._tileLoadQueueHigh.length+e._tileLoadQueueMedium.length+e._tileLoadQueueLow.length;if(n!==e._lastTileLoadQueueLength||e._tilesInvalidated){let o=be.prototype.raiseEvent.bind(e._tileLoadProgressEvent,n);t.afterRender.push(()=>(o(),!0)),e._lastTileLoadQueueLength=n}let i=e._debug;i.enableDebugOutput&&!i.suspendLodUpdate&&(i.maxDepth=e._tilesToRender.reduce(function(o,r){return Math.max(o,r.level)},-1),i.tilesRendered=e._tilesToRender.length,(i.tilesVisited!==i.lastTilesVisited||i.tilesRendered!==i.lastTilesRendered||i.tilesCulled!==i.lastTilesCulled||i.maxDepth!==i.lastMaxDepth||i.tilesWaitingForChildren!==i.lastTilesWaitingForChildren||i.maxDepthVisited!==i.lastMaxDepthVisited)&&(console.log(`Visited ${i.tilesVisited}, Rendered: ${i.tilesRendered}, Culled: ${i.tilesCulled}, Max Depth Rendered: ${i.maxDepth}, Max Depth Visited: ${i.maxDepthVisited}, Waiting for children: ${i.tilesWaitingForChildren}`),i.lastTilesVisited=i.tilesVisited,i.lastTilesRendered=i.tilesRendered,i.lastTilesCulled=i.tilesCulled,i.lastMaxDepth=i.maxDepth,i.lastTilesWaitingForChildren=i.tilesWaitingForChildren,i.lastMaxDepthVisited=i.maxDepthVisited))}fm.prototype.endFrame=function(e){!e.passes.render||e.mode===oe.MORPHING||(Uct(this,e),Oct(this,e),Wct(this,e))};fm.prototype.isDestroyed=function(){return!1};fm.prototype.destroy=function(){this._tileProvider=this._tileProvider&&this._tileProvider.destroy()};var Kw,rye=new he;function Pct(e,t){let n=ce.center(e.rectangle,rye),i=n.longitude-Kw.longitude,o=n.latitude-Kw.latitude;n=ce.center(t.rectangle,rye);let r=n.longitude-Kw.longitude,s=n.latitude-Kw.latitude;return i*i+o*o-(r*r+s*s)}var vct=new m,Hw=[];function wct(e,t){let n=e._debug;if(n.suspendLodUpdate)return;let i=e._tilesToRender;i.length=0;let o,r=e._tileProvider;if(!l(e._levelZeroTiles)){let y=r.tilingScheme;if(l(y)){let x=r.tilingScheme;e._levelZeroTiles=Yw.createLevelZeroTiles(x);let S=e._levelZeroTiles.length;if(Hw.length<S)for(Hw=new Array(S),o=0;o<S;++o)Hw[o]===void 0&&(Hw[o]=new Jw)}else return}e._occluders.ellipsoid.cameraPosition=t.camera.positionWC;let s,a=e._levelZeroTiles,c=a.length>1?e._occluders:void 0;Kw=t.camera.positionCartographic,a.sort(Pct);let d=e._addHeightCallbacks,u=e._removeHeightCallbacks,h=t.frameNumber,p;if(d.length>0||u.length>0){for(o=0,p=a.length;o<p;++o)s=a[o],s._updateCustomData(h,d,u);d.length=0,u.length=0}let g=t.camera;e._cameraPositionCartographic=g.positionCartographic;let f=F.getTranslation(g.transform,vct);for(e._cameraReferenceFrameOriginCartographic=e.tileProvider.tilingScheme.ellipsoid.cartesianToCartographic(f,e._cameraReferenceFrameOriginCartographic),o=0,p=a.length;o<p;++o)s=a[o],e._tileReplacementQueue.markTileRendered(s),s.renderable?Ha(e,s,r,t,c,!1,Hw[o]):(h0(e,e._tileLoadQueueHigh,s,t),++n.tilesWaitingForChildren);e._lastSelectionFrameNumber=h}function h0(e,t,n,i){n.needsLoading&&(e.tileProvider.computeTileLoadPriority!==void 0&&(n._loadPriority=e.tileProvider.computeTileLoadPriority(n,i)),t.push(n))}function Jw(){this.allAreRenderable=!0,this.anyWereRenderedLastFrame=!1,this.notYetRenderableCount=0}function aye(){this.southwest=new Jw,this.southeast=new Jw,this.northwest=new Jw,this.northeast=new Jw}aye.prototype.combine=function(e){let t=this.southwest,n=this.southeast,i=this.northwest,o=this.northeast;e.allAreRenderable=t.allAreRenderable&&n.allAreRenderable&&i.allAreRenderable&&o.allAreRenderable,e.anyWereRenderedLastFrame=t.anyWereRenderedLastFrame||n.anyWereRenderedLastFrame||i.anyWereRenderedLastFrame||o.anyWereRenderedLastFrame,e.notYetRenderableCount=t.notYetRenderableCount+n.notYetRenderableCount+i.notYetRenderableCount+o.notYetRenderableCount};var uj=new Array(31);for(let e=0;e<uj.length;++e)uj[e]=new aye;function Fct(e,t,n,i,o){let r=e._debug;++r.tilesVisited,e._tileReplacementQueue.markTileRendered(n),n._updateCustomData(t.frameNumber),n.level>r.maxDepthVisited&&(r.maxDepthVisited=n.level);let s=Nct(e,t,n)<e.maximumScreenSpaceError,a=n.southwestChild,c=n.southeastChild,d=n.northwestChild,u=n.northeastChild,h=e._lastSelectionFrameNumber,p=n._lastSelectionResultFrame===h?n._lastSelectionResult:Jn.NONE,g=e.tileProvider;if(s||i){let f=Jn.originalResult(p)===Jn.RENDERED,y=Jn.originalResult(p)===Jn.CULLED||p===Jn.NONE,x=n.state===ta.DONE,S=f||y||x;if(S||l(g.canRenderWithoutLosingDetail)&&(S=g.canRenderWithoutLosingDetail(n)),S){s&&h0(e,e._tileLoadQueueMedium,n,t),QD(e,n),o.allAreRenderable=n.renderable,o.anyWereRenderedLastFrame=p===Jn.RENDERED,o.notYetRenderableCount=n.renderable?0:1,n._lastSelectionResultFrame=t.frameNumber,n._lastSelectionResult=Jn.RENDERED,o.anyWereRenderedLastFrame||e._tileToUpdateHeights.push(n);return}i=!0,s&&h0(e,e._tileLoadQueueHigh,n,t)}if(g.canRefine(n)){if(a.upsampledFromParent&&c.upsampledFromParent&&d.upsampledFromParent&&u.upsampledFromParent){QD(e,n),h0(e,e._tileLoadQueueMedium,n,t),e._tileReplacementQueue.markTileRendered(a),e._tileReplacementQueue.markTileRendered(c),e._tileReplacementQueue.markTileRendered(d),e._tileReplacementQueue.markTileRendered(u),o.allAreRenderable=n.renderable,o.anyWereRenderedLastFrame=p===Jn.RENDERED,o.notYetRenderableCount=n.renderable?0:1,n._lastSelectionResultFrame=t.frameNumber,n._lastSelectionResult=Jn.RENDERED,o.anyWereRenderedLastFrame||e._tileToUpdateHeights.push(n);return}n._lastSelectionResultFrame=t.frameNumber,n._lastSelectionResult=Jn.REFINED;let y=e._tilesToRender.length,x=e._tileLoadQueueLow.length,S=e._tileLoadQueueMedium.length,C=e._tileLoadQueueHigh.length,V=e._tileToUpdateHeights.length;if(Act(e,a,c,d,u,t,i,o),y!==e._tilesToRender.length){let L=o.allAreRenderable,Z=o.anyWereRenderedLastFrame,E=o.notYetRenderableCount,P=!1;if(!L&&!Z){let W=e._tilesToRender;for(let A=y;A<W.length;++A){let b=W[A];for(;b!==void 0&&b._lastSelectionResult!==Jn.KICKED&&b!==n;)b._lastSelectionResult=Jn.kick(b._lastSelectionResult),b=b.parent}e._tilesToRender.length=y,e._tileToUpdateHeights.length=V,QD(e,n),n._lastSelectionResult=Jn.RENDERED;let v=p===Jn.RENDERED;!v&&E>e.loadingDescendantLimit&&(e._tileLoadQueueLow.length=x,e._tileLoadQueueMedium.length=S,e._tileLoadQueueHigh.length=C,h0(e,e._tileLoadQueueMedium,n,t),o.notYetRenderableCount=n.renderable?0:1,P=!0),o.allAreRenderable=n.renderable,o.anyWereRenderedLastFrame=v,v||e._tileToUpdateHeights.push(n),++r.tilesWaitingForChildren}e.preloadAncestors&&!P&&h0(e,e._tileLoadQueueLow,n,t)}return}n._lastSelectionResultFrame=t.frameNumber,n._lastSelectionResult=Jn.RENDERED,QD(e,n),h0(e,e._tileLoadQueueHigh,n,t),o.allAreRenderable=n.renderable,o.anyWereRenderedLastFrame=p===Jn.RENDERED,o.notYetRenderableCount=n.renderable?0:1}function Act(e,t,n,i,o,r,s,a){let c=r.camera.positionCartographic,d=e._tileProvider,u=e._occluders,h=uj[t.level],p=h.southwest,g=h.southeast,f=h.northwest,y=h.northeast;c.longitude<t.rectangle.east?c.latitude<t.rectangle.north?(Ha(e,t,d,r,u,s,p),Ha(e,n,d,r,u,s,g),Ha(e,i,d,r,u,s,f),Ha(e,o,d,r,u,s,y)):(Ha(e,i,d,r,u,s,f),Ha(e,t,d,r,u,s,p),Ha(e,o,d,r,u,s,y),Ha(e,n,d,r,u,s,g)):c.latitude<t.rectangle.north?(Ha(e,n,d,r,u,s,g),Ha(e,t,d,r,u,s,p),Ha(e,o,d,r,u,s,y),Ha(e,i,d,r,u,s,f)):(Ha(e,o,d,r,u,s,y),Ha(e,i,d,r,u,s,f),Ha(e,n,d,r,u,s,g),Ha(e,t,d,r,u,s,p)),h.combine(a)}function Mct(e,t){let n=t.rectangle;return l(e._cameraPositionCartographic)&&ce.contains(n,e._cameraPositionCartographic)||l(e._cameraReferenceFrameOriginCartographic)&&ce.contains(n,e._cameraReferenceFrameOriginCartographic)}function Ha(e,t,n,i,o,r,s){if(n.computeTileVisibility(t,i,o)!==hr.NONE)return Fct(e,i,t,r,s);if(++e._debug.tilesCulled,e._tileReplacementQueue.markTileRendered(t),s.allAreRenderable=!0,s.anyWereRenderedLastFrame=!1,s.notYetRenderableCount=0,Mct(e,t)){(!l(t.data)||!l(t.data.vertexArray))&&h0(e,e._tileLoadQueueMedium,t,i);let a=e._lastSelectionFrameNumber,c=t._lastSelectionResultFrame===a?t._lastSelectionResult:Jn.NONE;c!==Jn.CULLED_BUT_NEEDED&&c!==Jn.RENDERED&&e._tileToUpdateHeights.push(t),t._lastSelectionResult=Jn.CULLED_BUT_NEEDED}else e.preloadSiblings||t.level===0?(h0(e,e._tileLoadQueueLow,t,i),t._lastSelectionResult=Jn.CULLED):t._lastSelectionResult=Jn.CULLED;t._lastSelectionResultFrame=i.frameNumber}function Nct(e,t,n){if(t.mode===oe.SCENE2D||t.camera.frustum instanceof an||t.camera.frustum instanceof Pr)return kct(e,t,n);let i=e._tileProvider.getLevelMaximumGeometricError(n.level),o=n._distance,r=t.context.drawingBufferHeight,s=t.camera.frustum.sseDenominator,a=i*r/(o*s);return t.fog.enabled&&(a-=X.fog(o,t.fog.density)*t.fog.sse),a/=t.pixelRatio,a}function kct(e,t,n){let o=t.camera.frustum,r=o.offCenterFrustum;l(r)&&(o=r);let s=t.context,a=s.drawingBufferWidth,c=s.drawingBufferHeight,d=e._tileProvider.getLevelMaximumGeometricError(n.level),u=Math.max(o.top-o.bottom,o.right-o.left)/Math.max(a,c),h=d/u;return t.fog.enabled&&t.mode!==oe.SCENE2D&&(h-=X.fog(n._distance,t.fog.density)*t.fog.sse),h/=t.pixelRatio,h}function QD(e,t){e._tilesToRender.push(t)}function Uct(e,t){let n=e._tileLoadQueueHigh,i=e._tileLoadQueueMedium,o=e._tileLoadQueueLow;if(n.length===0&&i.length===0&&o.length===0)return;e._tileReplacementQueue.trimTiles(e.tileCacheSize);let r=Si()+e._loadQueueTimeSlice,s=e._tileProvider,a=lj(e,t,s,r,n,!1);a=lj(e,t,s,r,i,a),lj(e,t,s,r,o,a)}function Dct(e,t){return e._loadPriority-t._loadPriority}function lj(e,t,n,i,o,r){n.computeTileLoadPriority!==void 0&&o.sort(Dct);for(let s=0,a=o.length;s<a&&(Si()<i||!r);++s){let c=o[s];e._tileReplacementQueue.markTileRendered(c),n.loadTile(t,c),r=!0}return r}var qV=new pn,dj=new he,Ry=new m,Bct=[];function Oct(e,t){if(!l(e.tileProvider.tilingScheme))return;let n=Bct;n.length=0;let i=e._tileToUpdateHeights,o=Si(),r=e._updateHeightsTimeSlice,s=o+r,a=t.mode,c=t.mapProjection,d=e.tileProvider.tilingScheme.ellipsoid,u;for(;i.length>0;){let h=i[0];if(!l(h.data)||!l(h.data.mesh)){let y=h._lastSelectionResultFrame===e._lastSelectionFrameNumber?h._lastSelectionResult:Jn.NONE;(y===Jn.RENDERED||y===Jn.CULLED_BUT_NEEDED)&&n.push(h),h.clearPositionCache(),i.shift(),e._lastTileIndex=0;continue}let p=h.customData,g=p.length,f=!1;for(u=e._lastTileIndex;u<g;++u){let y=p[u],x=h.data.terrainData,S=l(x)&&x.wasCreatedByUpsampling();if(h.level>y.level&&!S){let C,V=h.getPositionCacheEntry(y.positionCartographic,e.maximumScreenSpaceError);if(l(V))C=V;else{if(l(y.positionOnEllipsoidSurface)||(y.positionOnEllipsoidSurface=m.fromRadians(y.positionCartographic.longitude,y.positionCartographic.latitude,0,d)),a===oe.SCENE3D){let L=d.geodeticSurfaceNormal(y.positionOnEllipsoidSurface,qV.direction),Z=d.getSurfaceNormalIntersectionWithZAxis(y.positionOnEllipsoidSurface,11500,qV.origin);if(!l(Z)){let E=0;l(h.data.tileBoundingRegion)&&(E=h.data.tileBoundingRegion.minimumHeight);let P=Math.min(E,-11500),W=m.multiplyByScalar(L,Math.abs(P)+1,Ry);m.subtract(y.positionOnEllipsoidSurface,W,qV.origin)}}else he.clone(y.positionCartographic,dj),dj.height=-11500,c.project(dj,Ry),m.fromElements(Ry.z,Ry.x,Ry.y,Ry),m.clone(Ry,qV.origin),m.clone(m.UNIT_X,qV.direction);C=h.data.pick(qV,a,c,!1,Ry),l(C)&&h.setPositionCacheEntry(y.positionCartographic,e.maximumScreenSpaceError,C)}l(C)&&(l(y.callback)&&y.callback(C),y.level=h.level)}if(Si()>=s){f=!0;break}}if(f){e._lastTileIndex=u;break}else e._lastTileIndex=0,i.shift()}for(u=0;u<n.length;u++)i.push(n[u])}function Yct(e,t){let n=e._tileProvider,i=e._tilesToRender;for(let o=0,r=i.length;o<r;++o){let s=i[o];n.showTileThisFrame(s,t)}}var Qw=fm;function Nh(e){e=e??ne.default;let t=new $f({ellipsoid:e}),n=new Bw;this._ellipsoid=e,this._imageryLayerCollection=n,this._surfaceShaderSet=new Lw,this._material=void 0,this._surface=new Qw({tileProvider:new Uw({terrainProvider:t,imageryLayers:n,surfaceShaderSet:this._surfaceShaderSet})}),this._terrainProvider=t,this._terrainProviderChanged=new be,this._undergroundColor=D.clone(D.BLACK),this._undergroundColorAlphaByDistance=new kt(e.maximumRadius/1e3,0,e.maximumRadius/5,1),this._translucency=new Dw,hj(this),this.show=!0,this._oceanNormalMapResourceDirty=!0,this._oceanNormalMapResource=new Ze({url:nn("Assets/Textures/waterNormalsSmall.jpg")}),this.maximumScreenSpaceError=2,this.tileCacheSize=100,this.loadingDescendantLimit=20,this.preloadAncestors=!0,this.preloadSiblings=!1,this.fillHighlightColor=void 0,this.enableLighting=!1,this.lambertDiffuseMultiplier=.9,this.dynamicAtmosphereLighting=!0,this.dynamicAtmosphereLightingFromSun=!1,this.showGroundAtmosphere=ne.WGS84.equals(e),this.atmosphereLightIntensity=10,this.atmosphereRayleighCoefficient=new m(55e-7,13e-6,284e-7),this.atmosphereMieCoefficient=new m(21e-6,21e-6,21e-6),this.atmosphereRayleighScaleHeight=1e4,this.atmosphereMieScaleHeight=3200,this.atmosphereMieAnisotropy=.9,this.lightingFadeOutDistance=X.PI_OVER_TWO*e.minimumRadius,this.lightingFadeInDistance=X.PI*e.minimumRadius,this.nightFadeOutDistance=X.PI_OVER_TWO*e.minimumRadius,this.nightFadeInDistance=5*X.PI_OVER_TWO*e.minimumRadius,this.showWaterEffect=!0,this.depthTestAgainstTerrain=!1,this.shadows=_n.RECEIVE_ONLY,this.atmosphereHueShift=0,this.atmosphereSaturationShift=0,this.atmosphereBrightnessShift=0,this.showSkirts=!0,this.backFaceCulling=!0,this._oceanNormalMap=void 0,this._zoomedOutOceanSpecularIntensity=void 0,this.vertexShadowDarkness=.3}Object.defineProperties(Nh.prototype,{ellipsoid:{get:function(){return this._ellipsoid}},imageryLayers:{get:function(){return this._imageryLayerCollection}},imageryLayersUpdatedEvent:{get:function(){return this._surface.tileProvider.imageryLayersUpdatedEvent}},tilesLoaded:{get:function(){return l(this._surface)?this._surface._tileLoadQueueHigh.length===0&&this._surface._tileLoadQueueMedium.length===0&&this._surface._tileLoadQueueLow.length===0:!0}},baseColor:{get:function(){return this._surface.tileProvider.baseColor},set:function(e){this._surface.tileProvider.baseColor=e}},clippingPlanes:{get:function(){return this._surface.tileProvider.clippingPlanes},set:function(e){this._surface.tileProvider.clippingPlanes=e}},clippingPolygons:{get:function(){return this._surface.tileProvider.clippingPolygons},set:function(e){this._surface.tileProvider.clippingPolygons=e}},cartographicLimitRectangle:{get:function(){return this._surface.tileProvider.cartographicLimitRectangle},set:function(e){l(e)||(e=ce.clone(ce.MAX_VALUE)),this._surface.tileProvider.cartographicLimitRectangle=e}},oceanNormalMapUrl:{get:function(){return this._oceanNormalMapResource.url},set:function(e){this._oceanNormalMapResource.url=e,this._oceanNormalMapResourceDirty=!0}},terrainProvider:{get:function(){return this._terrainProvider},set:function(e){e!==this._terrainProvider&&(this._terrainProvider=e,this._terrainProviderChanged.raiseEvent(e),l(this._material)&&hj(this))}},terrainProviderChanged:{get:function(){return this._terrainProviderChanged}},tileLoadProgressEvent:{get:function(){return this._surface.tileLoadProgressEvent}},material:{get:function(){return this._material},set:function(e){this._material!==e&&(this._material=e,hj(this))}},undergroundColor:{get:function(){return this._undergroundColor},set:function(e){this._undergroundColor=D.clone(e,this._undergroundColor)}},undergroundColorAlphaByDistance:{get:function(){return this._undergroundColorAlphaByDistance},set:function(e){this._undergroundColorAlphaByDistance=kt.clone(e,this._undergroundColorAlphaByDistance)}},translucency:{get:function(){return this._translucency}}});function hj(e){let t=[],n=l(e._material)&&(l(e._material.shaderSource.match(/slope/))||l(e._material.shaderSource.match("normalEC"))),i=[$m,AV];l(e._material)&&(!n||e._terrainProvider.requestVertexNormals)?(i.push(e._material.shaderSource),t.push("APPLY_MATERIAL"),e._surface._tileProvider.materialUniformMap=e._material._uniforms):e._surface._tileProvider.materialUniformMap=void 0,i.push(Cw),e._surfaceShaderSet.baseVertexShaderSource=new De({sources:[$m,AV,Vw],defines:t}),e._surfaceShaderSet.baseFragmentShaderSource=new De({sources:i,defines:t}),e._surfaceShaderSet.material=e._material}function zct(e){return function(t,n){let i=le.distanceSquaredTo(t.pickBoundingSphere,e),o=le.distanceSquaredTo(n.pickBoundingSphere,e);return i-o}}var Hct=[],Kct={start:0,stop:0};Nh.prototype.pickWorldCoordinates=function(e,t,n,i){n=n??!0;let o=t.mode,r=t.mapProjection,s=Hct;s.length=0;let a=this._surface._tilesToRender,c=a.length,d,u;for(u=0;u<c;++u){d=a[u];let p=d.data;if(!l(p))continue;let g=p.pickBoundingSphere;if(o!==oe.SCENE3D)p.pickBoundingSphere=g=le.fromRectangleWithHeights2D(d.rectangle,r,p.tileBoundingRegion.minimumHeight,p.tileBoundingRegion.maximumHeight,g),m.fromElements(g.center.z,g.center.x,g.center.y,g.center);else if(l(p.renderedMesh))le.clone(p.tileBoundingRegion.boundingSphere,g);else continue;let f=qn.raySphere(e,g,Kct);l(f)&&s.push(p)}s.sort(zct(e.origin));let h;for(c=s.length,u=0;u<c&&(h=s[u].pick(e,t.mode,t.mapProjection,n,i),!l(h));++u);return h};var Jct=new he;Nh.prototype.pick=function(e,t,n){if(n=this.pickWorldCoordinates(e,t,!0,n),l(n)&&t.mode!==oe.SCENE3D){n=m.fromElements(n.y,n.z,n.x,n);let i=t.mapProjection.unproject(n,Jct);n=this._ellipsoid.cartographicToCartesian(i,n)}return n};var Qct=new m,cye=new m,jct=new he,qct=new pn;function mj(e,t){return l(e)&&ce.contains(e.rectangle,t)?e:void 0}Nh.prototype.getHeight=function(e){let t=this._surface._levelZeroTiles;if(!l(t))return;let n,i,o=t.length;for(i=0;i<o&&(n=t[i],!ce.contains(n.rectangle,e));++i);if(i>=o)return;let r=n;for(;l(n);)n=mj(n._southwestChild,e)||mj(n._southeastChild,e)||mj(n._northwestChild,e)||n._northeastChild,l(n)&&l(n.data)&&l(n.data.renderedMesh)&&(r=n);if(n=r,!l(n)||!l(n.data)||!l(n.data.renderedMesh))return;let s=this._surface._tileProvider.tilingScheme.projection,a=this._surface._tileProvider.tilingScheme.ellipsoid,c=m.fromRadians(e.longitude,e.latitude,0,a,Qct),d=qct,u=a.geodeticSurfaceNormal(c,d.direction),h=a.getSurfaceNormalIntersectionWithZAxis(c,11500,d.origin);if(!l(h)){let g;l(n.data.tileBoundingRegion)&&(g=n.data.tileBoundingRegion.minimumHeight);let f=Math.min(g??0,-11500),y=m.multiplyByScalar(u,Math.abs(f)+1,cye);m.subtract(c,y,d.origin)}let p=n.data.pick(d,void 0,s,!1,cye);if(l(p))return a.cartesianToCartographic(p,jct).height};Nh.prototype.update=function(e){this.show&&e.passes.render&&this._surface.update(e)};Nh.prototype.beginFrame=function(e){let t=this._surface,n=t.tileProvider,i=this.terrainProvider,o=l(i)&&i.hasWaterMask&&i.hasWaterMask;if(o&&this._oceanNormalMapResourceDirty){this._oceanNormalMapResourceDirty=!1;let a=this._oceanNormalMapResource,c=a.url;if(l(c)){let d=this;a.fetchImage().then(function(u){c===d._oceanNormalMapResource.url&&(d._oceanNormalMap=d._oceanNormalMap&&d._oceanNormalMap.destroy(),d._oceanNormalMap=new vt({context:e.context,source:u}))})}else this._oceanNormalMap=this._oceanNormalMap&&this._oceanNormalMap.destroy()}let r=e.passes,s=e.mode;r.render&&(this.showGroundAtmosphere?this._zoomedOutOceanSpecularIntensity=.4:this._zoomedOutOceanSpecularIntensity=.5,t.maximumScreenSpaceError=this.maximumScreenSpaceError,t.tileCacheSize=this.tileCacheSize,t.loadingDescendantLimit=this.loadingDescendantLimit,t.preloadAncestors=this.preloadAncestors,t.preloadSiblings=this.preloadSiblings,n.terrainProvider=this.terrainProvider,n.lightingFadeOutDistance=this.lightingFadeOutDistance,n.lightingFadeInDistance=this.lightingFadeInDistance,n.nightFadeOutDistance=this.nightFadeOutDistance,n.nightFadeInDistance=this.nightFadeInDistance,n.zoomedOutOceanSpecularIntensity=s===oe.SCENE3D?this._zoomedOutOceanSpecularIntensity:0,n.hasWaterMask=o,n.showWaterEffect=this.showWaterEffect,n.oceanNormalMap=this._oceanNormalMap,n.enableLighting=this.enableLighting,n.dynamicAtmosphereLighting=this.dynamicAtmosphereLighting,n.dynamicAtmosphereLightingFromSun=this.dynamicAtmosphereLightingFromSun,n.showGroundAtmosphere=this.showGroundAtmosphere,n.atmosphereLightIntensity=this.atmosphereLightIntensity,n.atmosphereRayleighCoefficient=this.atmosphereRayleighCoefficient,n.atmosphereMieCoefficient=this.atmosphereMieCoefficient,n.atmosphereRayleighScaleHeight=this.atmosphereRayleighScaleHeight,n.atmosphereMieScaleHeight=this.atmosphereMieScaleHeight,n.atmosphereMieAnisotropy=this.atmosphereMieAnisotropy,n.shadows=this.shadows,n.hueShift=this.atmosphereHueShift,n.saturationShift=this.atmosphereSaturationShift,n.brightnessShift=this.atmosphereBrightnessShift,n.fillHighlightColor=this.fillHighlightColor,n.showSkirts=this.showSkirts,n.backFaceCulling=this.backFaceCulling,n.vertexShadowDarkness=this.vertexShadowDarkness,n.undergroundColor=this._undergroundColor,n.undergroundColorAlphaByDistance=this._undergroundColorAlphaByDistance,n.lambertDiffuseMultiplier=this.lambertDiffuseMultiplier,t.beginFrame(e))};Nh.prototype.render=function(e){this.show&&(l(this._material)&&this._material.update(e.context),this._surface.render(e))};Nh.prototype.endFrame=function(e){this.show&&e.passes.render&&this._surface.endFrame(e)};Nh.prototype.isDestroyed=function(){return!1};Nh.prototype.destroy=function(){return this._surfaceShaderSet=this._surfaceShaderSet&&this._surfaceShaderSet.destroy(),this._surface=this._surface&&this._surface.destroy(),this._oceanNormalMap=this._oceanNormalMap&&this._oceanNormalMap.destroy(),me(this)};var jw=Nh;var tEi=_(T(),1);var mGi=_(T(),1);var iGi=_(T(),1);var QZi=_(T(),1);function $ct(e,t,n,i){this.rightAscension=e,this.declination=t,this.rotation=n,this.rotationRate=i}var qw=$ct;var Sye={},elt=32.184,tlt=2451545,lye=-.0529921,dye=-.1059842,uye=13.0120009,mye=13.3407154,hye=.9856003,fye=26.4057084,pye=13.064993,bye=.3287146,gye=1.7484877,yye=-.1589763,xye=.0036096,_ye=.1643573,Tye=12.9590088,fj=new q;Sye.ComputeMoon=function(e,t){l(e)||(e=q.now()),fj=q.addSeconds(e,elt,fj);let n=q.totalDays(fj)-tlt,i=n/Kn.DAYS_PER_JULIAN_CENTURY,o=(125.045+lye*n)*X.RADIANS_PER_DEGREE,r=(250.089+dye*n)*X.RADIANS_PER_DEGREE,s=(260.008+uye*n)*X.RADIANS_PER_DEGREE,a=(176.625+mye*n)*X.RADIANS_PER_DEGREE,c=(357.529+hye*n)*X.RADIANS_PER_DEGREE,d=(311.589+fye*n)*X.RADIANS_PER_DEGREE,u=(134.963+pye*n)*X.RADIANS_PER_DEGREE,h=(276.617+bye*n)*X.RADIANS_PER_DEGREE,p=(34.226+gye*n)*X.RADIANS_PER_DEGREE,g=(15.134+yye*n)*X.RADIANS_PER_DEGREE,f=(119.743+xye*n)*X.RADIANS_PER_DEGREE,y=(239.961+_ye*n)*X.RADIANS_PER_DEGREE,x=(25.053+Tye*n)*X.RADIANS_PER_DEGREE,S=Math.sin(o),C=Math.sin(r),V=Math.sin(s),L=Math.sin(a),Z=Math.sin(c),E=Math.sin(d),P=Math.sin(u),W=Math.sin(h),v=Math.sin(p),A=Math.sin(g),b=Math.sin(f),R=Math.sin(y),G=Math.sin(x),I=Math.cos(o),w=Math.cos(r),M=Math.cos(s),B=Math.cos(a),k=Math.cos(c),O=Math.cos(d),N=Math.cos(u),z=Math.cos(h),K=Math.cos(p),te=Math.cos(g),H=Math.cos(f),j=Math.cos(y),ee=Math.cos(x),fe=(269.9949+.0031*i-3.8787*S-.1204*C+.07*V-.0172*L+.0072*E-.0052*A+.0043*G)*X.RADIANS_PER_DEGREE,Te=(66.5392+.013*i+1.5419*I+.0239*w-.0278*M+.0068*B-.0029*O+9e-4*N+8e-4*te-9e-4*ee)*X.RADIANS_PER_DEGREE,de=(38.3213+13.17635815*n-14e-13*n*n+3.561*S+.1208*C-.0642*V+.0158*L+.0252*Z-.0066*E-.0047*P-.0046*W+.0028*v+.0052*A+.004*b+.0019*R-.0044*G)*X.RADIANS_PER_DEGREE,xe=(13.17635815-14e-13*(2*n)+3.561*I*lye+.1208*w*dye-.0642*M*uye+.0158*B*mye+.0252*k*hye-.0066*O*fye-.0047*N*pye-.0046*z*bye+.0028*K*gye+.0052*te*yye+.004*H*xye+.0019*j*_ye-.0044*ee*Tye)/86400*X.RADIANS_PER_DEGREE;return l(t)||(t=new qw),t.rightAscension=fe,t.declination=Te,t.rotation=de,t.rotationRate=xe,t};var $w=Sye;function Cye(e){(!l(e)||typeof e!="function")&&(e=$w.ComputeMoon),this._computeFunction=e}var nlt=new m,ilt=new m,olt=new m;function rlt(e,t,n){let i=nlt;i.x=Math.cos(e+X.PI_OVER_TWO),i.y=Math.sin(e+X.PI_OVER_TWO),i.z=0;let o=Math.cos(t),r=olt;r.x=o*Math.cos(e),r.y=o*Math.sin(e),r.z=Math.sin(t);let s=m.cross(r,i,ilt);return l(n)||(n=new $),n[0]=i.x,n[1]=s.x,n[2]=r.x,n[3]=i.y,n[4]=s.y,n[5]=r.y,n[6]=i.z,n[7]=s.z,n[8]=r.z,n}var slt=new $,alt=new ve;Cye.prototype.evaluate=function(e,t){l(e)||(e=q.now());let n=this._computeFunction(e),i=rlt(n.rightAscension,n.declination,t),o=X.zeroToTwoPi(n.rotation),r=ve.fromAxisAngle(m.UNIT_Z,o,alt),s=$.fromQuaternion(ve.conjugate(r,r),slt);return $.multiply(s,i,i)};var eF=Cye;var kGi=_(T(),1);var fGi=_(T(),1),$V=`uniform vec3 u_radii; uniform vec3 u_oneOverEllipsoidRadiiSquared; in vec3 v_positionEC; vec4 computeEllipsoidColor(czm_ray ray, float intersection, float side) { vec3 positionEC = czm_pointAlongRay(ray, intersection); vec3 positionMC = (czm_inverseModelView * vec4(positionEC, 1.0)).xyz; vec3 geodeticNormal = normalize(czm_geodeticSurfaceNormal(positionMC, vec3(0.0), u_oneOverEllipsoidRadiiSquared)); vec3 sphericalNormal = normalize(positionMC / u_radii); vec3 normalMC = geodeticNormal * side; // normalized surface normal (always facing the viewer) in model coordinates vec3 normalEC = normalize(czm_normal * normalMC); // normalized surface normal in eye coordinates vec2 st = czm_ellipsoidTextureCoordinates(sphericalNormal); vec3 positionToEyeEC = -positionEC; czm_materialInput materialInput; materialInput.s = st.s; materialInput.st = st; materialInput.str = (positionMC + u_radii) / u_radii; materialInput.normalEC = normalEC; materialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(positionMC, normalEC); materialInput.positionToEyeEC = positionToEyeEC; czm_material material = czm_getMaterial(materialInput); #ifdef ONLY_SUN_LIGHTING return czm_private_phong(normalize(positionToEyeEC), material, czm_sunDirectionEC); #else return czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC); #endif } void main() { // PERFORMANCE_TODO: When dynamic branching is available, compute ratio of maximum and minimum radii // in the vertex shader. Only when it is larger than some constant, march along the ray. // Otherwise perform one intersection test which will be the common case. // Test if the ray intersects a sphere with the ellipsoid's maximum radius. // For very oblate ellipsoids, using the ellipsoid's radii for an intersection test // may cause false negatives. This will discard fragments before marching the ray forward. float maxRadius = max(u_radii.x, max(u_radii.y, u_radii.z)) * 1.5; vec3 direction = normalize(v_positionEC); vec3 ellipsoidCenter = czm_modelView[3].xyz; float t1 = -1.0; float t2 = -1.0; float b = -2.0 * dot(direction, ellipsoidCenter); float c = dot(ellipsoidCenter, ellipsoidCenter) - maxRadius * maxRadius; float discriminant = b * b - 4.0 * c; if (discriminant >= 0.0) { t1 = (-b - sqrt(discriminant)) * 0.5; t2 = (-b + sqrt(discriminant)) * 0.5; } if (t1 < 0.0 && t2 < 0.0) { discard; } float t = min(t1, t2); if (t < 0.0) { t = 0.0; } // March ray forward to intersection with larger sphere and find czm_ray ray = czm_ray(t * direction, direction); vec3 ellipsoid_inverseRadii = vec3(1.0 / u_radii.x, 1.0 / u_radii.y, 1.0 / u_radii.z); czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoidCenter, ellipsoid_inverseRadii); if (czm_isEmpty(intersection)) { discard; } // If the viewer is outside, compute outsideFaceColor, with normals facing outward. vec4 outsideFaceColor = (intersection.start != 0.0) ? computeEllipsoidColor(ray, intersection.start, 1.0) : vec4(0.0); // If the viewer either is inside or can see inside, compute insideFaceColor, with normals facing inward. vec4 insideFaceColor = (outsideFaceColor.a < 1.0) ? computeEllipsoidColor(ray, intersection.stop, -1.0) : vec4(0.0); out_FragColor = mix(insideFaceColor, outsideFaceColor, outsideFaceColor.a); out_FragColor.a = 1.0 - (1.0 - insideFaceColor.a) * (1.0 - outsideFaceColor.a); #if (defined(WRITE_DEPTH) && (__VERSION__ == 300 || defined(GL_EXT_frag_depth))) t = (intersection.start != 0.0) ? intersection.start : intersection.stop; vec3 positionEC = czm_pointAlongRay(ray, t); vec4 positionCC = czm_projection * vec4(positionEC, 1.0); #ifdef LOG_DEPTH czm_writeLogDepth(1.0 + positionCC.w); #else float z = positionCC.z / positionCC.w; float n = czm_depthRange.near; float f = czm_depthRange.far; gl_FragDepth = (z * (f - n) + f + n) * 0.5; #endif #endif } `;var bGi=_(T(),1),eL=`in vec3 position; uniform vec3 u_radii; out vec3 v_positionEC; void main() { // In the vertex data, the cube goes from (-1.0, -1.0, -1.0) to (1.0, 1.0, 1.0) in model coordinates. // Scale to consider the radii. We could also do this once on the CPU when using the BoxGeometry, // but doing it here allows us to change the radii without rewriting the vertex data, and // allows all ellipsoids to reuse the same vertex data. vec4 p = vec4(u_radii * position, 1.0); v_positionEC = (czm_modelView * p).xyz; // position in eye coordinates gl_Position = czm_modelViewProjection * p; // position in clip coordinates // With multi-frustum, when the ellipsoid primitive is positioned on the intersection of two frustums // and close to terrain, the terrain (writes depth) in the closest frustum can overwrite part of the // ellipsoid (does not write depth) that was rendered in the farther frustum. // // Here, we clamp the depth in the vertex shader to avoid being overwritten; however, this creates // artifacts since some fragments can be alpha blended twice. This is solved by only rendering // the ellipsoid in the closest frustum to the viewer. gl_Position.z = clamp(gl_Position.z, czm_depthRange.near, czm_depthRange.far); czm_vertexLogDepth(); } `;var pj={position:0};function jD(e){e=e??Y.EMPTY_OBJECT,this.center=m.clone(e.center??m.ZERO),this._center=new m,this.radii=m.clone(e.radii),this._radii=new m,this._oneOverEllipsoidRadiiSquared=new m,this._boundingSphere=new le,this.modelMatrix=F.clone(e.modelMatrix??F.IDENTITY),this._modelMatrix=new F,this._computedModelMatrix=new F,this.show=e.show??!0,this.material=e.material??zi.fromType(zi.ColorType),this._material=void 0,this._translucent=void 0,this.id=e.id,this._id=void 0,this.debugShowBoundingVolume=e.debugShowBoundingVolume??!1,this.onlySunLighting=e.onlySunLighting??!1,this._onlySunLighting=!1,this._depthTestEnabled=e.depthTestEnabled??!0,this._useLogDepth=!1,this._sp=void 0,this._rs=void 0,this._va=void 0,this._pickSP=void 0,this._pickId=void 0,this._colorCommand=new $e({owner:e._owner??this}),this._pickCommand=new $e({owner:e._owner??this,pickOnly:!0});let t=this;this._uniforms={u_radii:function(){return t.radii},u_oneOverEllipsoidRadiiSquared:function(){return t._oneOverEllipsoidRadiiSquared}},this._pickUniforms={czm_pickColor:function(){return t._pickId.color}}}function clt(e){let t=e.cache.ellipsoidPrimitive_vertexArray;if(l(t))return t;let n=Wa.createGeometry(Wa.fromDimensions({dimensions:new m(2,2,2),vertexFormat:Xe.POSITION_ONLY}));return t=ni.fromGeometry({context:e,geometry:n,attributeLocations:pj,bufferUsage:Me.STATIC_DRAW,interleave:!0}),e.cache.ellipsoidPrimitive_vertexArray=t,t}jD.prototype.update=function(e){if(!this.show||e.mode!==oe.SCENE3D||!l(this.center)||!l(this.radii))return;let t=e.context,n=this.material.isTranslucent(),i=this._translucent!==n;(!l(this._rs)||i)&&(this._translucent=n,this._rs=Ue.fromCache({cull:{enabled:!0,face:Ti.FRONT},depthTest:{enabled:this._depthTestEnabled},depthMask:!n&&t.fragmentDepth,blending:n?un.ALPHA_BLEND:void 0})),l(this._va)||(this._va=clt(t));let o=!1,r=this.radii;if(!m.equals(this._radii,r)){m.clone(r,this._radii);let y=this._oneOverEllipsoidRadiiSquared;y.x=1/(r.x*r.x),y.y=1/(r.y*r.y),y.z=1/(r.z*r.z),o=!0}(!F.equals(this.modelMatrix,this._modelMatrix)||!m.equals(this.center,this._center))&&(F.clone(this.modelMatrix,this._modelMatrix),m.clone(this.center,this._center),F.multiplyByTranslation(this.modelMatrix,this.center,this._computedModelMatrix),o=!0),o&&(m.clone(m.ZERO,this._boundingSphere.center),this._boundingSphere.radius=m.maximumComponent(r),le.transform(this._boundingSphere,this._computedModelMatrix,this._boundingSphere));let s=this._material!==this.material;this._material=this.material,this._material.update(t);let a=this.onlySunLighting!==this._onlySunLighting;this._onlySunLighting=this.onlySunLighting;let c=e.useLogDepth,d=this._useLogDepth!==c;this._useLogDepth=c;let u=this._colorCommand,h,p;(s||a||i||d)&&(h=new De({sources:[eL]}),p=new De({sources:[this.material.shaderSource,$V]}),this.onlySunLighting&&p.defines.push("ONLY_SUN_LIGHTING"),!n&&t.fragmentDepth&&p.defines.push("WRITE_DEPTH"),this._useLogDepth&&(h.defines.push("LOG_DEPTH"),p.defines.push("LOG_DEPTH")),this._sp=$t.replaceCache({context:t,shaderProgram:this._sp,vertexShaderSource:h,fragmentShaderSource:p,attributeLocations:pj}),u.vertexArray=this._va,u.renderState=this._rs,u.shaderProgram=this._sp,u.uniformMap=St(this._uniforms,this.material._uniforms),u.executeInClosestFrustum=n);let g=e.commandList,f=e.passes;if(f.render&&(u.boundingVolume=this._boundingSphere,u.debugShowBoundingVolume=this.debugShowBoundingVolume,u.modelMatrix=this._computedModelMatrix,u.pass=n?Ee.TRANSLUCENT:Ee.OPAQUE,g.push(u)),f.pick){let y=this._pickCommand;(!l(this._pickId)||this._id!==this.id)&&(this._id=this.id,this._pickId=this._pickId&&this._pickId.destroy(),this._pickId=t.createPickId({primitive:this,id:this.id})),(s||a||!l(this._pickSP)||d)&&(h=new De({sources:[eL]}),p=new De({sources:[this.material.shaderSource,$V],pickColorQualifier:"uniform"}),this.onlySunLighting&&p.defines.push("ONLY_SUN_LIGHTING"),!n&&t.fragmentDepth&&p.defines.push("WRITE_DEPTH"),this._useLogDepth&&(h.defines.push("LOG_DEPTH"),p.defines.push("LOG_DEPTH")),this._pickSP=$t.replaceCache({context:t,shaderProgram:this._pickSP,vertexShaderSource:h,fragmentShaderSource:p,attributeLocations:pj}),y.vertexArray=this._va,y.renderState=this._rs,y.shaderProgram=this._pickSP,y.uniformMap=St(St(this._uniforms,this._pickUniforms),this.material._uniforms),y.executeInClosestFrustum=n),y.boundingVolume=this._boundingSphere,y.modelMatrix=this._computedModelMatrix,y.pass=n?Ee.TRANSLUCENT:Ee.OPAQUE,g.push(y)}};jD.prototype.isDestroyed=function(){return!1};jD.prototype.destroy=function(){return this._sp=this._sp&&this._sp.destroy(),this._pickSP=this._pickSP&&this._pickSP.destroy(),this._pickId=this._pickId&&this._pickId.destroy(),me(this)};var tF=jD;function nF(e){e=e??Y.EMPTY_OBJECT;let t=e.textureUrl;l(t)||(t=nn("Assets/Textures/moonSmall.jpg")),this.show=e.show??!0,this.textureUrl=t,this._ellipsoid=e.ellipsoid??ne.MOON,this.onlySunLighting=e.onlySunLighting??!0,this._ellipsoidPrimitive=new tF({radii:this.ellipsoid.radii,material:zi.fromType(zi.ImageType),depthTestEnabled:!1,_owner:this}),this._ellipsoidPrimitive.material.translucent=!1,this._axes=new eF}Object.defineProperties(nF.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}});var qD=new $,llt=new $,dlt=new m,$D=[];nF.prototype.update=function(e){if(!this.show)return;let t=this._ellipsoidPrimitive;t.material.uniforms.image=this.textureUrl,t.onlySunLighting=this.onlySunLighting;let n=e.time;l(Pt.computeIcrfToFixedMatrix(n,qD))||Pt.computeTemeToPseudoFixedMatrix(n,qD);let i=this._axes.evaluate(n,llt);$.transpose(i,i),$.multiply(qD,i,i);let o=O0.computeMoonPositionInEarthInertialFrame(n,dlt);$.multiplyByVector(qD,o,o),F.fromRotationTranslation(i,o,t.modelMatrix);let r=e.commandList;return e.commandList=$D,$D.length=0,t.update(e),e.commandList=r,$D.length===1?$D[0]:void 0};nF.prototype.isDestroyed=function(){return!1};nF.prototype.destroy=function(){return this._ellipsoidPrimitive=this._ellipsoidPrimitive&&this._ellipsoidPrimitive.destroy(),me(this)};var iF=nF;var sOi=_(T(),1);var iEi=_(T(),1);var bj=[],gj=[];function ult(e,t,n,i,o,r){let s=o-i+1,a=r-o,c=bj,d=gj,u,h;for(u=0;u<s;++u)c[u]=e[i+u];for(h=0;h<a;++h)d[h]=e[o+h+1];u=0,h=0;for(let p=i;p<=r;++p){let g=c[u],f=d[h];u<s&&(h>=a||t(g,f,n)<=0)?(e[p]=g,++u):h<a&&(e[p]=f,++h)}}function yj(e,t,n,i,o){if(i>=o)return;let r=Math.floor((i+o)*.5);yj(e,t,n,i,r),yj(e,t,n,r+1,o),ult(e,t,n,i,r,o)}function mlt(e,t,n){let i=e.length,o=Math.ceil(i*.5);bj.length=o,gj.length=o,yj(e,t,n,0,i-1),bj.length=0,gj.length=0}var f0=mlt;var mEi=_(T(),1);function Zc(e,t){this._occluderPosition=m.clone(e.center),this._occluderRadius=e.radius,this._horizonDistance=0,this._horizonPlaneNormal=void 0,this._horizonPlanePosition=void 0,this._cameraPosition=void 0,this.cameraPosition=t}var e3=new m;Object.defineProperties(Zc.prototype,{position:{get:function(){return this._occluderPosition}},radius:{get:function(){return this._occluderRadius}},cameraPosition:{set:function(e){e=m.clone(e,this._cameraPosition);let t=m.subtract(this._occluderPosition,e,e3),n=m.magnitudeSquared(t),i=this._occluderRadius*this._occluderRadius,o,r,s;if(n>i){o=Math.sqrt(n-i),n=1/Math.sqrt(n),r=m.multiplyByScalar(t,n,e3);let a=o*o*n;s=m.add(e,m.multiplyByScalar(r,a,e3),e3)}else o=Number.MAX_VALUE;this._horizonDistance=o,this._horizonPlaneNormal=r,this._horizonPlanePosition=s,this._cameraPosition=e}}});Zc.fromBoundingSphere=function(e,t,n){return l(n)?(m.clone(e.center,n._occluderPosition),n._occluderRadius=e.radius,n.cameraPosition=t,n):new Zc(e,t)};var Lye=new m;Zc.prototype.isPointVisible=function(e){if(this._horizonDistance!==Number.MAX_VALUE){let t=m.subtract(e,this._occluderPosition,Lye),n=this._occluderRadius;if(n=m.magnitudeSquared(t)-n*n,n>0)return n=Math.sqrt(n)+this._horizonDistance,t=m.subtract(e,this._cameraPosition,t),n*n>m.magnitudeSquared(t)}return!1};var hlt=new m;Zc.prototype.isBoundingSphereVisible=function(e){let t=m.clone(e.center,hlt),n=e.radius;if(this._horizonDistance!==Number.MAX_VALUE){let i=m.subtract(t,this._occluderPosition,Lye),o=this._occluderRadius-n;if(o=m.magnitudeSquared(i)-o*o,n<this._occluderRadius)return o>0?(o=Math.sqrt(o)+this._horizonDistance,i=m.subtract(t,this._cameraPosition,i),o*o+n*n>m.magnitudeSquared(i)):!1;if(o>0){i=m.subtract(t,this._cameraPosition,i);let r=m.magnitudeSquared(i),s=this._occluderRadius*this._occluderRadius,a=n*n;return(this._horizonDistance*this._horizonDistance+s)*a>r*s?!0:(o=Math.sqrt(o)+this._horizonDistance,o*o+a>r)}return!0}return!1};var flt=new m;Zc.prototype.computeVisibility=function(e){let t=m.clone(e.center),n=e.radius;if(n>this._occluderRadius)return hr.FULL;if(this._horizonDistance!==Number.MAX_VALUE){let i=m.subtract(t,this._occluderPosition,flt),o=this._occluderRadius-n,r=m.magnitudeSquared(i);if(o=r-o*o,o>0){o=Math.sqrt(o)+this._horizonDistance,i=m.subtract(t,this._cameraPosition,i);let s=m.magnitudeSquared(i);return o*o+n*n<s?hr.NONE:(o=this._occluderRadius+n,o=r-o*o,o>0?(o=Math.sqrt(o)+this._horizonDistance,s<o*o+n*n?hr.FULL:hr.PARTIAL):(i=m.subtract(t,this._horizonPlanePosition,i),m.dot(i,this._horizonPlaneNormal)>-n?hr.PARTIAL:hr.FULL))}}return hr.NONE};var t3=new m;Zc.computeOccludeePoint=function(e,t,n){let i=m.clone(t),o=m.clone(e.center),r=e.radius,s=n.length,a=m.normalize(m.subtract(i,o,t3),t3),c=-m.dot(a,o),d=Zc._anyRotationVector(o,a,c),u=Zc._horizonToPlaneNormalDotProduct(e,a,c,d,n[0]);if(!u)return;let h;for(let g=1;g<s;++g){if(h=Zc._horizonToPlaneNormalDotProduct(e,a,c,d,n[g]),!h)return;h<u&&(u=h)}if(u<.0017453283658983088)return;let p=r/u;return m.add(o,m.multiplyByScalar(a,p,t3),t3)};var plt=[];Zc.computeOccludeePointFromRectangle=function(e,t){t=t??ne.default;let n=ce.subsample(e,t,0,plt),i=le.fromPoints(n),o=m.ZERO;if(!m.equals(o,i.center))return Zc.computeOccludeePoint(new le(o,t.minimumRadius),i.center,n)};var blt=new m;Zc._anyRotationVector=function(e,t,n){let i=m.abs(t,blt),o=i.x>i.y?0:1;(o===0&&i.z>i.x||o===1&&i.z>i.y)&&(o=2);let r=new m,s;o===0?(i.x=e.x,i.y=e.y+1,i.z=e.z+1,s=m.UNIT_X):o===1?(i.x=e.x+1,i.y=e.y,i.z=e.z+1,s=m.UNIT_Y):(i.x=e.x+1,i.y=e.y+1,i.z=e.z,s=m.UNIT_Z);let a=(m.dot(t,i)+n)/-m.dot(t,s);return m.normalize(m.subtract(m.add(i,m.multiplyByScalar(s,a,r),i),e,i),i)};var glt=new m;Zc._rotationVector=function(e,t,n,i,o){let r=m.subtract(i,e,glt);if(r=m.normalize(r,r),m.dot(t,r)<.9999999847691291){let s=m.cross(t,r,r);if(m.magnitude(s)>X.EPSILON13)return m.normalize(s,new m)}return o};var xj=new m,ylt=new m,n3=new m,Vye=new m;Zc._horizonToPlaneNormalDotProduct=function(e,t,n,i,o){let r=m.clone(o,xj),s=m.clone(e.center,ylt),a=e.radius,c=m.subtract(s,r,n3),d=m.magnitudeSquared(c),u=a*a;if(d<u)return!1;let h=d-u,p=Math.sqrt(h),f=1/Math.sqrt(d),x=p*f*p;c=m.normalize(c,c);let S=m.add(r,m.multiplyByScalar(c,x,Vye),Vye),C=Math.sqrt(h-x*x),V=this._rotationVector(s,t,n,r,i),L=m.fromElements(V.x*V.x*c.x+(V.x*V.y-V.z)*c.y+(V.x*V.z+V.y)*c.z,(V.x*V.y+V.z)*c.x+V.y*V.y*c.y+(V.y*V.z-V.x)*c.z,(V.x*V.z-V.y)*c.x+(V.y*V.z+V.x)*c.y+V.z*V.z*c.z,xj);L=m.normalize(L,L);let Z=m.multiplyByScalar(L,C,xj);V=m.normalize(m.subtract(m.add(S,Z,n3),s,n3),n3);let E=m.dot(t,V);V=m.normalize(m.subtract(m.subtract(S,Z,V),s,V),V);let P=m.dot(t,V);return E<P?E:P};var oF=Zc;var ZEi=_(T(),1);var TEi=_(T(),1);function np(e){e=e??Y.EMPTY_OBJECT,this.left=e.left,this._left=void 0,this.right=e.right,this._right=void 0,this.top=e.top,this._top=void 0,this.bottom=e.bottom,this._bottom=void 0,this.near=e.near??1,this._near=this.near,this.far=e.far??5e8,this._far=this.far,this._cullingVolume=new hs,this._perspectiveMatrix=new F,this._infinitePerspective=new F}function _j(e){let{top:t,bottom:n,right:i,left:o,near:r,far:s}=e;(t!==e._top||n!==e._bottom||o!==e._left||i!==e._right||r!==e._near||s!==e._far)&&(e._left=o,e._right=i,e._top=t,e._bottom=n,e._near=r,e._far=s,e._perspectiveMatrix=F.computePerspectiveOffCenter(o,i,n,t,r,s,e._perspectiveMatrix),e._infinitePerspective=F.computeInfinitePerspectiveOffCenter(o,i,n,t,r,e._infinitePerspective))}Object.defineProperties(np.prototype,{projectionMatrix:{get:function(){return _j(this),this._perspectiveMatrix}},infiniteProjectionMatrix:{get:function(){return _j(this),this._infinitePerspective}}});var xlt=new m,_lt=new m,Tlt=new m,Slt=new m;np.prototype.computeCullingVolume=function(e,t,n){let i=this._cullingVolume.planes,o=this.top,r=this.bottom,s=this.right,a=this.left,c=this.near,d=this.far,u=m.cross(t,n,xlt),h=_lt;m.multiplyByScalar(t,c,h),m.add(e,h,h);let p=Tlt;m.multiplyByScalar(t,d,p),m.add(e,p,p);let g=Slt;m.multiplyByScalar(u,a,g),m.add(h,g,g),m.subtract(g,e,g),m.normalize(g,g),m.cross(g,n,g),m.normalize(g,g);let f=i[0];return l(f)||(f=i[0]=new se),f.x=g.x,f.y=g.y,f.z=g.z,f.w=-m.dot(g,e),m.multiplyByScalar(u,s,g),m.add(h,g,g),m.subtract(g,e,g),m.cross(n,g,g),m.normalize(g,g),f=i[1],l(f)||(f=i[1]=new se),f.x=g.x,f.y=g.y,f.z=g.z,f.w=-m.dot(g,e),m.multiplyByScalar(n,r,g),m.add(h,g,g),m.subtract(g,e,g),m.cross(u,g,g),m.normalize(g,g),f=i[2],l(f)||(f=i[2]=new se),f.x=g.x,f.y=g.y,f.z=g.z,f.w=-m.dot(g,e),m.multiplyByScalar(n,o,g),m.add(h,g,g),m.subtract(g,e,g),m.cross(g,u,g),m.normalize(g,g),f=i[3],l(f)||(f=i[3]=new se),f.x=g.x,f.y=g.y,f.z=g.z,f.w=-m.dot(g,e),f=i[4],l(f)||(f=i[4]=new se),f.x=t.x,f.y=t.y,f.z=t.z,f.w=-m.dot(t,h),m.negate(t,g),f=i[5],l(f)||(f=i[5]=new se),f.x=g.x,f.y=g.y,f.z=g.z,f.w=-m.dot(g,p),this._cullingVolume};np.prototype.getPixelDimensions=function(e,t,n,i,o){_j(this);let r=1/this.near,s=this.top*r,a=2*i*n*s/t;s=this.right*r;let c=2*i*n*s/e;return o.x=c,o.y=a,o};np.prototype.clone=function(e){return l(e)||(e=new np),e.right=this.right,e.left=this.left,e.top=this.top,e.bottom=this.bottom,e.near=this.near,e.far=this.far,e._left=void 0,e._right=void 0,e._top=void 0,e._bottom=void 0,e._near=void 0,e._far=void 0,e};np.prototype.equals=function(e){return l(e)&&e instanceof np&&this.right===e.right&&this.left===e.left&&this.top===e.top&&this.bottom===e.bottom&&this.near===e.near&&this.far===e.far};np.prototype.equalsEpsilon=function(e,t,n){return e===this||l(e)&&e instanceof np&&X.equalsEpsilon(this.right,e.right,t,n)&&X.equalsEpsilon(this.left,e.left,t,n)&&X.equalsEpsilon(this.top,e.top,t,n)&&X.equalsEpsilon(this.bottom,e.bottom,t,n)&&X.equalsEpsilon(this.near,e.near,t,n)&&X.equalsEpsilon(this.far,e.far,t,n)};var bl=np;function td(e){e=e??Y.EMPTY_OBJECT,this._offCenterFrustum=new bl,this.fov=e.fov,this._fov=void 0,this._fovy=void 0,this._sseDenominator=void 0,this.aspectRatio=e.aspectRatio,this._aspectRatio=void 0,this.near=e.near??1,this._near=this.near,this.far=e.far??5e8,this._far=this.far,this.xOffset=e.xOffset??0,this._xOffset=this.xOffset,this.yOffset=e.yOffset??0,this._yOffset=this.yOffset}td.packedLength=6;td.pack=function(e,t,n){return n=n??0,t[n++]=e.fov,t[n++]=e.aspectRatio,t[n++]=e.near,t[n++]=e.far,t[n++]=e.xOffset,t[n]=e.yOffset,t};td.unpack=function(e,t,n){return t=t??0,l(n)||(n=new td),n.fov=e[t++],n.aspectRatio=e[t++],n.near=e[t++],n.far=e[t++],n.xOffset=e[t++],n.yOffset=e[t],n};function kh(e){if(!(e.fov!==e._fov||e.aspectRatio!==e._aspectRatio||e.near!==e._near||e.far!==e._far||e.xOffset!==e._xOffset||e.yOffset!==e._yOffset))return;e._aspectRatio=e.aspectRatio,e._fov=e.fov,e._fovy=e.aspectRatio<=1?e.fov:Math.atan(Math.tan(e.fov*.5)/e.aspectRatio)*2,e._near=e.near,e._far=e.far,e._sseDenominator=2*Math.tan(.5*e._fovy),e._xOffset=e.xOffset,e._yOffset=e.yOffset;let n=e._offCenterFrustum;n.top=e.near*Math.tan(.5*e._fovy),n.bottom=-n.top,n.right=e.aspectRatio*n.top,n.left=-n.right,n.near=e.near,n.far=e.far,n.right+=e.xOffset,n.left+=e.xOffset,n.top+=e.yOffset,n.bottom+=e.yOffset}Object.defineProperties(td.prototype,{projectionMatrix:{get:function(){return kh(this),this._offCenterFrustum.projectionMatrix}},infiniteProjectionMatrix:{get:function(){return kh(this),this._offCenterFrustum.infiniteProjectionMatrix}},fovy:{get:function(){return kh(this),this._fovy}},sseDenominator:{get:function(){return kh(this),this._sseDenominator}},offCenterFrustum:{get:function(){return kh(this),this._offCenterFrustum}}});td.prototype.computeCullingVolume=function(e,t,n){return kh(this),this._offCenterFrustum.computeCullingVolume(e,t,n)};td.prototype.getPixelDimensions=function(e,t,n,i,o){return kh(this),this._offCenterFrustum.getPixelDimensions(e,t,n,i,o)};td.prototype.clone=function(e){return l(e)||(e=new td),e.aspectRatio=this.aspectRatio,e.fov=this.fov,e.near=this.near,e.far=this.far,e._aspectRatio=void 0,e._fov=void 0,e._near=void 0,e._far=void 0,this._offCenterFrustum.clone(e._offCenterFrustum),e};td.prototype.equals=function(e){return!l(e)||!(e instanceof td)?!1:(kh(this),kh(e),this.fov===e.fov&&this.aspectRatio===e.aspectRatio&&this._offCenterFrustum.equals(e._offCenterFrustum))};td.prototype.equalsEpsilon=function(e,t,n){return!l(e)||!(e instanceof td)?!1:(kh(this),kh(e),X.equalsEpsilon(this.fov,e.fov,t,n)&&X.equalsEpsilon(this.aspectRatio,e.aspectRatio,t,n)&&this._offCenterFrustum.equalsEpsilon(e._offCenterFrustum,t,n))};var Gi=td;var UEi=_(T(),1);var EEi=_(T(),1),rF=`in vec2 v_textureCoordinates; const float M_PI = 3.141592653589793; float vdcRadicalInverse(int i) { float r; float base = 2.0; float value = 0.0; float invBase = 1.0 / base; float invBi = invBase; for (int x = 0; x < 100; x++) { if (i <= 0) { break; } r = mod(float(i), base); value += r * invBi; invBi *= invBase; i = int(float(i) * invBase); } return value; } vec2 hammersley2D(int i, int N) { return vec2(float(i) / float(N), vdcRadicalInverse(i)); } vec3 importanceSampleGGX(vec2 xi, float alphaRoughness, vec3 N) { float alphaRoughnessSquared = alphaRoughness * alphaRoughness; float phi = 2.0 * M_PI * xi.x; float cosTheta = sqrt((1.0 - xi.y) / (1.0 + (alphaRoughnessSquared - 1.0) * xi.y)); float sinTheta = sqrt(1.0 - cosTheta * cosTheta); vec3 H = vec3(sinTheta * cos(phi), sinTheta * sin(phi), cosTheta); vec3 upVector = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0); vec3 tangentX = normalize(cross(upVector, N)); vec3 tangentY = cross(N, tangentX); return tangentX * H.x + tangentY * H.y + N * H.z; } /** * Estimate the geometric self-shadowing of the microfacets in a surface, * using the Smith Joint GGX visibility function. * Note: Vis = G / (4 * NdotL * NdotV) * see Eric Heitz. 2014. Understanding the Masking-Shadowing Function in Microfacet-Based BRDFs. Journal of Computer Graphics Techniques, 3 * see Real-Time Rendering. Page 331 to 336. * see https://google.github.io/filament/Filament.md.html#materialsystem/specularbrdf/geometricshadowing(specularg) * * @param {float} alphaRoughness The roughness of the material, expressed as the square of perceptual roughness. * @param {float} NdotL The cosine of the angle between the surface normal and the direction to the light source. * @param {float} NdotV The cosine of the angle between the surface normal and the direction to the camera. */ float smithVisibilityGGX(float alphaRoughness, float NdotL, float NdotV) { float alphaRoughnessSq = alphaRoughness * alphaRoughness; float GGXV = NdotL * sqrt(NdotV * NdotV * (1.0 - alphaRoughnessSq) + alphaRoughnessSq); float GGXL = NdotV * sqrt(NdotL * NdotL * (1.0 - alphaRoughnessSq) + alphaRoughnessSq); float GGX = GGXV + GGXL; // 2.0 if NdotL = NdotV = 1.0 if (GGX > 0.0) { return 0.5 / GGX; // 1/4 if NdotL = NdotV = 1.0 } return 0.0; } vec2 integrateBrdf(float roughness, float NdotV) { vec3 V = vec3(sqrt(1.0 - NdotV * NdotV), 0.0, NdotV); float A = 0.0; float B = 0.0; const int NumSamples = 1024; float alphaRoughness = roughness * roughness; for (int i = 0; i < NumSamples; i++) { vec2 xi = hammersley2D(i, NumSamples); vec3 H = importanceSampleGGX(xi, alphaRoughness, vec3(0.0, 0.0, 1.0)); vec3 L = 2.0 * dot(V, H) * H - V; float NdotL = clamp(L.z, 0.0, 1.0); float NdotH = clamp(H.z, 0.0, 1.0); float VdotH = clamp(dot(V, H), 0.0, 1.0); if (NdotL > 0.0) { float G = smithVisibilityGGX(alphaRoughness, NdotL, NdotV); float G_Vis = 4.0 * G * VdotH * NdotL / NdotH; float Fc = pow(1.0 - VdotH, 5.0); A += (1.0 - Fc) * G_Vis; B += Fc * G_Vis; } } return vec2(A, B) / float(NumSamples); } void main() { out_FragColor = vec4(integrateBrdf(v_textureCoordinates.y, v_textureCoordinates.x), 0.0, 1.0); } `;function sF(){this._colorTexture=void 0,this._drawCommand=void 0}Object.defineProperties(sF.prototype,{colorTexture:{get:function(){return this._colorTexture}}});function Clt(e,t,n){let i=t.createViewportQuadCommand(rF,{framebuffer:n,renderState:Ue.fromCache({viewport:new Ke(0,0,256,256)})});e._drawCommand=i}sF.prototype.update=function(e){if(!l(this._colorTexture)){let t=e.context,n=new vt({context:t,width:256,height:256,pixelFormat:it.RGBA,pixelDatatype:je.UNSIGNED_BYTE,sampler:qt.NEAREST});this._colorTexture=n;let i=new Wr({context:t,colorTextures:[n],destroyAttachments:!1});Clt(this,t,i),this._drawCommand.execute(t),i.destroy(),this._drawCommand.shaderProgram=this._drawCommand.shaderProgram&&this._drawCommand.shaderProgram.destroy()}};sF.prototype.isDestroyed=function(){return!1};sF.prototype.destroy=function(){return this._colorTexture=this._colorTexture&&this._colorTexture.destroy(),me(this)};var aF=sF;var XIi=_(T(),1);var $Ei=_(T(),1);var Eye={};function Vlt(e,t,n){let i,o,r;if(e instanceof Gi){let s=Math.tan(.5*e.fovy);return i=e.near,o=e.near*s,r=e.aspectRatio*o,Math.max(t*i/r,n*i/o)}else if(e instanceof bl)return i=e.near,o=e.top,r=e.right,Math.max(t*i/r,n*i/o);return Math.max(t,n)}var Llt=new m,Rye=new m;function Iye(e,t,n,i){if(l(i)&&n(.5)>i){let o=n(0),r=n(1),s=n(.5),a=s-o,c=s-r;return function(d){let u=n(d);if(d<=.5){let p=(u-o)/a;return X.lerp(e,-X.PI_OVER_TWO,p)}let h=(u-r)/c;return X.lerp(-X.PI_OVER_TWO,t,1-h)}}return function(o){return X.lerp(e,t,o)}}function Sj(e,t,n,i,o){let r=o,s=Math.max(n,i);if(!l(r)){let a=e.position,c=t,d=e.up,u=e.right,h=e.frustum,p=m.subtract(a,c,Llt),g=m.magnitude(m.multiplyByScalar(d,m.dot(p,d),Rye)),f=m.magnitude(m.multiplyByScalar(u,m.dot(p,u),Rye));r=Math.min(Vlt(h,g,f)*.2,1e9)}if(s<r){let d=-Math.pow((r-n)*1e6,.125),u=Math.pow((r-i)*1e6,1/8);return function(h){let p=h*(u-d)+d;return-Math.pow(p,8)/1e6+r}}return function(a){return X.lerp(n,i,a)}}function cF(e,t){return X.equalsEpsilon(e,X.TWO_PI,X.EPSILON11)&&(e=0),t>e+Math.PI?e+=X.TWO_PI:t<e-Math.PI&&(e-=X.TWO_PI),e}var Xye=new m;function Rlt(e,t,n,i,o,r,s,a){let c=e.camera,d=m.clone(c.position,Xye),u=c.pitch,h=cF(c.heading,i),p=cF(c.roll,r),g=Sj(c,n,d.z,n.z,s),f=Iye(u,o,g,a);function y(x){let S=x.time/t;c.setView({orientation:{heading:X.lerp(h,i,S),pitch:f(S),roll:X.lerp(p,r,S)}}),U.lerp(d,n,S,c.position),c.position.z=g(S)}return y}function Zlt(e,t){e.longitude<t.longitude?e.longitude+=X.TWO_PI:t.longitude+=X.TWO_PI}function Glt(e,t){let n=e.longitude-t.longitude;n<-X.PI?e.longitude+=X.TWO_PI:n>X.PI&&(t.longitude+=X.TWO_PI)}var Elt=new he,Ilt=new he;function Xlt(e,t,n,i,o,r,s,a,c,d){let u=e.camera,p=e.mapProjection.ellipsoid,g=he.clone(u.positionCartographic,Elt),f=u.pitch,y=cF(u.heading,i),x=cF(u.roll,r),S=p.cartesianToCartographic(n,Ilt);g.longitude=X.zeroToTwoPi(g.longitude),S.longitude=X.zeroToTwoPi(S.longitude);let C=!1;if(l(a)){let E=X.zeroToTwoPi(a),P=Math.min(g.longitude,S.longitude),W=Math.max(g.longitude,S.longitude),v=E>=P&&E<=W;if(l(c)){let A=Math.abs(g.longitude-S.longitude),b=X.TWO_PI-A;(v?A:b)<(v?b:A)*c&&!v&&(C=!0)}else v||(C=!0)}C?Zlt(g,S):Glt(g,S);let V=Sj(u,n,g.height,S.height,s),L=Iye(f,o,V,d);function Z(){let E=g.longitude,P=S.longitude,W=g.latitude,v=S.latitude;return function(b){let R=b.time/t,G=m.fromRadians(X.lerp(E,P,R),X.lerp(W,v,R),V(R),p);u.setView({destination:G,orientation:{heading:X.lerp(y,i,R),pitch:L(R),roll:X.lerp(x,r,R)}})}}return Z()}function Wlt(e,t,n,i,o,r,s){let a=e.camera,c=m.clone(a.position,Xye),d=cF(a.heading,i),u=a.frustum.right-a.frustum.left,h=Sj(a,n,u,n.z,s);function p(g){let f=g.time/t;a.setView({orientation:{heading:X.lerp(d,i,f)}}),U.lerp(c,n,f,a.position);let y=h(f),x=a.frustum,S=x.top/x.right,C=(y-(x.right-x.left))*.5;x.right+=C,x.left-=C,x.top=S*x.right,x.bottom=-x.top}return p}var Zye=new he,Plt=new m;function Tj(e,t){return{startObject:{},stopObject:{},duration:0,complete:e,cancel:t}}function Gye(e,t){function n(){typeof t=="function"&&t(),e.enableInputs=!0}return n}Eye.createTween=function(e,t){t=t??Y.EMPTY_OBJECT;let n=t.destination,i=e.mode;if(i===oe.MORPHING)return Tj();let o=t.convert??!0,r=e.mapProjection,s=r.ellipsoid,a=t.maximumHeight,c=t.flyOverLongitude,d=t.flyOverLongitudeWeight,u=t.pitchAdjustHeight,h=t.easingFunction;o&&i!==oe.SCENE3D&&(s.cartesianToCartographic(n,Zye),n=r.project(Zye,Plt));let p=e.camera,g=t.endTransform;l(g)&&p._setTransform(g);let f=t.duration;l(f)||(f=Math.ceil(m.distance(p.position,n)/1e6)+2,f=Math.min(f,3));let y=t.heading??0,x=t.pitch??-X.PI_OVER_TWO,S=t.roll??0,C=e.screenSpaceCameraController;C.enableInputs=!1;let V=Gye(C,t.complete),L=Gye(C,t.cancel),Z=p.frustum,E=e.mode===oe.SCENE2D;if(E=E&&U.equalsEpsilon(p.position,n,X.EPSILON6),E=E&&X.equalsEpsilon(Math.max(Z.right-Z.left,Z.top-Z.bottom),n.z,X.EPSILON6),E=E||e.mode!==oe.SCENE2D&&m.equalsEpsilon(n,p.position,X.EPSILON10),E=E&&X.equalsEpsilon(X.negativePiToPi(y),X.negativePiToPi(p.heading),X.EPSILON10)&&X.equalsEpsilon(X.negativePiToPi(x),X.negativePiToPi(p.pitch),X.EPSILON10)&&X.equalsEpsilon(X.negativePiToPi(S),X.negativePiToPi(p.roll),X.EPSILON10),E)return Tj(V,L);let P=new Array(4);if(P[oe.SCENE2D]=Wlt,P[oe.SCENE3D]=Xlt,P[oe.COLUMBUS_VIEW]=Rlt,f<=0)return Tj(function(){P[i](e,1,n,y,x,S,a,c,d,u)({time:1}),typeof V=="function"&&V()},L);let W=P[i](e,f,n,y,x,S,a,c,d,u);if(!l(h)){let v=p.positionCartographic.height,A=i===oe.SCENE3D?s.cartesianToCartographic(n).height:n.z;v>A&&v>11500?h=zr.CUBIC_OUT:h=zr.QUINTIC_IN_OUT}return{duration:f,easingFunction:h,startObject:{time:0},stopObject:{time:f},update:W,complete:V,cancel:L}};var lF=Eye;var tIi=_(T(),1),vlt={ROTATE:0,INFINITE_SCROLL:1},nd=Object.freeze(vlt);function tn(e){this._scene=e,this._transform=F.clone(F.IDENTITY),this._invTransform=F.clone(F.IDENTITY),this._actualTransform=F.clone(F.IDENTITY),this._actualInvTransform=F.clone(F.IDENTITY),this._transformChanged=!1,this.position=new m,this._position=new m,this._positionWC=new m,this._positionCartographic=new he,this._oldPositionWC=void 0,this.positionWCDeltaMagnitude=0,this.positionWCDeltaMagnitudeLastFrame=0,this.timeSinceMoved=0,this._lastMovedTimestamp=0,this.direction=new m,this._direction=new m,this._directionWC=new m,this.up=new m,this._up=new m,this._upWC=new m,this.right=new m,this._right=new m,this._rightWC=new m,this.frustum=new Gi,this.frustum.aspectRatio=e.drawingBufferWidth/e.drawingBufferHeight,this.frustum.fov=X.toRadians(60),this.defaultMoveAmount=1e5,this.defaultLookAmount=Math.PI/60,this.defaultRotateAmount=Math.PI/3600,this.defaultZoomAmount=1e5,this.constrainedAxis=void 0,this.maximumZoomFactor=1.5,this._moveStart=new be,this._moveEnd=new be,this._changed=new be,this._changedPosition=void 0,this._changedDirection=void 0,this._changedFrustum=void 0,this._changedHeading=void 0,this._changedRoll=void 0,this.percentageChanged=.5,this._viewMatrix=new F,this._invViewMatrix=new F,Nye(this),this._mode=oe.SCENE3D,this._modeChanged=!0;let t=e.mapProjection;this._projection=t,this._maxCoord=t.project(new he(Math.PI,X.PI_OVER_TWO)),this._max2Dfrustum=void 0,jye(this,tn.DEFAULT_VIEW_RECTANGLE,this.position,!0);let n=m.magnitude(this.position);n+=n*tn.DEFAULT_VIEW_FACTOR,m.normalize(this.position,this.position),m.multiplyByScalar(this.position,n,this.position)}tn.TRANSFORM_2D=new F(0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1);tn.TRANSFORM_2D_INVERSE=F.inverseTransformation(tn.TRANSFORM_2D,new F);tn.DEFAULT_VIEW_RECTANGLE=ce.fromDegrees(-95,-20,-70,90);tn.DEFAULT_VIEW_FACTOR=.5;tn.DEFAULT_OFFSET=new sm(0,-X.PI_OVER_FOUR,0);function Nye(e){F.computeView(e._position,e._direction,e._up,e._right,e._viewMatrix),F.multiply(e._viewMatrix,e._actualInvTransform,e._viewMatrix),F.inverseTransformation(e._viewMatrix,e._invViewMatrix)}function wlt(e){if(!l(e._oldPositionWC))e._oldPositionWC=m.clone(e.positionWC,e._oldPositionWC);else{e.positionWCDeltaMagnitudeLastFrame=e.positionWCDeltaMagnitude;let t=m.subtract(e.positionWC,e._oldPositionWC,e._oldPositionWC);e.positionWCDeltaMagnitude=m.magnitude(t),e._oldPositionWC=m.clone(e.positionWC,e._oldPositionWC),e.positionWCDeltaMagnitude>0?(e.timeSinceMoved=0,e._lastMovedTimestamp=Si()):e.timeSinceMoved=Math.max(Si()-e._lastMovedTimestamp,0)/1e3}}tn.prototype.canPreloadFlight=function(){return l(this._currentFlight)&&this._mode!==oe.SCENE2D};tn.prototype._updateCameraChanged=function(){let e=this;if(wlt(e),e._changed.numberOfListeners===0)return;let t=e.percentageChanged,n=e.heading;l(e._changedHeading)||(e._changedHeading=n);let i=Math.abs(e._changedHeading-n)%X.TWO_PI;i=i>X.PI?X.TWO_PI-i:i;let o=i/Math.PI;o>t&&(e._changedHeading=n);let r=e.roll;l(e._changedRoll)||(e._changedRoll=r);let s=Math.abs(e._changedRoll-r)%X.TWO_PI;s=s>X.PI?X.TWO_PI-s:s;let a=s/Math.PI;if(a>t&&(e._changedRoll=r),(a>t||o>t)&&e._changed.raiseEvent(Math.max(a,o)),e._mode===oe.SCENE2D){if(!l(e._changedFrustum)){e._changedPosition=m.clone(e.position,e._changedPosition),e._changedFrustum=e.frustum.clone();return}let p=e.position,g=e._changedPosition,f=e.frustum,y=e._changedFrustum,x=p.x+f.left,S=p.x+f.right,C=g.x+y.left,V=g.x+y.right,L=p.y+f.bottom,Z=p.y+f.top,E=g.y+y.bottom,P=g.y+y.top,W=Math.max(x,C),v=Math.min(S,V),A=Math.max(L,E),b=Math.min(Z,P),R;if(W>=v||A>=Z)R=1;else{let G=y;x<C&&S>V&&L<E&&Z>P&&(G=f),R=1-(v-W)*(b-A)/((G.right-G.left)*(G.top-G.bottom))}R>t&&(e._changed.raiseEvent(R),e._changedPosition=m.clone(e.position,e._changedPosition),e._changedFrustum=e.frustum.clone(e._changedFrustum));return}if(!l(e._changedDirection)){e._changedPosition=m.clone(e.positionWC,e._changedPosition),e._changedDirection=m.clone(e.directionWC,e._changedDirection);return}let c=X.acosClamped(m.dot(e.directionWC,e._changedDirection)),d;l(e.frustum.fovy)?d=c/(e.frustum.fovy*.5):d=c;let h=m.distance(e.positionWC,e._changedPosition)/e.positionCartographic.height;(d>t||h>t)&&(e._changed.raiseEvent(Math.max(d,h)),e._changedPosition=m.clone(e.positionWC,e._changedPosition),e._changedDirection=m.clone(e.directionWC,e._changedDirection))};function Flt(e){Pt.basisTo2D(e._projection,e._transform,e._actualTransform)}var Alt=new he,Mlt=new m,i3=new m,Nlt=new se,klt=new se,Ult=new se,Dlt=new se,Blt=new se;function Olt(e){let t=e._projection,n=t.ellipsoid,i=F.getColumn(e._transform,3,Nlt),o=n.cartesianToCartographic(i,Alt),r=t.project(o,Mlt),s=klt;s.x=r.z,s.y=r.x,s.z=r.y,s.w=1;let a=se.clone(se.UNIT_X,Blt),c=se.add(F.getColumn(e._transform,0,i3),i,i3);n.cartesianToCartographic(c,o),t.project(o,r);let d=Ult;d.x=r.z,d.y=r.x,d.z=r.y,d.w=0,m.subtract(d,s,d),d.x=0;let u=Dlt;if(m.magnitudeSquared(d)>X.EPSILON10)m.cross(a,d,u);else{let h=se.add(F.getColumn(e._transform,1,i3),i,i3);n.cartesianToCartographic(h,o),t.project(o,r),u.x=r.z,u.y=r.x,u.z=r.y,u.w=0,m.subtract(u,s,u),u.x=0,m.magnitudeSquared(u)<X.EPSILON10&&(se.clone(se.UNIT_Y,d),se.clone(se.UNIT_Z,u))}m.cross(u,a,d),m.normalize(d,d),m.cross(a,d,u),m.normalize(u,u),F.setColumn(e._actualTransform,0,d,e._actualTransform),F.setColumn(e._actualTransform,1,u,e._actualTransform),F.setColumn(e._actualTransform,2,a,e._actualTransform),F.setColumn(e._actualTransform,3,s,e._actualTransform)}var Cj=new m;function Ec(e){let t=e._mode,n=!1,i=0;t===oe.SCENE2D&&(i=e.frustum.right-e.frustum.left,n=i!==e._positionCartographic.height);let o=e._position,r=!m.equals(o,e.position)||n;r&&(o=m.clone(e.position,e._position));let s=e._direction,a=!m.equals(s,e.direction);a&&(m.normalize(e.direction,e.direction),s=m.clone(e.direction,e._direction));let c=e._up,d=!m.equals(c,e.up);d&&(m.normalize(e.up,e.up),c=m.clone(e.up,e._up));let u=e._right,h=!m.equals(u,e.right);h&&(m.normalize(e.right,e.right),u=m.clone(e.right,e._right));let p=e._transformChanged||e._modeChanged;e._transformChanged=!1,p&&(F.inverseTransformation(e._transform,e._invTransform),e._mode===oe.COLUMBUS_VIEW||e._mode===oe.SCENE2D?F.equals(F.IDENTITY,e._transform)?F.clone(tn.TRANSFORM_2D,e._actualTransform):e._mode===oe.COLUMBUS_VIEW?Flt(e):Olt(e):F.clone(e._transform,e._actualTransform),F.inverseTransformation(e._actualTransform,e._actualInvTransform),e._modeChanged=!1);let g=e._actualTransform;if(r||p)if(e._positionWC=F.multiplyByPoint(g,o,e._positionWC),t===oe.SCENE3D||t===oe.MORPHING)e._positionCartographic=e._projection.ellipsoid.cartesianToCartographic(e._positionWC,e._positionCartographic);else{let f=Cj;f.x=e._positionWC.y,f.y=e._positionWC.z,f.z=e._positionWC.x,t===oe.SCENE2D&&(f.z=i),e._projection.unproject(f,e._positionCartographic)}if(a||d||h){let f=m.dot(s,m.cross(c,u,Cj));if(Math.abs(1-f)>X.EPSILON2){let y=1/m.magnitudeSquared(c),x=m.dot(c,s)*y,S=m.multiplyByScalar(s,x,Cj);c=m.normalize(m.subtract(c,S,e._up),e._up),m.clone(c,e.up),u=m.cross(s,c,e._right),m.clone(u,e.right)}}(a||p)&&(e._directionWC=F.multiplyByPointAsVector(g,s,e._directionWC),m.normalize(e._directionWC,e._directionWC)),(d||p)&&(e._upWC=F.multiplyByPointAsVector(g,c,e._upWC),m.normalize(e._upWC,e._upWC)),(h||p)&&(e._rightWC=F.multiplyByPointAsVector(g,u,e._rightWC),m.normalize(e._rightWC,e._rightWC)),(r||a||d||h||p)&&Nye(e)}function kye(e,t){let n;return X.equalsEpsilon(Math.abs(e.z),1,X.EPSILON3)?n=Math.atan2(t.y,t.x)-X.PI_OVER_TWO:n=Math.atan2(e.y,e.x)-X.PI_OVER_TWO,X.TWO_PI-X.zeroToTwoPi(n)}function Uye(e){return X.PI_OVER_TWO-X.acosClamped(e.z)}function Dye(e,t,n){let i=0;return X.equalsEpsilon(Math.abs(e.z),1,X.EPSILON3)||(i=Math.atan2(-n.z,t.z),i=X.zeroToTwoPi(i+X.TWO_PI)),i}var s3=new F,a3=new F;Object.defineProperties(tn.prototype,{transform:{get:function(){return this._transform}},inverseTransform:{get:function(){return Ec(this),this._invTransform}},viewMatrix:{get:function(){return Ec(this),this._viewMatrix}},inverseViewMatrix:{get:function(){return Ec(this),this._invViewMatrix}},positionCartographic:{get:function(){return Ec(this),this._positionCartographic}},positionWC:{get:function(){return Ec(this),this._positionWC}},directionWC:{get:function(){return Ec(this),this._directionWC}},upWC:{get:function(){return Ec(this),this._upWC}},rightWC:{get:function(){return Ec(this),this._rightWC}},heading:{get:function(){if(this._mode!==oe.MORPHING){let e=this._projection.ellipsoid,t=F.clone(this._transform,s3),n=Pt.eastNorthUpToFixedFrame(this.positionWC,e,a3);this._setTransform(n);let i=kye(this.direction,this.up);return this._setTransform(t),i}}},pitch:{get:function(){if(this._mode!==oe.MORPHING){let e=this._projection.ellipsoid,t=F.clone(this._transform,s3),n=Pt.eastNorthUpToFixedFrame(this.positionWC,e,a3);this._setTransform(n);let i=Uye(this.direction);return this._setTransform(t),i}}},roll:{get:function(){if(this._mode!==oe.MORPHING){let e=this._projection.ellipsoid,t=F.clone(this._transform,s3),n=Pt.eastNorthUpToFixedFrame(this.positionWC,e,a3);this._setTransform(n);let i=Dye(this.direction,this.up,this.right);return this._setTransform(t),i}}},moveStart:{get:function(){return this._moveStart}},moveEnd:{get:function(){return this._moveEnd}},changed:{get:function(){return this._changed}}});tn.prototype.update=function(e){let t=!1;if(e!==this._mode&&(this._mode=e,this._modeChanged=e!==oe.MORPHING,t=this._mode===oe.SCENE2D),t){let n=this._max2Dfrustum=this.frustum.clone(),i=2,o=n.top/n.right;n.right=this._maxCoord.x*i,n.left=-n.right,n.top=o*n.right,n.bottom=-n.top}this._mode===oe.SCENE2D&&zye(this,this.position)};var Ylt=new m,zlt=new m,Hlt=new m;tn.prototype._setTransform=function(e){let t=m.clone(this.positionWC,Ylt),n=m.clone(this.upWC,zlt),i=m.clone(this.directionWC,Hlt);F.clone(e,this._transform),this._transformChanged=!0,Ec(this);let o=this._actualInvTransform;F.multiplyByPoint(o,t,this.position),F.multiplyByPointAsVector(o,i,this.direction),F.multiplyByPointAsVector(o,n,this.up),m.cross(this.direction,this.up,this.right),Ec(this)};var Klt=new U,Jlt=new pn,Qlt=new m,jlt=new m;function Bye(e){if(!F.equals(F.IDENTITY,e.transform))return m.magnitude(e.position);let t=e._scene,n=t.globe,i=Klt;i.x=t.drawingBufferWidth/t.pixelRatio/2,i.y=t.drawingBufferHeight/t.pixelRatio/2;let o;if(l(n)){let a=e.getPickRay(i,Jlt);o=n.pickWorldCoordinates(a,t,!0,Qlt)}let r;t.pickPositionSupported&&(r=t.pickPositionWorldCoordinates(i,jlt));let s;if(l(o)||l(r)){let a=l(r)?m.distance(r,e.positionWC):Number.POSITIVE_INFINITY,c=l(o)?m.distance(o,e.positionWC):Number.POSITIVE_INFINITY;s=Math.min(a,c)}else s=Math.max(e.positionCartographic.height,0);return s}tn.prototype._adjustOrthographicFrustum=function(e){this.frustum instanceof an&&(!e&&this._positionCartographic.height<15e4||(this.frustum.width=Bye(this)))};var c3=new m,Gj=new F,qlt=new F,Ej=new ve,Ij=new $,Oye=new he;function $lt(e,t,n){let i=F.clone(e.transform,Gj),o=Pt.eastNorthUpToFixedFrame(t,e._projection.ellipsoid,qlt);e._setTransform(o),m.clone(m.ZERO,e.position),n.heading=n.heading-X.PI_OVER_TWO;let r=ve.fromHeadingPitchRoll(n,Ej),s=$.fromQuaternion(r,Ij);$.getColumn(s,0,e.direction),$.getColumn(s,2,e.up),m.cross(e.direction,e.up,e.right),e._setTransform(i),e._adjustOrthographicFrustum(!0)}function edt(e,t,n,i){let o=F.clone(e.transform,Gj);if(e._setTransform(F.IDENTITY),!m.equals(t,e.positionWC)){if(i){let a=e._projection,c=a.ellipsoid.cartesianToCartographic(t,Oye);t=a.project(c,c3)}m.clone(t,e.position)}n.heading=n.heading-X.PI_OVER_TWO;let r=ve.fromHeadingPitchRoll(n,Ej),s=$.fromQuaternion(r,Ij);$.getColumn(s,0,e.direction),$.getColumn(s,2,e.up),m.cross(e.direction,e.up,e.right),e._setTransform(o),e._adjustOrthographicFrustum(!0)}function tdt(e,t,n,i){let o=F.clone(e.transform,Gj);if(e._setTransform(F.IDENTITY),!m.equals(t,e.positionWC)){if(i){let c=e._projection,d=c.ellipsoid.cartesianToCartographic(t,Oye);t=c.project(d,c3)}U.clone(t,e.position);let r=-t.z*.5,s=-r,a=e.frustum;if(s>r){let c=a.top/a.right;a.right=s,a.left=r,a.top=a.right*c,a.bottom=-a.top}}if(e._scene.mapMode2D===nd.ROTATE){n.heading=n.heading-X.PI_OVER_TWO,n.pitch=-X.PI_OVER_TWO,n.roll=0;let r=ve.fromHeadingPitchRoll(n,Ej),s=$.fromQuaternion(r,Ij);$.getColumn(s,2,e.up),m.cross(e.direction,e.up,e.right)}e._setTransform(o)}var ndt=new m,idt=new m,odt=new m;function Yye(e,t,n,i){let o=m.clone(n.direction,ndt),r=m.clone(n.up,idt);if(e._scene.mode===oe.SCENE3D){let a=e._projection.ellipsoid,c=Pt.eastNorthUpToFixedFrame(t,a,s3),d=F.inverseTransformation(c,a3);F.multiplyByPointAsVector(d,o,o),F.multiplyByPointAsVector(d,r,r)}let s=m.cross(o,r,odt);return i.heading=kye(o,r),i.pitch=Uye(o),i.roll=Dye(o,r,s),i}var Zj={destination:void 0,orientation:{direction:void 0,up:void 0,heading:void 0,pitch:void 0,roll:void 0},convert:void 0,endTransform:void 0},tL=new Ea;tn.prototype.setView=function(e){e=e??Y.EMPTY_OBJECT;let t=e.orientation??Y.EMPTY_OBJECT,n=this._mode;if(n===oe.MORPHING)return;l(e.endTransform)&&this._setTransform(e.endTransform);let i=e.convert??!0,o=e.destination??m.clone(this.positionWC,c3);l(o)&&l(o.west)&&(o=this.getRectangleCameraCoordinates(o,c3),i=!1),l(t.direction)&&(t=Yye(this,o,t,Zj.orientation)),tL.heading=t.heading??0,tL.pitch=t.pitch??-X.PI_OVER_TWO,tL.roll=t.roll??0,n===oe.SCENE3D?$lt(this,o,tL):n===oe.SCENE2D?tdt(this,o,tL,i):edt(this,o,tL,i)};var rdt=new m;tn.prototype.flyHome=function(e){let t=this._mode;if(t===oe.MORPHING&&this._scene.completeMorph(),t===oe.SCENE2D)this.flyTo({destination:tn.DEFAULT_VIEW_RECTANGLE,duration:e,endTransform:F.IDENTITY});else if(t===oe.SCENE3D){let n=this.getRectangleCameraCoordinates(tn.DEFAULT_VIEW_RECTANGLE),i=m.magnitude(n);i+=i*tn.DEFAULT_VIEW_FACTOR,m.normalize(n,n),m.multiplyByScalar(n,i,n),this.flyTo({destination:n,duration:e,endTransform:F.IDENTITY})}else if(t===oe.COLUMBUS_VIEW){let n=this._projection.ellipsoid.maximumRadius,i=new m(0,-1,1);i=m.multiplyByScalar(m.normalize(i,i),5*n,i),this.flyTo({destination:i,duration:e,orientation:{heading:0,pitch:-Math.acos(m.normalize(i,rdt).z),roll:0},endTransform:F.IDENTITY,convert:!1})}};tn.prototype.worldToCameraCoordinates=function(e,t){return l(t)||(t=new se),Ec(this),F.multiplyByVector(this._actualInvTransform,e,t)};tn.prototype.worldToCameraCoordinatesPoint=function(e,t){return l(t)||(t=new m),Ec(this),F.multiplyByPoint(this._actualInvTransform,e,t)};tn.prototype.worldToCameraCoordinatesVector=function(e,t){return l(t)||(t=new m),Ec(this),F.multiplyByPointAsVector(this._actualInvTransform,e,t)};tn.prototype.cameraToWorldCoordinates=function(e,t){return l(t)||(t=new se),Ec(this),F.multiplyByVector(this._actualTransform,e,t)};tn.prototype.cameraToWorldCoordinatesPoint=function(e,t){return l(t)||(t=new m),Ec(this),F.multiplyByPoint(this._actualTransform,e,t)};tn.prototype.cameraToWorldCoordinatesVector=function(e,t){return l(t)||(t=new m),Ec(this),F.multiplyByPointAsVector(this._actualTransform,e,t)};function zye(e,t){let n=e._scene.mapMode2D===nd.ROTATE,i=e._maxCoord.x,o=e._maxCoord.y,r,s;n?(s=i,r=-s):(s=t.x-i*2,r=t.x+i*2),t.x>i&&(t.x=s),t.x<-i&&(t.x=r),t.y>o&&(t.y=o),t.y<-o&&(t.y=-o)}var Wye=new m;tn.prototype.move=function(e,t){let n=this.position;m.multiplyByScalar(e,t,Wye),m.add(n,Wye,n),this._mode===oe.SCENE2D&&zye(this,n),this._adjustOrthographicFrustum(!0)};tn.prototype.moveForward=function(e){e=e??this.defaultMoveAmount,this._mode===oe.SCENE2D?l3(this,e):this.move(this.direction,e)};tn.prototype.moveBackward=function(e){e=e??this.defaultMoveAmount,this._mode===oe.SCENE2D?l3(this,-e):this.move(this.direction,-e)};tn.prototype.moveUp=function(e){e=e??this.defaultMoveAmount,this.move(this.up,e)};tn.prototype.moveDown=function(e){e=e??this.defaultMoveAmount,this.move(this.up,-e)};tn.prototype.moveRight=function(e){e=e??this.defaultMoveAmount,this.move(this.right,e)};tn.prototype.moveLeft=function(e){e=e??this.defaultMoveAmount,this.move(this.right,-e)};tn.prototype.lookLeft=function(e){e=e??this.defaultLookAmount,this._mode!==oe.SCENE2D&&this.look(this.up,-e)};tn.prototype.lookRight=function(e){e=e??this.defaultLookAmount,this._mode!==oe.SCENE2D&&this.look(this.up,e)};tn.prototype.lookUp=function(e){e=e??this.defaultLookAmount,this._mode!==oe.SCENE2D&&this.look(this.right,-e)};tn.prototype.lookDown=function(e){e=e??this.defaultLookAmount,this._mode!==oe.SCENE2D&&this.look(this.right,e)};var sdt=new ve,adt=new $;tn.prototype.look=function(e,t){let n=t??this.defaultLookAmount,i=ve.fromAxisAngle(e,-n,sdt),o=$.fromQuaternion(i,adt),r=this.direction,s=this.up,a=this.right;$.multiplyByVector(o,r,r),$.multiplyByVector(o,s,s),$.multiplyByVector(o,a,a)};tn.prototype.twistLeft=function(e){e=e??this.defaultLookAmount,this.look(this.direction,e)};tn.prototype.twistRight=function(e){e=e??this.defaultLookAmount,this.look(this.direction,-e)};var cdt=new ve,ldt=new $;tn.prototype.rotate=function(e,t){let n=t??this.defaultRotateAmount,i=ve.fromAxisAngle(e,-n,cdt),o=$.fromQuaternion(i,ldt);$.multiplyByVector(o,this.position,this.position),$.multiplyByVector(o,this.direction,this.direction),$.multiplyByVector(o,this.up,this.up),m.cross(this.direction,this.up,this.right),m.cross(this.right,this.direction,this.up),this._adjustOrthographicFrustum(!1)};tn.prototype.rotateDown=function(e){e=e??this.defaultRotateAmount,Hye(this,e)};tn.prototype.rotateUp=function(e){e=e??this.defaultRotateAmount,Hye(this,-e)};var ddt=new m,udt=new m,mdt=new m,Pye=new m;function Hye(e,t){let n=e.position;if(l(e.constrainedAxis)&&!m.equalsEpsilon(e.position,m.ZERO,X.EPSILON2)){let i=m.normalize(n,ddt),o=m.equalsEpsilon(i,e.constrainedAxis,X.EPSILON2),r=m.equalsEpsilon(i,m.negate(e.constrainedAxis,Pye),X.EPSILON2);if(!o&&!r){let s=m.normalize(e.constrainedAxis,udt),a=m.dot(i,s),c=X.acosClamped(a);t>0&&t>c&&(t=c-X.EPSILON4),a=m.dot(i,m.negate(s,Pye)),c=X.acosClamped(a),t<0&&-t>c&&(t=-c+X.EPSILON4);let d=m.cross(s,i,mdt);e.rotate(d,t)}else(o&&t<0||r&&t>0)&&e.rotate(e.right,t)}else e.rotate(e.right,t)}tn.prototype.rotateRight=function(e){e=e??this.defaultRotateAmount,Kye(this,-e)};tn.prototype.rotateLeft=function(e){e=e??this.defaultRotateAmount,Kye(this,e)};function Kye(e,t){l(e.constrainedAxis)?e.rotate(e.constrainedAxis,t):e.rotate(e.up,t)}function l3(e,t){let n=e.frustum,i;if(t=t*.5,Math.abs(n.top)+Math.abs(n.bottom)>Math.abs(n.left)+Math.abs(n.right)){let o=n.top-t,r=n.bottom+t,s=e._maxCoord.y;e._scene.mapMode2D===nd.ROTATE&&(s*=e.maximumZoomFactor),r>s&&(r=s,o=-s),o<=r&&(o=1,r=-1),i=n.right/n.top,n.top=o,n.bottom=r,n.right=n.top*i,n.left=-n.right}else{let o=n.right-t,r=n.left+t,s=e._maxCoord.x;e._scene.mapMode2D===nd.ROTATE&&(s*=e.maximumZoomFactor),o>s&&(o=s,r=-s),o<=r&&(o=1,r=-1),i=n.top/n.right,n.right=o,n.left=r,n.top=n.right*i,n.bottom=-n.top}}function Jye(e,t){e.move(e.direction,t)}tn.prototype.zoomIn=function(e){e=e??this.defaultZoomAmount,this._mode===oe.SCENE2D?l3(this,e):Jye(this,e)};tn.prototype.zoomOut=function(e){e=e??this.defaultZoomAmount,this._mode===oe.SCENE2D?l3(this,-e):Jye(this,-e)};tn.prototype.getMagnitude=function(){if(this._mode===oe.SCENE3D)return m.magnitude(this.position);if(this._mode===oe.COLUMBUS_VIEW)return Math.abs(this.position.z);if(this._mode===oe.SCENE2D)return Math.max(this.frustum.right-this.frustum.left,this.frustum.top-this.frustum.bottom)};var hdt=new F;tn.prototype.lookAt=function(e,t){let i=this._scene.ellipsoid??ne.default,o=Pt.eastNorthUpToFixedFrame(e,i,hdt);this.lookAtTransform(o,t)};var fdt=new m,pdt=new ve,bdt=new ve,gdt=new $;function Qye(e,t,n){t=X.clamp(t,-X.PI_OVER_TWO,X.PI_OVER_TWO),e=X.zeroToTwoPi(e)-X.PI_OVER_TWO;let i=ve.fromAxisAngle(m.UNIT_Y,-t,pdt),o=ve.fromAxisAngle(m.UNIT_Z,-e,bdt),r=ve.multiply(o,i,o),s=$.fromQuaternion(r,gdt),a=m.clone(m.UNIT_X,fdt);return $.multiplyByVector(s,a,a),m.negate(a,a),m.multiplyByScalar(a,n,a),a}tn.prototype.lookAtTransform=function(e,t){if(this._setTransform(e),!l(t))return;let n;if(l(t.heading)?n=Qye(t.heading,t.pitch,t.range):n=t,this._mode===oe.SCENE2D){U.clone(U.ZERO,this.position),m.negate(n,this.up),this.up.z=0,m.magnitudeSquared(this.up)<X.EPSILON10&&m.clone(m.UNIT_Y,this.up),m.normalize(this.up,this.up),this._setTransform(F.IDENTITY),m.negate(m.UNIT_Z,this.direction),m.cross(this.direction,this.up,this.right),m.normalize(this.right,this.right);let i=this.frustum,o=i.top/i.right;i.right=m.magnitude(n)*.5,i.left=-i.right,i.top=o*i.right,i.bottom=-i.top,this._setTransform(e);return}m.clone(n,this.position),m.negate(this.position,this.direction),m.normalize(this.direction,this.direction),m.cross(this.direction,m.UNIT_Z,this.right),m.magnitudeSquared(this.right)<X.EPSILON10&&m.clone(m.UNIT_X,this.right),m.normalize(this.right,this.right),m.cross(this.right,this.direction,this.up),m.normalize(this.up,this.up),this._adjustOrthographicFrustum(!0)};var dF=new he,ydt=new he,xdt=new m,_dt=new m,Tdt=new m,Sdt=new m,Cdt=new m,Vdt=new m,Ldt=new m,Vj=new m,Rdt={direction:new m,right:new m,up:new m},vye;function Gc(e,t,n,i){return Math.abs(m.dot(t,n))/i-m.dot(e,n)}function jye(e,t,n,i){let o=e._projection.ellipsoid,r=i?e:Rdt,{north:s,south:a,west:c}=t,{east:d}=t;c>d&&(d+=X.TWO_PI);let u=(c+d)*.5,h;if(a<-X.PI_OVER_TWO+X.RADIANS_PER_DEGREE&&s>X.PI_OVER_TWO-X.RADIANS_PER_DEGREE)h=0;else{let v=dF;v.longitude=u,v.latitude=s,v.height=0;let A=ydt;A.longitude=u,A.latitude=a,A.height=0;let b=vye;(!l(b)||b.ellipsoid!==o)&&(vye=b=new Fp(void 0,void 0,o)),b.setEndPoints(v,A),h=b.interpolateUsingFraction(.5,dF).latitude}let p=dF;p.longitude=u,p.latitude=h,p.height=0;let g=o.cartographicToCartesian(p,Ldt),f=dF;f.longitude=d,f.latitude=s;let y=o.cartographicToCartesian(f,xdt);f.longitude=c;let x=o.cartographicToCartesian(f,Tdt);f.longitude=u;let S=o.cartographicToCartesian(f,Cdt);f.latitude=a;let C=o.cartographicToCartesian(f,Vdt);f.longitude=d;let V=o.cartographicToCartesian(f,Sdt);f.longitude=c;let L=o.cartographicToCartesian(f,_dt);m.subtract(x,g,x),m.subtract(V,g,V),m.subtract(y,g,y),m.subtract(L,g,L),m.subtract(S,g,S),m.subtract(C,g,C);let Z=o.geodeticSurfaceNormal(g,r.direction);m.negate(Z,Z);let E=m.cross(Z,m.UNIT_Z,r.right);m.normalize(E,E);let P=m.cross(E,Z,r.up),W;if(e.frustum instanceof an){let v=Math.max(m.distance(y,x),m.distance(V,L)),A=Math.max(m.distance(y,V),m.distance(x,L)),b,R,G=e.frustum._offCenterFrustum,I=G.right/G.top,w=A*I;v>w?(b=v,R=b/I):(R=A,b=w),W=Math.max(b,R)}else{let v=Math.tan(e.frustum.fovy*.5),A=e.frustum.aspectRatio*v;if(W=Math.max(Gc(Z,P,x,v),Gc(Z,P,V,v),Gc(Z,P,y,v),Gc(Z,P,L,v),Gc(Z,P,S,v),Gc(Z,P,C,v),Gc(Z,E,x,A),Gc(Z,E,V,A),Gc(Z,E,y,A),Gc(Z,E,L,A),Gc(Z,E,S,A),Gc(Z,E,C,A)),a<0&&s>0){let b=dF;b.longitude=c,b.latitude=0,b.height=0;let R=o.cartographicToCartesian(b,Vj);m.subtract(R,g,R),W=Math.max(W,Gc(Z,P,R,v),Gc(Z,E,R,A)),b.longitude=d,R=o.cartographicToCartesian(b,Vj),m.subtract(R,g,R),W=Math.max(W,Gc(Z,P,R,v),Gc(Z,E,R,A))}}return m.add(g,m.multiplyByScalar(Z,-W,Vj),n)}var Zdt=new he,Gdt=new m,Edt=new m;function Idt(e,t,n){let i=e._projection;t.west>t.east&&(t=ce.MAX_VALUE);let o=e._actualTransform,r=e._actualInvTransform,s=Zdt;s.longitude=t.east,s.latitude=t.north;let a=i.project(s,Gdt);F.multiplyByPoint(o,a,a),F.multiplyByPoint(r,a,a),s.longitude=t.west,s.latitude=t.south;let c=i.project(s,Edt);if(F.multiplyByPoint(o,c,c),F.multiplyByPoint(r,c,c),n.x=(a.x-c.x)*.5+c.x,n.y=(a.y-c.y)*.5+c.y,l(e.frustum.fovy)){let d=Math.tan(e.frustum.fovy*.5),u=e.frustum.aspectRatio*d;n.z=Math.max((a.x-c.x)/u,(a.y-c.y)/d)*.5}else{let d=a.x-c.x,u=a.y-c.y;n.z=Math.max(d,u)}return n}var Xdt=new he,Wdt=new m,Pdt=new m;function vdt(e,t,n){let i=e._projection,o=t.east;t.west>t.east&&(e._scene.mapMode2D===nd.INFINITE_SCROLL?o+=X.TWO_PI:(t=ce.MAX_VALUE,o=t.east));let r=Xdt;r.longitude=o,r.latitude=t.north;let s=i.project(r,Wdt);r.longitude=t.west,r.latitude=t.south;let a=i.project(r,Pdt),c=Math.abs(s.x-a.x)*.5,d=Math.abs(s.y-a.y)*.5,u,h,p=e.frustum.right/e.frustum.top,g=d*p;return c>g?(u=c,h=u/p):(h=d,u=g),d=Math.max(2*u,2*h),n.x=(s.x-a.x)*.5+a.x,n.y=(s.y-a.y)*.5+a.y,r=i.unproject(n,r),r.height=d,n=i.project(r,n),n}tn.prototype.getRectangleCameraCoordinates=function(e,t){let n=this._mode;if(l(t)||(t=new m),n===oe.SCENE3D)return jye(this,e,t);if(n===oe.COLUMBUS_VIEW)return Idt(this,e,t);if(n===oe.SCENE2D)return vdt(this,e,t)};var wdt=new pn;function Fdt(e,t,n,i){n=n??ne.default;let o=e.getPickRay(t,wdt),r=qn.rayEllipsoid(o,n);if(!r)return;let s=r.start>0?r.start:r.stop;return pn.getPoint(o,s,i)}var Adt=new pn;function Mdt(e,t,n,i){let r=e.getPickRay(t,Adt).origin;r=m.fromElements(r.y,r.z,0,r);let s=n.unproject(r);if(!(s.latitude<-X.PI_OVER_TWO||s.latitude>X.PI_OVER_TWO))return n.ellipsoid.cartographicToCartesian(s,i)}var Ndt=new pn;function kdt(e,t,n,i){let o=e.getPickRay(t,Ndt),r=-o.origin.x/o.direction.x;pn.getPoint(o,r,i);let s=n.unproject(new m(i.y,i.z,0));if(!(s.latitude<-X.PI_OVER_TWO||s.latitude>X.PI_OVER_TWO||s.longitude<-Math.PI||s.longitude>Math.PI))return n.ellipsoid.cartographicToCartesian(s,i)}tn.prototype.pickEllipsoid=function(e,t,n){let i=this._scene.canvas;if(!(i.clientWidth===0||i.clientHeight===0)){if(l(n)||(n=new m),t=t??ne.default,this._mode===oe.SCENE3D)n=Fdt(this,e,t,n);else if(this._mode===oe.SCENE2D)n=Mdt(this,e,this._projection,n);else if(this._mode===oe.COLUMBUS_VIEW)n=kdt(this,e,this._projection,n);else return;return n}};var Udt=new m,Ddt=new m,Bdt=new m;function Odt(e,t,n){let i=e._scene.canvas,o=i.clientWidth,r=i.clientHeight,s=Math.tan(e.frustum.fovy*.5),a=e.frustum.aspectRatio*s,c=e.frustum.near,d=2/o*t.x-1,u=2/r*(r-t.y)-1,h=e.positionWC;m.clone(h,n.origin);let p=m.multiplyByScalar(e.directionWC,c,Udt);m.add(h,p,p);let g=m.multiplyByScalar(e.rightWC,d*c*a,Ddt),f=m.multiplyByScalar(e.upWC,u*c*s,Bdt),y=m.add(p,g,n.direction);return m.add(y,f,y),m.subtract(y,h,y),m.normalize(y,y),n}var o3=new m;function Ydt(e,t,n){let i=e._scene.canvas,o=i.clientWidth,r=i.clientHeight,s=e.frustum,a=s.offCenterFrustum;l(a)&&(s=a);let c=2/o*t.x-1;c*=(s.right-s.left)*.5;let d=2/r*(r-t.y)-1;d*=(s.top-s.bottom)*.5;let u=n.origin;return m.clone(e.positionWC,u),m.multiplyByScalar(e.rightWC,c,o3),m.add(o3,u,u),m.multiplyByScalar(e.upWC,d,o3),m.add(o3,u,u),m.clone(e.directionWC,n.direction),n}tn.prototype.getPickRay=function(e,t){l(t)||(t=new pn);let n=this._scene.canvas;if(n.clientWidth<=0||n.clientHeight<=0)return;let i=this.frustum;return l(i.aspectRatio)&&l(i.fov)&&l(i.near)?Odt(this,e,t):Ydt(this,e,t)};var zdt=new m,Hdt=new m;tn.prototype.distanceToBoundingSphere=function(e){let t=m.subtract(this.positionWC,e.center,zdt),n=m.multiplyByScalar(this.directionWC,m.dot(t,this.directionWC),Hdt);return Math.max(0,m.magnitude(n)-e.radius)};var Kdt=new U;tn.prototype.getPixelSize=function(e,t,n){let i=this.distanceToBoundingSphere(e),o=this.frustum.getPixelDimensions(t,n,i,this._scene.pixelRatio,Kdt);return Math.max(o.x,o.y)};function Jdt(e,t,n,i,o,r){let s=m.clone(t);n.y>i?s.y-=n.y-i:n.y<-i&&(s.y+=-i-n.y),n.z>o?s.z-=n.z-o:n.z<-o&&(s.z+=-o-n.z);function a(c){let d=m.lerp(t,s,c.time,new m);e.worldToCameraCoordinatesPoint(d,e.position)}return{easingFunction:zr.EXPONENTIAL_OUT,startObject:{time:0},stopObject:{time:1},duration:r,update:a}}var Qdt=new m,wye=new m,jdt=new m,qdt=new m;function $dt(e,t){let n=e.position,i=e.direction,o=e.worldToCameraCoordinatesVector(m.UNIT_X,Qdt),r=-m.dot(o,n)/m.dot(o,i),s=m.add(n,m.multiplyByScalar(i,r,wye),wye);e.cameraToWorldCoordinatesPoint(s,s),n=e.cameraToWorldCoordinatesPoint(e.position,jdt);let a=Math.tan(e.frustum.fovy*.5),c=e.frustum.aspectRatio*a,d=m.magnitude(m.subtract(n,s,qdt)),u=c*d,h=a*d,p=e._maxCoord.x,g=e._maxCoord.y,f=Math.max(u-p,p),y=Math.max(h-g,g);if(n.z<-f||n.z>f||n.y<-y||n.y>y){let x=s.y<-f||s.y>f,S=s.z<-y||s.z>y;if(x||S)return Jdt(e,n,s,f,y,t)}}tn.prototype.createCorrectPositionTween=function(e){if(this._mode===oe.COLUMBUS_VIEW)return $dt(this,e)};var eut=new m,ia={destination:void 0,heading:void 0,pitch:void 0,roll:void 0,duration:void 0,complete:void 0,cancel:void 0,endTransform:void 0,maximumHeight:void 0,easingFunction:void 0};tn.prototype.cancelFlight=function(){l(this._currentFlight)&&(this._currentFlight.cancelTween(),this._currentFlight=void 0)};tn.prototype.completeFlight=function(){if(l(this._currentFlight)){this._currentFlight.cancelTween();let e={destination:void 0,orientation:{heading:void 0,pitch:void 0,roll:void 0}};e.destination=ia.destination,e.orientation.heading=ia.heading,e.orientation.pitch=ia.pitch,e.orientation.roll=ia.roll,this.setView(e),l(this._currentFlight.complete)&&this._currentFlight.complete(),this._currentFlight=void 0}};tn.prototype.flyTo=function(e){e=e??Y.EMPTY_OBJECT;let t=e.destination;if(this._mode===oe.MORPHING)return;this.cancelFlight();let i=t instanceof ce;i&&(t=this.getRectangleCameraCoordinates(t,eut));let o=e.orientation??Y.EMPTY_OBJECT;if(l(o.direction)&&(o=Yye(this,t,o,Zj.orientation)),l(e.duration)&&e.duration<=0){let u=Zj;u.destination=e.destination,u.orientation.heading=o.heading,u.orientation.pitch=o.pitch,u.orientation.roll=o.roll,u.convert=e.convert,u.endTransform=e.endTransform,this.setView(u),typeof e.complete=="function"&&e.complete();return}let r=this,s;ia.destination=t,ia.heading=o.heading,ia.pitch=o.pitch,ia.roll=o.roll,ia.duration=e.duration,ia.complete=function(){s===r._currentFlight&&(r._currentFlight=void 0),l(e.complete)&&e.complete()},ia.cancel=e.cancel,ia.endTransform=e.endTransform,ia.convert=i?!1:e.convert,ia.maximumHeight=e.maximumHeight,ia.pitchAdjustHeight=e.pitchAdjustHeight,ia.flyOverLongitude=e.flyOverLongitude,ia.flyOverLongitudeWeight=e.flyOverLongitudeWeight,ia.easingFunction=e.easingFunction;let a=this._scene,c=lF.createTween(a,ia);if(c.duration===0){typeof c.complete=="function"&&c.complete();return}s=a.tweens.add(c),this._currentFlight=s;let d=this._scene.preloadFlightCamera;this._mode!==oe.SCENE2D&&(l(d)||(d=tn.clone(this)),d.setView({destination:t,orientation:o}),this._scene.preloadFlightCullingVolume=d.frustum.computeCullingVolume(d.positionWC,d.directionWC,d.upWC))};function tut(e,t){let n=e.frustum,i=Math.tan(n.fovy*.5),o=n.aspectRatio*i;return Math.max(t/o,t/i)}function nut(e,t){let n=e.frustum,i=n.offCenterFrustum;l(i)&&(n=i);let o,r,s=n.right/n.top,a=t*s;return t>a?(o=t,r=o/s):(r=t,o=a),Math.max(o,r)*1.5}var iut=100;function qye(e,t,n){n=sm.clone(l(n)?n:tn.DEFAULT_OFFSET);let i=e._scene.screenSpaceCameraController.minimumZoomDistance,o=e._scene.screenSpaceCameraController.maximumZoomDistance,r=n.range;if(!l(r)||r===0){let s=t.radius;s===0?n.range=iut:e.frustum instanceof an||e._mode===oe.SCENE2D?n.range=nut(e,s):n.range=tut(e,s),n.range=X.clamp(n.range,i,o)}return n}tn.prototype.viewBoundingSphere=function(e,t){t=qye(this,e,t),this.lookAt(e.center,t)};var out=new F,rut=new m,sut=new m,aut=new m,cut=new m,lut=new se,dut=new ve,uut=new $;tn.prototype.flyToBoundingSphere=function(e,t){t=t??Y.EMPTY_OBJECT;let n=this._mode===oe.SCENE2D||this._mode===oe.COLUMBUS_VIEW;this._setTransform(F.IDENTITY);let i=qye(this,e,t.offset),o;n?o=m.multiplyByScalar(m.UNIT_Z,i.range,rut):o=Qye(i.heading,i.pitch,i.range);let s=this._scene.ellipsoid??ne.default,a=Pt.eastNorthUpToFixedFrame(e.center,s,out);F.multiplyByPoint(a,o,o);let c,d;if(!n){if(c=m.subtract(e.center,o,sut),m.normalize(c,c),d=F.multiplyByPointAsVector(a,m.UNIT_Z,aut),1-Math.abs(m.dot(c,d))<X.EPSILON6){let h=ve.fromAxisAngle(c,i.heading,dut),p=$.fromQuaternion(h,uut);m.fromCartesian4(F.getColumn(a,1,lut),d),$.multiplyByVector(p,d,d)}let u=m.cross(c,d,cut);m.cross(u,c,d),m.normalize(d,d)}this.flyTo({destination:o,orientation:{direction:c,up:d},duration:t.duration,complete:t.complete,cancel:t.cancel,endTransform:t.endTransform,maximumHeight:t.maximumHeight,easingFunction:t.easingFunction,flyOverLongitude:t.flyOverLongitude,flyOverLongitudeWeight:t.flyOverLongitudeWeight,pitchAdjustHeight:t.pitchAdjustHeight})};var Fye=new m,Aye=new m,Lj=new m,Mye=new m,uF=[new m,new m,new m,new m];function mut(e,t){let n=t.radii,i=e.positionWC,o=m.multiplyComponents(t.oneOverRadii,i,Fye),r=m.magnitude(o),s=m.normalize(o,Aye),a,c;m.equalsEpsilon(s,m.UNIT_Z,X.EPSILON10)?(a=new m(0,1,0),c=new m(0,0,1)):(a=m.normalize(m.cross(m.UNIT_Z,s,Lj),Lj),c=m.normalize(m.cross(s,a,Mye),Mye));let d=Math.sqrt(m.magnitudeSquared(o)-1),u=m.multiplyByScalar(s,1/r,Fye),h=d/r,p=m.multiplyByScalar(a,h,Aye),g=m.multiplyByScalar(c,h,Lj),f=m.add(u,g,uF[0]);m.subtract(f,p,f),m.multiplyComponents(n,f,f);let y=m.subtract(u,g,uF[1]);m.subtract(y,p,y),m.multiplyComponents(n,y,y);let x=m.subtract(u,g,uF[2]);m.add(x,p,x),m.multiplyComponents(n,x,x);let S=m.add(u,g,uF[3]);return m.add(S,p,S),m.multiplyComponents(n,S,S),uF}var Rj=new U,hut=new m,Zy=[new he,new he,new he,new he];function r3(e,t,n,i,o,r){Rj.x=e,Rj.y=t;let s=i.pickEllipsoid(Rj,o,hut);return l(s)?(Zy[n]=o.cartesianToCartographic(s,Zy[n]),1):(Zy[n]=o.cartesianToCartographic(r[n],Zy[n]),0)}tn.prototype.computeViewRectangle=function(e,t){e=e??ne.default;let n=this.frustum.computeCullingVolume(this.positionWC,this.directionWC,this.upWC),i=new le(m.ZERO,e.maximumRadius);if(n.computeVisibility(i)===zt.OUTSIDE)return;let r=this._scene.canvas,s=r.clientWidth,a=r.clientHeight,c=0,d=mut(this,e);if(c+=r3(0,0,0,this,e,d),c+=r3(0,a,1,this,e,d),c+=r3(s,a,2,this,e,d),c+=r3(s,0,3,this,e,d),c<2)return ce.MAX_VALUE;t=ce.fromCartographicArray(Zy,t);let u=0,h=Zy[3].longitude;for(let p=0;p<4;++p){let g=Zy[p].longitude,f=Math.abs(g-h);f>X.PI?u+=X.TWO_PI-f:u+=f,h=g}return X.equalsEpsilon(Math.abs(u),X.TWO_PI,X.EPSILON9)&&(t.west=-X.PI,t.east=X.PI,Zy[0].latitude>=0?t.north=X.PI_OVER_TWO:t.south=-X.PI_OVER_TWO),t};tn.prototype.switchToPerspectiveFrustum=function(){if(this._mode===oe.SCENE2D||this.frustum instanceof Gi)return;let e=this._scene;this.frustum=new Gi,this.frustum.aspectRatio=e.drawingBufferWidth/e.drawingBufferHeight,this.frustum.fov=X.toRadians(60)};tn.prototype.switchToOrthographicFrustum=function(){if(this._mode===oe.SCENE2D||this.frustum instanceof an)return;let e=Bye(this),t=this._scene;this.frustum=new an,this.frustum.aspectRatio=t.drawingBufferWidth/t.drawingBufferHeight,this.frustum.width=e};tn.clone=function(e,t){return l(t)||(t=new tn(e._scene)),m.clone(e.position,t.position),m.clone(e.direction,t.direction),m.clone(e.up,t.up),m.clone(e.right,t.right),F.clone(e._transform,t.transform),t._transformChanged=!0,t.frustum=e.frustum.clone(),t};var ro=tn;var PIi=_(T(),1);function fut(e){this.pass=e.pass,this.commandList=e.commandList,this.camera=e.camera,this.cullingVolume=e.cullingVolume,this.ready=!1}var pm=fut;var kIi=_(T(),1);var ixe=_(dd(),1),$ye=576,put=100,mF="#ffffff",d3="#48b";function oxe(e,t){this.credit=e,this.count=t??1}function but(e,t){let n=e.length;for(let i=0;i<n;i++){let o=e[i];if(Ct.equals(o,t))return!0}return!1}function gut(e){let t=e._previousCesiumCredit,n=e._currentCesiumCredit;Ct.equals(n,t)||(l(t)&&e._cesiumCreditContainer.removeChild(t.element),l(n)&&e._cesiumCreditContainer.appendChild(n.element),e._previousCesiumCredit=n)}var rxe="cesium-credit-delimiter";function exe(e){let t=document.createElement("span");return t.textContent=e,t.className=rxe,t}function txe(e,t){if(l(t)){let n=document.createElement(t);n._creditId=e._creditId,n.appendChild(e),e=n}return e}function nxe(e,t,n,i){let o=e.childNodes,r=-1;t.sort(function(s,a){return a.count-s.count});for(let s=0;s<t.length;++s){let a=t[s].credit;if(l(a)){if(r=s,l(n)&&(r*=2,s>0)){let d=r-1;if(o.length<=d)e.appendChild(exe(n));else{let u=o[d];u.className!==rxe&&e.replaceChild(exe(n),u)}}let c=a.element;if(o.length<=r)e.appendChild(txe(c,i));else{let d=o[r];d._creditId!==a._id&&e.replaceChild(txe(c,i),d)}}}for(++r;r<o.length;)e.removeChild(o[r])}function yut(e){let t=e._lightboxCredits,n=e.viewport.clientWidth,i=e.viewport.clientHeight;n!==e._lastViewportWidth&&(n<$ye?(t.className="cesium-credit-lightbox cesium-credit-lightbox-mobile",t.style.marginTop="0"):(t.className="cesium-credit-lightbox cesium-credit-lightbox-expanded",t.style.marginTop=`${Math.floor((i-t.clientHeight)*.5)}px`),e._lastViewportWidth=n),n>=$ye&&i!==e._lastViewportHeight&&(t.style.marginTop=`${Math.floor((i-t.clientHeight)*.5)}px`,e._lastViewportHeight=i)}function xut(e){let t=` .cesium-credit-lightbox-overlay { display: none; z-index: 1; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(80, 80, 80, 0.8); } .cesium-credit-lightbox { background-color: #303336; color: ${mF}; position: relative; min-height: ${put}px; margin: auto; } .cesium-credit-lightbox > ul > li a, .cesium-credit-lightbox > ul > li a:visited, .cesium-credit-wrapper a, .cesium-credit-wrapper a:visited { color: ${mF}; } .cesium-credit-lightbox > ul > li a:hover { color: ${d3}; } .cesium-credit-lightbox.cesium-credit-lightbox-expanded { border: 1px solid #444; border-radius: 5px; max-width: 370px; } .cesium-credit-lightbox.cesium-credit-lightbox-mobile { height: 100%; width: 100%; } .cesium-credit-lightbox-title { padding: 20px 20px 0 20px; } .cesium-credit-lightbox-close { font-size: 18pt; cursor: pointer; position: absolute; top: 0; right: 6px; color: ${mF}; } .cesium-credit-lightbox-close:hover { color: ${d3}; } .cesium-credit-lightbox > ul { margin: 0; padding: 12px 20px 12px 40px; font-size: 13px; } .cesium-credit-lightbox > ul > li { padding-bottom: 6px; } .cesium-credit-lightbox > ul > li * { padding: 0; margin: 0; } .cesium-credit-expand-link { padding-left: 5px; cursor: pointer; text-decoration: underline; color: ${mF}; } .cesium-credit-expand-link:hover { color: ${d3}; } .cesium-credit-text { color: ${mF}; } .cesium-credit-delimiter { padding: 0 5px; } .cesium-credit-textContainer *, .cesium-credit-logoContainer * { display: inline; } .cesium-credit-textContainer a:hover { color: ${d3} } .cesium-credit-textContainer .cesium-credit-wrapper:first-of-type { padding-left: 5px; } `;function n(r){if(r.shadowRoot)return r.shadowRoot;if(r.getRootNode){let s=r.getRootNode();if(s instanceof ShadowRoot)return s}}let i=n(e)??document.head,o=document.createElement("style");o.innerHTML=t,i.appendChild(o)}function fr(e,t,n){let i=this;n=n??document.body;let o=document.createElement("div");o.className="cesium-credit-lightbox-overlay",n.appendChild(o);let r=document.createElement("div");r.className="cesium-credit-lightbox",o.appendChild(r);function s(f){r.contains(f.target)||i.hideLightbox()}o.addEventListener("click",s,!1);let a=document.createElement("div");a.className="cesium-credit-lightbox-title",a.textContent="Data provided by:",r.appendChild(a);let c=document.createElement("a");c.onclick=this.hideLightbox.bind(this),c.innerHTML="×",c.className="cesium-credit-lightbox-close",r.appendChild(c);let d=document.createElement("ul");r.appendChild(d);let u=document.createElement("div");u.className="cesium-credit-logoContainer",u.style.display="inline",e.appendChild(u);let h=document.createElement("div");h.className="cesium-credit-textContainer",h.style.display="inline",e.appendChild(h);let p=document.createElement("a");p.className="cesium-credit-expand-link",p.onclick=this.showLightbox.bind(this),p.textContent="Data attribution",e.appendChild(p),xut(e);let g=Ct.clone(fr.cesiumCredit);this._delimiter=t??"\u2022",this._screenContainer=h,this._cesiumCreditContainer=u,this._lastViewportHeight=void 0,this._lastViewportWidth=void 0,this._lightboxCredits=r,this._creditList=d,this._lightbox=o,this._hideLightbox=s,this._expandLink=p,this._expanded=!1,this._staticCredits=[],this._cesiumCredit=g,this._previousCesiumCredit=void 0,this._currentCesiumCredit=g,this._creditDisplayElementPool=[],this._creditDisplayElementIndex=0,this._currentFrameCredits={screenCredits:new Gt,lightboxCredits:new Gt},this._defaultCredit=void 0,this.viewport=n,this.container=e}function sxe(e,t,n,i){i=i??1;let o=t.get(n.id);if(l(o))o.count<Number.MAX_VALUE&&(o.count+=i);else{let r=e._creditDisplayElementPool,s=e._creditDisplayElementPoolIndex;s<r.length?(o=r[s],o.credit=n,o.count=i):(o=new oxe(n,i),r.push(o)),++e._creditDisplayElementPoolIndex,t.set(n.id,o)}}fr.prototype.addCreditToNextFrame=function(e){if(e.isIon()){l(this._defaultCredit)||(this._defaultCredit=Ct.clone(axe())),this._currentCesiumCredit=this._defaultCredit;return}let t;e.showOnScreen?t=this._currentFrameCredits.screenCredits:t=this._currentFrameCredits.lightboxCredits,sxe(this,t,e)};fr.prototype.addStaticCredit=function(e){let t=this._staticCredits;but(t,e)||t.push(e)};fr.prototype.removeStaticCredit=function(e){let t=this._staticCredits,n=t.indexOf(e);n!==-1&&t.splice(n,1)};fr.prototype.showLightbox=function(){this._lightbox.style.display="block",this._expanded=!0};fr.prototype.hideLightbox=function(){this._lightbox.style.display="none",this._expanded=!1};fr.prototype.update=function(){this._expanded&&yut(this)};fr.prototype.beginFrame=function(){let e=this._currentFrameCredits;this._creditDisplayElementPoolIndex=0;let t=e.screenCredits,n=e.lightboxCredits;t.removeAll(),n.removeAll();let i=this._staticCredits;for(let o=0;o<i.length;++o){let r=i[o],s=r.showOnScreen?t:n;r.isIon()&&Ct.equals(fr.cesiumCredit,this._cesiumCredit)||sxe(this,s,r,Number.MAX_VALUE)}Ct.equals(fr.cesiumCredit,this._cesiumCredit)||(this._cesiumCredit=Ct.clone(fr.cesiumCredit)),this._currentCesiumCredit=this._cesiumCredit};fr.prototype.endFrame=function(){let e=this._currentFrameCredits.screenCredits.values;nxe(this._screenContainer,e,this._delimiter,void 0);let t=this._currentFrameCredits.lightboxCredits.values;this._expandLink.style.display=t.length>0?"inline":"none",nxe(this._creditList,t,void 0,"li"),gut(this)};fr.prototype.destroy=function(){return this._lightbox.removeEventListener("click",this._hideLightbox,!1),this.container.removeChild(this._cesiumCreditContainer),this.container.removeChild(this._screenContainer),this.container.removeChild(this._expandLink),this.viewport.removeChild(this._lightbox),me(this)};fr.prototype.isDestroyed=function(){return!1};fr._cesiumCredit=void 0;fr._cesiumCreditInitialized=!1;var u3;function axe(){if(!l(u3)){let e=nn("Assets/Images/ion-credit.png");e.indexOf("http://")!==0&&e.indexOf("https://")!==0&&e.indexOf("data:")!==0&&(e=new ixe.default(e).path()),u3=new Ct(`<a href="https://cesium.com/" target="_blank"><img src="${e}" style="vertical-align: -7px" title="Cesium ion"/></a>`,!0)}return fr._cesiumCreditInitialized||(fr._cesiumCredit=u3,fr._cesiumCreditInitialized=!0),u3}Object.defineProperties(fr,{cesiumCredit:{get:function(){return axe(),fr._cesiumCredit},set:function(e){fr._cesiumCredit=e,fr._cesiumCreditInitialized=!0}}});fr.CreditDisplayElement=oxe;var hF=fr;var FXi=_(T(),1);var iXi=_(T(),1);var m3=0,_ut=1;function NT(e){let t=e.frustum,n=e.orientation,i=e.origin,o=e.vertexFormat??Xe.DEFAULT,r=e._drawNearPlane??!0,s,a;t instanceof Gi?(s=m3,a=Gi.packedLength):t instanceof an&&(s=_ut,a=an.packedLength),this._frustumType=s,this._frustum=t.clone(),this._origin=m.clone(i),this._orientation=ve.clone(n),this._drawNearPlane=r,this._vertexFormat=o,this._workerName="createFrustumGeometry",this.packedLength=2+a+m.packedLength+ve.packedLength+Xe.packedLength}NT.pack=function(e,t,n){n=n??0;let i=e._frustumType,o=e._frustum;return t[n++]=i,i===m3?(Gi.pack(o,t,n),n+=Gi.packedLength):(an.pack(o,t,n),n+=an.packedLength),m.pack(e._origin,t,n),n+=m.packedLength,ve.pack(e._orientation,t,n),n+=ve.packedLength,Xe.pack(e._vertexFormat,t,n),n+=Xe.packedLength,t[n]=e._drawNearPlane?1:0,t};var Tut=new Gi,Sut=new an,Cut=new ve,Vut=new m,Lut=new Xe;NT.unpack=function(e,t,n){t=t??0;let i=e[t++],o;i===m3?(o=Gi.unpack(e,t,Tut),t+=Gi.packedLength):(o=an.unpack(e,t,Sut),t+=an.packedLength);let r=m.unpack(e,t,Vut);t+=m.packedLength;let s=ve.unpack(e,t,Cut);t+=ve.packedLength;let a=Xe.unpack(e,t,Lut);t+=Xe.packedLength;let c=e[t]===1;if(!l(n))return new NT({frustum:o,origin:r,orientation:s,vertexFormat:a,_drawNearPlane:c});let d=i===n._frustumType?n._frustum:void 0;return n._frustum=o.clone(d),n._frustumType=i,n._origin=m.clone(r,n._origin),n._orientation=ve.clone(s,n._orientation),n._vertexFormat=Xe.clone(a,n._vertexFormat),n._drawNearPlane=c,n};function nL(e,t,n,i,o,r,s,a){let c=e/3*2;for(let d=0;d<4;++d)l(t)&&(t[e]=r.x,t[e+1]=r.y,t[e+2]=r.z),l(n)&&(n[e]=s.x,n[e+1]=s.y,n[e+2]=s.z),l(i)&&(i[e]=a.x,i[e+1]=a.y,i[e+2]=a.z),e+=3;o[c]=0,o[c+1]=0,o[c+2]=1,o[c+3]=0,o[c+4]=1,o[c+5]=1,o[c+6]=0,o[c+7]=1}var Rut=new $,Zut=new F,Xj=new F,cxe=new m,lxe=new m,dxe=new m,Gut=new m,Eut=new m,Iut=new m,Gy=new Array(3),fF=new Array(4);fF[0]=new se(-1,-1,1,1);fF[1]=new se(1,-1,1,1);fF[2]=new se(1,1,1,1);fF[3]=new se(-1,1,1,1);var uxe=new Array(4);for(let e=0;e<4;++e)uxe[e]=new se;NT._computeNearFarPlanes=function(e,t,n,i,o,r,s,a){let c=$.fromQuaternion(t,Rut),d=r??cxe,u=s??lxe,h=a??dxe;d=$.getColumn(c,0,d),u=$.getColumn(c,1,u),h=$.getColumn(c,2,h),m.normalize(d,d),m.normalize(u,u),m.normalize(h,h),m.negate(d,d);let p=F.computeView(e,h,u,d,Zut),g,f,y=i.projectionMatrix;if(n===m3){let x=F.multiply(y,p,Xj);f=F.inverse(x,Xj)}else g=F.inverseTransformation(p,Xj);l(f)?(Gy[0]=i.near,Gy[1]=i.far):(Gy[0]=0,Gy[1]=i.near,Gy[2]=i.far);for(let x=0;x<2;++x)for(let S=0;S<4;++S){let C=se.clone(fF[S],uxe[S]);if(l(f)){C=F.multiplyByVector(f,C,C);let V=1/C.w;m.multiplyByScalar(C,V,C),m.subtract(C,e,C),m.normalize(C,C);let L=m.dot(h,C);m.multiplyByScalar(C,Gy[x]/L,C),m.add(C,e,C)}else{let V=i.offCenterFrustum;l(V)&&(i=V);let L=Gy[x],Z=Gy[x+1];C.x=(C.x*(i.right-i.left)+i.left+i.right)*.5,C.y=(C.y*(i.top-i.bottom)+i.bottom+i.top)*.5,C.z=(C.z*(L-Z)-L-Z)*.5,C.w=1,F.multiplyByVector(g,C,C)}o[12*x+S*3]=C.x,o[12*x+S*3+1]=C.y,o[12*x+S*3+2]=C.z}};NT.createGeometry=function(e){let t=e._frustumType,n=e._frustum,i=e._origin,o=e._orientation,r=e._drawNearPlane,s=e._vertexFormat,a=r?6:5,c=new Float64Array(3*4*6);NT._computeNearFarPlanes(i,o,t,n,c);let d=3*4*2;c[d]=c[3*4],c[d+1]=c[3*4+1],c[d+2]=c[3*4+2],c[d+3]=c[0],c[d+4]=c[1],c[d+5]=c[2],c[d+6]=c[3*3],c[d+7]=c[3*3+1],c[d+8]=c[3*3+2],c[d+9]=c[3*7],c[d+10]=c[3*7+1],c[d+11]=c[3*7+2],d+=3*4,c[d]=c[3*5],c[d+1]=c[3*5+1],c[d+2]=c[3*5+2],c[d+3]=c[3],c[d+4]=c[4],c[d+5]=c[5],c[d+6]=c[0],c[d+7]=c[1],c[d+8]=c[2],c[d+9]=c[3*4],c[d+10]=c[3*4+1],c[d+11]=c[3*4+2],d+=3*4,c[d]=c[3],c[d+1]=c[4],c[d+2]=c[5],c[d+3]=c[3*5],c[d+4]=c[3*5+1],c[d+5]=c[3*5+2],c[d+6]=c[3*6],c[d+7]=c[3*6+1],c[d+8]=c[3*6+2],c[d+9]=c[3*2],c[d+10]=c[3*2+1],c[d+11]=c[3*2+2],d+=3*4,c[d]=c[3*2],c[d+1]=c[3*2+1],c[d+2]=c[3*2+2],c[d+3]=c[3*6],c[d+4]=c[3*6+1],c[d+5]=c[3*6+2],c[d+6]=c[3*7],c[d+7]=c[3*7+1],c[d+8]=c[3*7+2],c[d+9]=c[3*3],c[d+10]=c[3*3+1],c[d+11]=c[3*3+2],r||(c=c.subarray(3*4));let u=new mn({position:new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:c})});if(l(s.normal)||l(s.tangent)||l(s.bitangent)||l(s.st)){let p=l(s.normal)?new Float32Array(12*a):void 0,g=l(s.tangent)?new Float32Array(3*4*a):void 0,f=l(s.bitangent)?new Float32Array(3*4*a):void 0,y=l(s.st)?new Float32Array(2*4*a):void 0,x=cxe,S=lxe,C=dxe,V=m.negate(x,Gut),L=m.negate(S,Eut),Z=m.negate(C,Iut);d=0,r&&(nL(d,p,g,f,y,Z,x,S),d+=3*4),nL(d,p,g,f,y,C,V,S),d+=3*4,nL(d,p,g,f,y,V,Z,S),d+=3*4,nL(d,p,g,f,y,L,Z,V),d+=3*4,nL(d,p,g,f,y,x,C,S),d+=3*4,nL(d,p,g,f,y,S,C,V),l(p)&&(u.normal=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:p})),l(g)&&(u.tangent=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:g})),l(f)&&(u.bitangent=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:f})),l(y)&&(u.st=new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:2,values:y}))}let h=new Uint16Array(6*a);for(let p=0;p<a;++p){let g=p*6,f=p*4;h[g]=f,h[g+1]=f+1,h[g+2]=f+2,h[g+3]=f,h[g+4]=f+2,h[g+5]=f+3}return new lt({attributes:u,indices:h,primitiveType:we.TRIANGLES,boundingSphere:le.fromVertices(c)})};var kT=NT;var gXi=_(T(),1);var Wj=0,Xut=1;function pF(e){let t=e.frustum,n=e.orientation,i=e.origin,o=e._drawNearPlane??!0,r,s;t instanceof Gi?(r=Wj,s=Gi.packedLength):t instanceof an&&(r=Xut,s=an.packedLength),this._frustumType=r,this._frustum=t.clone(),this._origin=m.clone(i),this._orientation=ve.clone(n),this._drawNearPlane=o,this._workerName="createFrustumOutlineGeometry",this.packedLength=2+s+m.packedLength+ve.packedLength}pF.pack=function(e,t,n){n=n??0;let i=e._frustumType,o=e._frustum;return t[n++]=i,i===Wj?(Gi.pack(o,t,n),n+=Gi.packedLength):(an.pack(o,t,n),n+=an.packedLength),m.pack(e._origin,t,n),n+=m.packedLength,ve.pack(e._orientation,t,n),n+=ve.packedLength,t[n]=e._drawNearPlane?1:0,t};var Wut=new Gi,Put=new an,vut=new ve,wut=new m;pF.unpack=function(e,t,n){t=t??0;let i=e[t++],o;i===Wj?(o=Gi.unpack(e,t,Wut),t+=Gi.packedLength):(o=an.unpack(e,t,Put),t+=an.packedLength);let r=m.unpack(e,t,wut);t+=m.packedLength;let s=ve.unpack(e,t,vut);t+=ve.packedLength;let a=e[t]===1;if(!l(n))return new pF({frustum:o,origin:r,orientation:s,_drawNearPlane:a});let c=i===n._frustumType?n._frustum:void 0;return n._frustum=o.clone(c),n._frustumType=i,n._origin=m.clone(r,n._origin),n._orientation=ve.clone(s,n._orientation),n._drawNearPlane=a,n};pF.createGeometry=function(e){let t=e._frustumType,n=e._frustum,i=e._origin,o=e._orientation,r=e._drawNearPlane,s=new Float64Array(3*4*2);kT._computeNearFarPlanes(i,o,t,n,s);let a=new mn({position:new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:s})}),c,d,u=r?2:1,h=new Uint16Array(8*(u+1)),p=r?0:1;for(;p<2;++p)c=r?p*8:0,d=p*4,h[c]=d,h[c+1]=d+1,h[c+2]=d+1,h[c+3]=d+2,h[c+4]=d+2,h[c+5]=d+3,h[c+6]=d+3,h[c+7]=d;for(p=0;p<2;++p)c=(u+p)*8,d=p*4,h[c]=d,h[c+1]=d+4,h[c+2]=d+1,h[c+3]=d+5,h[c+4]=d+2,h[c+5]=d+6,h[c+6]=d+3,h[c+7]=d+7;return new lt({attributes:a,indices:h,primitiveType:we.LINES,boundingSphere:le.fromVertices(s)})};var bF=pF;function h3(e){e=e??Y.EMPTY_OBJECT,this._camera=e.camera,this._frustumSplits=e.frustumSplits,this._color=e.color??D.CYAN,this._updateOnChange=e.updateOnChange??!0,this.show=e.show??!0,this.id=e.id,this._id=void 0,this._outlinePrimitives=[],this._planesPrimitives=[]}var Fut=new m,Aut=new $,Mut=new ve,Nut=new Gi,kut=new bl,Uut=new an,Dut=new Pr,But=new D,Out=[1,1e5];h3.prototype.update=function(e){if(!this.show)return;let t=this._planesPrimitives,n=this._outlinePrimitives,i,o;if(this._updateOnChange){for(o=t.length,i=0;i<o;++i)n[i]=n[i]&&n[i].destroy(),t[i]=t[i]&&t[i].destroy();t.length=0,n.length=0}if(t.length===0){let r=this._camera,s=r.frustum,a;s instanceof Gi?a=Nut:s instanceof bl?a=kut:s instanceof an?a=Uut:a=Dut,a=s.clone(a);let c,d=this._frustumSplits;!l(d)||d.length<=1?(d=Out,d[0]=this._camera.frustum.near,d[1]=this._camera.frustum.far,c=1):c=d.length-1;let u=r.positionWC,h=r.directionWC,p=r.upWC,g=r.rightWC;g=m.negate(g,Fut);let f=Aut;$.setColumn(f,0,g,f),$.setColumn(f,1,p,f),$.setColumn(f,2,h,f);let y=ve.fromRotationMatrix(f,Mut);for(t.length=n.length=c,i=0;i<c;++i)a.near=d[i],a.far=d[i+1],t[i]=new In({geometryInstances:new Et({geometry:new kT({origin:u,orientation:y,frustum:a,_drawNearPlane:i===0}),attributes:{color:Yt.fromColor(D.fromAlpha(this._color,.1,But))},id:this.id,pickPrimitive:this}),appearance:new dn({translucent:!0,flat:!0}),asynchronous:!1}),n[i]=new In({geometryInstances:new Et({geometry:new bF({origin:u,orientation:y,frustum:a,_drawNearPlane:i===0}),attributes:{color:Yt.fromColor(this._color)},id:this.id,pickPrimitive:this}),appearance:new dn({translucent:!1,flat:!0}),asynchronous:!1})}for(o=t.length,i=0;i<o;++i)n[i].update(e),t[i].update(e)};h3.prototype.isDestroyed=function(){return!1};h3.prototype.destroy=function(){let e=this._planesPrimitives.length;for(let t=0;t<e;++t)this._outlinePrimitives[t]=this._outlinePrimitives[t]&&this._outlinePrimitives[t].destroy(),this._planesPrimitives[t]=this._planesPrimitives[t]&&this._planesPrimitives[t].destroy();return me(this)};var ip=h3;var cWi=_(T(),1);var MXi=_(T(),1),gF=`in vec4 positionEC; void main() { vec3 position; vec3 direction; if (czm_orthographicIn3D == 1.0) { vec2 uv = (gl_FragCoord.xy - czm_viewport.xy) / czm_viewport.zw; vec2 minPlane = vec2(czm_frustumPlanes.z, czm_frustumPlanes.y); // left, bottom vec2 maxPlane = vec2(czm_frustumPlanes.w, czm_frustumPlanes.x); // right, top position = vec3(mix(minPlane, maxPlane, uv), 0.0); direction = vec3(0.0, 0.0, -1.0); } else { position = vec3(0.0); direction = normalize(positionEC.xyz); } czm_ray ray = czm_ray(position, direction); vec3 ellipsoid_center = czm_view[3].xyz; czm_raySegment intersection = czm_rayEllipsoidIntersectionInterval(ray, ellipsoid_center, czm_ellipsoidInverseRadii); if (!czm_isEmpty(intersection)) { out_FragColor = vec4(1.0, 1.0, 0.0, 1.0); } else { discard; } czm_writeLogDepth(); } `;var kXi=_(T(),1),yF=`in vec4 position; out vec4 positionEC; void main() { positionEC = czm_modelView * position; gl_Position = czm_projection * positionEC; czm_vertexLogDepth(); } `;function _F(e){this._rs=void 0,this._sp=void 0,this._va=void 0,this._command=void 0,this._mode=void 0,this._useLogDepth=!1,this._ellipsoidOffset=e??0}var xF=Bt.supportsTypedArrays()?new Float32Array(12):[],mxe=new m,hxe=new m,Pj=new m,fxe=new m,f3=new m;function Yut(e,t){let n=e.radii,i=t.camera,o,r,s;if(i.frustum instanceof an)o=m.ZERO,r=i.rightWC,s=i.upWC;else{let h=i.positionWC,p=m.multiplyComponents(e.oneOverRadii,h,mxe),g=m.normalize(p,hxe),f=m.normalize(m.cross(m.UNIT_Z,p,Pj),Pj),y=m.normalize(m.cross(g,f,fxe),fxe),x=m.magnitude(p),S=Math.sqrt(x*x-1);o=m.multiplyByScalar(g,1/x,mxe);let C=S/x;r=m.multiplyByScalar(f,C,hxe),s=m.multiplyByScalar(y,C,Pj)}let a=m.add(o,s,f3);m.subtract(a,r,a),m.multiplyComponents(n,a,a),m.pack(a,xF,0);let c=m.subtract(o,s,f3);m.subtract(c,r,c),m.multiplyComponents(n,c,c),m.pack(c,xF,3);let d=m.add(o,s,f3);m.add(d,r,d),m.multiplyComponents(n,d,d),m.pack(d,xF,6);let u=m.subtract(o,s,f3);return m.add(u,r,u),m.multiplyComponents(n,u,u),m.pack(u,xF,9),xF}_F.prototype.update=function(e){if(this._mode=e.mode,e.mode!==oe.SCENE3D)return;let t=e.context,n=e.mapProjection.ellipsoid.radii,i=new ne(n.x+this._ellipsoidOffset,n.y+this._ellipsoidOffset,n.z+this._ellipsoidOffset),o=e.useLogDepth;if(l(this._command)||(this._rs=Ue.fromCache({cull:{enabled:!0},depthTest:{enabled:!0},colorMask:{red:!1,green:!1,blue:!1,alpha:!1}}),this._command=new $e({renderState:this._rs,boundingVolume:new le(m.ZERO,i.maximumRadius),pass:Ee.OPAQUE,owner:this})),!l(this._sp)||this._useLogDepth!==o){this._useLogDepth=o;let s=new De({sources:[yF]}),a=new De({sources:[gF]});o&&(a.defines.push("LOG_DEPTH"),s.defines.push("LOG_DEPTH")),this._sp=$t.replaceCache({shaderProgram:this._sp,context:t,vertexShaderSource:s,fragmentShaderSource:a,attributeLocations:{position:0}}),this._command.shaderProgram=this._sp}let r=Yut(i,e);if(l(this._va))this._va.getAttribute(0).vertexBuffer.copyFromArrayView(r);else{let s=new lt({attributes:{position:new Ge({componentDatatype:Q.FLOAT,componentsPerAttribute:3,values:r})},indices:[0,1,2,2,1,3],primitiveType:we.TRIANGLES});this._va=ni.fromGeometry({context:t,geometry:s,attributeLocations:{position:0},bufferUsage:Me.DYNAMIC_DRAW}),this._command.vertexArray=this._va}};_F.prototype.execute=function(e,t){this._mode===oe.SCENE3D&&this._command.execute(e,t)};_F.prototype.isDestroyed=function(){return!1};_F.prototype.destroy=function(){this._sp=this._sp&&this._sp.destroy(),this._va=this._va&&this._va.destroy()};var TF=_F;var gWi=_(T(),1);function oL(){}var zut=/\bgl_FragDepth\b/,Hut=/\bdiscard\b/;function Kut(e,t){let n=e.shaderCache.getDerivedShaderProgram(t,"depthOnly");if(l(n))return n;let i=t.fragmentShaderSource,o=!1,r=i.sources;for(let a=0;a<r.length;++a)if(zut.test(r[a])||Hut.test(r[a])){o=!0;break}let s=i.defines.indexOf("LOG_DEPTH")>=0;if(!o&&!s){let a=`void main() { out_FragColor = vec4(1.0); } `;i=new De({sources:[a]})}else if(!o&&s){let a=`void main() { out_FragColor = vec4(1.0); czm_writeLogDepth(); } `;i=new De({defines:["LOG_DEPTH"],sources:[a]})}return e.shaderCache.createDerivedShaderProgram(t,"depthOnly",{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:i,attributeLocations:t._attributeLocations})}function Jut(e,t){let n=e._depthOnlyRenderStateCache,i=n[t.id];if(l(i))return i;let o=Ue.getState(t);o.depthMask=!0,o.colorMask={red:!1,green:!1,blue:!1,alpha:!1};let r=Ue.fromCache(o);return n[t.id]=r,r}oL.createDepthOnlyDerivedCommand=function(e,t,n,i){l(i)||(i={});let o=i.depthOnlyCommand?.shaderProgram,r=i.depthOnlyCommand?.renderState;return i.depthOnlyCommand=$e.shallowClone(t,i.depthOnlyCommand),!l(o)||i.shaderProgramId!==t.shaderProgram.id?(i.depthOnlyCommand.shaderProgram=Kut(n,t.shaderProgram),i.depthOnlyCommand.renderState=Jut(e,t.renderState),i.shaderProgramId=t.shaderProgram.id):(i.depthOnlyCommand.shaderProgram=o,i.depthOnlyCommand.renderState=r),i};var Qut=/\s+czm_writeLogDepth\(/,jut=/\s+czm_vertexLogDepth\(/;function qut(e,t){if(t.fragmentShaderSource.defines.indexOf("LOG_DEPTH_READ_ONLY")>=0)return t;let i=e.shaderCache.getDerivedShaderProgram(t,"logDepth");if(l(i))return i;let o=t._attributeLocations,r=t.vertexShaderSource.clone(),s=t.fragmentShaderSource.clone();r.defines=l(r.defines)?r.defines.slice(0):[],r.defines.push("LOG_DEPTH"),s.defines=l(s.defines)?s.defines.slice(0):[],s.defines.push("LOG_DEPTH");let a=!1,c=r.sources;for(let u=0;u<c.length;++u)if(jut.test(c[u])){a=!0;break}if(!a){for(let h=0;h<c.length;++h)c[h]=De.replaceMain(c[h],"czm_log_depth_main");c.push(` void main() { czm_log_depth_main(); czm_vertexLogDepth(); } `)}c=s.sources,a=!1;for(let u=0;u<c.length;++u)Qut.test(c[u])&&(a=!0);s.defines.indexOf("LOG_DEPTH_WRITE")!==-1&&(a=!0);let d="";if(!a){for(let u=0;u<c.length;u++)c[u]=De.replaceMain(c[u],"czm_log_depth_main");d=` void main() { czm_log_depth_main(); czm_writeLogDepth(); } `}return c.push(d),e.shaderCache.createDerivedShaderProgram(t,"logDepth",{vertexShaderSource:r,fragmentShaderSource:s,attributeLocations:o})}oL.createLogDepthCommand=function(e,t,n){l(n)||(n={});let i=n.command?.shaderProgram;return n.command=$e.shallowClone(e,n.command),!l(i)||n.shaderProgramId!==e.shaderProgram.id?(n.command.shaderProgram=qut(t,e.shaderProgram),n.shaderProgramId=e.shaderProgram.id):n.command.shaderProgram=i,n};function $ut(e,t,n){let i=e.shaderCache.getDerivedShaderProgram(t,"pick");if(l(i))return i;let o=t._attributeLocations,{sources:r,defines:s}=t.fragmentShaderSource,c=r.some(g=>g.includes("out_FragData"))?"out_FragData_0":"out_FragColor",d=`void main () { czm_non_pick_main(); if (${c}.a == 0.0) { discard; } ${c} = ${n}; } `,u=r.length,h=new Array(u+1);for(let g=0;g<u;++g)h[g]=De.replaceMain(r[g],"czm_non_pick_main");h[u]=d;let p=new De({sources:h,defines:s});return e.shaderCache.createDerivedShaderProgram(t,"pick",{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:p,attributeLocations:o})}function pxe(e,t){let n=e.picking.pickRenderStateCache,i=n[t.id];if(l(i))return i;let o=Ue.getState(t);o.blending.enabled=!1,o.depthMask=!0;let r=Ue.fromCache(o);return n[t.id]=r,r}oL.createPickDerivedCommand=function(e,t,n,i){l(i)||(i={});let o=i.pickCommand?.shaderProgram,r=i.pickCommand?.renderState;return i.pickCommand=$e.shallowClone(t,i.pickCommand),!l(o)||i.shaderProgramId!==t.shaderProgram.id?(i.pickCommand.shaderProgram=$ut(n,t.shaderProgram,t.pickId),i.pickCommand.renderState=pxe(e,t.renderState),i.shaderProgramId=t.shaderProgram.id):(i.pickCommand.shaderProgram=o,i.pickCommand.renderState=r),i};function iL(e,t,n){let i=e.length;for(let o=0;o<i;o++)e[o].trimStart().split(/\s+/)[0]===t&&(e[o]=`${t} ${n}`)}function bxe(e){return e.isArray?e.arrayLength:ct.getComponentCount(e.type)}function emt(e){let t=bxe(e);return e.normalized?t===1?"float":`vec${t}`:t===1?"int":`ivec${t}`}function gxe(e,t,n){return`((${e} - float(${t})) / float(${n}))`}function yxe(e,t){let n=Ft.getMaximum(t);return`(${e}) / float(${n})`}function tmt(e,t){let n="float(value)";if(t.hasValueTransform){let i=t.offset,o=t.scale;n=gxe(n,i,o)}return e.normalized||(n=yxe(n,e.componentType)),n}function nmt(e,t,n){let o=`float(${`value.${n}`})`;if(t.hasValueTransform){let r=t.offset[n],s=t.scale[n];o=gxe(o,r,s)}return e.normalized||(o=yxe(o,e.componentType)),o}function imt(e,t,n){let i=n.schemaId,o=n.className,r=n.propertyName,s=`pickMetadata-${i}-${o}-${r}`,a=e.shaderCache.getDerivedShaderProgram(t,s);if(l(a))return a;let c=n.metadataProperty,d=n.classProperty,u=emt(d),h=["0.0","0.0","0.0","0.0"],p=bxe(d);if(p===1)h[0]=tmt(d,c);else{let x=["x","y","z","w"];for(let S=0;S<p;S++)h[S]=nmt(d,c,x[S])}let g=t.fragmentShaderSource.defines.slice();g.push(Rd.METADATA_PICKING_ENABLED),iL(g,Rd.METADATA_PICKING_VALUE_TYPE,u),iL(g,Rd.METADATA_PICKING_VALUE_STRING,`metadata.${r}`),iL(g,Rd.METADATA_PICKING_VALUE_COMPONENT_X,h[0]),iL(g,Rd.METADATA_PICKING_VALUE_COMPONENT_Y,h[1]),iL(g,Rd.METADATA_PICKING_VALUE_COMPONENT_Z,h[2]),iL(g,Rd.METADATA_PICKING_VALUE_COMPONENT_W,h[3]);let f=new De({sources:t.fragmentShaderSource.sources,defines:g});return e.shaderCache.createDerivedShaderProgram(t,s,{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:f,attributeLocations:t._attributeLocations})}oL.createPickMetadataDerivedCommand=function(e,t,n,i){return l(i)||(i={}),i.pickMetadataCommand=$e.shallowClone(t,i.pickMetadataCommand),i.pickMetadataCommand.shaderProgram=imt(n,t.shaderProgram,t.pickedMetadataInfo),i.pickMetadataCommand.renderState=pxe(e,t.renderState),i.shaderProgramId=t.shaderProgram.id,i};function omt(e,t){let n=e.shaderCache.getDerivedShaderProgram(t,"HDR");if(l(n))return n;let i=t._attributeLocations,o=t.vertexShaderSource.clone(),r=t.fragmentShaderSource.clone();return o.defines=l(o.defines)?o.defines.slice(0):[],o.defines.push("HDR"),r.defines=l(r.defines)?r.defines.slice(0):[],r.defines.push("HDR"),e.shaderCache.createDerivedShaderProgram(t,"HDR",{vertexShaderSource:o,fragmentShaderSource:r,attributeLocations:i})}oL.createHdrCommand=function(e,t,n){l(n)||(n={});let i=n.command?.shaderProgram;return n.command=$e.shallowClone(e,n.command),!l(i)||n.shaderProgramId!==e.shaderProgram.id?(n.command.shaderProgram=omt(t,e.shaderProgram),n.shaderProgramId=e.shaderProgram.id):n.command.shaderProgram=i,n};var op=oL;var VWi=_(T(),1);function p3(e){this._scene=e,this._lastAlpha=void 0,this._lastBeta=void 0,this._lastGamma=void 0,this._alpha=void 0,this._beta=void 0,this._gamma=void 0;let t=this;function n(i){let o=i.alpha;if(!l(o)){t._alpha=void 0,t._beta=void 0,t._gamma=void 0;return}t._alpha=X.toRadians(o),t._beta=X.toRadians(i.beta),t._gamma=X.toRadians(i.gamma)}window.addEventListener("deviceorientation",n,!1),this._removeListener=function(){window.removeEventListener("deviceorientation",n,!1)}}var rmt=new ve,xxe=new ve,smt=new $;function amt(e,t,n,i){let o=e.direction,r=e.right,s=e.up,a=ve.fromAxisAngle(o,n,xxe),c=ve.fromAxisAngle(r,i,rmt),d=ve.multiply(c,a,c),u=ve.fromAxisAngle(s,t,xxe);ve.multiply(u,d,d);let h=$.fromQuaternion(d,smt);$.multiplyByVector(h,r,r),$.multiplyByVector(h,s,s),$.multiplyByVector(h,o,o)}p3.prototype.update=function(){if(!l(this._alpha))return;l(this._lastAlpha)||(this._lastAlpha=this._alpha,this._lastBeta=this._beta,this._lastGamma=this._gamma);let e=this._lastAlpha-this._alpha,t=this._lastBeta-this._beta,n=this._lastGamma-this._gamma;amt(this._scene.camera,-e,t,n),this._lastAlpha=this._alpha,this._lastBeta=this._beta,this._lastGamma=this._gamma};p3.prototype.isDestroyed=function(){return!1};p3.prototype.destroy=function(){return this._removeListener(),me(this)};var SF=p3;var IWi=_(T(),1);function vj(){this.enabled=!0,this.renderable=!0,this.density=6e-4,this.heightScalar=.001,this._heightFalloff=.59,this.maxHeight=8e5,this.visualDensityScalar=.15,this.screenSpaceErrorFactor=2,this.minimumBrightness=.03}Object.defineProperties(vj.prototype,{heightFalloff:{get:function(){return this._heightFalloff},set:function(e){this._heightFalloff=e}}});var cmt=new m;vj.prototype.update=function(e){if(!(e.fog.enabled=this.enabled))return;e.fog.renderable=this.renderable;let n=e.camera,i=n.positionCartographic;if(!l(i)||i.height>this.maxHeight||e.mode!==oe.SCENE3D){e.fog.enabled=!1,e.fog.density=0;return}let o=i.height,r=this.density*this.heightScalar*Math.pow(Math.max(o/this.maxHeight,X.EPSILON4),-Math.max(this._heightFalloff,0)),s=m.normalize(n.positionWC,cmt),a=Math.abs(m.dot(n.directionWC,s));r*=1-a,e.fog.density=r,e.fog.visualDensityScalar=this.visualDensityScalar,e.fog.sse=this.screenSpaceErrorFactor,e.fog.minimumBrightness=this.minimumBrightness};var CF=vj;var PWi=_(T(),1);function lmt(e,t,n){this.context=e,this.commandList=[],this.shadowMaps=[],this.brdfLutGenerator=void 0,this.environmentMap=void 0,this.sphericalHarmonicCoefficients=void 0,this.specularEnvironmentMaps=void 0,this.specularEnvironmentMapsMaximumLOD=void 0,this.mode=oe.SCENE3D,this.morphTime=oe.getMorphTime(oe.SCENE3D),this.frameNumber=0,this.newFrame=!1,this.time=void 0,this.jobScheduler=n,this.mapProjection=void 0,this.camera=void 0,this.cameraUnderground=!1,this.globeTranslucencyState=void 0,this.cullingVolume=void 0,this.occluder=void 0,this.maximumScreenSpaceError=void 0,this.pixelRatio=1,this.passes={render:!1,pick:!1,pickVoxel:!1,depth:!1,postProcess:!1,offscreen:!1},this.creditDisplay=t,this.afterRender=[],this.scene3DOnly=!1,this.fog={enabled:!1,renderable:!1,density:void 0,visualDensityScalar:void 0,sse:void 0,minimumBrightness:void 0},this.atmosphere=void 0,this.verticalExaggeration=1,this.verticalExaggerationRelativeHeight=0,this.shadowState={shadowsEnabled:!0,shadowMaps:[],lightShadowMaps:[],nearPlane:1,farPlane:5e3,closestObjectSize:1e3,lastDirtyTime:0,outOfView:!0},this.splitPosition=0,this.frustumSplits=[],this.backgroundColor=void 0,this.light=void 0,this.minimumDisableDepthTestDistance=void 0,this.invertClassification=!1,this.invertClassificationColor=void 0,this.useLogDepth=!1,this.tilesetPassState=void 0,this.minimumTerrainHeight=0,this.pickingMetadata=!1,this.pickedMetadataInfo=void 0}var VF=lmt;var zWi=_(T(),1);var Va={OPAQUE_FRONT_FACE:0,OPAQUE_BACK_FACE:1,DEPTH_ONLY_FRONT_FACE:2,DEPTH_ONLY_BACK_FACE:3,DEPTH_ONLY_FRONT_AND_BACK_FACE:4,TRANSLUCENT_FRONT_FACE:5,TRANSLUCENT_BACK_FACE:6,TRANSLUCENT_FRONT_FACE_MANUAL_DEPTH_TEST:7,TRANSLUCENT_BACK_FACE_MANUAL_DEPTH_TEST:8,PICK_FRONT_FACE:9,PICK_BACK_FACE:10,DERIVED_COMMANDS_MAXIMUM_LENGTH:11},UT=Va.DERIVED_COMMANDS_MAXIMUM_LENGTH,Exe=["opaqueFrontFaceCommand","opaqueBackFaceCommand","depthOnlyFrontFaceCommand","depthOnlyBackFaceCommand","depthOnlyFrontAndBackFaceCommand","translucentFrontFaceCommand","translucentBackFaceCommand","translucentFrontFaceManualDepthTestCommand","translucentBackFaceManualDepthTestCommand","pickFrontFaceCommand","pickBackFaceCommand"];function DT(){this._frontFaceAlphaByDistance=new kt(0,1,0,1),this._backFaceAlphaByDistance=new kt(0,1,0,1),this._frontFaceTranslucent=!1,this._backFaceTranslucent=!1,this._requiresManualDepthTest=!1,this._sunVisibleThroughGlobe=!1,this._environmentVisible=!1,this._useDepthPlane=!1,this._numberOfTextureUniforms=0,this._globeTranslucencyFramebuffer=void 0,this._rectangle=ce.clone(ce.MAX_VALUE),this._derivedCommandKey=0,this._derivedCommandsDirty=!1,this._derivedCommandPacks=void 0,this._derivedCommandTypes=new Array(UT),this._derivedBlendCommandTypes=new Array(UT),this._derivedPickCommandTypes=new Array(UT),this._derivedCommandTypesToUpdate=new Array(UT),this._derivedCommandsLength=0,this._derivedBlendCommandsLength=0,this._derivedPickCommandsLength=0,this._derivedCommandsToUpdateLength=0}Object.defineProperties(DT.prototype,{frontFaceAlphaByDistance:{get:function(){return this._frontFaceAlphaByDistance}},backFaceAlphaByDistance:{get:function(){return this._backFaceAlphaByDistance}},translucent:{get:function(){return this._frontFaceTranslucent}},sunVisibleThroughGlobe:{get:function(){return this._sunVisibleThroughGlobe}},environmentVisible:{get:function(){return this._environmentVisible}},useDepthPlane:{get:function(){return this._useDepthPlane}},numberOfTextureUniforms:{get:function(){return this._numberOfTextureUniforms}},rectangle:{get:function(){return this._rectangle}}});DT.prototype.update=function(e){let t=e.globe;if(!l(t)||!t.show){this._frontFaceTranslucent=!1,this._backFaceTranslucent=!1,this._sunVisibleThroughGlobe=!0,this._environmentVisible=!0,this._useDepthPlane=!1;return}this._frontFaceAlphaByDistance=_xe(t.translucency.enabled,t.translucency.frontFaceAlpha,t.translucency.frontFaceAlphaByDistance,this._frontFaceAlphaByDistance),this._backFaceAlphaByDistance=_xe(t.translucency.enabled,t.translucency.backFaceAlpha,t.translucency.backFaceAlphaByDistance,this._backFaceAlphaByDistance),this._frontFaceTranslucent=Txe(t.translucency.enabled,this._frontFaceAlphaByDistance,t),this._backFaceTranslucent=Txe(t.translucency.enabled,this._backFaceAlphaByDistance,t),this._requiresManualDepthTest=hmt(this,e,t),this._sunVisibleThroughGlobe=dmt(this,e),this._environmentVisible=umt(this,e),this._useDepthPlane=mmt(this,e),this._numberOfTextureUniforms=fmt(this),this._rectangle=ce.clone(t.translucency.rectangle,this._rectangle),pmt(this,e)};function _xe(e,t,n,i){return e?l(n)?(kt.clone(n,i),i.nearValue*=t,i.farValue*=t,i):(i.nearValue=t,i.farValue=t,i):(i.nearValue=1,i.farValue=1,i)}function Txe(e,t,n){return e&&(n.baseColor.alpha<1||t.nearValue<1||t.farValue<1)}function dmt(e,t){let n=e._frontFaceTranslucent,i=e._backFaceTranslucent;return n&&(t.cameraUnderground||i)}function umt(e,t){return!t.cameraUnderground||e._frontFaceTranslucent}function mmt(e,t){return!t.cameraUnderground&&!e._frontFaceTranslucent}function hmt(e,t,n){return e._frontFaceTranslucent&&!e._backFaceTranslucent&&!n.depthTestAgainstTerrain&&t.mode!==oe.SCENE2D&&t.context.depthTexture}function fmt(e){let t=0;return e._frontFaceTranslucent&&++t,e._requiresManualDepthTest&&++t,t}function pmt(e,t){e._derivedCommandsLength=wj(e,t,!1,!1,e._derivedCommandTypes),e._derivedBlendCommandsLength=wj(e,t,!0,!1,e._derivedBlendCommandTypes),e._derivedPickCommandsLength=wj(e,t,!1,!0,e._derivedPickCommandTypes);let n,i=0;for(n=0;n<e._derivedCommandsLength;++n)i|=1<<e._derivedCommandTypes[n];for(n=0;n<e._derivedBlendCommandsLength;++n)i|=1<<e._derivedBlendCommandTypes[n];for(n=0;n<e._derivedPickCommandsLength;++n)i|=1<<e._derivedPickCommandTypes[n];let o=0;for(n=0;n<UT;++n)(i&1<<n)>0&&(e._derivedCommandTypesToUpdate[o++]=n);e._derivedCommandsToUpdateLength=o;let r=i!==e._derivedCommandKey;e._derivedCommandKey=i,e._derivedCommandsDirty=r,!l(e._derivedCommandPacks)&&e._frontFaceTranslucent&&(e._derivedCommandPacks=Imt())}function wj(e,t,n,i,o){let r=0,s=e._frontFaceTranslucent,a=e._backFaceTranslucent;if(!s)return r;let c=t.cameraUnderground,d=e._requiresManualDepthTest,u=i?Va.PICK_FRONT_FACE:d?Va.TRANSLUCENT_FRONT_FACE_MANUAL_DEPTH_TEST:Va.TRANSLUCENT_FRONT_FACE,h=i?Va.PICK_BACK_FACE:d?Va.TRANSLUCENT_BACK_FACE_MANUAL_DEPTH_TEST:Va.TRANSLUCENT_BACK_FACE;return t.mode===oe.SCENE2D?(o[r++]=Va.DEPTH_ONLY_FRONT_FACE,o[r++]=u,r):(a?(n||(o[r++]=Va.DEPTH_ONLY_FRONT_AND_BACK_FACE),c?(o[r++]=u,o[r++]=h):(o[r++]=h,o[r++]=u)):c?(n||(o[r++]=Va.DEPTH_ONLY_BACK_FACE),o[r++]=Va.OPAQUE_FRONT_FACE,o[r++]=h):(n||(o[r++]=Va.DEPTH_ONLY_FRONT_FACE),o[r++]=Va.OPAQUE_BACK_FACE,o[r++]=u),r)}function bm(e,t){let n=e.indexOf(t);n>-1&&e.splice(n,1)}function Sxe(e,t){return e.indexOf(t)>-1}function bmt(e,t){bm(e.defines,"TRANSLUCENT"),bm(t.defines,"TRANSLUCENT")}function gmt(e,t){bm(e.defines,"GROUND_ATMOSPHERE"),bm(t.defines,"GROUND_ATMOSPHERE"),bm(e.defines,"FOG"),bm(t.defines,"FOG"),bm(e.defines,"TRANSLUCENT"),bm(t.defines,"TRANSLUCENT")}function Fj(e,t){if(Sxe(t.defines,"TILE_LIMIT_RECTANGLE")||Sxe(t.defines,"ENABLE_CLIPPING_PLANES"))return;let n=`void main() { out_FragColor = vec4(1.0); } `;t.sources=[n]}function Aj(e,t){let n=t.sources,i=n.length;for(let r=0;r<i;++r)n[r]=De.replaceMain(n[r],"czm_globe_translucency_main");n.push(` uniform sampler2D u_classificationTexture; void main() { vec2 st = gl_FragCoord.xy / czm_viewport.zw; #ifdef MANUAL_DEPTH_TEST float logDepthOrDepth = czm_unpackDepth(texture(czm_globeDepthTexture, st)); if (logDepthOrDepth != 0.0) { vec4 eyeCoordinate = czm_windowToEyeCoordinates(gl_FragCoord.xy, logDepthOrDepth); float depthEC = eyeCoordinate.z / eyeCoordinate.w; if (v_positionEC.z < depthEC) { discard; } } #endif czm_globe_translucency_main(); vec4 classificationColor = texture(u_classificationTexture, st); if (classificationColor.a > 0.0) { // Reverse premultiplication process to get the correct composited result of the classification primitives classificationColor.rgb /= classificationColor.a; } out_FragColor = classificationColor * vec4(classificationColor.aaa, 1.0) + out_FragColor * (1.0 - classificationColor.a); } `)}function Ixe(e,t){Aj(e,t),bm(e.defines,"GROUND_ATMOSPHERE"),bm(t.defines,"GROUND_ATMOSPHERE"),bm(e.defines,"FOG"),bm(t.defines,"FOG")}function ymt(e,t){Aj(e,t),e.defines.push("GENERATE_POSITION"),t.defines.push("MANUAL_DEPTH_TEST")}function xmt(e,t){Ixe(e,t),e.defines.push("GENERATE_POSITION"),t.defines.push("MANUAL_DEPTH_TEST")}function Cxe(e,t){let n=`uniform sampler2D u_classificationTexture; void main() { vec2 st = gl_FragCoord.xy / czm_viewport.zw; vec4 pickColor = texture(u_classificationTexture, st); if (pickColor == vec4(0.0)) { discard; } out_FragColor = pickColor; } `;t.sources=[n]}function _mt(e,t,n,i,o,r){if(!l(o))return t;if(!i&&l(n))return n;let s=e.shaderCache.getDerivedShaderProgram(t,r);if(!l(s)){let a=t._attributeLocations,c=t.vertexShaderSource.clone(),d=t.fragmentShaderSource.clone();c.defines=l(c.defines)?c.defines.slice(0):[],d.defines=l(d.defines)?d.defines.slice(0):[],o(c,d),s=e.shaderCache.createDerivedShaderProgram(t,r,{vertexShaderSource:c,fragmentShaderSource:d,attributeLocations:a})}return s}function Tmt(e){e.cull.face=Ti.BACK,e.cull.enabled=!0}function Smt(e){e.cull.face=Ti.FRONT,e.cull.enabled=!0}function Cmt(e){e.cull.face=Ti.BACK,e.cull.enabled=!0,e.colorMask={red:!1,green:!1,blue:!1,alpha:!1}}function Vmt(e){e.cull.face=Ti.FRONT,e.cull.enabled=!0,e.colorMask={red:!1,green:!1,blue:!1,alpha:!1}}function Lmt(e){e.cull.enabled=!1,e.colorMask={red:!1,green:!1,blue:!1,alpha:!1}}function Vxe(e){e.cull.face=Ti.BACK,e.cull.enabled=!0,e.depthMask=!1,e.blending=un.ALPHA_BLEND}function Lxe(e){e.cull.face=Ti.FRONT,e.cull.enabled=!0,e.depthMask=!1,e.blending=un.ALPHA_BLEND}function Rmt(e){e.cull.face=Ti.BACK,e.cull.enabled=!0,e.blending.enabled=!1}function Zmt(e){e.cull.face=Ti.FRONT,e.cull.enabled=!0,e.blending.enabled=!1}function Gmt(e,t,n,i,o){if(!l(i))return e;if(!n&&l(t))return t;let r=o[e.id];if(!l(r)){let s=Ue.getState(e);i(s),r=Ue.fromCache(s),o[e.id]=r}return r}function rL(e){return{u_classificationTexture:function(){return e._globeTranslucencyFramebuffer.classificationTexture}}}function Emt(e,t,n,i,o){return l(o)?!i&&l(n)?n:St(t,o(e),!1):t}function Uh(e){this.pass=e.pass,this.pickOnly=e.pickOnly,this.getShaderProgramFunction=e.getShaderProgramFunction,this.getRenderStateFunction=e.getRenderStateFunction,this.getUniformMapFunction=e.getUniformMapFunction,this.renderStateCache={}}function Imt(){return[new Uh({pass:Ee.GLOBE,pickOnly:!1,getShaderProgramFunction:bmt,getRenderStateFunction:Tmt,getUniformMapFunction:void 0}),new Uh({pass:Ee.GLOBE,pickOnly:!1,getShaderProgramFunction:gmt,getRenderStateFunction:Smt,getUniformMapFunction:void 0}),new Uh({pass:Ee.GLOBE,pickOnly:!1,getShaderProgramFunction:Fj,getRenderStateFunction:Cmt,getUniformMapFunction:void 0}),new Uh({pass:Ee.GLOBE,pickOnly:!1,getShaderProgramFunction:Fj,getRenderStateFunction:Vmt,getUniformMapFunction:void 0}),new Uh({pass:Ee.GLOBE,pickOnly:!1,getShaderProgramFunction:Fj,getRenderStateFunction:Lmt,getUniformMapFunction:void 0}),new Uh({pass:Ee.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:Aj,getRenderStateFunction:Vxe,getUniformMapFunction:rL}),new Uh({pass:Ee.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:Ixe,getRenderStateFunction:Lxe,getUniformMapFunction:rL}),new Uh({pass:Ee.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:ymt,getRenderStateFunction:Vxe,getUniformMapFunction:rL}),new Uh({pass:Ee.TRANSLUCENT,pickOnly:!1,getShaderProgramFunction:xmt,getRenderStateFunction:Lxe,getUniformMapFunction:rL}),new Uh({pass:Ee.TRANSLUCENT,pickOnly:!0,getShaderProgramFunction:Cxe,getRenderStateFunction:Rmt,getUniformMapFunction:rL}),new Uh({pass:Ee.TRANSLUCENT,pickOnly:!0,getShaderProgramFunction:Cxe,getRenderStateFunction:Zmt,getUniformMapFunction:rL})]}var Rxe=new Array(UT),Zxe=new Array(UT);DT.prototype.updateDerivedCommands=function(e,t){let n=this._derivedCommandTypesToUpdate,i=this._derivedCommandsToUpdateLength;if(i!==0){for(let o=0;o<i;++o)Zxe[o]=this._derivedCommandPacks[n[o]],Rxe[o]=Exe[n[o]];Xmt(this,e,i,n,Rxe,Zxe,t)}};function Xmt(e,t,n,i,o,r,s){let a=t.derivedCommands.globeTranslucency,c=e._derivedCommandsDirty;if(t.dirty||!l(a)||c){t.dirty=!1,l(a)||(a={},t.derivedCommands.globeTranslucency=a);let d=s.frameNumber,u=a.uniformMapDirtyFrame??0,h=a.shaderProgramDirtyFrame??0,p=a.renderStateDirtyFrame??0,g=a.uniformMap!==t.uniformMap,f=a.shaderProgramId!==t.shaderProgram.id,y=a.renderStateId!==t.renderState.id;g&&(a.uniformMapDirtyFrame=d),f&&(a.shaderProgramDirtyFrame=d),y&&(a.renderStateDirtyFrame=d),a.uniformMap=t.uniformMap,a.shaderProgramId=t.shaderProgram.id,a.renderStateId=t.renderState.id;for(let x=0;x<n;++x){let S=r[x],C=i[x],V=o[x],L=a[V],Z,E,P;l(L)?(Z=L.uniformMap,E=L.shaderProgram,P=L.renderState):(Z=void 0,E=void 0,P=void 0),L=$e.shallowClone(t,L),a[V]=L;let W=L.derivedCommands.uniformMapDirtyFrame??0,v=L.derivedCommands.shaderProgramDirtyFrame??0,A=L.derivedCommands.renderStateDirtyFrame??0,b=g||W<u,R=f||v<h,G=y||A<p;b&&(L.derivedCommands.uniformMapDirtyFrame=d),R&&(L.derivedCommands.shaderProgramDirtyFrame=d),G&&(L.derivedCommands.renderStateDirtyFrame=d),L.derivedCommands.type=C,L.pass=S.pass,L.pickOnly=S.pickOnly,L.uniformMap=Emt(e,t.uniformMap,Z,b,S.getUniformMapFunction),L.shaderProgram=_mt(s.context,t.shaderProgram,E,R,S.getShaderProgramFunction,V),L.renderState=Gmt(t.renderState,P,G,S.getRenderStateFunction,S.renderStateCache)}}}DT.prototype.pushDerivedCommands=function(e,t,n){let i=n.passes.pick||n.passes.pickVoxel;if(i&&t)return;let o=this._derivedCommandTypes,r=this._derivedCommandsLength;if(i?(o=this._derivedPickCommandTypes,r=this._derivedPickCommandsLength):t&&(o=this._derivedBlendCommandTypes,r=this._derivedBlendCommandsLength),r===0){n.commandList.push(e);return}let s=e.derivedCommands.globeTranslucency;for(let a=0;a<r;++a){let c=Exe[o[a]];n.commandList.push(s[c])}};function Xxe(e,t,n,i,o,r){for(let s=0;s<t;++s){let a=e[s],c=a.derivedCommands.type;(!l(r)||r.indexOf(c)>-1)&&n(a,i,o)}}function Gxe(e,t,n,i,o){for(let r=0;r<t;++r)n(e[r],i,o)}var Wmt=[Va.OPAQUE_FRONT_FACE,Va.OPAQUE_BACK_FACE],Pmt=[Va.DEPTH_ONLY_FRONT_FACE,Va.DEPTH_ONLY_BACK_FACE,Va.DEPTH_ONLY_FRONT_AND_BACK_FACE];DT.prototype.executeGlobeCommands=function(e,t,n,i,o){let r=i.context,s=e.commands[Ee.GLOBE],a=e.indices[Ee.GLOBE];a!==0&&(this._globeTranslucencyFramebuffer=n,n.clearClassification(r,o),Xxe(s,a,t,i,o,Wmt))};DT.prototype.executeGlobeClassificationCommands=function(e,t,n,i,o){let{context:r}=i,{uniformState:s}=r,a=e.commands[Ee.GLOBE],c=e.indices[Ee.GLOBE],d=e.commands[Ee.TERRAIN_CLASSIFICATION],u=e.indices[Ee.TERRAIN_CLASSIFICATION];if(c===0||u===0)return;let h=this._frontFaceTranslucent,p=this._backFaceTranslucent;if((!h||!p)&&Gxe(d,u,t,i,o),!h&&!p)return;this._globeTranslucencyFramebuffer=n;let g=s.globeDepthTexture,f=o.framebuffer;if(o.framebuffer=n.classificationFramebuffer,Xxe(a,c,t,i,o,Pmt),r.depthTexture){let y=n.packDepth(r,o);s.globeDepthTexture=y}Gxe(d,u,t,i,o),s.globeDepthTexture=g,o.framebuffer=f};var LF=DT;var hPi=_(T(),1);var KWi=_(T(),1),id=`uniform sampler2D colorTexture; in vec2 v_textureCoordinates; void main() { out_FragColor = texture(colorTexture, v_textureCoordinates); } `;function rp(){this._numSamples=1,this.previousFramebuffer=void 0,this._previousFramebuffer=void 0,this._depthStencilTexture=void 0,this._depthStencilRenderbuffer=void 0,this._fbo=new fi({depthStencil:!0,createDepthAttachments:!1}),this._fboClassified=new fi({depthStencil:!0,createDepthAttachments:!1}),this._rsUnclassified=void 0,this._rsClassified=void 0,this._unclassifiedCommand=void 0,this._classifiedCommand=void 0,this._translucentCommand=void 0,this._clearColorCommand=new ti({color:new D(0,0,0,0),owner:this}),this._clearCommand=new ti({color:new D(0,0,0,0),depth:1,stencil:0});let e=this;this._uniformMap={colorTexture:function(){return e._fbo.getColorTexture()},depthTexture:function(){return e._depthStencilTexture},classifiedTexture:function(){return e._fboClassified.getColorTexture()}}}Object.defineProperties(rp.prototype,{unclassifiedCommand:{get:function(){return this._unclassifiedCommand}}});rp.isTranslucencySupported=function(e){return e.depthTexture&&e.fragmentDepth};var vmt={depthMask:!1,stencilTest:{enabled:!0,frontFunction:Dn.EQUAL,frontOperation:{fail:ht.KEEP,zFail:ht.KEEP,zPass:ht.KEEP},backFunction:Dn.NEVER,reference:0,mask:Ut.CLASSIFICATION_MASK},blending:un.ALPHA_BLEND},wmt={depthMask:!1,stencilTest:{enabled:!0,frontFunction:Dn.NOT_EQUAL,frontOperation:{fail:ht.KEEP,zFail:ht.KEEP,zPass:ht.KEEP},backFunction:Dn.NEVER,reference:0,mask:Ut.CLASSIFICATION_MASK},blending:un.ALPHA_BLEND},Fmt={depthMask:!0,depthTest:{enabled:!0},stencilTest:Ut.setCesium3DTileBit(),stencilMask:Ut.CESIUM_3D_TILE_MASK,blending:un.ALPHA_BLEND},Amt=`uniform sampler2D colorTexture; uniform sampler2D depthTexture; uniform sampler2D classifiedTexture; in vec2 v_textureCoordinates; void main() { vec4 color = texture(colorTexture, v_textureCoordinates); if (color.a == 0.0) { discard; } bool isClassified = all(equal(texture(classifiedTexture, v_textureCoordinates), vec4(0.0))); #ifdef UNCLASSIFIED vec4 highlightColor = czm_invertClassificationColor; if (isClassified) { discard; } #else vec4 highlightColor = vec4(1.0); if (!isClassified) { discard; } #endif out_FragColor = color * highlightColor; gl_FragDepth = texture(depthTexture, v_textureCoordinates).r; } `,Mmt=`uniform sampler2D colorTexture; in vec2 v_textureCoordinates; void main() { vec4 color = texture(colorTexture, v_textureCoordinates); if (color.a == 0.0) { discard; } #ifdef UNCLASSIFIED out_FragColor = color * czm_invertClassificationColor; #else out_FragColor = color; #endif } `;rp.prototype.update=function(e,t,n){let i=this._fbo.getColorTexture(),o=this.previousFramebuffer!==this._previousFramebuffer;this._previousFramebuffer=this.previousFramebuffer;let r=this._numSamples!==t,s=e.drawingBufferWidth,a=e.drawingBufferHeight,c=!l(i)||i.width!==s||i.height!==a;if((c||o||r)&&(this._numSamples=t,this._depthStencilTexture=this._depthStencilTexture&&this._depthStencilTexture.destroy(),this._depthStencilRenderbuffer=this._depthStencilRenderbuffer&&this._depthStencilRenderbuffer.destroy(),l(this._previousFramebuffer)||(this._depthStencilTexture=new vt({context:e,width:s,height:a,pixelFormat:it.DEPTH_STENCIL,pixelDatatype:je.UNSIGNED_INT_24_8}),t>1&&(this._depthStencilRenderbuffer=new fd({context:e,width:s,height:a,format:Nc.DEPTH24_STENCIL8,numSamples:t})))),!l(this._fbo.framebuffer)||c||o||r){this._fbo.destroy(),this._fboClassified.destroy();let d,u;l(this._previousFramebuffer)?(d=n.getDepthStencilTexture(),u=n.getDepthStencilRenderbuffer()):(d=this._depthStencilTexture,u=this._depthStencilRenderbuffer),this._fbo.setDepthStencilTexture(d),l(u)&&this._fbo.setDepthStencilRenderbuffer(u),this._fbo.update(e,s,a,t),l(this._previousFramebuffer)||(this._fboClassified.setDepthStencilTexture(d),this._fboClassified.update(e,s,a))}if(l(this._rsUnclassified)||(this._rsUnclassified=Ue.fromCache(vmt),this._rsClassified=Ue.fromCache(wmt),this._rsDefault=Ue.fromCache(Fmt)),!l(this._unclassifiedCommand)||o||r){l(this._unclassifiedCommand)&&(this._unclassifiedCommand.shaderProgram=this._unclassifiedCommand.shaderProgram&&this._unclassifiedCommand.shaderProgram.destroy(),this._classifiedCommand.shaderProgram=this._classifiedCommand.shaderProgram&&this._classifiedCommand.shaderProgram.destroy());let d=l(this._previousFramebuffer)?Mmt:Amt,u=new De({defines:["UNCLASSIFIED"],sources:[d]}),h=new De({sources:[d]});this._unclassifiedCommand=e.createViewportQuadCommand(u,{renderState:l(this._previousFramebuffer)?this._rsUnclassified:this._rsDefault,uniformMap:this._uniformMap,owner:this}),this._classifiedCommand=e.createViewportQuadCommand(h,{renderState:l(this._previousFramebuffer)?this._rsClassified:this._rsDefault,uniformMap:this._uniformMap,owner:this}),l(this._translucentCommand)&&(this._translucentCommand.shaderProgram=this._translucentCommand.shaderProgram&&this._translucentCommand.shaderProgram.destroy()),l(this._previousFramebuffer)||(this._translucentCommand=e.createViewportQuadCommand(id,{renderState:this._rsUnclassified,uniformMap:this._uniformMap,owner:this}))}};rp.prototype.prepareTextures=function(e,t){this._fbo._numSamples>1&&this._fbo.prepareTextures(e,t)};rp.prototype.clear=function(e,t){l(this._previousFramebuffer)?this._fbo.clear(e,this._clearColorCommand,t):(this._fbo.clear(e,this._clearCommand,t),this._fboClassified.clear(e,this._clearCommand,t))};rp.prototype.executeClassified=function(e,t){if(!l(this._previousFramebuffer)){let n=t.framebuffer;this.prepareTextures(e,!0),t.framebuffer=this._fboClassified.framebuffer,this._translucentCommand.execute(e,t),t.framebuffer=n}this._classifiedCommand.execute(e,t)};rp.prototype.executeUnclassified=function(e,t){this._unclassifiedCommand.execute(e,t)};rp.prototype.isDestroyed=function(){return!1};rp.prototype.destroy=function(){return this._fbo.destroy(),this._fboClassified.destroy(),this._depthStencilTexture=this._depthStencilTexture&&this._depthStencilTexture.destroy(),this._depthStencilRenderbuffer=this._depthStencilRenderbuffer&&this._depthStencilRenderbuffer.destroy(),l(this._unclassifiedCommand)&&(this._unclassifiedCommand.shaderProgram=this._unclassifiedCommand.shaderProgram&&this._unclassifiedCommand.shaderProgram.destroy(),this._classifiedCommand.shaderProgram=this._classifiedCommand.shaderProgram&&this._classifiedCommand.shaderProgram.destroy()),me(this)};var sL=rp;var yPi=_(T(),1);function b3(e){this._total=e,this.usedThisFrame=0,this.stolenFromMeThisFrame=0,this.starvedThisFrame=!1,this.starvedLastFrame=!1}Object.defineProperties(b3.prototype,{total:{get:function(){return this._total}}});function Ey(e){let t=new Array(Ma.NUMBER_OF_JOB_TYPES);t[Ma.TEXTURE]=new b3(l(e)?e[Ma.TEXTURE]:10),t[Ma.PROGRAM]=new b3(l(e)?e[Ma.PROGRAM]:10),t[Ma.BUFFER]=new b3(l(e)?e[Ma.BUFFER]:30);let n=t.length,i,o=0;for(i=0;i<n;++i)o+=t[i].total;let r=new Array(n);for(i=0;i<n;++i)r[i]=!1;this._totalBudget=o,this._totalUsedThisFrame=0,this._budgets=t,this._executedThisFrame=r}Ey.getTimestamp=Si;Object.defineProperties(Ey.prototype,{totalBudget:{get:function(){return this._totalBudget}}});Ey.prototype.disableThisFrame=function(){this._totalUsedThisFrame=this._totalBudget};Ey.prototype.resetBudgets=function(){let e=this._budgets,t=e.length;for(let n=0;n<t;++n){let i=e[n];i.starvedLastFrame=i.starvedThisFrame,i.starvedThisFrame=!1,i.usedThisFrame=0,i.stolenFromMeThisFrame=0}this._totalUsedThisFrame=0};Ey.prototype.execute=function(e,t){let n=this._budgets,i=n[t],o=this._executedThisFrame[t];if(this._totalUsedThisFrame>=this._totalBudget&&o)return i.starvedThisFrame=!0,!1;let r;if(i.usedThisFrame+i.stolenFromMeThisFrame>=i.total){let c=n.length,d;for(d=0;d<c&&(r=n[d],!(r.usedThisFrame+r.stolenFromMeThisFrame<r.total&&!r.starvedLastFrame));++d);if(d===c&&o)return!1;o&&(i.starvedThisFrame=!0)}let s=Ey.getTimestamp();e.execute();let a=Ey.getTimestamp()-s;return this._totalUsedThisFrame+=a,r?r.stolenFromMeThisFrame+=a:i.usedThisFrame+=a,this._executedThisFrame[t]=!0,!0};var RF=Ey;var VPi=_(T(),1);function g3(e){e=e??Y.EMPTY_OBJECT;let t=Xn(e.container);this._container=t;let n=document.createElement("div");n.className="cesium-performanceDisplay";let i=document.createElement("div");i.className="cesium-performanceDisplay-fps",this._fpsText=document.createTextNode(""),i.appendChild(this._fpsText);let o=document.createElement("div");o.className="cesium-performanceDisplay-ms",this._msText=document.createTextNode(""),o.appendChild(this._msText),n.appendChild(o),n.appendChild(i),this._container.appendChild(n),this._lastFpsSampleTime=Si(),this._lastMsSampleTime=Si(),this._fpsFrameCount=0,this._msFrameCount=0,this._throttled=!1;let r=document.createElement("div");r.className="cesium-performanceDisplay-throttled",this._throttledText=document.createTextNode(""),r.appendChild(this._throttledText),n.appendChild(r)}Object.defineProperties(g3.prototype,{throttled:{get:function(){return this._throttled},set:function(e){this._throttled!==e&&(e?this._throttledText.nodeValue="(throttled)":this._throttledText.nodeValue="",this._throttled=e)}}});g3.prototype.update=function(e){let t=Si(),n=e??!0;this._fpsFrameCount++;let i=t-this._lastFpsSampleTime;if(i>1e3){let r="N/A";n&&(r=this._fpsFrameCount*1e3/i|0),this._fpsText.nodeValue=`${r} FPS`,this._lastFpsSampleTime=t,this._fpsFrameCount=0}this._msFrameCount++;let o=t-this._lastMsSampleTime;if(o>200){let r="N/A";n&&(r=(o/this._msFrameCount).toFixed(2)),this._msText.nodeValue=`${r} MS`,this._lastMsSampleTime=t,this._msFrameCount=0}};g3.prototype.destroy=function(){return me(this)};var p0=g3;var IFi=_(T(),1);var APi=_(T(),1);var La={};La.decodeRawMetadataValue=function(e,t,n){switch(e){case Ft.INT8:return t.getInt8(n);case Ft.UINT8:return t.getUint8(n);case Ft.INT16:return t.getInt16(n,!0);case Ft.UINT16:return t.getUint16(n,!0);case Ft.INT32:return t.getInt32(n,!0);case Ft.UINT32:return t.getUint32(n,!0);case Ft.INT64:return t.getBigInt64(n,!0);case Ft.UINT64:return t.getBigUint64(n,!0);case Ft.FLOAT32:return t.getFloat32(n,!0);case Ft.FLOAT64:return t.getFloat64(n,!0)}throw new ae(`Invalid component type: ${e}`)};La.decodeRawMetadataValueComponent=function(e,t,n){let i=e.componentType,o=La.decodeRawMetadataValue(i,t,n);return e.normalized?Ft.normalize(o,i):o};La.decodeRawMetadataValueElement=function(e,t,n){let i=e.componentType,o=Ft.getSizeInBytes(i),r=e.type,s=ct.getComponentCount(r),a=o*s;if(s>1){let u=Array(s);for(let h=0;h<s;h++){let p=n*a+h*o,g=La.decodeRawMetadataValueComponent(e,t,p);u[h]=g}return u}let c=n*a;return La.decodeRawMetadataValueComponent(e,t,c)};La.decodeRawMetadataValues=function(e,t){let n=new DataView(t.buffer,t.byteOffset,t.byteLength);if(e.isArray){let o=e.arrayLength,r=Array(o);for(let s=0;s<o;s++){let a=La.decodeRawMetadataValueElement(e,n,s);r[s]=a}return r}return La.decodeRawMetadataValueElement(e,n,0)};La.convertToObjectType=function(e,t){if(!l(t)||e===ct.SCALAR||e===ct.STRING||e===ct.BOOLEAN||e===ct.ENUM)return t;let n=t.map(i=>Number(i));switch(e){case ct.VEC2:return U.unpack(n,0,new U);case ct.VEC3:return m.unpack(n,0,new m);case ct.VEC4:return se.unpack(n,0,new se);case ct.MAT2:return Ii.unpack(n,0,new Ii);case ct.MAT3:return $.unpack(n,0,new $);case ct.MAT4:return F.unpack(n,0,new F)}throw new ae(`Invalid metadata object type: ${e}`)};La.convertFromObjectType=function(e,t){if(!l(t)||e===ct.SCALAR||e===ct.STRING||e===ct.BOOLEAN||e===ct.ENUM)return t;switch(e){case ct.VEC2:return U.pack(t,Array(2));case ct.VEC3:return m.pack(t,Array(3));case ct.VEC4:return se.pack(t,Array(4));case ct.MAT2:return Ii.pack(t,Array(4));case ct.MAT3:return $.pack(t,Array(9));case ct.MAT4:return F.pack(t,Array(16))}throw new ae(`Invalid metadata object type: ${e}`)};La.decodeMetadataValues=function(e,t,n){let i=La.decodeRawMetadataValues(e,n);if(t.hasValueTransform){let r=La.convertFromObjectType(e.type,t.offset),s=La.convertFromObjectType(e.type,t.scale);i=yf.valueTransformInPlace(i,r,s,Ft.applyValueTransform)}if(e.isArray){let r=e.arrayLength,s=Array(r);for(let a=0;a<r;a++){let c=i[a],d=La.convertToObjectType(e.type,c);s[a]=d}return s}return La.convertToObjectType(e.type,i)};var ZF=Object.freeze(La);var OPi=_(T(),1);function BT(){this._framebuffer=new fi,this._textureToCopy=void 0,this._copyDepthCommand=void 0}Object.defineProperties(BT.prototype,{framebuffer:{get:function(){return this._framebuffer.framebuffer}}});function Nmt(e,t,n){let{width:i,height:o}=n;e._framebuffer.update(t,i,o)}function kmt(e,t,n){l(e._copyDepthCommand)||(e._copyDepthCommand=t.createViewportQuadCommand(`uniform highp sampler2D colorTexture; in vec2 v_textureCoordinates; void main() { vec4 globeDepthPacked = texture(czm_globeDepthTexture, v_textureCoordinates); float globeDepth = czm_unpackDepth(globeDepthPacked); float depth = texture(colorTexture, v_textureCoordinates).r; out_FragColor = czm_branchFreeTernary(globeDepth <= 0.0 || globeDepth >= 1.0 || depth < globeDepth && depth > 0.0 && depth < 1.0, czm_packDepth(depth), globeDepthPacked); } `,{renderState:Ue.fromCache(),uniformMap:{colorTexture:function(){return e._textureToCopy}},owner:e})),e._textureToCopy=n,e._copyDepthCommand.framebuffer=e.framebuffer}BT.prototype.update=function(e,t){Nmt(this,e,t),kmt(this,e,t)};var Umt=new se,Dmt=new se(1,1/255,1/65025,1/16581375);BT.prototype.getDepth=function(e,t,n){if(!l(this.framebuffer))return;let i=e.readPixels({x:t,y:n,width:1,height:1,framebuffer:this.framebuffer}),o=se.unpack(i,0,Umt);return se.divideByScalar(o,255,o),se.dot(o,Dmt)};BT.prototype.executeCopyDepth=function(e,t){this._copyDepthCommand.execute(e,t)};BT.prototype.isDestroyed=function(){return!1};BT.prototype.destroy=function(){return this._framebuffer.destroy(),l(this._copyDepthCommand)&&(this._copyDepthCommand.shaderProgram=l(this._copyDepthCommand.shaderProgram)&&this._copyDepthCommand.shaderProgram.destroy()),me(this)};var GF=BT;var oFi=_(T(),1);var HPi=_(T(),1);function Bmt(e,t){this.near=e??0,this.far=t??0;let n=Ee.NUMBER_OF_PASSES,i=new Array(n),o=new Array(n);for(let r=0;r<n;++r)i[r]=[],o[r]=0;this.commands=i,this.indices=o}var EF=Bmt;var u2i=_(T(),1);var JPi=_(T(),1),Iy=`uniform highp sampler2D u_depthTexture; in vec2 v_textureCoordinates; void main() { out_FragColor = czm_packDepth(texture(u_depthTexture, v_textureCoordinates).r); } `;function sp(){this._picking=!1,this._numSamples=1,this._tempCopyDepthTexture=void 0,this._pickColorFramebuffer=new fi({depthStencil:!0,supportsDepthTexture:!0}),this._outputFramebuffer=new fi({depthStencil:!0,supportsDepthTexture:!0}),this._copyDepthFramebuffer=new fi,this._tempCopyDepthFramebuffer=new fi,this._updateDepthFramebuffer=new fi({createColorAttachments:!1,createDepthAttachments:!1,depthStencil:!0}),this._clearGlobeColorCommand=void 0,this._copyColorCommand=void 0,this._copyDepthCommand=void 0,this._tempCopyDepthCommand=void 0,this._updateDepthCommand=void 0,this._viewport=new Ke,this._rs=void 0,this._rsBlend=void 0,this._rsUpdate=void 0,this._useScissorTest=!1,this._scissorRectangle=void 0,this._useHdr=void 0,this._clearGlobeDepth=void 0}Object.defineProperties(sp.prototype,{colorFramebufferManager:{get:function(){return this._picking?this._pickColorFramebuffer:this._outputFramebuffer}},framebuffer:{get:function(){return this.colorFramebufferManager.framebuffer}},depthStencilTexture:{get:function(){return this.colorFramebufferManager.getDepthStencilTexture()}},picking:{get:function(){return this._picking},set:function(e){this._picking=e}}});function Wxe(e,t,n,i,o){let r=e._viewport;r.width=n,r.height=i;let s=!Ke.equals(r,o.viewport),a=s!==e._useScissorTest;e._useScissorTest=s,Ke.equals(e._scissorRectangle,o.viewport)||(e._scissorRectangle=Ke.clone(o.viewport,e._scissorRectangle),a=!0),(!l(e._rs)||!Ke.equals(r,e._rs.viewport)||a)&&(e._rs=Ue.fromCache({viewport:r,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle}}),e._rsBlend=Ue.fromCache({viewport:r,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle},blending:un.ALPHA_BLEND}),e._rsUpdate=Ue.fromCache({viewport:r,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle},stencilTest:{enabled:!0,frontFunction:Dn.EQUAL,frontOperation:{fail:ht.KEEP,zFail:ht.KEEP,zPass:ht.KEEP},backFunction:Dn.NEVER,reference:Ut.CESIUM_3D_TILE_MASK,mask:Ut.CESIUM_3D_TILE_MASK}})),l(e._copyDepthCommand)||(e._copyDepthCommand=t.createViewportQuadCommand(Iy,{uniformMap:{u_depthTexture:function(){return e.colorFramebufferManager.getDepthStencilTexture()}},owner:e})),e._copyDepthCommand.framebuffer=e._copyDepthFramebuffer.framebuffer,e._copyDepthCommand.renderState=e._rs,l(e._copyColorCommand)||(e._copyColorCommand=t.createViewportQuadCommand(id,{uniformMap:{colorTexture:function(){return e.colorFramebufferManager.getColorTexture()}},owner:e})),e._copyColorCommand.renderState=e._rs,l(e._tempCopyDepthCommand)||(e._tempCopyDepthCommand=t.createViewportQuadCommand(Iy,{uniformMap:{u_depthTexture:function(){return e._tempCopyDepthTexture}},owner:e})),e._tempCopyDepthCommand.framebuffer=e._tempCopyDepthFramebuffer.framebuffer,e._tempCopyDepthCommand.renderState=e._rs,l(e._updateDepthCommand)||(e._updateDepthCommand=t.createViewportQuadCommand(id,{uniformMap:{colorTexture:function(){return e._tempCopyDepthFramebuffer.getColorTexture()}},owner:e})),e._updateDepthCommand.framebuffer=e._updateDepthFramebuffer.framebuffer,e._updateDepthCommand.renderState=e._rsUpdate,l(e._clearGlobeColorCommand)||(e._clearGlobeColorCommand=new ti({color:new D(0,0,0,0),stencil:0,owner:e})),e._clearGlobeColorCommand.framebuffer=e.framebuffer}sp.prototype.update=function(e,t,n,i,o,r){let{width:s,height:a}=n,c=o?e.halfFloatingPointTexture?je.HALF_FLOAT:je.FLOAT:je.UNSIGNED_BYTE;this._numSamples=i,this.picking?this._pickColorFramebuffer.update(e,s,a):this._outputFramebuffer.update(e,s,a,i,c),this._copyDepthFramebuffer.update(e,s,a),Wxe(this,e,s,a,t),e.uniformState.globeDepthTexture=void 0,this._clearGlobeDepth=r};sp.prototype.prepareColorTextures=function(e,t){!this.picking&&this._numSamples>1&&this._outputFramebuffer.prepareTextures(e,t)};sp.prototype.executeCopyDepth=function(e,t){l(this._copyDepthCommand)&&(this.prepareColorTextures(e),this._copyDepthCommand.execute(e,t),e.uniformState.globeDepthTexture=this._copyDepthFramebuffer.getColorTexture())};sp.prototype.executeUpdateDepth=function(e,t,n){let i=l(n)?n:t.framebuffer.depthStencilTexture;if(!this._clearGlobeDepth&&i===this.colorFramebufferManager.getDepthStencilTexture()){l(this._copyDepthCommand)&&this._copyDepthCommand.execute(e,t);return}if(!l(this._updateDepthCommand))return;let o=this._updateDepthFramebuffer;if(!l(o.framebuffer)||o.getDepthStencilTexture()!==i||o.getColorTexture()!==this._copyDepthFramebuffer.getColorTexture()){let r=this._copyDepthFramebuffer.getColorTexture(),{width:s,height:a}=r;this._tempCopyDepthFramebuffer.destroy(),this._tempCopyDepthFramebuffer.update(e,s,a),o.setColorTexture(r,0),o.setDepthStencilTexture(i),o.update(e,s,a),Wxe(this,e,s,a,t)}this._tempCopyDepthTexture=i,this._tempCopyDepthCommand.execute(e,t),this._updateDepthCommand.execute(e,t)};sp.prototype.executeCopyColor=function(e,t){l(this._copyColorCommand)&&this._copyColorCommand.execute(e,t)};sp.prototype.clear=function(e,t,n){let i=this._clearGlobeColorCommand;l(i)&&(D.clone(n,i.color),this.colorFramebufferManager.clear(e,i,t))};sp.prototype.isDestroyed=function(){return!1};sp.prototype.destroy=function(){return this._pickColorFramebuffer.destroy(),this._outputFramebuffer.destroy(),this._copyDepthFramebuffer.destroy(),this._tempCopyDepthFramebuffer.destroy(),this._updateDepthFramebuffer.destroy(),l(this._copyColorCommand)&&(this._copyColorCommand.shaderProgram=this._copyColorCommand.shaderProgram.destroy()),l(this._copyDepthCommand)&&(this._copyDepthCommand.shaderProgram=this._copyDepthCommand.shaderProgram.destroy()),l(this._tempCopyDepthCommand)&&(this._tempCopyDepthCommand.shaderProgram=this._tempCopyDepthCommand.shaderProgram.destroy()),l(this._updateDepthCommand)&&(this._updateDepthCommand.shaderProgram=this._updateDepthCommand.shaderProgram.destroy()),me(this)};var IF=sp;var S2i=_(T(),1);function OT(){this._framebuffer=new fi({depthStencil:!0,supportsDepthTexture:!0}),this._packedDepthFramebuffer=new fi,this._renderState=void 0,this._packedDepthCommand=void 0,this._clearCommand=void 0,this._viewport=new Ke,this._useScissorTest=!1,this._scissorRectangle=void 0,this._useHdr=void 0}Object.defineProperties(OT.prototype,{classificationTexture:{get:function(){return this._framebuffer.getColorTexture()}},classificationFramebuffer:{get:function(){return this._framebuffer.framebuffer}},packedDepthFramebuffer:{get:function(){return this._packedDepthFramebuffer.framebuffer}},depthStencilTexture:{get:function(){return this._framebuffer.getDepthStencilTexture()}},depthStencilRenderbuffer:{get:function(){return this._framebuffer.getDepthStencilRenderbuffer()}},packedDepthTexture:{get:function(){return this._packedDepthFramebuffer.getColorTexture()}}});function Omt(e){e._framebuffer.destroy(),e._packedDepthFramebuffer.destroy()}function Ymt(e,t,n,i,o){let r=o?t.halfFloatingPointTexture?je.HALF_FLOAT:je.FLOAT:je.UNSIGNED_BYTE;e._framebuffer.update(t,n,i,1,r),e._packedDepthFramebuffer.update(t,n,i)}function zmt(e,t,n,i,o){e._viewport.width=n,e._viewport.height=i;let r=!Ke.equals(e._viewport,o.viewport),s=r!==e._useScissorTest;e._useScissorTest=r,Ke.equals(e._scissorRectangle,o.viewport)||(e._scissorRectangle=Ke.clone(o.viewport,e._scissorRectangle),s=!0),(!l(e._renderState)||!Ke.equals(e._viewport,e._renderState.viewport)||s)&&(e._renderState=Ue.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle}})),l(e._packedDepthCommand)||(e._packedDepthCommand=t.createViewportQuadCommand(Iy,{uniformMap:{u_depthTexture:function(){return e.depthStencilTexture}},owner:e})),l(e._clearCommand)||(e._clearCommand=new ti({color:new D(0,0,0,0),depth:1,stencil:0,owner:e})),e._packedDepthCommand.framebuffer=e._packedDepthFramebuffer.framebuffer,e._packedDepthCommand.renderState=e._renderState,e._clearCommand.framebuffer=e.classificationFramebuffer,e._clearCommand.renderState=e._renderState}OT.prototype.updateAndClear=function(e,t,n,i){let o=t.width,r=t.height;Ymt(this,n,o,r,e),zmt(this,n,o,r,i),this._useHdr=e};OT.prototype.clearClassification=function(e,t){this._clearCommand.execute(e,t)};OT.prototype.packDepth=function(e,t){return this._packedDepthCommand.execute(e,t),this.packedDepthTexture};OT.prototype.isDestroyed=function(){return!1};OT.prototype.destroy=function(){return Omt(this),me(this)};var XF=OT;var Y2i=_(T(),1);var V2i=_(T(),1),aL=`#ifdef MRT layout (location = 0) out vec4 out_FragData_0; layout (location = 1) out vec4 out_FragData_1; #else layout (location = 0) out vec4 out_FragColor; #endif uniform vec4 u_bgColor; uniform sampler2D u_depthTexture; in vec2 v_textureCoordinates; void main() { if (texture(u_depthTexture, v_textureCoordinates).r < 1.0) { #ifdef MRT out_FragData_0 = u_bgColor; out_FragData_1 = vec4(u_bgColor.a); #else out_FragColor = u_bgColor; #endif return; } discard; } `;var R2i=_(T(),1),WF=`/** * Compositing for Weighted Blended Order-Independent Transparency. See: * - http://jcgt.org/published/0002/02/09/ * - http://casual-effects.blogspot.com/2014/03/weighted-blended-order-independent.html */ uniform sampler2D u_opaque; uniform sampler2D u_accumulation; uniform sampler2D u_revealage; in vec2 v_textureCoordinates; void main() { vec4 opaque = texture(u_opaque, v_textureCoordinates); vec4 accum = texture(u_accumulation, v_textureCoordinates); float r = texture(u_revealage, v_textureCoordinates).r; #ifdef MRT vec4 transparent = vec4(accum.rgb / clamp(r, 1e-4, 5e4), accum.a); #else vec4 transparent = vec4(accum.rgb / clamp(accum.a, 1e-4, 5e4), r); #endif out_FragColor = (1.0 - transparent.a) * transparent + transparent.a * opaque; if (opaque != czm_backgroundColor) { out_FragColor.a = 1.0; } } `;function b0(e){this._numSamples=1,this._translucentMultipassSupport=!1,this._translucentMRTSupport=!1;let t=e.colorBufferFloat&&e.depthTexture&&e.floatBlend;this._translucentMRTSupport=e.drawBuffers&&t,this._translucentMultipassSupport=!this._translucentMRTSupport&&t,this._opaqueFBO=void 0,this._opaqueTexture=void 0,this._depthStencilTexture=void 0,this._accumulationTexture=void 0,this._translucentFBO=new fi({colorAttachmentsLength:this._translucentMRTSupport?2:1,createColorAttachments:!1,createDepthAttachments:!1,depth:!0}),this._alphaFBO=new fi({createColorAttachments:!1,createDepthAttachments:!1,depth:!0}),this._adjustTranslucentFBO=new fi({colorAttachmentsLength:this._translucentMRTSupport?2:1,createColorAttachments:!1}),this._adjustAlphaFBO=new fi({createColorAttachments:!1}),this._opaqueClearCommand=new ti({color:new D(0,0,0,0),owner:this}),this._translucentMRTClearCommand=new ti({color:new D(0,0,0,1),owner:this}),this._translucentMultipassClearCommand=new ti({color:new D(0,0,0,0),owner:this}),this._alphaClearCommand=new ti({color:new D(1,1,1,1),owner:this}),this._translucentRenderStateCache={},this._alphaRenderStateCache={},this._compositeCommand=void 0,this._adjustTranslucentCommand=void 0,this._adjustAlphaCommand=void 0,this._viewport=new Ke,this._rs=void 0,this._useScissorTest=!1,this._scissorRectangle=void 0,this._useHDR=!1}function Pxe(e){e._accumulationTexture=e._accumulationTexture&&!e._accumulationTexture.isDestroyed()&&e._accumulationTexture.destroy(),e._revealageTexture=e._revealageTexture&&!e._revealageTexture.isDestroyed()&&e._revealageTexture.destroy()}function Mj(e){e._translucentFBO.destroy(),e._alphaFBO.destroy(),e._adjustTranslucentFBO.destroy(),e._adjustAlphaFBO.destroy()}function vxe(e){Pxe(e),Mj(e)}function Hmt(e,t,n,i){Pxe(e),e._accumulationTexture=new vt({context:t,width:n,height:i,pixelFormat:it.RGBA,pixelDatatype:je.FLOAT}),e._revealageTexture=new vt({context:t,pixelFormat:it.RGBA,pixelDatatype:je.FLOAT,width:n,height:i,flipY:!1})}function Kmt(e,t){Mj(e);let n=ie.FRAMEBUFFER_COMPLETE,i=!0,{width:o,height:r}=e._accumulationTexture;if(e._translucentMRTSupport&&(e._translucentFBO.setColorTexture(e._accumulationTexture,0),e._translucentFBO.setColorTexture(e._revealageTexture,1),e._translucentFBO.setDepthStencilTexture(e._depthStencilTexture),e._translucentFBO.update(t,o,r),e._adjustTranslucentFBO.setColorTexture(e._accumulationTexture,0),e._adjustTranslucentFBO.setColorTexture(e._revealageTexture,1),e._adjustTranslucentFBO.update(t,o,r),(e._translucentFBO.status!==n||e._adjustTranslucentFBO.status!==n)&&(Mj(e),e._translucentMRTSupport=!1)),!e._translucentMRTSupport){e._translucentFBO.setColorTexture(e._accumulationTexture),e._translucentFBO.setDepthStencilTexture(e._depthStencilTexture),e._translucentFBO.update(t,o,r),e._alphaFBO.setColorTexture(e._revealageTexture),e._alphaFBO.setDepthStencilTexture(e._depthStencilTexture),e._alphaFBO.update(t,o,r),e._adjustTranslucentFBO.setColorTexture(e._accumulationTexture),e._adjustTranslucentFBO.update(t,o,r),e._adjustAlphaFBO.setColorTexture(e._revealageTexture),e._adjustAlphaFBO.update(t,o,r);let s=e._translucentFBO.status===n,a=e._alphaFBO.status===n,c=e._adjustTranslucentFBO.status===n,d=e._adjustAlphaFBO.status===n;(!s||!a||!c||!d)&&(vxe(e),e._translucentMultipassSupport=!1,i=!1)}return i}b0.prototype.update=function(e,t,n,i,o){if(!this.isSupported())return;this._opaqueFBO=n,this._opaqueTexture=n.getColorTexture(0),this._depthStencilTexture=n.getDepthStencilTexture();let{width:r,height:s}=this._opaqueTexture,a=this._accumulationTexture,c=!l(a)||a.width!==r||a.height!==s||i!==this._useHDR,d=this._numSamples!==o;if((c||d)&&(this._numSamples=o,Hmt(this,e,r,s)),(!l(this._translucentFBO.framebuffer)||c||d)&&!Kmt(this,e))return;this._useHDR=i;let u=this,h,p;l(this._compositeCommand)||(h=new De({sources:[WF]}),this._translucentMRTSupport&&h.defines.push("MRT"),p={u_opaque:function(){return u._opaqueTexture},u_accumulation:function(){return u._accumulationTexture},u_revealage:function(){return u._revealageTexture}},this._compositeCommand=e.createViewportQuadCommand(h,{uniformMap:p,owner:this})),l(this._adjustTranslucentCommand)||(this._translucentMRTSupport?(h=new De({defines:["MRT"],sources:[aL]}),p={u_bgColor:function(){return u._translucentMRTClearCommand.color},u_depthTexture:function(){return u._depthStencilTexture}},this._adjustTranslucentCommand=e.createViewportQuadCommand(h,{uniformMap:p,owner:this})):this._translucentMultipassSupport&&(h=new De({sources:[aL]}),p={u_bgColor:function(){return u._translucentMultipassClearCommand.color},u_depthTexture:function(){return u._depthStencilTexture}},this._adjustTranslucentCommand=e.createViewportQuadCommand(h,{uniformMap:p,owner:this}),p={u_bgColor:function(){return u._alphaClearCommand.color},u_depthTexture:function(){return u._depthStencilTexture}},this._adjustAlphaCommand=e.createViewportQuadCommand(h,{uniformMap:p,owner:this}))),this._viewport.width=r,this._viewport.height=s;let g=!Ke.equals(this._viewport,t.viewport),f=g!==this._useScissorTest;this._useScissorTest=g,Ke.equals(this._scissorRectangle,t.viewport)||(this._scissorRectangle=Ke.clone(t.viewport,this._scissorRectangle),f=!0),(!l(this._rs)||!Ke.equals(this._viewport,this._rs.viewport)||f)&&(this._rs=Ue.fromCache({viewport:this._viewport,scissorTest:{enabled:this._useScissorTest,rectangle:this._scissorRectangle}})),l(this._compositeCommand)&&(this._compositeCommand.renderState=this._rs),this._adjustTranslucentCommand&&(this._adjustTranslucentCommand.renderState=this._rs),l(this._adjustAlphaCommand)&&(this._adjustAlphaCommand.renderState=this._rs)};var Jmt={enabled:!0,color:new D(0,0,0,0),equationRgb:va.ADD,equationAlpha:va.ADD,functionSourceRgb:Co.ONE,functionDestinationRgb:Co.ONE,functionSourceAlpha:Co.ZERO,functionDestinationAlpha:Co.ONE_MINUS_SOURCE_ALPHA},Qmt={enabled:!0,color:new D(0,0,0,0),equationRgb:va.ADD,equationAlpha:va.ADD,functionSourceRgb:Co.ONE,functionDestinationRgb:Co.ONE,functionSourceAlpha:Co.ONE,functionDestinationAlpha:Co.ONE},jmt={enabled:!0,color:new D(0,0,0,0),equationRgb:va.ADD,equationAlpha:va.ADD,functionSourceRgb:Co.ZERO,functionDestinationRgb:Co.ONE_MINUS_SOURCE_ALPHA,functionSourceAlpha:Co.ZERO,functionDestinationAlpha:Co.ONE_MINUS_SOURCE_ALPHA};function Nj(e,t,n,i){let o=n[i.id];if(!l(o)){let r=Ue.getState(i);r.depthMask=!1,r.blending=t,o=Ue.fromCache(r),n[i.id]=o}return o}function qmt(e,t,n){return Nj(t,Jmt,e._translucentRenderStateCache,n)}function $mt(e,t,n){return Nj(t,Qmt,e._translucentRenderStateCache,n)}function eht(e,t,n){return Nj(t,jmt,e._alphaRenderStateCache,n)}var tht=` vec3 Ci = czm_out_FragColor.rgb * czm_out_FragColor.a; float ai = czm_out_FragColor.a; float wzi = czm_alphaWeight(ai); out_FragData_0 = vec4(Ci * wzi, ai); out_FragData_1 = vec4(ai * wzi); `,nht=` vec3 Ci = czm_out_FragColor.rgb * czm_out_FragColor.a; float ai = czm_out_FragColor.a; float wzi = czm_alphaWeight(ai); out_FragColor = vec4(Ci, ai) * wzi; `,iht=` float ai = czm_out_FragColor.a; out_FragColor = vec4(ai); `;function kj(e,t,n,i){let{shaderCache:o}=e,r=o.getDerivedShaderProgram(t,n);if(l(r))return r;let s=t._attributeLocations,a=t.fragmentShaderSource.clone();a.sources=a.sources.map(function(u){return De.replaceMain(u,"czm_translucent_main").replace(/out_FragColor/g,"czm_out_FragColor").replace(/layout\s*\(location\s*=\s*0\)\s*out\s+vec4\s+out_FragColor;/g,"").replace(/\bdiscard\b/g,"czm_discard = true").replace(/czm_phong/g,"czm_translucentPhong")}),a.sources.splice(0,0,`vec4 czm_out_FragColor; bool czm_discard = false; `);let c=[...i.matchAll(/out_FragData_(\d+)/g)],d="";for(let u=0;u<c.length;u++){let h=c[u];d=`layout (location = ${h[1]}) out vec4 ${h[0]}; ${d}`}return a.sources.push(d),a.sources.push(`void main() { czm_translucent_main(); if (czm_discard) { discard; } ${i}} `),o.createDerivedShaderProgram(t,n,{vertexShaderSource:t.vertexShaderSource,fragmentShaderSource:a,attributeLocations:s})}function oht(e,t){return kj(e,t,"translucentMRT",tht)}function rht(e,t){return kj(e,t,"translucentMultipass",nht)}function sht(e,t){return kj(e,t,"alphaMultipass",iht)}b0.prototype.createDerivedCommands=function(e,t,n){if(l(n)||(n={}),this._translucentMRTSupport){let a,c;return l(n.translucentCommand)&&(a=n.translucentCommand.shaderProgram,c=n.translucentCommand.renderState),n.translucentCommand=$e.shallowClone(e,n.translucentCommand),!l(a)||n.shaderProgramId!==e.shaderProgram.id?(n.translucentCommand.shaderProgram=oht(t,e.shaderProgram),n.translucentCommand.renderState=qmt(this,t,e.renderState),n.shaderProgramId=e.shaderProgram.id):(n.translucentCommand.shaderProgram=a,n.translucentCommand.renderState=c),n}let i,o,r,s;return l(n.translucentCommand)&&(i=n.translucentCommand.shaderProgram,o=n.translucentCommand.renderState,r=n.alphaCommand.shaderProgram,s=n.alphaCommand.renderState),n.translucentCommand=$e.shallowClone(e,n.translucentCommand),n.alphaCommand=$e.shallowClone(e,n.alphaCommand),!l(i)||n.shaderProgramId!==e.shaderProgram.id?(n.translucentCommand.shaderProgram=rht(t,e.shaderProgram),n.translucentCommand.renderState=$mt(this,t,e.renderState),n.alphaCommand.shaderProgram=sht(t,e.shaderProgram),n.alphaCommand.renderState=eht(this,t,e.renderState),n.shaderProgramId=e.shaderProgram.id):(n.translucentCommand.shaderProgram=i,n.translucentCommand.renderState=o,n.alphaCommand.shaderProgram=r,n.alphaCommand.renderState=s),n};function aht(e,t,n,i,o,r){let{context:s,frameState:a}=t,{useLogDepth:c,shadowState:d}=a,u=t._hdr,h=i.framebuffer,p=d.lightShadowsEnabled;i.framebuffer=e._adjustTranslucentFBO.framebuffer,e._adjustTranslucentCommand.execute(s,i),i.framebuffer=e._adjustAlphaFBO.framebuffer,e._adjustAlphaCommand.execute(s,i);let g=e._opaqueFBO.framebuffer;i.framebuffer=e._translucentFBO.framebuffer;for(let f=0;f<o.length;++f){let y=o[f];y=c?y.derivedCommands.logDepth.command:y,y=u?y.derivedCommands.hdr.command:y;let x=p&&y.receiveShadows?y.derivedCommands.oit.shadows.translucentCommand:y.derivedCommands.oit.translucentCommand;n(x,t,i,g)}if(l(r)){let f=r.unclassifiedCommand,y=p&&f.receiveShadows?f.derivedCommands.oit.shadows.translucentCommand:f.derivedCommands.oit.translucentCommand;n(y,t,i,g)}i.framebuffer=e._alphaFBO.framebuffer;for(let f=0;f<o.length;++f){let y=o[f];y=c?y.derivedCommands.logDepth.command:y,y=u?y.derivedCommands.hdr.command:y;let x=p&&y.receiveShadows?y.derivedCommands.oit.shadows.alphaCommand:y.derivedCommands.oit.alphaCommand;n(x,t,i,g)}if(l(r)){let f=r.unclassifiedCommand,y=p&&f.receiveShadows?f.derivedCommands.oit.shadows.alphaCommand:f.derivedCommands.oit.alphaCommand;n(y,t,i,g)}i.framebuffer=h}function cht(e,t,n,i,o,r){let{context:s,frameState:a}=t,{useLogDepth:c,shadowState:d}=a,u=t._hdr,h=i.framebuffer,p=d.lightShadowsEnabled;i.framebuffer=e._adjustTranslucentFBO.framebuffer,e._adjustTranslucentCommand.execute(s,i);let g=e._opaqueFBO.framebuffer;i.framebuffer=e._translucentFBO.framebuffer;for(let f=0;f<o.length;++f){let y=o[f];y=c?y.derivedCommands.logDepth.command:y,y=u?y.derivedCommands.hdr.command:y;let x=p&&y.receiveShadows?y.derivedCommands.oit.shadows.translucentCommand:y.derivedCommands.oit.translucentCommand;n(x,t,i,g)}if(l(r)){let f=r.unclassifiedCommand,y=p&&f.receiveShadows?f.derivedCommands.oit.shadows.translucentCommand:f.derivedCommands.oit.translucentCommand;n(y,t,i,g)}i.framebuffer=h}b0.prototype.executeCommands=function(e,t,n,i,o){if(this._translucentMRTSupport){cht(this,e,t,n,i,o);return}aht(this,e,t,n,i,o)};b0.prototype.execute=function(e,t){this._compositeCommand.execute(e,t)};b0.prototype.clear=function(e,t,n){let i=t.framebuffer;t.framebuffer=this._opaqueFBO.framebuffer,D.clone(n,this._opaqueClearCommand.color),this._opaqueClearCommand.execute(e,t),t.framebuffer=this._translucentFBO.framebuffer,(this._translucentMRTSupport?this._translucentMRTClearCommand:this._translucentMultipassClearCommand).execute(e,t),this._translucentMultipassSupport&&(t.framebuffer=this._alphaFBO.framebuffer,this._alphaClearCommand.execute(e,t)),t.framebuffer=i};b0.prototype.isSupported=function(){return this._translucentMRTSupport||this._translucentMultipassSupport};b0.prototype.isDestroyed=function(){return!1};b0.prototype.destroy=function(){return vxe(this),l(this._compositeCommand)&&(this._compositeCommand.shaderProgram=this._compositeCommand.shaderProgram&&this._compositeCommand.shaderProgram.destroy()),l(this._adjustTranslucentCommand)&&(this._adjustTranslucentCommand.shaderProgram=this._adjustTranslucentCommand.shaderProgram&&this._adjustTranslucentCommand.shaderProgram.destroy()),l(this._adjustAlphaCommand)&&(this._adjustAlphaCommand.shaderProgram=this._adjustAlphaCommand.shaderProgram&&this._adjustAlphaCommand.shaderProgram.destroy()),me(this)};var PF=b0;var j2i=_(T(),1);function vF(){this._framebuffer=new fi({color:!1,depthStencil:!0,supportsDepthTexture:!0}),this._passState=void 0}Object.defineProperties(vF.prototype,{framebuffer:{get:function(){return this._framebuffer.framebuffer}}});function lht(e){e._framebuffer.destroy()}function dht(e,t){let n=t.drawingBufferWidth,i=t.drawingBufferHeight;e._framebuffer.update(t,n,i);let o=new sc(t);o.blendingEnabled=!1,o.scissorTest={enabled:!0,rectangle:new Ke},o.viewport=new Ke,e._passState=o}vF.prototype.update=function(e,t,n){let i=n.width,o=n.height;this._framebuffer.isDirty(i,o)&&dht(this,e);let r=this.framebuffer,s=this._passState;return s.framebuffer=r,s.viewport.width=i,s.viewport.height=o,s.scissorTest.rectangle.x=t.x,s.scissorTest.rectangle.y=o-t.y,s.scissorTest.rectangle.width=1,s.scissorTest.rectangle.height=1,s};vF.prototype.isDestroyed=function(){return!1};vF.prototype.destroy=function(){return lht(this),me(this)};var wF=vF;var rvi=_(T(),1);function cL(e){let t=new sc(e);t.blendingEnabled=!1,t.scissorTest={enabled:!0,rectangle:new Ke},t.viewport=new Ke,this._context=e,this._fb=new fi({depthStencil:!0}),this._passState=t,this._width=0,this._height=0}cL.prototype.begin=function(e,t){let n=this._context,{width:i,height:o}=t;return Ke.clone(e,this._passState.scissorTest.rectangle),this._width=i,this._height=o,this._fb.update(n,i,o),this._passState.framebuffer=this._fb.framebuffer,this._passState.viewport.width=i,this._passState.viewport.height=o,this._passState};var FF=new D;cL.prototype.end=function(e){let t=e.width??1,n=e.height??1,i=this._context,o=i.readPixels({x:e.x,y:e.y,width:t,height:n,framebuffer:this._fb.framebuffer}),r=Math.max(t,n),s=r*r,a=Math.floor(t*.5),c=Math.floor(n*.5),d=0,u=0,h=0,p=-1;for(let g=0;g<s;++g){if(-a<=d&&d<=a&&-c<=u&&u<=c){let f=4*((c-u)*t+d+a);FF.red=D.byteToFloat(o[f]),FF.green=D.byteToFloat(o[f+1]),FF.blue=D.byteToFloat(o[f+2]),FF.alpha=D.byteToFloat(o[f+3]);let y=i.getObjectByPickColor(FF);if(l(y))return y}if(d===u||d<0&&-d===u||d>0&&d===1-u){let f=h;h=-p,p=f}d+=h,u+=p}};cL.prototype.readCenterPixel=function(e){let t=e.width??1,n=e.height??1,o=this._context.readPixels({x:e.x,y:e.y,width:t,height:n,framebuffer:this._fb.framebuffer}),r=Math.floor(t*.5),a=4*(Math.floor(n*.5)*t+r);return o.slice(a,a+4)};cL.prototype.isDestroyed=function(){return!1};cL.prototype.destroy=function(){return this._fb.destroy(),me(this)};var AF=cL;var mvi=_(T(),1);function g0(){this._numSamples=1,this._colorFramebuffer=new fi({depthStencil:!0,supportsDepthTexture:!0}),this._idFramebuffer=new fi({depthStencil:!0,supportsDepthTexture:!0}),this._idClearColor=new D(0,0,0,0),this._clearCommand=new ti({color:new D(0,0,0,0),depth:1,owner:this})}function uht(e){e._colorFramebuffer.destroy(),e._idFramebuffer.destroy()}Object.defineProperties(g0.prototype,{framebuffer:{get:function(){return this._colorFramebuffer.framebuffer}},idFramebuffer:{get:function(){return this._idFramebuffer.framebuffer}},depthStencilTexture:{get:function(){return this._colorFramebuffer.getDepthStencilTexture()}}});g0.prototype.update=function(e,t,n,i){let o=t.width,r=t.height,s=n?e.halfFloatingPointTexture?je.HALF_FLOAT:je.FLOAT:je.UNSIGNED_BYTE;this._numSamples=i,this._colorFramebuffer.update(e,o,r,i,s),this._idFramebuffer.update(e,o,r)};g0.prototype.clear=function(e,t,n){D.clone(n,this._clearCommand.color),D.clone(this._idClearColor,this._clearCommand.color),this._colorFramebuffer.clear(e,this._clearCommand,t),this._idFramebuffer.clear(e,this._clearCommand,t)};g0.prototype.getFramebuffer=function(){return this._colorFramebuffer.framebuffer};g0.prototype.getIdFramebuffer=function(){return this._idFramebuffer.framebuffer};g0.prototype.prepareColorTextures=function(e){this._numSamples>1&&this._colorFramebuffer.prepareTextures(e)};g0.prototype.isDestroyed=function(){return!1};g0.prototype.destroy=function(){return uht(this),me(this)};var YT=g0;var lwi=_(T(),1);var bvi=_(T(),1);function zT(){}zT.getShadowCastShaderKeyword=function(e,t,n,i){return`castShadow ${e} ${t} ${n} ${i}`};zT.createShadowCastVertexShader=function(e,t,n){let i=e.defines.slice(0),o=e.sources.slice(0);i.push("SHADOW_MAP"),n&&i.push("GENERATE_POSITION");let r=De.findPositionVarying(e),s=l(r);if(t&&!s){let a=o.length;for(let d=0;d<a;++d)o[d]=De.replaceMain(o[d],"czm_shadow_cast_main");o.push(`out vec3 v_positionEC; void main() { czm_shadow_cast_main(); v_positionEC = (czm_inverseProjection * gl_Position).xyz; }`)}return new De({defines:i,sources:o})};zT.createShadowCastFragmentShader=function(e,t,n,i){let o=e.defines.slice(0),r=e.sources.slice(0);o.push("SHADOW_MAP");let s=De.findPositionVarying(e),a=l(s);a||(s="v_positionEC");let c=r.length;for(let u=0;u<c;++u)r[u]=De.replaceMain(r[u],"czm_shadow_cast_main");let d="";return t&&(a||(d+=`in vec3 v_positionEC; `),d+=`uniform vec4 shadowMap_lightPositionEC; `),i?d+=`void main() { `:d+=`void main() { czm_shadow_cast_main(); if (out_FragColor.a == 0.0) { discard; } `,t?d+=` float distance = length(${s}); if (distance >= shadowMap_lightPositionEC.w) { discard; } distance /= shadowMap_lightPositionEC.w; // radius out_FragColor = czm_packDepth(distance); `:n?d+=` out_FragColor = vec4(1.0); `:d+=` out_FragColor = czm_packDepth(gl_FragCoord.z); `,d+=`} `,r.push(d),new De({defines:o,sources:r})};zT.getShadowReceiveShaderKeyword=function(e,t,n,i){let o=e._usesDepthTexture,r=e._polygonOffsetSupported,s=e._isPointLight,a=e._isSpotLight,c=e._numberOfCascades>1,d=e.debugCascadeColors,u=e.softShadows;return`receiveShadow ${o}${r}${s}${a}${c}${d}${u}${t}${n}${i}`};zT.createShadowReceiveVertexShader=function(e,t,n){let i=e.defines.slice(0),o=e.sources.slice(0);return i.push("SHADOW_MAP"),t&&(n?i.push("GENERATE_POSITION_AND_NORMAL"):i.push("GENERATE_POSITION")),new De({defines:i,sources:o})};zT.createShadowReceiveFragmentShader=function(e,t,n,i,o){let r=De.findNormalVarying(e),s=!i&&l(r)||i&&o,a=De.findPositionVarying(e),c=l(a),d=t._usesDepthTexture,u=t._polygonOffsetSupported,h=t._isPointLight,p=t._isSpotLight,g=t._numberOfCascades>1,f=t.debugCascadeColors,y=t.softShadows,x=h?t._pointBias:i?t._terrainBias:t._primitiveBias,S=e.defines.slice(0),C=e.sources.slice(0),V=C.length;for(let E=0;E<V;++E)C[E]=De.replaceMain(C[E],"czm_shadow_receive_main");h?S.push("USE_CUBE_MAP_SHADOW"):d&&S.push("USE_SHADOW_DEPTH_TEXTURE"),y&&!h&&S.push("USE_SOFT_SHADOWS"),g&&n&&i&&(s?S.push("ENABLE_VERTEX_LIGHTING"):S.push("ENABLE_DAYNIGHT_SHADING")),n&&x.normalShading&&s&&(S.push("USE_NORMAL_SHADING"),x.normalShadingSmooth>0&&S.push("USE_NORMAL_SHADING_SMOOTH"));let L="";h?L+=`uniform samplerCube shadowMap_textureCube; `:L+=`uniform sampler2D shadowMap_texture; `;let Z;return c?Z=` return vec4(${a}, 1.0); `:Z=`#ifndef LOG_DEPTH return czm_windowToEyeCoordinates(gl_FragCoord); #else return vec4(v_logPositionEC, 1.0); #endif `,L+=`uniform mat4 shadowMap_matrix; uniform vec3 shadowMap_lightDirectionEC; uniform vec4 shadowMap_lightPositionEC; uniform vec4 shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness; uniform vec4 shadowMap_texelSizeDepthBiasAndNormalShadingSmooth; #ifdef LOG_DEPTH in vec3 v_logPositionEC; #endif vec4 getPositionEC() { ${Z}} vec3 getNormalEC() { ${s?` return normalize(${r}); `:` return vec3(1.0); `}} void applyNormalOffset(inout vec4 positionEC, vec3 normalEC, float nDotL) { ${x.normalOffset&&s?` float normalOffset = shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness.x; float normalOffsetScale = 1.0 - nDotL; vec3 offset = normalOffset * normalOffsetScale * normalEC; positionEC.xyz += offset; `:""}} `,L+=`void main() { czm_shadow_receive_main(); vec4 positionEC = getPositionEC(); vec3 normalEC = getNormalEC(); float depth = -positionEC.z; `,L+=` czm_shadowParameters shadowParameters; shadowParameters.texelStepSize = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.xy; shadowParameters.depthBias = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.z; shadowParameters.normalShadingSmooth = shadowMap_texelSizeDepthBiasAndNormalShadingSmooth.w; shadowParameters.darkness = shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness.w; `,i?L+=` shadowParameters.depthBias *= max(depth * 0.01, 1.0); `:u||(L+=` shadowParameters.depthBias *= mix(1.0, 100.0, depth * 0.0015); `),h?L+=` vec3 directionEC = positionEC.xyz - shadowMap_lightPositionEC.xyz; float distance = length(directionEC); directionEC = normalize(directionEC); float radius = shadowMap_lightPositionEC.w; // Stop early if the fragment is beyond the point light radius if (distance > radius) { return; } vec3 directionWC = czm_inverseViewRotation * directionEC; shadowParameters.depth = distance / radius; shadowParameters.nDotL = clamp(dot(normalEC, -directionEC), 0.0, 1.0); shadowParameters.texCoords = directionWC; float visibility = czm_shadowVisibility(shadowMap_textureCube, shadowParameters); `:p?L+=` vec3 directionEC = normalize(positionEC.xyz - shadowMap_lightPositionEC.xyz); float nDotL = clamp(dot(normalEC, -directionEC), 0.0, 1.0); applyNormalOffset(positionEC, normalEC, nDotL); vec4 shadowPosition = shadowMap_matrix * positionEC; // Spot light uses a perspective projection, so perform the perspective divide shadowPosition /= shadowPosition.w; // Stop early if the fragment is not in the shadow bounds if (any(lessThan(shadowPosition.xyz, vec3(0.0))) || any(greaterThan(shadowPosition.xyz, vec3(1.0)))) { return; } shadowParameters.texCoords = shadowPosition.xy; shadowParameters.depth = shadowPosition.z; shadowParameters.nDotL = nDotL; float visibility = czm_shadowVisibility(shadowMap_texture, shadowParameters); `:g?L+=` float maxDepth = shadowMap_cascadeSplits[1].w; // Stop early if the eye depth exceeds the last cascade if (depth > maxDepth) { return; } // Get the cascade based on the eye-space depth vec4 weights = czm_cascadeWeights(depth); // Apply normal offset float nDotL = clamp(dot(normalEC, shadowMap_lightDirectionEC), 0.0, 1.0); applyNormalOffset(positionEC, normalEC, nDotL); // Transform position into the cascade vec4 shadowPosition = czm_cascadeMatrix(weights) * positionEC; // Get visibility shadowParameters.texCoords = shadowPosition.xy; shadowParameters.depth = shadowPosition.z; shadowParameters.nDotL = nDotL; float visibility = czm_shadowVisibility(shadowMap_texture, shadowParameters); // Fade out shadows that are far away float shadowMapMaximumDistance = shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness.z; float fade = max((depth - shadowMapMaximumDistance * 0.8) / (shadowMapMaximumDistance * 0.2), 0.0); visibility = mix(visibility, 1.0, fade); ${f?` // Draw cascade colors for debugging out_FragColor *= czm_cascadeColor(weights); `:""}`:L+=` float nDotL = clamp(dot(normalEC, shadowMap_lightDirectionEC), 0.0, 1.0); applyNormalOffset(positionEC, normalEC, nDotL); vec4 shadowPosition = shadowMap_matrix * positionEC; // Stop early if the fragment is not in the shadow bounds if (any(lessThan(shadowPosition.xyz, vec3(0.0))) || any(greaterThan(shadowPosition.xyz, vec3(1.0)))) { return; } shadowParameters.texCoords = shadowPosition.xy; shadowParameters.depth = shadowPosition.z; shadowParameters.nDotL = nDotL; float visibility = czm_shadowVisibility(shadowMap_texture, shadowParameters); `,L+=` out_FragColor.rgb *= visibility; } `,C.push(L),new De({defines:S,sources:C})};var ap=zT;function cp(e){e=e??Y.EMPTY_OBJECT;let t=e.context;this._enabled=e.enabled??!0,this._softShadows=e.softShadows??!1,this._normalOffset=e.normalOffset??!0,this.dirty=!0,this.fromLightSource=e.fromLightSource??!0,this.darkness=e.darkness??.3,this._darkness=this.darkness,this.fadingEnabled=e.fadingEnabled??!0,this.maximumDistance=e.maximumDistance??5e3,this._outOfView=!1,this._outOfViewPrevious=!1,this._needsUpdate=!0;let n=!0;(Bt.isInternetExplorer()||Bt.isEdge()||(Bt.isChrome()||Bt.isFirefox())&&Bt.isWindows()&&!t.depthTexture)&&(n=!1),this._polygonOffsetSupported=n,this._terrainBias={polygonOffset:n,polygonOffsetFactor:1.1,polygonOffsetUnits:4,normalOffset:this._normalOffset,normalOffsetScale:.5,normalShading:!0,normalShadingSmooth:.3,depthBias:1e-4},this._primitiveBias={polygonOffset:n,polygonOffsetFactor:1.1,polygonOffsetUnits:4,normalOffset:this._normalOffset,normalOffsetScale:.1,normalShading:!0,normalShadingSmooth:.05,depthBias:2e-5},this._pointBias={polygonOffset:!1,polygonOffsetFactor:1.1,polygonOffsetUnits:4,normalOffset:this._normalOffset,normalOffsetScale:0,normalShading:!0,normalShadingSmooth:.1,depthBias:5e-4},this._depthAttachment=void 0,this._colorAttachment=void 0,this._shadowMapMatrix=new F,this._shadowMapTexture=void 0,this._lightDirectionEC=new m,this._lightPositionEC=new se,this._distance=0,this._lightCamera=e.lightCamera,this._shadowMapCamera=new y3,this._shadowMapCullingVolume=void 0,this._sceneCamera=void 0,this._boundingSphere=new le,this._isPointLight=e.isPointLight??!1,this._pointLightRadius=e.pointLightRadius??100,this._cascadesEnabled=this._isPointLight?!1:e.cascadesEnabled??!0,this._numberOfCascades=this._cascadesEnabled?e.numberOfCascades??4:0,this._fitNearFar=!0,this._maximumCascadeDistances=[25,150,700,Number.MAX_VALUE],this._textureSize=new U,this._isSpotLight=!1,this._cascadesEnabled?this._shadowMapCamera.frustum=new Pr:l(this._lightCamera.frustum.fov)&&(this._isSpotLight=!0),this._cascadeSplits=[new se,new se],this._cascadeMatrices=[new F,new F,new F,new F],this._cascadeDistances=new se;let i;this._isPointLight?i=6:this._cascadesEnabled?i=this._numberOfCascades:i=1,this._passes=new Array(i);for(let o=0;o<i;++o)this._passes[o]=new mht(t);this.debugShow=!1,this.debugFreezeFrame=!1,this._debugFreezeFrame=!1,this._debugCascadeColors=!1,this._debugLightFrustum=void 0,this._debugCameraFrustum=void 0,this._debugCascadeFrustums=new Array(this._numberOfCascades),this._debugShadowViewCommand=void 0,this._usesDepthTexture=t.depthTexture,this._isPointLight&&(this._usesDepthTexture=!1),this._primitiveRenderState=void 0,this._terrainRenderState=void 0,this._pointRenderState=void 0,Dj(this),this._clearCommand=new ti({depth:1,color:new D}),this._clearPassState=new sc(t),this._size=e.size??2048,this.size=this._size}cp.MAXIMUM_DISTANCE=2e4;function mht(e){this.camera=new y3,this.passState=new sc(e),this.framebuffer=void 0,this.textureOffsets=void 0,this.commandList=[],this.cullingVolume=void 0}function Uj(e,t){return Ue.fromCache({cull:{enabled:!0,face:Ti.BACK},depthTest:{enabled:!0},colorMask:{red:e,green:e,blue:e,alpha:e},depthMask:!0,polygonOffset:{enabled:t.polygonOffset,factor:t.polygonOffsetFactor,units:t.polygonOffsetUnits}})}function Dj(e){let t=!e._usesDepthTexture;e._primitiveRenderState=Uj(t,e._primitiveBias),e._terrainRenderState=Uj(t,e._terrainBias),e._pointRenderState=Uj(t,e._pointBias)}cp.prototype.debugCreateRenderStates=function(){Dj(this)};Object.defineProperties(cp.prototype,{enabled:{get:function(){return this._enabled},set:function(e){this.dirty=this._enabled!==e,this._enabled=e}},normalOffset:{get:function(){return this._normalOffset},set:function(e){this.dirty=this._normalOffset!==e,this._normalOffset=e,this._terrainBias.normalOffset=e,this._primitiveBias.normalOffset=e,this._pointBias.normalOffset=e}},softShadows:{get:function(){return this._softShadows},set:function(e){this.dirty=this._softShadows!==e,this._softShadows=e}},size:{get:function(){return this._size},set:function(e){yht(this,e)}},outOfView:{get:function(){return this._outOfView}},shadowMapCullingVolume:{get:function(){return this._shadowMapCullingVolume}},passes:{get:function(){return this._passes}},isPointLight:{get:function(){return this._isPointLight}},debugCascadeColors:{get:function(){return this._debugCascadeColors},set:function(e){this.dirty=this._debugCascadeColors!==e,this._debugCascadeColors=e}}});function Bj(e){let t=e._passes.length;for(let n=0;n<t;++n){let i=e._passes[n],o=i.framebuffer;l(o)&&!o.isDestroyed()&&o.destroy(),i.framebuffer=void 0}e._depthAttachment=e._depthAttachment&&e._depthAttachment.destroy(),e._colorAttachment=e._colorAttachment&&e._colorAttachment.destroy()}function hht(e,t){let n=new fd({context:t,width:e._textureSize.x,height:e._textureSize.y,format:Nc.DEPTH_COMPONENT16}),i=new vt({context:t,width:e._textureSize.x,height:e._textureSize.y,pixelFormat:it.RGBA,pixelDatatype:je.UNSIGNED_BYTE,sampler:qt.NEAREST}),o=new Wr({context:t,depthRenderbuffer:n,colorTextures:[i],destroyAttachments:!1}),r=e._passes.length;for(let s=0;s<r;++s){let a=e._passes[s];a.framebuffer=o,a.passState.framebuffer=o}e._shadowMapTexture=i,e._depthAttachment=n,e._colorAttachment=i}function fht(e,t){let n=new vt({context:t,width:e._textureSize.x,height:e._textureSize.y,pixelFormat:it.DEPTH_STENCIL,pixelDatatype:je.UNSIGNED_INT_24_8,sampler:qt.NEAREST}),i=new Wr({context:t,depthStencilTexture:n,destroyAttachments:!1}),o=e._passes.length;for(let r=0;r<o;++r){let s=e._passes[r];s.framebuffer=i,s.passState.framebuffer=i}e._shadowMapTexture=n,e._depthAttachment=n}function pht(e,t){let n=new fd({context:t,width:e._textureSize.x,height:e._textureSize.y,format:Nc.DEPTH_COMPONENT16}),i=new xr({context:t,width:e._textureSize.x,height:e._textureSize.y,pixelFormat:it.RGBA,pixelDatatype:je.UNSIGNED_BYTE,sampler:qt.NEAREST}),o=[i.negativeX,i.negativeY,i.negativeZ,i.positiveX,i.positiveY,i.positiveZ];for(let r=0;r<6;++r){let s=new Wr({context:t,depthRenderbuffer:n,colorTextures:[o[r]],destroyAttachments:!1}),a=e._passes[r];a.framebuffer=s,a.passState.framebuffer=s}e._shadowMapTexture=i,e._depthAttachment=n,e._colorAttachment=i}function Axe(e,t){e._isPointLight?pht(e,t):e._usesDepthTexture?fht(e,t):hht(e,t)}function bht(e,t){e._usesDepthTexture&&e._passes[0].framebuffer.status!==ie.FRAMEBUFFER_COMPLETE&&(e._usesDepthTexture=!1,Dj(e),Bj(e),Axe(e,t))}function ght(e,t){(!l(e._passes[0].framebuffer)||e._shadowMapTexture.width!==e._textureSize.x)&&(Bj(e),Axe(e,t),bht(e,t),Mxe(e,t))}function Mxe(e,t,n){n=n??0,(e._isPointLight||n===0)&&(e._clearCommand.framebuffer=e._passes[n].framebuffer,e._clearCommand.execute(t,e._clearPassState))}function yht(e,t){e._size=t;let n=e._passes,i=n.length,o=e._textureSize;if(e._isPointLight){t=Nt.maximumCubeMapSize>=t?t:Nt.maximumCubeMapSize,o.x=t,o.y=t;let r=new Ke(0,0,t,t);n[0].passState.viewport=r,n[1].passState.viewport=r,n[2].passState.viewport=r,n[3].passState.viewport=r,n[4].passState.viewport=r,n[5].passState.viewport=r}else i===1?(t=Nt.maximumTextureSize>=t?t:Nt.maximumTextureSize,o.x=t,o.y=t,n[0].passState.viewport=new Ke(0,0,t,t)):i===4&&(t=Nt.maximumTextureSize>=t*2?t:Nt.maximumTextureSize/2,o.x=t*2,o.y=t*2,n[0].passState.viewport=new Ke(0,0,t,t),n[1].passState.viewport=new Ke(t,0,t,t),n[2].passState.viewport=new Ke(0,t,t,t),n[3].passState.viewport=new Ke(t,t,t,t));e._clearPassState.viewport=new Ke(0,0,o.x,o.y);for(let r=0;r<i;++r){let s=n[r],a=s.passState.viewport,c=a.x/o.x,d=a.y/o.y,u=a.width/o.x,h=a.height/o.y;s.textureOffsets=new F(u,0,0,c,0,h,0,d,0,0,1,0,0,0,0,1)}}var xht=new Ke;function _ht(e,t){let n;e._isPointLight?n=`uniform samplerCube shadowMap_textureCube; in vec2 v_textureCoordinates; void main() { vec2 uv = v_textureCoordinates; vec3 dir; if (uv.y < 0.5) { if (uv.x < 0.333) { dir.x = -1.0; dir.y = uv.x * 6.0 - 1.0; dir.z = uv.y * 4.0 - 1.0; } else if (uv.x < 0.666) { dir.y = -1.0; dir.x = uv.x * 6.0 - 3.0; dir.z = uv.y * 4.0 - 1.0; } else { dir.z = -1.0; dir.x = uv.x * 6.0 - 5.0; dir.y = uv.y * 4.0 - 1.0; } } else { if (uv.x < 0.333) { dir.x = 1.0; dir.y = uv.x * 6.0 - 1.0; dir.z = uv.y * 4.0 - 3.0; } else if (uv.x < 0.666) { dir.y = 1.0; dir.x = uv.x * 6.0 - 3.0; dir.z = uv.y * 4.0 - 3.0; } else { dir.z = 1.0; dir.x = uv.x * 6.0 - 5.0; dir.y = uv.y * 4.0 - 3.0; } } float shadow = czm_unpackDepth(czm_textureCube(shadowMap_textureCube, dir)); out_FragColor = vec4(vec3(shadow), 1.0); } `:n=`uniform sampler2D shadowMap_texture; in vec2 v_textureCoordinates; void main() { ${e._usesDepthTexture?` float shadow = texture(shadowMap_texture, v_textureCoordinates).r; `:` float shadow = czm_unpackDepth(texture(shadowMap_texture, v_textureCoordinates)); `} out_FragColor = vec4(vec3(shadow), 1.0); } `;let i=t.createViewportQuadCommand(n,{uniformMap:{shadowMap_texture:function(){return e._shadowMapTexture},shadowMap_textureCube:function(){return e._shadowMapTexture}}});return i.pass=Ee.OVERLAY,i}function Tht(e,t){let n=t.context,i=t.context.drawingBufferWidth,o=t.context.drawingBufferHeight,r=Math.min(i,o)*.3,s=xht;s.x=i-r,s.y=0,s.width=r,s.height=r;let a=e._debugShadowViewCommand;l(a)||(a=_ht(e,n),e._debugShadowViewCommand=a),(!l(a.renderState)||!Ke.equals(a.renderState.viewport,s))&&(a.renderState=Ue.fromCache({viewport:Ke.clone(s)})),t.commandList.push(e._debugShadowViewCommand)}var lp=new Array(8);lp[0]=new se(-1,-1,-1,1);lp[1]=new se(1,-1,-1,1);lp[2]=new se(1,1,-1,1);lp[3]=new se(-1,1,-1,1);lp[4]=new se(-1,-1,1,1);lp[5]=new se(1,-1,1,1);lp[6]=new se(1,1,1,1);lp[7]=new se(-1,1,1,1);var Xy=new F,Oj=new Array(8);for(let e=0;e<8;++e)Oj[e]=new se;function Sht(e,t){let n=new Et({geometry:new Fm({minimum:new m(-.5,-.5,-.5),maximum:new m(.5,.5,.5)}),attributes:{color:Yt.fromColor(t)}}),i=new Et({geometry:new Xb({radius:.5}),attributes:{color:Yt.fromColor(t)}});return new In({geometryInstances:[n,i],appearance:new dn({translucent:!1,flat:!0}),asynchronous:!1,modelMatrix:e})}var Cht=[D.RED,D.GREEN,D.BLUE,D.MAGENTA],Vht=new m;function Lht(e,t){Tht(e,t);let n=e.debugFreezeFrame&&!e._debugFreezeFrame;if(e._debugFreezeFrame=e.debugFreezeFrame,e.debugFreezeFrame&&(n&&(e._debugCameraFrustum=e._debugCameraFrustum&&e._debugCameraFrustum.destroy(),e._debugCameraFrustum=new ip({camera:e._sceneCamera,color:D.CYAN,updateOnChange:!1})),e._debugCameraFrustum.update(t)),e._cascadesEnabled){if(e.debugFreezeFrame){n&&(e._debugLightFrustum=e._debugLightFrustum&&e._debugLightFrustum.destroy(),e._debugLightFrustum=new ip({camera:e._shadowMapCamera,color:D.YELLOW,updateOnChange:!1})),e._debugLightFrustum.update(t);for(let i=0;i<e._numberOfCascades;++i)n&&(e._debugCascadeFrustums[i]=e._debugCascadeFrustums[i]&&e._debugCascadeFrustums[i].destroy(),e._debugCascadeFrustums[i]=new ip({camera:e._passes[i].camera,color:Cht[i],updateOnChange:!1})),e._debugCascadeFrustums[i].update(t)}}else if(e._isPointLight){if(!l(e._debugLightFrustum)||e._needsUpdate){let i=e._shadowMapCamera.positionWC,o=ve.IDENTITY,r=e._pointLightRadius*2,s=m.fromElements(r,r,r,Vht),a=F.fromTranslationQuaternionRotationScale(i,o,s,Xy);e._debugLightFrustum=e._debugLightFrustum&&e._debugLightFrustum.destroy(),e._debugLightFrustum=Sht(a,D.YELLOW)}e._debugLightFrustum.update(t)}else(!l(e._debugLightFrustum)||e._needsUpdate)&&(e._debugLightFrustum=new ip({camera:e._shadowMapCamera,color:D.YELLOW,updateOnChange:!1})),e._debugLightFrustum.update(t)}function y3(){this.viewMatrix=new F,this.inverseViewMatrix=new F,this.frustum=void 0,this.positionCartographic=new he,this.positionWC=new m,this.directionWC=m.clone(m.UNIT_Z),this.upWC=m.clone(m.UNIT_Y),this.rightWC=m.clone(m.UNIT_X),this.viewProjectionMatrix=new F}y3.prototype.clone=function(e){F.clone(e.viewMatrix,this.viewMatrix),F.clone(e.inverseViewMatrix,this.inverseViewMatrix),this.frustum=e.frustum.clone(this.frustum),he.clone(e.positionCartographic,this.positionCartographic),m.clone(e.positionWC,this.positionWC),m.clone(e.directionWC,this.directionWC),m.clone(e.upWC,this.upWC),m.clone(e.rightWC,this.rightWC)};var Rht=new F(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1);y3.prototype.getViewProjection=function(){let e=this.viewMatrix,t=this.frustum.projectionMatrix;return F.multiply(t,e,this.viewProjectionMatrix),F.multiply(Rht,this.viewProjectionMatrix,this.viewProjectionMatrix),this.viewProjectionMatrix};var Zht=new Array(5),Ght=new Gi,Eht=new Array(4),Nxe=new m,kxe=new m;function Iht(e,t){let n=e._shadowMapCamera,i=e._sceneCamera,o=i.frustum.near,r=i.frustum.far,s=e._numberOfCascades,a,c=r-o,d=r/o,u=.9,h=!1;t.shadowState.closestObjectSize<200&&(h=!0,u=.9);let p=Eht,g=Zht;for(g[0]=o,g[s]=r,a=0;a<s;++a){let A=(a+1)/s,b=o*Math.pow(d,A),R=o+c*A,G=X.lerp(R,b,u);g[a+1]=G,p[a]=G-g[a]}if(h){for(a=0;a<s;++a)p[a]=Math.min(p[a],e._maximumCascadeDistances[a]);let A=g[0];for(a=0;a<s-1;++a)A+=p[a],g[a+1]=A}se.unpack(g,0,e._cascadeSplits[0]),se.unpack(g,1,e._cascadeSplits[1]),se.unpack(p,0,e._cascadeDistances);let f=n.frustum,y=f.left,x=f.right,S=f.bottom,C=f.top,V=f.near,L=f.far,Z=n.positionWC,E=n.directionWC,P=n.upWC,W=i.frustum.clone(Ght),v=n.getViewProjection();for(a=0;a<s;++a){W.near=g[a],W.far=g[a+1];let A=F.multiply(W.projectionMatrix,i.viewMatrix,Xy),b=F.inverse(A,Xy),R=F.multiply(v,b,Xy),G=m.fromElements(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE,Nxe),I=m.fromElements(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE,kxe);for(let O=0;O<8;++O){let N=se.clone(lp[O],Oj[O]);F.multiplyByVector(R,N,N),m.divideByScalar(N,N.w,N),m.minimumByComponent(N,G,G),m.maximumByComponent(N,I,I)}G.x=Math.max(G.x,0),G.y=Math.max(G.y,0),G.z=0,I.x=Math.min(I.x,1),I.y=Math.min(I.y,1),I.z=Math.min(I.z,1);let w=e._passes[a],M=w.camera;M.clone(n);let B=M.frustum;B.left=y+G.x*(x-y),B.right=y+I.x*(x-y),B.bottom=S+G.y*(C-S),B.top=S+I.y*(C-S),B.near=V+G.z*(L-V),B.far=V+I.z*(L-V),w.cullingVolume=M.frustum.computeCullingVolume(Z,E,P);let k=e._cascadeMatrices[a];F.multiply(M.getViewProjection(),i.inverseViewMatrix,k),F.multiply(w.textureOffsets,k,k)}}var Xht=new F,Wht=new m,Pht=new m,wxe=new m;function vht(e,t){let n=e._shadowMapCamera,i=e._sceneCamera,o=F.multiply(i.frustum.projectionMatrix,i.viewMatrix,Xy),r=F.inverse(o,Xy),s=n.directionWC,a=i.directionWC;m.equalsEpsilon(s,a,X.EPSILON10)&&(a=i.upWC);let c=m.cross(s,a,Wht);a=m.cross(c,s,Pht),m.normalize(a,a),m.normalize(c,c);let d=m.fromElements(0,0,0,wxe),u=F.computeView(d,s,a,c,Xht),h=F.multiply(u,r,Xy),p=m.fromElements(Number.MAX_VALUE,Number.MAX_VALUE,Number.MAX_VALUE,Nxe),g=m.fromElements(-Number.MAX_VALUE,-Number.MAX_VALUE,-Number.MAX_VALUE,kxe);for(let L=0;L<8;++L){let Z=se.clone(lp[L],Oj[L]);F.multiplyByVector(h,Z,Z),m.divideByScalar(Z,Z.w,Z),m.minimumByComponent(Z,p,p),m.maximumByComponent(Z,g,g)}g.z+=1e3,p.z-=10;let f=wxe;f.x=-(.5*(p.x+g.x)),f.y=-(.5*(p.y+g.y)),f.z=-g.z;let y=F.fromTranslation(f,Xy);u=F.multiply(y,u,u);let x=.5*(g.x-p.x),S=.5*(g.y-p.y),C=g.z-p.z,V=n.frustum;V.left=-x,V.right=x,V.bottom=-S,V.top=S,V.near=.01,V.far=C,F.clone(u,n.viewMatrix),F.inverse(u,n.inverseViewMatrix),F.getTranslation(n.inverseViewMatrix,n.positionWC),t.mapProjection.ellipsoid.cartesianToCartographic(n.positionWC,n.positionCartographic),m.clone(s,n.directionWC),m.clone(a,n.upWC),m.clone(c,n.rightWC)}var wht=[new m(-1,0,0),new m(0,-1,0),new m(0,0,-1),new m(1,0,0),new m(0,1,0),new m(0,0,1)],Fht=[new m(0,-1,0),new m(0,0,-1),new m(0,-1,0),new m(0,-1,0),new m(0,0,1),new m(0,-1,0)],Aht=[new m(0,0,1),new m(1,0,0),new m(-1,0,0),new m(0,0,-1),new m(1,0,0),new m(1,0,0)];function Mht(e,t){let n=new Gi;n.fov=X.PI_OVER_TWO,n.near=1,n.far=e._pointLightRadius,n.aspectRatio=1;for(let i=0;i<6;++i){let o=e._passes[i].camera;o.positionWC=e._shadowMapCamera.positionWC,o.positionCartographic=t.mapProjection.ellipsoid.cartesianToCartographic(o.positionWC,o.positionCartographic),o.directionWC=wht[i],o.upWC=Fht[i],o.rightWC=Aht[i],F.computeView(o.positionWC,o.directionWC,o.upWC,o.rightWC,o.viewMatrix),F.inverse(o.viewMatrix,o.inverseViewMatrix),o.frustum=n}}var Nht=new m,kht=new m,Uxe=new le,Fxe=Uxe.center;function Uht(e,t){let n=e._sceneCamera,i=e._shadowMapCamera,o=Uxe;if(e._cascadesEnabled){if(n.frustum.near>=e.maximumDistance){e._outOfView=!0,e._needsUpdate=!1;return}let r=t.mapProjection.ellipsoid.geodeticSurfaceNormal(n.positionWC,Nht),s=m.negate(i.directionWC,kht),a=m.dot(r,s);if(e.fadingEnabled){let c=X.clamp(a/.1,0,1);e._darkness=X.lerp(1,e.darkness,c)}else e._darkness=e.darkness;if(a<0){e._outOfView=!0,e._needsUpdate=!1;return}e._needsUpdate=!0,e._outOfView=!1}else if(e._isPointLight)o.center=i.positionWC,o.radius=e._pointLightRadius,e._outOfView=t.cullingVolume.computeVisibility(o)===zt.OUTSIDE,e._needsUpdate=!e._outOfView&&!e._boundingSphere.equals(o),le.clone(o,e._boundingSphere);else{let r=i.frustum.far/2,s=m.add(i.positionWC,m.multiplyByScalar(i.directionWC,r,Fxe),Fxe);o.center=s,o.radius=r,e._outOfView=t.cullingVolume.computeVisibility(o)===zt.OUTSIDE,e._needsUpdate=!e._outOfView&&!e._boundingSphere.equals(o),le.clone(o,e._boundingSphere)}}function Dht(e,t){let n=t.camera,i=e._lightCamera,o=e._sceneCamera,r=e._shadowMapCamera;e._cascadesEnabled?m.clone(i.directionWC,r.directionWC):e._isPointLight?m.clone(i.positionWC,r.positionWC):r.clone(i);let s=e._lightDirectionEC;F.multiplyByPointAsVector(n.viewMatrix,r.directionWC,s),m.normalize(s,s),m.negate(s,s),F.multiplyByPoint(n.viewMatrix,r.positionWC,e._lightPositionEC),e._lightPositionEC.w=e._pointLightRadius;let a,c;e._fitNearFar?(a=Math.min(t.shadowState.nearPlane,e.maximumDistance),c=Math.min(t.shadowState.farPlane,e.maximumDistance),c=Math.max(c,a+1)):(a=n.frustum.near,c=e.maximumDistance),e._sceneCamera=ro.clone(n,o),n.frustum.clone(e._sceneCamera.frustum),e._sceneCamera.frustum.near=a,e._sceneCamera.frustum.far=c,e._distance=c-a,Uht(e,t),!e._outOfViewPrevious&&e._outOfView&&(e._needsUpdate=!0),e._outOfViewPrevious=e._outOfView}cp.prototype.update=function(e){if(Dht(this,e),this._needsUpdate)if(ght(this,e.context),this._isPointLight&&Mht(this,e),this._cascadesEnabled&&(vht(this,e),this._numberOfCascades>1&&Iht(this,e)),this._isPointLight)this._shadowMapCullingVolume=hs.fromBoundingSphere(this._boundingSphere);else{let t=this._shadowMapCamera,n=t.positionWC,i=t.directionWC,o=t.upWC;this._shadowMapCullingVolume=t.frustum.computeCullingVolume(n,i,o),this._passes.length===1&&this._passes[0].camera.clone(t)}if(this._passes.length===1){let t=this._sceneCamera.inverseViewMatrix;F.multiply(this._shadowMapCamera.getViewProjection(),t,this._shadowMapMatrix)}this.debugShow&&Lht(this,e)};cp.prototype.updatePass=function(e,t){Mxe(this,e,t)};var Bht=new U;function Dxe(e,t,n){let i=e._isPointLight?e._pointBias:n?e._terrainBias:e._primitiveBias,o={shadowMap_texture:function(){return e._shadowMapTexture},shadowMap_textureCube:function(){return e._shadowMapTexture},shadowMap_matrix:function(){return e._shadowMapMatrix},shadowMap_cascadeSplits:function(){return e._cascadeSplits},shadowMap_cascadeMatrices:function(){return e._cascadeMatrices},shadowMap_lightDirectionEC:function(){return e._lightDirectionEC},shadowMap_lightPositionEC:function(){return e._lightPositionEC},shadowMap_cascadeDistances:function(){return e._cascadeDistances},shadowMap_texelSizeDepthBiasAndNormalShadingSmooth:function(){let r=Bht;return r.x=1/e._textureSize.x,r.y=1/e._textureSize.y,se.fromElements(r.x,r.y,i.depthBias,i.normalShadingSmooth,this.combinedUniforms1)},shadowMap_normalOffsetScaleDistanceMaxDistanceAndDarkness:function(){return se.fromElements(i.normalOffsetScale,e._distance,e.maximumDistance,e._darkness,this.combinedUniforms2)},combinedUniforms1:new se,combinedUniforms2:new se};return St(t,o,!1)}function Oht(e,t,n,i,o,r){let s,a,c;if(l(r)&&(s=r.shaderProgram,a=r.renderState,c=r.uniformMap),r=$e.shallowClone(n,r),r.castShadows=!0,r.receiveShadows=!1,!l(s)||o!==n.shaderProgram.id||t){let d=n.shaderProgram,u=n.pass===Ee.GLOBE,h=n.pass!==Ee.TRANSLUCENT,p=e._isPointLight,g=e._usesDepthTexture,f=ap.getShadowCastShaderKeyword(p,u,g,h);if(s=i.shaderCache.getDerivedShaderProgram(d,f),!l(s)){let x=d.vertexShaderSource,S=d.fragmentShaderSource,C=ap.createShadowCastVertexShader(x,p,u),V=ap.createShadowCastFragmentShader(S,p,g,h);s=i.shaderCache.createDerivedShaderProgram(d,f,{vertexShaderSource:C,fragmentShaderSource:V,attributeLocations:d._attributeLocations})}a=e._primitiveRenderState,p?a=e._pointRenderState:u&&(a=e._terrainRenderState),n.renderState.cull.enabled||(a=Ye(a,!1),a.cull=Ye(a.cull,!1),a.cull.enabled=!1,a=Ue.fromCache(a)),c=Dxe(e,n.uniformMap,u)}return r.shaderProgram=s,r.renderState=a,r.uniformMap=c,r}cp.createReceiveDerivedCommand=function(e,t,n,i,o){l(o)||(o={});let r=e.length>0,s=t.shaderProgram,a=s.vertexShaderSource,c=s.fragmentShaderSource,d=t.pass===Ee.GLOBE,u=!1;if(d&&(u=t.owner.data.renderedMesh.encoding.hasVertexNormals),t.receiveShadows&&r){let h,p;l(o.receiveCommand)&&(h=o.receiveCommand.shaderProgram,p=o.receiveCommand.uniformMap),o.receiveCommand=$e.shallowClone(t,o.receiveCommand),o.castShadows=!1,o.receiveShadows=!0;let g=o.receiveShaderCastShadows!==t.castShadows,f=o.receiveShaderProgramId!==t.shaderProgram.id;if(!l(h)||f||n||g){let y=ap.getShadowReceiveShaderKeyword(e[0],t.castShadows,d,u);if(h=i.shaderCache.getDerivedShaderProgram(s,y),!l(h)){let x=ap.createShadowReceiveVertexShader(a,d,u),S=ap.createShadowReceiveFragmentShader(c,e[0],t.castShadows,d,u);h=i.shaderCache.createDerivedShaderProgram(s,y,{vertexShaderSource:x,fragmentShaderSource:S,attributeLocations:s._attributeLocations})}p=Dxe(e[0],t.uniformMap,d)}o.receiveCommand.shaderProgram=h,o.receiveCommand.uniformMap=p,o.receiveShaderProgramId=t.shaderProgram.id,o.receiveShaderCastShadows=t.castShadows}return o};cp.createCastDerivedCommand=function(e,t,n,i,o){if(l(o)||(o={}),t.castShadows){let r=o.castCommands;l(r)||(r=o.castCommands=[]);let s=o.castShaderProgramId,a=e.length;r.length=a;for(let c=0;c<a;++c)r[c]=Oht(e[c],n,t,i,s,r[c]);o.castShaderProgramId=t.shaderProgram.id}return o};cp.prototype.isDestroyed=function(){return!1};cp.prototype.destroy=function(){Bj(this),this._debugLightFrustum=this._debugLightFrustum&&this._debugLightFrustum.destroy(),this._debugCameraFrustum=this._debugCameraFrustum&&this._debugCameraFrustum.destroy(),this._debugShadowViewCommand=this._debugShadowViewCommand&&this._debugShadowViewCommand.shaderProgram&&this._debugShadowViewCommand.shaderProgram.destroy();for(let e=0;e<this._numberOfCascades;++e)this._debugCascadeFrustums[e]=this._debugCascadeFrustums[e]&&this._debugCascadeFrustums[e].destroy();return me(this)};var y0=cp;var vwi=_(T(),1);var uwi=_(T(),1),MF=`uniform sampler2D u_opaqueDepthTexture; uniform sampler2D u_translucentDepthTexture; in vec2 v_textureCoordinates; void main() { float opaqueDepth = texture(u_opaqueDepthTexture, v_textureCoordinates).r; float translucentDepth = texture(u_translucentDepthTexture, v_textureCoordinates).r; translucentDepth = czm_branchFreeTernary(translucentDepth > opaqueDepth, 1.0, translucentDepth); out_FragColor = czm_packDepth(translucentDepth); } `;var hwi=_(T(),1),HT=`uniform sampler2D colorTexture; #ifdef DEBUG_SHOW_DEPTH uniform sampler2D u_packedTranslucentDepth; #endif in vec2 v_textureCoordinates; void main() { #ifdef DEBUG_SHOW_DEPTH if (v_textureCoordinates.x < 0.5) { out_FragColor.rgb = vec3(czm_unpackDepth(texture(u_packedTranslucentDepth, v_textureCoordinates))); out_FragColor.a = 1.0; } #else vec4 color = texture(colorTexture, v_textureCoordinates); #ifdef PICK if (color == vec4(0.0)) { discard; } #else // Reverse premultiplication process to get the correct composited result of the classification primitives color.rgb /= color.a; #endif out_FragColor = color; #endif } `;var Yht=!1;function Wy(e){this._drawClassificationFBO=new fi({createDepthAttachments:!1}),this._accumulationFBO=new fi({createDepthAttachments:!1}),this._packFBO=new fi,this._opaqueDepthStencilTexture=void 0,this._textureToComposite=void 0,this._translucentDepthStencilTexture=void 0,this._packDepthCommand=void 0,this._accumulateCommand=void 0,this._compositeCommand=void 0,this._copyCommand=void 0,this._clearColorCommand=new ti({color:new D(0,0,0,0),owner:this}),this._clearDepthStencilCommand=new ti({depth:1,stencil:0,owner:this}),this._supported=e.depthTexture,this._viewport=new Ke,this._rsDepth=void 0,this._rsAccumulate=void 0,this._rsComp=void 0,this._useScissorTest=void 0,this._scissorRectangle=void 0,this._hasTranslucentDepth=!1,this._frustumsDrawn=0}Object.defineProperties(Wy.prototype,{hasTranslucentDepth:{get:function(){return this._hasTranslucentDepth}}});function Bxe(e){e._textureToComposite=void 0,e._translucentDepthStencilTexture=e._translucentDepthStencilTexture&&!e._translucentDepthStencilTexture.isDestroyed()&&e._translucentDepthStencilTexture.destroy()}function Oxe(e){e._drawClassificationFBO.destroy(),e._accumulationFBO.destroy(),e._packFBO.destroy()}function zht(e,t,n,i){Bxe(e),e._translucentDepthStencilTexture=new vt({context:t,width:n,height:i,pixelFormat:it.DEPTH_STENCIL,pixelDatatype:je.UNSIGNED_INT_24_8,sampler:qt.NEAREST})}function Hht(e,t,n,i){Oxe(e),e._drawClassificationFBO.setDepthStencilTexture(e._translucentDepthStencilTexture),e._drawClassificationFBO.update(t,n,i),e._accumulationFBO.setDepthStencilTexture(e._translucentDepthStencilTexture),e._accumulationFBO.update(t,n,i),e._packFBO.update(t,n,i)}function Kht(e,t,n,i){if(!e.isSupported())return;e._opaqueDepthStencilTexture=i;let o=e._opaqueDepthStencilTexture.width,r=e._opaqueDepthStencilTexture.height;e._drawClassificationFBO.isDirty(o,r)&&(zht(e,t,o,r),Hht(e,t,o,r));let s,a;if(l(e._packDepthCommand)||(s=new De({sources:[MF]}),a={u_opaqueDepthTexture:function(){return e._opaqueDepthStencilTexture},u_translucentDepthTexture:function(){return e._translucentDepthStencilTexture}},e._packDepthCommand=t.createViewportQuadCommand(s,{uniformMap:a,owner:e})),!l(e._compositeCommand)){s=new De({sources:[HT]}),a={colorTexture:function(){return e._textureToComposite}},Yht&&(s.defines=["DEBUG_SHOW_DEPTH"],a.u_packedTranslucentDepth=function(){return e._packFBO.getColorTexture()}),e._compositeCommand=t.createViewportQuadCommand(s,{uniformMap:a,owner:e});let u=e._compositeCommand,h=u.shaderProgram,p=t.shaderCache.createDerivedShaderProgram(h,"pick",{vertexShaderSource:h.vertexShaderSource,fragmentShaderSource:new De({sources:s.sources,defines:["PICK"]}),attributeLocations:h._attributeLocations}),g=$e.shallowClone(u);g.shaderProgram=p,u.derivedCommands.pick=g}l(e._copyCommand)||(s=new De({sources:[HT]}),a={colorTexture:function(){return e._drawClassificationFBO.getColorTexture()}},e._copyCommand=t.createViewportQuadCommand(s,{uniformMap:a,owner:e})),l(e._accumulateCommand)||(s=new De({sources:[HT]}),a={colorTexture:function(){return e._drawClassificationFBO.getColorTexture()}},e._accumulateCommand=t.createViewportQuadCommand(s,{uniformMap:a,owner:e})),e._viewport.width=o,e._viewport.height=r;let c=!Ke.equals(e._viewport,n.viewport),d=c!==e._useScissorTest;e._useScissorTest=c,Ke.equals(e._scissorRectangle,n.viewport)||(e._scissorRectangle=Ke.clone(n.viewport,e._scissorRectangle),d=!0),(!l(e._rsDepth)||!Ke.equals(e._viewport,e._rsDepth.viewport)||d)&&(e._rsDepth=Ue.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle}})),l(e._packDepthCommand)&&(e._packDepthCommand.renderState=e._rsDepth),(!l(e._rsAccumulate)||!Ke.equals(e._viewport,e._rsAccumulate.viewport)||d)&&(e._rsAccumulate=Ue.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle},stencilTest:{enabled:!0,frontFunction:Dn.EQUAL,reference:Ut.CESIUM_3D_TILE_MASK}})),l(e._accumulateCommand)&&(e._accumulateCommand.renderState=e._rsAccumulate),(!l(e._rsComp)||!Ke.equals(e._viewport,e._rsComp.viewport)||d)&&(e._rsComp=Ue.fromCache({viewport:e._viewport,scissorTest:{enabled:e._useScissorTest,rectangle:e._scissorRectangle},blending:un.ALPHA_BLEND})),l(e._compositeCommand)&&(e._compositeCommand.renderState=e._rsComp,e._compositeCommand.derivedCommands.pick.renderState=e._rsComp)}Wy.prototype.executeTranslucentCommands=function(e,t,n,i,o){let r=e.frameState.useLogDepth,s=e.context,a=n.framebuffer;for(let c=0;c<i.length;++c){let d=i[c];if(d=r?d.derivedCommands.logDepth.command:d,d.depthForTranslucentClassification){this._hasTranslucentDepth=!0;break}}if(this._hasTranslucentDepth){Kht(this,s,n,o),n.framebuffer=this._drawClassificationFBO.framebuffer,this._clearDepthStencilCommand.execute(s,n);for(let c=0;c<i.length;++c){let d=i[c];if(d=r?d.derivedCommands.logDepth.command:d,!d.depthForTranslucentClassification)continue;let u=d.derivedCommands.depth.depthOnlyCommand;t(u,e,n)}this._frustumsDrawn+=this._hasTranslucentDepth?1:0,this._hasTranslucentDepth&&(n.framebuffer=this._packFBO.framebuffer,this._packDepthCommand.execute(s,n)),n.framebuffer=a}};Wy.prototype.executeClassificationCommands=function(e,t,n,i){if(!this._hasTranslucentDepth)return;let o=e.context,r=o.uniformState,s=n.framebuffer;n.framebuffer=this._accumulationFBO.framebuffer,this._accumulateCommand.execute(o,n),n.framebuffer=this._drawClassificationFBO.framebuffer,this._frustumsDrawn>1&&this._clearColorCommand.execute(o,n),r.updatePass(Ee.CESIUM_3D_TILE_CLASSIFICATION);let a=r.globeDepthTexture;r.globeDepthTexture=this._packFBO.getColorTexture();let c=i.commands[Ee.CESIUM_3D_TILE_CLASSIFICATION],d=i.indices[Ee.CESIUM_3D_TILE_CLASSIFICATION];for(let u=0;u<d;++u)t(c[u],e,n);r.globeDepthTexture=a,n.framebuffer=s,this._frustumsDrawn!==1&&(n.framebuffer=this._accumulationFBO.framebuffer,this._accumulateCommand.execute(o,n),n.framebuffer=s)};Wy.prototype.execute=function(e,t){if(!this._hasTranslucentDepth)return;this._frustumsDrawn===1?this._textureToComposite=this._drawClassificationFBO.getColorTexture():this._textureToComposite=this._accumulationFBO.getColorTexture(),(e.frameState.passes.pick?this._compositeCommand.derivedCommands.pick:this._compositeCommand).execute(e.context,t),Jht(this,e,t)};function Jht(e,t,n){if(!e._hasTranslucentDepth)return;let i=n.framebuffer;n.framebuffer=e._drawClassificationFBO.framebuffer,e._clearColorCommand.execute(t._context,n),n.framebuffer=i,e._frustumsDrawn>1&&(n.framebuffer=e._accumulationFBO.framebuffer,e._clearColorCommand.execute(t._context,n)),e._hasTranslucentDepth=!1,e._frustumsDrawn=0}Wy.prototype.isSupported=function(){return this._supported};Wy.prototype.isDestroyed=function(){return!1};Wy.prototype.destroy=function(){return Bxe(this),Oxe(this),l(this._compositeCommand)&&(this._compositeCommand.shaderProgram=this._compositeCommand.shaderProgram&&this._compositeCommand.shaderProgram.destroy()),l(this._packDepthCommand)&&(this._packDepthCommand.shaderProgram=this._packDepthCommand.shaderProgram&&this._packDepthCommand.shaderProgram.destroy()),me(this)};var NF=Wy;function Qht(){this.command=void 0,this.near=void 0,this.far=void 0}function x3(e,t,n){let i=e.context,o;i.depthTexture&&(o=new IF);let r;e._useOIT&&i.depthTexture&&(r=new PF(i));let s=new sc(i);s.viewport=Ke.clone(n),this.camera=t,this._cameraClone=ro.clone(t),this._cameraStartFired=!1,this._cameraMovedTime=void 0,this.viewport=n,this.passState=s,this.pickFramebuffer=new AF(i),this.pickDepthFramebuffer=new wF,this.sceneFramebuffer=new YT,this.globeDepth=o,this.globeTranslucencyFramebuffer=new XF,this.oit=r,this.translucentTileClassification=new NF(i),this.pickDepths=[],this.frustumCommandsList=[],this.debugFrustumStatistics=void 0,this._commandExtents=[]}var Yj=new m,zj=new m;function jht(e,t,n){let i=Math.max(m.maximumComponent(m.abs(e.position,Yj)),m.maximumComponent(m.abs(t.position,zj))),o=1/Math.max(1,i);return m.multiplyByScalar(e.position,o,Yj),m.multiplyByScalar(t.position,o,zj),m.equalsEpsilon(Yj,zj,n)&&m.equalsEpsilon(e.direction,t.direction,n)&&m.equalsEpsilon(e.up,t.up,n)&&m.equalsEpsilon(e.right,t.right,n)&&F.equalsEpsilon(e.transform,t.transform,n)&&e.frustum.equalsEpsilon(t.frustum,n)}x3.prototype.checkForCameraUpdates=function(e){let t=this.camera,n=this._cameraClone;return jht(t,n,X.EPSILON15)?(this._cameraStartFired&&Si()-this._cameraMovedTime>e.cameraEventWaitTime&&(t.moveEnd.raiseEvent(),this._cameraStartFired=!1),!1):(this._cameraStartFired||(t.moveStart.raiseEvent(),this._cameraStartFired=!0),this._cameraMovedTime=Si(),ro.clone(t,n),!0)};function qht(e,t,n,i){let{frameState:o}=t,{camera:r,useLogDepth:s}=o,a=s?t.logarithmicDepthFarToNearRatio:t.farToNearRatio,c=t.mode===oe.SCENE2D,d=t.nearToFarDistance2D;i*=1+X.EPSILON2,n=Math.min(Math.max(n,r.frustum.near),r.frustum.far),i=Math.max(Math.min(i,r.frustum.far),n);let u;c?(i=Math.min(i,r.position.z+t.nearToFarDistance2D),n=Math.min(n,i),u=Math.ceil(Math.max(1,i-n)/t.nearToFarDistance2D)):u=Math.ceil(Math.log(i/n)/Math.log(a));let{frustumCommandsList:h}=e;h.length=u;for(let p=0;p<u;++p){let g,f;c?(g=Math.min(i-d,n+p*d),f=Math.min(i,g+d)):(g=Math.max(n,Math.pow(a,p)*n),f=Math.min(i,a*g));let y=h[p];l(y)?(y.near=g,y.far=f):y=h[p]=new EF(g,f)}}function $ht(e,t,n){let{command:i,near:o,far:r}=n;t.debugShowFrustums&&(i.debugOverlappingFrustums=0);let{frustumCommandsList:s}=e;for(let a=0;a<s.length;++a){let c=s[a];if(o>c.far)continue;if(r<c.near)break;let d=i.pass,u=c.indices[d]++;if(c.commands[d][u]=i,t.debugShowFrustums&&(i.debugOverlappingFrustums|=1<<a),i.executeInClosestFrustum)break}if(t.debugShowFrustums){let{debugFrustumStatistics:a}=e,{debugOverlappingFrustums:c}=i,d=a.commandsInFrustums;d[c]=l(d[c])?d[c]+1:1,++a.totalCommands}t.updateDerivedCommands(i)}var Yxe=new hs,eft=new Xa;x3.prototype.createPotentiallyVisibleSet=function(e){let{frameState:t}=e,{camera:n,commandList:i,shadowState:o}=t,{positionWC:r,directionWC:s,frustum:a}=n,c=e._computeCommandList,d=e._overlayCommandList;e.debugShowFrustums&&(this.debugFrustumStatistics={totalCommands:0,commandsInFrustums:{}});let u=this.frustumCommandsList;for(let v=0;v<u.length;++v)for(let A=0;A<Ee.NUMBER_OF_PASSES;++A)u[v].indices[A]=0;c.length=0,d.length=0;let h=this._commandExtents,p=h.length,g=0,f=+Number.MAX_VALUE,y=-Number.MAX_VALUE,{shadowsEnabled:x}=o,S=+Number.MAX_VALUE,C=-Number.MAX_VALUE,V=Number.MAX_VALUE,L=t.mode===oe.SCENE3D?t.occluder:void 0,{cullingVolume:Z}=t,E=Yxe.planes;for(let v=0;v<5;++v)E[v]=Z.planes[v];Z=Yxe;for(let v=0;v<i.length;++v){let A=i[v],{pass:b,boundingVolume:R}=A;if(b===Ee.COMPUTE)c.push(A);else if(b===Ee.OVERLAY)d.push(A);else{let G,I;if(l(R)){if(!e.isVisible(Z,A,L))continue;let M=R.computePlaneDistances(r,s,eft);if(G=M.start,I=M.stop,f=Math.min(f,G),y=Math.max(y,I),x&&A.receiveShadows&&G<y0.MAXIMUM_DISTANCE&&!(b===Ee.GLOBE&&G<-100&&I>100)){let B=I-G;b!==Ee.GLOBE&&G<100&&(V=Math.min(V,B)),S=Math.min(S,G),C=Math.max(C,I)}}else A instanceof ti?(G=a.near,I=a.far):(G=a.near,I=a.far,f=Math.min(f,G),y=Math.max(y,I));let w=h[g];l(w)||(w=h[g]=new Qht),w.command=A,w.near=G,w.far=I,g++}}x&&(S=Math.min(Math.max(S,a.near),a.far),C=Math.max(Math.min(C,a.far),S),o.nearPlane=S,o.farPlane=C,o.closestObjectSize=V),qht(this,e,f,y);for(let v=0;v<g;v++)$ht(this,e,h[v]);if(g<p)for(let v=g;v<p;v++){let A=h[v];if(!l(A.command))break;A.command=void 0}let P=u.length,{frustumSplits:W}=t;W.length=P+1;for(let v=0;v<P;++v)W[v]=u[v].near,v===P-1&&(W[v+1]=u[v].far)};x3.prototype.destroy=function(){this.pickFramebuffer=this.pickFramebuffer&&this.pickFramebuffer.destroy(),this.pickDepthFramebuffer=this.pickDepthFramebuffer&&this.pickDepthFramebuffer.destroy(),this.sceneFramebuffer=this.sceneFramebuffer&&this.sceneFramebuffer.destroy(),this.globeDepth=this.globeDepth&&this.globeDepth.destroy(),this.oit=this.oit&&this.oit.destroy(),this.translucentTileClassification=this.translucentTileClassification&&this.translucentTileClassification.destroy(),this.globeTranslucencyFramebuffer=this.globeTranslucencyFramebuffer&&this.globeTranslucencyFramebuffer.destroy();let e=this.pickDepths;for(let t=0;t<e.length;++t)e[t].destroy()};var KT=x3;var Hxe=.1,tft=new pm({pass:wo.MOST_DETAILED_PRELOAD}),nft=new pm({pass:wo.MOST_DETAILED_PICK}),kF=new pm({pass:wo.PICK});function oa(e){this._mostDetailedRayPicks=[],this.pickRenderStateCache={},this._pickPositionCache={},this._pickPositionCacheDirty=!1;let t=new Ke(0,0,1,1),n=new ro(e);n.frustum=new an({width:Hxe,aspectRatio:1,near:.1}),this._pickOffscreenView=new KT(e,n,t)}oa.prototype.update=function(){this._pickPositionCacheDirty=!0};oa.prototype.getPickDepth=function(e,t){let n=e.view.pickDepths,i=n[t];return l(i)||(i=new GF,n[t]=i),i};var ift=new Pr,oft=new m,_3=new m,rft=new U,sft=new F;function aft(e,t,n,i,o){let r=e.camera,s=r.frustum,a=s.offCenterFrustum;l(a)&&(s=a);let c=2*(t.x-o.x)/o.width-1;c*=(s.right-s.left)*.5;let d=2*(o.height-t.y-o.y)/o.height-1;d*=(s.top-s.bottom)*.5;let u=F.clone(r.transform,sft);r._setTransform(F.IDENTITY);let h=m.clone(r.position,oft);m.multiplyByScalar(r.right,c,_3),m.add(_3,h,h),m.multiplyByScalar(r.up,d,_3),m.add(_3,h,h),r._setTransform(u),e.mode===oe.SCENE2D&&m.fromElements(h.z,h.x,h.y,h);let p=s.getPixelDimensions(o.width,o.height,1,1,rft),g=ift;return g.right=p.x*.5,g.left=-g.right,g.top=p.y*.5,g.bottom=-g.top,g.near=s.near,g.far=s.far,g.computeCullingVolume(h,r.directionWC,r.upWC)}var cft=new bl,lft=new U;function dft(e,t,n,i,o){let r=e.camera,s=r.frustum,a=s.near,c=Math.tan(s.fovy*.5),d=s.aspectRatio*c,u=2*(t.x-o.x)/o.width-1,h=2*(o.height-t.y-o.y)/o.height-1,p=u*a*d,g=h*a*c,f=s.getPixelDimensions(o.width,o.height,1,1,lft),y=f.x*n*.5,x=f.y*i*.5,S=cft;return S.top=g+x,S.bottom=g-x,S.right=p+y,S.left=p-y,S.near=a,S.far=s.far,S.computeCullingVolume(r.positionWC,r.directionWC,r.upWC)}function T3(e,t,n,i,o){let r=e.camera.frustum;return r instanceof an||r instanceof Pr?aft(e,t,n,i,o):dft(e,t,n,i,o)}var S3=new Ke(0,0,3,3),C3=new U,UF=new D(0,0,0,0);function Hj(e,t,n,i,o){return o.width=n??3,o.height=i??o.width,o.x=t.x-(o.width-1)*.5,o.y=e-t.y-(o.height-1)*.5,o}oa.prototype.pick=function(e,t,n,i){let{context:o,frameState:r,defaultView:s}=e,{viewport:a,pickFramebuffer:c}=s;e.view=s,a.x=0,a.y=0,a.width=o.drawingBufferWidth,a.height=o.drawingBufferHeight;let d=s.passState;d.viewport=Ke.clone(a,d.viewport);let u=Ui.transformWindowToDrawingBuffer(e,t,C3),h=Hj(o.drawingBufferHeight,u,n,i,S3);e.jobScheduler.disableThisFrame(),e.updateFrameState(),r.cullingVolume=T3(e,u,h.width,h.height,a),r.invertClassification=!1,r.passes.pick=!0,r.tilesetPassState=kF,o.uniformState.update(r),e.updateEnvironment(),d=c.begin(h,a),e.updateAndExecuteCommands(d,UF),e.resolveFramebuffers(d);let p=c.end(h);return o.endFrame(),p};oa.prototype.pickVoxelCoordinate=function(e,t,n,i){let{context:o,frameState:r,defaultView:s}=e,{viewport:a,pickFramebuffer:c}=s;e.view=s,a.x=0,a.y=0,a.width=o.drawingBufferWidth,a.height=o.drawingBufferHeight;let d=s.passState;d.viewport=Ke.clone(a,d.viewport);let u=Ui.transformWindowToDrawingBuffer(e,t,C3),h=Hj(o.drawingBufferHeight,u,n,i,S3);e.jobScheduler.disableThisFrame(),e.updateFrameState(),r.cullingVolume=T3(e,u,h.width,h.height,a),r.invertClassification=!1,r.passes.pickVoxel=!0,r.tilesetPassState=kF,o.uniformState.update(r),e.updateEnvironment(),d=c.begin(h,a),e.updateAndExecuteCommands(d,UF),e.resolveFramebuffers(d);let p=c.readCenterPixel(h);return o.endFrame(),p};oa.prototype.pickMetadata=function(e,t,n){let{context:i,frameState:o,defaultView:r}=e,{viewport:s,pickFramebuffer:a}=r;e.view=r,s.x=0,s.y=0,s.width=i.drawingBufferWidth,s.height=i.drawingBufferHeight;let c=r.passState;c.viewport=Ke.clone(s,c.viewport);let d=Ui.transformWindowToDrawingBuffer(e,t,C3),u=Hj(i.drawingBufferHeight,d,1,1,S3);e.jobScheduler.disableThisFrame(),e.updateFrameState(),o.cullingVolume=T3(e,d,u.width,u.height,s),o.invertClassification=!1,o.passes.pick=!0,o.tilesetPassState=kF,o.pickingMetadata=!0,o.pickedMetadataInfo=n,i.uniformState.update(o),e.updateEnvironment(),c=a.begin(u,s),e.updateAndExecuteCommands(c,UF);let h=e._environmentState.useOIT;e._environmentState.useOIT=!1,e.resolveFramebuffers(c),e._environmentState.useOIT=h;let p=a.readCenterPixel(u);return i.endFrame(),o.pickingMetadata=!1,ZF.decodeMetadataValues(n.classProperty,n.metadataProperty,p)};function uft(e,t){let{defaultView:n,context:i,frameState:o,environmentState:r}=e,{viewport:s,pickDepthFramebuffer:a}=n;e.view=n,s.x=0,s.y=0,s.width=i.drawingBufferWidth,s.height=i.drawingBufferHeight;let c=n.passState;c.viewport=Ke.clone(s,c.viewport),e.clearPasses(o.passes),o.passes.pick=!0,o.passes.depth=!0,o.cullingVolume=T3(e,t,1,1,s),o.tilesetPassState=kF,e.updateEnvironment(),r.renderTranslucentDepthForPick=!0,c=a.update(i,t,s),e.updateAndExecuteCommands(c,UF),e.resolveFramebuffers(c),i.endFrame()}var mft=new Gi,hft=new bl,fft=new an,pft=new Pr;oa.prototype.pickPositionWorldCoordinates=function(e,t,n){if(!e.useDepthPicking)return;let i=t.toString();if(this._pickPositionCacheDirty)this._pickPositionCache={},this._pickPositionCacheDirty=!1;else if(this._pickPositionCache.hasOwnProperty(i))return m.clone(this._pickPositionCache[i],n);let{context:o,frameState:r,camera:s,defaultView:a}=e,{uniformState:c}=o;e.view=a;let d=Ui.transformWindowToDrawingBuffer(e,t,C3);e.pickTranslucentDepth?uft(e,d):(e.updateFrameState(),c.update(r),e.updateEnvironment()),d.y=e.drawingBufferHeight-d.y;let u;l(s.frustum.fov)?u=s.frustum.clone(mft):l(s.frustum.infiniteProjectionMatrix)?u=s.frustum.clone(hft):l(s.frustum.width)?u=s.frustum.clone(fft):u=s.frustum.clone(pft);let{frustumCommandsList:h}=a,p=h.length;for(let g=0;g<p;++g){let y=this.getPickDepth(e,g).getDepth(o,d.x,d.y);if(l(y)&&y>0&&y<1){let x=h[g],S;return e.mode===oe.SCENE2D?(S=s.position.z,s.position.z=S-x.near+1,u.far=Math.max(1,x.far-x.near),u.near=1,c.update(r),c.updateFrustum(u)):(u.near=x.near*(g!==0?e.opaqueFrustumNearOffset:1),u.far=x.far,c.updateFrustum(u)),n=Ui.drawingBufferToWorldCoordinates(e,d,y,n),e.mode===oe.SCENE2D&&(s.position.z=S,c.update(r)),this._pickPositionCache[i]=m.clone(n),n}}this._pickPositionCache[i]=void 0};var bft=new he;oa.prototype.pickPosition=function(e,t,n){if(n=this.pickPositionWorldCoordinates(e,t,n),l(n)&&e.mode!==oe.SCENE3D){m.fromElements(n.y,n.z,n.x,n);let i=e.mapProjection,o=i.ellipsoid,r=i.unproject(n,bft);o.cartographicToCartesian(r,n)}return n};function Kxe(e,t){let n,i,o=[],r=[],s=[],a=[];l(e)||(e=Number.MAX_VALUE);let c=t();for(;l(c);){let d=c.object,u=c.position,h=c.exclude;if(l(u)&&!l(d)){o.push(c);break}if(!l(d)||!l(d.primitive)||!h&&(o.push(c),0>=--e))break;let p=d.primitive,g=!1;typeof p.getGeometryInstanceAttributes=="function"&&l(d.id)&&(i=p.getGeometryInstanceAttributes(d.id),l(i)&&l(i.show)&&(g=!0,i.show=xn.toValue(!1,i.show),s.push(i))),d instanceof Bs&&(g=!0,d.show=!1,a.push(d)),g||(p.show=!1,r.push(p)),c=t()}for(n=0;n<r.length;++n)r[n].show=!0;for(n=0;n<s.length;++n)i=s[n],i.show=xn.toValue(!0,i.show);for(n=0;n<a.length;++n)a[n].show=!0;return o}oa.prototype.drillPick=function(e,t,n,i,o){let r=this;return Kxe(n,function(){let c=r.pick(e,t,i,o);if(l(c))return{object:c,position:void 0,exclude:!1}}).map(function(c){return c.object})};var zxe=new m,gft=new m;function yft(e,t,n){this.ray=e,this.width=t,this.tilesets=n,this.ready=!1;let i=this;this.promise=new Promise(o=>{i._completePick=()=>{o()}})}function Jxe(e,t,n,i){let o=t.direction,r=m.mostOrthogonalAxis(o,zxe),s=m.cross(o,r,zxe),a=m.cross(o,s,gft);return i.position=t.origin,i.direction=o,i.up=a,i.right=s,i.frustum.width=n??Hxe,i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC)}function xft(e,t,n){let i=t.frameState,{ray:o,width:r,tilesets:s}=n,a=e._pickOffscreenView.camera,c=Jxe(e,o,r,a),d=tft;d.camera=a,d.cullingVolume=c;let u=!0,h=s.length;for(let p=0;p<h;++p){let g=s[p];g.show&&t.primitives.contains(g)&&(g.updateForPass(i,d),u=u&&d.ready)}return u&&n._completePick(),u}oa.prototype.updateMostDetailedRayPicks=function(e){let t=this._mostDetailedRayPicks;for(let n=0;n<t.length;++n)xft(this,e,t[n])&&t.splice(n--,1)};function Qxe(e,t,n){for(let i=0;i<e.length;++i){let o=e.get(i);o.show&&(l(o.isCesium3DTileset)?(!l(t)||t.indexOf(o)===-1)&&n.push(o):o instanceof ll&&Qxe(o,t,n))}}function V3(e,t,n,i,o,r){let s=[];if(Qxe(t.primitives,i,s),s.length===0)return Promise.resolve(r());let a=new yft(n,o,s);return e._mostDetailedRayPicks.push(a),a.promise.then(function(){return r()})}function _ft(e,t){return!l(e)||!l(t)||t.length===0?!1:t.indexOf(e)>-1||t.indexOf(e.primitive)>-1||t.indexOf(e.id)>-1}function Tft(e,t,n,i,o,r,s){let{context:a,frameState:c}=t,d=a.uniformState,u=e._pickOffscreenView;t.view=u,Jxe(e,n,o,u.camera);let h=Ke.clone(u.viewport,S3),p=u.pickFramebuffer.begin(h,u.viewport);t.jobScheduler.disableThisFrame(),t.updateFrameState(),c.invertClassification=!1,c.passes.pick=!0,c.passes.offscreen=!0,s?c.tilesetPassState=nft:c.tilesetPassState=kF,d.update(c),t.updateEnvironment(),t.updateAndExecuteCommands(p,UF),t.resolveFramebuffers(p);let g,f=u.pickFramebuffer.end(h);if(t.context.depthTexture){let{frustumCommandsList:y}=u,x=y.length;for(let S=0;S<x;++S){let V=e.getPickDepth(t,S).getDepth(a,0,0);if(l(V)&&V>0&&V<1){let L=y[S],Z=L.near*(S!==0?t.opaqueFrustumNearOffset:1),E=L.far,P=Z+V*(E-Z);g=pn.getPoint(n,P);break}}}if(t.view=t.defaultView,a.endFrame(),l(f)||l(g))return{object:f,position:g,exclude:!l(g)&&r||_ft(f,i)}}function jxe(e,t,n,i,o,r,s,a){return Kxe(i,function(){return Tft(e,t,n,o,r,s,a)})}function lL(e,t,n,i,o,r,s){let a=jxe(e,t,n,1,i,o,r,s);if(a.length>0)return a[0]}function qxe(e,t,n,i,o,r,s,a){return jxe(e,t,n,i,o,r,s,a)}function L3(e,t){return new Promise((n,i)=>{t.then(function(o){let r=e.postRender.addEventListener(function(){r(),n(o)});e.requestRender()}).catch(function(o){i(o)})})}oa.prototype.pickFromRay=function(e,t,n,i){return lL(this,e,t,n,i,!1,!1)};oa.prototype.drillPickFromRay=function(e,t,n,i,o){return qxe(this,e,t,n,i,o,!1,!1)};oa.prototype.pickFromRayMostDetailed=function(e,t,n,i){let o=this;return t=pn.clone(t),n=l(n)?n.slice():n,L3(e,V3(o,e,t,n,i,function(){return lL(o,e,t,n,i,!1,!0)}))};oa.prototype.drillPickFromRayMostDetailed=function(e,t,n,i,o){let r=this;return t=pn.clone(t),i=l(i)?i.slice():i,L3(e,V3(r,e,t,i,o,function(){return qxe(r,e,t,n,i,o,!1,!0)}))};var Sft=new m,Cft=new m,Vft=new pn,$xe=new he;function Kj(e,t){let n=e.ellipsoid,i=di._defaultMaxTerrainHeight,o=n.geodeticSurfaceNormalCartographic(t,Cft),r=he.toCartesian(t,n,Sft),s=Vft;s.origin=r,s.direction=o;let a=new pn;return pn.getPoint(s,i,a.origin),m.negate(o,a.direction),a}function e_e(e,t){let n=e.ellipsoid,i=he.fromCartesian(t,n,$xe);return Kj(e,i)}function t_e(e,t){let n=e.ellipsoid;return he.fromCartesian(t,n,$xe).height}function Lft(e,t,n,i,o){let r=Kj(t,n);return V3(e,t,r,i,o,function(){let s=lL(e,t,r,i,o,!0,!0);if(l(s))return t_e(t,s.position)})}function Rft(e,t,n,i,o,r){let s=e_e(t,n);return V3(e,t,s,i,o,function(){let a=lL(e,t,s,i,o,!0,!0);if(l(a))return m.clone(a.position,r)})}oa.prototype.sampleHeight=function(e,t,n,i){let o=Kj(e,t),r=lL(this,e,o,n,i,!0,!1);if(l(r))return t_e(e,r.position)};oa.prototype.clampToHeight=function(e,t,n,i,o){let r=e_e(e,t),s=lL(this,e,r,n,i,!0,!1);if(l(s))return m.clone(s.position,o)};oa.prototype.sampleHeightMostDetailed=function(e,t,n,i){n=l(n)?n.slice():n;let o=t.length,r=new Array(o);for(let s=0;s<o;++s)r[s]=Lft(this,e,t[s],n,i);return L3(e,Promise.all(r).then(function(s){let a=s.length;for(let c=0;c<a;++c)t[c].height=s[c];return t}))};oa.prototype.clampToHeightMostDetailed=function(e,t,n,i){n=l(n)?n.slice():n;let o=t.length,r=new Array(o);for(let s=0;s<o;++s)r[s]=Rft(this,e,t[s],n,i,t[s]);return L3(e,Promise.all(r).then(function(s){let a=s.length;for(let c=0;c<a;++c)t[c]=s[c];return t}))};oa.prototype.destroy=function(){this._pickOffscreenView=this._pickOffscreenView&&this._pickOffscreenView.destroy()};var DF=oa;var iMi=_(T(),1);var XAi=_(T(),1);var WFi=_(T(),1),BF=`uniform sampler2D colorTexture; in vec2 v_textureCoordinates; #ifdef AUTO_EXPOSURE uniform sampler2D autoExposure; #else uniform float exposure; #endif void main() { vec4 fragmentColor = texture(colorTexture, v_textureCoordinates); vec3 color = fragmentColor.rgb; #ifdef AUTO_EXPOSURE color /= texture(autoExposure, vec2(0.5)).r; #else color *= vec3(exposure); #endif color = czm_acesTonemapping(color); color = czm_inverseGamma(color); out_FragColor = vec4(color, fragmentColor.a); } `;var vFi=_(T(),1),OF=`precision highp float; uniform sampler2D randomTexture; uniform sampler2D depthTexture; uniform float intensity; uniform float bias; uniform float lengthCap; uniform int stepCount; uniform int directionCount; vec4 pixelToEye(vec2 screenCoordinate) { vec2 uv = screenCoordinate / czm_viewport.zw; float depth = czm_readDepth(depthTexture, uv); vec2 xy = 2.0 * uv - vec2(1.0); vec4 posEC = czm_inverseProjection * vec4(xy, depth, 1.0); posEC = posEC / posEC.w; // Avoid numerical error at far plane if (depth >= 1.0) { posEC.z = czm_currentFrustum.y; } return posEC; } // Reconstruct surface normal in eye coordinates, avoiding edges vec3 getNormalXEdge(vec3 positionEC) { // Find the 3D surface positions at adjacent screen pixels vec2 centerCoord = gl_FragCoord.xy; vec3 positionLeft = pixelToEye(centerCoord + vec2(-1.0, 0.0)).xyz; vec3 positionRight = pixelToEye(centerCoord + vec2(1.0, 0.0)).xyz; vec3 positionUp = pixelToEye(centerCoord + vec2(0.0, 1.0)).xyz; vec3 positionDown = pixelToEye(centerCoord + vec2(0.0, -1.0)).xyz; // Compute potential tangent vectors vec3 dx0 = positionEC - positionLeft; vec3 dx1 = positionRight - positionEC; vec3 dy0 = positionEC - positionDown; vec3 dy1 = positionUp - positionEC; // The shorter tangent is more likely to be on the same surface vec3 dx = length(dx0) < length(dx1) ? dx0 : dx1; vec3 dy = length(dy0) < length(dy1) ? dy0 : dy1; return normalize(cross(dx, dy)); } const float sqrtTwoPi = sqrt(czm_twoPi); float gaussian(float x, float standardDeviation) { float argument = x / standardDeviation; return exp(-0.5 * argument * argument) / (sqrtTwoPi * standardDeviation); } void main(void) { vec4 positionEC = pixelToEye(gl_FragCoord.xy); // Exit if we are too close to the back of the frustum, where the depth value is invalid. float maxValidDepth = czm_currentFrustum.y - lengthCap; if (-positionEC.z > maxValidDepth) { out_FragColor = vec4(1.0); return; } vec3 normalEC = getNormalXEdge(positionEC.xyz); float gaussianVariance = lengthCap * sqrt(-positionEC.z); // Choose a step length such that the marching stops just before 3 * variance. float stepLength = 3.0 * gaussianVariance / (float(stepCount) + 1.0); float metersPerPixel = czm_metersPerPixel(positionEC, 1.0); // Minimum step is 1 pixel to avoid double sampling float pixelsPerStep = max(stepLength / metersPerPixel, 1.0); stepLength = pixelsPerStep * metersPerPixel; float angleStepScale = 1.0 / float(directionCount); float angleStep = angleStepScale * czm_twoPi; float cosStep = cos(angleStep); float sinStep = sin(angleStep); mat2 rotateStep = mat2(cosStep, sinStep, -sinStep, cosStep); // Initial sampling direction (different for each pixel) const float randomTextureSize = 255.0; vec2 randomTexCoord = fract(gl_FragCoord.xy / randomTextureSize); float randomVal = texture(randomTexture, randomTexCoord).x; vec2 sampleDirection = vec2(cos(angleStep * randomVal), sin(angleStep * randomVal)); float ao = 0.0; // Loop over sampling directions #if __VERSION__ == 300 for (int i = 0; i < directionCount; i++) { #else for (int i = 0; i < 16; i++) { if (i >= directionCount) { break; } #endif sampleDirection = rotateStep * sampleDirection; float localAO = 0.0; vec2 radialStep = pixelsPerStep * sampleDirection; #if __VERSION__ == 300 for (int j = 0; j < stepCount; j++) { #else for (int j = 0; j < 64; j++) { if (j >= stepCount) { break; } #endif // Step along sampling direction, away from output pixel vec2 samplePixel = floor(gl_FragCoord.xy + float(j + 1) * radialStep) + vec2(0.5); // Exit if we stepped off the screen if (clamp(samplePixel, vec2(0.0), czm_viewport.zw) != samplePixel) { break; } // Compute step vector from output point to sampled point vec4 samplePositionEC = pixelToEye(samplePixel); vec3 stepVector = samplePositionEC.xyz - positionEC.xyz; // Estimate the angle from the surface normal. float dotVal = clamp(dot(normalEC, normalize(stepVector)), 0.0, 1.0); dotVal = czm_branchFreeTernary(dotVal > bias, dotVal, 0.0); dotVal = czm_branchFreeTernary(-samplePositionEC.z <= maxValidDepth, dotVal, 0.0); // Weight contribution based on the distance from the output point float sampleDistance = length(stepVector); float weight = gaussian(sampleDistance, gaussianVariance); localAO += weight * dotVal; } ao += localAO; } ao *= angleStepScale * stepLength; ao = 1.0 - clamp(ao, 0.0, 1.0); ao = pow(ao, intensity); out_FragColor = vec4(vec3(ao), 1.0); } `;var FFi=_(T(),1),YF=`uniform sampler2D colorTexture; uniform sampler2D ambientOcclusionTexture; uniform bool ambientOcclusionOnly; in vec2 v_textureCoordinates; void main(void) { vec4 color = texture(colorTexture, v_textureCoordinates); vec4 ao = texture(ambientOcclusionTexture, v_textureCoordinates); out_FragColor = ambientOcclusionOnly ? ao : ao * color; } `;var MFi=_(T(),1),zF=`uniform sampler2D colorTexture; uniform float gradations; in vec2 v_textureCoordinates; void main(void) { vec3 rgb = texture(colorTexture, v_textureCoordinates).rgb; #ifdef CZM_SELECTED_FEATURE if (czm_selected()) { out_FragColor = vec4(rgb, 1.0); return; } #endif float luminance = czm_luminance(rgb); float darkness = luminance * gradations; darkness = (darkness - fract(darkness)) / gradations; out_FragColor = vec4(vec3(darkness), 1.0); } `;var kFi=_(T(),1),HF=`uniform sampler2D colorTexture; uniform sampler2D bloomTexture; uniform bool glowOnly; in vec2 v_textureCoordinates; void main(void) { vec4 color = texture(colorTexture, v_textureCoordinates); #ifdef CZM_SELECTED_FEATURE if (czm_selected()) { out_FragColor = color; return; } #endif vec4 bloom = texture(bloomTexture, v_textureCoordinates); out_FragColor = glowOnly ? bloom : bloom + color; } `;var DFi=_(T(),1),KF=`uniform sampler2D colorTexture; uniform float brightness; in vec2 v_textureCoordinates; void main(void) { vec3 rgb = texture(colorTexture, v_textureCoordinates).rgb; vec3 target = vec3(0.0); out_FragColor = vec4(mix(target, rgb, brightness), 1.0); } `;var OFi=_(T(),1),JF=`uniform sampler2D colorTexture; uniform float contrast; uniform float brightness; in vec2 v_textureCoordinates; void main(void) { vec3 sceneColor = texture(colorTexture, v_textureCoordinates).xyz; sceneColor = czm_RGBToHSB(sceneColor); sceneColor.z += brightness; sceneColor = czm_HSBToRGB(sceneColor); float factor = (259.0 * (contrast + 255.0)) / (255.0 * (259.0 - contrast)); sceneColor = factor * (sceneColor - vec3(0.5)) + vec3(0.5); out_FragColor = vec4(sceneColor, 1.0); } `;var zFi=_(T(),1),QF=`uniform sampler2D colorTexture; uniform sampler2D blurTexture; uniform sampler2D depthTexture; uniform float focalDistance; in vec2 v_textureCoordinates; vec4 toEye(vec2 uv, float depth) { vec2 xy = vec2((uv.x * 2.0 - 1.0), ((1.0 - uv.y) * 2.0 - 1.0)); vec4 posInCamera = czm_inverseProjection * vec4(xy, depth, 1.0); posInCamera = posInCamera / posInCamera.w; return posInCamera; } float computeDepthBlur(float depth) { float f; if (depth < focalDistance) { f = (focalDistance - depth) / (focalDistance - czm_currentFrustum.x); } else { f = (depth - focalDistance) / (czm_currentFrustum.y - focalDistance); f = pow(f, 0.1); } f *= f; f = clamp(f, 0.0, 1.0); return pow(f, 0.5); } void main(void) { float depth = czm_readDepth(depthTexture, v_textureCoordinates); vec4 posInCamera = toEye(v_textureCoordinates, depth); float d = computeDepthBlur(-posInCamera.z); out_FragColor = mix(texture(colorTexture, v_textureCoordinates), texture(blurTexture, v_textureCoordinates), d); } `;var KFi=_(T(),1),jF=`uniform sampler2D depthTexture; in vec2 v_textureCoordinates; void main(void) { float depth = czm_readDepth(depthTexture, v_textureCoordinates); out_FragColor = vec4(vec3(depth), 1.0); } `;var QFi=_(T(),1),qF=`uniform sampler2D depthTexture; uniform float length; uniform vec4 color; in vec2 v_textureCoordinates; void main(void) { float directions[3]; directions[0] = -1.0; directions[1] = 0.0; directions[2] = 1.0; float scalars[3]; scalars[0] = 3.0; scalars[1] = 10.0; scalars[2] = 3.0; float padx = czm_pixelRatio / czm_viewport.z; float pady = czm_pixelRatio / czm_viewport.w; #ifdef CZM_SELECTED_FEATURE bool selected = false; for (int i = 0; i < 3; ++i) { float dir = directions[i]; selected = selected || czm_selected(vec2(-padx, dir * pady)); selected = selected || czm_selected(vec2(padx, dir * pady)); selected = selected || czm_selected(vec2(dir * padx, -pady)); selected = selected || czm_selected(vec2(dir * padx, pady)); if (selected) { break; } } if (!selected) { out_FragColor = vec4(color.rgb, 0.0); return; } #endif float horizEdge = 0.0; float vertEdge = 0.0; for (int i = 0; i < 3; ++i) { float dir = directions[i]; float scale = scalars[i]; horizEdge -= texture(depthTexture, v_textureCoordinates + vec2(-padx, dir * pady)).x * scale; horizEdge += texture(depthTexture, v_textureCoordinates + vec2(padx, dir * pady)).x * scale; vertEdge -= texture(depthTexture, v_textureCoordinates + vec2(dir * padx, -pady)).x * scale; vertEdge += texture(depthTexture, v_textureCoordinates + vec2(dir * padx, pady)).x * scale; } float len = sqrt(horizEdge * horizEdge + vertEdge * vertEdge); out_FragColor = vec4(color.rgb, len > length ? color.a : 0.0); } `;var qFi=_(T(),1),$F=`uniform sampler2D colorTexture; in vec2 v_textureCoordinates; #ifdef AUTO_EXPOSURE uniform sampler2D autoExposure; #else uniform float exposure; #endif // See slides 142 and 143: // http://www.gdcvault.com/play/1012459/Uncharted_2__HDR_Lighting void main() { vec4 fragmentColor = texture(colorTexture, v_textureCoordinates); vec3 color = fragmentColor.rgb; #ifdef AUTO_EXPOSURE float exposure = texture(autoExposure, vec2(0.5)).r; color /= exposure; #else color *= vec3(exposure); #endif const float A = 0.22; // shoulder strength const float B = 0.30; // linear strength const float C = 0.10; // linear angle const float D = 0.20; // toe strength const float E = 0.01; // toe numerator const float F = 0.30; // toe denominator const float white = 11.2; // linear white point value vec3 c = ((color * (A * color + C * B) + D * E) / (color * ( A * color + B) + D * F)) - E / F; float w = ((white * (A * white + C * B) + D * E) / (white * ( A * white + B) + D * F)) - E / F; c = czm_inverseGamma(c / w); out_FragColor = vec4(c, fragmentColor.a); } `;var e9i=_(T(),1),e9=`uniform sampler2D colorTexture; in vec2 v_textureCoordinates; #ifdef AUTO_EXPOSURE uniform sampler2D autoExposure; #else uniform float exposure; #endif void main() { vec4 fragmentColor = texture(colorTexture, v_textureCoordinates); vec3 color = fragmentColor.rgb; #ifdef AUTO_EXPOSURE color /= texture(autoExposure, vec2(0.5)).r; #else color *= vec3(exposure); #endif color = czm_pbrNeutralTonemapping(color); color = czm_inverseGamma(color); out_FragColor = vec4(color, fragmentColor.a); } `;var n9i=_(T(),1),t9=`in vec2 v_textureCoordinates; uniform sampler2D colorTexture; const float fxaaQualitySubpix = 0.5; const float fxaaQualityEdgeThreshold = 0.125; const float fxaaQualityEdgeThresholdMin = 0.0833; void main() { vec2 fxaaQualityRcpFrame = vec2(1.0) / czm_viewport.zw; vec4 color = FxaaPixelShader( v_textureCoordinates, colorTexture, fxaaQualityRcpFrame, fxaaQualitySubpix, fxaaQualityEdgeThreshold, fxaaQualityEdgeThresholdMin); float alpha = texture(colorTexture, v_textureCoordinates).a; out_FragColor = vec4(color.rgb, alpha); } `;var o9i=_(T(),1),Py=`#define SAMPLES 8 uniform float delta; uniform float sigma; uniform float direction; // 0.0 for x direction, 1.0 for y direction uniform sampler2D colorTexture; #ifdef USE_STEP_SIZE uniform float stepSize; #else uniform vec2 step; #endif in vec2 v_textureCoordinates; // Incremental Computation of the Gaussian: // https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch40.html void main() { vec2 st = v_textureCoordinates; vec2 dir = vec2(1.0 - direction, direction); #ifdef USE_STEP_SIZE vec2 step = vec2(stepSize * (czm_pixelRatio / czm_viewport.zw)); #else vec2 step = step; #endif vec3 g; g.x = 1.0 / (sqrt(czm_twoPi) * sigma); g.y = exp((-0.5 * delta * delta) / (sigma * sigma)); g.z = g.y * g.y; vec4 result = texture(colorTexture, st) * g.x; for (int i = 1; i < SAMPLES; ++i) { g.xy *= g.yz; vec2 offset = float(i) * dir * step; result += texture(colorTexture, st - offset) * g.x; result += texture(colorTexture, st + offset) * g.x; } out_FragColor = result; } `;var s9i=_(T(),1),n9=`uniform sampler2D colorTexture; uniform sampler2D dirtTexture; uniform sampler2D starTexture; uniform vec2 dirtTextureDimensions; uniform float distortion; uniform float ghostDispersal; uniform float haloWidth; uniform float dirtAmount; uniform float earthRadius; uniform float intensity; in vec2 v_textureCoordinates; // whether it is in space or not // 6500000.0 is empirical value #define DISTANCE_TO_SPACE 6500000.0 // return ndc from world coordinate biased earthRadius vec4 getNDCFromWC(vec3 WC, float earthRadius) { vec4 positionEC = czm_view * vec4(WC, 1.0); positionEC = vec4(positionEC.x + earthRadius, positionEC.y, positionEC.z, 1.0); vec4 positionWC = czm_eyeToWindowCoordinates(positionEC); return czm_viewportOrthographic * vec4(positionWC.xy, -positionWC.z, 1.0); } // Check if current pixel is included Earth // if then mask it gradually float isInEarth(vec2 texcoord, vec2 sceneSize) { vec2 NDC = texcoord * 2.0 - 1.0; vec4 earthPosSC = getNDCFromWC(vec3(0.0), 0.0); vec4 earthPosSCEdge = getNDCFromWC(vec3(0.0), earthRadius * 1.5); NDC.xy -= earthPosSC.xy; float X = abs(NDC.x) * sceneSize.x; float Y = abs(NDC.y) * sceneSize.y; return clamp(0.0, 1.0, max(sqrt(X * X + Y * Y) / max(abs(earthPosSCEdge.x * sceneSize.x), 1.0) - 0.8 , 0.0)); } // For Chromatic effect vec4 textureDistorted(sampler2D tex, vec2 texcoord, vec2 direction, vec3 distortion, bool isSpace) { vec2 sceneSize = czm_viewport.zw; vec3 color; if(isSpace) { color.r = isInEarth(texcoord + direction * distortion.r, sceneSize) * texture(tex, texcoord + direction * distortion.r).r; color.g = isInEarth(texcoord + direction * distortion.g, sceneSize) * texture(tex, texcoord + direction * distortion.g).g; color.b = isInEarth(texcoord + direction * distortion.b, sceneSize) * texture(tex, texcoord + direction * distortion.b).b; } else { color.r = texture(tex, texcoord + direction * distortion.r).r; color.g = texture(tex, texcoord + direction * distortion.g).g; color.b = texture(tex, texcoord + direction * distortion.b).b; } return vec4(clamp(color, 0.0, 1.0), 0.0); } void main(void) { vec4 originalColor = texture(colorTexture, v_textureCoordinates); vec3 rgb = originalColor.rgb; bool isSpace = length(czm_viewerPositionWC.xyz) > DISTANCE_TO_SPACE; // Sun position vec4 sunPos = czm_morphTime == 1.0 ? vec4(czm_sunPositionWC, 1.0) : vec4(czm_sunPositionColumbusView.zxy, 1.0); vec4 sunPositionEC = czm_view * sunPos; vec4 sunPositionWC = czm_eyeToWindowCoordinates(sunPositionEC); sunPos = czm_viewportOrthographic * vec4(sunPositionWC.xy, -sunPositionWC.z, 1.0); // If sun is not in the screen space, use original color. if(!isSpace || !((sunPos.x >= -1.1 && sunPos.x <= 1.1) && (sunPos.y >= -1.1 && sunPos.y <= 1.1))) { // Lens flare is disabled when not in space until #5932 is fixed. // https://github.com/CesiumGS/cesium/issues/5932 out_FragColor = originalColor; return; } vec2 texcoord = vec2(1.0) - v_textureCoordinates; vec2 pixelSize = czm_pixelRatio / czm_viewport.zw; vec2 invPixelSize = 1.0 / pixelSize; vec3 distortionVec = pixelSize.x * vec3(-distortion, 0.0, distortion); // ghost vector to image centre: vec2 ghostVec = (vec2(0.5) - texcoord) * ghostDispersal; vec3 direction = normalize(vec3(ghostVec, 0.0)); // sample ghosts: vec4 result = vec4(0.0); vec4 ghost = vec4(0.0); for (int i = 0; i < 4; ++i) { vec2 offset = fract(texcoord + ghostVec * float(i)); // Only bright spots from the centre of the source image ghost += textureDistorted(colorTexture, offset, direction.xy, distortionVec, isSpace); } result += ghost; // sample halo vec2 haloVec = normalize(ghostVec) * haloWidth; float weightForHalo = length(vec2(0.5) - fract(texcoord + haloVec)) / length(vec2(0.5)); weightForHalo = pow(1.0 - weightForHalo, 5.0); result += textureDistorted(colorTexture, texcoord + haloVec, direction.xy, distortionVec, isSpace) * weightForHalo * 1.5; // dirt on lens vec2 dirtTexCoords = (v_textureCoordinates * invPixelSize) / dirtTextureDimensions; if (dirtTexCoords.x > 1.0) { dirtTexCoords.x = mod(floor(dirtTexCoords.x), 2.0) == 1.0 ? 1.0 - fract(dirtTexCoords.x) : fract(dirtTexCoords.x); } if (dirtTexCoords.y > 1.0) { dirtTexCoords.y = mod(floor(dirtTexCoords.y), 2.0) == 1.0 ? 1.0 - fract(dirtTexCoords.y) : fract(dirtTexCoords.y); } result += dirtAmount * texture(dirtTexture, dirtTexCoords); // Rotating starburst texture's coordinate // dot(czm_view[0].xyz, vec3(0.0, 0.0, 1.0)) + dot(czm_view[1].xyz, vec3(0.0, 1.0, 0.0)) float camrot = czm_view[0].z + czm_view[1].y; float cosValue = cos(camrot); float sinValue = sin(camrot); mat3 rotation = mat3( cosValue, -sinValue, 0.0, sinValue, cosValue, 0.0, 0.0, 0.0, 1.0 ); vec3 st1 = vec3(v_textureCoordinates * 2.0 - vec2(1.0), 1.0); vec3 st2 = vec3((rotation * st1).xy, 1.0); vec3 st3 = st2 * 0.5 + vec3(0.5); vec2 lensStarTexcoord = st3.xy; float weightForLensFlare = length(vec3(sunPos.xy, 0.0)); float oneMinusWeightForLensFlare = max(1.0 - weightForLensFlare, 0.0); if (!isSpace) { result *= oneMinusWeightForLensFlare * intensity * 0.2; } else { result *= oneMinusWeightForLensFlare * intensity; result *= texture(starTexture, lensStarTexcoord) * pow(weightForLensFlare, 1.0) * max((1.0 - length(vec3(st1.xy, 0.0))), 0.0) * 2.0; } result += texture(colorTexture, v_textureCoordinates); out_FragColor = result; } `;var c9i=_(T(),1),i9=`uniform sampler2D colorTexture; uniform vec3 white; in vec2 v_textureCoordinates; #ifdef AUTO_EXPOSURE uniform sampler2D autoExposure; #else uniform float exposure; #endif // See equation 4: // http://www.cs.utah.edu/~reinhard/cdrom/tonemap.pdf void main() { vec4 fragmentColor = texture(colorTexture, v_textureCoordinates); vec3 color = fragmentColor.rgb; #ifdef AUTO_EXPOSURE float exposure = texture(autoExposure, vec2(0.5)).r; color /= exposure; #else color *= vec3(exposure); #endif color = (color * (1.0 + color / white)) / (1.0 + color); color = czm_inverseGamma(color); out_FragColor = vec4(color, fragmentColor.a); } `;var d9i=_(T(),1),o9=`uniform sampler2D colorTexture; in vec2 v_textureCoordinates; float rand(vec2 co) { return fract(sin(dot(co.xy ,vec2(12.9898, 78.233))) * 43758.5453); } void main(void) { float noiseValue = rand(v_textureCoordinates + sin(czm_frameNumber)) * 0.1; vec3 rgb = texture(colorTexture, v_textureCoordinates).rgb; vec3 green = vec3(0.0, 1.0, 0.0); out_FragColor = vec4((noiseValue + rgb) * green, 1.0); } `;var m9i=_(T(),1),r9=`uniform sampler2D colorTexture; in vec2 v_textureCoordinates; #ifdef AUTO_EXPOSURE uniform sampler2D autoExposure; #else uniform float exposure; #endif // See equation 3: // http://www.cs.utah.edu/~reinhard/cdrom/tonemap.pdf void main() { vec4 fragmentColor = texture(colorTexture, v_textureCoordinates); vec3 color = fragmentColor.rgb; #ifdef AUTO_EXPOSURE float exposure = texture(autoExposure, vec2(0.5)).r; color /= exposure; #else color *= vec3(exposure); #endif color = color / (1.0 + color); color = czm_inverseGamma(color); out_FragColor = vec4(color, fragmentColor.a); } `;var f9i=_(T(),1),s9=`uniform sampler2D colorTexture; uniform sampler2D silhouetteTexture; in vec2 v_textureCoordinates; void main(void) { vec4 silhouetteColor = texture(silhouetteTexture, v_textureCoordinates); vec4 color = texture(colorTexture, v_textureCoordinates); out_FragColor = mix(color, silhouetteColor, silhouetteColor.a); } `;var b9i=_(T(),1);/** * @license * Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of NVIDIA CORPORATION nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */var a9=`/** * @license * Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of NVIDIA CORPORATION nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS \`\`AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // NVIDIA GameWorks Graphics Samples GitHub link: https://github.com/NVIDIAGameWorks/GraphicsSamples // Original FXAA 3.11 shader link: https://github.com/NVIDIAGameWorks/GraphicsSamples/blob/master/samples/es3-kepler/FXAA/FXAA3_11.h // Steps used to integrate into Cesium: // * The following defines are set: // #define FXAA_PC 1 // #define FXAA_WEBGL_1 1 // #define FXAA_GREEN_AS_LUMA 1 // #define FXAA_EARLY_EXIT 1 // #define FXAA_GLSL_120 1 // * All other preprocessor directives besides the FXAA_QUALITY__P* directives were removed. // * Double underscores are invalid for preprocessor directives so replace them with a single underscore. Replace // /FXAA_QUALITY__P(.*)/g with /FXAA_QUALITY__P$1/. // * There are no implicit conversions from ivec* to vec* so replace: // #define FxaaInt2 ivec2 // with // #define FxaaInt2 vec2 // * The texture2DLod function is only available in vertex shaders so replace: // #define FxaaTexTop(t, p) texture2DLod(t, p, 0.0) // #define FxaaTexOff(t, p, o, r) texture2DLod(t, p + (o * r), 0.0) // with // #define FxaaTexTop(t, p) texture(t, p) // #define FxaaTexOff(t, p, o, r) texture(t, p + (o * r)) // * FXAA_QUALITY_PRESET is prepended in the javascript code. We may want to expose that setting in the future. // * The following parameters to FxaaPixelShader are unused and can be removed: // fxaaConsolePosPos // fxaaConsoleRcpFrameOpt // fxaaConsoleRcpFrameOpt2 // fxaaConsole360RcpFrameOpt2 // fxaaConsoleEdgeSharpness // fxaaConsoleEdgeThreshold // fxaaConsoleEdgeThresholdMi // fxaaConsole360ConstDir // // Choose the quality preset. // This needs to be compiled into the shader as it effects code. // Best option to include multiple presets is to // in each shader define the preset, then include this file. // // OPTIONS // ----------------------------------------------------------------------- // 10 to 15 - default medium dither (10=fastest, 15=highest quality) // 20 to 29 - less dither, more expensive (20=fastest, 29=highest quality) // 39 - no dither, very expensive // // NOTES // ----------------------------------------------------------------------- // 12 = slightly faster then FXAA 3.9 and higher edge quality (default) // 13 = about same speed as FXAA 3.9 and better than 12 // 23 = closest to FXAA 3.9 visually and performance wise // _ = the lowest digit is directly related to performance // _ = the highest digit is directly related to style // //#define FXAA_QUALITY_PRESET 12 #if (FXAA_QUALITY_PRESET == 10) #define FXAA_QUALITY_PS 3 #define FXAA_QUALITY_P0 1.5 #define FXAA_QUALITY_P1 3.0 #define FXAA_QUALITY_P2 12.0 #endif #if (FXAA_QUALITY_PRESET == 11) #define FXAA_QUALITY_PS 4 #define FXAA_QUALITY_P0 1.0 #define FXAA_QUALITY_P1 1.5 #define FXAA_QUALITY_P2 3.0 #define FXAA_QUALITY_P3 12.0 #endif #if (FXAA_QUALITY_PRESET == 12) #define FXAA_QUALITY_PS 5 #define FXAA_QUALITY_P0 1.0 #define FXAA_QUALITY_P1 1.5 #define FXAA_QUALITY_P2 2.0 #define FXAA_QUALITY_P3 4.0 #define FXAA_QUALITY_P4 12.0 #endif #if (FXAA_QUALITY_PRESET == 13) #define FXAA_QUALITY_PS 6 #define FXAA_QUALITY_P0 1.0 #define FXAA_QUALITY_P1 1.5 #define FXAA_QUALITY_P2 2.0 #define FXAA_QUALITY_P3 2.0 #define FXAA_QUALITY_P4 4.0 #define FXAA_QUALITY_P5 12.0 #endif #if (FXAA_QUALITY_PRESET == 14) #define FXAA_QUALITY_PS 7 #define FXAA_QUALITY_P0 1.0 #define FXAA_QUALITY_P1 1.5 #define FXAA_QUALITY_P2 2.0 #define FXAA_QUALITY_P3 2.0 #define FXAA_QUALITY_P4 2.0 #define FXAA_QUALITY_P5 4.0 #define FXAA_QUALITY_P6 12.0 #endif #if (FXAA_QUALITY_PRESET == 15) #define FXAA_QUALITY_PS 8 #define FXAA_QUALITY_P0 1.0 #define FXAA_QUALITY_P1 1.5 #define FXAA_QUALITY_P2 2.0 #define FXAA_QUALITY_P3 2.0 #define FXAA_QUALITY_P4 2.0 #define FXAA_QUALITY_P5 2.0 #define FXAA_QUALITY_P6 4.0 #define FXAA_QUALITY_P7 12.0 #endif #if (FXAA_QUALITY_PRESET == 20) #define FXAA_QUALITY_PS 3 #define FXAA_QUALITY_P0 1.5 #define FXAA_QUALITY_P1 2.0 #define FXAA_QUALITY_P2 8.0 #endif #if (FXAA_QUALITY_PRESET == 21) #define FXAA_QUALITY_PS 4 #define FXAA_QUALITY_P0 1.0 #define FXAA_QUALITY_P1 1.5 #define FXAA_QUALITY_P2 2.0 #define FXAA_QUALITY_P3 8.0 #endif #if (FXAA_QUALITY_PRESET == 22) #define FXAA_QUALITY_PS 5 #define FXAA_QUALITY_P0 1.0 #define FXAA_QUALITY_P1 1.5 #define FXAA_QUALITY_P2 2.0 #define FXAA_QUALITY_P3 2.0 #define FXAA_QUALITY_P4 8.0 #endif #if (FXAA_QUALITY_PRESET == 23) #define FXAA_QUALITY_PS 6 #define FXAA_QUALITY_P0 1.0 #define FXAA_QUALITY_P1 1.5 #define FXAA_QUALITY_P2 2.0 #define FXAA_QUALITY_P3 2.0 #define FXAA_QUALITY_P4 2.0 #define FXAA_QUALITY_P5 8.0 #endif #if (FXAA_QUALITY_PRESET == 24) #define FXAA_QUALITY_PS 7 #define FXAA_QUALITY_P0 1.0 #define FXAA_QUALITY_P1 1.5 #define FXAA_QUALITY_P2 2.0 #define FXAA_QUALITY_P3 2.0 #define FXAA_QUALITY_P4 2.0 #define FXAA_QUALITY_P5 3.0 #define FXAA_QUALITY_P6 8.0 #endif #if (FXAA_QUALITY_PRESET == 25) #define FXAA_QUALITY_PS 8 #define FXAA_QUALITY_P0 1.0 #define FXAA_QUALITY_P1 1.5 #define FXAA_QUALITY_P2 2.0 #define FXAA_QUALITY_P3 2.0 #define FXAA_QUALITY_P4 2.0 #define FXAA_QUALITY_P5 2.0 #define FXAA_QUALITY_P6 4.0 #define FXAA_QUALITY_P7 8.0 #endif #if (FXAA_QUALITY_PRESET == 26) #define FXAA_QUALITY_PS 9 #define FXAA_QUALITY_P0 1.0 #define FXAA_QUALITY_P1 1.5 #define FXAA_QUALITY_P2 2.0 #define FXAA_QUALITY_P3 2.0 #define FXAA_QUALITY_P4 2.0 #define FXAA_QUALITY_P5 2.0 #define FXAA_QUALITY_P6 2.0 #define FXAA_QUALITY_P7 4.0 #define FXAA_QUALITY_P8 8.0 #endif #if (FXAA_QUALITY_PRESET == 27) #define FXAA_QUALITY_PS 10 #define FXAA_QUALITY_P0 1.0 #define FXAA_QUALITY_P1 1.5 #define FXAA_QUALITY_P2 2.0 #define FXAA_QUALITY_P3 2.0 #define FXAA_QUALITY_P4 2.0 #define FXAA_QUALITY_P5 2.0 #define FXAA_QUALITY_P6 2.0 #define FXAA_QUALITY_P7 2.0 #define FXAA_QUALITY_P8 4.0 #define FXAA_QUALITY_P9 8.0 #endif #if (FXAA_QUALITY_PRESET == 28) #define FXAA_QUALITY_PS 11 #define FXAA_QUALITY_P0 1.0 #define FXAA_QUALITY_P1 1.5 #define FXAA_QUALITY_P2 2.0 #define FXAA_QUALITY_P3 2.0 #define FXAA_QUALITY_P4 2.0 #define FXAA_QUALITY_P5 2.0 #define FXAA_QUALITY_P6 2.0 #define FXAA_QUALITY_P7 2.0 #define FXAA_QUALITY_P8 2.0 #define FXAA_QUALITY_P9 4.0 #define FXAA_QUALITY_P10 8.0 #endif #if (FXAA_QUALITY_PRESET == 29) #define FXAA_QUALITY_PS 12 #define FXAA_QUALITY_P0 1.0 #define FXAA_QUALITY_P1 1.5 #define FXAA_QUALITY_P2 2.0 #define FXAA_QUALITY_P3 2.0 #define FXAA_QUALITY_P4 2.0 #define FXAA_QUALITY_P5 2.0 #define FXAA_QUALITY_P6 2.0 #define FXAA_QUALITY_P7 2.0 #define FXAA_QUALITY_P8 2.0 #define FXAA_QUALITY_P9 2.0 #define FXAA_QUALITY_P10 4.0 #define FXAA_QUALITY_P11 8.0 #endif #if (FXAA_QUALITY_PRESET == 39) #define FXAA_QUALITY_PS 12 #define FXAA_QUALITY_P0 1.0 #define FXAA_QUALITY_P1 1.0 #define FXAA_QUALITY_P2 1.0 #define FXAA_QUALITY_P3 1.0 #define FXAA_QUALITY_P4 1.0 #define FXAA_QUALITY_P5 1.5 #define FXAA_QUALITY_P6 2.0 #define FXAA_QUALITY_P7 2.0 #define FXAA_QUALITY_P8 2.0 #define FXAA_QUALITY_P9 2.0 #define FXAA_QUALITY_P10 4.0 #define FXAA_QUALITY_P11 8.0 #endif #define FxaaBool bool #define FxaaFloat float #define FxaaFloat2 vec2 #define FxaaFloat3 vec3 #define FxaaFloat4 vec4 #define FxaaHalf float #define FxaaHalf2 vec2 #define FxaaHalf3 vec3 #define FxaaHalf4 vec4 #define FxaaInt2 vec2 #define FxaaTex sampler2D #define FxaaSat(x) clamp(x, 0.0, 1.0) #define FxaaTexTop(t, p) texture(t, p) #define FxaaTexOff(t, p, o, r) texture(t, p + (o * r)) FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.y; } FxaaFloat4 FxaaPixelShader( // // Use noperspective interpolation here (turn off perspective interpolation). // {xy} = center of pixel FxaaFloat2 pos, // // Input color texture. // {rgb_} = color in linear or perceptual color space // if (FXAA_GREEN_AS_LUMA == 0) // {___a} = luma in perceptual color space (not linear) FxaaTex tex, // // Only used on FXAA Quality. // This must be from a constant/uniform. // {x_} = 1.0/screenWidthInPixels // {_y} = 1.0/screenHeightInPixels FxaaFloat2 fxaaQualityRcpFrame, // // Only used on FXAA Quality. // This used to be the FXAA_QUALITY_SUBPIX define. // It is here now to allow easier tuning. // Choose the amount of sub-pixel aliasing removal. // This can effect sharpness. // 1.00 - upper limit (softer) // 0.75 - default amount of filtering // 0.50 - lower limit (sharper, less sub-pixel aliasing removal) // 0.25 - almost off // 0.00 - completely off FxaaFloat fxaaQualitySubpix, // // Only used on FXAA Quality. // This used to be the FXAA_QUALITY_EDGE_THRESHOLD define. // It is here now to allow easier tuning. // The minimum amount of local contrast required to apply algorithm. // 0.333 - too little (faster) // 0.250 - low quality // 0.166 - default // 0.125 - high quality // 0.063 - overkill (slower) FxaaFloat fxaaQualityEdgeThreshold, // // Only used on FXAA Quality. // This used to be the FXAA_QUALITY_EDGE_THRESHOLD_MIN define. // It is here now to allow easier tuning. // Trims the algorithm from processing darks. // 0.0833 - upper limit (default, the start of visible unfiltered edges) // 0.0625 - high quality (faster) // 0.0312 - visible limit (slower) // Special notes when using FXAA_GREEN_AS_LUMA, // Likely want to set this to zero. // As colors that are mostly not-green // will appear very dark in the green channel! // Tune by looking at mostly non-green content, // then start at zero and increase until aliasing is a problem. FxaaFloat fxaaQualityEdgeThresholdMin ) { /*--------------------------------------------------------------------------*/ FxaaFloat2 posM; posM.x = pos.x; posM.y = pos.y; FxaaFloat4 rgbyM = FxaaTexTop(tex, posM); #define lumaM rgbyM.y FxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0, 1), fxaaQualityRcpFrame.xy)); FxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 0), fxaaQualityRcpFrame.xy)); FxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0,-1), fxaaQualityRcpFrame.xy)); FxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 0), fxaaQualityRcpFrame.xy)); /*--------------------------------------------------------------------------*/ FxaaFloat maxSM = max(lumaS, lumaM); FxaaFloat minSM = min(lumaS, lumaM); FxaaFloat maxESM = max(lumaE, maxSM); FxaaFloat minESM = min(lumaE, minSM); FxaaFloat maxWN = max(lumaN, lumaW); FxaaFloat minWN = min(lumaN, lumaW); FxaaFloat rangeMax = max(maxWN, maxESM); FxaaFloat rangeMin = min(minWN, minESM); FxaaFloat rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold; FxaaFloat range = rangeMax - rangeMin; FxaaFloat rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled); FxaaBool earlyExit = range < rangeMaxClamped; /*--------------------------------------------------------------------------*/ if(earlyExit) return rgbyM; /*--------------------------------------------------------------------------*/ FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1,-1), fxaaQualityRcpFrame.xy)); FxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 1), fxaaQualityRcpFrame.xy)); FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1,-1), fxaaQualityRcpFrame.xy)); FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy)); /*--------------------------------------------------------------------------*/ FxaaFloat lumaNS = lumaN + lumaS; FxaaFloat lumaWE = lumaW + lumaE; FxaaFloat subpixRcpRange = 1.0/range; FxaaFloat subpixNSWE = lumaNS + lumaWE; FxaaFloat edgeHorz1 = (-2.0 * lumaM) + lumaNS; FxaaFloat edgeVert1 = (-2.0 * lumaM) + lumaWE; /*--------------------------------------------------------------------------*/ FxaaFloat lumaNESE = lumaNE + lumaSE; FxaaFloat lumaNWNE = lumaNW + lumaNE; FxaaFloat edgeHorz2 = (-2.0 * lumaE) + lumaNESE; FxaaFloat edgeVert2 = (-2.0 * lumaN) + lumaNWNE; /*--------------------------------------------------------------------------*/ FxaaFloat lumaNWSW = lumaNW + lumaSW; FxaaFloat lumaSWSE = lumaSW + lumaSE; FxaaFloat edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2); FxaaFloat edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2); FxaaFloat edgeHorz3 = (-2.0 * lumaW) + lumaNWSW; FxaaFloat edgeVert3 = (-2.0 * lumaS) + lumaSWSE; FxaaFloat edgeHorz = abs(edgeHorz3) + edgeHorz4; FxaaFloat edgeVert = abs(edgeVert3) + edgeVert4; /*--------------------------------------------------------------------------*/ FxaaFloat subpixNWSWNESE = lumaNWSW + lumaNESE; FxaaFloat lengthSign = fxaaQualityRcpFrame.x; FxaaBool horzSpan = edgeHorz >= edgeVert; FxaaFloat subpixA = subpixNSWE * 2.0 + subpixNWSWNESE; /*--------------------------------------------------------------------------*/ if(!horzSpan) lumaN = lumaW; if(!horzSpan) lumaS = lumaE; if(horzSpan) lengthSign = fxaaQualityRcpFrame.y; FxaaFloat subpixB = (subpixA * (1.0/12.0)) - lumaM; /*--------------------------------------------------------------------------*/ FxaaFloat gradientN = lumaN - lumaM; FxaaFloat gradientS = lumaS - lumaM; FxaaFloat lumaNN = lumaN + lumaM; FxaaFloat lumaSS = lumaS + lumaM; FxaaBool pairN = abs(gradientN) >= abs(gradientS); FxaaFloat gradient = max(abs(gradientN), abs(gradientS)); if(pairN) lengthSign = -lengthSign; FxaaFloat subpixC = FxaaSat(abs(subpixB) * subpixRcpRange); /*--------------------------------------------------------------------------*/ FxaaFloat2 posB; posB.x = posM.x; posB.y = posM.y; FxaaFloat2 offNP; offNP.x = (!horzSpan) ? 0.0 : fxaaQualityRcpFrame.x; offNP.y = ( horzSpan) ? 0.0 : fxaaQualityRcpFrame.y; if(!horzSpan) posB.x += lengthSign * 0.5; if( horzSpan) posB.y += lengthSign * 0.5; /*--------------------------------------------------------------------------*/ FxaaFloat2 posN; posN.x = posB.x - offNP.x * FXAA_QUALITY_P0; posN.y = posB.y - offNP.y * FXAA_QUALITY_P0; FxaaFloat2 posP; posP.x = posB.x + offNP.x * FXAA_QUALITY_P0; posP.y = posB.y + offNP.y * FXAA_QUALITY_P0; FxaaFloat subpixD = ((-2.0)*subpixC) + 3.0; FxaaFloat lumaEndN = FxaaLuma(FxaaTexTop(tex, posN)); FxaaFloat subpixE = subpixC * subpixC; FxaaFloat lumaEndP = FxaaLuma(FxaaTexTop(tex, posP)); /*--------------------------------------------------------------------------*/ if(!pairN) lumaNN = lumaSS; FxaaFloat gradientScaled = gradient * 1.0/4.0; FxaaFloat lumaMM = lumaM - lumaNN * 0.5; FxaaFloat subpixF = subpixD * subpixE; FxaaBool lumaMLTZero = lumaMM < 0.0; /*--------------------------------------------------------------------------*/ lumaEndN -= lumaNN * 0.5; lumaEndP -= lumaNN * 0.5; FxaaBool doneN = abs(lumaEndN) >= gradientScaled; FxaaBool doneP = abs(lumaEndP) >= gradientScaled; if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P1; if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P1; FxaaBool doneNP = (!doneN) || (!doneP); if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P1; if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P1; /*--------------------------------------------------------------------------*/ if(doneNP) { if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; doneN = abs(lumaEndN) >= gradientScaled; doneP = abs(lumaEndP) >= gradientScaled; if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P2; if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P2; doneNP = (!doneN) || (!doneP); if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P2; if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P2; /*--------------------------------------------------------------------------*/ #if (FXAA_QUALITY_PS > 3) if(doneNP) { if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; doneN = abs(lumaEndN) >= gradientScaled; doneP = abs(lumaEndP) >= gradientScaled; if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P3; if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P3; doneNP = (!doneN) || (!doneP); if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P3; if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P3; /*--------------------------------------------------------------------------*/ #if (FXAA_QUALITY_PS > 4) if(doneNP) { if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; doneN = abs(lumaEndN) >= gradientScaled; doneP = abs(lumaEndP) >= gradientScaled; if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P4; if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P4; doneNP = (!doneN) || (!doneP); if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P4; if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P4; /*--------------------------------------------------------------------------*/ #if (FXAA_QUALITY_PS > 5) if(doneNP) { if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; doneN = abs(lumaEndN) >= gradientScaled; doneP = abs(lumaEndP) >= gradientScaled; if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P5; if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P5; doneNP = (!doneN) || (!doneP); if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P5; if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P5; /*--------------------------------------------------------------------------*/ #if (FXAA_QUALITY_PS > 6) if(doneNP) { if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; doneN = abs(lumaEndN) >= gradientScaled; doneP = abs(lumaEndP) >= gradientScaled; if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P6; if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P6; doneNP = (!doneN) || (!doneP); if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P6; if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P6; /*--------------------------------------------------------------------------*/ #if (FXAA_QUALITY_PS > 7) if(doneNP) { if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; doneN = abs(lumaEndN) >= gradientScaled; doneP = abs(lumaEndP) >= gradientScaled; if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P7; if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P7; doneNP = (!doneN) || (!doneP); if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P7; if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P7; /*--------------------------------------------------------------------------*/ #if (FXAA_QUALITY_PS > 8) if(doneNP) { if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; doneN = abs(lumaEndN) >= gradientScaled; doneP = abs(lumaEndP) >= gradientScaled; if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P8; if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P8; doneNP = (!doneN) || (!doneP); if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P8; if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P8; /*--------------------------------------------------------------------------*/ #if (FXAA_QUALITY_PS > 9) if(doneNP) { if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; doneN = abs(lumaEndN) >= gradientScaled; doneP = abs(lumaEndP) >= gradientScaled; if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P9; if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P9; doneNP = (!doneN) || (!doneP); if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P9; if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P9; /*--------------------------------------------------------------------------*/ #if (FXAA_QUALITY_PS > 10) if(doneNP) { if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; doneN = abs(lumaEndN) >= gradientScaled; doneP = abs(lumaEndP) >= gradientScaled; if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P10; if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P10; doneNP = (!doneN) || (!doneP); if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P10; if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P10; /*--------------------------------------------------------------------------*/ #if (FXAA_QUALITY_PS > 11) if(doneNP) { if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; doneN = abs(lumaEndN) >= gradientScaled; doneP = abs(lumaEndP) >= gradientScaled; if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P11; if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P11; doneNP = (!doneN) || (!doneP); if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P11; if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P11; /*--------------------------------------------------------------------------*/ #if (FXAA_QUALITY_PS > 12) if(doneNP) { if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; doneN = abs(lumaEndN) >= gradientScaled; doneP = abs(lumaEndP) >= gradientScaled; if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P12; if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P12; doneNP = (!doneN) || (!doneP); if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P12; if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P12; /*--------------------------------------------------------------------------*/ } #endif /*--------------------------------------------------------------------------*/ } #endif /*--------------------------------------------------------------------------*/ } #endif /*--------------------------------------------------------------------------*/ } #endif /*--------------------------------------------------------------------------*/ } #endif /*--------------------------------------------------------------------------*/ } #endif /*--------------------------------------------------------------------------*/ } #endif /*--------------------------------------------------------------------------*/ } #endif /*--------------------------------------------------------------------------*/ } #endif /*--------------------------------------------------------------------------*/ } #endif /*--------------------------------------------------------------------------*/ } /*--------------------------------------------------------------------------*/ FxaaFloat dstN = posM.x - posN.x; FxaaFloat dstP = posP.x - posM.x; if(!horzSpan) dstN = posM.y - posN.y; if(!horzSpan) dstP = posP.y - posM.y; /*--------------------------------------------------------------------------*/ FxaaBool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero; FxaaFloat spanLength = (dstP + dstN); FxaaBool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero; FxaaFloat spanLengthRcp = 1.0/spanLength; /*--------------------------------------------------------------------------*/ FxaaBool directionN = dstN < dstP; FxaaFloat dst = min(dstN, dstP); FxaaBool goodSpan = directionN ? goodSpanN : goodSpanP; FxaaFloat subpixG = subpixF * subpixF; FxaaFloat pixelOffset = (dst * (-spanLengthRcp)) + 0.5; FxaaFloat subpixH = subpixG * fxaaQualitySubpix; /*--------------------------------------------------------------------------*/ FxaaFloat pixelOffsetGood = goodSpan ? pixelOffset : 0.0; FxaaFloat pixelOffsetSubpix = max(pixelOffsetGood, subpixH); if(!horzSpan) posM.x += pixelOffsetSubpix * lengthSign; if( horzSpan) posM.y += pixelOffsetSubpix * lengthSign; return FxaaFloat4(FxaaTexTop(tex, posM).xyz, lumaM); } `;var L9i=_(T(),1);function JT(){this._uniformMap=void 0,this._command=void 0,this._colorTexture=void 0,this._depthTexture=void 0,this._ready=!1,this._name="czm_autoexposure",this._logDepthChanged=void 0,this._useLogDepth=void 0,this._framebuffers=void 0,this._previousLuminance=new fi,this._commands=void 0,this._clearCommand=void 0,this._minMaxLuminance=new U,this.enabled=!0,this._enabled=!0,this.minimumLuminance=.1,this.maximumLuminance=10}Object.defineProperties(JT.prototype,{ready:{get:function(){return this._ready}},name:{get:function(){return this._name}},outputTexture:{get:function(){let e=this._framebuffers;if(l(e))return e[e.length-1].getColorTexture(0)}}});function n_e(e){let t=e._framebuffers;if(!l(t))return;let n=t.length;for(let i=0;i<n;++i)t[i].destroy();e._framebuffers=void 0,e._previousLuminance.destroy(),e._previousLuminance=void 0}function Zft(e,t){n_e(e);let n=e._width,i=e._height,o=t.halfFloatingPointTexture?je.HALF_FLOAT:je.FLOAT,r=Math.ceil(Math.log(Math.max(n,i))/Math.log(3)),s=new Array(r);for(let c=0;c<r;++c)n=Math.max(Math.ceil(n/3),1),i=Math.max(Math.ceil(i/3),1),s[c]=new fi,s[c].update(t,n,i,1,o);let a=s[r-1].getColorTexture(0);e._previousLuminance.update(t,a.width,a.height,1,o),e._framebuffers=s}function i_e(e){let t=e._commands;if(!l(t))return;let n=t.length;for(let i=0;i<n;++i)t[i].shaderProgram.destroy();e._commands=void 0}function Gft(e,t){let n;if(t===0)n={colorTexture:function(){return e._colorTexture},colorTextureDimensions:function(){return e._colorTexture.dimensions}};else{let i=e._framebuffers[t-1].getColorTexture(0);n={colorTexture:function(){return i},colorTextureDimensions:function(){return i.dimensions}}}return n.minMaxLuminance=function(){return e._minMaxLuminance},n.previousLuminance=function(){return e._previousLuminance.getColorTexture(0)},n}function Eft(e,t){let n=`uniform sampler2D colorTexture; in vec2 v_textureCoordinates; float sampleTexture(vec2 offset) { `;return e===0?n+=` vec4 color = texture(colorTexture, v_textureCoordinates + offset); return czm_luminance(color.rgb); `:n+=` return texture(colorTexture, v_textureCoordinates + offset).r; `,n+=`} `,n+=`uniform vec2 colorTextureDimensions; uniform vec2 minMaxLuminance; uniform sampler2D previousLuminance; void main() { float color = 0.0; float xStep = 1.0 / colorTextureDimensions.x; float yStep = 1.0 / colorTextureDimensions.y; int count = 0; for (int i = 0; i < 3; ++i) { for (int j = 0; j < 3; ++j) { vec2 offset; offset.x = -xStep + float(i) * xStep; offset.y = -yStep + float(j) * yStep; if (offset.x < 0.0 || offset.x > 1.0 || offset.y < 0.0 || offset.y > 1.0) { continue; } color += sampleTexture(offset); ++count; } } if (count > 0) { color /= float(count); } `,e===t-1&&(n+=` float previous = texture(previousLuminance, vec2(0.5)).r; color = clamp(color, minMaxLuminance.x, minMaxLuminance.y); color = previous + (color - previous) / (60.0 * 1.5); color = clamp(color, minMaxLuminance.x, minMaxLuminance.y); `),n+=` out_FragColor = vec4(color); } `,n}function Ift(e,t){i_e(e);let n=e._framebuffers,i=n.length,o=new Array(i);for(let r=0;r<i;++r)o[r]=t.createViewportQuadCommand(Eft(r,i),{framebuffer:n[r].framebuffer,uniformMap:Gft(e,r)});e._commands=o}JT.prototype.clear=function(e){let t=this._framebuffers;if(!l(t))return;let n=this._clearCommand;l(n)||(n=this._clearCommand=new ti({color:new D(0,0,0,0),framebuffer:void 0}));let i=t.length;for(let o=0;o<i;++o)t[o].clear(e,n)};JT.prototype.update=function(e){let t=e.drawingBufferWidth,n=e.drawingBufferHeight;(t!==this._width||n!==this._height)&&(this._width=t,this._height=n,Zft(this,e),Ift(this,e),this._ready||(this._ready=!0)),this._minMaxLuminance.x=this.minimumLuminance,this._minMaxLuminance.y=this.maximumLuminance;let i=this._framebuffers,o=i[i.length-1];i[i.length-1]=this._previousLuminance,this._commands[this._commands.length-1].framebuffer=this._previousLuminance.framebuffer,this._previousLuminance=o};JT.prototype.execute=function(e,t){this._colorTexture=t;let n=this._commands;if(!l(n))return;let i=n.length;for(let o=0;o<i;++o)n[o].execute(e)};JT.prototype.isDestroyed=function(){return!1};JT.prototype.destroy=function(){return n_e(this),i_e(this),me(this)};var c9=JT;var K9i=_(T(),1);var Z9i=_(T(),1),Xft={NEAREST:0,LINEAR:1},eu=Xft;function QT(e){e=e??Y.EMPTY_OBJECT;let{name:t=zn(),fragmentShader:n,uniforms:i,textureScale:o=1,forcePowerOfTwo:r=!1,sampleMode:s=eu.NEAREST,pixelFormat:a=it.RGBA,pixelDatatype:c=je.UNSIGNED_BYTE,clearColor:d=D.BLACK,scissorRectangle:u}=e;this._fragmentShader=n,this._uniforms=i,this._textureScale=o,this._forcePowerOfTwo=r,this._sampleMode=s,this._pixelFormat=a,this._pixelDatatype=c,this._clearColor=d,this._uniformMap=void 0,this._command=void 0,this._colorTexture=void 0,this._depthTexture=void 0,this._idTexture=void 0,this._actualUniforms={},this._dirtyUniforms=[],this._texturesToRelease=[],this._texturesToCreate=[],this._texturePromise=void 0;let h=new sc;h.scissorTest={enabled:!0,rectangle:l(u)?Ke.clone(u):new Ke},this._passState=h,this._ready=!1,this._name=t,this._logDepthChanged=void 0,this._useLogDepth=void 0,this._selectedIdTexture=void 0,this._selected=void 0,this._selectedShadow=void 0,this._parentSelected=void 0,this._parentSelectedShadow=void 0,this._combinedSelected=void 0,this._combinedSelectedShadow=void 0,this._selectedLength=0,this._parentSelectedLength=0,this._selectedDirty=!0,this._textureCache=void 0,this._index=void 0,this.enabled=!0,this._enabled=!0}Object.defineProperties(QT.prototype,{ready:{get:function(){return this._ready}},name:{get:function(){return this._name}},fragmentShader:{get:function(){return this._fragmentShader}},uniforms:{get:function(){return this._uniforms}},textureScale:{get:function(){return this._textureScale}},forcePowerOfTwo:{get:function(){return this._forcePowerOfTwo}},sampleMode:{get:function(){return this._sampleMode}},pixelFormat:{get:function(){return this._pixelFormat}},pixelDatatype:{get:function(){return this._pixelDatatype}},clearColor:{get:function(){return this._clearColor}},scissorRectangle:{get:function(){return this._passState.scissorTest.rectangle}},outputTexture:{get:function(){if(l(this._textureCache)){let e=this._textureCache.getFramebuffer(this._name);if(l(e))return e.getColorTexture(0)}}},selected:{get:function(){return this._selected},set:function(e){this._selected=e}},parentSelected:{get:function(){return this._parentSelected},set:function(e){this._parentSelected=e}}});var Wft=/uniform\s+sampler2D\s+depthTexture/g;QT.prototype._isSupported=function(e){return!Wft.test(this._fragmentShader)||e.depthTexture};function Pft(e,t,n){let i=t[n];return(typeof i=="string"||i instanceof HTMLCanvasElement||i instanceof HTMLImageElement||i instanceof HTMLVideoElement||i instanceof ImageData)&&e._dirtyUniforms.push(n),{get:function(){return t[n]},set:function(o){let r=t[n];t[n]=o;let s=e._actualUniforms,a=s[n];l(a)&&a!==r&&a instanceof vt&&!l(e._textureCache.getStageByName(n))&&(e._texturesToRelease.push(a),delete s[n],delete s[`${n}Dimensions`]),r instanceof vt&&e._texturesToRelease.push(r),typeof o=="string"||o instanceof HTMLCanvasElement||o instanceof HTMLImageElement||o instanceof HTMLVideoElement||o instanceof ImageData?e._dirtyUniforms.push(n):s[n]=o}}}function vft(e,t){return function(){let n=e._actualUniforms[t];return typeof n=="function"?n():n}}function wft(e,t){return function(){let n=e[t]();if(l(n))return n.dimensions}}function Fft(e){if(l(e._uniformMap))return;let t={},n={},i=e._uniforms,o=e._actualUniforms;for(let r in i){if(!i.hasOwnProperty(r))continue;typeof i[r]!="function"?(t[r]=vft(e,r),n[r]=Pft(e,i,r)):(t[r]=i[r],n[r]=i[r]),o[r]=i[r];let s=t[r]();(typeof s=="string"||s instanceof vt||s instanceof HTMLImageElement||s instanceof HTMLCanvasElement||s instanceof HTMLVideoElement)&&(t[`${r}Dimensions`]=wft(t,r))}e._uniforms={},Object.defineProperties(e._uniforms,n),e._uniformMap=St(t,{colorTexture:function(){return e._colorTexture},colorTextureDimensions:function(){return e._colorTexture.dimensions},depthTexture:function(){return e._depthTexture},depthTextureDimensions:function(){return e._depthTexture.dimensions},czm_idTexture:function(){return e._idTexture},czm_selectedIdTexture:function(){return e._selectedIdTexture},czm_selectedIdTextureStep:function(){return 1/e._selectedIdTexture.width}})}function Aft(e,t){return e=e.replace(/in\s+vec2\s+v_textureCoordinates;/g,""),`#define CZM_SELECTED_FEATURE uniform sampler2D czm_idTexture; uniform sampler2D czm_selectedIdTexture; uniform float czm_selectedIdTextureStep; in vec2 v_textureCoordinates; bool czm_selected(vec2 offset) { bool selected = false; vec4 id = texture(czm_idTexture, v_textureCoordinates + offset); for (int i = 0; i < ${t}; ++i) { vec4 selectedId = texture(czm_selectedIdTexture, vec2((float(i) + 0.5) * czm_selectedIdTextureStep, 0.5)); if (all(equal(id, selectedId))) { return true; } } return false; } bool czm_selected() { return czm_selected(vec2(0.0)); } ${e}`}function Mft(e,t){if(l(e._command)&&!e._logDepthChanged&&!e._selectedDirty)return;let n=e._fragmentShader;if(l(e._selectedIdTexture)){let o=e._selectedIdTexture.width;n=Aft(n,o)}let i=new De({defines:[e._useLogDepth?"LOG_DEPTH":""],sources:[n]});e._command=t.createViewportQuadCommand(i,{uniformMap:e._uniformMap,owner:e})}function Nft(e){let t=e._sampleMode,n,i;t===eu.LINEAR?(n=jt.LINEAR,i=hi.LINEAR):(n=jt.NEAREST,i=hi.NEAREST);let o=e._sampler;(!l(o)||o.minificationFilter!==n||o.magnificationFilter!==i)&&(e._sampler=new qt({wrapS:Vn.CLAMP_TO_EDGE,wrapT:Vn.CLAMP_TO_EDGE,minificationFilter:n,magnificationFilter:i}))}function kft(e,t){return function(n){e._texturesToCreate.push({name:t,source:n})}}function Uft(e,t){return function(){return e._textureCache.getOutputTexture(t)}}function Dft(e,t){let n=e._texturesToRelease;for(let a=0;a<n.length;++a){let c=n[a];c=c&&c.destroy()}n.length=0;let i=e._texturesToCreate;for(let a=0;a<i.length;++a){let{name:c,source:d}=i[a];e._actualUniforms[c]=new vt({context:t,source:d})}i.length=0;let o=e._dirtyUniforms;if(o.length===0&&!l(e._texturePromise)){e._ready=!0;return}if(o.length===0||l(e._texturePromise))return;let r=e._uniforms,s=[];for(let a=0;a<o.length;++a){let c=o[a],d=r[c],u=e._textureCache.getStageByName(d);if(l(u))e._actualUniforms[c]=Uft(e,d);else if(typeof d=="string"){let h=new Ze({url:d});s.push(h.fetchImage().then(kft(e,c)))}else e._texturesToCreate.push({name:c,source:d})}o.length=0,s.length>0?(e._ready=!1,e._texturePromise=Promise.all(s).then(function(){e._ready=!0,e._texturePromise=void 0})):e._ready=!0}function o_e(e){l(e._command)&&(e._command.shaderProgram=e._command.shaderProgram&&e._command.shaderProgram.destroy(),e._command=void 0),e._selectedIdTexture=e._selectedIdTexture&&e._selectedIdTexture.destroy();let t=e._textureCache;if(!l(t))return;let n=e._uniforms,i=e._actualUniforms;for(let o in i){if(!i.hasOwnProperty(o))continue;let r=i[o];r instanceof vt&&(l(t.getStageByName(n[o]))||r.destroy(),e._dirtyUniforms.push(o))}}function Bft(e){let t=l(e._selected)?e._selected.length:0,n=l(e._parentSelected)?e._parentSelected:0,i=e._selected!==e._selectedShadow||t!==e._selectedLength||e._parentSelected!==e._parentSelectedShadow||n!==e._parentSelectedLength;if(l(e._selected)&&l(e._parentSelected)?e._combinedSelected=e._selected.concat(e._parentSelected):l(e._parentSelected)?e._combinedSelected=e._parentSelected:e._combinedSelected=e._selected,!i&&l(e._combinedSelected)){if(!l(e._combinedSelectedShadow))return!0;for(let o=0;o<e._combinedSelected.length;++o)if(e._combinedSelected[o]!==e._combinedSelectedShadow[o])return!0}return i}function Oft(e,t){if(!e._selectedDirty)return;e._selectedIdTexture=e._selectedIdTexture&&e._selectedIdTexture.destroy(),e._selectedIdTexture=void 0;let n=e._combinedSelected;if(!l(n))return;let i=0;for(let s=0;s<n.length;++s){let a=n[s];l(a.pickIds)?i+=a.pickIds.length:l(a.pickId)&&++i}if(n.length===0||i===0){let s=new Uint8Array([255,255,255,255]);e._selectedIdTexture=new vt({context:t,pixelFormat:it.RGBA,pixelDatatype:je.UNSIGNED_BYTE,source:{arrayBufferView:s,width:1,height:1},sampler:qt.NEAREST});return}let o=0,r=new Uint8Array(i*4);for(let s=0;s<n.length;++s){let a=n[s];if(l(a.pickIds)){let c=a.pickIds,d=c.length;for(let u=0;u<d;++u){let h=c[u].color;r[o]=D.floatToByte(h.red),r[o+1]=D.floatToByte(h.green),r[o+2]=D.floatToByte(h.blue),r[o+3]=D.floatToByte(h.alpha),o+=4}}else if(l(a.pickId)){let c=a.pickId.color;r[o]=D.floatToByte(c.red),r[o+1]=D.floatToByte(c.green),r[o+2]=D.floatToByte(c.blue),r[o+3]=D.floatToByte(c.alpha),o+=4}}e._selectedIdTexture=new vt({context:t,pixelFormat:it.RGBA,pixelDatatype:je.UNSIGNED_BYTE,source:{arrayBufferView:r,width:i,height:1},sampler:qt.NEAREST})}QT.prototype.update=function(e,t){if(this.enabled!==this._enabled&&!this.enabled&&o_e(this),this._enabled=this.enabled,!this._enabled||(this._logDepthChanged=t!==this._useLogDepth,this._useLogDepth=t,this._selectedDirty=Bft(this),this._selectedShadow=this._selected,this._parentSelectedShadow=this._parentSelected,this._combinedSelectedShadow=this._combinedSelected,this._selectedLength=l(this._selected)?this._selected.length:0,this._parentSelectedLength=l(this._parentSelected)?this._parentSelected.length:0,Oft(this,e),Fft(this),Dft(this,e),Mft(this,e),Nft(this),this._selectedDirty=!1,!this._ready))return;let n=this._textureCache.getFramebuffer(this._name);if(this._command.framebuffer=n,!l(n))return;let i=n.getColorTexture(0),o;(i.width!==e.drawingBufferWidth||i.height!==e.drawingBufferHeight)&&(o=this._renderState,(!l(o)||i.width!==o.viewport.width||i.height!==o.viewport.height)&&(this._renderState=Ue.fromCache({viewport:new Ke(0,0,i.width,i.height)}))),this._command.renderState=o};QT.prototype.execute=function(e,t,n,i){if(!l(this._command)||!l(this._command.framebuffer)||!this._ready||!this._enabled)return;this._colorTexture=t,this._depthTexture=n,this._idTexture=i,qt.equals(this._colorTexture.sampler,this._sampler)||(this._colorTexture.sampler=this._sampler);let o=this.scissorRectangle.width>0&&this.scissorRectangle.height>0?this._passState:void 0;l(o)&&(o.context=e),this._command.execute(e,o)};QT.prototype.isDestroyed=function(){return!1};QT.prototype.destroy=function(){return o_e(this),me(this)};var ho=QT;var eAi=_(T(),1);function jT(e){e=e??Y.EMPTY_OBJECT,this._stages=e.stages,this._inputPreviousStageTexture=e.inputPreviousStageTexture??!0;let t=e.name;l(t)||(t=zn()),this._name=t,this._uniforms=e.uniforms,this._textureCache=void 0,this._index=void 0,this._selected=void 0,this._selectedShadow=void 0,this._parentSelected=void 0,this._parentSelectedShadow=void 0,this._combinedSelected=void 0,this._combinedSelectedShadow=void 0,this._selectedLength=0,this._parentSelectedLength=0,this._selectedDirty=!0}Object.defineProperties(jT.prototype,{ready:{get:function(){let e=this._stages,t=e.length;for(let n=0;n<t;++n)if(!e[n].ready)return!1;return!0}},name:{get:function(){return this._name}},enabled:{get:function(){return this._stages[0].enabled},set:function(e){let t=this._stages,n=t.length;for(let i=0;i<n;++i)t[i].enabled=e}},uniforms:{get:function(){return this._uniforms}},inputPreviousStageTexture:{get:function(){return this._inputPreviousStageTexture}},length:{get:function(){return this._stages.length}},selected:{get:function(){return this._selected},set:function(e){this._selected=e}},parentSelected:{get:function(){return this._parentSelected},set:function(e){this._parentSelected=e}}});jT.prototype._isSupported=function(e){let t=this._stages,n=t.length;for(let i=0;i<n;++i)if(!t[i]._isSupported(e))return!1;return!0};jT.prototype.get=function(e){return this._stages[e]};function Yft(e){let t=l(e._selected)?e._selected.length:0,n=l(e._parentSelected)?e._parentSelected:0,i=e._selected!==e._selectedShadow||t!==e._selectedLength;if(i=i||e._parentSelected!==e._parentSelectedShadow||n!==e._parentSelectedLength,l(e._selected)&&l(e._parentSelected)?e._combinedSelected=e._selected.concat(e._parentSelected):l(e._parentSelected)?e._combinedSelected=e._parentSelected:e._combinedSelected=e._selected,!i&&l(e._combinedSelected)){if(!l(e._combinedSelectedShadow))return!0;t=e._combinedSelected.length;for(let o=0;o<t;++o)if(e._combinedSelected[o]!==e._combinedSelectedShadow[o])return!0}return i}jT.prototype.update=function(e,t){this._selectedDirty=Yft(this),this._selectedShadow=this._selected,this._parentSelectedShadow=this._parentSelected,this._combinedSelectedShadow=this._combinedSelected,this._selectedLength=l(this._selected)?this._selected.length:0,this._parentSelectedLength=l(this._parentSelected)?this._parentSelected.length:0;let n=this._stages,i=n.length;for(let o=0;o<i;++o){let r=n[o];this._selectedDirty&&(r.parentSelected=this._combinedSelected),r.update(e,t)}};jT.prototype.isDestroyed=function(){return!1};jT.prototype.destroy=function(){let e=this._stages,t=e.length;for(let n=0;n<t;++n)e[n].destroy();return me(this)};var od=jT;var Zr={};function Jj(e){let o=`#define USE_STEP_SIZE ${Py}`,r=new ho({name:`${e}_x_direction`,fragmentShader:o,uniforms:{delta:1,sigma:2,stepSize:1,direction:0},sampleMode:eu.LINEAR}),s=new ho({name:`${e}_y_direction`,fragmentShader:o,uniforms:{delta:1,sigma:2,stepSize:1,direction:1},sampleMode:eu.LINEAR}),a={};return Object.defineProperties(a,{delta:{get:function(){return r.uniforms.delta},set:function(c){let d=r.uniforms,u=s.uniforms;d.delta=u.delta=c}},sigma:{get:function(){return r.uniforms.sigma},set:function(c){let d=r.uniforms,u=s.uniforms;d.sigma=u.sigma=c}},stepSize:{get:function(){return r.uniforms.stepSize},set:function(c){let d=r.uniforms,u=s.uniforms;d.stepSize=u.stepSize=c}}}),new od({name:e,stages:[r,s],uniforms:a})}Zr.createBlurStage=function(){return Jj("czm_blur")};Zr.createDepthOfFieldStage=function(){let e=Jj("czm_depth_of_field_blur"),t=new ho({name:"czm_depth_of_field_composite",fragmentShader:QF,uniforms:{focalDistance:5,blurTexture:e.name}}),n={};return Object.defineProperties(n,{focalDistance:{get:function(){return t.uniforms.focalDistance},set:function(i){t.uniforms.focalDistance=i}},delta:{get:function(){return e.uniforms.delta},set:function(i){e.uniforms.delta=i}},sigma:{get:function(){return e.uniforms.sigma},set:function(i){e.uniforms.sigma=i}},stepSize:{get:function(){return e.uniforms.stepSize},set:function(i){e.uniforms.stepSize=i}}}),new od({name:"czm_depth_of_field",stages:[e,t],inputPreviousStageTexture:!1,uniforms:n})};Zr.isDepthOfFieldSupported=function(e){return e.context.depthTexture};Zr.createEdgeDetectionStage=function(){let e=zn();return new ho({name:`czm_edge_detection_${e}`,fragmentShader:qF,uniforms:{length:.25,color:D.clone(D.BLACK)}})};Zr.isEdgeDetectionSupported=function(e){return e.context.depthTexture};function zft(e){if(!l(e))return Zr.createEdgeDetectionStage();let t=new od({name:"czm_edge_detection_multiple",stages:e,inputPreviousStageTexture:!1}),n={},i="",o="";for(let a=0;a<e.length;++a)i+=`uniform sampler2D edgeTexture${a}; `,o+=` vec4 edge${a} = texture(edgeTexture${a}, v_textureCoordinates); if (edge${a}.a > 0.0) { color = edge${a}; break; } `,n[`edgeTexture${a}`]=e[a].name;let r=`${i}in vec2 v_textureCoordinates; void main() { vec4 color = vec4(0.0); for (int i = 0; i < ${e.length}; i++) { ${o} } out_FragColor = color; } `,s=new ho({name:"czm_edge_detection_combine",fragmentShader:r,uniforms:n});return new od({name:"czm_edge_detection_composite",stages:[t,s]})}Zr.createSilhouetteStage=function(e){let t=zft(e),n=new ho({name:"czm_silhouette_color_edges",fragmentShader:s9,uniforms:{silhouetteTexture:t.name}});return new od({name:"czm_silhouette",stages:[t,n],inputPreviousStageTexture:!1,uniforms:t.uniforms})};Zr.isSilhouetteSupported=function(e){return e.context.depthTexture};Zr.createBloomStage=function(){let e=new ho({name:"czm_bloom_contrast_bias",fragmentShader:JF,uniforms:{contrast:128,brightness:-.3}}),t=Jj("czm_bloom_blur"),n=new od({name:"czm_bloom_contrast_bias_blur",stages:[e,t]}),i=new ho({name:"czm_bloom_generate_composite",fragmentShader:HF,uniforms:{glowOnly:!1,bloomTexture:n.name}}),o={};return Object.defineProperties(o,{glowOnly:{get:function(){return i.uniforms.glowOnly},set:function(r){i.uniforms.glowOnly=r}},contrast:{get:function(){return e.uniforms.contrast},set:function(r){e.uniforms.contrast=r}},brightness:{get:function(){return e.uniforms.brightness},set:function(r){e.uniforms.brightness=r}},delta:{get:function(){return t.uniforms.delta},set:function(r){t.uniforms.delta=r}},sigma:{get:function(){return t.uniforms.sigma},set:function(r){t.uniforms.sigma=r}},stepSize:{get:function(){return t.uniforms.stepSize},set:function(r){t.uniforms.stepSize=r}}}),new od({name:"czm_bloom",stages:[n,i],inputPreviousStageTexture:!1,uniforms:o})};Zr.createAmbientOcclusionStage=function(){let e=new ho({name:"czm_ambient_occlusion_generate",fragmentShader:OF,uniforms:{intensity:3,bias:.1,lengthCap:.26,directionCount:8,stepCount:32,randomTexture:void 0}}),t=new ho({name:"czm_ambient_occlusion_composite",fragmentShader:YF,uniforms:{ambientOcclusionOnly:!1,ambientOcclusionTexture:e.name}}),n={};return Object.defineProperties(n,{intensity:{get:function(){return e.uniforms.intensity},set:function(i){e.uniforms.intensity=i}},bias:{get:function(){return e.uniforms.bias},set:function(i){e.uniforms.bias=i}},lengthCap:{get:function(){return e.uniforms.lengthCap},set:function(i){e.uniforms.lengthCap=i}},directionCount:{get:function(){return e.uniforms.directionCount},set:function(i){e.uniforms.directionCount=i}},stepCount:{get:function(){return e.uniforms.stepCount},set:function(i){e.uniforms.stepCount=i}},randomTexture:{get:function(){return e.uniforms.randomTexture},set:function(i){e.uniforms.randomTexture=i}},ambientOcclusionOnly:{get:function(){return t.uniforms.ambientOcclusionOnly},set:function(i){t.uniforms.ambientOcclusionOnly=i}}}),new od({name:"czm_ambient_occlusion",stages:[e,t],inputPreviousStageTexture:!1,uniforms:n})};Zr.isAmbientOcclusionSupported=function(e){return e.context.depthTexture};var Hft=`#define FXAA_QUALITY_PRESET 39 ${a9} ${t9}`;Zr.createFXAAStage=function(){return new ho({name:"czm_FXAA",fragmentShader:Hft,sampleMode:eu.LINEAR})};Zr.createAcesTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE `:"";return t+=BF,new ho({name:"czm_aces",fragmentShader:t,uniforms:{autoExposure:void 0,exposure:1}})};Zr.createFilmicTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE `:"";return t+=$F,new ho({name:"czm_filmic",fragmentShader:t,uniforms:{autoExposure:void 0,exposure:1}})};Zr.createPbrNeutralTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE `:"";return t+=e9,new ho({name:"czm_pbr_neutral",fragmentShader:t,uniforms:{autoExposure:void 0,exposure:1}})};Zr.createReinhardTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE `:"";return t+=r9,new ho({name:"czm_reinhard",fragmentShader:t,uniforms:{autoExposure:void 0,exposure:1}})};Zr.createModifiedReinhardTonemappingStage=function(e){let t=e?`#define AUTO_EXPOSURE `:"";return t+=i9,new ho({name:"czm_modified_reinhard",fragmentShader:t,uniforms:{white:D.WHITE,autoExposure:void 0,exposure:1}})};Zr.createAutoExposureStage=function(){return new c9};Zr.createBlackAndWhiteStage=function(){return new ho({name:"czm_black_and_white",fragmentShader:zF,uniforms:{gradations:5}})};Zr.createBrightnessStage=function(){return new ho({name:"czm_brightness",fragmentShader:KF,uniforms:{brightness:.5}})};Zr.createNightVisionStage=function(){return new ho({name:"czm_night_vision",fragmentShader:o9})};Zr.createDepthViewStage=function(){return new ho({name:"czm_depth_view",fragmentShader:jF})};Zr.createLensFlareStage=function(){return new ho({name:"czm_lens_flare",fragmentShader:n9,uniforms:{dirtTexture:nn("Assets/Textures/LensFlare/DirtMask.jpg"),starTexture:nn("Assets/Textures/LensFlare/StarBurst.jpg"),intensity:2,distortion:10,ghostDispersal:.4,haloWidth:.4,dirtAmount:.4,earthRadius:ne.WGS84.maximumRadius}})};var tu=Zr;var NAi=_(T(),1);function x0(e){this._collection=e,this._framebuffers=[],this._stageNameToFramebuffer={},this._width=void 0,this._height=void 0,this._updateDependencies=!1}function d9(e){for(;l(e.length);)e=e.get(e.length-1);return e.name}function Qj(e,t,n,i,o){if(!i.enabled||!i._isSupported(t))return o;let r=n[i.name]={};if(l(o)){let a=e.getStageByName(o);r[d9(a)]=!0}let s=i.uniforms;if(l(s)){let a=Object.getOwnPropertyNames(s),c=a.length;for(let d=0;d<c;++d){let u=s[a[d]];if(typeof u=="string"){let h=e.getStageByName(u);l(h)&&(r[d9(h)]=!0)}}}return i.name}function l9(e,t,n,i,o){if(l(i.enabled)&&!i.enabled||l(i._isSupported)&&!i._isSupported(t))return o;let r=o,s=!l(i.inputPreviousStageTexture)||i.inputPreviousStageTexture,a=o,c=i.length;for(let h=0;h<c;++h){let p=i.get(h);l(p.length)?a=l9(e,t,n,p,o):a=Qj(e,t,n,p,o),s&&(o=a)}let d,u;if(s)for(d=1;d<c;++d)u=d9(i.get(d)),l(n[u])||(n[u]={}),n[u][r]=!0;else for(d=1;d<c;++d){u=d9(i.get(d));let h=n[u];for(let p=0;p<d;++p)h[d9(i.get(p))]=!0}return a}function Kft(e,t){let n={};if(l(e.ambientOcclusion)){let i=e.ambientOcclusion,o=e.bloom,r=e._tonemapping,s=e.fxaa,a=l9(e,t,n,i,void 0);a=l9(e,t,n,o,a),a=Qj(e,t,n,r,a),a=l9(e,t,n,e,a),Qj(e,t,n,s,a)}else l9(e,t,n,e,void 0);return n}function Jft(e,t,n){let o=e._collection.getStageByName(t),r=o._textureScale,s=o._forcePowerOfTwo,a=o._pixelFormat,c=o._pixelDatatype,d=o._clearColor,u,h,p=e._framebuffers,g=p.length;for(u=0;u<g;++u){if(h=p[u],r!==h.textureScale||s!==h.forcePowerOfTwo||a!==h.pixelFormat||c!==h.pixelDatatype||!D.equals(d,h.clearColor))continue;let f=h.stages,y=f.length,x=!1;for(let S=0;S<y;++S)if(n[f[S]]){x=!0;break}if(!x)break}return l(h)&&u<g?(h.stages.push(t),h):(h={textureScale:r,forcePowerOfTwo:s,pixelFormat:a,pixelDatatype:c,clearColor:d,stages:[t],buffer:new fi({pixelFormat:a,pixelDatatype:c}),clear:void 0},p.push(h),h)}function Qft(e,t){let n=Kft(e._collection,t);for(let i in n)n.hasOwnProperty(i)&&(e._stageNameToFramebuffer[i]=Jft(e,i,n[i]))}function jj(e){let t=e._framebuffers,n=t.length;for(let i=0;i<n;++i)t[i].buffer.destroy()}function jft(e,t){let n=e._width,i=e._height,o=e._framebuffers,r=o.length;for(let s=0;s<r;++s){let a=o[s],c=a.textureScale,d=Math.ceil(n*c),u=Math.ceil(i*c),h=Math.min(d,u);a.forcePowerOfTwo&&(X.isPowerOfTwo(h)||(h=X.nextPowerOfTwo(h)),d=h,u=h),a.buffer.update(t,d,u),a.clear=new ti({color:a.clearColor,framebuffer:a.buffer.framebuffer})}}x0.prototype.updateDependencies=function(){this._updateDependencies=!0};x0.prototype.update=function(e){let t=this._collection,n=this._updateDependencies,i=l(t.ambientOcclusion)&&t.ambientOcclusion.enabled&&t.ambientOcclusion._isSupported(e),o=l(t.bloom)&&t.bloom.enabled&&t.bloom._isSupported(e),r=l(t._tonemapping)&&t._tonemapping.enabled&&t._tonemapping._isSupported(e),s=l(t.fxaa)&&t.fxaa.enabled&&t.fxaa._isSupported(e),a=!l(t._activeStages)||t._activeStages.length>0||i||o||r||s;if((n||!a&&this._framebuffers.length>0)&&(jj(this),this._framebuffers.length=0,this._stageNameToFramebuffer={},this._width=void 0,this._height=void 0),!n&&!a)return;this._framebuffers.length===0&&Qft(this,e);let c=e.drawingBufferWidth,d=e.drawingBufferHeight,u=this._width!==c||this._height!==d;!n&&!u||(this._width=c,this._height=d,this._updateDependencies=!1,jj(this),jft(this,e))};x0.prototype.clear=function(e){let t=this._framebuffers;for(let n=0;n<t.length;++n)t[n].clear.execute(e)};x0.prototype.getStageByName=function(e){return this._collection.getStageByName(e)};x0.prototype.getOutputTexture=function(e){return this._collection.getOutputTexture(e)};x0.prototype.getFramebuffer=function(e){let t=this._stageNameToFramebuffer[e];if(l(t))return t.buffer.framebuffer};x0.prototype.isDestroyed=function(){return!1};x0.prototype.destroy=function(){return jj(this),me(this)};var qT=x0;var UAi=_(T(),1),qft={REINHARD:"REINHARD",MODIFIED_REINHARD:"MODIFIED_REINHARD",FILMIC:"FILMIC",ACES:"ACES",PBR_NEUTRAL:"PBR_NEUTRAL"};var _0=Object.freeze(qft);var qj=[];function gl(){let e=tu.createFXAAStage(),t=tu.createAmbientOcclusionStage(),n=tu.createBloomStage();this._autoExposureEnabled=!1,this._autoExposure=tu.createAutoExposureStage(),this._exposure=1,this._tonemapping=void 0,this._tonemapper=void 0,this.tonemapper=_0.PBR_NEUTRAL;let i=this._tonemapping;e.enabled=!1,t.enabled=!1,n.enabled=!1,i.enabled=!1;let o=new qT(this),r={},s=qj;for(s.push(e,t,n,i);s.length>0;){let c=s.pop();r[c.name]=c,c._textureCache=o;let d=c.length;if(l(d))for(let u=0;u<d;++u)s.push(c.get(u))}this._stages=[],this._activeStages=[],this._previousActiveStages=[],this._randomTexture=void 0;let a=this;t.uniforms.randomTexture=function(){return a._randomTexture},this._ao=t,this._bloom=n,this._fxaa=e,this._aoEnabled=void 0,this._bloomEnabled=void 0,this._tonemappingEnabled=void 0,this._fxaaEnabled=void 0,this._activeStagesChanged=!1,this._stagesRemoved=!1,this._textureCacheDirty=!1,this._stageNames=r,this._textureCache=o}Object.defineProperties(gl.prototype,{ready:{get:function(){let e=!1,t=this._stages,n=t.length;for(let a=n-1;a>=0;--a){let c=t[a];e=e||c.ready&&c.enabled}let i=this._fxaa,o=this._ao,r=this._bloom,s=this._tonemapping;return e=e||i.ready&&i.enabled,e=e||o.ready&&o.enabled,e=e||r.ready&&r.enabled,e=e||s.ready&&s.enabled,e}},fxaa:{get:function(){return this._fxaa}},ambientOcclusion:{get:function(){return this._ao}},bloom:{get:function(){return this._bloom}},length:{get:function(){return $j(this),this._stages.length}},outputTexture:{get:function(){let e=this._fxaa;if(e.enabled&&e.ready)return this.getOutputTexture(e.name);let t=this._stages,n=t.length;for(let s=n-1;s>=0;--s){let a=t[s];if(l(a)&&a.ready&&a.enabled)return this.getOutputTexture(a.name)}let i=this._tonemapping;if(i.enabled&&i.ready)return this.getOutputTexture(i.name);let o=this._bloom;if(o.enabled&&o.ready)return this.getOutputTexture(o.name);let r=this._ao;if(r.enabled&&r.ready)return this.getOutputTexture(r.name)}},hasSelected:{get:function(){let e=this._stages.slice();for(;e.length>0;){let t=e.pop();if(!l(t))continue;if(l(t.selected))return!0;let n=t.length;if(l(n))for(let i=0;i<n;++i)e.push(t.get(i))}return!1}},tonemapper:{get:function(){return this._tonemapper},set:function(e){if(this._tonemapper===e)return;l(this._tonemapping)&&(delete this._stageNames[this._tonemapping.name],this._tonemapping.destroy());let t=this._autoExposureEnabled,n;switch(e){case _0.REINHARD:n=tu.createReinhardTonemappingStage(t);break;case _0.MODIFIED_REINHARD:n=tu.createModifiedReinhardTonemappingStage(t);break;case _0.FILMIC:n=tu.createFilmicTonemappingStage(t);break;case _0.PBR_NEUTRAL:n=tu.createPbrNeutralTonemappingStage(t);break;default:n=tu.createAcesTonemappingStage(t);break}if(t){let i=this._autoExposure;n.uniforms.autoExposure=function(){return i.outputTexture}}else n.uniforms.exposure=this._exposure;this._tonemapper=e,this._tonemapping=n,l(this._stageNames)&&(this._stageNames[n.name]=n,n._textureCache=this._textureCache),this._textureCacheDirty=!0}},exposure:{get:function(){return this._exposure},set:function(e){this._tonemapping.uniforms.exposure=e,this._exposure=e}}});function $j(e){if(!e._stagesRemoved)return;e._stagesRemoved=!1;let t=[],n=e._stages;for(let i=0,o=0;i<n.length;++i){let r=n[i];r&&(r._index=o++,t.push(r))}e._stages=t}gl.prototype.add=function(e){let t=this._stageNames,n=qj;for(n.push(e);n.length>0;){let o=n.pop();t[o.name]=o,o._textureCache=this._textureCache;let r=o.length;if(l(r))for(let s=0;s<r;++s)n.push(o.get(s))}let i=this._stages;return e._index=i.length,i.push(e),this._textureCacheDirty=!0,e};gl.prototype.remove=function(e){if(!this.contains(e))return!1;let t=this._stageNames,n=qj;for(n.push(e);n.length>0;){let i=n.pop();delete t[i.name];let o=i.length;if(l(o))for(let r=0;r<o;++r)n.push(i.get(r))}return this._stages[e._index]=void 0,this._stagesRemoved=!0,this._textureCacheDirty=!0,e._index=void 0,e._textureCache=void 0,e.destroy(),!0};gl.prototype.contains=function(e){return l(e)&&l(e._index)&&e._textureCache===this._textureCache};gl.prototype.get=function(e){return $j(this),this._stages[e]};gl.prototype.removeAll=function(){let e=this._stages,t=e.length;for(let n=0;n<t;++n)this.remove(e[n]);e.length=0};gl.prototype.getStageByName=function(e){return this._stageNames[e]};gl.prototype.update=function(e,t,n){$j(this);let i=this._activeStages,o=this._activeStages=this._previousActiveStages;this._previousActiveStages=i;let r=this._stages;o.length=r.length;let s=0;for(let S=0;S<r.length;++S){let C=r[S];C.ready&&C.enabled&&C._isSupported(e)&&(o[s++]=C)}o.length=s;let a=s!==i.length;if(!a){for(let S=0;S<s;++S)if(o[S]!==i[S]){a=!0;break}}let c=this._ao,d=this._bloom,u=this._autoExposure,h=this._tonemapping,p=this._fxaa;h.enabled=n;let g=c.enabled&&c._isSupported(e),f=d.enabled&&d._isSupported(e),y=h.enabled&&h._isSupported(e),x=p.enabled&&p._isSupported(e);if((a||this._textureCacheDirty||g!==this._aoEnabled||f!==this._bloomEnabled||y!==this._tonemappingEnabled||x!==this._fxaaEnabled)&&(this._textureCache.updateDependencies(),this._aoEnabled=g,this._bloomEnabled=f,this._tonemappingEnabled=y,this._fxaaEnabled=x,this._textureCacheDirty=!1),l(this._randomTexture)&&!g&&(this._randomTexture.destroy(),this._randomTexture=void 0),!l(this._randomTexture)&&g){let C=new Uint8Array(196608);for(let V=0;V<196608;V+=3)C[V]=Math.floor(Math.random()*255);this._randomTexture=new vt({context:e,pixelFormat:it.RGB,pixelDatatype:je.UNSIGNED_BYTE,source:{arrayBufferView:C,width:256,height:256},sampler:new qt({wrapS:Vn.REPEAT,wrapT:Vn.REPEAT,minificationFilter:jt.NEAREST,magnificationFilter:hi.NEAREST})})}this._textureCache.update(e),p.update(e,t),c.update(e,t),d.update(e,t),h.update(e,t),this._autoExposureEnabled&&u.update(e,t);for(let S=0;S<r.length;++S)r[S].update(e,t);s=0;for(let S=0;S<r.length;++S){let C=r[S];C.ready&&C.enabled&&C._isSupported(e)&&s++}a=s!==o.length,a&&this.update(e,t,n)};gl.prototype.clear=function(e){this._textureCache.clear(e),this._autoExposureEnabled&&this._autoExposure.clear(e)};function $T(e){for(;l(e.length);)e=e.get(e.length-1);return e.outputTexture}gl.prototype.getOutputTexture=function(e){let t=this.getStageByName(e);if(l(t))return $T(t)};function dp(e,t,n,i,o){if(l(e.execute)){e.execute(t,n,i,o);return}if(e.inputPreviousStageTexture){dp(e.get(0),t,n,i,o);for(let r=1;r<e.length;++r)dp(e.get(r),t,$T(e.get(r-1)),i,o)}else for(let r=0;r<e.length;++r)dp(e.get(r),t,n,i,o)}gl.prototype.execute=function(e,t,n,i){let o=this._activeStages,r=o.length,s=this._fxaa,a=this._ao,c=this._bloom,d=this._autoExposure,u=this._tonemapping,h=a.enabled&&a._isSupported(e),p=c.enabled&&c._isSupported(e),g=this._autoExposureEnabled,f=u.enabled&&u._isSupported(e),y=s.enabled&&s._isSupported(e);if(!y&&!h&&!p&&!f&&r===0)return;let x=t;h&&a.ready&&(dp(a,e,x,n,i),x=$T(a)),p&&c.ready&&(dp(c,e,x,n,i),x=$T(c)),g&&d.ready&&dp(d,e,x,n,i),f&&u.ready&&(dp(u,e,x,n,i),x=$T(u));let S=x;if(r>0){dp(o[0],e,x,n,i);for(let C=1;C<r;++C)dp(o[C],e,$T(o[C-1]),n,i);S=$T(o[r-1])}y&&s.ready&&dp(s,e,S,n,i)};gl.prototype.copy=function(e,t){if(!l(this._copyColorCommand)){let n=this;this._copyColorCommand=e.createViewportQuadCommand(id,{uniformMap:{colorTexture:function(){return n.outputTexture}},owner:this})}this._copyColorCommand.framebuffer=t,this._copyColorCommand.execute(e)};gl.prototype.isDestroyed=function(){return!1};gl.prototype.destroy=function(){return this._fxaa.destroy(),this._ao.destroy(),this._bloom.destroy(),this._autoExposure.destroy(),this._tonemapping.destroy(),this.removeAll(),this._textureCache=this._textureCache&&this._textureCache.destroy(),me(this)};var u9=gl;var wMi=_(T(),1);var gMi=_(T(),1);var rMi=_(T(),1),$ft={SHIFT:0,CTRL:1,ALT:2},ra=Object.freeze($ft);var aMi=_(T(),1),ept={LEFT_DOWN:0,LEFT_UP:1,LEFT_CLICK:2,LEFT_DOUBLE_CLICK:3,RIGHT_DOWN:5,RIGHT_UP:6,RIGHT_CLICK:7,MIDDLE_DOWN:10,MIDDLE_UP:11,MIDDLE_CLICK:12,MOUSE_MOVE:15,WHEEL:16,PINCH_START:17,PINCH_END:18,PINCH_MOVE:19},Sn=Object.freeze(ept);function vy(e,t,n){let i=e._element;if(i===document)return n.x=t.clientX,n.y=t.clientY,n;let o=i.getBoundingClientRect();return n.x=t.clientX-o.left,n.y=t.clientY-o.top,n}function r8(e,t){let n=e;return l(t)&&(n+=`+${t}`),n}function eS(e){if(e.shiftKey)return ra.SHIFT;if(e.ctrlKey)return ra.CTRL;if(e.altKey)return ra.ALT}var Fs={LEFT:0,MIDDLE:1,RIGHT:2};function nu(e,t,n,i){function o(r){i(e,r)}Bt.isInternetExplorer()?n.addEventListener(t,o,!1):n.addEventListener(t,o,{capture:!1,passive:!1}),e._removalFunctions.push(function(){n.removeEventListener(t,o,!1)})}function tpt(e){let t=e._element,n=l(t.disableRootEvents)?t:document;Bt.supportsPointerEvents()?(nu(e,"pointerdown",t,apt),nu(e,"pointerup",t,f_e),nu(e,"pointermove",t,cpt),nu(e,"pointercancel",t,f_e)):(nu(e,"mousedown",t,p_e),nu(e,"mouseup",n,b_e),nu(e,"mousemove",n,g_e),nu(e,"touchstart",t,rpt),nu(e,"touchend",n,l_e),nu(e,"touchmove",n,spt),nu(e,"touchcancel",n,l_e)),nu(e,"dblclick",t,ipt);let i;"onwheel"in t?i="wheel":document.onmousewheel!==void 0?i="mousewheel":i="DOMMouseScroll",nu(e,i,t,opt)}function npt(e){let t=e._removalFunctions;for(let n=0;n<t.length;++n)t[n]()}var r_e={position:new U};function s8(e){e._lastSeenTouchEvent=Si()}function a8(e){return Si()-e._lastSeenTouchEvent>Dh.mouseEmulationIgnoreMilliseconds}function o8(e,t,n){let i=e.x-t.x,o=e.y-t.y;return Math.sqrt(i*i+o*o)<n}function p_e(e,t){if(!a8(e))return;let n=t.button;e._buttonDown[n]=!0;let i;if(n===Fs.LEFT)i=Sn.LEFT_DOWN;else if(n===Fs.MIDDLE)i=Sn.MIDDLE_DOWN;else if(n===Fs.RIGHT)i=Sn.RIGHT_DOWN;else return;let o=vy(e,t,e._primaryPosition);U.clone(o,e._primaryStartPosition),U.clone(o,e._primaryPreviousPosition);let r=eS(t),s=e.getInputAction(i,r);l(s)&&(U.clone(o,r_e.position),s(r_e),t.preventDefault())}var s_e={position:new U},a_e={position:new U};function e8(e,t,n,i){let o=eS(i),r=e.getInputAction(t,o),s=e.getInputAction(n,o);if(l(r)||l(s)){let a=vy(e,i,e._primaryPosition);if(l(r)&&(U.clone(a,s_e.position),r(s_e)),l(s)){let c=e._primaryStartPosition;o8(c,a,e._clickPixelTolerance)&&(U.clone(a,a_e.position),s(a_e))}}}function b_e(e,t){if(!a8(e))return;let n=t.button;n!==Fs.LEFT&&n!==Fs.MIDDLE&&n!==Fs.RIGHT||(e._buttonDown[Fs.LEFT]&&(e8(e,Sn.LEFT_UP,Sn.LEFT_CLICK,t),e._buttonDown[Fs.LEFT]=!1),e._buttonDown[Fs.MIDDLE]&&(e8(e,Sn.MIDDLE_UP,Sn.MIDDLE_CLICK,t),e._buttonDown[Fs.MIDDLE]=!1),e._buttonDown[Fs.RIGHT]&&(e8(e,Sn.RIGHT_UP,Sn.RIGHT_CLICK,t),e._buttonDown[Fs.RIGHT]=!1))}var t8={startPosition:new U,endPosition:new U};function g_e(e,t){if(!a8(e))return;let n=eS(t),i=vy(e,t,e._primaryPosition),o=e._primaryPreviousPosition,r=e.getInputAction(Sn.MOUSE_MOVE,n);l(r)&&(U.clone(o,t8.startPosition),U.clone(i,t8.endPosition),r(t8)),U.clone(i,o),(e._buttonDown[Fs.LEFT]||e._buttonDown[Fs.MIDDLE]||e._buttonDown[Fs.RIGHT])&&t.preventDefault()}var c_e={position:new U};function ipt(e,t){let n=t.button,i;if(n===Fs.LEFT)i=Sn.LEFT_DOUBLE_CLICK;else return;let o=eS(t),r=e.getInputAction(i,o);l(r)&&(vy(e,t,c_e.position),r(c_e))}function opt(e,t){let n;if(l(t.deltaY)){let r=t.deltaMode;r===t.DOM_DELTA_PIXEL?n=-t.deltaY:r===t.DOM_DELTA_LINE?n=-t.deltaY*40:n=-t.deltaY*120}else t.detail>0?n=t.detail*-120:n=t.wheelDelta;if(!l(n))return;let i=eS(t),o=e.getInputAction(Sn.WHEEL,i);l(o)&&(o(n),t.preventDefault())}function rpt(e,t){s8(e);let n=t.changedTouches,i,o=n.length,r,s,a=e._positions;for(i=0;i<o;++i)r=n[i],s=r.identifier,a.set(s,vy(e,r,new U));R3(e,t);let c=e._previousPositions;for(i=0;i<o;++i)r=n[i],s=r.identifier,c.set(s,U.clone(a.get(s)))}function l_e(e,t){s8(e);let n=t.changedTouches,i,o=n.length,r,s,a=e._positions;for(i=0;i<o;++i)r=n[i],s=r.identifier,a.remove(s);R3(e,t);let c=e._previousPositions;for(i=0;i<o;++i)r=n[i],s=r.identifier,c.remove(s)}var d_e={position:new U},n8={position1:new U,position2:new U},u_e={position:new U},m_e={position:new U},h_e={position:new U};function R3(e,t){let n=eS(t),i=e._positions,o=i.length,r,s,a=e._isPinching;if(o!==1&&e._buttonDown[Fs.LEFT]){if(e._buttonDown[Fs.LEFT]=!1,l(e._touchHoldTimer)&&(clearTimeout(e._touchHoldTimer),e._touchHoldTimer=void 0),r=e.getInputAction(Sn.LEFT_UP,n),l(r)&&(U.clone(e._primaryPosition,u_e.position),r(u_e)),o===0&&!e._isTouchHolding&&(s=e.getInputAction(Sn.LEFT_CLICK,n),l(s))){let c=e._primaryStartPosition,d=e._previousPositions.values[0];o8(c,d,e._clickPixelTolerance)&&(U.clone(e._primaryPosition,m_e.position),s(m_e))}e._isTouchHolding=!1}if(o===0&&a&&(e._isPinching=!1,r=e.getInputAction(Sn.PINCH_END,n),l(r)&&r()),o===1&&!a){let c=i.values[0];U.clone(c,e._primaryPosition),U.clone(c,e._primaryStartPosition),U.clone(c,e._primaryPreviousPosition),e._buttonDown[Fs.LEFT]=!0,r=e.getInputAction(Sn.LEFT_DOWN,n),l(r)&&(U.clone(c,d_e.position),r(d_e)),e._touchHoldTimer=setTimeout(function(){if(!e.isDestroyed()&&(e._touchHoldTimer=void 0,e._isTouchHolding=!0,s=e.getInputAction(Sn.RIGHT_CLICK,n),l(s))){let d=e._primaryStartPosition,u=e._previousPositions.values[0];o8(d,u,e._holdPixelTolerance)&&(U.clone(e._primaryPosition,h_e.position),s(h_e))}},Dh.touchHoldDelayMilliseconds),t.preventDefault()}o===2&&!a&&(e._isPinching=!0,r=e.getInputAction(Sn.PINCH_START,n),l(r)&&(U.clone(i.values[0],n8.position1),U.clone(i.values[1],n8.position2),r(n8),t.preventDefault()))}function spt(e,t){s8(e);let n=t.changedTouches,i,o=n.length,r,s,a=e._positions;for(i=0;i<o;++i){r=n[i],s=r.identifier;let d=a.get(s);l(d)&&vy(e,r,d)}y_e(e,t);let c=e._previousPositions;for(i=0;i<o;++i)r=n[i],s=r.identifier,U.clone(a.get(s),c.get(s))}var i8={startPosition:new U,endPosition:new U},m9={distance:{startPosition:new U,endPosition:new U},angleAndHeight:{startPosition:new U,endPosition:new U}};function y_e(e,t){let n=eS(t),i=e._positions,o=e._previousPositions,r=i.length,s;if(r===1&&e._buttonDown[Fs.LEFT]){let a=i.values[0];U.clone(a,e._primaryPosition);let c=e._primaryPreviousPosition;s=e.getInputAction(Sn.MOUSE_MOVE,n),l(s)&&(U.clone(c,i8.startPosition),U.clone(a,i8.endPosition),s(i8)),U.clone(a,c),t.preventDefault()}else if(r===2&&e._isPinching&&(s=e.getInputAction(Sn.PINCH_MOVE,n),l(s))){let a=i.values[0],c=i.values[1],d=o.values[0],u=o.values[1],h=c.x-a.x,p=c.y-a.y,g=Math.sqrt(h*h+p*p)*.25,f=u.x-d.x,y=u.y-d.y,x=Math.sqrt(f*f+y*y)*.25,S=(c.y+a.y)*.125,C=(u.y+d.y)*.125,V=Math.atan2(p,h),L=Math.atan2(y,f);U.fromElements(0,x,m9.distance.startPosition),U.fromElements(0,g,m9.distance.endPosition),U.fromElements(L,C,m9.angleAndHeight.startPosition),U.fromElements(V,S,m9.angleAndHeight.endPosition),s(m9)}}function apt(e,t){if(t.target.setPointerCapture(t.pointerId),t.pointerType==="touch"){let n=e._positions,i=t.pointerId;n.set(i,vy(e,t,new U)),R3(e,t),e._previousPositions.set(i,U.clone(n.get(i)))}else p_e(e,t)}function f_e(e,t){if(t.pointerType==="touch"){let n=e._positions,i=t.pointerId;n.remove(i),R3(e,t),e._previousPositions.remove(i)}else b_e(e,t)}function cpt(e,t){if(t.pointerType==="touch"){let n=e._positions,i=t.pointerId,o=n.get(i);if(!l(o))return;vy(e,t,o),y_e(e,t);let r=e._previousPositions;U.clone(n.get(i),r.get(i))}else g_e(e,t)}function Dh(e){this._inputEvents={},this._buttonDown={LEFT:!1,MIDDLE:!1,RIGHT:!1},this._isPinching=!1,this._isTouchHolding=!1,this._lastSeenTouchEvent=-Dh.mouseEmulationIgnoreMilliseconds,this._primaryStartPosition=new U,this._primaryPosition=new U,this._primaryPreviousPosition=new U,this._positions=new Gt,this._previousPositions=new Gt,this._removalFunctions=[],this._touchHoldTimer=void 0,this._clickPixelTolerance=5,this._holdPixelTolerance=25,this._element=e??document,tpt(this)}Dh.prototype.setInputAction=function(e,t,n){let i=r8(t,n);this._inputEvents[i]=e};Dh.prototype.getInputAction=function(e,t){let n=r8(e,t);return this._inputEvents[n]};Dh.prototype.removeInputAction=function(e,t){let n=r8(e,t);delete this._inputEvents[n]};Dh.prototype.isDestroyed=function(){return!1};Dh.prototype.destroy=function(){return npt(this),me(this)};Dh.mouseEmulationIgnoreMilliseconds=800;Dh.touchHoldDelayMilliseconds=1500;var iu=Dh;function tS(e){this._scene=e,this._currentTweens=[],this._morphHandler=void 0,this._morphCancelled=!1,this._completeMorph=void 0,this._morphToOrthographic=!1}tS.prototype.completeMorph=function(){l(this._completeMorph)&&this._completeMorph()};tS.prototype.morphTo2D=function(e,t){l(this._completeMorph)&&this._completeMorph();let n=this._scene;this._previousMode=n.mode,this._morphToOrthographic=n.camera.frustum instanceof an,!(this._previousMode===oe.SCENE2D||this._previousMode===oe.MORPHING)&&(this._scene.morphStart.raiseEvent(this,this._previousMode,oe.SCENE2D,!0),n._mode=oe.MORPHING,n.camera._setTransform(F.IDENTITY),this._previousMode===oe.COLUMBUS_VIEW?Upt(this,e):Kpt(this,e,t),e===0&&l(this._completeMorph)&&this._completeMorph())};var lpt=new m,dpt=new m,upt=new m,mpt=new m,hpt=new m,fpt=new m,ppt=new m,bpt=new he,gpt=new F,ypt=new Gi,xpt=new an,_pt={position:void 0,direction:void 0,up:void 0,position2D:void 0,direction2D:void 0,up2D:void 0,frustum:void 0};tS.prototype.morphToColumbusView=function(e,t){l(this._completeMorph)&&this._completeMorph();let n=this._scene;if(this._previousMode=n.mode,this._previousMode===oe.COLUMBUS_VIEW||this._previousMode===oe.MORPHING)return;this._scene.morphStart.raiseEvent(this,this._previousMode,oe.COLUMBUS_VIEW,!0),n.camera._setTransform(F.IDENTITY);let i=lpt,o=dpt,r=upt;if(e>0)i.x=0,i.y=-1,i.z=1,i=m.multiplyByScalar(m.normalize(i,i),5*t.maximumRadius,i),m.negate(m.normalize(i,o),o),m.cross(m.UNIT_X,o,r);else{let d=n.camera;if(this._previousMode===oe.SCENE2D)m.clone(d.position,i),i.z=d.frustum.right-d.frustum.left,m.negate(m.UNIT_Z,o),m.clone(m.UNIT_Y,r);else{m.clone(d.positionWC,i),m.clone(d.directionWC,o),m.clone(d.upWC,r);let u=t.scaleToGeodeticSurface(i,ppt),h=Pt.eastNorthUpToFixedFrame(u,t,gpt);F.inverseTransformation(h,h),n.mapProjection.project(t.cartesianToCartographic(i,bpt),i),F.multiplyByPointAsVector(h,o,o),F.multiplyByPointAsVector(h,r,r)}}let s;this._morphToOrthographic?(s=xpt,s.width=n.camera.frustum.right-n.camera.frustum.left,s.aspectRatio=n.drawingBufferWidth/n.drawingBufferHeight):(s=ypt,s.aspectRatio=n.drawingBufferWidth/n.drawingBufferHeight,s.fov=X.toRadians(60));let a=_pt;a.position=i,a.direction=o,a.up=r,a.frustum=s;let c=Qpt(a);h9(this,c),this._previousMode===oe.SCENE2D?Jpt(this,e,a,c):(a.position2D=F.multiplyByPoint(ro.TRANSFORM_2D,i,mpt),a.direction2D=F.multiplyByPointAsVector(ro.TRANSFORM_2D,o,hpt),a.up2D=F.multiplyByPointAsVector(ro.TRANSFORM_2D,r,fpt),n._mode=oe.MORPHING,E_e(this,e,a,c)),e===0&&l(this._completeMorph)&&this._completeMorph()};var d8={position:new m,direction:new m,up:new m,frustum:void 0},__e=new Gi;tS.prototype.morphTo3D=function(e,t){l(this._completeMorph)&&this._completeMorph();let n=this._scene;if(this._previousMode=n.mode,!(this._previousMode===oe.SCENE3D||this._previousMode===oe.MORPHING)){if(this._scene.morphStart.raiseEvent(this,this._previousMode,oe.SCENE3D,!0),n._mode=oe.MORPHING,n.camera._setTransform(F.IDENTITY),this._previousMode===oe.SCENE2D)Xpt(this,e,t);else{let i;e>0?(i=d8,m.fromDegrees(0,0,5*t.maximumRadius,t,i.position),m.negate(i.position,i.direction),m.normalize(i.direction,i.direction),m.clone(m.UNIT_Z,i.up)):i=T_e(this,t);let o,r=n.camera;r.frustum instanceof an?o=r.frustum.clone():(o=__e,o.aspectRatio=n.drawingBufferWidth/n.drawingBufferHeight,o.fov=X.toRadians(60)),i.frustum=o;let s=X_e(i);h9(this,s),l8(this,e,i,s)}e===0&&l(this._completeMorph)&&this._completeMorph()}};tS.prototype.isDestroyed=function(){return!1};tS.prototype.destroy=function(){return Z3(this),me(this)};function h9(e,t){if(e._scene.completeMorphOnUserInput){e._morphHandler=new iu(e._scene.canvas);let n=function(){e._morphCancelled=!0,e._scene.camera.cancelFlight(),t(e)};e._completeMorph=n,e._morphHandler.setInputAction(n,Sn.LEFT_DOWN),e._morphHandler.setInputAction(n,Sn.MIDDLE_DOWN),e._morphHandler.setInputAction(n,Sn.RIGHT_DOWN),e._morphHandler.setInputAction(n,Sn.WHEEL)}}function Z3(e){let t=e._currentTweens;for(let n=0;n<t.length;++n)t[n].cancelTween();e._currentTweens.length=0,e._morphHandler=e._morphHandler&&e._morphHandler.destroy()}var Tpt=new he,Spt=new m,Cpt=new F;function T_e(e,t){let n=e._scene,i=n.camera,o=d8,r=o.position,s=o.direction,a=o.up,c=n.mapProjection.unproject(i.position,Tpt);t.cartographicToCartesian(c,r);let d=t.scaleToGeodeticSurface(r,Spt),u=Pt.eastNorthUpToFixedFrame(d,t,Cpt);return F.multiplyByPointAsVector(u,i.direction,s),F.multiplyByPointAsVector(u,i.up,a),o}var Vpt=new m,Lpt=new m,Rpt=new m,Zpt=new m,Gpt=new m,Ept=new m;function l8(e,t,n,i){t*=.5;let o=e._scene,r=o.camera,s=m.clone(r.position,Vpt),a=m.clone(r.direction,Lpt),c=m.clone(r.up,Rpt),d=F.multiplyByPoint(ro.TRANSFORM_2D_INVERSE,n.position,Zpt),u=F.multiplyByPointAsVector(ro.TRANSFORM_2D_INVERSE,n.direction,Gpt),h=F.multiplyByPointAsVector(ro.TRANSFORM_2D_INVERSE,n.up,Ept);function p(f){gm(s,d,f.time,r.position),gm(a,u,f.time,r.direction),gm(c,h,f.time,r.up),m.cross(r.direction,r.up,r.right),m.normalize(r.right,r.right)}let g=o.tweens.add({duration:t,easingFunction:zr.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:p,complete:function(){I_e(e,o,0,1,t,i)}});e._currentTweens.push(g)}var Ipt=new an,S_e=new m,C_e=new m,V_e=new m,u8=new m,L_e=new m,R_e=new m;function Xpt(e,t,n){t/=3;let i=e._scene,o=i.camera,r;t>0?(r=d8,m.fromDegrees(0,0,5*n.maximumRadius,n,r.position),m.negate(r.position,r.direction),m.normalize(r.direction,r.direction),m.clone(m.UNIT_Z,r.up)):(o.position.z=o.frustum.right-o.frustum.left,r=T_e(e,n));let s;e._morphToOrthographic?(s=Ipt,s.aspectRatio=i.drawingBufferWidth/i.drawingBufferHeight,s.width=o.frustum.right-o.frustum.left):(s=__e,s.aspectRatio=i.drawingBufferWidth/i.drawingBufferHeight,s.fov=X.toRadians(60)),r.frustum=s;let a=X_e(r);h9(e,a);let c;e._morphToOrthographic?c=function(){l8(e,t,r,a)}:c=function(){G_e(e,t,r,function(){l8(e,t,r,a)})},t>0?(i._mode=oe.SCENE2D,o.flyTo({duration:t,destination:m.fromDegrees(0,0,5*n.maximumRadius,n,u8),complete:function(){i._mode=oe.MORPHING,c()}})):c()}function gm(e,t,n,i){return m.lerp(e,t,n,i)}function Z_e(e,t,n,i,o){let r=e._scene,s=r.camera;if(s.frustum instanceof an)return;let a=s.frustum.fov,c=X.RADIANS_PER_DEGREE*.5,d=n.position.z*Math.tan(a*.5);s.frustum.far=d/Math.tan(c*.5)+1e7;function u(p){s.frustum.fov=X.lerp(a,c,p.time);let g=d/Math.tan(s.frustum.fov*.5);i(s,g)}let h=r.tweens.add({duration:t,easingFunction:zr.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:u,complete:function(){s.frustum=n.frustum.clone(),o(e)}});e._currentTweens.push(h)}var Wpt=new m,Ppt=new m,vpt=new m,c8=new m,wpt=new m,Fpt=new m,Apt=new Pr,Mpt=new pn,Npt=new m,kpt={position:void 0,direction:void 0,up:void 0,frustum:void 0};function Upt(e,t){t*=.5;let n=e._scene,i=n.camera,o=m.clone(i.position,Wpt),r=m.clone(i.direction,Ppt),s=m.clone(i.up,vpt),a=m.negate(m.UNIT_Z,wpt),c=m.clone(m.UNIT_Y,Fpt),d=c8;if(t>0)m.clone(m.ZERO,c8),d.z=5*n.ellipsoid.maximumRadius;else{m.clone(o,c8);let x=Mpt;F.multiplyByPoint(ro.TRANSFORM_2D,o,x.origin),F.multiplyByPointAsVector(ro.TRANSFORM_2D,r,x.direction);let S=n.globe;if(l(S)){let C=S.pickWorldCoordinates(x,n,!0,Npt);l(C)&&(F.multiplyByPoint(ro.TRANSFORM_2D_INVERSE,C,d),d.z+=m.distance(o,d))}}let u=Apt;u.right=d.z*.5,u.left=-u.right,u.top=u.right*(n.drawingBufferHeight/n.drawingBufferWidth),u.bottom=-u.top;let h=kpt;h.position=d,h.direction=a,h.up=c,h.frustum=u;let p=W_e(h);h9(e,p);function g(x){gm(o,d,x.time,i.position),gm(r,a,x.time,i.direction),gm(s,c,x.time,i.up),m.cross(i.direction,i.up,i.right),m.normalize(i.right,i.right),i._adjustOrthographicFrustum(!0)}function f(x,S){x.position.z=S}let y=n.tweens.add({duration:t,easingFunction:zr.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:g,complete:function(){Z_e(e,t,h,f,p)}});e._currentTweens.push(y)}var x_e=new he,Dpt={position:new m,direction:new m,up:new m,position2D:new m,direction2D:new m,up2D:new m,frustum:new Pr},Bpt={position:new m,direction:new m,up:new m,frustum:void 0},Opt=new m,Ypt=new pn,zpt=new F,Hpt=new m;function Kpt(e,t,n){t*=.5;let i=e._scene,o=i.camera,r=Dpt;if(t>0)m.clone(m.ZERO,r.position),r.position.z=5*n.maximumRadius,m.negate(m.UNIT_Z,r.direction),m.clone(m.UNIT_Y,r.up);else{n.cartesianToCartographic(o.positionWC,x_e),i.mapProjection.project(x_e,r.position),m.negate(m.UNIT_Z,r.direction),m.clone(m.UNIT_Y,r.up);let h=Ypt;m.clone(r.position2D,h.origin);let p=m.clone(o.directionWC,h.direction),g=n.scaleToGeodeticSurface(o.positionWC,Hpt),f=Pt.eastNorthUpToFixedFrame(g,n,zpt);F.inverseTransformation(f,f),F.multiplyByPointAsVector(f,p,p),F.multiplyByPointAsVector(ro.TRANSFORM_2D,p,p);let y=i.globe;if(l(y)){let x=y.pickWorldCoordinates(h,i,!0,Opt);if(l(x)){let S=m.distance(r.position2D,x);x.x+=S,m.clone(x,r.position2D)}}}function s(h,p){h.position.x=p}F.multiplyByPoint(ro.TRANSFORM_2D,r.position,r.position2D),F.multiplyByPointAsVector(ro.TRANSFORM_2D,r.direction,r.direction2D),F.multiplyByPointAsVector(ro.TRANSFORM_2D,r.up,r.up2D);let a=r.frustum;a.right=r.position.z*.5,a.left=-a.right,a.top=a.right*(i.drawingBufferHeight/i.drawingBufferWidth),a.bottom=-a.top;let c=Bpt;F.multiplyByPoint(ro.TRANSFORM_2D_INVERSE,r.position2D,c.position),m.clone(r.direction,c.direction),m.clone(r.up,c.up),c.frustum=a;let d=W_e(c);h9(e,d);function u(){Z_e(e,t,r,s,d)}E_e(e,t,r,u)}function G_e(e,t,n,i){let o=e._scene,r=o.camera,s=r.frustum.right-r.frustum.left;r.frustum=n.frustum.clone();let a=r.frustum.fov,c=X.RADIANS_PER_DEGREE*.5,d=s*Math.tan(a*.5);r.frustum.far=d/Math.tan(c*.5)+1e7,r.frustum.fov=c;function u(p){r.frustum.fov=X.lerp(c,a,p.time),r.position.z=d/Math.tan(r.frustum.fov*.5)}let h=o.tweens.add({duration:t,easingFunction:zr.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:u,complete:function(){i(e)}});e._currentTweens.push(h)}function Jpt(e,t,n,i){t*=.5;let o=e._scene,r=o.camera,s=m.clone(n.position,u8),a=m.clone(n.direction,L_e),c=m.clone(n.up,R_e);o._mode=oe.MORPHING;function d(){r.frustum=n.frustum.clone();let u=m.clone(r.position,S_e),h=m.clone(r.direction,C_e),p=m.clone(r.up,V_e);u.z=s.z;function g(y){gm(u,s,y.time,r.position),gm(h,a,y.time,r.direction),gm(p,c,y.time,r.up),m.cross(r.direction,r.up,r.right),m.normalize(r.right,r.right)}let f=o.tweens.add({duration:t,easingFunction:zr.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:g,complete:function(){i(e)}});e._currentTweens.push(f)}e._morphToOrthographic?d():G_e(e,0,n,d)}function E_e(e,t,n,i){let o=e._scene,r=o.camera,s=m.clone(r.position,S_e),a=m.clone(r.direction,C_e),c=m.clone(r.up,V_e),d=m.clone(n.position2D,u8),u=m.clone(n.direction2D,L_e),h=m.clone(n.up2D,R_e);function p(f){gm(s,d,f.time,r.position),gm(a,u,f.time,r.direction),gm(c,h,f.time,r.up),m.cross(r.direction,r.up,r.right),m.normalize(r.right,r.right),r._adjustOrthographicFrustum(!0)}let g=o.tweens.add({duration:t,easingFunction:zr.QUARTIC_OUT,startObject:{time:0},stopObject:{time:1},update:p,complete:function(){I_e(e,o,1,0,t,i)}});e._currentTweens.push(g)}function I_e(e,t,n,i,o,r){let s={object:t,property:"morphTime",startValue:n,stopValue:i,duration:o,easingFunction:zr.QUARTIC_OUT};l(r)&&(s.complete=function(){r(e)});let a=t.tweens.addProperty(s);e._currentTweens.push(a)}function X_e(e){return function(t){let n=t._scene;n._mode=oe.SCENE3D,n.morphTime=oe.getMorphTime(oe.SCENE3D),Z3(t);let i=n.camera;(t._previousMode!==oe.MORPHING||t._morphCancelled)&&(t._morphCancelled=!1,m.clone(e.position,i.position),m.clone(e.direction,i.direction),m.clone(e.up,i.up),m.cross(i.direction,i.up,i.right),m.normalize(i.right,i.right),i.frustum=e.frustum.clone());let o=i.frustum;n.frameState.useLogDepth&&(o.near=.1,o.far=1e10);let r=l(t._completeMorph);t._completeMorph=void 0,n.camera.update(n.mode),t._scene.morphComplete.raiseEvent(t,t._previousMode,oe.SCENE3D,r)}}function W_e(e){return function(t){let n=t._scene;n._mode=oe.SCENE2D,n.morphTime=oe.getMorphTime(oe.SCENE2D),Z3(t);let i=n.camera;m.clone(e.position,i.position),i.position.z=n.ellipsoid.maximumRadius*2,m.clone(e.direction,i.direction),m.clone(e.up,i.up),m.cross(i.direction,i.up,i.right),m.normalize(i.right,i.right),i.frustum=e.frustum.clone();let o=l(t._completeMorph);t._completeMorph=void 0,n.camera.update(n.mode),t._scene.morphComplete.raiseEvent(t,t._previousMode,oe.SCENE2D,o)}}function Qpt(e){return function(t){let n=t._scene;n._mode=oe.COLUMBUS_VIEW,n.morphTime=oe.getMorphTime(oe.COLUMBUS_VIEW),Z3(t);let i=n.camera;(t._previousModeMode!==oe.MORPHING||t._morphCancelled)&&(t._morphCancelled=!1,m.clone(e.position,i.position),m.clone(e.direction,i.direction),m.clone(e.up,i.up),m.cross(i.direction,i.up,i.right),m.normalize(i.right,i.right));let o=i.frustum;n.frameState.useLogDepth&&(o.near=.1,o.far=1e10);let r=l(t._completeMorph);t._completeMorph=void 0,n.camera.update(n.mode),t._scene.morphComplete.raiseEvent(t,t._previousMode,oe.COLUMBUS_VIEW,r)}}var f9=tS;var ENi=_(T(),1);var HMi=_(T(),1);var AMi=_(T(),1),jpt={LEFT_DRAG:0,RIGHT_DRAG:1,MIDDLE_DRAG:2,WHEEL:3,PINCH:4},Ai=Object.freeze(jpt);function sa(e,t){let n=`${e}`;return l(t)&&(n+=`+${t}`),n}function qpt(e,t){U.clone(e.distance.startPosition,t.distance.startPosition),U.clone(e.distance.endPosition,t.distance.endPosition),U.clone(e.angleAndHeight.startPosition,t.angleAndHeight.startPosition),U.clone(e.angleAndHeight.endPosition,t.angleAndHeight.endPosition)}function P_e(e,t,n){let i=sa(Ai.PINCH,t),o=e._update,r=e._isDown,s=e._eventStartPosition,a=e._pressTime,c=e._releaseTime;o[i]=!0,r[i]=!1,s[i]=new U;let d=e._movement[i];l(d)||(d=e._movement[i]={}),d.distance={startPosition:new U,endPosition:new U},d.angleAndHeight={startPosition:new U,endPosition:new U},d.prevAngle=0,e._eventHandler.setInputAction(function(u){e._buttonsDown++,r[i]=!0,a[i]=new Date,U.lerp(u.position1,u.position2,.5,s[i])},Sn.PINCH_START,t),e._eventHandler.setInputAction(function(){e._buttonsDown=Math.max(e._buttonsDown-1,0),r[i]=!1,c[i]=new Date},Sn.PINCH_END,t),e._eventHandler.setInputAction(function(u){if(r[i]){o[i]?(qpt(u,d),o[i]=!1,d.prevAngle=d.angleAndHeight.startPosition.x):(U.clone(u.distance.endPosition,d.distance.endPosition),U.clone(u.angleAndHeight.endPosition,d.angleAndHeight.endPosition));let h=d.angleAndHeight.endPosition.x,p=d.prevAngle,g=Math.PI*2;for(;h>=p+Math.PI;)h-=g;for(;h<p-Math.PI;)h+=g;d.angleAndHeight.endPosition.x=-h*n.clientWidth/12,d.angleAndHeight.startPosition.x=-p*n.clientWidth/12}},Sn.PINCH_MOVE,t)}function v_e(e,t){let n=sa(Ai.WHEEL,t),i=e._pressTime,o=e._releaseTime,r=e._update;r[n]=!0;let s=e._movement[n];l(s)||(s=e._movement[n]={});let a=e._lastMovement[n];l(a)||(a=e._lastMovement[n]={startPosition:new U,endPosition:new U,valid:!1}),s.startPosition=new U,U.clone(U.ZERO,s.startPosition),s.endPosition=new U,e._eventHandler.setInputAction(function(c){let d=7.5*X.toRadians(c);i[n]=o[n]=new Date,s.endPosition.x=0,s.endPosition.y=d,U.clone(s.endPosition,a.endPosition),a.valid=!0,r[n]=!1},Sn.WHEEL,t)}function dL(e,t,n){let i=sa(n,t),o=e._isDown,r=e._eventStartPosition,s=e._pressTime;o[i]=!1,r[i]=new U;let a=e._lastMovement[i];l(a)||(a=e._lastMovement[i]={startPosition:new U,endPosition:new U,valid:!1});let c,d;n===Ai.LEFT_DRAG?(c=Sn.LEFT_DOWN,d=Sn.LEFT_UP):n===Ai.RIGHT_DRAG?(c=Sn.RIGHT_DOWN,d=Sn.RIGHT_UP):n===Ai.MIDDLE_DRAG&&(c=Sn.MIDDLE_DOWN,d=Sn.MIDDLE_UP),e._eventHandler.setInputAction(function(u){e._buttonsDown++,a.valid=!1,o[i]=!0,s[i]=new Date,U.clone(u.position,r[i])},c,t),e._eventHandler.setInputAction(function(){m8(sa(n,void 0),e);for(let u of Object.values(ra)){let h=sa(n,u);m8(h,e)}},d,t)}function m8(e,t){let n=t._releaseTime,i=t._isDown;i[e]&&(t._buttonsDown=Math.max(t._buttonsDown-1,0)),i[e]=!1,n[e]=new Date}function w_e(e,t){U.clone(e.startPosition,t.startPosition),U.clone(e.endPosition,t.endPosition)}function $pt(e,t,n){let i=n._isDown,o=!1,r=sa(e,t);for(let[c,d]of Object.entries(i))c.startsWith(e)&&d&&c!==r&&(o=!0,m8(c,n));if(!o)return;let s=n._pressTime,a=n._lastMovement[r];l(a)||(a=n._lastMovement[r]={startPosition:new U,endPosition:new U,valid:!1}),n._buttonsDown++,a.valid=!1,i[r]=!0,s[r]=new Date}function F_e(e,t){let n=e._update,i=e._movement,o=e._lastMovement,r=e._isDown;for(let s in Ai)if(Ai.hasOwnProperty(s)){let a=Ai[s];if(l(a)){let c=sa(a,t);n[c]=!0,l(e._lastMovement[c])||(e._lastMovement[c]={startPosition:new U,endPosition:new U,valid:!1}),l(e._movement[c])||(e._movement[c]={startPosition:new U,endPosition:new U})}}e._eventHandler.setInputAction(function(s){for(let a in Ai)if(Ai.hasOwnProperty(a)){let c=Ai[a];if(l(c)){let d=sa(c,t);$pt(c,t,e),r[d]&&(n[d]?(w_e(i[d],o[d]),o[d].valid=!0,w_e(s,i[d]),n[d]=!1):U.clone(s.endPosition,i[d].endPosition))}}U.clone(s.endPosition,e._currentMousePosition)},Sn.MOUSE_MOVE,t)}function ym(e){this._eventHandler=new iu(e),this._update={},this._movement={},this._lastMovement={},this._isDown={},this._eventStartPosition={},this._pressTime={},this._releaseTime={},this._buttonsDown=0,this._currentMousePosition=new U,v_e(this,void 0),P_e(this,void 0,e),dL(this,void 0,Ai.LEFT_DRAG),dL(this,void 0,Ai.RIGHT_DRAG),dL(this,void 0,Ai.MIDDLE_DRAG),F_e(this,void 0);for(let t in ra)if(ra.hasOwnProperty(t)){let n=ra[t];l(n)&&(v_e(this,n),P_e(this,n,e),dL(this,n,Ai.LEFT_DRAG),dL(this,n,Ai.RIGHT_DRAG),dL(this,n,Ai.MIDDLE_DRAG),F_e(this,n))}}Object.defineProperties(ym.prototype,{currentMousePosition:{get:function(){return this._currentMousePosition}},anyButtonDown:{get:function(){let e=!this._update[sa(Ai.WHEEL)]||!this._update[sa(Ai.WHEEL,ra.SHIFT)]||!this._update[sa(Ai.WHEEL,ra.CTRL)]||!this._update[sa(Ai.WHEEL,ra.ALT)];return this._buttonsDown>0||e}}});ym.prototype.isMoving=function(e,t){let n=sa(e,t);return!this._update[n]};ym.prototype.getMovement=function(e,t){let n=sa(e,t);return this._movement[n]};ym.prototype.getLastMovement=function(e,t){let n=sa(e,t),i=this._lastMovement[n];if(i.valid)return i};ym.prototype.isButtonDown=function(e,t){let n=sa(e,t);return this._isDown[n]};ym.prototype.getStartMousePosition=function(e,t){if(e===Ai.WHEEL)return this._currentMousePosition;let n=sa(e,t);return this._eventStartPosition[n]};ym.prototype.getButtonPressTime=function(e,t){let n=sa(e,t);return this._pressTime[n]};ym.prototype.getButtonReleaseTime=function(e,t){let n=sa(e,t);return this._releaseTime[n]};ym.prototype.reset=function(){for(let e in this._update)this._update.hasOwnProperty(e)&&(this._update[e]=!0)};ym.prototype.isDestroyed=function(){return!1};ym.prototype.destroy=function(){return this._eventHandler=this._eventHandler&&this._eventHandler.destroy(),me(this)};var p9=ym;var nNi=_(T(),1);function G3(e,t,n,i,o,r,s,a,c,d){this._tweens=e,this._tweenjs=t,this._startObject=Ye(n),this._stopObject=Ye(i),this._duration=o,this._delay=r,this._easingFunction=s,this._update=a,this._complete=c,this.cancel=d,this.needsStart=!0}Object.defineProperties(G3.prototype,{startObject:{get:function(){return this._startObject}},stopObject:{get:function(){return this._stopObject}},duration:{get:function(){return this._duration}},delay:{get:function(){return this._delay}},easingFunction:{get:function(){return this._easingFunction}},update:{get:function(){return this._update}},complete:{get:function(){return this._complete}},tweenjs:{get:function(){return this._tweenjs}}});G3.prototype.cancelTween=function(){this._tweens.remove(this)};function Bh(){this._tweens=[]}Object.defineProperties(Bh.prototype,{length:{get:function(){return this._tweens.length}}});Bh.prototype.add=function(e){if(e=e??Y.EMPTY_OBJECT,e.duration===0)return l(e.complete)&&e.complete(),new G3(this);let t=e.duration/Kn.SECONDS_PER_MILLISECOND,n=e.delay??0,i=n/Kn.SECONDS_PER_MILLISECOND,o=e.easingFunction??zr.LINEAR_NONE,r=e.startObject,s=new S0e(r);s.to(Ye(e.stopObject),t),s.delay(i),s.easing(o),l(e.update)&&s.onUpdate(function(){e.update(r)}),s.onComplete(e.complete??null),s.repeat(e._repeat??0);let a=new G3(this,s,e.startObject,e.stopObject,e.duration,n,o,e.update,e.complete,e.cancel);return this._tweens.push(a),a};Bh.prototype.addProperty=function(e){e=e??Y.EMPTY_OBJECT;let t=e.object,n=e.property,i=e.startValue,o=e.stopValue;function r(s){t[n]=s.value}return this.add({startObject:{value:i},stopObject:{value:o},duration:e.duration??3,delay:e.delay,easingFunction:e.easingFunction,update:r,complete:e.complete,cancel:e.cancel,_repeat:e._repeat})};Bh.prototype.addAlpha=function(e){e=e??Y.EMPTY_OBJECT;let t=e.material,n=[];for(let o in t.uniforms)t.uniforms.hasOwnProperty(o)&&l(t.uniforms[o])&&l(t.uniforms[o].alpha)&&n.push(o);function i(o){let r=n.length;for(let s=0;s<r;++s)t.uniforms[n[s]].alpha=o.alpha}return this.add({startObject:{alpha:e.startValue??0},stopObject:{alpha:e.stopValue??1},duration:e.duration??3,delay:e.delay,easingFunction:e.easingFunction,update:i,complete:e.complete,cancel:e.cancel})};Bh.prototype.addOffsetIncrement=function(e){e=e??Y.EMPTY_OBJECT;let n=e.material.uniforms;return this.addProperty({object:n,property:"offset",startValue:n.offset,stopValue:n.offset+1,duration:e.duration,delay:e.delay,easingFunction:e.easingFunction,update:e.update,cancel:e.cancel,_repeat:1/0})};Bh.prototype.remove=function(e){if(!l(e))return!1;let t=this._tweens.indexOf(e);return t!==-1?(e.tweenjs.stop(),l(e.cancel)&&e.cancel(),this._tweens.splice(t,1),!0):!1};Bh.prototype.removeAll=function(){let e=this._tweens;for(let t=0;t<e.length;++t){let n=e[t];n.tweenjs.stop(),l(n.cancel)&&n.cancel()}e.length=0};Bh.prototype.contains=function(e){return l(e)&&this._tweens.indexOf(e)!==-1};Bh.prototype.get=function(e){return this._tweens[e]};Bh.prototype.update=function(e){let t=this._tweens,n=0;for(e=l(e)?e/Kn.SECONDS_PER_MILLISECOND:Si();n<t.length;){let i=t[n],o=i.tweenjs;i.needsStart?(i.needsStart=!1,o.start(e)):o.update(e)?n++:(o.stop(),t.splice(n,1))}};var nS=Bh;function g9(e){this.enableInputs=!0,this.enableTranslate=!0,this.enableZoom=!0,this.enableRotate=!0,this.enableTilt=!0,this.enableLook=!0,this.inertiaSpin=.9,this.inertiaTranslate=.9,this.inertiaZoom=.8,this.maximumMovementRatio=.1,this.bounceAnimationTime=3,this.minimumZoomDistance=1,this.maximumZoomDistance=Number.POSITIVE_INFINITY,this.zoomFactor=5,this.translateEventTypes=Ai.LEFT_DRAG,this.zoomEventTypes=[Ai.RIGHT_DRAG,Ai.WHEEL,Ai.PINCH],this.rotateEventTypes=Ai.LEFT_DRAG,this.tiltEventTypes=[Ai.MIDDLE_DRAG,Ai.PINCH,{eventType:Ai.LEFT_DRAG,modifier:ra.CTRL},{eventType:Ai.RIGHT_DRAG,modifier:ra.CTRL}],this.lookEventTypes={eventType:Ai.LEFT_DRAG,modifier:ra.SHIFT};let t=e.ellipsoid??ne.default;this.minimumPickingTerrainHeight=ne.WGS84.equals(t)?15e4:t.minimumRadius*.025,this._minimumPickingTerrainHeight=this.minimumPickingTerrainHeight,this.minimumPickingTerrainDistanceWithInertia=ne.WGS84.equals(t)?4e3:t.minimumRadius*63e-5,this.minimumCollisionTerrainHeight=ne.WGS84.equals(t)?15e3:t.minimumRadius*.0025,this._minimumCollisionTerrainHeight=this.minimumCollisionTerrainHeight,this.minimumTrackBallHeight=ne.WGS84.equals(t)?75e5:t.minimumRadius*1.175,this._minimumTrackBallHeight=this.minimumTrackBallHeight,this.enableCollisionDetection=!0,this.maximumTiltAngle=void 0,this._scene=e,this._globe=void 0,this._ellipsoid=t,this._lastGlobeHeight=0,this._aggregator=new p9(e.canvas),this._lastInertiaSpinMovement=void 0,this._lastInertiaZoomMovement=void 0,this._lastInertiaTranslateMovement=void 0,this._lastInertiaTiltMovement=void 0,this._inertiaDisablers={_lastInertiaZoomMovement:["_lastInertiaSpinMovement","_lastInertiaTranslateMovement","_lastInertiaTiltMovement"],_lastInertiaTiltMovement:["_lastInertiaSpinMovement","_lastInertiaTranslateMovement"]},this._tweens=new nS,this._tween=void 0,this._horizontalRotationAxis=void 0,this._tiltCenterMousePosition=new U(-1,-1),this._tiltCenter=new m,this._rotateMousePosition=new U(-1,-1),this._rotateStartPosition=new m,this._strafeStartPosition=new m,this._strafeMousePosition=new U,this._strafeEndMousePosition=new U,this._zoomMouseStart=new U(-1,-1),this._zoomWorldPosition=new m,this._useZoomWorldPosition=!1,this._panLastMousePosition=new U,this._panLastWorldPosition=new m,this._tiltCVOffMap=!1,this._looking=!1,this._rotating=!1,this._strafing=!1,this._zoomingOnVector=!1,this._zoomingUnderground=!1,this._rotatingZoom=!1,this._adjustedHeightForTerrain=!1,this._cameraUnderground=!1;let n=e.mapProjection;this._maxCoord=n.project(new he(Math.PI,X.PI_OVER_TWO)),this._rotateFactor=void 0,this._rotateRateRangeAdjustment=void 0,this._maximumRotateRate=1.77,this._minimumRotateRate=1/5e3,this._minimumZoomRate=20,this._maximumZoomRate=5906376272e3,this._minimumUndergroundPickDistance=2e3,this._maximumUndergroundPickDistance=1e4}function ebt(e,t){if(e<0)return 0;let n=(1-t)*25;return Math.exp(-n*e)}function tbt(e){return U.equalsEpsilon(e.startPosition,e.endPosition,X.EPSILON14)}var nbt=.4;function ibt(e,t,n,i,o,r,s){let a=r[s];l(a)||(a=r[s]={startPosition:new U,endPosition:new U,motion:new U,inertiaEnabled:!0});let c=e.getButtonPressTime(t,n),d=e.getButtonReleaseTime(t,n),u=c&&d&&(d.getTime()-c.getTime())/1e3,p=d&&(new Date().getTime()-d.getTime())/1e3;if(c&&d&&u<nbt){let g=ebt(p,i),f=e.getLastMovement(t,n);if(!l(f)||tbt(f)||!a.inertiaEnabled||(a.motion.x=(f.endPosition.x-f.startPosition.x)*.5,a.motion.y=(f.endPosition.y-f.startPosition.y)*.5,a.startPosition=U.clone(f.startPosition,a.startPosition),a.endPosition=U.multiplyByScalar(a.motion,g,a.endPosition),a.endPosition=U.add(a.startPosition,a.endPosition,a.endPosition),isNaN(a.endPosition.x)||isNaN(a.endPosition.y)||U.distance(a.startPosition,a.endPosition)<.5))return;if(!e.isButtonDown(t,n)){let y=e.getStartMousePosition(t,n);o(r,y,a)}}}function obt(e,t){if(l(t)){let n=e[t];l(n)&&(n.inertiaEnabled=!0);let i=e._inertiaDisablers[t];if(l(i)){let o=i.length;for(let r=0;r<o;++r)n=e[i[r]],l(n)&&(n.inertiaEnabled=!1)}}}var A_e=[];function yl(e,t,n,i,o,r){if(!l(n))return;let s=e._aggregator;Array.isArray(n)||(A_e[0]=n,n=A_e);let a=n.length;for(let c=0;c<a;++c){let d=n[c],u=l(d.eventType)?d.eventType:d,h=d.modifier,p=s.isMoving(u,h)&&s.getMovement(u,h),g=s.getStartMousePosition(u,h);e.enableInputs&&t&&(p?(i(e,g,p),obt(e,r)):o<1&&ibt(s,u,h,o,i,e,r))}}var E3=new pn,rbt=new m,sbt=new U,abt=new m,cbt=new U,lbt=new m,dbt=new m,ubt=new m,mbt=new m,J_e=new m,hbt=new m,fbt=new m,pbt=new m,bbt=new m,gbt=new m,ybt=new m,xbt=new m,_bt=new m,Tbt=new m,Sbt=new m,iS=new m,M_e=new m,N_e=new m,h8={orientation:new Ea};function T8(e,t,n,i,o,r){let s=1;l(r)&&(s=X.clamp(Math.abs(r),.25,1));let a=n.endPosition.y-n.startPosition.y,d=a>0?e.minimumZoomDistance*s:0,u=e.maximumZoomDistance,h=o-d,p=i*h;p=X.clamp(p,e._minimumZoomRate,e._maximumZoomRate);let g=a/e._scene.canvas.clientHeight;g=Math.min(g,e.maximumMovementRatio);let f=p*g;if(e.enableCollisionDetection||e.minimumZoomDistance===0||!l(e._globe)){if(f>0&&Math.abs(o-d)<1||f<0&&Math.abs(o-u)<1)return;o-f<d?f=o-d-1:o-f>u&&(f=o-u)}let y=e._scene,x=y.camera,S=y.mode,C=h8.orientation;C.heading=x.heading,C.pitch=x.pitch,C.roll=x.roll;let V=n.inertiaEnabled??U.equals(t,e._zoomMouseStart),L=e._zoomingOnVector,Z=e._rotatingZoom,E;if(V||(e._zoomMouseStart=U.clone(t,e._zoomMouseStart),l(e._globe)&&S===oe.SCENE2D?(E=x.getPickRay(t,E3).origin,E=m.fromElements(E.y,E.z,E.x)):l(e._globe)&&(E=T0(e,t,rbt)),l(E)?(e._useZoomWorldPosition=!0,e._zoomWorldPosition=m.clone(E,e._zoomWorldPosition)):e._useZoomWorldPosition=!1,L=e._zoomingOnVector=!1,Z=e._rotatingZoom=!1,e._zoomingUnderground=e._cameraUnderground),!e._useZoomWorldPosition){x.zoomIn(f);return}let P=S===oe.COLUMBUS_VIEW;if(x.positionCartographic.height<2e6&&(Z=!0),!V||Z){if(S===oe.SCENE2D){let W=e._zoomWorldPosition,v=x.position;if(!m.equals(W,v)&&x.positionCartographic.height<e._maxCoord.x*2){let A=x.position.x,b=m.subtract(W,v,abt);m.normalize(b,b);let R=m.distance(W,v)*f/(x.getMagnitude()*.5);x.move(b,R*.5),(x.position.x<0&&A>0||x.position.x>0&&A<0)&&(E=x.getPickRay(t,E3).origin,E=m.fromElements(E.y,E.z,E.x),e._zoomWorldPosition=m.clone(E,e._zoomWorldPosition))}}else if(S===oe.SCENE3D){let W=m.normalize(x.position,J_e);if(e._cameraUnderground||e._zoomingUnderground||x.positionCartographic.height<3e3&&Math.abs(m.dot(x.direction,W))<.6)P=!0;else{let v=y.canvas,A=cbt;A.x=v.clientWidth/2,A.y=v.clientHeight/2;let b=T0(e,A,lbt);if(!l(b))P=!0;else if(x.positionCartographic.height<1e6)if(m.dot(x.direction,W)>=-.5)P=!0;else{let R=fbt;m.clone(x.position,R);let G=e._zoomWorldPosition,I=hbt;if(I=m.normalize(G,I),m.dot(I,W)<0)return;let w=Sbt,M=gbt;m.clone(x.direction,M),m.add(R,m.multiplyByScalar(M,1e3,iS),w);let B=ybt,k=xbt;m.subtract(G,R,B),m.normalize(B,k);let O=m.dot(W,k);if(O>=0){e._zoomMouseStart.x=-1;return}let N=Math.acos(-O),z=m.magnitude(R),K=m.magnitude(G),te=z-f,H=m.magnitude(B),j=Math.asin(X.clamp(H/K*Math.sin(N),-1,1)),ee=Math.asin(X.clamp(te/K*Math.sin(N),-1,1)),fe=j-ee+N,Te=pbt;m.normalize(R,Te);let de=bbt;de=m.cross(k,Te,de),de=m.normalize(de,de),m.normalize(m.cross(Te,de,iS),M),m.multiplyByScalar(m.normalize(w,iS),m.magnitude(w)-f,w),m.normalize(R,R),m.multiplyByScalar(R,te,R);let xe=_bt;m.multiplyByScalar(m.add(m.multiplyByScalar(Te,Math.cos(fe)-1,M_e),m.multiplyByScalar(M,Math.sin(fe),N_e),iS),te,xe),m.add(R,xe,R),m.normalize(w,Te),m.normalize(m.cross(Te,de,iS),M);let Ce=Tbt;m.multiplyByScalar(m.add(m.multiplyByScalar(Te,Math.cos(fe)-1,M_e),m.multiplyByScalar(M,Math.sin(fe),N_e),iS),m.magnitude(w),Ce),m.add(w,Ce,w),m.clone(R,x.position),m.normalize(m.subtract(w,R,iS),x.direction),m.clone(x.direction,x.direction),m.cross(x.direction,x.up,x.right),m.cross(x.right,x.direction,x.up),x.setView(h8);return}else{let R=m.normalize(b,dbt),G=m.normalize(e._zoomWorldPosition,ubt),I=m.dot(G,R);if(I>0&&I<1){let w=X.acosClamped(I),M=m.cross(G,R,mbt),B=Math.abs(w)>X.toRadians(20)?x.positionCartographic.height*.75:x.positionCartographic.height-f,k=f/B;x.rotate(M,w*k)}}}}e._rotatingZoom=!P}if(!V&&P||L){let W,v=Ui.worldToWindowCoordinates(y,e._zoomWorldPosition,sbt);S!==oe.COLUMBUS_VIEW&&U.equals(t,e._zoomMouseStart)&&l(v)?W=x.getPickRay(v,E3):W=x.getPickRay(t,E3);let A=W.direction;(S===oe.COLUMBUS_VIEW||S===oe.SCENE2D)&&m.fromElements(A.y,A.z,A.x,A),x.move(A,f),e._zoomingOnVector=!0}else x.zoomIn(f);e._cameraUnderground||x.setView(h8)}var Cbt=new pn,Vbt=new pn,Lbt=new m;function Rbt(e,t,n){let o=e._scene.camera,r=o.getPickRay(n.startPosition,Cbt).origin,s=o.getPickRay(n.endPosition,Vbt).origin;r=m.fromElements(r.y,r.z,r.x,r),s=m.fromElements(s.y,s.z,s.x,s);let a=m.subtract(r,s,Lbt),c=m.magnitude(a);c>0&&(m.normalize(a,a),o.move(a,c))}function k_e(e,t,n){l(n.distance)&&(n=n.distance);let o=e._scene.camera;T8(e,t,n,e.zoomFactor,o.getMagnitude())}var Zbt=new U,Gbt=new U;function U_e(e,t,n){if(l(n.angleAndHeight)){Ebt(e,t,n.angleAndHeight);return}let i=e._scene,o=i.camera,r=i.canvas,s=r.clientWidth,a=r.clientHeight,c=Zbt;c.x=2/s*n.startPosition.x-1,c.y=2/a*(a-n.startPosition.y)-1,c=U.normalize(c,c);let d=Gbt;d.x=2/s*n.endPosition.x-1,d.y=2/a*(a-n.endPosition.y)-1,d=U.normalize(d,d);let u=X.acosClamped(c.x);c.y<0&&(u=X.TWO_PI-u);let h=X.acosClamped(d.x);d.y<0&&(h=X.TWO_PI-h);let p=h-u;o.twistRight(p)}function Ebt(e,t,n){let i=e._rotateFactor*e._rotateRateRangeAdjustment;i>e._maximumRotateRate&&(i=e._maximumRotateRate),i<e._minimumRotateRate&&(i=e._minimumRotateRate);let o=e._scene,r=o.camera,s=o.canvas,a=(n.endPosition.x-n.startPosition.x)/s.clientWidth;a=Math.min(a,e.maximumMovementRatio);let c=i*a*Math.PI*4;r.twistRight(c)}function Ibt(e){let t=e._scene.mapMode2D===nd.ROTATE;F.equals(F.IDENTITY,e._scene.camera.transform)?(yl(e,e.enableTranslate,e.translateEventTypes,Rbt,e.inertiaTranslate,"_lastInertiaTranslateMovement"),yl(e,e.enableZoom,e.zoomEventTypes,k_e,e.inertiaZoom,"_lastInertiaZoomMovement"),t&&yl(e,e.enableRotate,e.tiltEventTypes,U_e,e.inertiaSpin,"_lastInertiaTiltMovement")):(yl(e,e.enableZoom,e.zoomEventTypes,k_e,e.inertiaZoom,"_lastInertiaZoomMovement"),t&&yl(e,e.enableRotate,e.translateEventTypes,U_e,e.inertiaSpin,"_lastInertiaSpinMovement"))}var Q_e=new pn,Xbt=new m,Wbt=new m;function T0(e,t,n){let i=e._scene,o=e._globe,r=i.camera,s;if(i.pickPositionSupported&&(s=i.pickPositionWorldCoordinates(t,Xbt)),!l(o))return m.clone(s,n);let a=!e._cameraUnderground,c=r.getPickRay(t,Q_e),d=o.pickWorldCoordinates(c,i,a,Wbt),u=l(s)?m.distance(s,r.positionWC):Number.POSITIVE_INFINITY,h=l(d)?m.distance(d,r.positionWC):Number.POSITIVE_INFINITY;return u<h?m.clone(s,n):m.clone(d,n)}var Pbt=new he;function F3(e){let t=e._ellipsoid,n=e._scene,i=n.camera,o=n.mode,r=0;if(o===oe.SCENE3D){let c=t.cartesianToCartographic(i.position,Pbt);l(c)&&(r=c.height)}else r=i.position.z;let s=e._scene.globeHeight??0;return Math.abs(s-r)}var vbt=new m;function j_e(e,t){let n=t.origin,i=t.direction,o=F3(e),r=m.normalize(n,vbt),s=Math.abs(m.dot(r,i));return s=Math.max(s,.5)*2,o*s}function q_e(e,t,n,i){let o=m.distance(t.origin,n),r=F3(e),s=X.clamp(r*5,e._minimumUndergroundPickDistance,e._maximumUndergroundPickDistance);return o>s&&(o=Math.min(o,r/5),o=Math.max(o,100)),pn.getPoint(t,o,i)}function $_e(e,t,n,i){let o;return l(n)?(o=m.distance(t.origin,n),o>e._maximumUndergroundPickDistance&&(o=F3(e))):o=F3(e),pn.getPoint(t,o,i)}var wbt=new U;function eTe(e,t){let n=t.endPosition,i=U.subtract(t.endPosition,t.startPosition,wbt),o=e._strafeEndMousePosition;U.add(o,i,o),t.endPosition=o,S8(e,t,e._strafeStartPosition),t.endPosition=n}var D_e=new pn,Fbt=new pn,f8=new m,Abt=new m,Mbt=new m,Nbt=new m,kbt=new sn(m.UNIT_X,0),Ubt=new U,Dbt=new U;function Bbt(e,t,n){if(m.equals(t,e._translateMousePosition)||(e._looking=!1),m.equals(t,e._strafeMousePosition)||(e._strafing=!1),e._looking){ru(e,t,n);return}if(e._strafing){eTe(e,n);return}let o=e._scene.camera,r=e._cameraUnderground,s=U.clone(n.startPosition,Ubt),a=U.clone(n.endPosition,Dbt),c=o.getPickRay(s,D_e),d=m.clone(m.ZERO,Nbt),u=m.UNIT_X,h;if(o.position.z<e._minimumPickingTerrainHeight&&(h=T0(e,s,f8),l(h)&&(d.x=h.x)),r||d.x>o.position.z&&l(h)){let V=h;r&&(V=$_e(e,c,h,f8)),U.clone(t,e._strafeMousePosition),U.clone(t,e._strafeEndMousePosition),m.clone(V,e._strafeStartPosition),e._strafing=!0,S8(e,n,e._strafeStartPosition);return}let p=sn.fromPointNormal(d,u,kbt);c=o.getPickRay(s,D_e);let g=qn.rayPlane(c,p,f8),f=o.getPickRay(a,Fbt),y=qn.rayPlane(f,p,Abt);if(!l(g)||!l(y)){e._looking=!0,ru(e,t,n),U.clone(t,e._translateMousePosition);return}let x=m.subtract(g,y,Mbt),S=x.x;x.x=x.y,x.y=x.z,x.z=S;let C=m.magnitude(x);C>X.EPSILON6&&(m.normalize(x,x),o.move(x,C))}var tTe=new U,W3=new pn,P3=new m,Obt=new m,nTe=new F,Ybt=new F,zbt=new m,Hbt=new sn(m.UNIT_X,0),p8=new m,y8=new he,iTe=new F,Kbt=new ve,Jbt=new $,v3=new m;function Qbt(e,t,n){if(l(n.angleAndHeight)&&(n=n.angleAndHeight),U.equals(t,e._tiltCenterMousePosition)||(e._tiltCVOffMap=!1,e._looking=!1),e._looking){ru(e,t,n);return}let o=e._scene.camera;e._tiltCVOffMap||!e.onMap()||Math.abs(o.position.z)>e._minimumPickingTerrainHeight?(e._tiltCVOffMap=!0,jbt(e,t,n)):qbt(e,t,n)}function jbt(e,t,n){let i=e._scene,o=i.camera,r=i.canvas,s=tTe;s.x=r.clientWidth/2,s.y=r.clientHeight/2;let a=o.getPickRay(s,W3),c=m.UNIT_X,d=a.origin,u=a.direction,h,p=m.dot(c,u);if(Math.abs(p)>X.EPSILON6&&(h=-m.dot(c,d)/p),!l(h)||h<=0){e._looking=!0,ru(e,t,n),U.clone(t,e._tiltCenterMousePosition);return}let g=m.multiplyByScalar(u,h,P3);m.add(d,g,g);let f=i.mapProjection,y=f.ellipsoid;m.fromElements(g.y,g.z,g.x,g);let x=f.unproject(g,y8);y.cartographicToCartesian(x,g);let S=Pt.eastNorthUpToFixedFrame(g,y,nTe),C=e._globe,V=e._ellipsoid;e._globe=void 0,e._ellipsoid=ne.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;let L=F.clone(o.transform,iTe);o._setTransform(S),ou(e,t,n,m.UNIT_Z),o._setTransform(L),e._globe=C,e._ellipsoid=V;let Z=V.maximumRadius;e._rotateFactor=1/Z,e._rotateRateRangeAdjustment=Z}function qbt(e,t,n){let i=e._scene,o=i.camera,r=e._cameraUnderground,s,a,c=m.UNIT_X;if(U.equals(t,e._tiltCenterMousePosition))s=m.clone(e._tiltCenter,P3);else{if(o.position.z<e._minimumPickingTerrainHeight&&(s=T0(e,t,P3)),!l(s)){a=o.getPickRay(t,W3);let b=a.origin,R=a.direction,G,I=m.dot(c,R);if(Math.abs(I)>X.EPSILON6&&(G=-m.dot(c,b)/I),!l(G)||G<=0){e._looking=!0,ru(e,t,n),U.clone(t,e._tiltCenterMousePosition);return}s=m.multiplyByScalar(R,G,P3),m.add(b,s,s)}r&&(l(a)||(a=o.getPickRay(t,W3)),q_e(e,a,s,s)),U.clone(t,e._tiltCenterMousePosition),m.clone(s,e._tiltCenter)}let d=i.canvas,u=tTe;u.x=d.clientWidth/2,u.y=e._tiltCenterMousePosition.y,a=o.getPickRay(u,W3);let h=m.clone(m.ZERO,zbt);h.x=s.x;let p=sn.fromPointNormal(h,c,Hbt),g=qn.rayPlane(a,p,Obt),f=o._projection,y=f.ellipsoid;m.fromElements(s.y,s.z,s.x,s);let x=f.unproject(s,y8);y.cartographicToCartesian(x,s);let S=Pt.eastNorthUpToFixedFrame(s,y,nTe),C;l(g)?(m.fromElements(g.y,g.z,g.x,g),x=f.unproject(g,y8),y.cartographicToCartesian(x,g),C=Pt.eastNorthUpToFixedFrame(g,y,Ybt)):C=S;let V=e._globe,L=e._ellipsoid;e._globe=void 0,e._ellipsoid=ne.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;let Z=m.UNIT_Z,E=F.clone(o.transform,iTe);o._setTransform(S);let P=m.cross(m.UNIT_Z,m.normalize(o.position,p8),p8),W=m.dot(o.right,P);if(ou(e,t,n,Z,!1,!0),o._setTransform(C),W<0){let b=n.startPosition.y-n.endPosition.y;(r&&b<0||!r&&b>0)&&(Z=void 0);let R=o.constrainedAxis;o.constrainedAxis=void 0,ou(e,t,n,Z,!0,!1),o.constrainedAxis=R}else ou(e,t,n,Z,!0,!1);if(l(o.constrainedAxis)){let b=m.cross(o.direction,o.constrainedAxis,v3);m.equalsEpsilon(b,m.ZERO,X.EPSILON6)||(m.dot(b,o.right)<0&&m.negate(b,b),m.cross(b,o.direction,o.up),m.cross(o.direction,o.up,o.right),m.normalize(o.up,o.up),m.normalize(o.right,o.right))}o._setTransform(E),e._globe=V,e._ellipsoid=L;let v=L.maximumRadius;e._rotateFactor=1/v,e._rotateRateRangeAdjustment=v;let A=m.clone(o.positionWC,p8);if(e.enableCollisionDetection&&L8(e,!0),!m.equals(o.positionWC,A)){o._setTransform(C),o.worldToCameraCoordinatesPoint(A,A);let b=m.magnitudeSquared(A);m.magnitudeSquared(o.position)>b&&(m.normalize(o.position,o.position),m.multiplyByScalar(o.position,Math.sqrt(b),o.position));let R=m.angleBetween(A,o.position),G=m.cross(A,o.position,A);m.normalize(G,G);let I=ve.fromAxisAngle(G,R,Kbt),w=$.fromQuaternion(I,Jbt);$.multiplyByVector(w,o.direction,o.direction),$.multiplyByVector(w,o.up,o.up),m.cross(o.direction,o.up,o.right),m.cross(o.right,o.direction,o.up),o._setTransform(E)}}var oTe=new U,rTe=new pn,sTe=new m;function $bt(e,t,n){l(n.distance)&&(n=n.distance);let i=e._scene,o=i.camera,r=i.canvas,s=e._cameraUnderground,a;s?a=t:(a=oTe,a.x=r.clientWidth/2,a.y=r.clientHeight/2);let c=o.getPickRay(a,rTe),d=c.origin,u=c.direction,h=o.position.z,p;h<e._minimumPickingTerrainHeight&&(p=T0(e,a,sTe));let g;if(l(p)&&(g=m.distance(d,p)),s){let f=j_e(e,c,h);l(g)?g=Math.min(g,f):g=f}if(!l(g)){let f=m.UNIT_X;g=-m.dot(f,d)/m.dot(f,u)}T8(e,t,n,e.zoomFactor,g)}function e0t(e){let n=e._scene.camera;if(!F.equals(F.IDENTITY,n.transform))yl(e,e.enableRotate,e.rotateEventTypes,ou,e.inertiaSpin,"_lastInertiaSpinMovement"),yl(e,e.enableZoom,e.zoomEventTypes,cTe,e.inertiaZoom,"_lastInertiaZoomMovement");else{let i=e._tweens;if(e._aggregator.anyButtonDown&&i.removeAll(),yl(e,e.enableTilt,e.tiltEventTypes,Qbt,e.inertiaSpin,"_lastInertiaTiltMovement"),yl(e,e.enableTranslate,e.translateEventTypes,Bbt,e.inertiaTranslate,"_lastInertiaTranslateMovement"),yl(e,e.enableZoom,e.zoomEventTypes,$bt,e.inertiaZoom,"_lastInertiaZoomMovement"),yl(e,e.enableLook,e.lookEventTypes,ru),!e._aggregator.anyButtonDown&&!i.contains(e._tween)){let o=n.createCorrectPositionTween(e.bounceAnimationTime);l(o)&&(e._tween=i.add(o))}i.update()}}var t0t=new pn,n0t=new sn(m.UNIT_X,0),i0t=new m,o0t=new m;function S8(e,t,n){let i=e._scene,o=i.camera,r=o.getPickRay(t.endPosition,t0t),s=m.clone(o.direction,o0t);i.mode===oe.COLUMBUS_VIEW&&m.fromElements(s.z,s.x,s.y,s);let a=sn.fromPointNormal(n,s,n0t),c=qn.rayPlane(r,a,i0t);l(c)&&(s=m.subtract(n,c,s),i.mode===oe.COLUMBUS_VIEW&&m.fromElements(s.y,s.z,s.x,s),m.add(o.position,s,o.position))}var B_e=new m,aTe=new he,x8=new m,_8=new ne,r0t=new m,s0t=new m,a0t=new m;function c0t(e,t,n){let o=e._scene.camera,r=e._cameraUnderground,s=e._ellipsoid;if(!F.equals(o.transform,F.IDENTITY)){ou(e,t,n);return}let a,c,d=s.geodeticSurfaceNormal(o.position,r0t);if(U.equals(t,e._rotateMousePosition)){if(e._looking)ru(e,t,n,d);else if(e._rotating)ou(e,t,n);else if(e._strafing)eTe(e,n);else{if(m.magnitude(o.position)<m.magnitude(e._rotateStartPosition))return;a=m.magnitude(e._rotateStartPosition),c=x8,c.x=c.y=c.z=a,s=ne.fromCartesian3(c,_8),g8(e,t,n,s)}return}e._looking=!1,e._rotating=!1,e._strafing=!1;let u=s.cartesianToCartographic(o.positionWC,aTe).height,h=e._globe;if(l(h)&&u<e._minimumPickingTerrainHeight){let p=T0(e,n.startPosition,a0t);if(l(p)){let g=!1,f=o.getPickRay(n.startPosition,Q_e);if(r)g=!0,$_e(e,f,p,p);else{let y=s.geodeticSurfaceNormal(p,s0t);Math.abs(m.dot(f.direction,y))<.05?g=!0:g=m.magnitude(o.position)<m.magnitude(p)}g?(U.clone(t,e._strafeEndMousePosition),m.clone(p,e._strafeStartPosition),e._strafing=!0,S8(e,n,e._strafeStartPosition)):(a=m.magnitude(p),c=x8,c.x=c.y=c.z=a,s=ne.fromCartesian3(c,_8),g8(e,t,n,s),m.clone(p,e._rotateStartPosition))}else e._looking=!0,ru(e,t,n,d)}else l(o.pickEllipsoid(n.startPosition,e._ellipsoid,B_e))?(g8(e,t,n,e._ellipsoid),m.clone(B_e,e._rotateStartPosition)):u>e._minimumTrackBallHeight?(e._rotating=!0,ou(e,t,n)):(e._looking=!0,ru(e,t,n,d));U.clone(t,e._rotateMousePosition)}function ou(e,t,n,i,o,r){o=o??!1,r=r??!1;let s=e._scene,a=s.camera,c=s.canvas,d=a.constrainedAxis;l(i)&&(a.constrainedAxis=i);let u=m.magnitude(a.position),h=e._rotateFactor*(u-e._rotateRateRangeAdjustment);h>e._maximumRotateRate&&(h=e._maximumRotateRate),h<e._minimumRotateRate&&(h=e._minimumRotateRate);let p=(n.startPosition.x-n.endPosition.x)/c.clientWidth,g=(n.startPosition.y-n.endPosition.y)/c.clientHeight;p=Math.min(p,e.maximumMovementRatio),g=Math.min(g,e.maximumMovementRatio);let f=h*p*Math.PI*2,y=h*g*Math.PI;if(l(i)&&l(e.maximumTiltAngle)){let x=e.maximumTiltAngle,S=m.dot(a.direction,i),C=Math.PI-Math.acos(S)+y;C>x&&(y-=C-x)}o||a.rotateRight(f),r||a.rotateUp(y),a.constrainedAxis=d}var b8=se.clone(se.UNIT_W),O_e=se.clone(se.UNIT_W),I3=new m,uL=new m,X3=new m,Y_e=new m,l0t=new U,d0t=new U,u0t=new U,m0t=new U,h0t=new pn;function g8(e,t,n,i){let o=e._scene,r=o.camera,s=U.clone(n.startPosition,l0t),a=U.clone(n.endPosition,d0t),c=i.cartesianToCartographic(r.positionWC,aTe).height,d,u;if(!n.inertiaEnabled&&c<e._minimumPickingTerrainHeight&&(d=m.clone(e._panLastWorldPosition,b8),!l(e._globe)&&!U.equalsEpsilon(s,e._panLastMousePosition)&&(d=T0(e,s,b8)),!l(e._globe)&&l(d))){let h=m.subtract(d,r.positionWC,uL),p=m.multiplyByScalar(r.directionWC,m.dot(r.directionWC,h),uL),g=m.magnitude(p),f=r.frustum.getPixelDimensions(o.drawingBufferWidth,o.drawingBufferHeight,g,o.pixelRatio,m0t),y=U.subtract(a,s,u0t),x=m.multiplyByScalar(r.rightWC,y.x*f.x,uL),S=m.normalize(r.positionWC,J_e),C=r.getPickRay(a,h0t).direction,V=m.subtract(C,m.projectVector(C,r.rightWC,X3),X3),L=m.angleBetween(V,r.directionWC),Z=1;l(r.frustum.fov)&&(Z=Math.max(Math.tan(L),.1));let E=Math.abs(m.dot(r.directionWC,S)),P=-y.y*f.y*2/Math.sqrt(Z)*(1-E),W=m.multiplyByScalar(C,P,X3);E=Math.abs(m.dot(r.upWC,S));let v=m.multiplyByScalar(r.upWC,-y.y*(1-E)*f.y,Y_e);u=m.add(d,x,O_e),u=m.add(u,W,u),u=m.add(u,v,u),m.clone(u,e._panLastWorldPosition),U.clone(a,e._panLastMousePosition)}if((!l(d)||!l(u))&&(d=r.pickEllipsoid(s,i,b8),u=r.pickEllipsoid(a,i,O_e)),!l(d)||!l(u)){e._rotating=!0,ou(e,t,n);return}if(d=r.worldToCameraCoordinates(d,d),u=r.worldToCameraCoordinates(u,u),l(r.constrainedAxis)){let h=r.constrainedAxis,p=m.mostOrthogonalAxis(h,I3);m.cross(p,h,p),m.normalize(p,p);let g=m.cross(h,p,uL),f=m.magnitude(d),y=m.dot(h,d),x=Math.acos(y/f),S=m.multiplyByScalar(h,y,X3);m.subtract(d,S,S),m.normalize(S,S);let C=m.magnitude(u),V=m.dot(h,u),L=Math.acos(V/C),Z=m.multiplyByScalar(h,V,Y_e);m.subtract(u,Z,Z),m.normalize(Z,Z);let E=Math.acos(m.dot(S,p));m.dot(S,g)<0&&(E=X.TWO_PI-E);let P=Math.acos(m.dot(Z,p));m.dot(Z,g)<0&&(P=X.TWO_PI-P);let W=E-P,v;m.equalsEpsilon(h,r.position,X.EPSILON2)?v=r.right:v=m.cross(h,r.position,I3);let A=m.cross(h,v,I3),b=m.dot(A,m.subtract(d,h,uL)),R=m.dot(A,m.subtract(u,h,uL)),G;b>0&&R>0?G=L-x:b>0&&R<=0?m.dot(r.position,h)>0?G=-x-L:G=x+L:G=x-L,r.rotateRight(W),r.rotateUp(G)}else{m.normalize(d,d),m.normalize(u,u);let h=m.dot(d,u),p=m.cross(d,u,I3);if(h<1&&!m.equalsEpsilon(p,m.ZERO,X.EPSILON14)){let g=Math.acos(h);r.rotate(p,g)}}}var f0t=new m,p0t=new he,z_e=0;function cTe(e,t,n){l(n.distance)&&(n=n.distance);let i=n.inertiaEnabled,o=e._ellipsoid,r=e._scene,s=r.camera,a=r.canvas,c=e._cameraUnderground,d;c?d=t:(d=oTe,d.x=a.clientWidth/2,d.y=a.clientHeight/2);let u=s.getPickRay(d,rTe),h,p=o.cartesianToCartographic(s.position,p0t).height,g=Math.abs(z_e)<e.minimumPickingTerrainDistanceWithInertia;(i?g:p<e._minimumPickingTerrainHeight)&&(h=T0(e,d,sTe));let y;if(l(h)&&(y=m.distance(u.origin,h),z_e=y),c){let S=j_e(e,u,p);l(y)?y=Math.min(y,S):y=S}l(y)||(y=p);let x=m.normalize(s.position,f0t);T8(e,t,n,e.zoomFactor,y,m.dot(x,s.direction))}var lTe=new U,w3=new pn,b9=new m,b0t=new m,dTe=new F,g0t=new F,uTe=new F,y0t=new ve,x0t=new $,C8=new he,V8=new m;function _0t(e,t,n){let o=e._scene.camera;if(!F.equals(o.transform,F.IDENTITY))return;if(l(n.angleAndHeight)&&(n=n.angleAndHeight),U.equals(t,e._tiltCenterMousePosition)||(e._tiltOnEllipsoid=!1,e._looking=!1),e._looking){let a=e._ellipsoid.geodeticSurfaceNormal(o.position,V8);ru(e,t,n,a);return}let s=e._ellipsoid.cartesianToCartographic(o.position,C8);e._tiltOnEllipsoid||s.height>e._minimumCollisionTerrainHeight?(e._tiltOnEllipsoid=!0,S0t(e,t,n)):C0t(e,t,n)}var T0t=new he;function S0t(e,t,n){let i=e._ellipsoid,o=e._scene,r=o.camera,s=e.minimumZoomDistance*.25,a=i.cartesianToCartographic(r.positionWC,T0t).height;if(a-s-1<X.EPSILON3&&n.endPosition.y-n.startPosition.y<0)return;let c=o.canvas,d=lTe;d.x=c.clientWidth/2,d.y=c.clientHeight/2;let u=r.getPickRay(d,w3),h,p=qn.rayEllipsoid(u,i);if(l(p))h=pn.getPoint(u,p.start,b9);else if(a>e._minimumTrackBallHeight){let C=qn.grazingAltitudeLocation(u,i);if(!l(C))return;let V=i.cartesianToCartographic(C,C8);V.height=0,h=i.cartographicToCartesian(V,b9)}else{e._looking=!0;let C=e._ellipsoid.geodeticSurfaceNormal(r.position,V8);ru(e,t,n,C),U.clone(t,e._tiltCenterMousePosition);return}let g=Pt.eastNorthUpToFixedFrame(h,i,dTe),f=e._globe,y=e._ellipsoid;e._globe=void 0,e._ellipsoid=ne.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;let x=F.clone(r.transform,uTe);r._setTransform(g),ou(e,t,n,m.UNIT_Z),r._setTransform(x),e._globe=f,e._ellipsoid=y;let S=y.maximumRadius;e._rotateFactor=1/S,e._rotateRateRangeAdjustment=S}function C0t(e,t,n){let i=e._ellipsoid,o=e._scene,r=o.camera,s=e._cameraUnderground,a,c,d;if(U.equals(t,e._tiltCenterMousePosition))a=m.clone(e._tiltCenter,b9);else{if(a=T0(e,t,b9),!l(a)){if(c=r.getPickRay(t,w3),d=qn.rayEllipsoid(c,i),!l(d)){if(i.cartesianToCartographic(r.position,C8).height<=e._minimumTrackBallHeight){e._looking=!0;let R=e._ellipsoid.geodeticSurfaceNormal(r.position,V8);ru(e,t,n,R),U.clone(t,e._tiltCenterMousePosition)}return}a=pn.getPoint(c,d.start,b9)}s&&(l(c)||(c=r.getPickRay(t,w3)),q_e(e,c,a,a)),U.clone(t,e._tiltCenterMousePosition),m.clone(a,e._tiltCenter)}let u=o.canvas,h=lTe;h.x=u.clientWidth/2,h.y=e._tiltCenterMousePosition.y,c=r.getPickRay(h,w3);let p=m.magnitude(a),g=m.fromElements(p,p,p,x8),f=ne.fromCartesian3(g,_8);if(d=qn.rayEllipsoid(c,f),!l(d))return;let y=m.magnitude(c.origin)>p?d.start:d.stop,x=pn.getPoint(c,y,b0t),S=Pt.eastNorthUpToFixedFrame(a,i,dTe),C=Pt.eastNorthUpToFixedFrame(x,f,g0t),V=e._globe,L=e._ellipsoid;e._globe=void 0,e._ellipsoid=ne.UNIT_SPHERE,e._rotateFactor=1,e._rotateRateRangeAdjustment=1;let Z=m.UNIT_Z,E=F.clone(r.transform,uTe);r._setTransform(C);let P=m.cross(x,r.positionWC,v3);if(m.dot(r.rightWC,P)<0){let b=n.startPosition.y-n.endPosition.y;(s&&b<0||!s&&b>0)&&(Z=void 0);let R=r.constrainedAxis;r.constrainedAxis=void 0,ou(e,t,n,Z,!0,!1),r.constrainedAxis=R}else ou(e,t,n,Z,!0,!1);if(r._setTransform(S),ou(e,t,n,Z,!1,!0),l(r.constrainedAxis)){let b=m.cross(r.direction,r.constrainedAxis,v3);m.equalsEpsilon(b,m.ZERO,X.EPSILON6)||(m.dot(b,r.right)<0&&m.negate(b,b),m.cross(b,r.direction,r.up),m.cross(r.direction,r.up,r.right),m.normalize(r.up,r.up),m.normalize(r.right,r.right))}r._setTransform(E),e._globe=V,e._ellipsoid=L;let v=L.maximumRadius;e._rotateFactor=1/v,e._rotateRateRangeAdjustment=v;let A=m.clone(r.positionWC,v3);if(e.enableCollisionDetection&&L8(e,!0),!m.equals(r.positionWC,A)){r._setTransform(C),r.worldToCameraCoordinatesPoint(A,A);let b=m.magnitudeSquared(A);m.magnitudeSquared(r.position)>b&&(m.normalize(r.position,r.position),m.multiplyByScalar(r.position,Math.sqrt(b),r.position));let R=m.angleBetween(A,r.position),G=m.cross(A,r.position,A);m.normalize(G,G);let I=ve.fromAxisAngle(G,R,y0t),w=$.fromQuaternion(I,x0t);$.multiplyByVector(w,r.direction,r.direction),$.multiplyByVector(w,r.up,r.up),m.cross(r.direction,r.up,r.right),m.cross(r.right,r.direction,r.up),r._setTransform(E)}}var V0t=new U,L0t=new U,H_e=new pn,K_e=new pn,R0t=new m,Z0t=new m;function ru(e,t,n,i){let r=e._scene.camera,s=V0t;s.x=n.startPosition.x,s.y=0;let a=L0t;a.x=n.endPosition.x,a.y=0;let c=r.getPickRay(s,H_e),d=r.getPickRay(a,K_e),u=0,h,p;r.frustum instanceof an?(h=c.origin,p=d.origin,m.add(r.direction,h,h),m.add(r.direction,p,p),m.subtract(h,r.position,h),m.subtract(p,r.position,p),m.normalize(h,h),m.normalize(p,p)):(h=c.direction,p=d.direction);let g=m.dot(h,p);g<1&&(u=Math.acos(g)),u=n.startPosition.x>n.endPosition.x?-u:u;let f=e._horizontalRotationAxis;if(l(i)?r.look(i,-u):l(f)?r.look(f,-u):r.lookLeft(u),s.x=0,s.y=n.startPosition.y,a.x=0,a.y=n.endPosition.y,c=r.getPickRay(s,H_e),d=r.getPickRay(a,K_e),u=0,r.frustum instanceof an?(h=c.origin,p=d.origin,m.add(r.direction,h,h),m.add(r.direction,p,p),m.subtract(h,r.position,h),m.subtract(p,r.position,p),m.normalize(h,h),m.normalize(p,p)):(h=c.direction,p=d.direction),g=m.dot(h,p),g<1&&(u=Math.acos(g)),u=n.startPosition.y>n.endPosition.y?-u:u,i=i??f,l(i)){let y=r.direction,x=m.negate(i,R0t),S=m.equalsEpsilon(y,i,X.EPSILON2),C=m.equalsEpsilon(y,x,X.EPSILON2);if(!S&&!C){g=m.dot(y,i);let V=X.acosClamped(g);u>0&&u>V&&(u=V-X.EPSILON4),g=m.dot(y,x),V=X.acosClamped(g),u<0&&-u>V&&(u=-V+X.EPSILON4);let L=m.cross(i,y,Z0t);r.look(L,u)}else(S&&u<0||C&&u>0)&&r.look(r.right,-u)}else r.lookUp(u)}function G0t(e){yl(e,e.enableRotate,e.rotateEventTypes,c0t,e.inertiaSpin,"_lastInertiaSpinMovement"),yl(e,e.enableZoom,e.zoomEventTypes,cTe,e.inertiaZoom,"_lastInertiaZoomMovement"),yl(e,e.enableTilt,e.tiltEventTypes,_0t,e.inertiaSpin,"_lastInertiaTiltMovement"),yl(e,e.enableLook,e.lookEventTypes,ru)}var E0t=new F,I0t=new he;function L8(e,t){e._adjustedHeightForTerrain=!0;let n=e._scene,i=n.mode;if(i===oe.SCENE2D||i===oe.MORPHING)return;let o=n.camera,r=n.ellipsoid??ne.WGS84,s=n.mapProjection,a,c;F.equals(o.transform,F.IDENTITY)||(a=F.clone(o.transform,E0t),c=m.magnitude(o.position),o._setTransform(F.IDENTITY));let d=I0t;i===oe.SCENE3D?r.cartesianToCartographic(o.position,d):s.unproject(o.position,d);let u=!1;if(d.height<e._minimumCollisionTerrainHeight){let h=e._scene.globeHeight;if(l(h)){let p=h+e.minimumZoomDistance,g=h-e._lastGlobeHeight,f=g/e._lastGlobeHeight;d.height<p&&(t||Math.abs(f)<=.1)&&(d.height=p,i===oe.SCENE3D?r.cartographicToCartesian(d,o.position):s.project(d,o.position),u=!0),t||Math.abs(f)<=.1?e._lastGlobeHeight=h:e._lastGlobeHeight+=g*.1}}l(a)&&(o._setTransform(a),u&&(m.normalize(o.position,o.position),m.negate(o.position,o.direction),m.multiplyByScalar(o.position,Math.max(c,e.minimumZoomDistance),o.position),m.normalize(o.direction,o.direction),m.cross(o.direction,o.up,o.right),m.cross(o.right,o.direction,o.up)))}g9.prototype.onMap=function(){let e=this._scene,t=e.mode,n=e.camera;return t===oe.COLUMBUS_VIEW?Math.abs(n.position.x)-this._maxCoord.x<0&&Math.abs(n.position.y)-this._maxCoord.y<0:!0};var X0t=new m,W0t=new m;g9.prototype.update=function(){let e=this._scene,{camera:t,globe:n,mode:i}=e;F.equals(t.transform,F.IDENTITY)?(this._globe=n,this._ellipsoid=e.ellipsoid??ne.default):(this._globe=void 0,this._ellipsoid=ne.UNIT_SPHERE);let{verticalExaggeration:o,verticalExaggerationRelativeHeight:r}=e;this._minimumCollisionTerrainHeight=Tr.getHeight(this.minimumCollisionTerrainHeight,o,r),this._minimumPickingTerrainHeight=Tr.getHeight(this.minimumPickingTerrainHeight,o,r),this._minimumTrackBallHeight=Tr.getHeight(this.minimumTrackBallHeight,o,r),this._cameraUnderground=e.cameraUnderground&&l(this._globe);let s=this._ellipsoid.maximumRadius;this._rotateFactor=1/s,this._rotateRateRangeAdjustment=s,this._adjustedHeightForTerrain=!1;let a=m.clone(t.positionWC,X0t),c=m.clone(t.directionWC,W0t);if(i===oe.SCENE2D?Ibt(this):i===oe.COLUMBUS_VIEW?(this._horizontalRotationAxis=m.UNIT_Z,e0t(this)):i===oe.SCENE3D&&(this._horizontalRotationAxis=void 0,G0t(this)),this.enableCollisionDetection&&!this._adjustedHeightForTerrain){let d=!m.equals(a,t.positionWC)||!m.equals(c,t.directionWC);L8(this,d)}this._aggregator.reset()};g9.prototype.isDestroyed=function(){return!1};g9.prototype.destroy=function(){return this._tweens.removeAll(),this._aggregator=this._aggregator&&this._aggregator.destroy(),me(this)};var y9=g9;var qNi=_(T(),1);var XNi=_(T(),1),x9=`uniform sampler2D colorTexture; uniform sampler2D colorTexture2; uniform vec2 center; uniform float radius; in vec2 v_textureCoordinates; void main() { vec4 color0 = texture(colorTexture, v_textureCoordinates); vec4 color1 = texture(colorTexture2, v_textureCoordinates); float x = length(gl_FragCoord.xy - center) / radius; float t = smoothstep(0.5, 0.8, x); out_FragColor = mix(color0 + color1, color1, t); } `;var PNi=_(T(),1),_9=`uniform sampler2D colorTexture; uniform float avgLuminance; uniform float threshold; uniform float offset; in vec2 v_textureCoordinates; float key(float avg) { float guess = 1.5 - (1.5 / (avg * 0.1 + 1.0)); return max(0.0, guess) + 0.1; } // See section 9. "The bright-pass filter" of Realtime HDR Rendering // http://www.cg.tuwien.ac.at/research/publications/2007/Luksch_2007_RHR/Luksch_2007_RHR-RealtimeHDR%20.pdf void main() { vec4 color = texture(colorTexture, v_textureCoordinates); vec3 xyz = czm_RGBToXYZ(color.rgb); float luminance = xyz.r; float scaledLum = key(avgLuminance) * luminance / avgLuminance; float brightLum = max(scaledLum - threshold, 0.0); float brightness = brightLum / (offset + brightLum); xyz.r = brightness; out_FragColor = vec4(czm_XYZToRGB(xyz), 1.0); } `;function S0(){this._sceneFramebuffer=new YT;let e=.125,t=new Array(6);t[0]=new ho({fragmentShader:id,textureScale:e,forcePowerOfTwo:!0,sampleMode:eu.LINEAR});let n=t[1]=new ho({fragmentShader:_9,uniforms:{avgLuminance:.5,threshold:.25,offset:.1},textureScale:e,forcePowerOfTwo:!0}),i=this;this._delta=1,this._sigma=2,this._blurStep=new U,t[2]=new ho({fragmentShader:Py,uniforms:{step:function(){return i._blurStep.x=i._blurStep.y=1/n.outputTexture.width,i._blurStep},delta:function(){return i._delta},sigma:function(){return i._sigma},direction:0},textureScale:e,forcePowerOfTwo:!0}),t[3]=new ho({fragmentShader:Py,uniforms:{step:function(){return i._blurStep.x=i._blurStep.y=1/n.outputTexture.width,i._blurStep},delta:function(){return i._delta},sigma:function(){return i._sigma},direction:1},textureScale:e,forcePowerOfTwo:!0}),t[4]=new ho({fragmentShader:id,sampleMode:eu.LINEAR}),this._uCenter=new U,this._uRadius=void 0,t[5]=new ho({fragmentShader:x9,uniforms:{center:function(){return i._uCenter},radius:function(){return i._uRadius},colorTexture2:function(){return i._sceneFramebuffer.framebuffer.getColorTexture(0)}}}),this._stages=new od({stages:t});let o=new qT(this),r=t.length;for(let s=0;s<r;++s)t[s]._textureCache=o;this._textureCache=o,this.length=t.length}S0.prototype.get=function(e){return this._stages.get(e)};S0.prototype.getStageByName=function(e){let t=this._stages.length;for(let n=0;n<t;++n){let i=this._stages.get(n);if(i.name===e)return i}};var P0t=new se,mTe=new U,v0t=new U,hTe=new F;function w0t(e,t,n){let i=t.uniformState,o=i.sunPositionWC,r=i.view,s=i.viewProjection,a=i.projection,c=F.computeViewportTransformation(n,0,1,hTe),d=F.multiplyByPoint(r,o,P0t),u=Pt.pointToGLWindowCoordinates(s,c,o,mTe);d.x+=X.SOLAR_RADIUS;let h=Pt.pointToGLWindowCoordinates(a,c,d,d),p=U.magnitude(U.subtract(h,u,h))*30*2,g=v0t;g.x=p,g.y=p,e._uCenter=U.clone(u,e._uCenter),e._uRadius=Math.max(g.x,g.y)*.15;let f=t.drawingBufferWidth,y=t.drawingBufferHeight,x=e._stages,S=x.get(0),C=S.outputTexture.width,V=S.outputTexture.height,L=new Ke;L.width=C,L.height=V,c=F.computeViewportTransformation(L,0,1,hTe),u=Pt.pointToGLWindowCoordinates(s,c,o,mTe),g.x*=C/f,g.y*=V/y;let Z=S.scissorRectangle;Z.x=Math.max(u.x-g.x*.5,0),Z.y=Math.max(u.y-g.y*.5,0),Z.width=Math.min(g.x,f),Z.height=Math.min(g.y,y);for(let E=1;E<4;++E)Ke.clone(Z,x.get(E).scissorRectangle)}S0.prototype.clear=function(e,t,n){this._sceneFramebuffer.clear(e,t,n),this._textureCache.clear(e)};S0.prototype.update=function(e){let t=e.context,n=e.viewport,i=this._sceneFramebuffer;i.update(t,n);let o=i.framebuffer;return this._textureCache.update(t),this._stages.update(t,!1),w0t(this,t,n),o};S0.prototype.execute=function(e){let t=this._sceneFramebuffer.framebuffer.getColorTexture(0),n=this._stages,i=n.length;n.get(0).execute(e,t);for(let o=1;o<i;++o)n.get(o).execute(e,n.get(o-1).outputTexture)};S0.prototype.copy=function(e,t){if(!l(this._copyColorCommand)){let n=this;this._copyColorCommand=e.createViewportQuadCommand(id,{uniformMap:{colorTexture:function(){return n._stages.get(n._stages.length-1).outputTexture}},owner:this})}this._copyColorCommand.framebuffer=t,this._copyColorCommand.execute(e)};S0.prototype.isDestroyed=function(){return!1};S0.prototype.destroy=function(){return this._textureCache.destroy(),this._stages.destroy(),me(this)};var T9=S0;var r5i=_(T(),1);function fTe(){this._cachedShowFrustumsShaders={}}function F0t(e){let t={},n=e.vertexAttributes;for(let i in n)n.hasOwnProperty(i)&&(t[i]=n[i].index);return t}function A0t(e,t){let n=e.context,i=t,o=i.fragmentShaderSource.clone(),r=[];o.sources=o.sources.map(function(u){u=De.replaceMain(u,"czm_Debug_main");let h=/out_FragData_(\d+)/g,p;for(;(p=h.exec(u))!==null;)r.indexOf(p[1])===-1&&r.push(p[1]);return u});let s=r.length,a="";a+=`uniform vec3 debugShowCommandsColor; `,a+=`uniform vec3 debugShowFrustumsColor; `,a+=`void main() { czm_Debug_main(); `;let c;if(s>0)for(c=0;c<s;++c)a+=` out_FragData_${r[c]}.rgb *= debugShowCommandsColor; `,a+=` out_FragData_${r[c]}.rgb *= debugShowFrustumsColor; `;else a+=` out_FragColor.rgb *= debugShowCommandsColor; `,a+=` out_FragColor.rgb *= debugShowFrustumsColor; `;a+="}",o.sources.push(a);let d=F0t(i);return $t.fromCache({context:n,vertexShaderSource:i.vertexShaderSource,fragmentShaderSource:o,attributeLocations:d})}var S9=new D;function M0t(e,t){let n;return l(t.uniformMap)?n=t.uniformMap:n={},l(n.debugShowCommandsColor)||l(n.debugShowFrustumsColor)||(n.debugShowCommandsColor=function(){return e.debugShowCommands?(l(t._debugColor)||(t._debugColor=D.fromRandom()),t._debugColor):D.WHITE},n.debugShowFrustumsColor=function(){return e.debugShowFrustums?(S9.red=t.debugOverlappingFrustums&1?1:0,S9.green=t.debugOverlappingFrustums&2?1:0,S9.blue=t.debugOverlappingFrustums&4?1:0,S9.alpha=1,S9):D.WHITE}),n}var N0t=new $e;fTe.prototype.executeDebugShowFrustumsCommand=function(e,t,n){let i=t.shaderProgram.id,o=this._cachedShowFrustumsShaders[i];l(o)||(o=A0t(e,t.shaderProgram),this._cachedShowFrustumsShaders[i]=o);let r=$e.shallowClone(t,N0t);r.shaderProgram=o,r.uniformMap=M0t(e,t),r.execute(e.context,n)};var C9=fTe;var u5i=_(T(),1);function oS(e,t,n){this._primitive=e,this._tileIndex=t,this._sampleIndex=n,this._metadata={},this._orientedBoundingBox=new En}oS.fromKeyframeNode=function(e,t,n,i){let o=new oS(e,t,n),{spatialNode:r,content:s}=i;return o._metadata=k0t(e,s,n),o._orientedBoundingBox=D0t(e,r,n,o._orientedBoundingBox),o};function k0t(e,t,n){if(!l(t)||!l(t.metadata))return;let{names:i,types:o}=e.provider,{metadata:r}=t,s={};for(let a=0;a<i.length;a++){let c=i[a],d=ct.getComponentCount(o[a]),u=r[a].slice(n*d,(n+1)*d);s[c]=u}return s}var pTe=new m,U0t=new m;function D0t(e,t,n,i){let o=t.dimensions,r=o.x*o.y,s=Math.floor(n/r),a=n-s*r,c=Math.floor(a/o.x),d=a-c*o.x,u=m.fromElements(d,c,s,pTe),h=m.divideComponents(m.subtract(u,e._paddingBefore,pTe),e.dimensions,U0t);return e._shape.computeOrientedBoundingBoxForSample(t,e.dimensions,h,i)}Object.defineProperties(oS.prototype,{metadata:{get:function(){return this._metadata}},primitive:{get:function(){return this._primitive}},sampleIndex:{get:function(){return this._sampleIndex}},tileIndex:{get:function(){return this._tileIndex}},orientedBoundingBox:{get:function(){return this._orientedBoundingBox.clone()}}});oS.prototype.hasProperty=function(e){return l(this._metadata[e])};oS.prototype.getNames=function(){return Object.keys(this._metadata)};oS.prototype.getProperty=function(e){return this._metadata[e]};var V9=oS;var V3i=_(T(),1);var Pki=_(T(),1);var pki=_(T(),1);var h5i=_(T(),1),L9=`struct Ray { vec3 pos; vec3 dir; vec3 rawDir; }; #if defined(JITTER) /** * Generate a pseudo-random value for a given 2D screen coordinate. * Similar to https://www.shadertoy.com/view/4djSRW with a modified hashscale. */ float hash(vec2 p) { vec3 p3 = fract(vec3(p.xyx) * 50.0); p3 += dot(p3, p3.yzx + 19.19); return fract((p3.x + p3.y) * p3.z); } #endif float minComponent(in vec3 v) { return min(min(v.x, v.y), v.z); } float maxComponent(in vec3 v) { return max(max(v.x, v.y), v.z); } struct PointJacobianT { vec3 point; mat3 jacobianT; }; `;var p5i=_(T(),1),R9=`// See Intersection.glsl for the definition of intersectScene // See IntersectionUtils.glsl for the definition of nextIntersection // See convertUvToBox.glsl, convertUvToCylinder.glsl, or convertUvToEllipsoid.glsl // for the definition of convertUvToShapeUvSpace. The appropriate function is // selected based on the VoxelPrimitive shape type, and added to the shader in // Scene/VoxelRenderResources.js. // See Octree.glsl for the definitions of TraversalData, SampleData, // traverseOctreeFromBeginning, and traverseOctreeFromExisting // See Megatexture.glsl for the definition of accumulatePropertiesFromMegatexture #define STEP_COUNT_MAX 1000 // Harcoded value because GLSL doesn't like variable length loops #if defined(PICKING_VOXEL) #define ALPHA_ACCUM_MAX 0.1 #else #define ALPHA_ACCUM_MAX 0.98 // Must be > 0.0 and <= 1.0 #endif uniform mat3 u_transformDirectionViewToLocal; uniform vec3 u_cameraPositionUv; uniform float u_stepSize; #if defined(PICKING) uniform vec4 u_pickColor; #endif vec3 getSampleSize(in int level) { vec3 sampleCount = exp2(float(level)) * vec3(u_dimensions); vec3 sampleSizeUv = 1.0 / sampleCount; return scaleShapeUvToShapeSpace(sampleSizeUv); } #define MINIMUM_STEP_SCALAR (0.02) #define SHIFT_FRACTION (0.001) /** * Given a coordinate within a tile, and sample spacings along a ray through * the coordinate, find the distance to the points where the ray entered and * exited the voxel cell, along with the surface normals at those points. * The surface normals are returned in shape space coordinates. */ RayShapeIntersection getVoxelIntersection(in vec3 tileUv, in vec3 sampleSizeAlongRay) { vec3 voxelCoord = tileUv * vec3(u_dimensions); vec3 directions = sign(sampleSizeAlongRay); vec3 positiveDirections = max(directions, 0.0); vec3 entryCoord = mix(ceil(voxelCoord), floor(voxelCoord), positiveDirections); vec3 exitCoord = entryCoord + directions; vec3 distanceFromEntry = -abs((entryCoord - voxelCoord) * sampleSizeAlongRay); float lastEntry = maxComponent(distanceFromEntry); bvec3 isLastEntry = equal(distanceFromEntry, vec3(lastEntry)); vec3 entryNormal = -1.0 * vec3(isLastEntry) * directions; vec4 entry = vec4(entryNormal, lastEntry); vec3 distanceToExit = abs((exitCoord - voxelCoord) * sampleSizeAlongRay); float firstExit = minComponent(distanceToExit); bvec3 isFirstExit = equal(distanceToExit, vec3(firstExit)); vec3 exitNormal = vec3(isFirstExit) * directions; vec4 exit = vec4(exitNormal, firstExit); return RayShapeIntersection(entry, exit); } vec4 getStepSize(in SampleData sampleData, in Ray viewRay, in RayShapeIntersection shapeIntersection, in mat3 jacobianT, in float currentT) { // The Jacobian is computed in a space where the shape spans [-1, 1]. // But the ray is marched in a space where the shape fills [0, 1]. // So we need to scale the Jacobian by 2. vec3 gradient = 2.0 * viewRay.rawDir * jacobianT; vec3 sampleSizeAlongRay = getSampleSize(sampleData.tileCoords.w) / gradient; RayShapeIntersection voxelIntersection = getVoxelIntersection(sampleData.tileUv, sampleSizeAlongRay); // Transform normal from shape space to Cartesian space vec3 voxelNormal = normalize(jacobianT * voxelIntersection.entry.xyz); // Compare with the shape intersection, to choose the appropriate normal vec4 voxelEntry = vec4(voxelNormal, currentT + voxelIntersection.entry.w); vec4 entry = intersectionMax(shapeIntersection.entry, voxelEntry); float fixedStep = minComponent(abs(sampleSizeAlongRay)) * u_stepSize; float shift = fixedStep * SHIFT_FRACTION; float dt = voxelIntersection.exit.w + shift; if ((currentT + dt) > shapeIntersection.exit.w) { // Stop at end of shape dt = shapeIntersection.exit.w - currentT + shift; } float stepSize = clamp(dt, fixedStep * MINIMUM_STEP_SCALAR, fixedStep + shift); return vec4(entry.xyz, stepSize); } vec2 packIntToVec2(int value) { float shifted = float(value) / 255.0; float lowBits = fract(shifted); float highBits = floor(shifted) / 255.0; return vec2(highBits, lowBits); } vec2 packFloatToVec2(float value) { float lowBits = fract(value); float highBits = floor(value) / 255.0; return vec2(highBits, lowBits); } int getSampleIndex(in SampleData sampleData) { // tileUv = 1.0 is a valid coordinate but sampleIndex = u_inputDimensions is not. // (tileUv = 1.0 corresponds to the far edge of the last sample, at index = u_inputDimensions - 1). // Clamp to [0, voxelDimensions - 0.5) to avoid numerical error before flooring vec3 maxCoordinate = vec3(u_inputDimensions) - vec3(0.5); vec3 inputCoordinate = clamp(sampleData.inputCoordinate, vec3(0.0), maxCoordinate); ivec3 sampleIndex = ivec3(floor(inputCoordinate)); // Convert to a 1D index for lookup in a 1D data array return sampleIndex.x + u_inputDimensions.x * (sampleIndex.y + u_inputDimensions.y * sampleIndex.z); } void main() { vec4 fragCoord = gl_FragCoord; vec2 screenCoord = (fragCoord.xy - czm_viewport.xy) / czm_viewport.zw; // [0,1] vec3 eyeDirection = normalize(czm_windowToEyeCoordinates(fragCoord).xyz); vec3 viewDirWorld = normalize(czm_inverseViewRotation * eyeDirection); // normalize again just in case vec3 viewDirUv = normalize(u_transformDirectionViewToLocal * eyeDirection); // normalize again just in case vec3 viewPosUv = u_cameraPositionUv; #if defined(SHAPE_ELLIPSOID) // viewDirUv has been scaled to a space where the ellipsoid is a sphere. // Undo this scaling to get the raw direction. vec3 rawDir = viewDirUv * u_ellipsoidRadiiUv; Ray viewRayUv = Ray(viewPosUv, viewDirUv, rawDir); #else Ray viewRayUv = Ray(viewPosUv, viewDirUv, viewDirUv); #endif Intersections ix; RayShapeIntersection shapeIntersection = intersectScene(screenCoord, viewRayUv, ix); // Exit early if the scene was completely missed. if (shapeIntersection.entry.w == NO_HIT) { discard; } float currentT = shapeIntersection.entry.w; float endT = shapeIntersection.exit.w; vec3 positionUv = viewPosUv + currentT * viewDirUv; PointJacobianT pointJacobian = convertUvToShapeUvSpaceDerivative(positionUv); // Traverse the tree from the start position TraversalData traversalData; SampleData sampleDatas[SAMPLE_COUNT]; traverseOctreeFromBeginning(pointJacobian.point, traversalData, sampleDatas); vec4 step = getStepSize(sampleDatas[0], viewRayUv, shapeIntersection, pointJacobian.jacobianT, currentT); #if defined(JITTER) float noise = hash(screenCoord); // [0,1] currentT += noise * step.w; positionUv += noise * step.w * viewDirUv; #endif FragmentInput fragmentInput; #if defined(STATISTICS) setStatistics(fragmentInput.metadata.statistics); #endif vec4 colorAccum = vec4(0.0); for (int stepCount = 0; stepCount < STEP_COUNT_MAX; ++stepCount) { // Read properties from the megatexture based on the traversal state Properties properties = accumulatePropertiesFromMegatexture(sampleDatas); // Prepare the custom shader inputs copyPropertiesToMetadata(properties, fragmentInput.metadata); fragmentInput.voxel.positionUv = positionUv; fragmentInput.voxel.positionShapeUv = pointJacobian.point; fragmentInput.voxel.positionUvLocal = sampleDatas[0].tileUv; fragmentInput.voxel.viewDirUv = viewDirUv; fragmentInput.voxel.viewDirWorld = viewDirWorld; fragmentInput.voxel.surfaceNormal = step.xyz; fragmentInput.voxel.travelDistance = step.w; fragmentInput.voxel.stepCount = stepCount; fragmentInput.voxel.tileIndex = sampleDatas[0].megatextureIndex; fragmentInput.voxel.sampleIndex = getSampleIndex(sampleDatas[0]); // Run the custom shader czm_modelMaterial materialOutput; fragmentMain(fragmentInput, materialOutput); // Sanitize the custom shader output vec4 color = vec4(materialOutput.diffuse, materialOutput.alpha); color.rgb = max(color.rgb, vec3(0.0)); color.a = clamp(color.a, 0.0, 1.0); // Pre-multiplied alpha blend colorAccum += (1.0 - colorAccum.a) * vec4(color.rgb * color.a, color.a); // Stop traversing if the alpha has been fully saturated if (colorAccum.a > ALPHA_ACCUM_MAX) { colorAccum.a = ALPHA_ACCUM_MAX; break; } if (step.w == 0.0) { // Shape is infinitely thin. The ray may have hit the edge of a // foreground voxel. Step ahead slightly to check for more voxels step.w == 0.00001; } // Keep raymarching currentT += step.w; positionUv = viewPosUv + currentT * viewDirUv; // Check if there's more intersections. if (currentT > endT) { #if (INTERSECTION_COUNT == 1) break; #else shapeIntersection = nextIntersection(ix); if (shapeIntersection.entry.w == NO_HIT) { break; } else { // Found another intersection. Resume raymarching there currentT = shapeIntersection.entry.w; endT = shapeIntersection.exit.w; positionUv = viewPosUv + currentT * viewDirUv; } #endif } // Traverse the tree from the current ray position. // This is similar to traverseOctreeFromBeginning but is faster when the ray is in the same tile as the previous step. pointJacobian = convertUvToShapeUvSpaceDerivative(positionUv); traverseOctreeFromExisting(pointJacobian.point, traversalData, sampleDatas); step = getStepSize(sampleDatas[0], viewRayUv, shapeIntersection, pointJacobian.jacobianT, currentT); } // Convert the alpha from [0,ALPHA_ACCUM_MAX] to [0,1] colorAccum.a /= ALPHA_ACCUM_MAX; #if defined(PICKING) // If alpha is 0.0 there is nothing to pick if (colorAccum.a == 0.0) { discard; } out_FragColor = u_pickColor; #elif defined(PICKING_VOXEL) // If alpha is 0.0 there is nothing to pick if (colorAccum.a == 0.0) { discard; } vec2 megatextureId = packIntToVec2(sampleDatas[0].megatextureIndex); vec2 sampleIndex = packIntToVec2(getSampleIndex(sampleDatas[0])); out_FragColor = vec4(megatextureId, sampleIndex); #else out_FragColor = colorAccum; #endif } `;var g5i=_(T(),1),Z9=`in vec2 position; uniform vec4 u_ndcSpaceAxisAlignedBoundingBox; void main() { vec2 aabbMin = u_ndcSpaceAxisAlignedBoundingBox.xy; vec2 aabbMax = u_ndcSpaceAxisAlignedBoundingBox.zw; vec2 translation = 0.5 * (aabbMax + aabbMin); vec2 scale = 0.5 * (aabbMax - aabbMin); gl_Position = vec4(position * scale + translation, 0.0, 1.0); } `;var x5i=_(T(),1),G9=`/* Intersection defines #define INTERSECTION_COUNT ### */ #define NO_HIT (-czm_infinity) #define INF_HIT (czm_infinity * 0.5) struct RayShapeIntersection { vec4 entry; vec4 exit; }; vec4 intersectionMin(in vec4 intersect0, in vec4 intersect1) { if (intersect0.w == NO_HIT) { return intersect1; } else if (intersect1.w == NO_HIT) { return intersect0; } return (intersect0.w <= intersect1.w) ? intersect0 : intersect1; } vec4 intersectionMax(in vec4 intersect0, in vec4 intersect1) { return (intersect0.w >= intersect1.w) ? intersect0 : intersect1; } RayShapeIntersection intersectIntersections(in Ray ray, in RayShapeIntersection intersect0, in RayShapeIntersection intersect1) { bool missed = (intersect0.entry.w == NO_HIT) || (intersect1.entry.w == NO_HIT) || (intersect0.exit.w < intersect1.entry.w) || (intersect0.entry.w > intersect1.exit.w); if (missed) { vec4 miss = vec4(normalize(ray.dir), NO_HIT); return RayShapeIntersection(miss, miss); } vec4 entry = intersectionMax(intersect0.entry, intersect1.entry); vec4 exit = intersectionMin(intersect0.exit, intersect1.exit); return RayShapeIntersection(entry, exit); } struct Intersections { // Don't access these member variables directly - call the functions instead. // Store an array of ray-surface intersections. Each intersection is composed of: // .xyz for the surface normal at the intersection point // .w for the T value // The scale of the normal encodes the shape intersection type: // length(intersection.xyz) = 1: positive shape entry // length(intersection.xyz) = 2: positive shape exit // length(intersection.xyz) = 3: negative shape entry // length(intersection.xyz) = 4: negative shape exit // INTERSECTION_COUNT is the number of ray-*shape* (volume) intersections, // so we need twice as many to track ray-*surface* intersections vec4 intersections[INTERSECTION_COUNT * 2]; #if (INTERSECTION_COUNT > 1) // Maintain state for future nextIntersection calls int index; int surroundCount; bool surroundIsPositive; #endif }; RayShapeIntersection getFirstIntersection(in Intersections ix) { return RayShapeIntersection(ix.intersections[0], ix.intersections[1]); } vec4 encodeIntersectionType(vec4 intersection, int index, bool entry) { float scale = float(index > 0) * 2.0 + float(!entry) + 1.0; return vec4(intersection.xyz * scale, intersection.w); } // Use defines instead of real functions because WebGL1 cannot access array with non-constant index. #define setIntersection(/*inout Intersections*/ ix, /*int*/ index, /*float*/ t, /*bool*/ positive, /*bool*/ enter) (ix).intersections[(index)] = vec4(0.0, float(!positive) * 2.0 + float(!enter) + 1.0, 0.0, (t)) #define setIntersectionPair(/*inout Intersections*/ ix, /*int*/ index, /*vec2*/ entryExit) (ix).intersections[(index) * 2 + 0] = vec4(0.0, float((index) > 0) * 2.0 + 1.0, 0.0, (entryExit).x); (ix).intersections[(index) * 2 + 1] = vec4(0.0, float((index) > 0) * 2.0 + 2.0, 0.0, (entryExit).y) #define setSurfaceIntersection(/*inout Intersections*/ ix, /*int*/ index, /*vec4*/ intersection, /*bool*/ positive, /*bool*/ enter) (ix).intersections[(index)] = encodeIntersectionType((intersection), int(!positive), (enter)) #define setShapeIntersection(/*inout Intersections*/ ix, /*int*/ index, /*RayShapeIntersection*/ intersection) (ix).intersections[(index) * 2 + 0] = encodeIntersectionType((intersection).entry, (index), true); (ix).intersections[(index) * 2 + 1] = encodeIntersectionType((intersection).exit, (index), false) #if (INTERSECTION_COUNT > 1) void initializeIntersections(inout Intersections ix) { // Sort the intersections from min T to max T with bubble sort. // Note: If this sorting function changes, some of the intersection test may // need to be updated. Search for "bubble sort" to find those areas. const int sortPasses = INTERSECTION_COUNT * 2 - 1; for (int n = sortPasses; n > 0; --n) { for (int i = 0; i < sortPasses; ++i) { // The loop should be: for (i = 0; i < n; ++i) {...} but WebGL1 cannot // loop with non-constant condition, so it has to break early instead if (i >= n) { break; } vec4 intersect0 = ix.intersections[i + 0]; vec4 intersect1 = ix.intersections[i + 1]; bool inOrder = intersect0.w <= intersect1.w; ix.intersections[i + 0] = inOrder ? intersect0 : intersect1; ix.intersections[i + 1] = inOrder ? intersect1 : intersect0; } } // Prepare initial state for nextIntersection ix.index = 0; ix.surroundCount = 0; ix.surroundIsPositive = false; } #endif #if (INTERSECTION_COUNT > 1) RayShapeIntersection nextIntersection(inout Intersections ix) { vec4 surfaceIntersection = vec4(0.0, 0.0, 0.0, NO_HIT); RayShapeIntersection shapeIntersection = RayShapeIntersection(surfaceIntersection, surfaceIntersection); const int passCount = INTERSECTION_COUNT * 2; if (ix.index == passCount) { return shapeIntersection; } for (int i = 0; i < passCount; ++i) { // The loop should be: for (i = ix.index; i < passCount; ++i) {...} but WebGL1 cannot // loop with non-constant condition, so it has to continue instead. if (i < ix.index) { continue; } ix.index = i + 1; surfaceIntersection = ix.intersections[i]; int intersectionType = int(length(surfaceIntersection.xyz) - 0.5); bool currShapeIsPositive = intersectionType < 2; bool enter = intMod(intersectionType, 2) == 0; ix.surroundCount += enter ? +1 : -1; ix.surroundIsPositive = currShapeIsPositive ? enter : ix.surroundIsPositive; // entering positive or exiting negative if (ix.surroundCount == 1 && ix.surroundIsPositive && enter == currShapeIsPositive) { shapeIntersection.entry = surfaceIntersection; } // exiting positive or entering negative after being inside positive bool exitPositive = !enter && currShapeIsPositive && ix.surroundCount == 0; bool enterNegativeFromPositive = enter && !currShapeIsPositive && ix.surroundCount == 2 && ix.surroundIsPositive; if (exitPositive || enterNegativeFromPositive) { shapeIntersection.exit = surfaceIntersection; // entry and exit have been found, so the loop can stop if (exitPositive) { // After exiting positive shape there is nothing left to intersect, so jump to the end index. ix.index = passCount; } break; } } return shapeIntersection; } #endif // NOTE: initializeIntersections, nextIntersection aren't even declared unless INTERSECTION_COUNT > 1 `;var T5i=_(T(),1),E9=`// See IntersectionUtils.glsl for the definitions of Ray, Intersections, // setIntersectionPair, INF_HIT, NO_HIT /* intersectDepth defines (set in Scene/VoxelRenderResources.js) #define DEPTH_INTERSECTION_INDEX ### */ uniform mat4 u_transformPositionViewToUv; void intersectDepth(in vec2 screenCoord, in Ray ray, inout Intersections ix) { float logDepthOrDepth = czm_unpackDepth(texture(czm_globeDepthTexture, screenCoord)); if (logDepthOrDepth != 0.0) { // Calculate how far the ray must travel before it hits the depth buffer. vec4 eyeCoordinateDepth = czm_screenToEyeCoordinates(screenCoord, logDepthOrDepth); eyeCoordinateDepth /= eyeCoordinateDepth.w; vec3 depthPositionUv = vec3(u_transformPositionViewToUv * eyeCoordinateDepth); float t = dot(depthPositionUv - ray.pos, ray.dir); setIntersectionPair(ix, DEPTH_INTERSECTION_INDEX, vec2(t, +INF_HIT)); } else { // There's no depth at this location. setIntersectionPair(ix, DEPTH_INTERSECTION_INDEX, vec2(NO_HIT)); } } `;var C5i=_(T(),1),I9=`// See IntersectionUtils.glsl for the definitions of Ray, Intersections, INF_HIT, // NO_HIT, setShapeIntersection /* Clipping plane defines (set in Scene/VoxelRenderResources.js) #define CLIPPING_PLANES_UNION #define CLIPPING_PLANES_COUNT #define CLIPPING_PLANES_INTERSECTION_INDEX */ uniform sampler2D u_clippingPlanesTexture; uniform mat4 u_clippingPlanesMatrix; // Plane is in Hessian Normal Form vec4 intersectPlane(in Ray ray, in vec4 plane) { vec3 n = plane.xyz; // normal float w = plane.w; // -dot(pointOnPlane, normal) float a = dot(ray.pos, n); float b = dot(ray.dir, n); float t = -(w + a) / b; return vec4(n, t); } void intersectClippingPlanes(in Ray ray, inout Intersections ix) { vec4 backSide = vec4(-ray.dir, -INF_HIT); vec4 farSide = vec4(ray.dir, +INF_HIT); RayShapeIntersection clippingVolume; #if (CLIPPING_PLANES_COUNT == 1) // Union and intersection are the same when there's one clipping plane, and the code // is more simplified. vec4 planeUv = getClippingPlane(u_clippingPlanesTexture, 0, u_clippingPlanesMatrix); vec4 intersection = intersectPlane(ray, planeUv); bool reflects = dot(ray.dir, intersection.xyz) < 0.0; clippingVolume.entry = reflects ? backSide : intersection; clippingVolume.exit = reflects ? intersection : farSide; setShapeIntersection(ix, CLIPPING_PLANES_INTERSECTION_INDEX, clippingVolume); #elif defined(CLIPPING_PLANES_UNION) vec4 firstTransmission = vec4(ray.dir, +INF_HIT); vec4 lastReflection = vec4(-ray.dir, -INF_HIT); for (int i = 0; i < CLIPPING_PLANES_COUNT; i++) { vec4 planeUv = getClippingPlane(u_clippingPlanesTexture, i, u_clippingPlanesMatrix); vec4 intersection = intersectPlane(ray, planeUv); if (dot(ray.dir, planeUv.xyz) > 0.0) { firstTransmission = intersection.w <= firstTransmission.w ? intersection : firstTransmission; } else { lastReflection = intersection.w >= lastReflection.w ? intersection : lastReflection; } } clippingVolume.entry = backSide; clippingVolume.exit = lastReflection; setShapeIntersection(ix, CLIPPING_PLANES_INTERSECTION_INDEX + 0, clippingVolume); clippingVolume.entry = firstTransmission; clippingVolume.exit = farSide; setShapeIntersection(ix, CLIPPING_PLANES_INTERSECTION_INDEX + 1, clippingVolume); #else // intersection vec4 lastTransmission = vec4(ray.dir, -INF_HIT); vec4 firstReflection = vec4(-ray.dir, +INF_HIT); for (int i = 0; i < CLIPPING_PLANES_COUNT; i++) { vec4 planeUv = getClippingPlane(u_clippingPlanesTexture, i, u_clippingPlanesMatrix); vec4 intersection = intersectPlane(ray, planeUv); if (dot(ray.dir, planeUv.xyz) > 0.0) { lastTransmission = intersection.w > lastTransmission.w ? intersection : lastTransmission; } else { firstReflection = intersection.w < firstReflection.w ? intersection: firstReflection; } } if (lastTransmission.w < firstReflection.w) { clippingVolume.entry = lastTransmission; clippingVolume.exit = firstReflection; } else { clippingVolume.entry = vec4(-ray.dir, NO_HIT); clippingVolume.exit = vec4(ray.dir, NO_HIT); } setShapeIntersection(ix, CLIPPING_PLANES_INTERSECTION_INDEX, clippingVolume); #endif } `;var L5i=_(T(),1),mL=`// See IntersectionUtils.glsl for the definitions of Ray, NO_HIT, INF_HIT, // RayShapeIntersection vec4 intersectLongitude(in Ray ray, in float angle, in bool positiveNormal) { float normalSign = positiveNormal ? 1.0 : -1.0; vec2 planeNormal = vec2(-sin(angle), cos(angle)) * normalSign; vec2 position = ray.pos.xy; vec2 direction = ray.dir.xy; float approachRate = dot(direction, planeNormal); float distance = -dot(position, planeNormal); float t = (approachRate == 0.0) ? NO_HIT : distance / approachRate; return vec4(planeNormal, 0.0, t); } RayShapeIntersection intersectHalfSpace(in Ray ray, in float angle, in bool positiveNormal) { vec4 intersection = intersectLongitude(ray, angle, positiveNormal); vec4 farSide = vec4(normalize(ray.dir), INF_HIT); bool hitFront = (intersection.w > 0.0) == (dot(ray.pos.xy, intersection.xy) > 0.0); if (!hitFront) { return RayShapeIntersection(intersection, farSide); } else { return RayShapeIntersection(-1.0 * farSide, intersection); } } void intersectFlippedWedge(in Ray ray, in vec2 minMaxAngle, out RayShapeIntersection intersections[2]) { intersections[0] = intersectHalfSpace(ray, minMaxAngle.x, false); intersections[1] = intersectHalfSpace(ray, minMaxAngle.y, true); } bool hitPositiveHalfPlane(in Ray ray, in vec4 intersection, in bool positiveNormal) { float normalSign = positiveNormal ? 1.0 : -1.0; vec2 planeDirection = vec2(intersection.y, -intersection.x) * normalSign; vec2 hit = ray.pos.xy + intersection.w * ray.dir.xy; return dot(hit, planeDirection) > 0.0; } void intersectHalfPlane(in Ray ray, in float angle, out RayShapeIntersection intersections[2]) { vec4 intersection = intersectLongitude(ray, angle, true); vec4 farSide = vec4(normalize(ray.dir), INF_HIT); if (hitPositiveHalfPlane(ray, intersection, true)) { intersections[0].entry = -1.0 * farSide; intersections[0].exit = vec4(-1.0 * intersection.xy, 0.0, intersection.w); intersections[1].entry = intersection; intersections[1].exit = farSide; } else { vec4 miss = vec4(normalize(ray.dir), NO_HIT); intersections[0].entry = -1.0 * farSide; intersections[0].exit = farSide; intersections[1].entry = miss; intersections[1].exit = miss; } } RayShapeIntersection intersectRegularWedge(in Ray ray, in vec2 minMaxAngle) { // Note: works for maxAngle > minAngle + pi, where the "regular wedge" // is actually a negative volume. // Compute intersections with the two planes. // Normals will point toward the "outside" (negative space) vec4 intersect1 = intersectLongitude(ray, minMaxAngle.x, false); vec4 intersect2 = intersectLongitude(ray, minMaxAngle.y, true); // Choose intersection with smallest T as the "first", the other as "last" // Note: first or last could be in the "shadow" wedge, beyond the tip bool inOrder = intersect1.w <= intersect2.w; vec4 first = inOrder ? intersect1 : intersect2; vec4 last = inOrder ? intersect2 : intersect1; bool firstIsAhead = first.w >= 0.0; bool startedInsideFirst = dot(ray.pos.xy, first.xy) < 0.0; bool exitFromInside = firstIsAhead == startedInsideFirst; bool lastIsAhead = last.w > 0.0; bool startedOutsideLast = dot(ray.pos.xy, last.xy) >= 0.0; bool enterFromOutside = lastIsAhead == startedOutsideLast; vec4 farSide = vec4(normalize(ray.dir), INF_HIT); vec4 miss = vec4(normalize(ray.dir), NO_HIT); if (exitFromInside && enterFromOutside) { // Ray crosses both faces of negative wedge, exiting then entering the positive shape return RayShapeIntersection(first, last); } else if (!exitFromInside && enterFromOutside) { // Ray starts inside wedge. last is in shadow wedge, and first is actually the entry return RayShapeIntersection(-1.0 * farSide, first); } else if (exitFromInside && !enterFromOutside) { // First intersection was in the shadow wedge, so last is actually the exit return RayShapeIntersection(last, farSide); } else { // !exitFromInside && !enterFromOutside // Both intersections were in the shadow wedge return RayShapeIntersection(miss, miss); } } `;var Z5i=_(T(),1),X9=`// See IntersectionUtils.glsl for the definitions of Ray, RayShapeIntersection, // NO_HIT, Intersections /* Box defines (set in Scene/VoxelBoxShape.js) #define BOX_INTERSECTION_INDEX ### // always 0 */ uniform vec3 u_renderMinBounds; uniform vec3 u_renderMaxBounds; RayShapeIntersection intersectBox(in Ray ray, in vec3 minBound, in vec3 maxBound) { // Consider the box as the intersection of the space between 3 pairs of parallel planes // Compute the distance along the ray to each plane vec3 t0 = (minBound - ray.pos) / ray.dir; vec3 t1 = (maxBound - ray.pos) / ray.dir; // Identify candidate entries/exits based on distance from ray.pos vec3 entries = min(t0, t1); vec3 exits = max(t0, t1); vec3 directions = sign(ray.dir); // The actual intersection points are the furthest entry and the closest exit float lastEntry = maxComponent(entries); bvec3 isLastEntry = equal(entries, vec3(lastEntry)); vec3 entryNormal = -1.0 * vec3(isLastEntry) * directions; vec4 entry = vec4(entryNormal, lastEntry); float firstExit = minComponent(exits); bvec3 isFirstExit = equal(exits, vec3(firstExit)); vec3 exitNormal = vec3(isLastEntry) * directions; vec4 exit = vec4(exitNormal, firstExit); if (entry.w > exit.w) { entry.w = NO_HIT; exit.w = NO_HIT; } return RayShapeIntersection(entry, exit); } void intersectShape(in Ray ray, inout Intersections ix) { RayShapeIntersection intersection = intersectBox(ray, u_renderMinBounds, u_renderMaxBounds); setShapeIntersection(ix, BOX_INTERSECTION_INDEX, intersection); } `;var E5i=_(T(),1),W9=`// See IntersectionUtils.glsl for the definitions of Ray, NO_HIT, Intersections, // RayShapeIntersection, setSurfaceIntersection, setShapeIntersection, // intersectIntersections // See IntersectLongitude.glsl for the definitions of intersectHalfPlane, // intersectFlippedWedge, intersectRegularWedge /* Cylinder defines (set in Scene/VoxelCylinderShape.js) #define CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN #define CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT #define CYLINDER_HAS_RENDER_BOUNDS_ANGLE #define CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF #define CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF #define CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO #define CYLINDER_INTERSECTION_INDEX_RADIUS_MAX #define CYLINDER_INTERSECTION_INDEX_RADIUS_MIN #define CYLINDER_INTERSECTION_INDEX_ANGLE */ // Cylinder uniforms uniform vec2 u_cylinderRenderRadiusMinMax; uniform vec2 u_cylinderRenderHeightMinMax; #if defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE) uniform vec2 u_cylinderRenderAngleMinMax; #endif /** * Find the intersection of a ray with the volume defined by two planes of constant z */ RayShapeIntersection intersectHeightBounds(in Ray ray, in vec2 minMaxHeight, in bool convex) { float zPosition = ray.pos.z; float zDirection = ray.dir.z; float tmin = (minMaxHeight.x - zPosition) / zDirection; float tmax = (minMaxHeight.y - zPosition) / zDirection; // Normals point outside the volume float signFlip = convex ? 1.0 : -1.0; vec4 intersectMin = vec4(0.0, 0.0, -1.0 * signFlip, tmin); vec4 intersectMax = vec4(0.0, 0.0, 1.0 * signFlip, tmax); bool topEntry = zDirection < 0.0; vec4 entry = topEntry ? intersectMax : intersectMin; vec4 exit = topEntry ? intersectMin : intersectMax; return RayShapeIntersection(entry, exit); } /** * Find the intersection of a ray with a right cylindrical surface of a given radius * about the z-axis. */ RayShapeIntersection intersectCylinder(in Ray ray, in float radius, in bool convex) { vec2 position = ray.pos.xy; vec2 direction = ray.dir.xy; float a = dot(direction, direction); float b = dot(position, direction); float c = dot(position, position) - radius * radius; float determinant = b * b - a * c; if (determinant < 0.0) { vec4 miss = vec4(normalize(ray.dir), NO_HIT); return RayShapeIntersection(miss, miss); } determinant = sqrt(determinant); float t1 = (-b - determinant) / a; float t2 = (-b + determinant) / a; float signFlip = convex ? 1.0 : -1.0; vec4 intersect1 = vec4(normalize(position + t1 * direction) * signFlip, 0.0, t1); vec4 intersect2 = vec4(normalize(position + t2 * direction) * signFlip, 0.0, t2); return RayShapeIntersection(intersect1, intersect2); } /** * Find the intersection of a ray with a right cylindrical solid of given * radius and height bounds. NOTE: The shape is assumed to be convex. */ RayShapeIntersection intersectBoundedCylinder(in Ray ray, in float radius, in vec2 minMaxHeight) { RayShapeIntersection cylinderIntersection = intersectCylinder(ray, radius, true); RayShapeIntersection heightBoundsIntersection = intersectHeightBounds(ray, minMaxHeight, true); return intersectIntersections(ray, cylinderIntersection, heightBoundsIntersection); } void intersectShape(Ray ray, inout Intersections ix) { // Position is converted from [0,1] to [-1,+1] because shape intersections assume unit space is [-1,+1]. // Direction is scaled as well to be in sync with position. ray.pos = ray.pos * 2.0 - 1.0; ray.dir *= 2.0; RayShapeIntersection outerIntersect = intersectBoundedCylinder(ray, u_cylinderRenderRadiusMinMax.y, u_cylinderRenderHeightMinMax); setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_RADIUS_MAX, outerIntersect); if (outerIntersect.entry.w == NO_HIT) { return; } #if defined(CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT) // When the cylinder is perfectly thin it's necessary to sandwich the // inner cylinder intersection inside the outer cylinder intersection. // Without this special case, // [outerMin, outerMax, innerMin, innerMax] will bubble sort to // [outerMin, innerMin, outerMax, innerMax] which will cause the back // side of the cylinder to be invisible because it will think the ray // is still inside the inner (negative) cylinder after exiting the // outer (positive) cylinder. // With this special case, // [outerMin, innerMin, innerMax, outerMax] will bubble sort to // [outerMin, innerMin, innerMax, outerMax] which will work correctly. // Note: If initializeIntersections() changes its sorting function // from bubble sort to something else, this code may need to change. RayShapeIntersection innerIntersect = intersectCylinder(ray, 1.0, false); setSurfaceIntersection(ix, 0, outerIntersect.entry, true, true); // positive, enter setSurfaceIntersection(ix, 1, innerIntersect.entry, false, true); // negative, enter setSurfaceIntersection(ix, 2, innerIntersect.exit, false, false); // negative, exit setSurfaceIntersection(ix, 3, outerIntersect.exit, true, false); // positive, exit #elif defined(CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN) RayShapeIntersection innerIntersect = intersectCylinder(ray, u_cylinderRenderRadiusMinMax.x, false); setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_RADIUS_MIN, innerIntersect); #endif #if defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF) RayShapeIntersection wedgeIntersect = intersectRegularWedge(ray, u_cylinderRenderAngleMinMax); setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_ANGLE, wedgeIntersect); #elif defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF) RayShapeIntersection wedgeIntersects[2]; intersectFlippedWedge(ray, u_cylinderRenderAngleMinMax, wedgeIntersects); setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 0, wedgeIntersects[0]); setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 1, wedgeIntersects[1]); #elif defined(CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO) RayShapeIntersection wedgeIntersects[2]; intersectHalfPlane(ray, u_cylinderRenderAngleMinMax.x, wedgeIntersects); setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 0, wedgeIntersects[0]); setShapeIntersection(ix, CYLINDER_INTERSECTION_INDEX_ANGLE + 1, wedgeIntersects[1]); #endif } `;var X5i=_(T(),1),P9=`// See IntersectionUtils.glsl for the definitions of Ray, NO_HIT, INF_HIT, Intersections, // RayShapeIntersection, setSurfaceIntersection, setShapeIntersection // See IntersectLongitude.glsl for the definitions of intersectHalfPlane, // intersectFlippedWedge, intersectRegularWedge /* Ellipsoid defines (set in Scene/VoxelEllipsoidShape.js) #define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE #define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO #define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_UNDER_HALF #define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_OVER_HALF #define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_UNDER_HALF #define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_EQUAL_HALF #define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_OVER_HALF #define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_UNDER_HALF #define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_EQUAL_HALF #define ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_OVER_HALF #define ELLIPSOID_INTERSECTION_INDEX_LONGITUDE #define ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX #define ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN #define ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MAX #define ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MIN */ #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE) uniform vec2 u_ellipsoidRenderLongitudeMinMax; #endif uniform float u_eccentricitySquared; uniform vec2 u_ellipsoidRenderLatitudeSinMinMax; uniform vec2 u_clipMinMaxHeight; RayShapeIntersection intersectZPlane(in Ray ray, in float z) { float t = -ray.pos.z / ray.dir.z; bool startsOutside = sign(ray.pos.z) == sign(z); bool entry = (t >= 0.0) != startsOutside; vec4 intersect = vec4(0.0, 0.0, z, t); vec4 farSide = vec4(normalize(ray.dir), INF_HIT); if (entry) { return RayShapeIntersection(intersect, farSide); } else { return RayShapeIntersection(-1.0 * farSide, intersect); } } RayShapeIntersection intersectHeight(in Ray ray, in float relativeHeight, in bool convex) { // Scale the ray by the ellipsoid axes to make it a unit sphere // Note: approximating ellipsoid + height as an ellipsoid vec3 radiiCorrection = u_ellipsoidRadiiUv / (u_ellipsoidRadiiUv + relativeHeight); vec3 position = ray.pos * radiiCorrection; vec3 direction = ray.dir * radiiCorrection; float a = dot(direction, direction); // ~ 1.0 (or maybe 4.0 if ray is scaled) float b = dot(direction, position); // roughly inside [-1.0, 1.0] when zoomed in float c = dot(position, position) - 1.0; // ~ 0.0 when zoomed in. float determinant = b * b - a * c; // ~ b * b when zoomed in if (determinant < 0.0) { vec4 miss = vec4(normalize(direction), NO_HIT); return RayShapeIntersection(miss, miss); } determinant = sqrt(determinant); // Compute larger root using standard formula float signB = b < 0.0 ? -1.0 : 1.0; // The other root may suffer from subtractive cancellation in the standard formula. // Compute it from the first root instead. float t1 = (-b - signB * determinant) / a; float t2 = c / (a * t1); float tmin = min(t1, t2); float tmax = max(t1, t2); float directionScale = convex ? 1.0 : -1.0; vec3 d1 = directionScale * normalize(position + tmin * direction); vec3 d2 = directionScale * normalize(position + tmax * direction); return RayShapeIntersection(vec4(d1, tmin), vec4(d2, tmax)); } /** * Given a circular cone around the z-axis, with apex at the origin, * find the parametric distance(s) along a ray where that ray intersects * the cone. * The cone opening angle is described by the squared cosine of * its half-angle (the angle between the Z-axis and the surface) */ vec2 intersectDoubleEndedCone(in Ray ray, in float cosSqrHalfAngle) { vec3 o = ray.pos; vec3 d = ray.dir; float sinSqrHalfAngle = 1.0 - cosSqrHalfAngle; float aSin = d.z * d.z * sinSqrHalfAngle; float aCos = -dot(d.xy, d.xy) * cosSqrHalfAngle; float a = aSin + aCos; float bSin = d.z * o.z * sinSqrHalfAngle; float bCos = -dot(o.xy, d.xy) * cosSqrHalfAngle; float b = bSin + bCos; float cSin = o.z * o.z * sinSqrHalfAngle; float cCos = -dot(o.xy, o.xy) * cosSqrHalfAngle; float c = cSin + cCos; // determinant = b * b - a * c. But bSin * bSin = aSin * cSin. // Avoid subtractive cancellation by expanding to eliminate these terms float determinant = 2.0 * bSin * bCos + bCos * bCos - aSin * cCos - aCos * cSin - aCos * cCos; if (determinant < 0.0) { return vec2(NO_HIT); } else if (a == 0.0) { // Ray is parallel to cone surface return (b == 0.0) ? vec2(NO_HIT) // Ray is on cone surface : vec2(-0.5 * c / b, NO_HIT); } determinant = sqrt(determinant); // Compute larger root using standard formula float signB = b < 0.0 ? -1.0 : 1.0; float t1 = (-b - signB * determinant) / a; // The other root may suffer from subtractive cancellation in the standard formula. // Compute it from the first root instead. float t2 = c / (a * t1); float tmin = min(t1, t2); float tmax = max(t1, t2); return vec2(tmin, tmax); } /** * Given a point on a conical surface, find the surface normal at that point. */ vec3 getConeNormal(in vec3 p, in bool convex) { // Start with radial component pointing toward z-axis vec2 radial = -abs(p.z) * normalize(p.xy); // Z component points toward opening of cone float zSign = (p.z < 0.0) ? -1.0 : 1.0; float z = length(p.xy) * zSign; // Flip normal if shape is convex float flip = (convex) ? -1.0 : 1.0; return normalize(vec3(radial, z) * flip); } /** * Compute the shift between the ellipsoid origin and the apex of a cone of latitude */ float getLatitudeConeShift(in float sinLatitude) { // Find prime vertical radius of curvature: // the distance along the ellipsoid normal to the intersection with the z-axis float x2 = u_eccentricitySquared * sinLatitude * sinLatitude; float primeVerticalRadius = inversesqrt(1.0 - x2); // Compute a shift from the origin to the intersection of the cone with the z-axis return primeVerticalRadius * u_eccentricitySquared * sinLatitude; } void intersectFlippedCone(in Ray ray, in float cosHalfAngle, out RayShapeIntersection intersections[2]) { // Undo the scaling from ellipsoid to sphere ray.pos = ray.pos * u_ellipsoidRadiiUv; ray.dir = ray.dir * u_ellipsoidRadiiUv; // Shift the ray to account for the latitude cone not being centered at the Earth center ray.pos.z += getLatitudeConeShift(cosHalfAngle); float cosSqrHalfAngle = cosHalfAngle * cosHalfAngle; vec2 intersect = intersectDoubleEndedCone(ray, cosSqrHalfAngle); vec4 miss = vec4(normalize(ray.dir), NO_HIT); vec4 farSide = vec4(normalize(ray.dir), INF_HIT); // Initialize output with no intersections intersections[0].entry = -1.0 * farSide; intersections[0].exit = farSide; intersections[1].entry = miss; intersections[1].exit = miss; if (intersect.x == NO_HIT) { return; } // Find the points of intersection float tmin = intersect.x; float tmax = intersect.y; vec3 p0 = ray.pos + tmin * ray.dir; vec3 p1 = ray.pos + tmax * ray.dir; vec4 intersect0 = vec4(getConeNormal(p0, true), tmin); vec4 intersect1 = vec4(getConeNormal(p1, true), tmax); bool p0InShadowCone = sign(p0.z) != sign(cosHalfAngle); bool p1InShadowCone = sign(p1.z) != sign(cosHalfAngle); if (p0InShadowCone && p1InShadowCone) { // no valid intersections } else if (p0InShadowCone) { intersections[0].exit = intersect1; } else if (p1InShadowCone) { intersections[0].entry = intersect0; } else { intersections[0].exit = intersect0; intersections[1].entry = intersect1; intersections[1].exit = farSide; } } RayShapeIntersection intersectRegularCone(in Ray ray, in float cosHalfAngle, in bool convex) { // Undo the scaling from ellipsoid to sphere ray.pos = ray.pos * u_ellipsoidRadiiUv; ray.dir = ray.dir * u_ellipsoidRadiiUv; // Shift the ray to account for the latitude cone not being centered at the Earth center ray.pos.z += getLatitudeConeShift(cosHalfAngle); float cosSqrHalfAngle = cosHalfAngle * cosHalfAngle; vec2 intersect = intersectDoubleEndedCone(ray, cosSqrHalfAngle); vec4 miss = vec4(normalize(ray.dir), NO_HIT); vec4 farSide = vec4(normalize(ray.dir), INF_HIT); if (intersect.x == NO_HIT) { return RayShapeIntersection(miss, miss); } // Find the points of intersection float tmin = intersect.x; float tmax = intersect.y; vec3 p0 = ray.pos + tmin * ray.dir; vec3 p1 = ray.pos + tmax * ray.dir; vec4 intersect0 = vec4(getConeNormal(p0, convex), tmin); vec4 intersect1 = vec4(getConeNormal(p1, convex), tmax); bool p0InShadowCone = sign(p0.z) != sign(cosHalfAngle); bool p1InShadowCone = sign(p1.z) != sign(cosHalfAngle); if (p0InShadowCone && p1InShadowCone) { return RayShapeIntersection(miss, miss); } else if (p0InShadowCone) { return RayShapeIntersection(intersect1, farSide); } else if (p1InShadowCone) { return RayShapeIntersection(-1.0 * farSide, intersect0); } else { return RayShapeIntersection(intersect0, intersect1); } } void intersectShape(in Ray ray, inout Intersections ix) { // Position is converted from [0,1] to [-1,+1] because shape intersections assume unit space is [-1,+1]. // Direction is scaled as well to be in sync with position. ray.pos = ray.pos * 2.0 - 1.0; ray.dir *= 2.0; // Outer ellipsoid RayShapeIntersection outerIntersect = intersectHeight(ray, u_clipMinMaxHeight.y, true); setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MAX, outerIntersect); // Exit early if the outer ellipsoid was missed. if (outerIntersect.entry.w == NO_HIT) { return; } // Inner ellipsoid RayShapeIntersection innerIntersect = intersectHeight(ray, u_clipMinMaxHeight.x, false); if (innerIntersect.entry.w == NO_HIT) { setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MIN, innerIntersect); } else { // When the ellipsoid is large and thin it's possible for floating point math // to cause the ray to intersect the inner ellipsoid before the outer ellipsoid. // To prevent this from happening, clamp innerIntersect to outerIntersect and // sandwich the inner ellipsoid intersection inside the outer ellipsoid intersection. // Without this special case, // [outerMin, outerMax, innerMin, innerMax] will bubble sort to // [outerMin, innerMin, outerMax, innerMax] which will cause the back // side of the ellipsoid to be invisible because it will think the ray // is still inside the inner (negative) ellipsoid after exiting the // outer (positive) ellipsoid. // With this special case, // [outerMin, innerMin, innerMax, outerMax] will bubble sort to // [outerMin, innerMin, innerMax, outerMax] which will work correctly. // Note: If initializeIntersections() changes its sorting function // from bubble sort to something else, this code may need to change. innerIntersect.entry.w = max(innerIntersect.entry.w, outerIntersect.entry.w); innerIntersect.exit.w = min(innerIntersect.exit.w, outerIntersect.exit.w); setSurfaceIntersection(ix, 0, outerIntersect.entry, true, true); // positive, enter setSurfaceIntersection(ix, 1, innerIntersect.entry, false, true); // negative, enter setSurfaceIntersection(ix, 2, innerIntersect.exit, false, false); // negative, exit setSurfaceIntersection(ix, 3, outerIntersect.exit, true, false); // positive, exit } // Bottom cone #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_UNDER_HALF) RayShapeIntersection bottomConeIntersection = intersectRegularCone(ray, u_ellipsoidRenderLatitudeSinMinMax.x, false); setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN, bottomConeIntersection); #elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_EQUAL_HALF) RayShapeIntersection bottomConeIntersection = intersectZPlane(ray, -1.0); setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN, bottomConeIntersection); #elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_OVER_HALF) RayShapeIntersection bottomConeIntersections[2]; intersectFlippedCone(ray, u_ellipsoidRenderLatitudeSinMinMax.x, bottomConeIntersections); setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN + 0, bottomConeIntersections[0]); setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN + 1, bottomConeIntersections[1]); #endif // Top cone #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_UNDER_HALF) RayShapeIntersection topConeIntersections[2]; intersectFlippedCone(ray, u_ellipsoidRenderLatitudeSinMinMax.y, topConeIntersections); setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX + 0, topConeIntersections[0]); setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX + 1, topConeIntersections[1]); #elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_EQUAL_HALF) RayShapeIntersection topConeIntersection = intersectZPlane(ray, 1.0); setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX, topConeIntersection); #elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_OVER_HALF) RayShapeIntersection topConeIntersection = intersectRegularCone(ray, u_ellipsoidRenderLatitudeSinMinMax.y, false); setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX, topConeIntersection); #endif // Wedge #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO) RayShapeIntersection wedgeIntersects[2]; intersectHalfPlane(ray, u_ellipsoidRenderLongitudeMinMax.x, wedgeIntersects); setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LONGITUDE + 0, wedgeIntersects[0]); setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LONGITUDE + 1, wedgeIntersects[1]); #elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_UNDER_HALF) RayShapeIntersection wedgeIntersect = intersectRegularWedge(ray, u_ellipsoidRenderLongitudeMinMax); setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LONGITUDE, wedgeIntersect); #elif defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_OVER_HALF) RayShapeIntersection wedgeIntersects[2]; intersectFlippedWedge(ray, u_ellipsoidRenderLongitudeMinMax, wedgeIntersects); setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LONGITUDE + 0, wedgeIntersects[0]); setShapeIntersection(ix, ELLIPSOID_INTERSECTION_INDEX_LONGITUDE + 1, wedgeIntersects[1]); #endif } `;var P5i=_(T(),1),rS=`// Main intersection function for Voxel scenes. // See IntersectBox.glsl, IntersectCylinder.glsl, or IntersectEllipsoid.glsl // for the definition of intersectShape. The appropriate function is selected // based on the VoxelPrimitive shape type, and added to the shader in // Scene/VoxelRenderResources.js. // See also IntersectClippingPlane.glsl and IntersectDepth.glsl. // See IntersectionUtils.glsl for the definitions of Ray, NO_HIT, // getFirstIntersection, initializeIntersections, nextIntersection. /* Intersection defines (set in Scene/VoxelRenderResources.js) #define INTERSECTION_COUNT ### */ RayShapeIntersection intersectScene(in vec2 screenCoord, in Ray ray, out Intersections ix) { // Do a ray-shape intersection to find the exact starting and ending points. intersectShape(ray, ix); // Exit early if the positive shape was completely missed or behind the ray. RayShapeIntersection intersection = getFirstIntersection(ix); if (intersection.entry.w == NO_HIT) { // Positive shape was completely missed - so exit early. return intersection; } // Clipping planes #if defined(CLIPPING_PLANES) intersectClippingPlanes(ray, ix); #endif // Depth #if defined(DEPTH_TEST) intersectDepth(screenCoord, ray, ix); #endif // Find the first intersection that's in front of the ray #if (INTERSECTION_COUNT > 1) initializeIntersections(ix); for (int i = 0; i < INTERSECTION_COUNT; ++i) { intersection = nextIntersection(ix); if (intersection.exit.w > 0.0) { // Set start to 0.0 when ray is inside the shape. intersection.entry.w = max(intersection.entry.w, 0.0); break; } } #else // Set start to 0.0 when ray is inside the shape. intersection.entry.w = max(intersection.entry.w, 0.0); #endif return intersection; } `;var w5i=_(T(),1),v9=`/* Box defines (set in Scene/VoxelBoxShape.js) #define BOX_HAS_SHAPE_BOUNDS */ #if defined(BOX_HAS_SHAPE_BOUNDS) uniform vec3 u_boxUvToShapeUvScale; uniform vec3 u_boxUvToShapeUvTranslate; #endif PointJacobianT convertUvToShapeSpaceDerivative(in vec3 positionUv) { // For BOX, UV space = shape space, so we can use positionUv as-is, // and the Jacobian is the identity matrix, except that a step of 1 // only spans half the shape space [-1, 1], so the identity is scaled. return PointJacobianT(positionUv, mat3(0.5)); } vec3 convertShapeToShapeUvSpace(in vec3 positionShape) { #if defined(BOX_HAS_SHAPE_BOUNDS) return positionShape * u_boxUvToShapeUvScale + u_boxUvToShapeUvTranslate; #else return positionShape; #endif } PointJacobianT convertUvToShapeUvSpaceDerivative(in vec3 positionUv) { PointJacobianT pointJacobian = convertUvToShapeSpaceDerivative(positionUv); pointJacobian.point = convertShapeToShapeUvSpace(pointJacobian.point); return pointJacobian; } vec3 convertShapeUvToUvSpace(in vec3 shapeUv) { #if defined(BOX_HAS_SHAPE_BOUNDS) return (shapeUv - u_boxUvToShapeUvTranslate) / u_boxUvToShapeUvScale; #else return shapeUv; #endif } vec3 scaleShapeUvToShapeSpace(in vec3 shapeUv) { #if defined(BOX_HAS_SHAPE_BOUNDS) return shapeUv / u_boxUvToShapeUvScale; #else return shapeUv; #endif }`;var A5i=_(T(),1),w9=`/* Cylinder defines (set in Scene/VoxelCylinderShape.js) #define CYLINDER_HAS_SHAPE_BOUNDS_RADIUS #define CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY #define CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED */ #if defined(CYLINDER_HAS_SHAPE_BOUNDS_RADIUS) uniform vec2 u_cylinderUvToShapeUvRadius; // x = scale, y = offset #endif #if defined(CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT) uniform vec2 u_cylinderUvToShapeUvHeight; // x = scale, y = offset #endif #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE) uniform vec2 u_cylinderUvToShapeUvAngle; // x = scale, y = offset #endif #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY) || defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY) uniform vec2 u_cylinderShapeUvAngleMinMax; #endif #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY) || defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY) || defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED) uniform float u_cylinderShapeUvAngleRangeZeroMid; #endif PointJacobianT convertUvToShapeSpaceDerivative(in vec3 positionUv) { // Convert from Cartesian UV space [0, 1] to Cartesian local space [-1, 1] vec3 position = positionUv * 2.0 - 1.0; float radius = length(position.xy); // [0, 1] vec3 radial = normalize(vec3(position.xy, 0.0)); // Shape space height is defined within [0, 1] float height = positionUv.z; // [0, 1] vec3 z = vec3(0.0, 0.0, 1.0); float angle = atan(position.y, position.x); vec3 east = normalize(vec3(-position.y, position.x, 0.0)); vec3 point = vec3(radius, angle, height); mat3 jacobianT = mat3(radial, z, east / length(position.xy)); return PointJacobianT(point, jacobianT); } vec3 convertShapeToShapeUvSpace(in vec3 positionShape) { float radius = positionShape.x; #if defined(CYLINDER_HAS_SHAPE_BOUNDS_RADIUS) radius = radius * u_cylinderUvToShapeUvRadius.x + u_cylinderUvToShapeUvRadius.y; #endif float angle = (positionShape.y + czm_pi) / czm_twoPi; #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE) #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED) // Comparing against u_cylinderShapeUvAngleMinMax has precision problems. u_cylinderShapeUvAngleRangeZeroMid is more conservative. angle += float(angle < u_cylinderShapeUvAngleRangeZeroMid); #endif // Avoid flickering from reading voxels from both sides of the -pi/+pi discontinuity. #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY) angle = angle > u_cylinderShapeUvAngleRangeZeroMid ? u_cylinderShapeUvAngleMinMax.x : angle; #elif defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY) angle = angle < u_cylinderShapeUvAngleRangeZeroMid ? u_cylinderShapeUvAngleMinMax.y : angle; #endif angle = angle * u_cylinderUvToShapeUvAngle.x + u_cylinderUvToShapeUvAngle.y; #endif float height = positionShape.z; #if defined(CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT) height = height * u_cylinderUvToShapeUvHeight.x + u_cylinderUvToShapeUvHeight.y; #endif return vec3(radius, angle, height); } PointJacobianT convertUvToShapeUvSpaceDerivative(in vec3 positionUv) { PointJacobianT pointJacobian = convertUvToShapeSpaceDerivative(positionUv); pointJacobian.point = convertShapeToShapeUvSpace(pointJacobian.point); return pointJacobian; } vec3 scaleShapeUvToShapeSpace(in vec3 shapeUv) { float radius = shapeUv.x; #if defined(CYLINDER_HAS_SHAPE_BOUNDS_RADIUS) radius /= u_cylinderUvToShapeUvRadius.x; #endif float angle = shapeUv.y * czm_twoPi; #if defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE) angle /= u_cylinderUvToShapeUvAngle.x; #endif float height = shapeUv.z; #if defined(CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT) height /= u_cylinderUvToShapeUvHeight.x; #endif return vec3(radius, angle, height); } `;var N5i=_(T(),1),F9=`/* Ellipsoid defines (set in Scene/VoxelEllipsoidShape.js) #define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY #define ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY #define ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE #define ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED #define ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE */ uniform vec3 u_ellipsoidRadiiUv; // [0,1] uniform vec2 u_evoluteScale; // (radiiUv.x ^ 2 - radiiUv.z ^ 2) * vec2(1.0, -1.0) / radiiUv; uniform vec3 u_ellipsoidInverseRadiiSquaredUv; #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY) || defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY) || defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED) uniform vec3 u_ellipsoidShapeUvLongitudeMinMaxMid; #endif #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE) uniform vec2 u_ellipsoidUvToShapeUvLongitude; // x = scale, y = offset #endif #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE) uniform vec2 u_ellipsoidUvToShapeUvLatitude; // x = scale, y = offset #endif uniform float u_ellipsoidInverseHeightDifferenceUv; // robust iterative solution without trig functions // https://github.com/0xfaded/ellipse_demo/issues/1 // https://stackoverflow.com/questions/22959698/distance-from-given-point-to-given-ellipse // Extended to return radius of curvature along with the point vec3 nearestPointAndRadiusOnEllipse(vec2 pos, vec2 radii) { vec2 p = abs(pos); vec2 inverseRadii = 1.0 / radii; // We describe the ellipse parametrically: v = radii * vec2(cos(t), sin(t)) // but store the cos and sin of t in a vec2 for efficiency. // Initial guess: t = pi/4 vec2 tTrigs = vec2(0.7071067811865476); // Initial guess of point on ellipsoid vec2 v = radii * tTrigs; // Center of curvature of the ellipse at v vec2 evolute = u_evoluteScale * tTrigs * tTrigs * tTrigs; const int iterations = 3; for (int i = 0; i < iterations; ++i) { // Find the (approximate) intersection of p - evolute with the ellipsoid. vec2 q = normalize(p - evolute) * length(v - evolute); // Update the estimate of t. tTrigs = (q + evolute) * inverseRadii; tTrigs = normalize(clamp(tTrigs, 0.0, 1.0)); v = radii * tTrigs; evolute = u_evoluteScale * tTrigs * tTrigs * tTrigs; } return vec3(v * sign(pos), length(v - evolute)); } PointJacobianT convertUvToShapeSpaceDerivative(in vec3 positionUv) { // Convert from UV space [0, 1] to local space [-1, 1] vec3 position = positionUv * 2.0 - 1.0; // Undo the scaling from ellipsoid to sphere position = position * u_ellipsoidRadiiUv; float longitude = atan(position.y, position.x); vec3 east = normalize(vec3(-position.y, position.x, 0.0)); // Convert the 3D position to a 2D position relative to the ellipse (radii.x, radii.z) // (assume radii.y == radii.x) and find the nearest point on the ellipse and its normal float distanceFromZAxis = length(position.xy); vec2 posEllipse = vec2(distanceFromZAxis, position.z); vec3 surfacePointAndRadius = nearestPointAndRadiusOnEllipse(posEllipse, u_ellipsoidRadiiUv.xz); vec2 surfacePoint = surfacePointAndRadius.xy; vec2 normal2d = normalize(surfacePoint * u_ellipsoidInverseRadiiSquaredUv.xz); float latitude = atan(normal2d.y, normal2d.x); vec3 north = vec3(-normal2d.y * normalize(position.xy), abs(normal2d.x)); float heightSign = length(posEllipse) < length(surfacePoint) ? -1.0 : 1.0; float height = heightSign * length(posEllipse - surfacePoint); vec3 up = normalize(cross(east, north)); vec3 point = vec3(longitude, latitude, height); mat3 jacobianT = mat3(east / distanceFromZAxis, north / (surfacePointAndRadius.z + height), up); return PointJacobianT(point, jacobianT); } vec3 convertShapeToShapeUvSpace(in vec3 positionShape) { // Longitude: shift & scale to [0, 1] float longitude = (positionShape.x + czm_pi) / czm_twoPi; // Correct the angle when max < min // Technically this should compare against min longitude - but it has precision problems so compare against the middle of empty space. #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED) longitude += float(longitude < u_ellipsoidShapeUvLongitudeMinMaxMid.z); #endif // Avoid flickering from reading voxels from both sides of the -pi/+pi discontinuity. #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY) longitude = longitude > u_ellipsoidShapeUvLongitudeMinMaxMid.z ? u_ellipsoidShapeUvLongitudeMinMaxMid.x : longitude; #endif #if defined(ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY) longitude = longitude < u_ellipsoidShapeUvLongitudeMinMaxMid.z ? u_ellipsoidShapeUvLongitudeMinMaxMid.y : longitude; #endif #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE) longitude = longitude * u_ellipsoidUvToShapeUvLongitude.x + u_ellipsoidUvToShapeUvLongitude.y; #endif // Latitude: shift and scale to [0, 1] float latitude = (positionShape.y + czm_piOverTwo) / czm_pi; #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE) latitude = latitude * u_ellipsoidUvToShapeUvLatitude.x + u_ellipsoidUvToShapeUvLatitude.y; #endif // Height: scale to the range [0, 1] float height = 1.0 + positionShape.z * u_ellipsoidInverseHeightDifferenceUv; return vec3(longitude, latitude, height); } PointJacobianT convertUvToShapeUvSpaceDerivative(in vec3 positionUv) { PointJacobianT pointJacobian = convertUvToShapeSpaceDerivative(positionUv); pointJacobian.point = convertShapeToShapeUvSpace(pointJacobian.point); return pointJacobian; } vec3 scaleShapeUvToShapeSpace(in vec3 shapeUv) { // Convert from [0, 1] to radians [-pi, pi] float longitude = shapeUv.x * czm_twoPi; #if defined (ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE) longitude /= u_ellipsoidUvToShapeUvLongitude.x; #endif // Convert from [0, 1] to radians [-pi/2, pi/2] float latitude = shapeUv.y * czm_pi; #if defined(ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE) latitude /= u_ellipsoidUvToShapeUvLatitude.x; #endif float height = shapeUv.z / u_ellipsoidInverseHeightDifferenceUv; return vec3(longitude, latitude, height); } `;var U5i=_(T(),1),A9=`// These octree flags must be in sync with GpuOctreeFlag in VoxelTraversal.js #define OCTREE_FLAG_INTERNAL 0 #define OCTREE_FLAG_LEAF 1 #define OCTREE_FLAG_PACKED_LEAF_FROM_PARENT 2 #define OCTREE_MAX_LEVELS 32 // Harcoded value because GLSL doesn't like variable length loops uniform sampler2D u_octreeInternalNodeTexture; uniform vec2 u_octreeInternalNodeTexelSizeUv; uniform int u_octreeInternalNodeTilesPerRow; #if (SAMPLE_COUNT > 1) uniform sampler2D u_octreeLeafNodeTexture; uniform vec2 u_octreeLeafNodeTexelSizeUv; uniform int u_octreeLeafNodeTilesPerRow; #endif uniform ivec3 u_dimensions; // does not include padding, and is in the z-up orientation uniform ivec3 u_inputDimensions; // includes padding, and is in the orientation of the input data #if defined(PADDING) uniform ivec3 u_paddingBefore; #endif struct OctreeNodeData { int data; int flag; }; struct TraversalData { ivec4 octreeCoords; int parentOctreeIndex; }; struct SampleData { int megatextureIndex; ivec4 tileCoords; vec3 tileUv; vec3 inputCoordinate; #if (SAMPLE_COUNT > 1) float weight; #endif }; // Integer mod: For WebGL1 only int intMod(in int a, in int b) { return a - (b * (a / b)); } int normU8_toInt(in float value) { return int(value * 255.0); } int normU8x2_toInt(in vec2 value) { return int(value.x * 255.0) + 256 * int(value.y * 255.0); } float normU8x2_toFloat(in vec2 value) { return float(normU8x2_toInt(value)) / 65535.0; } OctreeNodeData getOctreeNodeData(in vec2 octreeUv) { vec4 texData = texture(u_octreeInternalNodeTexture, octreeUv); OctreeNodeData data; data.data = normU8x2_toInt(texData.xy); data.flag = normU8x2_toInt(texData.zw); return data; } OctreeNodeData getOctreeChildData(in int parentOctreeIndex, in ivec3 childCoord) { int childIndex = childCoord.z * 4 + childCoord.y * 2 + childCoord.x; int octreeCoordX = intMod(parentOctreeIndex, u_octreeInternalNodeTilesPerRow) * 9 + 1 + childIndex; int octreeCoordY = parentOctreeIndex / u_octreeInternalNodeTilesPerRow; vec2 octreeUv = u_octreeInternalNodeTexelSizeUv * vec2(float(octreeCoordX) + 0.5, float(octreeCoordY) + 0.5); return getOctreeNodeData(octreeUv); } int getOctreeParentIndex(in int octreeIndex) { int octreeCoordX = intMod(octreeIndex, u_octreeInternalNodeTilesPerRow) * 9; int octreeCoordY = octreeIndex / u_octreeInternalNodeTilesPerRow; vec2 octreeUv = u_octreeInternalNodeTexelSizeUv * vec2(float(octreeCoordX) + 0.5, float(octreeCoordY) + 0.5); vec4 parentData = texture(u_octreeInternalNodeTexture, octreeUv); int parentOctreeIndex = normU8x2_toInt(parentData.xy); return parentOctreeIndex; } /** * Convert a position in the uv-space of the tileset bounding shape * into the uv-space of a tile within the tileset */ vec3 getTileUv(in vec3 shapePosition, in ivec4 octreeCoords) { // PERFORMANCE_IDEA: use bit-shifting (only in WebGL2) float dimAtLevel = exp2(float(octreeCoords.w)); return shapePosition * dimAtLevel - vec3(octreeCoords.xyz); } vec3 getClampedTileUv(in vec3 shapePosition, in ivec4 octreeCoords) { vec3 tileUv = getTileUv(shapePosition, octreeCoords); return clamp(tileUv, vec3(0.0), vec3(1.0)); } void addSampleCoordinates(in vec3 shapePosition, inout SampleData sampleData) { vec3 tileUv = getClampedTileUv(shapePosition, sampleData.tileCoords); vec3 inputCoordinate = tileUv * vec3(u_dimensions); #if defined(PADDING) inputCoordinate += vec3(u_paddingBefore); #endif #if defined(Y_UP_METADATA_ORDER) #if defined(SHAPE_BOX) float inputY = inputCoordinate.y; inputCoordinate.y = float(u_inputDimensions.y) - inputCoordinate.z; inputCoordinate.z = inputY; #elif defined(SHAPE_CYLINDER) float angle = inputCoordinate.y; float height = inputCoordinate.z; #if (!defined(CYLINDER_HAS_SHAPE_BOUNDS_ANGLE)) // Account for the different 0-angle convention in glTF vs 3DTiles if (sampleData.tileCoords.w == 0) { float angleCount = float(u_inputDimensions.z); angle = mod(angle + angleCount / 2.0, angleCount); } #endif inputCoordinate.y = height; inputCoordinate.z = angle; #endif #endif sampleData.tileUv = tileUv; sampleData.inputCoordinate = inputCoordinate; } void getOctreeLeafSampleData(in OctreeNodeData data, in ivec4 octreeCoords, out SampleData sampleData) { sampleData.megatextureIndex = data.data; sampleData.tileCoords = (data.flag == OCTREE_FLAG_PACKED_LEAF_FROM_PARENT) ? ivec4(octreeCoords.xyz / 2, octreeCoords.w - 1) : octreeCoords; } #if (SAMPLE_COUNT > 1) void getOctreeLeafSampleDatas(in OctreeNodeData data, in ivec4 octreeCoords, out SampleData sampleDatas[SAMPLE_COUNT]) { int leafIndex = data.data; int leafNodeTexelCount = 2; // Adding 0.5 moves to the center of the texel float leafCoordXStart = float(intMod(leafIndex, u_octreeLeafNodeTilesPerRow) * leafNodeTexelCount) + 0.5; float leafCoordY = float(leafIndex / u_octreeLeafNodeTilesPerRow) + 0.5; // Get an interpolation weight and a flag to determine whether to read the parent texture vec2 leafUv0 = u_octreeLeafNodeTexelSizeUv * vec2(leafCoordXStart + 0.0, leafCoordY); vec4 leafData0 = texture(u_octreeLeafNodeTexture, leafUv0); float lerp = normU8x2_toFloat(leafData0.xy); sampleDatas[0].weight = 1.0 - lerp; sampleDatas[1].weight = lerp; // TODO: this looks wrong? Should be comparing to OCTREE_FLAG_PACKED_LEAF_FROM_PARENT sampleDatas[0].tileCoords = (normU8_toInt(leafData0.z) == 1) ? ivec4(octreeCoords.xyz / 2, octreeCoords.w - 1) : octreeCoords; sampleDatas[1].tileCoords = (normU8_toInt(leafData0.w) == 1) ? ivec4(octreeCoords.xyz / 2, octreeCoords.w - 1) : octreeCoords; // Get megatexture indices for both samples vec2 leafUv1 = u_octreeLeafNodeTexelSizeUv * vec2(leafCoordXStart + 1.0, leafCoordY); vec4 leafData1 = texture(u_octreeLeafNodeTexture, leafUv1); sampleDatas[0].megatextureIndex = normU8x2_toInt(leafData1.xy); sampleDatas[1].megatextureIndex = normU8x2_toInt(leafData1.zw); } #endif OctreeNodeData traverseOctreeDownwards(in vec3 shapePosition, inout TraversalData traversalData) { float sizeAtLevel = exp2(-1.0 * float(traversalData.octreeCoords.w)); vec3 start = vec3(traversalData.octreeCoords.xyz) * sizeAtLevel; vec3 end = start + vec3(sizeAtLevel); OctreeNodeData childData; for (int i = 0; i < OCTREE_MAX_LEVELS; ++i) { // Find out which octree child contains the position // 0 if before center, 1 if after vec3 center = 0.5 * (start + end); vec3 childCoord = step(center, shapePosition); // Get octree coords for the next level down ivec4 octreeCoords = traversalData.octreeCoords; traversalData.octreeCoords = ivec4(octreeCoords.xyz * 2 + ivec3(childCoord), octreeCoords.w + 1); childData = getOctreeChildData(traversalData.parentOctreeIndex, ivec3(childCoord)); if (childData.flag != OCTREE_FLAG_INTERNAL) { // leaf tile - stop traversing break; } // interior tile - keep going deeper start = mix(start, center, childCoord); end = mix(center, end, childCoord); traversalData.parentOctreeIndex = childData.data; } return childData; } /** * Transform a given position to an octree tile coordinate and a position within that tile, * and find the corresponding megatexture index and texture coordinates */ void traverseOctreeFromBeginning(in vec3 shapePosition, out TraversalData traversalData, out SampleData sampleDatas[SAMPLE_COUNT]) { traversalData.octreeCoords = ivec4(0); traversalData.parentOctreeIndex = 0; OctreeNodeData nodeData = getOctreeNodeData(vec2(0.0)); if (nodeData.flag != OCTREE_FLAG_LEAF) { nodeData = traverseOctreeDownwards(shapePosition, traversalData); } #if (SAMPLE_COUNT == 1) getOctreeLeafSampleData(nodeData, traversalData.octreeCoords, sampleDatas[0]); addSampleCoordinates(shapePosition, sampleDatas[0]); #else getOctreeLeafSampleDatas(nodeData, traversalData.octreeCoords, sampleDatas); addSampleCoordinates(shapePosition, sampleDatas[0]); addSampleCoordinates(shapePosition, sampleDatas[1]); #endif } bool inRange(in vec3 v, in vec3 minVal, in vec3 maxVal) { return clamp(v, minVal, maxVal) == v; } bool insideTile(in vec3 shapePosition, in ivec4 octreeCoords) { vec3 tileUv = getTileUv(shapePosition, octreeCoords); bool inside = inRange(tileUv, vec3(0.0), vec3(1.0)); // Assume (!) the position is always inside the root tile. return inside || octreeCoords.w == 0; } void traverseOctreeFromExisting(in vec3 shapePosition, inout TraversalData traversalData, inout SampleData sampleDatas[SAMPLE_COUNT]) { if (insideTile(shapePosition, traversalData.octreeCoords)) { for (int i = 0; i < SAMPLE_COUNT; i++) { addSampleCoordinates(shapePosition, sampleDatas[i]); } return; } // Go up tree until we find a parent tile containing shapePosition for (int i = 0; i < OCTREE_MAX_LEVELS; ++i) { traversalData.octreeCoords.xyz /= 2; traversalData.octreeCoords.w -= 1; if (insideTile(shapePosition, traversalData.octreeCoords)) { break; } traversalData.parentOctreeIndex = getOctreeParentIndex(traversalData.parentOctreeIndex); } // Go down tree OctreeNodeData nodeData = traverseOctreeDownwards(shapePosition, traversalData); #if (SAMPLE_COUNT == 1) getOctreeLeafSampleData(nodeData, traversalData.octreeCoords, sampleDatas[0]); addSampleCoordinates(shapePosition, sampleDatas[0]); #else getOctreeLeafSampleDatas(nodeData, traversalData.octreeCoords, sampleDatas); addSampleCoordinates(shapePosition, sampleDatas[0]); addSampleCoordinates(shapePosition, sampleDatas[1]); #endif } `;var B5i=_(T(),1),M9=`// See Octree.glsl for the definitions of SampleData and intMod /* Megatexture defines (set in Scene/VoxelRenderResources.js) #define SAMPLE_COUNT ### #define NEAREST_SAMPLING #define PADDING */ uniform ivec2 u_megatextureSliceDimensions; // number of slices per tile, in two dimensions uniform ivec2 u_megatextureTileDimensions; // number of tiles per megatexture, in two dimensions uniform vec2 u_megatextureVoxelSizeUv; uniform vec2 u_megatextureSliceSizeUv; uniform vec2 u_megatextureTileSizeUv; // Integer min, max, clamp: For WebGL1 only int intMin(int a, int b) { return a <= b ? a : b; } int intMax(int a, int b) { return a >= b ? a : b; } int intClamp(int v, int minVal, int maxVal) { return intMin(intMax(v, minVal), maxVal); } vec2 index1DTo2DTexcoord(int index, ivec2 dimensions, vec2 uvScale) { int indexX = intMod(index, dimensions.x); int indexY = index / dimensions.x; return vec2(indexX, indexY) * uvScale; } /* How is 3D data stored in a 2D megatexture? In this example there is only one loaded tile and it has 2x2x2 voxels (8 voxels total). The data is sliced by Z. The data at Z = 0 is placed in texels (0,0), (0,1), (1,0), (1,1) and the data at Z = 1 is placed in texels (2,0), (2,1), (3,0), (3,1). Note that there could be empty space in the megatexture because it's a power of two. 0 1 2 3 +---+---+---+---+ | | | | | 3 +---+---+---+---+ | | | | | 2 +-------+-------+ |010|110|011|111| 1 |--- ---|--- ---| |000|100|001|101| 0 +-------+-------+ When doing linear interpolation the megatexture needs to be sampled twice: once for the Z slice above the voxel coordinate and once for the slice below. The two slices are interpolated with fract(coord.z - 0.5). For example, a Z coordinate of 1.0 is halfway between two Z slices so the interpolation factor is 0.5. Below is a side view of the 3D voxel grid with voxel coordinates on the left side. 2 +---+ |001| 1 +-z-+ |000| 0 +---+ When doing nearest neighbor the megatexture only needs to be sampled once at the closest Z slice. */ Properties getPropertiesFromMegatexture(in SampleData sampleData) { int tileIndex = sampleData.megatextureIndex; vec3 voxelCoord = sampleData.inputCoordinate; #if defined(NEAREST_SAMPLING) // Round to the center of the nearest voxel voxelCoord = floor(voxelCoord) + vec3(0.5); #endif // Tile location vec2 tileUvOffset = index1DTo2DTexcoord(tileIndex, u_megatextureTileDimensions, u_megatextureTileSizeUv); // Slice location float slice = voxelCoord.z - 0.5; int sliceIndex = int(floor(slice)); int sliceIndex0 = intClamp(sliceIndex, 0, u_inputDimensions.z - 1); vec2 sliceUvOffset0 = index1DTo2DTexcoord(sliceIndex0, u_megatextureSliceDimensions, u_megatextureSliceSizeUv); // Voxel location vec2 voxelUvOffset = clamp(voxelCoord.xy, vec2(0.5), vec2(u_inputDimensions.xy) - vec2(0.5)) * u_megatextureVoxelSizeUv; // Final location in the megatexture vec2 uv0 = tileUvOffset + sliceUvOffset0 + voxelUvOffset; #if defined(NEAREST_SAMPLING) return getPropertiesFromMegatextureAtUv(uv0); #else float sliceLerp = fract(slice); int sliceIndex1 = intMin(sliceIndex + 1, u_inputDimensions.z - 1); vec2 sliceUvOffset1 = index1DTo2DTexcoord(sliceIndex1, u_megatextureSliceDimensions, u_megatextureSliceSizeUv); vec2 uv1 = tileUvOffset + sliceUvOffset1 + voxelUvOffset; Properties properties0 = getPropertiesFromMegatextureAtUv(uv0); Properties properties1 = getPropertiesFromMegatextureAtUv(uv1); return mixProperties(properties0, properties1, sliceLerp); #endif } // Convert an array of sample datas to a final weighted properties. Properties accumulatePropertiesFromMegatexture(in SampleData sampleDatas[SAMPLE_COUNT]) { #if (SAMPLE_COUNT == 1) return getPropertiesFromMegatexture(sampleDatas[0]); #else // When more than one sample is taken the accumulator needs to start at 0 Properties properties = clearProperties(); for (int i = 0; i < SAMPLE_COUNT; ++i) { float weight = sampleDatas[i].weight; // Avoid reading the megatexture when the weight is 0 as it can be costly. if (weight > 0.0) { Properties tempProperties = getPropertiesFromMegatexture(sampleDatas[i]); tempProperties = scaleProperties(tempProperties, weight); properties = sumProperties(properties, tempProperties); } } return properties; #endif } `;var Y5i=_(T(),1),B0t={Z_UP:0,Y_UP:1},xm=Object.freeze(B0t);function O0t(e){let t=new Cx;this.shaderBuilder=t;let n=e._customShader,i=St(e._uniformMap,n.uniformMap);e._uniformMap=i;let o=n.uniforms;for(let p in o)if(o.hasOwnProperty(p)){let g=o[p];t.addUniform(g.type,p,ye.FRAGMENT)}t.addUniform("sampler2D","u_megatextureTextures[METADATA_COUNT]",ye.FRAGMENT),this.uniformMap=i;let r=e._clippingPlanes,s=l(r)&&r.enabled?r.length:0;this.clippingPlanes=r,this.clippingPlanesLength=s,t.addVertexLines([Z9]),e.provider.metadataOrder===xm.Y_UP&&t.addDefine("Y_UP_METADATA_ORDER",void 0,ye.FRAGMENT);let a=e._provider.shape;a==="BOX"?t.addDefine("SHAPE_BOX",void 0,ye.FRAGMENT):a==="CYLINDER"?t.addDefine("SHAPE_CYLINDER",void 0,ye.FRAGMENT):a==="ELLIPSOID"&&t.addDefine("SHAPE_ELLIPSOID",void 0,ye.FRAGMENT),t.addFragmentLines([n.fragmentShaderText,"#line 0",A9,L9,G9,M9]),s>0&&(t.addDefine("CLIPPING_PLANES",void 0,ye.FRAGMENT),t.addDefine("CLIPPING_PLANES_COUNT",s,ye.FRAGMENT),r.unionClippingRegions&&t.addDefine("CLIPPING_PLANES_UNION",void 0,ye.FRAGMENT),t.addFragmentLines([I9])),e._depthTest&&(t.addDefine("DEPTH_TEST",void 0,ye.FRAGMENT),t.addFragmentLines([E9])),a==="BOX"?t.addFragmentLines([v9,X9,rS]):a==="CYLINDER"?t.addFragmentLines([w9,mL,W9,rS]):a==="ELLIPSOID"&&t.addFragmentLines([F9,mL,P9,rS]),t.addFragmentLines([R9]);let c=e._shape,d=c.shaderDefines;for(let p in d)if(d.hasOwnProperty(p)){let g=d[p];l(g)&&(g=g===!0?void 0:g,t.addDefine(p,g,ye.FRAGMENT))}let u=c.shaderMaximumIntersectionsLength;s>0&&(t.addDefine("CLIPPING_PLANES_INTERSECTION_INDEX",u,ye.FRAGMENT),s===1?u+=1:r.unionClippingRegions?u+=2:u+=1),e._depthTest&&(t.addDefine("DEPTH_INTERSECTION_INDEX",u,ye.FRAGMENT),u+=1),t.addDefine("INTERSECTION_COUNT",u,ye.FRAGMENT),(!m.equals(e.paddingBefore,m.ZERO)||!m.equals(e.paddingAfter,m.ZERO))&&t.addDefine("PADDING",void 0,ye.FRAGMENT),e._useLogDepth&&t.addDefine("LOG_DEPTH_READ_ONLY",void 0,ye.FRAGMENT),e._nearestSampling&&t.addDefine("NEAREST_SAMPLING",void 0,ye.FRAGMENT);let h=e._traversal;t.addDefine("SAMPLE_COUNT",`${h._sampleCount}`,ye.FRAGMENT)}var N9=O0t;var _ki=_(T(),1);function Y0t(e,t){let{shaderBuilder:n}=e,{names:i,types:o,componentTypes:r,minimumValues:s,maximumValues:a}=t._provider,c=o.length,d=l(s)&&l(a);n.addDefine("METADATA_COUNT",c,ye.FRAGMENT),d&&n.addDefine("STATISTICS",void 0,ye.FRAGMENT);for(let W=0;W<c;W++){let v=i[W],A=o[W],b=`PropertyStatistics_${v}`,R=`PropertyStatistics_${v}`;n.addStruct(b,R,ye.FRAGMENT);let G=A3(A);n.addStructField(b,G,"min"),n.addStructField(b,G,"max")}let u="Statistics",h="Statistics",p="statistics";n.addStruct(u,h,ye.FRAGMENT);for(let W=0;W<c;W++){let v=i[W],A=`PropertyStatistics_${v}`,b=v;n.addStructField(u,A,b)}let g="Metadata",f="Metadata",y="metadata";n.addStruct(g,f,ye.FRAGMENT),n.addStructField(g,h,p);for(let W=0;W<c;W++){let v=i[W],A=o[W],b=A3(A);n.addStructField(g,b,v)}for(let W=0;W<c;W++){let v=i[W],A=o[W],b=H0t(A),R=`VoxelProperty_${v}`,G=`VoxelProperty_${v}`;n.addStruct(R,G,ye.FRAGMENT),n.addStructField(R,b,"partialDerivativeLocal"),n.addStructField(R,b,"partialDerivativeWorld"),n.addStructField(R,b,"partialDerivativeView"),n.addStructField(R,b,"partialDerivativeValid")}let x="Voxel",S="Voxel",C="voxel";n.addStruct(x,S,ye.FRAGMENT);for(let W=0;W<c;W++){let v=i[W],A=`VoxelProperty_${v}`;n.addStructField(x,A,v)}n.addStructField(x,"vec3","positionEC"),n.addStructField(x,"vec3","positionUv"),n.addStructField(x,"vec3","positionShapeUv"),n.addStructField(x,"vec3","positionUvLocal"),n.addStructField(x,"vec3","viewDirUv"),n.addStructField(x,"vec3","viewDirWorld"),n.addStructField(x,"vec3","surfaceNormal"),n.addStructField(x,"float","travelDistance"),n.addStructField(x,"int","stepCount"),n.addStructField(x,"int","tileIndex"),n.addStructField(x,"int","sampleIndex");let V="FragmentInput";n.addStruct(V,"FragmentInput",ye.FRAGMENT),n.addStructField(V,f,y),n.addStructField(V,S,C);let Z="Properties",E="Properties",P="properties";n.addStruct(Z,E,ye.FRAGMENT);for(let W=0;W<c;W++){let v=i[W],A=o[W],b=A3(A);n.addStructField(Z,b,v)}{let W="clearProperties";n.addFunction(W,`${E} clearProperties()`,ye.FRAGMENT),n.addFunctionLines(W,[`${E} ${P};`]);for(let v=0;v<c;v++){let A=i[v],b=o[v],R=r[v],G=A3(b,R);n.addFunctionLines(W,[`${P}.${A} = ${G}(0.0);`])}n.addFunctionLines(W,[`return ${P};`])}{let W="sumProperties";n.addFunction(W,`${E} sumProperties(${E} propertiesA, ${E} propertiesB)`,ye.FRAGMENT),n.addFunctionLines(W,[`${E} ${P};`]);for(let v=0;v<c;v++){let A=i[v];n.addFunctionLines(W,[`${P}.${A} = propertiesA.${A} + propertiesB.${A};`])}n.addFunctionLines(W,[`return ${P};`])}{let W="scaleProperties";n.addFunction(W,`${E} scaleProperties(${E} ${P}, float scale)`,ye.FRAGMENT),n.addFunctionLines(W,[`${E} scaledProperties = ${P};`]);for(let v=0;v<c;v++){let A=i[v];n.addFunctionLines(W,[`scaledProperties.${A} *= scale;`])}n.addFunctionLines(W,["return scaledProperties;"])}{let W="mixProperties";n.addFunction(W,`${E} mixProperties(${E} propertiesA, ${E} propertiesB, float mixFactor)`,ye.FRAGMENT),n.addFunctionLines(W,[`${E} ${P};`]);for(let v=0;v<c;v++){let A=i[v];n.addFunctionLines(W,[`${P}.${A} = mix(propertiesA.${A}, propertiesB.${A}, mixFactor);`])}n.addFunctionLines(W,[`return ${P};`])}{let W="copyPropertiesToMetadata";n.addFunction(W,`void copyPropertiesToMetadata(in ${E} ${P}, inout ${f} ${y})`,ye.FRAGMENT);for(let v=0;v<c;v++){let A=i[v];n.addFunctionLines(W,[`${y}.${A} = ${P}.${A};`])}}if(d){let W="setStatistics";n.addFunction(W,`void setStatistics(inout ${h} ${p})`,ye.FRAGMENT);for(let v=0;v<c;v++){let A=i[v],b=o[v],R=ct.getComponentCount(b);for(let G=0;G<R;G++){let I=K0t(b,G),w=s[v][G],M=a[v][G];!l(w)||!l(M)||n.addFunctionLines(W,[`${p}.${A}.min${I} = ${bTe(w)};`,`${p}.${A}.max${I} = ${bTe(M)};`])}}}{let W="getPropertiesFromMegatextureAtUv";n.addFunction(W,`${E} getPropertiesFromMegatextureAtUv(vec2 texcoord)`,ye.FRAGMENT),n.addFunctionLines(W,[`${E} ${P};`]);for(let v=0;v<c;v++){let A=i[v],b=o[v],R=r[v],G=z0t(b,R);n.addFunctionLines(W,[`properties.${A} = texture(u_megatextureTextures[${v}], texcoord)${G};`])}n.addFunctionLines(W,[`return ${P};`])}}function A3(e){if(e===ct.SCALAR)return"float";if(e===ct.VEC2)return"vec2";if(e===ct.VEC3)return"vec3";if(e===ct.VEC4)return"vec4"}function z0t(e){if(e===ct.SCALAR)return".r";if(e===ct.VEC2)return".ra";if(e===ct.VEC3)return".rgb";if(e===ct.VEC4)return""}function H0t(e){if(e===ct.SCALAR)return"vec3";if(e===ct.VEC2)return"mat2";if(e===ct.VEC3)return"mat3";if(e===ct.VEC4)return"mat4"}function bTe(e){let t=e.toString();return t.indexOf(".")===-1&&(t=`${e}.0`),t}function K0t(e,t){return e===ct.SCALAR?"":`[${t}]`}var k9=Y0t;function J0t(e,t){let n=new N9(e);k9(n,e);let{shaderBuilder:i,clippingPlanes:o,clippingPlanesLength:r}=n;if(r>0){let S="getClippingPlane",C=c0(o,t),V=0,L=C.indexOf(")")+1,Z=C.indexOf("{",L)+1,E=C.indexOf("}",Z),P=C.slice(V,L),W=C.slice(Z,E);i.addFunction(S,P,ye.FRAGMENT),i.addFunctionLines(S,[W])}let s=i.clone();s.addDefine("PICKING",void 0,ye.FRAGMENT);let a=i.clone();a.addDefine("PICKING_VOXEL",void 0,ye.FRAGMENT);let c=i.buildShaderProgram(t),d=s.buildShaderProgram(t),u=a.buildShaderProgram(t),h=Ue.fromCache({cull:{enabled:!0,face:Ti.BACK},depthTest:{enabled:!1},depthMask:!1,blending:un.PRE_MULTIPLIED_ALPHA_BLEND}),p=t.getViewportQuadVertexArray(),g=e._depthTest,f=new $e({vertexArray:p,primitiveType:we.TRIANGLES,renderState:h,shaderProgram:c,uniformMap:n.uniformMap,modelMatrix:e._compoundModelMatrix,pass:Ee.VOXELS,executeInClosestFrustum:!0,owner:this,cull:g,occlude:g}),y=$e.shallowClone(f,new $e);y.shaderProgram=d,y.pickOnly=!0;let x=$e.shallowClone(f,new $e);if(x.shaderProgram=u,x.pickOnly=!0,l(e._drawCommand)){let S=e._drawCommand;S.shaderProgram=S.shaderProgram&&S.shaderProgram.destroy()}if(l(e._drawCommandPick)){let S=e._drawCommandPick;S.shaderProgram=S.shaderProgram&&S.shaderProgram.destroy()}if(l(e._drawCommandPickVoxel)){let S=e._drawCommandPickVoxel;S.shaderProgram=S.shaderProgram&&S.shaderProgram.destroy()}e._drawCommand=f,e._drawCommandPick=y,e._drawCommandPickVoxel=x}var U9=J0t;var oUi=_(T(),1);var wki=_(T(),1),Q0t={FLOAT:"float",VEC2:"vec2",VEC3:"vec3",VEC4:"vec4",INT:"int",INT_VEC2:"ivec2",INT_VEC3:"ivec3",INT_VEC4:"ivec4",BOOL:"bool",BOOL_VEC2:"bvec2",BOOL_VEC3:"bvec3",BOOL_VEC4:"bvec4",MAT2:"mat2",MAT3:"mat3",MAT4:"mat4",SAMPLER_2D:"sampler2D",SAMPLER_CUBE:"samplerCube"},hL=Object.freeze(Q0t);var Kki=_(T(),1);var Aki=_(T(),1);function j0t(e,t,n){let i=new Uint8ClampedArray(e.buffer),o=new ImageData(i,t,n),r=document.createElement("canvas");return r.width=t,r.height=n,r.getContext("2d").putImageData(o,0,0),r}var D9=j0t;function fL(){this._defaultTexture=void 0,this._textures={},this._loadedImages=[],this._lastUpdatedFrame=-1}fL.prototype.getTexture=function(e){return this._textures[e]};function q0t(e,t,n){n.resource.fetchImage().then(function(i){e._loadedImages.push({id:t,image:i,textureUniform:n})}).catch(function(){let i=e._textures[t];l(i)&&i!==e._defaultTexture&&i.destroy(),e._textures[t]=e._defaultTexture})}fL.prototype.loadTexture2D=function(e,t){l(t.typedArray)?this._loadedImages.push({id:e,textureUniform:t}):q0t(this,e,t)};function $0t(e,t,n){let{id:i,textureUniform:o,image:r}=t,s=n.webgl2?M3(o,r,n):egt(o,r,n),a=e._textures[i];l(a)&&a!==n.defaultTexture&&a.destroy(),e._textures[i]=s}function M3(e,t,n){let{typedArray:i,sampler:o}=e,r=l(i)?yTe(e,n):new vt({context:n,source:t,sampler:o});return gTe(o)&&r.generateMipmap(),r}function egt(e,t,n){let{typedArray:i,sampler:o}=e,r=gTe(o),s=o.wrapS===Vn.REPEAT||o.wrapS===Vn.MIRRORED_REPEAT||o.wrapT===Vn.REPEAT||o.wrapT===Vn.MIRRORED_REPEAT,{width:a,height:c}=l(i)?e:t,d=[a,c].every(X.isPowerOfTwo);if((r||s)&&!d)if(l(i)){if(e.pixelDatatype===je.UNSIGNED_BYTE){let h=D9(i,a,c),p=hg(h);return M3({sampler:o},p,n)}}else{let h=hg(t);return M3(e,h,n)}else return M3(e,t,n);return r?console.warn("Texture requires resizing for mipmaps but pixelDataType cannot be resized. The texture may be rendered incorrectly."):s&&console.warn("Texture requires resizing for wrapping but pixelDataType cannot be resized. The texture may be rendered incorrectly."),yTe(e,n)}function gTe(e){return[jt.NEAREST_MIPMAP_NEAREST,jt.NEAREST_MIPMAP_LINEAR,jt.LINEAR_MIPMAP_NEAREST,jt.LINEAR_MIPMAP_LINEAR].includes(e.minificationFilter)}function yTe(e,t){let{pixelFormat:n,pixelDatatype:i,width:o,height:r,typedArray:s,sampler:a}=e;return new vt({context:t,pixelFormat:n,pixelDatatype:i,source:{arrayBufferView:s,width:o,height:r},sampler:a,flipY:!1})}fL.prototype.update=function(e){if(e.frameNumber===this._lastUpdatedFrame)return;this._lastUpdatedFrame=e.frameNumber;let t=e.context;this._defaultTexture=t.defaultTexture;let n=this._loadedImages;for(let i=0;i<n.length;i++){let o=n[i];$0t(this,o,t)}n.length=0};fL.prototype.isDestroyed=function(){return!1};fL.prototype.destroy=function(){let e=this._textures;for(let t in e)if(e.hasOwnProperty(t)){let n=e[t];n!==this._defaultTexture&&n.destroy()}return me(this)};var B9=fL;function O9(e){e=e??Y.EMPTY_OBJECT,this.mode=e.mode??bb.MODIFY_MATERIAL,this.lightingModel=e.lightingModel,this.uniforms=e.uniforms??Y.EMPTY_OBJECT,this.varyings=e.varyings??Y.EMPTY_OBJECT,this.vertexShaderText=e.vertexShaderText,this.fragmentShaderText=e.fragmentShaderText,this.translucencyMode=e.translucencyMode??Ig.INHERIT,this._textureManager=new B9,this._defaultTexture=void 0,this.uniformMap=tgt(this),this.usedVariablesVertex={attributeSet:{},featureIdSet:{},metadataSet:{}},this.usedVariablesFragment={attributeSet:{},featureIdSet:{},metadataSet:{},materialSet:{}},ogt(this),rgt(this)}function tgt(e){let t=e.uniforms,n={};for(let i in t)if(t.hasOwnProperty(i)){let o=t[i];o.type===hL.SAMPLER_2D?(e._textureManager.loadTexture2D(i,o.value),n[i]=ngt(e,i)):n[i]=igt(e,i)}return n}function ngt(e,t){return function(){return e._textureManager.getTexture(t)??e._defaultTexture}}function igt(e,t){return function(){return e.uniforms[t].value}}function sS(e,t,n){let i;for(;(i=t.exec(e))!==null;){let o=i[1];n[o]=!0}}function ogt(e){let t=/[vf]sInput\.attributes\.(\w+)/g,n=/[vf]sInput\.featureIds\.(\w+)/g,i=/[vf]sInput\.metadata.(\w+)/g,o,r=e.vertexShaderText;l(r)&&(o=e.usedVariablesVertex.attributeSet,sS(r,t,o),o=e.usedVariablesVertex.featureIdSet,sS(r,n,o),o=e.usedVariablesVertex.metadataSet,sS(r,i,o));let s=e.fragmentShaderText;if(l(s)){o=e.usedVariablesFragment.attributeSet,sS(s,t,o),o=e.usedVariablesFragment.featureIdSet,sS(s,n,o),o=e.usedVariablesFragment.metadataSet,sS(s,i,o);let a=/material\.(\w+)/g,c=e.usedVariablesFragment.materialSet;sS(s,a,c)}}function xTe(e){let t=/^.*MC$/,n=/^.*WC$/,i=/^.*EC$/;return t.test(e)?`${e} (model coordinates)`:n.test(e)?`${e} (Cartesian world coordinates)`:i.test(e)?`${e} (eye coordinates)`:e}function Ic(e,t,n,i){if(e.hasOwnProperty(t)){let o=`${xTe(t)} is not available in the ${i} shader. Did you mean ${xTe(n)} instead?`;throw new pe(o)}}function rgt(e){let t=e.usedVariablesVertex.attributeSet;Ic(t,"position","positionMC","vertex"),Ic(t,"normal","normalMC","vertex"),Ic(t,"tangent","tangentMC","vertex"),Ic(t,"bitangent","bitangentMC","vertex"),Ic(t,"positionWC","positionMC","vertex"),Ic(t,"positionEC","positionMC","vertex"),Ic(t,"normalEC","normalMC","vertex"),Ic(t,"tangentEC","tangentMC","vertex"),Ic(t,"bitangentEC","bitangentMC","vertex");let n=e.usedVariablesFragment.attributeSet;Ic(n,"position","positionEC","fragment"),Ic(n,"normal","normalEC","fragment"),Ic(n,"tangent","tangentEC","fragment"),Ic(n,"bitangent","bitangentEC","fragment"),Ic(n,"normalMC","normalEC","fragment"),Ic(n,"tangentMC","tangentEC","fragment"),Ic(n,"bitangentMC","bitangentEC","fragment")}O9.prototype.setUniform=function(e,t){let n=this.uniforms[e];n.type===hL.SAMPLER_2D?this._textureManager.loadTexture2D(e,t):l(t.clone)?n.value=t.clone(n.value):n.value=t};O9.prototype.update=function(e){this._defaultTexture=e.context.defaultTexture,this._textureManager.update(e)};O9.prototype.isDestroyed=function(){return!1};O9.prototype.destroy=function(){this._textureManager=this._textureManager&&this._textureManager.destroy(),me(this)};var aS=O9;var mUi=_(T(),1);function C0(e){let{loader:t,metadata:n}=e;this._loader=t,this._metadata=n,this._resourcesLoaded=!1,this._ready=!1}Object.defineProperties(C0.prototype,{ready:{get:function(){return this._ready}},metadata:{get:function(){return this._metadata}}});C0.fromMetadataArray=function(e){return new C0({metadata:e})};C0.fromGltf=async function(e){let t=new nh({gltfResource:e,releaseGltfJson:!1,loadAttributesAsTypedArray:!0});try{await t.load()}catch(n){throw t.destroy(),n}return new C0({loader:t})};C0.prototype.update=function(e,t){let n=this._loader;if(!this._ready){if(t.afterRender.push(()=>!0),!l(n)){this._ready=!0;return}if(this._resourcesLoaded){let{structuralMetadata:i,scene:o}=n.components,{attributes:r}=o.nodes[0].primitives[0];this._metadata=sgt(r,i,e),this._ready=!0;return}this._resourcesLoaded=n.process(t)}};function sgt(e,t,n){let{className:i,names:o,types:r,componentTypes:s}=n.provider,a=t.propertyAttributes.find(u=>u.class.id===i),{properties:c}=a,d=new Array(o.length);for(let u=0;u<e.length;u++){let h=c[o[u]].attribute,p=e.find(x=>x.name===h);if(!l(p))continue;let g=Ft.toComponentDatatype(s[u]),f=ct.getComponentCount(r[u]),y=p.count*f;d[u]=Q.createArrayBufferView(g,p.typedArray.buffer,p.typedArray.byteOffset+p.byteOffset,y)}return d}C0.prototype.isDestroyed=function(){return!1};C0.prototype.destroy=function(){return this._loader=this._loader&&this._loader.destroy(),me(this)};var cS=C0;var zUi=_(T(),1);var _Ui=_(T(),1);function rd(){this.orientedBoundingBox=new En,this.boundingSphere=new le,this.boundTransform=new F,this.shapeTransform=new F,this._minBounds=m.clone(rd.DefaultMinBounds,new m),this._maxBounds=m.clone(rd.DefaultMaxBounds,new m),this.shaderUniforms={renderMinBounds:new m,renderMaxBounds:new m,boxUvToShapeUvScale:new m,boxUvToShapeUvTranslate:new m},this.shaderDefines={BOX_INTERSECTION_INDEX:void 0,BOX_HAS_SHAPE_BOUNDS:void 0},this.shaderMaximumIntersectionsLength=0}var agt=new m,R8=new m,cgt=new $,lgt=new m,dgt=new m,ugt=new m,mgt=new m,_Te=F.fromRotationTranslation($.fromUniformScale(.5,new $),new m(.5,.5,.5),new F);rd.prototype.update=function(e,t,n,i,o){i=i??rd.DefaultMinBounds,o=o??rd.DefaultMaxBounds;let r=rd.DefaultMinBounds,s=rd.DefaultMaxBounds;t=this._minBounds=m.clamp(t,r,s,this._minBounds),n=this._maxBounds=m.clamp(n,r,s,this._maxBounds),i=m.clamp(i,r,s,lgt),o=m.clamp(o,r,s,dgt);let a=m.clamp(t,i,o,ugt),c=m.clamp(n,i,o,mgt),d=F.getScale(e,R8);if(a.x>c.x||a.y>c.y||a.z>c.z||(a.x===c.x)+(a.y===c.y)+(a.z===c.z)>=2||i.x>o.x||i.y>o.y||i.z>o.z||d.x===0||d.y===0||d.z===0)return!1;this.shapeTransform=F.clone(e,this.shapeTransform),this.orientedBoundingBox=G8(a,c,this.shapeTransform,this.orientedBoundingBox),this.boundTransform=F.fromRotationTranslation(this.orientedBoundingBox.halfAxes,this.orientedBoundingBox.center,this.boundTransform),this.boundingSphere=le.fromOrientedBoundingBox(this.orientedBoundingBox,this.boundingSphere);let{shaderUniforms:u,shaderDefines:h}=this;for(let f in h)h.hasOwnProperty(f)&&(h[f]=void 0);let p=!m.equals(t,r)||!m.equals(n,s),g=0;if(h.BOX_INTERSECTION_INDEX=g,g+=1,u.renderMinBounds=F.multiplyByPoint(_Te,a,u.renderMinBounds),u.renderMaxBounds=F.multiplyByPoint(_Te,c,u.renderMaxBounds),p){h.BOX_HAS_SHAPE_BOUNDS=!0;let f=t,y=n;u.boxUvToShapeUvScale=m.fromElements(2/(f.x===y.x?1:y.x-f.x),2/(f.y===y.y?1:y.y-f.y),2/(f.z===y.z?1:y.z-f.z),u.boxUvToShapeUvScale),u.boxUvToShapeUvTranslate=m.fromElements(-u.boxUvToShapeUvScale.x*(f.x*.5+.5),-u.boxUvToShapeUvScale.y*(f.y*.5+.5),-u.boxUvToShapeUvScale.z*(f.z*.5+.5),u.boxUvToShapeUvTranslate)}return this.shaderMaximumIntersectionsLength=g,!0};var N3=new m,Z8=new m;rd.prototype.computeOrientedBoundingBoxForTile=function(e,t,n,i,o){let r=this._minBounds,s=this._maxBounds,a=1/Math.pow(2,e),c=m.fromElements(X.lerp(r.x,s.x,a*t),X.lerp(r.y,s.y,a*n),X.lerp(r.z,s.z,a*i),N3),d=m.fromElements(X.lerp(r.x,s.x,a*(t+1)),X.lerp(r.y,s.y,a*(n+1)),X.lerp(r.z,s.z,a*(i+1)),Z8);return G8(c,d,this.shapeTransform,o)};var TTe=new m;rd.prototype.computeOrientedBoundingBoxForSample=function(e,t,n,i){let o=1/Math.pow(2,e.level),r=m.divideComponents(m.ONE,t,TTe),s=m.multiplyByScalar(r,o,TTe),a=m.multiplyByScalar(m.fromElements(e.x+n.x,e.y+n.y,e.z+n.z,N3),o,N3),c=m.add(a,s,Z8),d=this._minBounds,u=this._maxBounds,h=m.fromElements(X.lerp(d.x,u.x,a.x),X.lerp(d.y,u.y,a.y),X.lerp(d.z,u.z,a.z),N3),p=m.fromElements(X.lerp(d.x,u.x,c.x),X.lerp(d.y,u.y,c.y),X.lerp(d.z,u.z,c.z),Z8);return G8(h,p,this.shapeTransform,i)};rd.DefaultMinBounds=Object.freeze(new m(-1,-1,-1));rd.DefaultMaxBounds=Object.freeze(new m(1,1,1));function G8(e,t,n,i){let o=rd.DefaultMinBounds,r=rd.DefaultMaxBounds;if(m.equals(e,o)&&m.equals(t,r))i.center=F.getTranslation(n,i.center),i.halfAxes=F.getMatrix3(n,i.halfAxes);else{let a=F.getScale(n,R8),c=m.midpoint(e,t,agt);i.center=F.multiplyByPoint(n,c,i.center),a=m.fromElements(a.x*.5*(t.x-e.x),a.y*.5*(t.y-e.y),a.z*.5*(t.z-e.z),R8);let d=F.getRotation(n,cgt);i.halfAxes=$.setScale(d,a,i.halfAxes)}return i}var up=rd;var IUi=_(T(),1);function ss(){this.orientedBoundingBox=new En,this.boundingSphere=new le,this.boundTransform=new F,this.shapeTransform=new F,this._minimumRadius=ss.DefaultMinBounds.x,this._maximumRadius=ss.DefaultMaxBounds.x,this._minimumAngle=ss.DefaultMinBounds.y,this._maximumAngle=ss.DefaultMaxBounds.y,this._minimumHeight=ss.DefaultMinBounds.z,this._maximumHeight=ss.DefaultMaxBounds.z,this.shaderUniforms={cylinderRenderRadiusMinMax:new U,cylinderRenderAngleMinMax:new U,cylinderRenderHeightMinMax:new U,cylinderUvToShapeUvRadius:new U,cylinderUvToShapeUvAngle:new U,cylinderUvToShapeUvHeight:new U,cylinderShapeUvAngleMinMax:new U,cylinderShapeUvAngleRangeZeroMid:0},this.shaderDefines={CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN:void 0,CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT:void 0,CYLINDER_HAS_RENDER_BOUNDS_ANGLE:void 0,CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO:void 0,CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF:void 0,CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF:void 0,CYLINDER_HAS_SHAPE_BOUNDS_RADIUS:void 0,CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT:void 0,CYLINDER_HAS_SHAPE_BOUNDS_ANGLE:void 0,CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY:void 0,CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY:void 0,CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED:void 0,CYLINDER_INTERSECTION_INDEX_RADIUS_MAX:void 0,CYLINDER_INTERSECTION_INDEX_RADIUS_MIN:void 0,CYLINDER_INTERSECTION_INDEX_ANGLE:void 0},this.shaderMaximumIntersectionsLength=0}var LTe=new m;ss.prototype.update=function(e,t,n,i,o){i=i??ss.DefaultMinBounds,o=o??ss.DefaultMaxBounds;let r=ss.DefaultMinBounds.x,s=ss.DefaultMaxBounds.x,a=ss.DefaultMinBounds.y,c=ss.DefaultMaxBounds.y,d=ss.DefaultMinBounds.z,u=ss.DefaultMaxBounds.z,h=c-a,p=.5*h,g=X.EPSILON10,f=X.EPSILON3,y=X.EPSILON10,x=X.clamp(t.x,r,s),S=X.clamp(n.x,r,s),C=X.clamp(i.x,r,s),V=X.clamp(o.x,r,s),L=Math.max(x,C),Z=Math.min(S,V),E=X.negativePiToPi(t.y),P=X.negativePiToPi(n.y),W=X.negativePiToPi(i.y),v=X.negativePiToPi(o.y),A=Math.max(E,W),b=Math.min(P,v),R=X.clamp(t.z,d,u),G=X.clamp(n.z,d,u),I=X.clamp(i.z,d,u),w=X.clamp(o.z,d,u),M=Math.max(R,I),B=Math.min(G,w),k=F.getScale(e,LTe);if(Z===0||L>Z||M>B||X.equalsEpsilon(k.x,0,void 0,g)||X.equalsEpsilon(k.y,0,void 0,g)||X.equalsEpsilon(k.z,0,void 0,g))return!1;this._minimumRadius=x,this._maximumRadius=S,this._minimumAngle=E,this._maximumAngle=P,this._minimumHeight=R,this._maximumHeight=G,this.shapeTransform=F.clone(e,this.shapeTransform),this.orientedBoundingBox=I8(L,Z,A,b,M,B,this.shapeTransform,this.orientedBoundingBox),this.boundTransform=F.fromRotationTranslation(this.orientedBoundingBox.halfAxes,this.orientedBoundingBox.center,this.boundTransform),this.boundingSphere=le.fromOrientedBoundingBox(this.orientedBoundingBox,this.boundingSphere);let z=x===r&&S===s,K=P<E,te=P-E+K*h,H=te>p+y&&te<h-y,j=te<p-y,ee=te>=p-y&&te<=p+y,fe=H||j||ee,Te=X.equalsEpsilon(E,a,void 0,f),de=X.equalsEpsilon(P,c,void 0,f),xe=R===d&&G===u,Ce=L===r,Ie=b<A,Le=b-A+Ie*h,Ne=Le>=p-y&&Le<h-y,Oe=Le>y&&Le<p-y,qe=Le<=y,Rt=Ne||Oe||qe,{shaderUniforms:Lt,shaderDefines:ke}=this;for(let ut in ke)ke.hasOwnProperty(ut)&&(ke[ut]=void 0);let Ht=0;if(ke.CYLINDER_INTERSECTION_INDEX_RADIUS_MAX=Ht,Ht+=1,Ce||(ke.CYLINDER_HAS_RENDER_BOUNDS_RADIUS_MIN=!0,ke.CYLINDER_INTERSECTION_INDEX_RADIUS_MIN=Ht,Ht+=1),Lt.cylinderRenderRadiusMinMax=U.fromElements(L,Z,Lt.cylinderRenderRadiusMinMax),L===Z&&(ke.CYLINDER_HAS_RENDER_BOUNDS_RADIUS_FLAT=!0),!z){ke.CYLINDER_HAS_SHAPE_BOUNDS_RADIUS=!0;let ut=S-x,mt=0,Pn=1;ut!==0&&(mt=1/ut,Pn=-x/ut),Lt.cylinderUvToShapeUvRadius=U.fromElements(mt,Pn,Lt.cylinderUvToShapeUvRadius)}if(!xe){ke.CYLINDER_HAS_SHAPE_BOUNDS_HEIGHT=!0;let ut=G-R,mt=0,Pn=1;ut!==0&&(mt=2/ut,Pn=-(R+1)/ut),Lt.cylinderUvToShapeUvHeight=U.fromElements(mt,Pn,Lt.cylinderUvToShapeUvHeight)}if(Lt.cylinderRenderHeightMinMax=U.fromElements(M,B,Lt.cylinderRenderHeightMinMax),K&&(ke.CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_MAX_REVERSED=!0),Rt&&(ke.CYLINDER_HAS_RENDER_BOUNDS_ANGLE=!0,ke.CYLINDER_INTERSECTION_INDEX_ANGLE=Ht,Ne?(ke.CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_UNDER_HALF=!0,Ht+=1):Oe?(ke.CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_OVER_HALF=!0,Ht+=2):qe&&(ke.CYLINDER_HAS_RENDER_BOUNDS_ANGLE_RANGE_EQUAL_ZERO=!0,Ht+=2),Lt.cylinderRenderAngleMinMax=U.fromElements(A,b,Lt.cylinderRenderAngleMinMax)),fe){ke.CYLINDER_HAS_SHAPE_BOUNDS_ANGLE=!0,Te&&(ke.CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MIN_DISCONTINUITY=!0),de&&(ke.CYLINDER_HAS_SHAPE_BOUNDS_ANGLE_MAX_DISCONTINUITY=!0);let ut=(E-a)/h,mt=(P-a)/h,Pn=1-te/h;if(Lt.cylinderShapeUvAngleMinMax=U.fromElements(ut,mt,Lt.cylinderShapeUvAngleMinMax),Lt.cylinderShapeUvAngleRangeZeroMid=(mt+.5*Pn)%1,te<=y)Lt.cylinderUvToShapeUvAngle=U.fromElements(0,1,Lt.cylinderUvToShapeUvAngle);else{let cn=h/te,ge=-(E-a)/te;Lt.cylinderUvToShapeUvAngle=U.fromElements(cn,ge,Lt.cylinderUvToShapeUvAngle)}}return this.shaderMaximumIntersectionsLength=Ht,!0};ss.prototype.computeOrientedBoundingBoxForTile=function(e,t,n,i,o){let r=this._minimumRadius,s=this._maximumRadius,a=this._minimumAngle,c=this._maximumAngle,d=this._minimumHeight,u=this._maximumHeight,h=1/Math.pow(2,e),p=X.lerp(r,s,t*h),g=X.lerp(r,s,(t+1)*h),f=X.lerp(a,c,n*h),y=X.lerp(a,c,(n+1)*h),x=X.lerp(d,u,i*h),S=X.lerp(d,u,(i+1)*h);return I8(p,g,f,y,x,S,this.shapeTransform,o)};var STe=new m,CTe=new m,hgt=new m;ss.prototype.computeOrientedBoundingBoxForSample=function(e,t,n,i){let o=1/Math.pow(2,e.level),r=m.divideComponents(m.ONE,t,STe),s=m.multiplyByScalar(r,o,STe),a=m.multiplyByScalar(m.fromElements(e.x+n.x,e.y+n.y,e.z+n.z,CTe),o,CTe),c=m.add(a,s,hgt),d=this._minimumRadius,u=this._maximumRadius,h=this._minimumHeight,p=this._maximumHeight,g=this._minimumAngle,f=this._maximumAngle,y=X.lerp(d,u,a.x),x=X.lerp(d,u,c.x),S=X.lerp(h,p,a.y),C=X.lerp(h,p,c.y),V=X.lerp(g,f,a.z),L=X.lerp(g,f,c.z);return I8(y,x,V,L,S,C,this.shapeTransform,i)};ss.DefaultMinBounds=Object.freeze(new m(0,-X.PI,-1));ss.DefaultMaxBounds=Object.freeze(new m(1,+X.PI,1));var fgt=5,pgt=new Array(fgt),bgt=new m,ggt=new $,ygt=new F,xgt=new F,_gt=new F,E8=new F,Tgt=new m,Sgt=new m,Cgt=new m,RTe=new Array(8);for(let e=0;e<8;e++)RTe[e]=new m;function VTe(e,t,n){return Math.abs(se.dot(e,t))<n}function Vgt(e){let t=F.getColumn(e,0,Tgt),n=F.getColumn(e,1,Sgt),i=F.getColumn(e,2,Cgt),o=X.EPSILON4;return VTe(t,n,o)&&VTe(n,i,o)}function Lgt(e,t){let n=RTe;m.fromElements(-.5,-.5,-.5,n[0]),m.fromElements(-.5,-.5,.5,n[1]),m.fromElements(-.5,.5,-.5,n[2]),m.fromElements(-.5,.5,.5,n[3]),m.fromElements(.5,-.5,-.5,n[4]),m.fromElements(.5,-.5,.5,n[5]),m.fromElements(.5,.5,-.5,n[6]),m.fromElements(.5,.5,.5,n[7]);for(let i=0;i<8;++i)F.multiplyByPoint(e,n[i],n[i]);return En.fromPoints(n,t)}function I8(e,t,n,i,o,r,s,a){let c=ss.DefaultMinBounds,d=ss.DefaultMaxBounds,u=c.x,h=d.x,p=c.y,g=d.y,f=c.z,y=d.z;if(e===u&&t===h&&o===f&&r===y&&n===p&&i===g)return a.center=F.getTranslation(s,a.center),a.halfAxes=F.getMatrix3(s,a.halfAxes),a;i<n&&(i+=X.TWO_PI);let S=i-n,C=n+S*.5,V=pgt,L=0;V[L++]=n,V[L++]=i,V[L++]=C,S>X.PI&&(V[L++]=C-X.PI_OVER_TWO,V[L++]=C+X.PI_OVER_TWO);let Z=1,E=1,P=-1,W=-1;for(let te=0;te<L;++te){let H=V[te]-C,j=Math.cos(H),ee=Math.sin(H),fe=j*e,Te=ee*e,de=j*t,xe=ee*t;Z=Math.min(Z,fe),E=Math.min(E,Te),Z=Math.min(Z,de),E=Math.min(E,xe),P=Math.max(P,fe),W=Math.max(W,Te),P=Math.max(P,de),W=Math.max(W,xe)}let v=P-Z,A=W-E,b=r-o,R=(Z+P)*.5,G=(E+W)*.5,I=(o+r)*.5,w=m.fromElements(R,G,I,bgt),M=$.fromRotationZ(C,ggt),B=m.fromElements(v,A,b,LTe),k=F.fromScale(B,_gt),O=F.fromRotation(M,xgt),N=F.fromTranslation(w,ygt),z=F.multiplyTransformation(O,F.multiplyTransformation(N,k,E8),E8),K=F.multiplyTransformation(s,z,E8);return Vgt(K)?En.fromTransformation(K,a):Lgt(K,a)}var lS=ss;var UUi=_(T(),1);function V0(){this.orientedBoundingBox=new En,this.boundingSphere=new le,this.boundTransform=new F,this.shapeTransform=new F,this._rectangle=new ce,this._minimumHeight=V0.DefaultMinBounds.z,this._maximumHeight=V0.DefaultMaxBounds.z,this._ellipsoid=new ne,this._translation=new m,this._rotation=new $,this.shaderUniforms={ellipsoidRadiiUv:new m,eccentricitySquared:0,evoluteScale:new U,ellipsoidInverseRadiiSquaredUv:new m,ellipsoidRenderLongitudeMinMax:new U,ellipsoidShapeUvLongitudeMinMaxMid:new m,ellipsoidUvToShapeUvLongitude:new U,ellipsoidUvToShapeUvLatitude:new U,ellipsoidRenderLatitudeSinMinMax:new U,ellipsoidInverseHeightDifferenceUv:0,clipMinMaxHeight:new U},this.shaderDefines={ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_UNDER_HALF:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_OVER_HALF:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY:void 0,ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE:void 0,ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_UNDER_HALF:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_EQUAL_HALF:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_OVER_HALF:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_UNDER_HALF:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_EQUAL_HALF:void 0,ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_OVER_HALF:void 0,ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE:void 0,ELLIPSOID_INTERSECTION_INDEX_LONGITUDE:void 0,ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX:void 0,ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN:void 0,ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MAX:void 0,ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MIN:void 0},this.shaderMaximumIntersectionsLength=0}var Rgt=new m,Zgt=new m,Ggt=new m,Egt=new m,Igt=new m,Xgt=new m,Wgt=new m,Pgt=new m,vgt=new $,ZTe=new m,GTe=new m,wgt=new ce;V0.prototype.update=function(e,t,n,i,o){let{DefaultMinBounds:r,DefaultMaxBounds:s}=V0;i=i??r,o=o??s;let a=X.EPSILON10,c=X.EPSILON3,d=X.EPSILON10,u=X.EPSILON10,h=X.EPSILON3,p=F.getScale(e,Pgt),g=m.clone(r,Rgt);g.z=-m.minimumComponent(p);let f=m.clamp(t,g,s,Zgt),y=m.clamp(n,g,s,Ggt),x=m.clamp(i,g,s,Egt),S=m.clamp(o,g,s,Igt),C=m.maximumByComponent(f,x,Xgt),V=m.minimumByComponent(y,S,Wgt),L=m.add(p,m.fromElements(y.z,y.z,y.z,ZTe),ZTe),Z=m.maximumComponent(L),E=m.add(p,m.fromElements(V.z,V.z,V.z,GTe),GTe);if(C.y>V.y||C.y===s.y||V.y===r.y||C.z>V.z||X.equalsEpsilon(E,m.ZERO,void 0,a))return!1;this._rectangle=ce.fromRadians(f.x,f.y,y.x,y.y),this._translation=F.getTranslation(e,this._translation),this._rotation=F.getRotation(e,this._rotation),this._ellipsoid=ne.fromCartesian3(p,this._ellipsoid),this._minimumHeight=f.z,this._maximumHeight=y.z;let P=ce.fromRadians(C.x,C.y,V.x,V.y,wgt);this.orientedBoundingBox=X8(P,C.z,V.z,this._ellipsoid,this._translation,this._rotation,this.orientedBoundingBox),this.shapeTransform=F.fromRotationTranslation($.setScale(this._rotation,L,vgt),this._translation,this.shapeTransform),this.boundTransform=F.fromRotationTranslation(this.orientedBoundingBox.halfAxes,this.orientedBoundingBox.center,this.boundTransform),this.boundingSphere=le.fromOrientedBoundingBox(this.orientedBoundingBox,this.boundingSphere);let W=s.x-r.x,v=.5*W,A=V.x<C.x,b=V.x-C.x+A*W,R=b<=d,G=b>=v-d&&b<W-d,I=b>d&&b<v-d,w=R||G||I,M=y.x<f.x,B=y.x-f.x+M*W,k=B>v+d&&B<W-d,O=B>=v-d&&B<=v+d,N=B<v-d,z=k||O||N,K=V.y<-h,te=V.y>=-h&&V.y<=+h,H=V.y>+h&&V.y<s.y-u,j=K||te||H,ee=C.y>r.y+u&&C.y<-h,fe=C.y>=-h&&C.y<=+h,Te=C.y>+h,de=ee||fe||Te,xe=j||de,Ce=y.y-f.y,Ie=y.y<-h,Le=y.y>=-h&&y.y<=+h,Ne=y.y>+h&&y.y<s.y-u,Oe=Ie||Le||Ne,qe=f.y>r.y+u&&f.y<-h,Rt=f.y>=-h&&f.y<=+h,Lt=f.y>+h,Ht=Oe||(qe||Rt||Lt),{shaderUniforms:ut,shaderDefines:mt}=this;for(let pt in mt)mt.hasOwnProperty(pt)&&(mt[pt]=void 0);ut.ellipsoidRadiiUv=m.divideByScalar(L,Z,ut.ellipsoidRadiiUv);let{x:Pn,z:cn}=ut.ellipsoidRadiiUv,ge=cn/Pn;ut.eccentricitySquared=1-ge*ge,ut.evoluteScale=U.fromElements((Pn*Pn-cn*cn)/Pn,(cn*cn-Pn*Pn)/cn,ut.evoluteScale),ut.ellipsoidInverseRadiiSquaredUv=m.divideComponents(m.ONE,m.multiplyComponents(ut.ellipsoidRadiiUv,ut.ellipsoidRadiiUv,ut.ellipsoidInverseRadiiSquaredUv),ut.ellipsoidInverseRadiiSquaredUv);let Ve=0;mt.ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MAX=Ve,Ve+=1,mt.ELLIPSOID_INTERSECTION_INDEX_HEIGHT_MIN=Ve,Ve+=1,ut.clipMinMaxHeight=U.fromElements((C.z-y.z)/Z,(V.z-y.z)/Z,ut.clipMinMaxHeight);let bn=(y.z-f.z)/Z;if(ut.ellipsoidInverseHeightDifferenceUv=1/bn,f.z===y.z&&(ut.ellipsoidInverseHeightDifferenceUv=0),w&&(mt.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE=!0,mt.ELLIPSOID_INTERSECTION_INDEX_LONGITUDE=Ve,G?(mt.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_UNDER_HALF=!0,Ve+=1):I?(mt.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_OVER_HALF=!0,Ve+=2):R&&(mt.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_RANGE_EQUAL_ZERO=!0,Ve+=2),ut.ellipsoidRenderLongitudeMinMax=U.fromElements(C.x,V.x,ut.ellipsoidRenderLongitudeMinMax)),z)if(mt.ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE=!0,y.x<f.x&&(mt.ELLIPSOID_HAS_SHAPE_BOUNDS_LONGITUDE_MIN_MAX_REVERSED=!0),B<=d)ut.ellipsoidUvToShapeUvLongitude=U.fromElements(0,1,ut.ellipsoidUvToShapeUvLongitude);else{let so=W/B,Eo=-(f.x-r.x)/B;ut.ellipsoidUvToShapeUvLongitude=U.fromElements(so,Eo,ut.ellipsoidUvToShapeUvLongitude)}if(w){let pt=X.equalsEpsilon(C.x,r.x,void 0,c),so=X.equalsEpsilon(V.x,s.x,void 0,c);pt&&(mt.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MIN_DISCONTINUITY=!0),so&&(mt.ELLIPSOID_HAS_RENDER_BOUNDS_LONGITUDE_MAX_DISCONTINUITY=!0);let Eo=(f.x-r.x)/W,aa=(y.x-r.x)/W,Gr=(V.x-r.x)/W,Ts=1-b/W,Fe=(Gr+.5*Ts)%1;ut.ellipsoidShapeUvLongitudeMinMaxMid=m.fromElements(Eo,aa,Fe,ut.ellipsoidShapeUvLongitudeMinMaxMid)}if(xe&&(de&&(mt.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN=!0,mt.ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MIN=Ve,ee?(mt.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_UNDER_HALF=!0,Ve+=1):fe?(mt.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_EQUAL_HALF=!0,Ve+=1):Te&&(mt.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MIN_OVER_HALF=!0,Ve+=2)),j&&(mt.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX=!0,mt.ELLIPSOID_INTERSECTION_INDEX_LATITUDE_MAX=Ve,K?(mt.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_UNDER_HALF=!0,Ve+=2):te?(mt.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_EQUAL_HALF=!0,Ve+=1):H&&(mt.ELLIPSOID_HAS_RENDER_BOUNDS_LATITUDE_MAX_OVER_HALF=!0,Ve+=1)),ut.ellipsoidRenderLatitudeSinMinMax=U.fromElements(Math.sin(C.y),Math.sin(V.y),ut.ellipsoidRenderLatitudeSinMinMax)),Ht)if(mt.ELLIPSOID_HAS_SHAPE_BOUNDS_LATITUDE=!0,Ce<u)ut.ellipsoidUvToShapeUvLatitude=U.fromElements(0,1,ut.ellipsoidUvToShapeUvLatitude);else{let so=(s.y-r.y)/Ce,Eo=(r.y-f.y)/Ce;ut.ellipsoidUvToShapeUvLatitude=U.fromElements(so,Eo,ut.ellipsoidUvToShapeUvLatitude)}return this.shaderMaximumIntersectionsLength=Ve,!0};var XTe=new ce;V0.prototype.computeOrientedBoundingBoxForTile=function(e,t,n,i,o){let r=1/Math.pow(2,e),s=t*r,a=(t+1)*r,c=n*r,d=(n+1)*r,u=i*r,h=(i+1)*r,p=ce.subsection(this._rectangle,s,c,a,d,XTe),g=X.lerp(this._minimumHeight,this._maximumHeight,u),f=X.lerp(this._minimumHeight,this._maximumHeight,h);return X8(p,g,f,this._ellipsoid,this._translation,this._rotation,o)};var ETe=new m,ITe=new m,Fgt=new m;V0.prototype.computeOrientedBoundingBoxForSample=function(e,t,n,i){let o=1/Math.pow(2,e.level),r=m.divideComponents(m.ONE,t,ETe),s=m.multiplyByScalar(r,o,ETe),a=m.multiplyByScalar(m.fromElements(e.x+n.x,e.y+n.y,e.z+n.z,ITe),o,ITe),c=m.add(a,s,Fgt),d=ce.subsection(this._rectangle,a.x,a.y,c.x,c.y,XTe),u=X.lerp(this._minimumHeight,this._maximumHeight,a.z),h=X.lerp(this._minimumHeight,this._maximumHeight,c.z);return X8(d,u,h,this._ellipsoid,this._translation,this._rotation,i)};function X8(e,t,n,i,o,r,s){return s=En.fromRectangle(e,t,n,i,s),s.center=m.add(s.center,o,s.center),s.halfAxes=$.multiply(s.halfAxes,r,s.halfAxes),s}V0.DefaultMinBounds=Object.freeze(new m(-X.PI,-X.PI_OVER_TWO,-ne.WGS84.minimumRadius));V0.DefaultMaxBounds=Object.freeze(new m(X.PI,X.PI_OVER_TWO,10*ne.WGS84.maximumRadius));var dS=V0;var su={BOX:"BOX",ELLIPSOID:"ELLIPSOID",CYLINDER:"CYLINDER"};su.getMinBounds=function(e){switch(e){case su.BOX:return up.DefaultMinBounds;case su.ELLIPSOID:return dS.DefaultMinBounds;case su.CYLINDER:return lS.DefaultMinBounds}};su.getMaxBounds=function(e){switch(e){case su.BOX:return up.DefaultMaxBounds;case su.ELLIPSOID:return dS.DefaultMaxBounds;case su.CYLINDER:return lS.DefaultMaxBounds}};su.getShapeConstructor=function(e){switch(e){case su.BOX:return up;case su.ELLIPSOID:return dS;case su.CYLINDER:return lS}};var Mi=Object.freeze(su);var KDi=_(T(),1);var QUi=_(T(),1);function Oh(e){this._comparator=e.comparator,this._maximumLength=e.maximumLength,this._array=l(e.maximumLength)?new Array(e.maximumLength):[],this._length=0}Object.defineProperties(Oh.prototype,{length:{get:function(){return this._length}},maximumLength:{get:function(){return this._maximumLength},set:function(e){if(l(e)){for(;this._length>e;)this.removeMinimum();this._array.length=e}this._maximumLength=e}},internalArray:{get:function(){return this._array}},comparator:{get:function(){return this._comparator}}});Oh.prototype.clone=function(){let e=this._maximumLength,t=this._comparator,n=this._array,i=this._length,o=new Oh({comparator:t,maximumLength:e});o._length=i;for(let r=0;r<i;r++)o._array[r]=n[r];return o};Oh.prototype.reset=function(){this._length=0;let e=this._maximumLength;if(l(e))for(let t=0;t<e;t++)this._array[t]=void 0;else this._array.length=0};Oh.prototype.resort=function(){let e=this._length;for(let t=0;t<e;t++)WTe(this,t)};Oh.prototype.insert=function(e){let t,n=this._maximumLength;if(l(n)){if(n===0)return;if(this._length===n){let o=this._array[0];if(this._comparator(e,o)<=0)return e;t=this.removeMinimum()}}let i=this._length;return this._array[i]=e,this._length++,WTe(this,i),t};Oh.prototype.removeMinimum=function(){let e=this._length;if(e===0)return;this._length--;let t=this._array[0];return e>=2&&(this._array[0]=this._array[e-1],PTe(this,0)),this._array[e-1]=void 0,t};Oh.prototype.removeMaximum=function(){let e=this._length;if(e===0)return;this._length--;let t;if(e<=2)t=this._array[e-1];else{let n=W8(this,1,2)?1:2;t=this._array[n],this._array[n]=this._array[e-1],e>=4&&PTe(this,n)}return this._array[e-1]=void 0,t};Oh.prototype.getMinimum=function(){if(this._length!==0)return this._array[0]};Oh.prototype.getMaximum=function(){let e=this._length;if(e!==0)return e<=2?this._array[e-1]:this._array[W8(this,1,2)?1:2]};function k3(e,t,n){let i=e._array,o=i[t];i[t]=i[n],i[n]=o}function Y9(e,t,n){return e._comparator(e._array[t],e._array[n])<0}function W8(e,t,n){return e._comparator(e._array[t],e._array[n])>0}function WTe(e,t){if(t===0)return;let n=Math.floor(X.log2(t+1))%2===0,i=Math.floor((t-1)/2),o=Y9(e,t,i);for(o!==n&&(k3(e,t,i),t=i);t>=3;){let r=Math.floor((t-3)/4);if(Y9(e,t,r)!==o)break;k3(e,t,r),t=r}}function PTe(e,t){let n=e._length,i=Math.floor(X.log2(t+1))%2===0,o;for(;(o=2*t+1)<n;){let r=o,s=o+1;if(s<n){Y9(e,s,r)===i&&(r=s);let a=2*o+1,c=Math.max(Math.min(n-a,4),0);for(let d=0;d<c;d++){let u=a+d;Y9(e,u,r)===i&&(r=u)}}if(Y9(e,r,t)===i&&(k3(e,r,t),r!==o&&r!==s)){let a=Math.floor((r-1)/2);W8(e,r,a)===i&&k3(e,r,a)}t=r}}var uS=Oh;var qUi=_(T(),1),P8=Object.freeze({UNLOADED:0,RECEIVING:1,PROCESSING:2,LOADED:3,FAILED:4,UNAVAILABLE:5});function z9(e,t){this.spatialNode=e,this.keyframe=t,this.state=P8.UNLOADED,this.content=void 0,this.megatextureIndex=-1,this.priority=-Number.MAX_VALUE,this.highPriorityFrameNumber=-1}z9.prototype.unload=function(){this.content=this.content&&this.content.destroy(),this.spatialNode=void 0,this.state=P8.UNLOADED,this.megatextureIndex=-1,this.priority=-Number.MAX_VALUE,this.highPriorityFrameNumber=-1};z9.priorityComparator=function(e,t){return e.priority-t.priority};z9.searchComparator=function(e,t){return e.keyframe-t.keyframe};z9.LoadState=P8;var bo=z9;var gDi=_(T(),1);function wy(e,t,n,i,o){if(o=Math.min(o??128*1024*1024,536870912),i===Ft.UNSIGNED_SHORT&&(i=Ft.FLOAT32),i===Ft.FLOAT32&&!e.floatingPointTexture)throw new ae("Floating point texture not supported");let s=Agt(i),a=Mgt(n,e.webgl2),c=Ft.getSizeInBytes(i),d=Ngt(o,n,c),u=Math.ceil(Math.sqrt(t.x)),h=Math.ceil(t.z/u),p=u*t.x,g=h*t.y,f=Math.floor(d/p),y=Math.floor(d/g);if(f===0||y===0)throw new ae("Tileset is too large to fit into megatexture");this.channelCount=n,this.componentType=i,this.textureMemoryByteLength=c*n*d**2,this.voxelCountPerTile=m.clone(t,new m),this.maximumTileCount=f*y,this.regionCountPerMegatexture=new U(f,y),this.voxelCountPerRegion=new U(p,g),this.sliceCountPerRegion=new U(u,h),this.voxelSizeUv=new U(1/d,1/d),this.sliceSizeUv=new U(t.x/d,t.y/d),this.regionSizeUv=new U(p/d,g/d),this.texture=new vt({context:e,pixelFormat:a,pixelDatatype:s,flipY:!1,width:d,height:d,sampler:new qt({wrapS:Vn.CLAMP_TO_EDGE,wrapT:Vn.CLAMP_TO_EDGE,minificationFilter:jt.LINEAR,magnificationFilter:hi.LINEAR})});let x=Ft.toComponentDatatype(i);this.tileVoxelDataTemp=Q.createTypedArray(x,p*g*n),this.nodes=new Array(this.maximumTileCount);for(let S=0;S<this.maximumTileCount;S++)this.nodes[S]=new kgt(S);for(let S=0;S<this.maximumTileCount;S++){let C=this.nodes[S];C.previousNode=S>0?this.nodes[S-1]:void 0,C.nextNode=S<this.maximumTileCount-1?this.nodes[S+1]:void 0}this.occupiedList=void 0,this.emptyList=this.nodes[0],this.occupiedCount=0}function Agt(e){if(e===Ft.FLOAT32||e===Ft.FLOAT64)return je.FLOAT;if(e===Ft.UINT8)return je.UNSIGNED_BYTE}function Mgt(e,t){if(e===1)return t?it.RED:it.LUMINANCE;if(e===2)return t?it.RG:it.LUMINANCE_ALPHA;if(e===3)return it.RGB;if(e===4)return it.RGBA}function Ngt(e,t,n){let i=Math.floor(e/(t*n));return Math.min(Nt.maximumTextureSize,X.previousPowerOfTwo(Math.floor(Math.sqrt(i))))}function kgt(e){this.index=e,this.nextNode=void 0,this.previousNode=void 0}wy.prototype.add=function(e){if(this.isFull())throw new pe("Trying to add when there are no empty spots");let t=this.emptyList;this.emptyList=this.emptyList.nextNode,l(this.emptyList)&&(this.emptyList.previousNode=void 0),t.nextNode=this.occupiedList,l(t.nextNode)&&(t.nextNode.previousNode=t),this.occupiedList=t;let n=t.index;return this.writeDataToTexture(n,e),this.occupiedCount++,n};wy.prototype.remove=function(e){if(e<0||e>=this.maximumTileCount)throw new pe("Megatexture index out of bounds");let t=this.nodes[e];l(t.previousNode)&&(t.previousNode.nextNode=t.nextNode),l(t.nextNode)&&(t.nextNode.previousNode=t.previousNode),t.nextNode=this.emptyList,l(t.nextNode)&&(t.nextNode.previousNode=t),t.previousNode=void 0,this.emptyList=t,this.occupiedCount--};wy.prototype.isFull=function(){return this.emptyList===void 0};wy.getApproximateTextureMemoryByteLength=function(e,t,n,i){i===Ft.UNSIGNED_SHORT&&(i=Ft.FLOAT32);let o=Ft.getSizeInBytes(i),r=e*t.x*t.y*t.z,s=Math.ceil(Math.sqrt(t.x)),a=Math.ceil(t.z/s),c=s*t.x,d=a*t.y,u=X.previousPowerOfTwo(Math.floor(Math.sqrt(r)));for(;;){let p=Math.floor(u/c),g=Math.floor(u/d);if(p*g>=e)break;u*=2}return u*u*n*o};wy.prototype.writeDataToTexture=function(e,t){let n=t.constructor===Uint16Array?new Float32Array(t):t,{tileVoxelDataTemp:i,voxelCountPerTile:o,sliceCountPerRegion:r,voxelCountPerRegion:s,channelCount:a,regionCountPerMegatexture:c}=this;for(let g=0;g<o.z;g++){let f=g%r.x*o.x,y=Math.floor(g/r.x)*o.y;for(let x=0;x<o.y;x++){let S=Ugt(o,x,g),C=(y+x)*s.x+f;for(let V=0;V<o.x;V++){let L=S+V,Z=C+V;for(let E=0;E<a;E++)i[Z*a+E]=n[L*a+E]}}}let d=e%c.x*s.x,u=Math.floor(e/c.x)*s.y,p={source:{arrayBufferView:i,width:s.x,height:s.y},xOffset:d,yOffset:u};this.texture.copyFrom(p)};function Ugt(e,t,n){let i=e.y*e.x,o=n,r=t;return o*i+r*e.x}wy.prototype.isDestroyed=function(){return!1};wy.prototype.destroy=function(){return this.texture=this.texture&&this.texture.destroy(),me(this)};var pL=wy;var ZDi=_(T(),1);function _m(e,t,n,i,o,r,s){this.children=void 0,this.parent=o,this.level=e,this.x=t,this.y=n,this.z=i,this.dimensions=m.clone(s),this.keyframeNodes=[],this.renderableKeyframeNodes=[],this.renderableKeyframeNodeLerp=0,this.renderableKeyframeNodePrevious=void 0,this.renderableKeyframeNodeNext=void 0,this.orientedBoundingBox=new En,this.approximateVoxelSize=0,this.screenSpaceError=0,this.visitedFrameNumber=-1,this.computeBoundingVolumes(r)}var Dgt=new m;_m.prototype.computeBoundingVolumes=function(e){this.orientedBoundingBox=e.computeOrientedBoundingBoxForTile(this.level,this.x,this.y,this.z,this.orientedBoundingBox);let t=$.getScale(this.orientedBoundingBox.halfAxes,Dgt),n=2*m.maximumComponent(t);this.approximateVoxelSize=n/m.minimumComponent(this.dimensions)};_m.prototype.constructChildNodes=function(e){let{level:t,x:n,y:i,z:o}=this,r=n*2,s=i*2,a=o*2,c=s+1,d=r+1,u=a+1,h=t+1,p=[[h,r,s,a],[h,d,s,a],[h,r,c,a],[h,d,c,a],[h,r,s,u],[h,d,s,u],[h,r,c,u],[h,d,c,u]];this.children=p.map(([g,f,y,x])=>new _m(g,f,y,x,this,e,this.dimensions))};_m.prototype.visibility=function(e,t){let n=this.orientedBoundingBox;return e.cullingVolume.computeVisibilityWithPlaneMask(n,t)};_m.prototype.computeScreenSpaceError=function(e,t){let n=this.orientedBoundingBox,i=Math.sqrt(n.distanceSquaredTo(e));i=Math.max(i,X.EPSILON7);let o=this.approximateVoxelSize,r=t*(o/i);this.screenSpaceError=r};var vTe={keyframe:0};function H9(e,t){return vTe.keyframe=e,Xo(t,vTe,bo.searchComparator)}_m.prototype.computeSurroundingRenderableKeyframeNodes=function(e){let t=this,n=t.level,i=Math.floor(e),o=Math.ceil(e),r,s,a=+Number.MAX_VALUE,c=+Number.MAX_VALUE;for(;l(t);){let{renderableKeyframeNodes:h}=t;if(h.length>=1){let p=Bgt(i,h),g=h[p],f=o===i||i<g.keyframe?p:Math.min(p+1,h.length-1),y=h[f],x=i-g.keyframe,S=wTe(n-t.level,x);S<a&&(a=S,r=g);let C=y.keyframe-o,V=wTe(n-t.level,C);if(V<c&&(c=V,s=y),x===0&&C===0)break}t=t.parent}if(this.renderableKeyframeNodePrevious=r,this.renderableKeyframeNodeNext=s,!l(r)||!l(s))return;let d=r.keyframe,u=s.keyframe;this.renderableKeyframeNodeLerp=d===u?0:X.clamp((e-d)/(u-d),0,1)};function Bgt(e,t){let n=H9(e,t);return n<0?X.clamp(~n-1,0,t.length-1):n}function wTe(e,t){let n=Math.exp(e*4),i=t>=0?1:-200;return e*n+t*i}_m.prototype.isVisited=function(e){return this.visitedFrameNumber===e};_m.prototype.createKeyframeNode=function(e){let t=H9(e,this.keyframeNodes);if(t<0){t=~t;let n=new bo(this,e);this.keyframeNodes.splice(t,0,n)}};_m.prototype.destroyKeyframeNode=function(e,t){let n=e.keyframe,i=H9(n,this.keyframeNodes);if(i<0)throw new pe("Keyframe node does not exist.");if(this.keyframeNodes.splice(i,1),e.megatextureIndex!==-1){for(let r=0;r<t.length;r++)t[r].remove(e.megatextureIndex);let o=H9(n,this.renderableKeyframeNodes);if(o<0)throw new pe("Renderable keyframe node does not exist.");this.renderableKeyframeNodes.splice(o,1)}e.unload()};_m.prototype.addKeyframeNodeToMegatextures=function(e,t){if(e.megatextureIndex!==-1||e.content.metadata.length!==t.length)throw new pe("Keyframe node cannot be added to megatexture");let{metadata:n}=e.content;for(let r=0;r<t.length;r++){let s=t[r];e.megatextureIndex=s.add(n[r])}let i=this.renderableKeyframeNodes,o=H9(e.keyframe,i);if(o>=0)throw new pe("Keyframe already renderable");o=~o,i.splice(o,0,e)};_m.prototype.isRenderable=function(e){let t=this.renderableKeyframeNodePrevious,n=this.renderableKeyframeNodeNext,i=this.level;return l(t)&&l(n)&&(t.spatialNode.level===i||n.spatialNode.level===i)&&this.visitedFrameNumber===e};var K9=_m;function Fy(e,t,n,i){let{provider:o,dimensions:r,paddingBefore:s,paddingAfter:a}=e,{types:c,componentTypes:d,metadataOrder:u}=o,h=m.add(r,s,new m);if(m.add(h,a,h),u===xm.Y_UP){let V=h.y;h.y=h.z,h.z=V}!l(i)&&l(o.maximumTileCount)&&(i=nyt(o.maximumTileCount,h,c,d)),this._primitive=e,this.textureMemoryByteLength=0,this.megatextures=new Array(c.length);for(let V=0;V<c.length;V++){let L=c[V],Z=ct.getComponentCount(L),E=d[V];this.megatextures[V]=new pL(t,h,Z,E,i),this.textureMemoryByteLength+=this.megatextures[V].textureMemoryByteLength}let p=this.megatextures[0].maximumTileCount;this._simultaneousRequestCount=0,this._debugPrint=!1,this._calculateStatistics=this._primitive._calculateStatistics??!1,this._frameNumber=0;let g=e._shape;this.rootNode=new K9(0,0,0,0,void 0,g,r),this._priorityQueue=new uS({maximumLength:p,comparator:bo.priorityComparator}),this._highPriorityKeyframeNodes=new Array(p),this._highPriorityKeyframeNodeCount=0,this._keyframeNodesInMegatexture=new Array(p),this._keyframeCount=n,this._sampleCount=void 0,this._keyframeLocation=0,this._binaryTreeKeyframeWeighting=new Array(n),this._initialTilesLoaded=!1;let f=this._binaryTreeKeyframeWeighting;f[0]=0,f[n-1]=0,v8(f,1,n-2,0);let y=9,x=2048,S=Math.floor(x/y),C=Math.ceil(p/S);this.internalNodeTexture=new vt({context:t,pixelFormat:it.RGBA,pixelDatatype:je.UNSIGNED_BYTE,flipY:!1,width:x,height:C,sampler:new qt({minificationFilter:jt.NEAREST,magnificationFilter:hi.NEAREST})}),this.internalNodeTilesPerRow=S,this.internalNodeTexelSizeUv=new U(1/x,1/C),this.leafNodeTexture=void 0,this.leafNodeTilesPerRow=void 0,this.leafNodeTexelSizeUv=new U}Fy.prototype.findKeyframeNode=function(e){return this._keyframeNodesInMegatexture.find(function(t){return t.megatextureIndex===e})};function v8(e,t,n,i){if(t>n)return;let o=Math.floor((t+n)/2);e[o]=i,v8(e,t,o-1,i+1),v8(e,o+1,n,i+1)}Fy.simultaneousRequestCountMaximum=50;Fy.prototype.update=function(e,t,n,i){let o=this._primitive,r=e.context,s=this.megatextures[0].maximumTileCount,a=this._keyframeCount,c=o._levelBlendFactor,d=c>0,u=a>1,h=(d?2:1)*(u?2:1);this._sampleCount=h;let p=h>=2;if(p&&!l(this.leafNodeTexture)){let V=Math.floor(512),L=Math.ceil(s/V);this.leafNodeTexture=new vt({context:r,pixelFormat:it.RGBA,pixelDatatype:je.UNSIGNED_BYTE,flipY:!1,width:1024,height:L,sampler:new qt({minificationFilter:jt.NEAREST,magnificationFilter:hi.NEAREST})}),this.leafNodeTexelSizeUv=U.fromElements(1/1024,1/L,this.leafNodeTexelSizeUv),this.leafNodeTilesPerRow=V}else!p&&l(this.leafNodeTexture)&&(this.leafNodeTexture=this.leafNodeTexture.destroy());if(this._keyframeLocation=X.clamp(t,0,a-1),n&&FTe(this,this.rootNode),i)return;this._frameNumber=e.frameNumber;let g=Si();zgt(this,e),Hgt(this,e);let f=Si();qgt(this,h,c);let y=Si(),x=o.loadProgress.numberOfListeners>0||o.allTilesLoaded.numberOfListeners>0||o.initialTilesLoaded.numberOfListeners>0;if(this._debugPrint||this._calculateStatistics||x){let S=f-g,C=y-f,V=y-g;jgt(this,e,S,C,V)}};Fy.prototype.isRenderable=function(e){return e.isRenderable(this._frameNumber)};Fy.prototype.isDestroyed=function(){return!1};Fy.prototype.destroy=function(){let e=this.megatextures,t=e.length;for(let n=0;n<t;n++)e[n]=e[n]&&e[n].destroy();return this.textureMemoryByteLength=0,this.internalNodeTexture=this.internalNodeTexture&&this.internalNodeTexture.destroy(),this.leafNodeTexture=this.leafNodeTexture&&this.leafNodeTexture.destroy(),me(this)};function FTe(e,t){if(t.computeBoundingVolumes(e._primitive._shape),l(t.children))for(let n=0;n<8;n++){let i=t.children[n];FTe(e,i)}}function Ogt(e,t){if(e._simultaneousRequestCount>=Fy.simultaneousRequestCountMaximum)return;let i=e._primitive.provider,{keyframe:o,spatialNode:r}=t;if(l(i.availableLevels)&&r.level>=i.availableLevels)return;function s(u){e._simultaneousRequestCount--,t.content=u,t.state=l(u)?bo.LoadState.PROCESSING:bo.LoadState.UNAVAILABLE}function a(u){e._simultaneousRequestCount--,t.state=bo.LoadState.FAILED,e._primitive.tileFailed.raiseEvent()}let c={tileLevel:r.level,tileX:r.x,tileY:r.y,tileZ:r.z,keyframe:o},d=i.requestData(c);l(d)&&(e._simultaneousRequestCount++,t.state=bo.LoadState.RECEIVING,d.then(s).catch(a))}function Ygt(e){return e/(1+e)}function zgt(e,t){let n=e._frameNumber,i=e._priorityQueue;i.reset(),ATe(e.rootNode,hs.MASK_INDETERMINATE,e,t);let o=e._highPriorityKeyframeNodes,r=0,s;for(;i.length>0;)s=i.removeMaximum(),s.highPriorityFrameNumber=n,o[r]=s,r++;e._highPriorityKeyframeNodeCount=r}function Hgt(e,t){let n=e.megatextures[0],i=n.occupiedCount,o=e._keyframeNodesInMegatexture;o.length=i,o.sort(Kgt);let r=e._highPriorityKeyframeNodes,s=e._highPriorityKeyframeNodeCount,a=0,c=0;for(let d=0;d<s;d++){let u=r[d];if(!(u.state===bo.LoadState.LOADED||u.spatialNode===void 0)&&(u.state===bo.LoadState.UNLOADED&&Ogt(e,u),u.state===bo.LoadState.PROCESSING)){let{content:h}=u;if(h.update(e._primitive,t),!h.ready)continue;if(!Jgt(h.metadata,e)){u.content=void 0,u.state=bo.LoadState.FAILED,e._primitive.tileFailed.raiseEvent();continue}let p=0;if(n.isFull()){p=i-1-a,a++;let g=o[p];e._primitive.tileUnload.raiseEvent(),g.spatialNode.destroyKeyframeNode(g,e.megatextures)}else p=i+c,c++;u.spatialNode.addKeyframeNodeToMegatextures(u,e.megatextures),u.state=bo.LoadState.LOADED,o[p]=u,e._primitive.tileLoad.raiseEvent()}}}function Kgt(e,t){return e.highPriorityFrameNumber===t.highPriorityFrameNumber?t.priority-e.priority:t.highPriorityFrameNumber-e.highPriorityFrameNumber}function Jgt(e,t){let n=t._primitive.provider.types.length;if(!Array.isArray(e)||e.length!==n)return!1;let{megatextures:i}=t;for(let o=0;o<n;o++){let{voxelCountPerTile:r,channelCount:s}=i[o],{x:a,y:c,z:d}=r,u=a*c*d,h=e[o],p=u*s;if(h.length!==p)return!1}return!0}function ATe(e,t,n,i){let{camera:o,context:r,pixelRatio:s,frameNumber:a}=i,{positionWC:c,frustum:d}=o,h=r.drawingBufferHeight/s/d.sseDenominator;if(e.computeScreenSpaceError(c,h),t=e.visibility(i,t),t===hs.MASK_OUTSIDE)return;e.visitedFrameNumber=a;let p=n._primitive,g=p._shape,f=p.screenSpaceError,y=n._priorityQueue,x=n._keyframeCount,S=X.clamp(Math.floor(n._keyframeLocation),0,x-2),C=S+1;if(x===1)e.createKeyframeNode(0);else if(e.keyframeNodes.length!==x)for(let P=0;P<x;P++)e.createKeyframeNode(P);let{screenSpaceError:V,keyframeNodes:L}=e,Z=Ygt(V),E=!1;for(let P=0;P<L.length;P++){let W=L[P];W.priority=10*Z+Qgt(S,W.keyframe,C,n),W.state!==bo.LoadState.UNAVAILABLE&&W.state!==bo.LoadState.FAILED&&W.priority!==-Number.MAX_VALUE&&y.insert(W),W.state===bo.LoadState.LOADED&&(E=!0)}if(V<f||!E){e.children=void 0;return}l(e.children)||e.constructChildNodes(g);for(let P=0;P<8;P++){let W=e.children[P];ATe(W,t,n,i)}}function Qgt(e,t,n,i){let o=Math.min(Math.abs(t-e),Math.abs(t-n)),r=Math.max(e,i._keyframeCount-n-1,1),s=Math.pow(1-o/r,4),a=Math.exp(-i._binaryTreeKeyframeWeighting[t]);return X.lerp(a,s,.15+.85*s)}function jgt(e,t,n,i,o){let r=e._keyframeCount,s=e.rootNode,a=Object.keys(bo.LoadState).length,c=new Array(a),d=new Array(a),u=0;for(let E=0;E<a;E++){let P=new Array(r).fill(0);c[E]=P,d[E]=0}function h(E){let P=E.keyframeNodes;for(let W=0;W<P.length;W++){let v=P[W],A=v.keyframe,b=v.state;c[b][A]+=1,d[b]+=1,u++}if(l(E.children))for(let W=0;W<8;W++){let v=E.children[W];h(v)}}h(s),e._primitive.statistics.numberOfTilesWithContentReady=d[bo.LoadState.LOADED],e._primitive.statistics.visited=u;let p=d[bo.LoadState.RECEIVING],g=d[bo.LoadState.PROCESSING],f=p!==e._primitive.statistics.numberOfPendingRequests||g!==e._primitive.statistics.numberOfTilesProcessing;if(f&&t.afterRender.push(function(){return e._primitive.loadProgress.raiseEvent(p,g),!0}),e._primitive.statistics.numberOfPendingRequests=p,e._primitive.statistics.numberOfTilesProcessing=g,f&&(p===0&&g===0)&&(t.afterRender.push(function(){return e._primitive.allTilesLoaded.raiseEvent(),!0}),e._initialTilesLoaded||(e._initialTilesLoaded=!0,t.afterRender.push(function(){return e._primitive.initialTilesLoaded.raiseEvent(),!0}))),!e._debugPrint)return;let x=`KEYFRAMES: ${c[bo.LoadState.LOADED]}`,S=`UNLOADED: ${d[bo.LoadState.UNLOADED]} | RECEIVING: ${d[bo.LoadState.RECEIVING]} | PROCESSING: ${d[bo.LoadState.PROCESSING]} | LOADED: ${d[bo.LoadState.LOADED]} | FAILED: ${d[bo.LoadState.FAILED]} | UNAVAILABLE: ${d[bo.LoadState.UNAVAILABLE]} | TOTAL: ${u}`,C=Math.round(n*100)/100,V=Math.round(i*100)/100,L=Math.round(o*100)/100,Z=`LOAD: ${C} | OCT: ${V} | ALL: ${L}`;console.log(`${x} || ${S} || ${Z}`)}var U3={INTERNAL:0,LEAF:1,PACKED_LEAF_FROM_PARENT:2};function qgt(e,t,n){let i=e._primitive._screenSpaceError,o=e._keyframeLocation,r=e._frameNumber,s=t>=2,a=0,c=0,d=[],u=[];function h(g,f,y,x,S){let C=!1;if(l(g.children))for(let V=0;V<8;V++){let L=g.children[V];L.computeSurroundingRenderableKeyframeNodes(o),L.isRenderable(r)&&(C=!0)}if(C){d[S]=U3.INTERNAL<<16|f,d[y]=x,a++,x=f,S=x*9+1;for(let V=0;V<8;V++){let L=g.children[V];f=a,y=f*9+0,h(L,f,y,x,S+V)}}else{if(e._primitive.tileVisible.raiseEvent(),s){let V=c*5,L=g.renderableKeyframeNodePrevious,Z=g.level-L.spatialNode.level,E=L.spatialNode.parent,P=l(E)?E.renderableKeyframeNodePrevious:L,W=$gt(g,i,n),v=Z,A=1,b=L.megatextureIndex,R=P.megatextureIndex;u[V+0]=W,u[V+1]=v,u[V+2]=A,u[V+3]=b,u[V+4]=R,d[S]=U3.LEAF<<16|c}else{let V=g.renderableKeyframeNodePrevious,Z=g.level-V.spatialNode.level===0?U3.LEAF:U3.PACKED_LEAF_FROM_PARENT;d[S]=Z<<16|V.megatextureIndex}c++}}let p=e.rootNode;p.computeSurroundingRenderableKeyframeNodes(o),p.isRenderable(r)&&h(p,0,0,0,0),eyt(d,9,e.internalNodeTilesPerRow,e.internalNodeTexture),s&&tyt(u,2,e.leafNodeTilesPerRow,e.leafNodeTexture)}function $gt(e,t,n){if(e.parent===void 0)return 0;let i=e.screenSpaceError,o=e.parent.screenSpaceError,s=((t-i)/(o-i)+n-1)/n;return X.clamp(s,0,1)}function eyt(e,t,n,i){let o=it.componentsLength(i.pixelFormat),r=Math.ceil(e.length/t),s=Math.max(1,t*Math.min(r,n)),a=Math.max(1,Math.ceil(r/n)),c=new Uint8Array(s*a*o);for(let h=0;h<e.length;h++){let p=e[h],g=h*o;for(let f=0;f<o;f++)c[g+f]=p>>>f*8&255}let u={source:{arrayBufferView:c,width:s,height:a},xOffset:0,yOffset:0};i.copyFrom(u)}function tyt(e,t,n,i){let o=it.componentsLength(i.pixelFormat),r=5,s=Math.ceil(e.length/r),a=Math.max(1,t*Math.min(s,n)),c=Math.max(1,Math.ceil(s/n)),d=new Uint8Array(a*c*o);for(let p=0;p<s;p++){let g=e[p*r+0],f=e[p*r+1],y=e[p*r+2],x=e[p*r+3],S=e[p*r+4],C=X.clamp(Math.floor(65536*g),0,65535);d[p*8+0]=C>>>0&255,d[p*8+1]=C>>>8&255,d[p*8+2]=f&255,d[p*8+3]=y&255,d[p*8+4]=x>>>0&255,d[p*8+5]=x>>>8&255,d[p*8+6]=S>>>0&255,d[p*8+7]=S>>>8&255}let h={source:{arrayBufferView:d,width:a,height:c},xOffset:0,yOffset:0};i.copyFrom(h)}function nyt(e,t,n,i){let o=0,r=n.length;for(let s=0;s<r;s++){let a=n[s],c=i[s],d=ct.getComponentCount(a);o+=pL.getApproximateTextureMemoryByteLength(e,t,d,c)}return o}var J9=Fy;function mp(e){e=e??Y.EMPTY_OBJECT,this._ready=!1,this._provider=e.provider??mp.DefaultProvider,this._traversal=void 0,this._statistics=new fh,this._calculateStatistics=e.calculateStatistics??!1,this._shape=void 0,this._shapeVisible=!1,this._dimensions=new m,this._inputDimensions=new m,this._paddingBefore=new m,this._paddingAfter=new m,this._minBounds=new m,this._minBoundsOld=new m,this._maxBounds=new m,this._maxBoundsOld=new m,this._exaggeratedMinBounds=new m,this._exaggeratedMinBoundsOld=new m,this._exaggeratedMaxBounds=new m,this._exaggeratedMaxBoundsOld=new m,this._minClippingBounds=new m,this._minClippingBoundsOld=new m,this._maxClippingBounds=new m,this._maxClippingBoundsOld=new m,this._clippingPlanes=void 0,this._clippingPlanesState=0,this._clippingPlanesEnabled=!1,this._modelMatrix=F.clone(e.modelMatrix??F.IDENTITY),this._exaggeratedModelMatrix=F.clone(this._modelMatrix),this._compoundModelMatrix=new F,this._compoundModelMatrixOld=new F,this._customShader=e.customShader??mp.DefaultCustomShader,this._customShaderCompilationEvent=new be,this._shaderDirty=!0,this._drawCommand=void 0,this._drawCommandPick=void 0,this._pickId=void 0,this._clock=e.clock,this._transformPositionWorldToUv=new F,this._transformPositionUvToWorld=new F,this._transformDirectionWorldToLocal=new $,this._transformNormalLocalToWorld=new $,this._nearestSampling=!1,this._levelBlendFactor=0,this._stepSizeMultiplier=1,this._depthTest=!0,this._useLogDepth=void 0,this._screenSpaceError=4,this._debugPolylines=new lh,this._debugDraw=!1,this._disableRender=!1,this._disableUpdate=!1,this._uniforms={octreeInternalNodeTexture:void 0,octreeInternalNodeTilesPerRow:0,octreeInternalNodeTexelSizeUv:new U,octreeLeafNodeTexture:void 0,octreeLeafNodeTilesPerRow:0,octreeLeafNodeTexelSizeUv:new U,megatextureTextures:[],megatextureSliceDimensions:new U,megatextureTileDimensions:new U,megatextureVoxelSizeUv:new U,megatextureSliceSizeUv:new U,megatextureTileSizeUv:new U,dimensions:new m,inputDimensions:new m,paddingBefore:new m,paddingAfter:new m,transformPositionViewToUv:new F,transformPositionUvToView:new F,transformDirectionViewToLocal:new $,transformNormalLocalToWorld:new $,cameraPositionUv:new m,ndcSpaceAxisAlignedBoundingBox:new se,clippingPlanesTexture:void 0,clippingPlanesMatrix:new F,stepSize:0,pickColor:new D},this._shapeDefinesOld={},this._uniformMap={};let t=this._uniforms,n=this._uniformMap;for(let o in t)if(t.hasOwnProperty(o)){let r=`u_${o}`;n[r]=function(){return t[o]}}this.tileLoad=new be,this.tileVisible=new be,this.tileFailed=new be,this.tileUnload=new be,this.loadProgress=new be,this.allTilesLoaded=new be,this.initialTilesLoaded=new be;let i=this._provider;iyt(this,i)}function iyt(e,t){let{shape:n,minBounds:i=Mi.getMinBounds(n),maxBounds:o=Mi.getMaxBounds(n)}=t;e.minBounds=i,e.maxBounds=o,e.minClippingBounds=Mi.getMinBounds(n),e.maxClippingBounds=Mi.getMaxBounds(n),e._exaggeratedMinBounds=m.clone(e._minBounds,e._exaggeratedMinBounds),e._exaggeratedMaxBounds=m.clone(e._maxBounds,e._exaggeratedMaxBounds),e._exaggeratedModelMatrix=F.clone(e._modelMatrix,e._exaggeratedModelMatrix),NTe(e,t);let r=Mi.getShapeConstructor(n);e._shape=new r,e._shapeVisible=kTe(e,e._shape,t)}Object.defineProperties(mp.prototype,{ready:{get:function(){return this._ready}},provider:{get:function(){return this._provider}},boundingSphere:{get:function(){return this._shape.boundingSphere}},orientedBoundingBox:{get:function(){return this._shape.orientedBoundingBox}},modelMatrix:{get:function(){return this._modelMatrix},set:function(e){this._modelMatrix=F.clone(e,this._modelMatrix)}},shape:{get:function(){return this._provider.shape}},dimensions:{get:function(){return this._dimensions}},inputDimensions:{get:function(){return this._inputDimensions}},paddingBefore:{get:function(){return this._paddingBefore}},paddingAfter:{get:function(){return this._paddingAfter}},minimumValues:{get:function(){return this._provider.minimumValues}},maximumValues:{get:function(){return this._provider.maximumValues}},show:{get:function(){return!this._disableRender},set:function(e){this._disableRender=!e}},disableUpdate:{get:function(){return this._disableUpdate},set:function(e){this._disableUpdate=e}},debugDraw:{get:function(){return this._debugDraw},set:function(e){this._debugDraw=e}},depthTest:{get:function(){return this._depthTest},set:function(e){this._depthTest!==e&&(this._depthTest=e,this._shaderDirty=!0)}},nearestSampling:{get:function(){return this._nearestSampling},set:function(e){this._nearestSampling!==e&&(this._nearestSampling=e,this._shaderDirty=!0)}},levelBlendFactor:{get:function(){return this._levelBlendFactor},set:function(e){this._levelBlendFactor=X.clamp(e,0,1)}},screenSpaceError:{get:function(){return this._screenSpaceError},set:function(e){this._screenSpaceError=e}},stepSize:{get:function(){return this._stepSizeMultiplier},set:function(e){this._stepSizeMultiplier=e}},minBounds:{get:function(){return this._minBounds},set:function(e){this._minBounds=m.clone(e,this._minBounds)}},maxBounds:{get:function(){return this._maxBounds},set:function(e){this._maxBounds=m.clone(e,this._maxBounds)}},minClippingBounds:{get:function(){return this._minClippingBounds},set:function(e){this._minClippingBounds=m.clone(e,this._minClippingBounds)}},maxClippingBounds:{get:function(){return this._maxClippingBounds},set:function(e){this._maxClippingBounds=m.clone(e,this._maxClippingBounds)}},clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){fs.setOwner(e,this,"_clippingPlanes")}},customShader:{get:function(){return this._customShader},set:function(e){if(this._customShader!==e){let t=this._uniformMap,i=this._customShader.uniformMap;for(let o in i)i.hasOwnProperty(o)&&delete t[o];l(e)?this._customShader=e:this._customShader=mp.DefaultCustomShader,this._shaderDirty=!0}}},customShaderCompilationEvent:{get:function(){return this._customShaderCompilationEvent}},statistics:{get:function(){return this._statistics}}});var oyt=new se,ryt=new se,syt=new m,ayt=new m,cyt=new $,lyt=new $,dyt=new F,uyt=new F,myt=new F,hyt=F.fromRotationTranslation($.fromUniformScale(.5,new $),new m(.5,.5,.5),new F),fyt=F.fromRotationTranslation($.fromUniformScale(2,new $),new m(-1,-1,-1),new F);mp.prototype.update=function(e){let t=this._provider;this._customShader.update(e);let n=e.context;if(!this._ready){_yt(this,t,n),e.afterRender.push(()=>(this._ready=!0,!0));return}yyt(this,e);let i=NTe(this,t),o=this._shape;if(i&&(this._shapeVisible=kTe(this,o,t),Syt(this,o)&&(this._shaderDirty=!0)),!this._shapeVisible)return;let r=Cyt(t.timeIntervalCollection,this._clock),s=this._traversal,a=s._sampleCount;if(s.update(e,r,i,this._disableUpdate),a!==s._sampleCount&&(this._shaderDirty=!0),!s.isRenderable(s.rootNode)||(this._debugDraw&&Xyt(this,e),this._disableRender))return;this._useLogDepth!==e.useLogDepth&&(this._useLogDepth=e.useLogDepth,this._shaderDirty=!0),Vyt(this,e)&&(this._shaderDirty=!0);let d=s.leafNodeTexture,u=this._uniforms;l(d)&&(u.octreeLeafNodeTexture=s.leafNodeTexture,u.octreeLeafNodeTexelSizeUv=U.clone(s.leafNodeTexelSizeUv,u.octreeLeafNodeTexelSizeUv),u.octreeLeafNodeTilesPerRow=s.leafNodeTilesPerRow),this._shaderDirty&&(U9(this,n),this._shaderDirty=!1);let h=n.uniformState.viewProjection,p=o.orientedBoundingBox,g=Zyt(p,h,ryt);if(g.x===1||g.y===1||g.z===-1||g.w===-1)return;u.ndcSpaceAxisAlignedBoundingBox=se.clone(g,u.ndcSpaceAxisAlignedBoundingBox);let y=n.uniformState.inverseView;u.transformPositionViewToUv=F.multiplyTransformation(this._transformPositionWorldToUv,y,u.transformPositionViewToUv);let x=n.uniformState.view;u.transformPositionUvToView=F.multiplyTransformation(x,this._transformPositionUvToWorld,u.transformPositionUvToView);let S=n.uniformState.inverseViewRotation;u.transformDirectionViewToLocal=$.multiply(this._transformDirectionWorldToLocal,S,u.transformDirectionViewToLocal),u.transformNormalLocalToWorld=$.clone(this._transformNormalLocalToWorld,u.transformNormalLocalToWorld);let C=e.camera.positionWC;u.cameraPositionUv=F.multiplyByPoint(this._transformPositionWorldToUv,C,u.cameraPositionUv),u.stepSize=this._stepSizeMultiplier;let V=e.passes.pick?this._drawCommandPick:e.passes.pickVoxel?this._drawCommandPickVoxel:this._drawCommand;V.boundingVolume=o.boundingSphere,e.commandList.push(V)};var pyt=new m,w8=new m,byt=new he,gyt=new m;function yyt(e,t){if(e._exaggeratedMinBounds=m.clone(e._minBounds,e._exaggeratedMinBounds),e._exaggeratedMaxBounds=m.clone(e._maxBounds,e._exaggeratedMaxBounds),e.shape===Mi.ELLIPSOID){let n=t.verticalExaggerationRelativeHeight,i=t.verticalExaggeration;e._exaggeratedMinBounds.z=(e._minBounds.z-n)*i+n,e._exaggeratedMaxBounds.z=(e._maxBounds.z-n)*i+n}else{let n=m.fromElements(1,1,t.verticalExaggeration,pyt);e._exaggeratedModelMatrix=F.multiplyByScale(e._modelMatrix,n,e._exaggeratedModelMatrix),e._exaggeratedModelMatrix=F.multiplyByTranslation(e._exaggeratedModelMatrix,xyt(e,t),e._exaggeratedModelMatrix)}}function xyt(e,t){let{shapeTransform:n=F.IDENTITY,globalTransform:i=F.IDENTITY}=e._provider,o=F.getTranslation(n,w8),r=F.multiplyByPoint(e._modelMatrix,o,w8),s=F.multiplyByPoint(i,r,w8),c=ne.WGS84.cartesianToCartographic(s,byt),d=0;l(c)&&(d=c.height);let u=Tr.getHeight(d,t.verticalExaggeration,t.verticalExaggerationRelativeHeight);return m.fromElements(0,0,(u-d)/t.verticalExaggeration,gyt)}function _yt(e,t,n){let i=e._uniforms;e._pickId=n.createPickId({primitive:e}),i.pickColor=D.clone(e._pickId.color,i.pickColor);let{shaderDefines:o,shaderUniforms:r}=e._shape;e._shapeDefinesOld=Ye(o,!0);let s=e._uniformMap;for(let c in r)if(r.hasOwnProperty(c)){let d=`u_${c}`;s[d]=function(){return r[c]}}if(e._dimensions=m.clone(t.dimensions,e._dimensions),i.dimensions=m.clone(e._dimensions,i.dimensions),e._paddingBefore=m.clone(t.paddingBefore??m.ZERO,e._paddingBefore),i.paddingBefore=m.clone(e._paddingBefore,i.paddingBefore),e._paddingAfter=m.clone(t.paddingAfter??m.ZERO,e._paddingAfter),i.paddingAfter=m.clone(e._paddingAfter,i.paddingAfter),e._inputDimensions=m.add(e._dimensions,e._paddingBefore,e._inputDimensions),e._inputDimensions=m.add(e._inputDimensions,e._paddingAfter,e._inputDimensions),t.metadataOrder===xm.Y_UP){let c=e._inputDimensions.y;e._inputDimensions.y=e._inputDimensions.z,e._inputDimensions.z=c}i.inputDimensions=m.clone(e._inputDimensions,i.inputDimensions);let a=t.keyframeCount??1;e._traversal=new J9(e,n,a),e.statistics.texturesByteLength=e._traversal.textureMemoryByteLength,Tyt(e._traversal,i)}function NTe(e,t){let n=t.shapeTransform??F.IDENTITY,i=t.globalTransform??F.IDENTITY;return F.multiplyTransformation(i,e._exaggeratedModelMatrix,e._compoundModelMatrix),F.multiplyTransformation(e._compoundModelMatrix,n,e._compoundModelMatrix),mS(e,"_compoundModelMatrix","_compoundModelMatrixOld")+mS(e,"_minBounds","_minBoundsOld")+mS(e,"_maxBounds","_maxBoundsOld")+mS(e,"_exaggeratedMinBounds","_exaggeratedMinBoundsOld")+mS(e,"_exaggeratedMaxBounds","_exaggeratedMaxBoundsOld")+mS(e,"_minClippingBounds","_minClippingBoundsOld")+mS(e,"_maxClippingBounds","_maxClippingBoundsOld")>0}function mS(e,t,n){let i=e[t],o=e[n],r=!i.equals(o);return r&&i.clone(o),r?1:0}function kTe(e,t,n){if(!t.update(e._compoundModelMatrix,e._exaggeratedMinBounds,e._exaggeratedMaxBounds,e.minClippingBounds,e.maxClippingBounds))return!1;let o=t.shapeTransform,r=F.inverse(o,dyt),s=F.getRotation(o,cyt),a=F.getScale(o,syt),c=m.maximumComponent(a),d=m.divideByScalar(a,c,ayt),u=$.multiplyByScale(s,d,lyt);return e._transformPositionWorldToUv=F.multiplyTransformation(hyt,r,e._transformPositionWorldToUv),e._transformPositionUvToWorld=F.multiplyTransformation(o,fyt,e._transformPositionUvToWorld),e._transformDirectionWorldToLocal=F.getMatrix3(r,e._transformDirectionWorldToLocal),e._transformNormalLocalToWorld=$.inverseTranspose(u,e._transformNormalLocalToWorld),!0}function Tyt(e,t){t.octreeInternalNodeTexture=e.internalNodeTexture,t.octreeInternalNodeTexelSizeUv=U.clone(e.internalNodeTexelSizeUv,t.octreeInternalNodeTexelSizeUv),t.octreeInternalNodeTilesPerRow=e.internalNodeTilesPerRow;let n=e.megatextures,i=n[0],o=n.length;t.megatextureTextures=new Array(o);for(let r=0;r<o;r++)t.megatextureTextures[r]=n[r].texture;t.megatextureSliceDimensions=U.clone(i.sliceCountPerRegion,t.megatextureSliceDimensions),t.megatextureTileDimensions=U.clone(i.regionCountPerMegatexture,t.megatextureTileDimensions),t.megatextureVoxelSizeUv=U.clone(i.voxelSizeUv,t.megatextureVoxelSizeUv),t.megatextureSliceSizeUv=U.clone(i.sliceSizeUv,t.megatextureSliceSizeUv),t.megatextureTileSizeUv=U.clone(i.regionSizeUv,t.megatextureTileSizeUv)}function Syt(e,t){let n=t.shaderDefines,i=Object.keys(n).some(o=>n[o]!==e._shapeDefinesOld[o]);return i&&(e._shapeDefinesOld=Ye(n,!0)),i}function Cyt(e,t){if(!l(e)||!l(t))return 0;let n=t.currentTime,i,o=e.indexOf(n);o>=0?i=e.get(o):(o=~o,o===e.length?(o=e.length-1,i=e.get(o),n=i.stop):(i=e.get(o),n=i.start));let r=q.secondsDifference(i.stop,i.start),a=q.secondsDifference(n,i.start)/r;return o+a}function Vyt(e,t){let n=e.clippingPlanes;if(!l(n))return!1;n.update(t);let{clippingPlanesState:i,enabled:o}=n;if(o){let r=e._uniforms;r.clippingPlanesTexture=n.texture,r.clippingPlanesMatrix=F.transpose(F.multiplyTransformation(F.inverse(n.modelMatrix,r.clippingPlanesMatrix),e._transformPositionUvToWorld,r.clippingPlanesMatrix),r.clippingPlanesMatrix)}return e._clippingPlanesState===i&&e._clippingPlanesEnabled===o?!1:(e._clippingPlanesState=i,e._clippingPlanesEnabled=o,!0)}mp.prototype.isDestroyed=function(){return!1};mp.prototype.destroy=function(){let e=this._drawCommand;l(e)&&(e.shaderProgram=e.shaderProgram&&e.shaderProgram.destroy());let t=this._drawCommandPick;return l(t)&&(t.shaderProgram=t.shaderProgram&&t.shaderProgram.destroy()),this._pickId=this._pickId&&this._pickId.destroy(),this._traversal=this._traversal&&this._traversal.destroy(),this.statistics.texturesByteLength=0,this._clippingPlanes=this._clippingPlanes&&this._clippingPlanes.destroy(),me(this)};var MTe=new Array(new se(-1,-1,-1,1),new se(1,-1,-1,1),new se(-1,1,-1,1),new se(1,1,-1,1),new se(-1,-1,1,1),new se(1,-1,1,1),new se(-1,1,1,1),new se(1,1,1,1)),Lyt=new Array(1,2,4,0,3,5,0,3,6,1,2,7,0,5,6,1,4,7,2,4,7,3,5,6),Ryt=new Array(new se,new se,new se,new se,new se,new se,new se,new se);function Zyt(e,t,n){let i=F.fromRotationTranslation(e.halfAxes,e.center,uyt),o=F.multiply(t,i,myt),r=+Number.MAX_VALUE,s=-Number.MAX_VALUE,a=+Number.MAX_VALUE,c=-Number.MAX_VALUE,d,u=Ryt,h=MTe.length;for(d=0;d<h;d++)F.multiplyByVector(o,MTe[d],u[d]);for(d=0;d<h;d++){let p=u[d];if(p.z>=-p.w){let g=p.x/p.w,f=p.y/p.w;r=Math.min(r,g),s=Math.max(s,g),a=Math.min(a,f),c=Math.max(c,f)}else for(let g=0;g<3;g++){let f=Lyt[d*3+g],y=u[f];if(y.z>=-y.w){let x=p.z+p.w,S=y.z+y.w,C=x/(x-S),V=se.lerp(p,y,C,oyt),L=V.x/V.w,Z=V.y/V.w;r=Math.min(r,L),s=Math.max(s,L),a=Math.min(a,Z),c=Math.max(c,Z)}}}return r=X.clamp(r,-1,1),a=X.clamp(a,-1,1),s=X.clamp(s,-1,1),c=X.clamp(c,-1,1),n=se.fromElements(r,a,s,c,n),n}var F8=3e7,Gyt=new m(F8,0,0),Eyt=new m(0,F8,0),Iyt=new m(0,0,F8);function Xyt(e,t){let n=e._traversal,i=e._debugPolylines;i.removeAll();function o(c,d,u,h){i.add({positions:[c,d],width:h,material:zi.fromType("Color",{color:u})})}function r(c,d,u){let h=c.computeCorners();o(h[0],h[1],d,u),o(h[2],h[3],d,u),o(h[4],h[5],d,u),o(h[6],h[7],d,u),o(h[0],h[2],d,u),o(h[4],h[6],d,u),o(h[1],h[3],d,u),o(h[5],h[7],d,u),o(h[0],h[4],d,u),o(h[2],h[6],d,u),o(h[1],h[5],d,u),o(h[3],h[7],d,u)}function s(c){if(!n.isRenderable(c))return;let d=c.level,h=Math.max(1,5/Math.pow(2,d)),g=[D.RED,D.LIME,D.BLUE][d%3];if(r(c.orientedBoundingBox,g,h),l(c.children))for(let f=0;f<8;f++)s(c.children[f])}r(e._shape.orientedBoundingBox,D.WHITE,5),s(n.rootNode);let a=10;o(m.ZERO,Gyt,D.RED,a),o(m.ZERO,Eyt,D.LIME,a),o(m.ZERO,Iyt,D.BLUE,a),i.update(t)}mp.DefaultCustomShader=new aS({fragmentShaderText:`void fragmentMain(FragmentInput fsInput, inout czm_modelMaterial material) { material.diffuse = vec3(1.0); material.alpha = 1.0; }`});function UTe(){this.ready=!0,this.shape=Mi.BOX,this.dimensions=new m(1,1,1),this.names=["data"],this.types=[ct.SCALAR],this.componentTypes=[Ft.FLOAT32],this.maximumTileCount=1}UTe.prototype.requestData=function(e){if((l(e)?e.tileLevel??0:0)>=1)return;let n=new cS({metadata:[new Float32Array(1)]});return Promise.resolve(n)};mp.DefaultProvider=new UTe;var Ay=mp;var Z3i=_(T(),1);function Wyt(e,t,n,i){if(!l(e)||l(t)&&e.id!==t)return;let r=(e.classes||{})[n];if(!l(r))return;let a=(r.properties||{})[i];if(l(a))return a}var Q9=Wyt;var E3i=_(T(),1);function Pyt(e,t,n,i,o){this.schemaId=e,this.className=t,this.propertyName=n,this.classProperty=i,this.metadataProperty=o}var j9=Pyt;var W3i=_(T(),1);function vyt(e,t,n){if(!l(e))return;let i=e.propertyTextures;for(let o of i)if(o.class.id===t){let a=o.properties[n];if(l(a))return a}}var q9=vyt;var B3=function(e){return function(){e.frameState.afterRender.push(function(){e.requestRender()})}};function li(e){e=e??Y.EMPTY_OBJECT;let t=e.canvas,n=e.creditContainer,i=e.creditViewport,o=Ye(e.contextOptions),r=l(n),s=new oE(t,o);r||(n=document.createElement("div"),n.style.position="absolute",n.style.bottom="0",n.style["text-shadow"]="0 0 2px #000000",n.style.color="#ffffff",n.style["font-size"]="10px",n.style["padding-right"]="5px",t.parentNode.appendChild(n)),l(i)||(i=t.parentNode),this._id=zn(),this._jobScheduler=new RF,this._frameState=new VF(s,new hF(n,"\u2022",i),this._jobScheduler),this._frameState.scene3DOnly=e.scene3DOnly??!1,this._removeCreditContainer=!r,this._creditContainer=n,this._canvas=t,this._context=s,this._computeEngine=new uR(s),this._ellipsoid=e.ellipsoid??ne.default,this._globe=void 0,this._globeTranslucencyState=new LF,this._primitives=new ll,this._groundPrimitives=new ll,this._globeHeight=void 0,this._globeHeightDirty=!0,this._cameraUnderground=!1,this._removeUpdateHeightCallback=void 0,this._logDepthBuffer=li.defaultLogDepthBuffer&&s.fragmentDepth,this._logDepthBufferDirty=!0,this._tweens=new nS,this._shaderFrameCount=0,this._sunPostProcess=void 0,this._computeCommandList=[],this._overlayCommandList=[],this._useOIT=e.orderIndependentTranslucency??!0,this._executeOITFunction=void 0,this._depthPlane=new TF(e.depthPlaneEllipsoidOffset),this._clearColorCommand=new ti({color:new D,stencil:0,owner:this}),this._depthClearCommand=new ti({depth:1,owner:this}),this._stencilClearCommand=new ti({stencil:0}),this._classificationStencilClearCommand=new ti({stencil:0,renderState:Ue.fromCache({stencilMask:Ut.CLASSIFICATION_MASK})}),this._depthOnlyRenderStateCache={},this._transitioner=new f9(this),this._preUpdate=new be,this._postUpdate=new be,this._renderError=new be,this._preRender=new be,this._postRender=new be,this._minimumDisableDepthTestDistance=0,this._debugInspector=new C9,this._msaaSamples=e.msaaSamples??4,this.rethrowRenderErrors=!1,this.completeMorphOnUserInput=!0,this.morphStart=new be,this.morphComplete=new be,this.skyBox=void 0,this.skyAtmosphere=void 0,this.sun=void 0,this.sunBloom=!0,this._sunBloom=void 0,this.moon=void 0,this.backgroundColor=D.clone(D.BLACK),this._mode=oe.SCENE3D,this._mapProjection=l(e.mapProjection)?e.mapProjection:new Ei(this._ellipsoid),this.morphTime=1,this.farToNearRatio=1e3,this.logarithmicDepthFarToNearRatio=1e9,this.nearToFarDistance2D=175e4,this.verticalExaggeration=1,this.verticalExaggerationRelativeHeight=0,this.debugCommandFilter=void 0,this.debugShowCommands=!1,this.debugShowFrustums=!1,this.debugShowFramesPerSecond=!1,this.debugShowDepthFrustum=1,this.debugShowFrustumPlanes=!1,this._debugShowFrustumPlanes=!1,this._debugFrustumPlanes=void 0,this.useDepthPicking=!0,this.pickTranslucentDepth=!1,this.cameraEventWaitTime=500,this.atmosphere=new S_,this.fog=new CF,this.fog.enabled=ne.WGS84.equals(this._ellipsoid),ne.WGS84.equals(this._ellipsoid)||(ro.DEFAULT_VIEW_RECTANGLE=ce.fromDegrees(-45,-45,45,45)),this._shadowMapCamera=new ro(this),this.shadowMap=new y0({context:s,lightCamera:this._shadowMapCamera,enabled:e.shadows??!1}),this.invertClassification=!1,this.invertClassificationColor=D.clone(D.WHITE),this._actualInvertClassificationColor=D.clone(this._invertClassificationColor),this._invertClassification=new sL,this.focalLength=void 0,this.eyeSeparation=void 0,this.postProcessStages=new u9,this._brdfLutGenerator=new aF,this._performanceDisplay=void 0,this._debugVolume=void 0,this._screenSpaceCameraController=new y9(this),this._cameraUnderground=!1,this._mapMode2D=e.mapMode2D??nd.INFINITE_SCROLL,this._environmentState={skyBoxCommand:void 0,skyAtmosphereCommand:void 0,sunDrawCommand:void 0,sunComputeCommand:void 0,moonCommand:void 0,isSunVisible:!1,isMoonVisible:!1,isReadyForAtmosphere:!1,isSkyAtmosphereVisible:!1,clearGlobeDepth:!1,useDepthPlane:!1,renderTranslucentDepthForPick:!1,originalFramebuffer:void 0,useGlobeDepthFramebuffer:!1,useOIT:!1,useInvertClassification:!1,usePostProcess:!1,usePostProcessSelected:!1,useWebVR:!1},this._useWebVR=!1,this._cameraVR=void 0,this._aspectRatioVR=void 0,this.requestRenderMode=e.requestRenderMode??!1,this._renderRequested=!0,this.maximumRenderTimeChange=e.maximumRenderTimeChange??0,this._lastRenderTime=void 0,this._frameRateMonitor=void 0,this._removeRequestListenerCallback=ic.requestCompletedEvent.addEventListener(B3(this)),this._removeTaskProcessorListenerCallback=xi.taskCompletedEvent.addEventListener(B3(this)),this._removeGlobeCallbacks=[],this._removeTerrainProviderReadyListener=void 0;let a=new Ke(0,0,s.drawingBufferWidth,s.drawingBufferHeight),c=new ro(this);this._logDepthBuffer&&(c.frustum.near=.1,c.frustum.far=1e10),this.preloadFlightCamera=new ro(this),this.preloadFlightCullingVolume=void 0,this._picking=new DF(this),this._defaultView=new KT(this,c,a),this._view=this._defaultView,this._hdr=void 0,this._hdrDirty=void 0,this.highDynamicRange=!1,this.gamma=2.2,this.sphericalHarmonicCoefficients=void 0,this.specularEnvironmentMaps=void 0,this._specularEnvironmentCubeMap=void 0,this.light=new Ip,zTe(this,0,q.now()),this.updateFrameState(),this.initializeFrame()}li.defaultLogDepthBuffer=!0;function wyt(e,t){for(let i=0;i<e._removeGlobeCallbacks.length;++i)e._removeGlobeCallbacks[i]();e._removeGlobeCallbacks.length=0;let n=[];l(t)&&(n.push(t.imageryLayersUpdatedEvent.addEventListener(B3(e))),n.push(t.terrainProviderChanged.addEventListener(B3(e)))),e._removeGlobeCallbacks=n}Object.defineProperties(li.prototype,{canvas:{get:function(){return this._canvas}},drawingBufferHeight:{get:function(){return this._context.drawingBufferHeight}},drawingBufferWidth:{get:function(){return this._context.drawingBufferWidth}},maximumAliasedLineWidth:{get:function(){return Nt.maximumAliasedLineWidth}},maximumCubeMapSize:{get:function(){return Nt.maximumCubeMapSize}},pickPositionSupported:{get:function(){return this._context.depthTexture}},sampleHeightSupported:{get:function(){return this._context.depthTexture}},clampToHeightSupported:{get:function(){return this._context.depthTexture}},invertClassificationSupported:{get:function(){return this._context.depthTexture}},specularEnvironmentMapsSupported:{get:function(){return Om.isSupported(this._context)}},ellipsoid:{get:function(){return this._ellipsoid}},globe:{get:function(){return this._globe},set:function(e){this._globe=this._globe&&this._globe.destroy(),this._globe=e,wyt(this,e)}},primitives:{get:function(){return this._primitives}},groundPrimitives:{get:function(){return this._groundPrimitives}},camera:{get:function(){return this._view.camera},set:function(e){this._view.camera=e}},view:{get:function(){return this._view},set:function(e){this._view=e}},defaultView:{get:function(){return this._defaultView}},picking:{get:function(){return this._picking}},screenSpaceCameraController:{get:function(){return this._screenSpaceCameraController}},mapProjection:{get:function(){return this._mapProjection}},jobScheduler:{get:function(){return this._jobScheduler}},frameState:{get:function(){return this._frameState}},environmentState:{get:function(){return this._environmentState}},tweens:{get:function(){return this._tweens}},imageryLayers:{get:function(){if(l(this.globe))return this.globe.imageryLayers}},terrainProvider:{get:function(){if(l(this.globe))return this.globe.terrainProvider},set:function(e){this._removeTerrainProviderReadyListener=this._removeTerrainProviderReadyListener&&this._removeTerrainProviderReadyListener(),l(this.globe)&&(this.globe.terrainProvider=e)}},terrainProviderChanged:{get:function(){if(l(this.globe))return this.globe.terrainProviderChanged}},preUpdate:{get:function(){return this._preUpdate}},postUpdate:{get:function(){return this._postUpdate}},renderError:{get:function(){return this._renderError}},preRender:{get:function(){return this._preRender}},postRender:{get:function(){return this._postRender}},lastRenderTime:{get:function(){return this._lastRenderTime}},context:{get:function(){return this._context}},debugFrustumStatistics:{get:function(){return this._view.debugFrustumStatistics}},scene3DOnly:{get:function(){return this._frameState.scene3DOnly}},orderIndependentTranslucency:{get:function(){return this._useOIT}},id:{get:function(){return this._id}},mode:{get:function(){return this._mode},set:function(e){e===oe.SCENE2D?this.morphTo2D(0):e===oe.SCENE3D?this.morphTo3D(0):e===oe.COLUMBUS_VIEW&&this.morphToColumbusView(0),this._mode=e}},frustumCommandsList:{get:function(){return this._view.frustumCommandsList}},numberOfFrustums:{get:function(){return this._view.frustumCommandsList.length}},useWebVR:{get:function(){return this._useWebVR},set:function(e){this._useWebVR=e,this._useWebVR?(this._frameState.creditDisplay.container.style.visibility="hidden",this._cameraVR=new ro(this),l(this._deviceOrientationCameraController)||(this._deviceOrientationCameraController=new SF(this)),this._aspectRatioVR=this.camera.frustum.aspectRatio):(this._frameState.creditDisplay.container.style.visibility="visible",this._cameraVR=void 0,this._deviceOrientationCameraController=this._deviceOrientationCameraController&&!this._deviceOrientationCameraController.isDestroyed()&&this._deviceOrientationCameraController.destroy(),this.camera.frustum.aspectRatio=this._aspectRatioVR,this.camera.frustum.xOffset=0)}},mapMode2D:{get:function(){return this._mapMode2D}},splitPosition:{get:function(){return this._frameState.splitPosition},set:function(e){this._frameState.splitPosition=e}},minimumDisableDepthTestDistance:{get:function(){return this._minimumDisableDepthTestDistance},set:function(e){this._minimumDisableDepthTestDistance=e}},logarithmicDepthBuffer:{get:function(){return this._logDepthBuffer},set:function(e){e=this._context.fragmentDepth&&e,this._logDepthBuffer!==e&&(this._logDepthBuffer=e,this._logDepthBufferDirty=!0)}},gamma:{get:function(){return this._context.uniformState.gamma},set:function(e){this._context.uniformState.gamma=e}},highDynamicRange:{get:function(){return this._hdr},set:function(e){let t=this._context,n=e&&t.depthTexture&&(t.colorBufferFloat||t.colorBufferHalfFloat);this._hdrDirty=n!==this._hdr,this._hdr=n}},highDynamicRangeSupported:{get:function(){let e=this._context;return e.depthTexture&&(e.colorBufferFloat||e.colorBufferHalfFloat)}},cameraUnderground:{get:function(){return this._cameraUnderground}},msaaSamples:{get:function(){return this._msaaSamples},set:function(e){e=Math.min(e,Nt.maximumSamples),this._msaaSamples=e}},msaaSupported:{get:function(){return this._context.msaa}},pixelRatio:{get:function(){return this._frameState.pixelRatio},set:function(e){this._frameState.pixelRatio=e}},opaqueFrustumNearOffset:{get:function(){return .9999}},globeHeight:{get:function(){return this._globeHeight}}});li.prototype.getCompressedTextureFormatSupported=function(e){let t=this.context;return(e==="WEBGL_compressed_texture_s3tc"||e==="s3tc")&&t.s3tc||(e==="WEBGL_compressed_texture_pvrtc"||e==="pvrtc")&&t.pvrtc||(e==="WEBGL_compressed_texture_etc"||e==="etc")&&t.etc||(e==="WEBGL_compressed_texture_etc1"||e==="etc1")&&t.etc1||(e==="WEBGL_compressed_texture_astc"||e==="astc")&&t.astc||(e==="EXT_texture_compression_bptc"||e==="bc7")&&t.bc7};function Fyt(e,t){let n=e.pickedMetadataInfo,i=t.pickedMetadataInfo;return n?.schemaId!==i?.schemaId||n?.className!==i?.className||n?.propertyName!==i?.propertyName}function DTe(e,t,n){let i=e._frameState,o=e._context,r=e._view.oit,{lightShadowMaps:s,lightShadowsEnabled:a}=i.shadowState,c=t.derivedCommands;l(t.pickId)&&(c.picking=op.createPickDerivedCommand(e,t,o,c.picking)),i.pickingMetadata&&t.pickMetadataAllowed&&(t.pickedMetadataInfo=i.pickedMetadataInfo,l(t.pickedMetadataInfo)&&(c.pickingMetadata=op.createPickMetadataDerivedCommand(e,t,o,c.pickingMetadata))),t.pickOnly||(c.depth=op.createDepthOnlyDerivedCommand(e,t,o,c.depth)),c.originalCommand=t,e._hdr&&(c.hdr=op.createHdrCommand(t,o,c.hdr),t=c.hdr.command,c=t.derivedCommands),a&&t.receiveShadows&&(c.shadows=y0.createReceiveDerivedCommand(s,t,n,o,c.shadows)),t.pass===Ee.TRANSLUCENT&&l(r)&&r.isSupported()&&(a&&t.receiveShadows?(c.oit=l(c.oit)?c.oit:{},c.oit.shadows=r.createDerivedCommands(c.shadows.receiveCommand,o,c.oit.shadows)):c.oit=r.createDerivedCommands(t,o,c.oit))}li.prototype.updateDerivedCommands=function(e){let{derivedCommands:t}=e;if(!l(t))return;let n=this._frameState,{shadowState:i,useLogDepth:o}=this._frameState,r=this._context,s=!1,a=i.lastDirtyTime;e.lastDirtyTime!==a&&(e.lastDirtyTime=a,e.dirty=!0,s=!0);let c=this._hdr,d=l(t.logDepth),u=l(t.hdr),h=l(t.originalCommand),p=o&&!d,g=c&&!u,f=(!o||!c)&&!h,y=n.pickingMetadata&&Fyt(e,n);if(e.dirty=e.dirty||p||g||f||y,!e.dirty)return;e.dirty=!1;let{shadowsEnabled:x,shadowMaps:S}=i;x&&e.castShadows&&(t.shadows=y0.createCastDerivedCommand(S,e,s,r,t.shadows)),(d||p)&&(t.logDepth=op.createLogDepthCommand(e,r,t.logDepth),DTe(this,t.logDepth.command,s)),(h||f)&&DTe(this,e,s)};var Ayt=new pm({pass:wo.RENDER}),A8=new pm({pass:wo.PRELOAD}),M8=new pm({pass:wo.PRELOAD_FLIGHT}),Myt=new pm({pass:wo.REQUEST_RENDER_MODE_DEFER_CHECK}),BTe=new le,N8;function Nyt(e){if(!(e._mode!==oe.SCENE3D||!e.globe?.show||e._cameraUnderground||e._globeTranslucencyState.translucent))return BTe.radius=e.ellipsoid.minimumRadius+e.frameState.minimumTerrainHeight,N8=oF.fromBoundingSphere(BTe,e.camera.positionWC,N8),N8}li.prototype.clearPasses=function(e){e.render=!1,e.pick=!1,e.pickVoxel=!1,e.depth=!1,e.postProcess=!1,e.offscreen=!1};function zTe(e,t,n){let i=e._frameState;i.frameNumber=t,i.time=q.clone(n,i.time)}li.prototype.updateFrameState=function(){let e=this.camera,t=this._frameState;t.commandList.length=0,t.shadowMaps.length=0,t.brdfLutGenerator=this._brdfLutGenerator,t.environmentMap=this.skyBox&&this.skyBox._cubeMap,t.mode=this._mode,t.morphTime=this.morphTime,t.mapProjection=this.mapProjection,t.camera=e,t.cullingVolume=e.frustum.computeCullingVolume(e.positionWC,e.directionWC,e.upWC),t.occluder=Nyt(this),t.minimumTerrainHeight=0,t.minimumDisableDepthTestDistance=this._minimumDisableDepthTestDistance,t.invertClassification=this.invertClassification,t.useLogDepth=this._logDepthBuffer&&!(this.camera.frustum instanceof an||this.camera.frustum instanceof Pr),t.light=this.light,t.cameraUnderground=this._cameraUnderground,t.globeTranslucencyState=this._globeTranslucencyState;let{globe:n}=this;l(n)&&n._terrainExaggerationChanged&&(this.verticalExaggeration=n._terrainExaggeration,this.verticalExaggerationRelativeHeight=n._terrainExaggerationRelativeHeight,n._terrainExaggerationChanged=!1),t.verticalExaggeration=this.verticalExaggeration,t.verticalExaggerationRelativeHeight=this.verticalExaggerationRelativeHeight,l(this._specularEnvironmentCubeMap)&&this._specularEnvironmentCubeMap.ready?(t.specularEnvironmentMaps=this._specularEnvironmentCubeMap.texture,t.specularEnvironmentMapsMaximumLOD=this._specularEnvironmentCubeMap.maximumMipmapLevel):(t.specularEnvironmentMaps=void 0,t.specularEnvironmentMapsMaximumLOD=void 0),t.sphericalHarmonicCoefficients=this.sphericalHarmonicCoefficients,this._actualInvertClassificationColor=D.clone(this.invertClassificationColor,this._actualInvertClassificationColor),sL.isTranslucencySupported(this._context)||(this._actualInvertClassificationColor.alpha=1),t.invertClassificationColor=this._actualInvertClassificationColor,l(this.globe)?t.maximumScreenSpaceError=this.globe.maximumScreenSpaceError:t.maximumScreenSpaceError=2,this.clearPasses(t.passes),t.tilesetPassState=void 0};li.prototype.isVisible=function(e,t,n){if(!l(t))return!1;let{boundingVolume:i}=t;return!l(i)||!t.cull?!0:e.computeVisibility(i)===zt.OUTSIDE?!1:!l(n)||!t.occlude||!i.isOccluded(n)};var D3=new F(0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1);D3=F.inverseTransformation(D3,D3);function kyt(e,t,n,i){let o=t._frameState,r=o.context,s=e.boundingVolume;l(t._debugVolume)&&t._debugVolume.destroy();let a=m.clone(s.center);if(o.mode!==oe.SCENE3D){a=F.multiplyByPoint(D3,a,a);let f=o.mapProjection,y=f.unproject(a);a=f.ellipsoid.cartographicToCartesian(y)}let c,d,{radius:u}=s;l(u)?(c=js.createGeometry(new js({radii:new m(u,u,u),vertexFormat:dn.FLAT_VERTEX_FORMAT})),d=F.fromTranslation(a)):(c=Wa.createGeometry(Wa.fromDimensions({dimensions:new m(2,2,2),vertexFormat:dn.FLAT_VERTEX_FORMAT})),d=F.fromRotationTranslation(s.halfAxes,a,new F)),t._debugVolume=new In({geometryInstances:new Et({geometry:Fn.toWireframe(c),modelMatrix:d,attributes:{color:new Yt(1,0,0,1)}}),appearance:new dn({flat:!0,translucent:!1}),asynchronous:!1});let h=o.commandList,p=o.commandList=[];t._debugVolume.update(o),e=p[0],o.useLogDepth&&(e=op.createLogDepthCommand(e,r).command);let g;l(i)&&(g=n.framebuffer,n.framebuffer=i),e.execute(r,n),l(g)&&(n.framebuffer=g),o.commandList=h}function hp(e,t,n,i){let o=t._frameState,r=t._context;if(l(t.debugCommandFilter)&&!t.debugCommandFilter(e))return;if(e instanceof ti){e.execute(r,n);return}e.debugShowBoundingVolume&&l(e.boundingVolume)&&kyt(e,t,n,i),o.useLogDepth&&l(e.derivedCommands.logDepth)&&(e=e.derivedCommands.logDepth.command);let s=o.passes;if(!s.pick&&!s.pickVoxel&&!s.depth&&t._hdr&&l(e.derivedCommands)&&l(e.derivedCommands.hdr)&&(e=e.derivedCommands.hdr.command),s.pick||s.depth){if(s.pick&&!s.depth){if(o.pickingMetadata&&l(e.derivedCommands.pickingMetadata)){e=e.derivedCommands.pickingMetadata.pickMetadataCommand,e.execute(r,n);return}if(!o.pickingMetadata&&l(e.derivedCommands.picking)){e=e.derivedCommands.picking.pickCommand,e.execute(r,n);return}}else if(l(e.derivedCommands.depth)){e=e.derivedCommands.depth.depthOnlyCommand,e.execute(r,n);return}}if(t.debugShowCommands||t.debugShowFrustums){t._debugInspector.executeDebugShowFrustumsCommand(t,e,n);return}o.shadowState.lightShadowsEnabled&&e.receiveShadows&&l(e.derivedCommands.shadows)?e.derivedCommands.shadows.receiveCommand.execute(r,n):e.execute(r,n)}function OTe(e,t,n){let{derivedCommands:i}=e;if(!l(i))return;let o=t._frameState,r=t._context;o.useLogDepth&&l(i.logDepth)&&(e=i.logDepth.command);let{picking:s,pickingMetadata:a,depth:c}=e.derivedCommands;l(a)&&(e=i.pickingMetadata.pickMetadataCommand,e.execute(r,n)),l(s)?(e=s.pickCommand,e.execute(r,n)):l(c)&&(e=c.depthOnlyCommand,e.execute(r,n))}function HTe(e,t,n){return t.boundingVolume.distanceSquaredTo(n)-e.boundingVolume.distanceSquaredTo(n)}function Uyt(e,t,n){return e.boundingVolume.distanceSquaredTo(n)-t.boundingVolume.distanceSquaredTo(n)+X.EPSILON12}function Dyt(e,t,n,i,o){f0(i,HTe,e.camera.positionWC),l(o)&&t(o.unclassifiedCommand,e,n);for(let r=0;r<i.length;++r)t(i[r],e,n)}function Byt(e,t,n,i,o){f0(i,Uyt,e.camera.positionWC),l(o)&&t(o.unclassifiedCommand,e,n);for(let r=0;r<i.length;++r)t(i[r],e,n)}function Oyt(e,t,n){e.context.uniformState.updatePass(Ee.VOXELS);let i=n.commands[Ee.VOXELS];i.length=n.indices[Ee.VOXELS],f0(i,HTe,e.camera.positionWC);for(let o=0;o<i.length;++o)hp(i[o],e,t)}var Yyt=new Gi,zyt=new bl,Hyt=new an,Kyt=new Pr;function Jyt(e){let{frustum:t}=e;return l(t.fov)?t.clone(Yyt):l(t.infiniteProjectionMatrix)?t.clone(zyt):l(t.width)?t.clone(Hyt):t.clone(Kyt)}function Qyt(e){if(e._environmentState.useOIT){if(!l(e._executeOITFunction)){let{view:t,context:n}=e;e._executeOITFunction=function(i,o,r,s,a){t.globeDepth.prepareColorTextures(n),t.oit.executeCommands(i,o,r,s,a)}}return e._executeOITFunction}return e.frameState.passes.render?Dyt:Byt}function jyt(e,t,n){let{frameState:i,context:o}=e,{pick:r,pickVoxel:s}=i.passes,a=r||s,c;!a&&e._environmentState.useInvertClassification&&i.invertClassificationColor.alpha<1&&(c=e._invertClassification);let d=Qyt(e);o.uniformState.updatePass(Ee.TRANSLUCENT);let u=n.commands[Ee.TRANSLUCENT];u.length=n.indices[Ee.TRANSLUCENT],d(e,hp,t,u,c)}function qyt(e,t,n){let{translucentTileClassification:i,globeDepth:o}=e._view;if(!(n.indices[Ee.CESIUM_3D_TILE_CLASSIFICATION]>0)||!i.isSupported())return;let s=n.commands[Ee.TRANSLUCENT];i.executeTranslucentCommands(e,hp,t,s,o.depthStencilTexture),i.executeClassificationCommands(e,hp,t,n)}function U8(e,t){let{camera:n,context:i,frameState:o}=e,{uniformState:r}=i;r.updateCamera(n);let s=Jyt(n);s.near=n.frustum.near,s.far=n.frustum.far;let a=o.passes,c=a.pick||a.pickVoxel;c||$yt(e,t);let{clearGlobeDepth:d,renderTranslucentDepthForPick:u,useDepthPlane:h,useGlobeDepthFramebuffer:p,useInvertClassification:g,usePostProcessSelected:f}=e._environmentState,{globeDepth:y,globeTranslucencyFramebuffer:x,sceneFramebuffer:S,frustumCommandsList:C}=e._view,V=C.length,L=e._globeTranslucencyState,Z=e._depthClearCommand,E=e._stencilClearCommand,P=e._classificationStencilClearCommand,W=e._depthPlane,v=n.position.z;function A(R,G){r.updatePass(G);let I=R.commands[G],w=R.indices[G];for(let M=0;M<w;++M)hp(I[M],e,t);return w}function b(R,G){r.updatePass(G);let I=R.commands[G],w=R.indices[G];for(let M=0;M<w;++M)OTe(I[M],e,t)}for(let R=0;R<V;++R){let G=V-R-1,I=C[G];e.mode===oe.SCENE2D?(n.position.z=v-I.near+1,s.far=Math.max(1,I.far-I.near),s.near=1,r.update(o),r.updateFrustum(s)):(s.near=G!==0?I.near*e.opaqueFrustumNearOffset:I.near,s.far=I.far,r.updateFrustum(s)),Z.execute(i,t),i.stencilBuffer&&E.execute(i,t),L.translucent?(r.updatePass(Ee.GLOBE),L.executeGlobeCommands(I,hp,x,e,t)):A(I,Ee.GLOBE),p&&y.executeCopyDepth(i,t),u||(L.translucent?(r.updatePass(Ee.TERRAIN_CLASSIFICATION),L.executeGlobeClassificationCommands(I,hp,x,e,t)):A(I,Ee.TERRAIN_CLASSIFICATION)),d&&(Z.execute(i,t),h&&W.execute(i,t));let w;if(!g||c||u)w=A(I,Ee.CESIUM_3D_TILE),w>0&&(p&&(y.prepareColorTextures(i,d),y.executeUpdateDepth(i,t,y.depthStencilTexture)),u||(w=A(I,Ee.CESIUM_3D_TILE_CLASSIFICATION)));else{e._invertClassification.clear(i,t);let B=t.framebuffer;t.framebuffer=e._invertClassification._fbo.framebuffer,w=A(I,Ee.CESIUM_3D_TILE),p&&(e._invertClassification.prepareTextures(i),y.executeUpdateDepth(i,t,e._invertClassification._fbo.getDepthStencilTexture())),w=A(I,Ee.CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW),t.framebuffer=B,e._invertClassification.executeClassified(i,t),o.invertClassificationColor.alpha===1&&e._invertClassification.executeUnclassified(i,t),w>0&&i.stencilBuffer&&P.execute(i,t),w=A(I,Ee.CESIUM_3D_TILE_CLASSIFICATION)}if(w>0&&i.stencilBuffer&&E.execute(i,t),Oyt(e,t,I),A(I,Ee.OPAQUE),G!==0&&e.mode!==oe.SCENE2D&&(s.near=I.near,r.updateFrustum(s)),jyt(e,t,I),qyt(e,t,I),i.depthTexture&&e.useDepthPicking&&(p||u)){let B=e._picking.getPickDepth(e,G);B.update(i,y.depthStencilTexture),B.executeCopyDepth(i,t)}if(c||!f)continue;let M=t.framebuffer;t.framebuffer=S.getIdFramebuffer(),s.near=G!==0?I.near*e.opaqueFrustumNearOffset:I.near,s.far=I.far,r.updateFrustum(s),L.translucent?(r.updatePass(Ee.GLOBE),L.executeGlobeCommands(I,OTe,x,e,t)):b(I,Ee.GLOBE),d&&(Z.framebuffer=t.framebuffer,Z.execute(i,t),Z.framebuffer=void 0),d&&h&&W.execute(i,t),b(I,Ee.CESIUM_3D_TILE),b(I,Ee.OPAQUE),b(I,Ee.TRANSLUCENT),t.framebuffer=M}}function $yt(e,t){let{context:n,environmentState:i,view:o}=e;if(n.uniformState.updatePass(Ee.ENVIRONMENT),l(i.skyBoxCommand)&&hp(i.skyBoxCommand,e,t),i.isSkyAtmosphereVisible&&hp(i.skyAtmosphereCommand,e,t),i.isSunVisible&&(i.sunDrawCommand.execute(n,t),e.sunBloom&&!i.useWebVR)){let r;i.useGlobeDepthFramebuffer?r=o.globeDepth.framebuffer:i.usePostProcess?r=o.sceneFramebuffer.framebuffer:r=i.originalFramebuffer,e._sunPostProcess.execute(n),e._sunPostProcess.copy(n,r),t.framebuffer=r}i.isMoonVisible&&i.moonCommand.execute(n,t)}function KTe(e){e.context.uniformState.updatePass(Ee.COMPUTE);let t=e._environmentState.sunComputeCommand;l(t)&&t.execute(e._computeEngine);let n=e._computeCommandList;for(let i=0;i<n.length;++i)n[i].execute(e._computeEngine)}function ext(e,t){e.context.uniformState.updatePass(Ee.OVERLAY);let n=e.context,i=e._overlayCommandList;for(let o=0;o<i.length;++o)i[o].execute(n,t)}function txt(e,t,n){let{shadowMapCullingVolume:i,isPointLight:o,passes:r}=n,s=r.length,a=[Ee.GLOBE,Ee.CESIUM_3D_TILE,Ee.OPAQUE,Ee.TRANSLUCENT];for(let c=0;c<t.length;++c){let d=t[c];if(e.updateDerivedCommands(d),!(!d.castShadows||a.indexOf(d.pass)<0||!e.isVisible(i,d)))if(o)for(let u=0;u<s;++u)r[u].commandList.push(d);else if(s===1)r[0].commandList.push(d);else{let u=!1;for(let h=s-1;h>=0;--h){let p=r[h].cullingVolume;if(e.isVisible(p,d))r[h].commandList.push(d),u=!0;else if(u)break}}}}function JTe(e){let{shadowState:t,commandList:n}=e.frameState,{shadowsEnabled:i,shadowMaps:o}=t;if(!i)return;let{context:r}=e,{uniformState:s}=r;for(let a=0;a<o.length;++a){let c=o[a];if(c.outOfView)continue;let{passes:d}=c;for(let u=0;u<d.length;++u)d[u].commandList.length=0;txt(e,n,c);for(let u=0;u<d.length;++u){let h=c.passes[u],{camera:p,commandList:g}=h;s.updateCamera(p),c.updatePass(r,u);for(let f=0;f<g.length;++f){let y=g[f];s.updatePass(y.pass);let x=y.derivedCommands.shadows.castCommands[a];hp(x,e,h.passState)}}}}var nxt=new m;li.prototype.updateAndExecuteCommands=function(e,t){pxt(this,e,t),this._environmentState.useWebVR?ixt(this,e,t):this._frameState.mode!==oe.SCENE2D||this._mapMode2D===nd.ROTATE?My(!0,this,e):mxt(this,e)};function ixt(e,t){let n=e._view,i=n.camera,r=e._environmentState.renderTranslucentDepthForPick;QTe(e),n.createPotentiallyVisibleSet(e),KTe(e),r||JTe(e);let s=t.viewport;s.x=0,s.y=0,s.width=s.width*.5;let a=ro.clone(i,e._cameraVR);a.frustum=i.frustum;let c=i.frustum.near,d=c*(e.focalLength??5),u=e.eyeSeparation??d/30,h=m.multiplyByScalar(a.right,u*.5,nxt);i.frustum.aspectRatio=s.width/s.height;let p=.5*u*c/d;m.add(a.position,h,i.position),i.frustum.xOffset=p,U8(e,t),s.x=s.width,m.subtract(a.position,h,i.position),i.frustum.xOffset=-p,U8(e,t),ro.clone(a,i)}var oxt=new he(Math.PI,X.PI_OVER_TWO),rxt=new m,sxt=new m,axt=new F,cxt=new F,lxt=new m,dxt=new m,uxt=new Ke;function mxt(e,t){let{frameState:n,camera:i}=e,{uniformState:o}=e.context,r=t.viewport,s=Ke.clone(r,uxt);t.viewport=s;let a=oxt,c=rxt;e.mapProjection.project(a,c);let u=m.clone(i.position,sxt),h=F.clone(i.transform,cxt),p=i.frustum.clone();i._setTransform(F.IDENTITY);let g=F.computeViewportTransformation(s,0,1,axt),f=i.frustum.projectionMatrix,y=i.positionWC.y,x=m.fromElements(X.sign(y)*c.x-y,0,-i.positionWC.x,lxt),S=Pt.pointToGLWindowCoordinates(f,g,x,dxt);S.x=Math.floor(S.x);let C=s.x,V=s.width;if(y===0||S.x<=C||S.x>=C+V)My(!0,e,t);else if(Math.abs(C+V*.5-S.x)<1)s.width=S.x-s.x,i.position.x*=X.sign(i.position.x),i.frustum.right=0,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),My(!0,e,t),s.x=S.x,i.position.x=-i.position.x,i.frustum.right=-i.frustum.left,i.frustum.left=0,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),My(!1,e,t);else if(S.x>C+V*.5){s.width=S.x-C;let L=i.frustum.right;i.frustum.right=c.x-y,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),My(!0,e,t),s.x=S.x,s.width=C+V-S.x,i.position.x=-i.position.x,i.frustum.left=-i.frustum.right,i.frustum.right=L-i.frustum.right*2,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),My(!1,e,t)}else{s.x=S.x,s.width=C+V-S.x;let L=i.frustum.left;i.frustum.left=-c.x-y,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),My(!0,e,t),s.x=C,s.width=S.x-C,i.position.x=-i.position.x,i.frustum.right=-i.frustum.left,i.frustum.left=L-i.frustum.left*2,n.cullingVolume=i.frustum.computeCullingVolume(i.positionWC,i.directionWC,i.upWC),o.update(n),My(!1,e,t)}i._setTransform(h),m.clone(u,i.position),i.frustum=p.clone(),t.viewport=r}function My(e,t,n){let i=t._view,{renderTranslucentDepthForPick:o}=t._environmentState;e||(t.frameState.commandList.length=0),QTe(t),i.createPotentiallyVisibleSet(t),e&&(KTe(t),o||JTe(t)),U8(t,n)}var YTe=new hs;li.prototype.updateEnvironment=function(){let e=this._frameState,t=this._view,n=this._environmentState,i=e.passes.render,o=e.passes.offscreen,r=this.atmosphere,s=this.skyAtmosphere,a=this.globe,c=this._globeTranslucencyState;if(!i||this._mode!==oe.SCENE2D&&t.camera.frustum instanceof an||!c.environmentVisible)n.skyAtmosphereCommand=void 0,n.skyBoxCommand=void 0,n.sunDrawCommand=void 0,n.sunComputeCommand=void 0,n.moonCommand=void 0;else{if(l(s)){if(l(a))s.setDynamicLighting(rb.fromGlobeFlags(a)),n.isReadyForAtmosphere=n.isReadyForAtmosphere||!a.show||a._surface._tilesToRender.length>0;else{let S=r.dynamicLighting;s.setDynamicLighting(S),n.isReadyForAtmosphere=!0}n.skyAtmosphereCommand=s.update(e,a),l(n.skyAtmosphereCommand)&&this.updateDerivedCommands(n.skyAtmosphereCommand)}else n.skyAtmosphereCommand=void 0;n.skyBoxCommand=l(this.skyBox)?this.skyBox.update(e,this._hdr):void 0;let x=l(this.sun)?this.sun.update(e,t.passState,this._hdr):void 0;n.sunDrawCommand=l(x)?x.drawCommand:void 0,n.sunComputeCommand=l(x)?x.computeCommand:void 0,n.moonCommand=l(this.moon)?this.moon.update(e):void 0}let d=n.clearGlobeDepth=l(a)&&a.show&&(!a.depthTestAgainstTerrain||this.mode===oe.SCENE2D);(n.useDepthPlane=d&&this.mode===oe.SCENE3D&&c.useDepthPlane)&&this._depthPlane.update(e),n.renderTranslucentDepthForPick=!1,n.useWebVR=this._useWebVR&&this.mode!==oe.SCENE2D&&!o;let h=e.mode===oe.SCENE3D&&!c.sunVisibleThroughGlobe?e.occluder:void 0,p=e.cullingVolume,g=YTe.planes;for(let x=0;x<5;++x)g[x]=p.planes[x];p=YTe,n.isSkyAtmosphereVisible=l(n.skyAtmosphereCommand)&&n.isReadyForAtmosphere,n.isSunVisible=this.isVisible(p,n.sunDrawCommand,h),n.isMoonVisible=this.isVisible(p,n.moonCommand,h);let f=this.specularEnvironmentMaps,y=this._specularEnvironmentCubeMap;l(f)&&y?.url!==f?(y=y&&y.destroy(),this._specularEnvironmentCubeMap=new Om(f)):!l(f)&&l(y)&&(y.destroy(),this._specularEnvironmentCubeMap=void 0),l(this._specularEnvironmentCubeMap)&&this._specularEnvironmentCubeMap.update(e)};function hxt(e){let t=e._frameState;e.debugShowFrustumPlanes!==e._debugShowFrustumPlanes&&(e.debugShowFrustumPlanes?e._debugFrustumPlanes=new ip({camera:e.camera,updateOnChange:!1,frustumSplits:t.frustumSplits}):e._debugFrustumPlanes=e._debugFrustumPlanes&&e._debugFrustumPlanes.destroy(),e._debugShowFrustumPlanes=e.debugShowFrustumPlanes),l(e._debugFrustumPlanes)&&e._debugFrustumPlanes.update(t)}function fxt(e){let t=e._frameState,{passes:n,shadowState:i,shadowMaps:o}=t,r=o.length,s=r>0&&!n.pick&&!n.pickVoxel&&e.mode===oe.SCENE3D;if(s!==i.shadowsEnabled&&(++i.lastDirtyTime,i.shadowsEnabled=s),i.lightShadowsEnabled=!1,!!s){for(let a=0;a<r;++a)if(o[a]!==i.shadowMaps[a]){++i.lastDirtyTime;break}i.shadowMaps.length=0,i.lightShadowMaps.length=0;for(let a=0;a<r;++a){let c=o[a];c.update(t),i.shadowMaps.push(c),c.fromLightSource&&(i.lightShadowMaps.push(c),i.lightShadowsEnabled=!0),c.dirty&&(++i.lastDirtyTime,c.dirty=!1)}}}function QTe(e){let t=e._frameState;e._groundPrimitives.update(t),e._primitives.update(t),hxt(e),fxt(e),e._globe&&e._globe.render(t)}function pxt(e,t,n){let i=e._context,o=e._frameState,r=e._environmentState,s=e._view,a=o.passes,c=a.pick||a.pickVoxel;l(s.globeDepth)&&(s.globeDepth.picking=c);let d=r.useWebVR;r.originalFramebuffer=t.framebuffer,l(e.sun)&&e.sunBloom!==e._sunBloom?(e.sunBloom&&!d?e._sunPostProcess=new T9:l(e._sunPostProcess)&&(e._sunPostProcess=e._sunPostProcess.destroy()),e._sunBloom=e.sunBloom):!l(e.sun)&&l(e._sunPostProcess)&&(e._sunPostProcess=e._sunPostProcess.destroy(),e._sunBloom=!1);let u=e._clearColorCommand;D.clone(n,u.color),u.execute(i,t);let h=r.useGlobeDepthFramebuffer=l(s.globeDepth);h&&(s.globeDepth.update(i,t,s.viewport,e.msaaSamples,e._hdr,r.clearGlobeDepth),s.globeDepth.clear(i,t,n));let p=s.oit,g=r.useOIT=!c&&l(p)&&p.isSupported();g&&(p.update(i,t,s.globeDepth.colorFramebufferManager,e._hdr,e.msaaSamples),p.clear(i,t,n),r.useOIT=p.isSupported());let f=e.postProcessStages,y=r.usePostProcess=!c&&(e._hdr||f.length>0||f.ambientOcclusion.enabled||f.fxaa.enabled||f.bloom.enabled);if(r.usePostProcessSelected=!1,y&&(s.sceneFramebuffer.update(i,s.viewport,e._hdr,e.msaaSamples),s.sceneFramebuffer.clear(i,t,n),f.update(i,o.useLogDepth,e._hdr),f.clear(i),y=r.usePostProcess=f.ready,r.usePostProcessSelected=y&&f.hasSelected),r.isSunVisible&&e.sunBloom&&!d?(t.framebuffer=e._sunPostProcess.update(t),e._sunPostProcess.clear(i,t,n)):h?t.framebuffer=s.globeDepth.framebuffer:y&&(t.framebuffer=s.sceneFramebuffer.framebuffer),l(t.framebuffer)&&u.execute(i,t),r.useInvertClassification=!c&&l(t.framebuffer)&&e.invertClassification){let S;if(o.invertClassificationColor.alpha===1&&h&&(S=s.globeDepth.framebuffer),l(S)||i.depthTexture){if(e._invertClassification.previousFramebuffer=S,e._invertClassification.update(i,e.msaaSamples,s.globeDepth.colorFramebufferManager),e._invertClassification.clear(i,t),o.invertClassificationColor.alpha<1&&g){let C=e._invertClassification.unclassifiedCommand,V=C.derivedCommands;V.oit=p.createDerivedCommands(C,i,V.oit)}}else r.useInvertClassification=!1}e._globeTranslucencyState.translucent&&s.globeTranslucencyFramebuffer.updateAndClear(e._hdr,s.viewport,i,t)}li.prototype.resolveFramebuffers=function(e){let t=this._context,n=this._environmentState,i=this._view,{globeDepth:o,translucentTileClassification:r}=i;l(o)&&o.prepareColorTextures(t);let{useOIT:s,useGlobeDepthFramebuffer:a,usePostProcess:c,originalFramebuffer:d}=n,u=a?o.colorFramebufferManager:void 0,h=i.sceneFramebuffer._colorFramebuffer,p=i.sceneFramebuffer.idFramebuffer;if(s&&(e.framebuffer=c?h.framebuffer:d,i.oit.execute(t,e)),r.hasTranslucentDepth&&r.isSupported()&&r.execute(this,e),c){i.sceneFramebuffer.prepareColorTextures(t);let g=h;a&&!s&&(g=u);let f=this.postProcessStages,y=g.getColorTexture(0),x=p.getColorTexture(0),S=(u??h).getDepthStencilTexture();f.execute(t,y,S,x),f.copy(t,d)}!s&&!c&&a&&(e.framebuffer=d,o.executeCopyColor(t,e))};function bxt(e){let t=e._frameState.afterRender;for(let n=0;n<t.length;++n)t[n]()&&e.requestRender();t.length=0}function gxt(e){if(e.mode===oe.MORPHING)return;let t=e.camera.positionCartographic;return e.getHeight(t)}function jTe(e,t,n){let i=Number.NEGATIVE_INFINITY;if(e instanceof ll){let o=e.length;for(let r=0;r<o;++r){let s=e.get(r),a=jTe(s,t,n);l(a)&&a>i&&(i=a)}}else if(e.isCesium3DTileset&&e.show&&e.enableCollision){let o=e.getHeight(t,n);if(l(o)&&o>i)return o}return i}li.prototype.getHeight=function(e,t){if(!l(e))return;let n=t===Je.CLAMP_TO_TERRAIN||t===Je.RELATIVE_TO_TERRAIN,i=t===Je.CLAMP_TO_3D_TILE||t===Je.RELATIVE_TO_3D_TILE;if(!l(e))return;let o=Number.NEGATIVE_INFINITY;if(!n){let s=jTe(this.primitives,e,this);l(s)&&s>o&&(o=s)}let r=this._globe;if(!i&&l(r)&&r.show){let s=r.getHeight(e);s>o&&(o=s)}if(o>Number.NEGATIVE_INFINITY)return o};var k8=new he;li.prototype.updateHeight=function(e,t,n){let i=this._ellipsoid,o=g=>{he.clone(e,k8);let f;l(g)&&(f=g.height),l(f)||(f=this.getHeight(e,n)),l(f)&&(k8.height=f,t(k8))},r=n===Je.CLAMP_TO_TERRAIN||n===Je.RELATIVE_TO_TERRAIN,s=n===Je.CLAMP_TO_3D_TILE||n===Je.RELATIVE_TO_3D_TILE,a;!s&&l(this.globe)&&(a=this.globe._surface.updateHeight(e,o));let c={},d=g=>{if(r||g.isDestroyed()||!g.isCesium3DTileset)return;let f=g.updateHeight(e,o,i);c[g.id]=f};if(!r){let g=this.primitives.length;for(let f=0;f<g;++f){let y=this.primitives.get(f);d(y)}}let u=this.primitives.primitiveAdded.addEventListener(d),h=this.primitives.primitiveRemoved.addEventListener(g=>{g.isDestroyed()||!g.isCesium3DTileset||(l(c[g.id])&&c[g.id](),delete c[g.id])});return()=>{a=a&&a(),Object.values(c).forEach(g=>g()),c={},u(),h()}};function yxt(e){let t=e.camera,n=e._mode,i=e._screenSpaceCameraController,o=t.positionCartographic;if(!l(o))return!1;if(!i.onMap()&&o.height<0)return!0;if(n===oe.SCENE2D||n===oe.MORPHING)return!1;let r=e._globeHeight;return l(r)&&o.height<r}li.prototype.initializeFrame=function(){if(this._shaderFrameCount++===120&&(this._shaderFrameCount=0,this._context.shaderCache.destroyReleasedShaderPrograms(),this._context.textureCache.destroyReleasedTextures()),this._tweens.update(),this._globeHeightDirty){l(this._removeUpdateHeightCallback)&&(this._removeUpdateHeightCallback(),this._removeUpdateHeightCallback=void 0),this._globeHeight=gxt(this),this._globeHeightDirty=!1;let e=this.camera.positionCartographic;this._removeUpdateHeightCallback=this.updateHeight(e,t=>{this.isDestroyed()||(this._globeHeight=t.height)})}this._cameraUnderground=yxt(this),this._globeTranslucencyState.update(this),this._screenSpaceCameraController.update(),l(this._deviceOrientationCameraController)&&this._deviceOrientationCameraController.update(),this.camera.update(this._mode),this.camera._updateCameraChanged()};function xxt(e,t){if(e.debugShowFramesPerSecond){if(!l(e._performanceDisplay)){let n=document.createElement("div");n.className="cesium-performanceDisplay-defaultContainer",e._canvas.parentNode.appendChild(n);let o=new p0({container:n});e._performanceDisplay=o,e._performanceContainer=n}e._performanceDisplay.throttled=e.requestRenderMode,e._performanceDisplay.update(t)}else l(e._performanceDisplay)&&(e._performanceDisplay=e._performanceDisplay&&e._performanceDisplay.destroy(),e._performanceContainer.parentNode.removeChild(e._performanceContainer))}function _xt(e){e._jobScheduler.resetBudgets();let t=e._frameState;e.primitives.prePassesUpdate(t),l(e.globe)&&e.globe.update(t),e._picking.update(),t.creditDisplay.update()}function Txt(e){e.primitives.postPassesUpdate(e._frameState),ic.update()}var Sxt=new D;function Cxt(e){let t=e._frameState,n=e.context,{uniformState:i}=n,o=e._defaultView;e._view=o,e.updateFrameState(),t.passes.render=!0,t.passes.postProcess=e.postProcessStages.hasSelected,t.tilesetPassState=Ayt;let r=e.backgroundColor??D.BLACK;e._hdr&&(r=D.clone(r,Sxt),r.red=Math.pow(r.red,e.gamma),r.green=Math.pow(r.green,e.gamma),r.blue=Math.pow(r.blue,e.gamma)),t.backgroundColor=r,t.atmosphere=e.atmosphere,e.fog.update(t),i.update(t);let s=e.shadowMap;l(s)&&s.enabled&&(!l(e.light)||e.light instanceof Ip?m.negate(i.sunDirectionWC,e._shadowMapCamera.direction):m.clone(e.light.direction,e._shadowMapCamera.direction),t.shadowMaps.push(s)),e._computeCommandList.length=0,e._overlayCommandList.length=0;let a=o.viewport;a.x=0,a.y=0,a.width=n.drawingBufferWidth,a.height=n.drawingBufferHeight;let c=o.passState;c.framebuffer=void 0,c.blendingEnabled=void 0,c.scissorTest=void 0,c.viewport=Ke.clone(a,c.viewport),l(e.globe)&&e.globe.beginFrame(t),e.updateEnvironment(),e.updateAndExecuteCommands(c,r),e.resolveFramebuffers(c),c.framebuffer=void 0,ext(e,c),l(e.globe)&&(e.globe.endFrame(t),e.globe.tilesLoaded||(e._renderRequested=!0)),n.endFrame()}function hS(e,t){try{t(e)}catch(n){if(e._renderError.raiseEvent(e,n),e.rethrowRenderErrors)throw n}}function Vxt(e){return e._picking.updateMostDetailedRayPicks(e)}li.prototype.render=function(e){this._preUpdate.raiseEvent(this,e);let t=this._frameState;t.newFrame=!1,l(e)||(e=q.now());let n=this._view.checkForCameraUpdates(this);n&&(this._globeHeightDirty=!0);let i=!this.requestRenderMode||this._renderRequested||n||this._logDepthBufferDirty||this._hdrDirty||this.mode===oe.MORPHING;if(!i&&l(this.maximumRenderTimeChange)&&l(this._lastRenderTime)){let o=Math.abs(q.secondsDifference(this._lastRenderTime,e));i=i||o>this.maximumRenderTimeChange}if(i){this._lastRenderTime=q.clone(e,this._lastRenderTime),this._renderRequested=!1,this._logDepthBufferDirty=!1,this._hdrDirty=!1;let o=X.incrementWrap(t.frameNumber,15e6,1);zTe(this,o,e),t.newFrame=!0}hS(this,_xt),this.primitives.show&&(hS(this,Vxt),hS(this,Lxt),hS(this,Rxt),i||hS(this,Zxt)),this._postUpdate.raiseEvent(this,e),i&&(this._preRender.raiseEvent(this,e),t.creditDisplay.beginFrame(),hS(this,Cxt)),xxt(this,i),hS(this,Txt),bxt(this),i&&(this._postRender.raiseEvent(this,e),t.creditDisplay.endFrame())};li.prototype.forceRender=function(e){this._renderRequested=!0,this.render(e)};li.prototype.requestRender=function(){this._renderRequested=!0};li.prototype.clampLineWidth=function(e){return Math.max(Nt.minimumAliasedLineWidth,Math.min(e,Nt.maximumAliasedLineWidth))};li.prototype.pick=function(e,t,n){return this._picking.pick(this,e,t,n)};li.prototype.pickVoxel=function(e,t,n){let i=this.pick(e,t,n);if(!l(i))return;let o=i.primitive;if(!(o instanceof Ay))return;let r=this._picking.pickVoxelCoordinate(this,e,t,n),s=255*r[0]+r[1],a=o._traversal.findKeyframeNode(s);if(!l(a))return;let c=255*r[2]+r[3];return V9.fromKeyframeNode(o,s,c,a)};li.prototype.pickMetadata=function(e,t,n,i){let o=this.pick(e);if(!l(o))return;let r=o.detail?.model?.structuralMetadata;if(!l(r))return;let s=r.schema,a=Q9(s,t,n,i);if(!l(a))return;let c=q9(r,n,i);if(!l(c))return;let d=new j9(t,n,i,a,c);return this._picking.pickMetadata(this,e,d)};li.prototype.pickMetadataSchema=function(e){let t=this.pick(e);return l(t)?t.detail?.model?.structuralMetadata?.schema:void 0};li.prototype.pickPositionWorldCoordinates=function(e,t){return this._picking.pickPositionWorldCoordinates(this,e,t)};li.prototype.pickPosition=function(e,t){return this._picking.pickPosition(this,e,t)};li.prototype.drillPick=function(e,t,n,i){return this._picking.drillPick(this,e,t,n,i)};function Lxt(e){let t=e._frameState;A8.camera=t.camera,A8.cullingVolume=t.cullingVolume,e.primitives.updateForPass(t,A8)}function Rxt(e){let t=e._frameState;if(!t.camera.canPreloadFlight())return;M8.camera=e.preloadFlightCamera,M8.cullingVolume=e.preloadFlightCullingVolume,e.primitives.updateForPass(t,M8)}function Zxt(e){e.primitives.updateForPass(e._frameState,Myt)}li.prototype.pickFromRay=function(e,t,n){return this._picking.pickFromRay(this,e,t,n)};li.prototype.drillPickFromRay=function(e,t,n,i){return this._picking.drillPickFromRay(this,e,t,n,i)};li.prototype.pickFromRayMostDetailed=function(e,t,n){return this._picking.pickFromRayMostDetailed(this,e,t,n)};li.prototype.drillPickFromRayMostDetailed=function(e,t,n,i){return this._picking.drillPickFromRayMostDetailed(this,e,t,n,i)};li.prototype.sampleHeight=function(e,t,n){return this._picking.sampleHeight(this,e,t,n)};li.prototype.clampToHeight=function(e,t,n,i){return this._picking.clampToHeight(this,e,t,n,i)};li.prototype.sampleHeightMostDetailed=function(e,t,n){return this._picking.sampleHeightMostDetailed(this,e,t,n)};li.prototype.clampToHeightMostDetailed=function(e,t,n){return this._picking.clampToHeightMostDetailed(this,e,t,n)};li.prototype.cartesianToCanvasCoordinates=function(e,t){return Ui.worldToWindowCoordinates(this,e,t)};li.prototype.completeMorph=function(){this._transitioner.completeMorph()};li.prototype.morphTo2D=function(e){e=e??2,this._transitioner.morphTo2D(e,this._ellipsoid)};li.prototype.morphToColumbusView=function(e){e=e??2,this._transitioner.morphToColumbusView(e,this._ellipsoid)};li.prototype.morphTo3D=function(e){e=e??2,this._transitioner.morphTo3D(e,this._ellipsoid)};function Gxt(e,t){if(e._removeTerrainProviderReadyListener=e._removeTerrainProviderReadyListener&&e._removeTerrainProviderReadyListener(),t.ready){l(e.globe)&&(e.globe.terrainProvider=t.provider);return}e.globe.terrainProvider=void 0,e._removeTerrainProviderReadyListener=t.readyEvent.addEventListener(n=>{l(e)&&l(e.globe)&&(e.globe.terrainProvider=n),e._removeTerrainProviderReadyListener()})}li.prototype.setTerrain=function(e){return Gxt(this,e),e};li.prototype.isDestroyed=function(){return!1};li.prototype.destroy=function(){this._tweens.removeAll(),this._computeEngine=this._computeEngine&&this._computeEngine.destroy(),this._screenSpaceCameraController=this._screenSpaceCameraController&&this._screenSpaceCameraController.destroy(),this._deviceOrientationCameraController=this._deviceOrientationCameraController&&!this._deviceOrientationCameraController.isDestroyed()&&this._deviceOrientationCameraController.destroy(),this._primitives=this._primitives&&this._primitives.destroy(),this._groundPrimitives=this._groundPrimitives&&this._groundPrimitives.destroy(),this._globe=this._globe&&this._globe.destroy(),this._removeTerrainProviderReadyListener=this._removeTerrainProviderReadyListener&&this._removeTerrainProviderReadyListener(),this.skyBox=this.skyBox&&this.skyBox.destroy(),this.skyAtmosphere=this.skyAtmosphere&&this.skyAtmosphere.destroy(),this._debugSphere=this._debugSphere&&this._debugSphere.destroy(),this.sun=this.sun&&this.sun.destroy(),this._sunPostProcess=this._sunPostProcess&&this._sunPostProcess.destroy(),this._depthPlane=this._depthPlane&&this._depthPlane.destroy(),this._transitioner=this._transitioner&&this._transitioner.destroy(),this._debugFrustumPlanes=this._debugFrustumPlanes&&this._debugFrustumPlanes.destroy(),this._brdfLutGenerator=this._brdfLutGenerator&&this._brdfLutGenerator.destroy(),this._picking=this._picking&&this._picking.destroy(),this._defaultView=this._defaultView&&this._defaultView.destroy(),this._view=void 0,this._removeCreditContainer&&this._canvas.parentNode.removeChild(this._creditContainer),this.postProcessStages=this.postProcessStages&&this.postProcessStages.destroy(),this._context=this._context&&this._context.destroy(),this._frameState.creditDisplay=this._frameState.creditDisplay&&this._frameState.creditDisplay.destroy(),l(this._performanceDisplay)&&(this._performanceDisplay=this._performanceDisplay&&this._performanceDisplay.destroy(),this._performanceContainer.parentNode.removeChild(this._performanceContainer)),this._removeRequestListenerCallback(),this._removeTaskProcessorListenerCallback();for(let e=0;e<this._removeGlobeCallbacks.length;++e)this._removeGlobeCallbacks[e]();return this._removeGlobeCallbacks.length=0,l(this._removeUpdateHeightCallback)&&(this._removeUpdateHeightCallback(),this._removeUpdateHeightCallback=void 0),me(this)};var $9=li;var AOi=_(T(),1);var cOi=_(T(),1),bL=`float interpolateByDistance(vec4 nearFarScalar, float distance) { float startDistance = nearFarScalar.x; float startValue = nearFarScalar.y; float endDistance = nearFarScalar.z; float endValue = nearFarScalar.w; float t = clamp((distance - startDistance) / (endDistance - startDistance), 0.0, 1.0); return mix(startValue, endValue, t); } void computeAtmosphereScattering(vec3 positionWC, vec3 lightDirection, out vec3 rayleighColor, out vec3 mieColor, out float opacity, out float underTranslucentGlobe) { float ellipsoidRadiiDifference = czm_ellipsoidRadii.x - czm_ellipsoidRadii.z; // Adjustment to the atmosphere radius applied based on the camera height. float distanceAdjustMin = czm_ellipsoidRadii.x / 4.0; float distanceAdjustMax = czm_ellipsoidRadii.x; float distanceAdjustModifier = ellipsoidRadiiDifference / 2.0; float distanceAdjust = distanceAdjustModifier * clamp((czm_eyeHeight - distanceAdjustMin) / (distanceAdjustMax - distanceAdjustMin), 0.0, 1.0); // Since atmosphere scattering assumes the atmosphere is a spherical shell, we compute an inner radius of the atmosphere best fit // for the position on the ellipsoid. float radiusAdjust = (ellipsoidRadiiDifference / 4.0) + distanceAdjust; float atmosphereInnerRadius = (length(czm_viewerPositionWC) - czm_eyeHeight) - radiusAdjust; // Setup the primary ray: from the camera position to the vertex position. vec3 cameraToPositionWC = positionWC - czm_viewerPositionWC; vec3 cameraToPositionWCDirection = normalize(cameraToPositionWC); czm_ray primaryRay = czm_ray(czm_viewerPositionWC, cameraToPositionWCDirection); underTranslucentGlobe = 0.0; // Brighten the sky atmosphere under the Earth's atmosphere when translucency is enabled. #if defined(GLOBE_TRANSLUCENT) // Check for intersection with the inner radius of the atmopshere. czm_raySegment primaryRayEarthIntersect = czm_raySphereIntersectionInterval(primaryRay, vec3(0.0), atmosphereInnerRadius + radiusAdjust); if (primaryRayEarthIntersect.start > 0.0 && primaryRayEarthIntersect.stop > 0.0) { // Compute position on globe. vec3 direction = normalize(positionWC); czm_ray ellipsoidRay = czm_ray(positionWC, -direction); czm_raySegment ellipsoidIntersection = czm_rayEllipsoidIntersectionInterval(ellipsoidRay, vec3(0.0), czm_ellipsoidInverseRadii); vec3 onEarth = positionWC - (direction * ellipsoidIntersection.start); // Control the color using the camera angle. float angle = dot(normalize(czm_viewerPositionWC), normalize(onEarth)); // Control the opacity using the distance from Earth. opacity = interpolateByDistance(vec4(0.0, 1.0, czm_ellipsoidRadii.x, 0.0), length(czm_viewerPositionWC - onEarth)); vec3 horizonColor = vec3(0.1, 0.2, 0.3); vec3 nearColor = vec3(0.0); rayleighColor = mix(nearColor, horizonColor, exp(-angle) * opacity); // Set the traslucent flag to avoid alpha adjustment in computeFinalColor funciton. underTranslucentGlobe = 1.0; return; } #endif computeScattering( primaryRay, length(cameraToPositionWC), lightDirection, atmosphereInnerRadius, rayleighColor, mieColor, opacity ); // Alter the opacity based on how close the viewer is to the ground. // (0.0 = At edge of atmosphere, 1.0 = On ground) float cameraHeight = czm_eyeHeight + atmosphereInnerRadius; float atmosphereOuterRadius = atmosphereInnerRadius + ATMOSPHERE_THICKNESS; opacity = clamp((atmosphereOuterRadius - cameraHeight) / (atmosphereOuterRadius - atmosphereInnerRadius), 0.0, 1.0); // Alter alpha based on time of day (0.0 = night , 1.0 = day) float nightAlpha = (u_radiiAndDynamicAtmosphereColor.z != 0.0) ? clamp(dot(normalize(positionWC), lightDirection), 0.0, 1.0) : 1.0; opacity *= pow(nightAlpha, 0.5); } `;var dOi=_(T(),1),eA=`in vec3 v_outerPositionWC; uniform vec3 u_hsbShift; #ifndef PER_FRAGMENT_ATMOSPHERE in vec3 v_mieColor; in vec3 v_rayleighColor; in float v_opacity; in float v_translucent; #endif void main (void) { float lightEnum = u_radiiAndDynamicAtmosphereColor.z; vec3 lightDirection = czm_getDynamicAtmosphereLightDirection(v_outerPositionWC, lightEnum); vec3 mieColor; vec3 rayleighColor; float opacity; float translucent; #ifdef PER_FRAGMENT_ATMOSPHERE computeAtmosphereScattering( v_outerPositionWC, lightDirection, rayleighColor, mieColor, opacity, translucent ); #else mieColor = v_mieColor; rayleighColor = v_rayleighColor; opacity = v_opacity; translucent = v_translucent; #endif vec4 color = computeAtmosphereColor(v_outerPositionWC, lightDirection, rayleighColor, mieColor, opacity); #ifndef HDR color.rgb = czm_pbrNeutralTonemapping(color.rgb); color.rgb = czm_inverseGamma(color.rgb); #endif #ifdef COLOR_CORRECT const bool ignoreBlackPixels = true; color.rgb = czm_applyHSBShift(color.rgb, u_hsbShift, ignoreBlackPixels); #endif // For the parts of the sky atmosphere that are not behind a translucent globe, // we mix in the default opacity so that the sky atmosphere still appears at distance. // This is needed because the opacity in the sky atmosphere is initially adjusted based // on the camera height. if (translucent == 0.0) { color.a = mix(color.b, 1.0, color.a) * smoothstep(0.0, 1.0, czm_morphTime); } out_FragColor = color; } `;var mOi=_(T(),1),tA=`in vec4 position; out vec3 v_outerPositionWC; #ifndef PER_FRAGMENT_ATMOSPHERE out vec3 v_mieColor; out vec3 v_rayleighColor; out float v_opacity; out float v_translucent; #endif void main(void) { vec4 positionWC = czm_model * position; float lightEnum = u_radiiAndDynamicAtmosphereColor.z; vec3 lightDirection = czm_getDynamicAtmosphereLightDirection(positionWC.xyz, lightEnum); #ifndef PER_FRAGMENT_ATMOSPHERE computeAtmosphereScattering( positionWC.xyz, lightDirection, v_rayleighColor, v_mieColor, v_opacity, v_translucent ); #endif v_outerPositionWC = positionWC.xyz; gl_Position = czm_modelViewProjection * position; } `;function gL(e){e=e??ne.WGS84,this.show=!0,this.perFragmentAtmosphere=!1,this._ellipsoid=e;let t=1.025,n=m.multiplyByScalar(e.radii,t,new m);this._scaleMatrix=F.fromScale(n),this._modelMatrix=new F,this._command=new $e({owner:this,modelMatrix:this._modelMatrix}),this._spSkyFromSpace=void 0,this._spSkyFromAtmosphere=void 0,this._flags=void 0,this.atmosphereLightIntensity=50,this.atmosphereRayleighCoefficient=new m(55e-7,13e-6,284e-7),this.atmosphereMieCoefficient=new m(21e-6,21e-6,21e-6),this.atmosphereRayleighScaleHeight=1e4,this.atmosphereMieScaleHeight=3200,this.atmosphereMieAnisotropy=.9,this.hueShift=0,this.saturationShift=0,this.brightnessShift=0,this._hueSaturationBrightness=new m;let i=new m;i.x=e.maximumRadius*t,i.y=e.maximumRadius,i.z=0,this._radiiAndDynamicAtmosphereColor=i;let o=this;this._command.uniformMap={u_radiiAndDynamicAtmosphereColor:function(){return o._radiiAndDynamicAtmosphereColor},u_hsbShift:function(){return o._hueSaturationBrightness.x=o.hueShift,o._hueSaturationBrightness.y=o.saturationShift,o._hueSaturationBrightness.z=o.brightnessShift,o._hueSaturationBrightness},u_atmosphereLightIntensity:function(){return o.atmosphereLightIntensity},u_atmosphereRayleighCoefficient:function(){return o.atmosphereRayleighCoefficient},u_atmosphereMieCoefficient:function(){return o.atmosphereMieCoefficient},u_atmosphereRayleighScaleHeight:function(){return o.atmosphereRayleighScaleHeight},u_atmosphereMieScaleHeight:function(){return o.atmosphereMieScaleHeight},u_atmosphereMieAnisotropy:function(){return o.atmosphereMieAnisotropy}}}Object.defineProperties(gL.prototype,{ellipsoid:{get:function(){return this._ellipsoid}}});gL.prototype.setDynamicLighting=function(e){this._radiiAndDynamicAtmosphereColor.z=e};var D8=new F;gL.prototype.update=function(e,t){if(!this.show)return;let n=e.mode;if(n!==oe.SCENE3D&&n!==oe.MORPHING||!e.passes.render)return;let i=F.fromRotationTranslation(e.context.uniformState.inverseViewRotation,m.ZERO,D8),o=F.multiplyTransformation(i,Po.Y_UP_TO_Z_UP,D8),r=F.multiply(this._scaleMatrix,o,D8);F.clone(r,this._modelMatrix);let s=e.context,a=Ext(this),c=e.globeTranslucencyState.translucent,d=this.perFragmentAtmosphere||c||!l(t)||!t.show,u=this._command;if(!l(u.vertexArray)){let p=js.createGeometry(new js({radii:new m(1,1,1),slicePartitions:256,stackPartitions:256,vertexFormat:Xe.POSITION_ONLY}));u.vertexArray=ni.fromGeometry({context:s,geometry:p,attributeLocations:Fn.createAttributeLocations(p),bufferUsage:Me.STATIC_DRAW}),u.renderState=Ue.fromCache({cull:{enabled:!0,face:Ti.FRONT},blending:un.ALPHA_BLEND,depthMask:!1})}let h=a|d<<2|c<<3;if(h!==this._flags){this._flags=h;let p=[];a&&p.push("COLOR_CORRECT"),d&&p.push("PER_FRAGMENT_ATMOSPHERE"),c&&p.push("GLOBE_TRANSLUCENT");let g=new De({defines:p,sources:[$m,bL,tA]}),f=new De({defines:p,sources:[$m,bL,eA]});this._spSkyAtmosphere=$t.fromCache({context:s,vertexShaderSource:g,fragmentShaderSource:f}),u.shaderProgram=this._spSkyAtmosphere}return u};function Ext(e){return!(X.equalsEpsilon(e.hueShift,0,X.EPSILON7)&&X.equalsEpsilon(e.saturationShift,0,X.EPSILON7)&&X.equalsEpsilon(e.brightnessShift,0,X.EPSILON7))}gL.prototype.isDestroyed=function(){return!1};gL.prototype.destroy=function(){let e=this._command;return e.vertexArray=e.vertexArray&&e.vertexArray.destroy(),this._spSkyAtmosphere=this._spSkyAtmosphere&&this._spSkyAtmosphere.destroy(),me(this)};var nA=gL;var lYi=_(T(),1);var NOi=_(T(),1),iA=`uniform samplerCube u_cubeMap; in vec3 v_texCoord; void main() { vec4 color = czm_textureCube(u_cubeMap, normalize(v_texCoord)); out_FragColor = vec4(czm_gammaCorrect(color).rgb, czm_morphTime); } `;var UOi=_(T(),1),oA=`in vec3 position; out vec3 v_texCoord; void main() { vec3 p = czm_viewRotation * (czm_temeToPseudoFixed * (czm_entireFrustum.y * position)); gl_Position = czm_projection * vec4(p, 1.0); v_texCoord = position.xyz; } `;function xL(e){this.sources=e.sources,this._sources=void 0,this.show=e.show??!0,this._command=new $e({modelMatrix:F.clone(F.IDENTITY),owner:this}),this._cubeMap=void 0,this._attributeLocations=void 0,this._useHdr=void 0,this._hasError=!1,this._error=void 0}xL.prototype.update=function(e,t){let n=this,{mode:i,passes:o,context:r}=e;if(!this.show||i!==oe.SCENE3D&&i!==oe.MORPHING||!o.render)return;if(this._hasError){let a=this._error;throw this._hasError=!1,this._error=void 0,a}if(this._sources!==this.sources){this._sources=this.sources;let a=this.sources;typeof a.positiveX=="string"?dE(r,this._sources).then(function(c){n._cubeMap=n._cubeMap&&n._cubeMap.destroy(),n._cubeMap=c}).catch(c=>{this._hasError=!0,this._error=c}):(this._cubeMap=this._cubeMap&&this._cubeMap.destroy(),this._cubeMap=new xr({context:r,source:a}))}let s=this._command;if(!l(s.vertexArray)){s.uniformMap={u_cubeMap:function(){return n._cubeMap}};let a=Wa.createGeometry(Wa.fromDimensions({dimensions:new m(2,2,2),vertexFormat:Xe.POSITION_ONLY})),c=this._attributeLocations=Fn.createAttributeLocations(a);s.vertexArray=ni.fromGeometry({context:r,geometry:a,attributeLocations:c,bufferUsage:Me.STATIC_DRAW}),s.renderState=Ue.fromCache({blending:un.ALPHA_BLEND})}if(!l(s.shaderProgram)||this._useHdr!==t){let a=new De({defines:[t?"HDR":""],sources:[iA]});s.shaderProgram=$t.fromCache({context:r,vertexShaderSource:oA,fragmentShaderSource:a,attributeLocations:this._attributeLocations}),this._useHdr=t}if(l(this._cubeMap))return s};xL.prototype.isDestroyed=function(){return!1};xL.prototype.destroy=function(){let e=this._command;return e.vertexArray=e.vertexArray&&e.vertexArray.destroy(),e.shaderProgram=e.shaderProgram&&e.shaderProgram.destroy(),this._cubeMap=this._cubeMap&&this._cubeMap.destroy(),me(this)};function yL(e){return nn(`Assets/Textures/SkyBox/tycho2t3_80_${e}.jpg`)}xL.createEarthSkyBox=function(){return new xL({sources:{positiveX:yL("px"),negativeX:yL("mx"),positiveY:yL("py"),negativeY:yL("my"),positiveZ:yL("pz"),negativeZ:yL("mz")}})};var rA=xL;var OYi=_(T(),1);var uYi=_(T(),1),sA=`uniform sampler2D u_texture; in vec2 v_textureCoordinates; void main() { vec4 color = texture(u_texture, v_textureCoordinates); out_FragColor = czm_gammaCorrect(color); } `;var hYi=_(T(),1),aA=`uniform float u_radiusTS; in vec2 v_textureCoordinates; vec2 rotate(vec2 p, vec2 direction) { return vec2(p.x * direction.x - p.y * direction.y, p.x * direction.y + p.y * direction.x); } vec4 addBurst(vec2 position, vec2 direction, float lengthScalar) { vec2 rotatedPosition = rotate(position, direction) * vec2(25.0, 0.75); float radius = length(rotatedPosition) * lengthScalar; float burst = 1.0 - smoothstep(0.0, 0.55, radius); return vec4(burst); } void main() { float lengthScalar = 2.0 / sqrt(2.0); vec2 position = v_textureCoordinates - vec2(0.5); float radius = length(position) * lengthScalar; float surface = step(radius, u_radiusTS); vec4 color = vec4(vec2(1.0), surface + 0.2, surface); float glow = 1.0 - smoothstep(0.0, 0.55, radius); color.ba += mix(vec2(0.0), vec2(1.0), glow) * 0.75; vec4 burst = vec4(0.0); // The following loop has been manually unrolled for speed, to // avoid sin() and cos(). // //for (float i = 0.4; i < 3.2; i += 1.047) { // vec2 direction = vec2(sin(i), cos(i)); // burst += 0.4 * addBurst(position, direction, lengthScalar); // // direction = vec2(sin(i - 0.08), cos(i - 0.08)); // burst += 0.3 * addBurst(position, direction, lengthScalar); //} burst += 0.4 * addBurst(position, vec2(0.38942, 0.92106), lengthScalar); // angle == 0.4 burst += 0.4 * addBurst(position, vec2(0.99235, 0.12348), lengthScalar); // angle == 0.4 + 1.047 burst += 0.4 * addBurst(position, vec2(0.60327, -0.79754), lengthScalar); // angle == 0.4 + 1.047 * 2.0 burst += 0.3 * addBurst(position, vec2(0.31457, 0.94924), lengthScalar); // angle == 0.4 - 0.08 burst += 0.3 * addBurst(position, vec2(0.97931, 0.20239), lengthScalar); // angle == 0.4 + 1.047 - 0.08 burst += 0.3 * addBurst(position, vec2(0.66507, -0.74678), lengthScalar); // angle == 0.4 + 1.047 * 2.0 - 0.08 // End of manual loop unrolling. color += clamp(burst, vec4(0.0), vec4(1.0)) * 0.15; out_FragColor = clamp(color, vec4(0.0), vec4(1.0)); } `;var pYi=_(T(),1),cA=`in vec2 direction; uniform float u_size; out vec2 v_textureCoordinates; void main() { vec4 position; if (czm_morphTime == 1.0) { position = vec4(czm_sunPositionWC, 1.0); } else { position = vec4(czm_sunPositionColumbusView.zxy, 1.0); } vec4 positionEC = czm_view * position; vec4 positionWC = czm_eyeToWindowCoordinates(positionEC); vec2 halfSize = vec2(u_size * 0.5); halfSize *= ((direction * 2.0) - 1.0); gl_Position = czm_viewportOrthographic * vec4(positionWC.xy + halfSize, -positionWC.z, 1.0); v_textureCoordinates = direction; } `;function dA(){this.show=!0,this._drawCommand=new $e({primitiveType:we.TRIANGLES,boundingVolume:new le,owner:this}),this._commands={drawCommand:this._drawCommand,computeCommand:void 0},this._boundingVolume=new le,this._boundingVolume2D=new le,this._texture=void 0,this._drawingBufferWidth=void 0,this._drawingBufferHeight=void 0,this._radiusTS=void 0,this._size=void 0,this.glowFactor=1,this._glowFactorDirty=!1,this._useHdr=void 0;let e=this;this._uniformMap={u_texture:function(){return e._texture},u_size:function(){return e._size}}}Object.defineProperties(dA.prototype,{glowFactor:{get:function(){return this._glowFactor},set:function(e){e=Math.max(e,0),this._glowFactor=e,this._glowFactorDirty=!0}}});var Ixt=new U,Xxt=new U,Wxt=new se,lA=new se;dA.prototype.update=function(e,t,n){if(!this.show)return;let i=e.mode;if(i===oe.SCENE2D||i===oe.MORPHING||!e.passes.render)return;let o=e.context,r=t.viewport.width,s=t.viewport.height;if(!l(this._texture)||r!==this._drawingBufferWidth||s!==this._drawingBufferHeight||this._glowFactorDirty||n!==this._useHdr){this._texture=this._texture&&this._texture.destroy(),this._drawingBufferWidth=r,this._drawingBufferHeight=s,this._glowFactorDirty=!1,this._useHdr=n;let L=Math.max(r,s);L=Math.pow(2,Math.ceil(Math.log(L)/Math.log(2))-2),L=Math.max(1,L);let Z=n?o.halfFloatingPointTexture?je.HALF_FLOAT:je.FLOAT:je.UNSIGNED_BYTE;this._texture=new vt({context:o,width:L,height:L,pixelFormat:it.RGBA,pixelDatatype:Z}),this._glowLengthTS=this._glowFactor*5,this._radiusTS=1/(1+2*this._glowLengthTS)*.5;let E=this,P={u_radiusTS:function(){return E._radiusTS}};this._commands.computeCommand=new Fc({fragmentShaderSource:aA,outputTexture:this._texture,uniformMap:P,persists:!1,owner:this,postExecute:function(){E._commands.computeCommand=void 0}})}let a=this._drawCommand;if(!l(a.vertexArray)){let L={direction:0},Z=new Uint8Array(4*2);Z[0]=0,Z[1]=0,Z[2]=255,Z[3]=0,Z[4]=255,Z[5]=255,Z[6]=0,Z[7]=255;let E=xt.createVertexBuffer({context:o,typedArray:Z,usage:Me.STATIC_DRAW}),P=[{index:L.direction,vertexBuffer:E,componentsPerAttribute:2,normalize:!0,componentDatatype:Q.UNSIGNED_BYTE}],W=xt.createIndexBuffer({context:o,typedArray:new Uint16Array([0,1,2,0,2,3]),usage:Me.STATIC_DRAW,indexDatatype:Ae.UNSIGNED_SHORT});a.vertexArray=new ni({context:o,attributes:P,indexBuffer:W}),a.shaderProgram=$t.fromCache({context:o,vertexShaderSource:cA,fragmentShaderSource:sA,attributeLocations:L}),a.renderState=Ue.fromCache({blending:un.ALPHA_BLEND}),a.uniformMap=this._uniformMap}let c=o.uniformState.sunPositionWC,d=o.uniformState.sunPositionColumbusView,u=this._boundingVolume,h=this._boundingVolume2D;m.clone(c,u.center),h.center.x=d.z,h.center.y=d.x,h.center.z=d.y,u.radius=X.SOLAR_RADIUS+X.SOLAR_RADIUS*this._glowLengthTS,h.radius=u.radius,i===oe.SCENE3D?le.clone(u,a.boundingVolume):i===oe.COLUMBUS_VIEW&&le.clone(h,a.boundingVolume);let p=Ui.computeActualEllipsoidPosition(e,c,lA),g=m.magnitude(m.subtract(p,e.camera.position,lA)),f=o.uniformState.projection,y=Wxt;y.x=0,y.y=0,y.z=-g,y.w=1;let x=F.multiplyByVector(f,y,lA),S=Ui.clipToGLWindowCoordinates(t.viewport,x,Ixt);y.x=X.SOLAR_RADIUS;let C=F.multiplyByVector(f,y,lA),V=Ui.clipToGLWindowCoordinates(t.viewport,C,Xxt);return this._size=U.magnitude(U.subtract(V,S,lA)),this._size=2*this._size*(1+2*this._glowLengthTS),this._size=Math.ceil(this._size),this._commands};dA.prototype.isDestroyed=function(){return!1};dA.prototype.destroy=function(){let e=this._drawCommand;return e.vertexArray=e.vertexArray&&e.vertexArray.destroy(),e.shaderProgram=e.shaderProgram&&e.shaderProgram.destroy(),this._texture=this._texture&&this._texture.destroy(),me(this)};var uA=dA;var Jzi=_(T(),1);var Xzi=_(T(),1);var eSe=_(qM(),1);var zYi=_(T(),1);function Pxt(e,t,n){return` float clipDistance = clip(gl_FragCoord, ${e}, ${t}); vec4 clippingPlanesEdgeColor = vec4(1.0); clippingPlanesEdgeColor.rgb = ${n}.rgb; float clippingPlanesEdgeWidth = ${n}.a; if (clipDistance > 0.0 && clipDistance < clippingPlanesEdgeWidth) { out_FragColor = clippingPlanesEdgeColor; } `}var mA=Pxt;var JYi=_(T(),1);var vxt={modifyFragmentShader:function(t){return t=De.replaceMain(t,"czm_splitter_main"),t+=`uniform float czm_splitDirection; void main() { #ifndef SHADOW_MAP if (czm_splitDirection < 0.0 && gl_FragCoord.x > czm_splitPosition) discard; if (czm_splitDirection > 0.0 && gl_FragCoord.x < czm_splitPosition) discard; #endif czm_splitter_main(); } `,t},addUniforms:function(t,n){n.czm_splitDirection=function(){return t.splitDirection}}},_L=vxt;var fS={NEEDS_DECODE:0,DECODING:1,READY:2,FAILED:3};function hA(e){this._parsedContent=void 0,this._drawCommand=void 0,this._isTranslucent=!1,this._styleTranslucent=!1,this._constantColor=D.clone(D.DARKGRAY),this._highlightColor=D.clone(D.WHITE),this._pointSize=1,this._rtcCenter=void 0,this._quantizedVolumeScale=void 0,this._quantizedVolumeOffset=void 0,this._styleableShaderAttributes=void 0,this._isQuantized=!1,this._isOctEncoded16P=!1,this._isRGB565=!1,this._hasColors=!1,this._hasNormals=!1,this._hasBatchIds=!1,this._decodingState=fS.READY,this._dequantizeInShader=!0,this._isQuantizedDraco=!1,this._isOctEncodedDraco=!1,this._quantizedRange=0,this._octEncodedRange=0,this.backFaceCulling=!1,this._backFaceCulling=!1,this.normalShading=!0,this._normalShading=!0,this._opaqueRenderState=void 0,this._translucentRenderState=void 0,this._mode=void 0,this._ready=!1,this._pointsLength=0,this._geometryByteLength=0,this._vertexShaderLoaded=e.vertexShaderLoaded,this._fragmentShaderLoaded=e.fragmentShaderLoaded,this._uniformMapLoaded=e.uniformMapLoaded,this._batchTableLoaded=e.batchTableLoaded,this._pickIdLoaded=e.pickIdLoaded,this._opaquePass=e.opaquePass??Ee.OPAQUE,this._cull=e.cull??!0,this.style=void 0,this._style=void 0,this.styleDirty=!1,this.modelMatrix=F.clone(F.IDENTITY),this._modelMatrix=F.clone(F.IDENTITY),this.time=0,this.shadows=_n.ENABLED,this._boundingSphere=void 0,this.clippingPlanes=void 0,this.isClipped=!1,this.clippingPlanesDirty=!1,this.clippingPlanesOriginMatrix=void 0,this.attenuation=!1,this._attenuation=!1,this.geometricError=0,this.geometricErrorScale=1,this.maximumAttenuation=this._pointSize,this.splitDirection=e.splitDirection??vr.NONE,this._splittingEnabled=!1,this._error=void 0,wxt(this,e)}Object.defineProperties(hA.prototype,{pointsLength:{get:function(){return this._pointsLength}},geometryByteLength:{get:function(){return this._geometryByteLength}},ready:{get:function(){return this._ready}},color:{get:function(){return D.clone(this._highlightColor)},set:function(e){this._highlightColor=D.clone(e,this._highlightColor)}},boundingSphere:{get:function(){if(l(this._drawCommand))return this._drawCommand.boundingVolume},set:function(e){this._boundingSphere=le.clone(e,this._boundingSphere)}}});function wxt(e,t){let n=I_.parse(t.arrayBuffer,t.byteOffset);if(e._parsedContent=n,e._rtcCenter=n.rtcCenter,e._hasNormals=n.hasNormals,e._hasColors=n.hasColors,e._hasBatchIds=n.hasBatchIds,e._isTranslucent=n.isTranslucent,!n.hasBatchIds&&l(n.batchTableBinary)&&(n.styleableProperties=Hp.getBinaryProperties(n.pointsLength,n.batchTableJson,n.batchTableBinary)),l(n.draco)){let a=n.draco;e._decodingState=fS.NEEDS_DECODE,a.dequantizeInShader=e._dequantizeInShader}let i=n.positions;l(i)&&(e._isQuantized=i.isQuantized,e._quantizedVolumeScale=i.quantizedVolumeScale,e._quantizedVolumeOffset=i.quantizedVolumeOffset,e._quantizedRange=i.quantizedRange);let o=n.normals;l(o)&&(e._isOctEncoded16P=o.octEncoded);let r=n.colors;l(r)&&(l(r.constantColor)&&(e._constantColor=D.clone(r.constantColor,e._constantColor),e._hasColors=!1),e._isRGB565=r.isRGB565);let s=n.batchIds;l(n.batchIds)&&(s.name="BATCH_ID",s.semantic="BATCH_ID",s.setIndex=void 0),n.hasBatchIds&&e._batchTableLoaded(n.batchLength,n.batchTableJson,n.batchTableBinary),e._pointsLength=n.pointsLength}var Fxt=new m,Axt=new m,Mxt=new m,qTe,O3;function Nxt(e){if(!l(O3)){qTe=new eSe.default(0),O3=new Array(e);for(let t=0;t<e;++t)O3[t]=qTe.random()}return O3}function kxt(e){let n=e.length/3,i=Math.min(n,20),o=Nxt(20),r=Number.MAX_VALUE,s=-Number.MAX_VALUE,a=m.fromElements(r,r,r,Fxt),c=m.fromElements(s,s,s,Axt);for(let u=0;u<i;++u){let h=Math.floor(o[u]*n),p=m.unpack(e,h*3,Mxt);m.minimumByComponent(a,p,a),m.maximumByComponent(c,p,c)}let d=le.fromCornerPoints(a,c);return d.radius+=X.EPSILON2,d}function $Te(e,t){let n=Q.fromTypedArray(e);return n===Q.INT||n===Q.UNSIGNED_INT||n===Q.DOUBLE?(_t("Cast pnts property to floats",`Point cloud property "${t}" will be cast to a float array because INT, UNSIGNED_INT, and DOUBLE are not valid WebGL vertex attribute types. Some precision may be lost.`),new Float32Array(e)):e}var Uxt=new se,Dxt=new se,Bxt=new D,tSe=0,Y3=1,H8=2,nSe=3,Oxt=4,B8=new F,Yxt=new F;function zxt(e,t){let n=t.context,i=e._parsedContent,o=e._pointsLength,r=i.positions,s=i.colors,a=i.normals,c=i.batchIds,d=i.styleableProperties,u=l(d),h=e._isQuantized,p=e._isQuantizedDraco,g=e._isOctEncoded16P,f=e._isOctEncodedDraco,y=e._quantizedRange,x=e._octEncodedRange,S=e._isRGB565,C=e._isTranslucent,V=e._hasColors,L=e._hasNormals,Z=e._hasBatchIds,E,P,W=[],v={};if(e._styleableShaderAttributes=v,u){let k=Oxt;for(let O in d)if(d.hasOwnProperty(O)){let N=d[O],z=$Te(N.typedArray,O);E=N.componentCount,P=Q.fromTypedArray(z);let K=xt.createVertexBuffer({context:n,typedArray:z,usage:Me.STATIC_DRAW});e._geometryByteLength+=K.sizeInBytes;let te={index:k,vertexBuffer:K,componentsPerAttribute:E,componentDatatype:P,normalize:!1,offsetInBytes:0,strideInBytes:0};W.push(te),v[O]={location:k,componentCount:E},++k}}let A=xt.createVertexBuffer({context:n,typedArray:r.typedArray,usage:Me.STATIC_DRAW});e._geometryByteLength+=A.sizeInBytes;let b;V&&(b=xt.createVertexBuffer({context:n,typedArray:s.typedArray,usage:Me.STATIC_DRAW}),e._geometryByteLength+=b.sizeInBytes);let R;L&&(R=xt.createVertexBuffer({context:n,typedArray:a.typedArray,usage:Me.STATIC_DRAW}),e._geometryByteLength+=R.sizeInBytes);let G;Z&&(c.typedArray=$Te(c.typedArray,"batchIds"),G=xt.createVertexBuffer({context:n,typedArray:c.typedArray,usage:Me.STATIC_DRAW}),e._geometryByteLength+=G.sizeInBytes);let I=[];if(h?P=Q.UNSIGNED_SHORT:p?P=y<=255?Q.UNSIGNED_BYTE:Q.UNSIGNED_SHORT:P=Q.FLOAT,I.push({index:tSe,vertexBuffer:A,componentsPerAttribute:3,componentDatatype:P,normalize:!1,offsetInBytes:0,strideInBytes:0}),e._cull&&(h||p?e._boundingSphere=le.fromCornerPoints(m.ZERO,e._quantizedVolumeScale):e._boundingSphere=kxt(r.typedArray)),V)if(S)I.push({index:Y3,vertexBuffer:b,componentsPerAttribute:1,componentDatatype:Q.UNSIGNED_SHORT,normalize:!1,offsetInBytes:0,strideInBytes:0});else{let k=C?4:3;I.push({index:Y3,vertexBuffer:b,componentsPerAttribute:k,componentDatatype:Q.UNSIGNED_BYTE,normalize:!0,offsetInBytes:0,strideInBytes:0})}L&&(g?(E=2,P=Q.UNSIGNED_BYTE):f?(E=2,P=x<=255?Q.UNSIGNED_BYTE:Q.UNSIGNED_SHORT):(E=3,P=Q.FLOAT),I.push({index:H8,vertexBuffer:R,componentsPerAttribute:E,componentDatatype:P,normalize:!1,offsetInBytes:0,strideInBytes:0})),Z&&I.push({index:nSe,vertexBuffer:G,componentsPerAttribute:1,componentDatatype:Q.fromTypedArray(c.typedArray),normalize:!1,offsetInBytes:0,strideInBytes:0}),u&&(I=I.concat(W));let w=new ni({context:n,attributes:I}),M={depthTest:{enabled:!0}},B={depthTest:{enabled:!0},depthMask:!1,blending:un.ALPHA_BLEND};e._opaquePass===Ee.CESIUM_3D_TILE&&(M.stencilTest=Ut.setCesium3DTileBit(),M.stencilMask=Ut.CESIUM_3D_TILE_MASK,B.stencilTest=Ut.setCesium3DTileBit(),B.stencilMask=Ut.CESIUM_3D_TILE_MASK),e._opaqueRenderState=Ue.fromCache(M),e._translucentRenderState=Ue.fromCache(B),e._drawCommand=new $e({boundingVolume:new le,cull:e._cull,modelMatrix:new F,primitiveType:we.POINTS,vertexArray:w,count:o,shaderProgram:void 0,uniformMap:void 0,renderState:C?e._translucentRenderState:e._opaqueRenderState,pass:C?Ee.TRANSLUCENT:e._opaquePass,owner:e,castShadows:!1,receiveShadows:!1,pickId:e._pickIdLoaded()})}function Hxt(e,t){let n=t.context,i=e._isQuantized,o=e._isQuantizedDraco,r=e._isOctEncodedDraco,s={u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier:function(){let a=Uxt;if(a.x=e._attenuation?e.maximumAttenuation:e._pointSize,a.x*=t.pixelRatio,a.y=e.time,e._attenuation){let c=t.camera.frustum,d;t.mode===oe.SCENE2D||c instanceof an?d=Number.POSITIVE_INFINITY:d=n.drawingBufferHeight/t.camera.frustum.sseDenominator,a.z=e.geometricError*e.geometricErrorScale,a.w=d}return a},u_highlightColor:function(){return e._highlightColor},u_constantColor:function(){return e._constantColor},u_clippingPlanes:function(){let a=e.clippingPlanes;return e.isClipped?a.texture:n.defaultTexture},u_clippingPlanesEdgeStyle:function(){let a=e.clippingPlanes;if(!l(a))return D.TRANSPARENT;let c=D.clone(a.edgeColor,Bxt);return c.alpha=a.edgeWidth,c},u_clippingPlanesMatrix:function(){let a=e.clippingPlanes;if(!l(a))return F.IDENTITY;let c=e.clippingPlanesOriginMatrix??e._modelMatrix;F.multiply(n.uniformState.view3D,c,B8);let d=F.multiply(B8,a.modelMatrix,B8);return F.inverseTranspose(d,Yxt)}};_L.addUniforms(e,s),(i||o||r)&&(s=St(s,{u_quantizedVolumeScaleAndOctEncodedRange:function(){let a=Dxt;if(l(e._quantizedVolumeScale)){let c=m.clone(e._quantizedVolumeScale,a);m.divideByScalar(c,e._quantizedRange,a)}return a.w=e._octEncodedRange,a}})),l(e._uniformMapLoaded)&&(s=e._uniformMapLoaded(s)),e._drawCommand.uniformMap=s}function O8(e,t){let n=/czm_3dtiles_property_(\d+)/g,i=n.exec(e);for(;i!==null;){let o=parseInt(i[1]);t.indexOf(o)===-1&&t.push(o),i=n.exec(e)}}function Y8(e,t){e=e.slice(e.indexOf(` `));let n=/czm_3dtiles_builtin_property_(\w+)/g,i=n.exec(e);for(;i!==null;){let o=i[1];t.indexOf(o)===-1&&t.push(o),i=n.exec(e)}}function z8(e,t){let n=e.numberOfAttributes;for(let i=0;i<n;++i){let o=e.getAttribute(i);if(o.index===t)return o}}var Kxt={POSITION:"czm_3dtiles_builtin_property_POSITION",POSITION_ABSOLUTE:"czm_3dtiles_builtin_property_POSITION_ABSOLUTE",COLOR:"czm_3dtiles_builtin_property_COLOR",NORMAL:"czm_3dtiles_builtin_property_NORMAL"};function Jxt(e,t,n){let i,o,r,s=t.context,a=l(n),c=e._isQuantized,d=e._isQuantizedDraco,u=e._isOctEncoded16P,h=e._isOctEncodedDraco,p=e._isRGB565,g=e._isTranslucent,f=e._hasColors,y=e._hasNormals,x=e._hasBatchIds,S=e._backFaceCulling,C=e._normalShading,V=e._drawCommand.vertexArray,L=e.clippingPlanes,Z=e._attenuation,E,P,W,v=g,A=Ye(Kxt),b={},R=e._styleableShaderAttributes;for(o in R)R.hasOwnProperty(o)&&(r=R[o],A[o]=`czm_3dtiles_property_${r.location}`,b[r.location]=r);if(a){let de={translucent:!1},xe="(vec3 czm_3dtiles_builtin_property_POSITION, vec3 czm_3dtiles_builtin_property_POSITION_ABSOLUTE, vec4 czm_3dtiles_builtin_property_COLOR, vec3 czm_3dtiles_builtin_property_NORMAL)";E=n.getColorShaderFunction(`getColorFromStyle${xe}`,A,de),P=n.getShowShaderFunction(`getShowFromStyle${xe}`,A,de),W=n.getPointSizeShaderFunction(`getPointSizeFromStyle${xe}`,A,de),l(E)&&de.translucent&&(v=!0)}e._styleTranslucent=v;let G=l(E),I=l(P),w=l(W),M=e.isClipped,B=[],k=[];G&&(O8(E,B),Y8(E,k)),I&&(O8(P,B),Y8(P,k)),w&&(O8(W,B),Y8(W,k));let O=k.indexOf("COLOR")>=0,N=k.indexOf("NORMAL")>=0;if(N&&!y)throw new ae("Style references the NORMAL semantic but the point cloud does not have normals");for(o in R)if(R.hasOwnProperty(o)){r=R[o];let de=B.indexOf(r.location)>=0,xe=z8(V,r.location);xe.enabled=de}let z=f&&(!G||O);if(f){let de=z8(V,Y3);de.enabled=z}let K=y&&(C||S||N);if(y){let de=z8(V,H8);de.enabled=K}let te={a_position:tSe};z&&(te.a_color=Y3),K&&(te.a_normal=H8),x&&(te.a_batchId=nSe);let H="",j=B.length;for(i=0;i<j;++i){let de=B[i];r=b[de];let xe=r.componentCount,Ce=`czm_3dtiles_property_${de}`,Ie;xe===1?Ie="float":Ie=`vec${xe}`,H+=`in ${Ie} ${Ce}; `,te[Ce]=r.location}Hxt(e,t);let ee=`in vec3 a_position; out vec4 v_color; uniform vec4 u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier; uniform vec4 u_constantColor; uniform vec4 u_highlightColor; `;ee+=`float u_pointSize; float tiles3d_tileset_time; `,Z&&(ee+=`float u_geometricError; float u_depthMultiplier; `),ee+=H,z&&(g?ee+=`in vec4 a_color; `:p?ee+=`in float a_color; const float SHIFT_RIGHT_11 = 1.0 / 2048.0; const float SHIFT_RIGHT_5 = 1.0 / 32.0; const float SHIFT_LEFT_11 = 2048.0; const float SHIFT_LEFT_5 = 32.0; const float NORMALIZE_6 = 1.0 / 64.0; const float NORMALIZE_5 = 1.0 / 32.0; `:ee+=`in vec3 a_color; `),K&&(u||h?ee+=`in vec2 a_normal; `:ee+=`in vec3 a_normal; `),x&&(ee+=`in float a_batchId; `),(c||d||h)&&(ee+=`uniform vec4 u_quantizedVolumeScaleAndOctEncodedRange; `),G&&(ee+=E),I&&(ee+=P),w&&(ee+=W),ee+=`void main() { u_pointSize = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.x; tiles3d_tileset_time = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.y; `,Z&&(ee+=` u_geometricError = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.z; u_depthMultiplier = u_pointSizeAndTimeAndGeometricErrorAndDepthMultiplier.w; `),z?g?ee+=` vec4 color = a_color; `:p?ee+=` float compressed = a_color; float r = floor(compressed * SHIFT_RIGHT_11); compressed -= r * SHIFT_LEFT_11; float g = floor(compressed * SHIFT_RIGHT_5); compressed -= g * SHIFT_LEFT_5; float b = compressed; vec3 rgb = vec3(r * NORMALIZE_5, g * NORMALIZE_6, b * NORMALIZE_5); vec4 color = vec4(rgb, 1.0); `:ee+=` vec4 color = vec4(a_color, 1.0); `:ee+=` vec4 color = u_constantColor; `,c||d?ee+=` vec3 position = a_position * u_quantizedVolumeScaleAndOctEncodedRange.xyz; `:ee+=` vec3 position = a_position; `,ee+=` vec3 position_absolute = vec3(czm_model * vec4(position, 1.0)); `,K?(u?ee+=` vec3 normal = czm_octDecode(a_normal); `:h?ee+=` vec3 normal = czm_octDecode(a_normal, u_quantizedVolumeScaleAndOctEncodedRange.w).zxy; `:ee+=` vec3 normal = a_normal; `,ee+=` vec3 normalEC = czm_normal * normal; `):ee+=` vec3 normal = vec3(1.0); `,G&&(ee+=` color = getColorFromStyle(position, position_absolute, color, normal); `),I&&(ee+=` float show = float(getShowFromStyle(position, position_absolute, color, normal)); `),w?ee+=` gl_PointSize = getPointSizeFromStyle(position, position_absolute, color, normal) * czm_pixelRatio; `:Z?ee+=` vec4 positionEC = czm_modelView * vec4(position, 1.0); float depth = -positionEC.z; gl_PointSize = min((u_geometricError / depth) * u_depthMultiplier, u_pointSize); `:ee+=` gl_PointSize = u_pointSize; `,ee+=` color = color * u_highlightColor; `,K&&C&&(ee+=` float diffuseStrength = czm_getLambertDiffuse(czm_lightDirectionEC, normalEC); diffuseStrength = max(diffuseStrength, 0.4); color.xyz *= diffuseStrength * czm_lightColor; `),ee+=` v_color = color; gl_Position = czm_modelViewProjection * vec4(position, 1.0); `,K&&S&&(ee+=` float visible = step(-normalEC.z, 0.0); gl_Position *= visible; gl_PointSize *= visible; `),I&&(ee+=` gl_Position.w *= float(show); gl_PointSize *= float(show); `),ee+=`} `;let fe=`in vec4 v_color; `;M&&(fe+=`uniform highp sampler2D u_clippingPlanes; uniform mat4 u_clippingPlanesMatrix; uniform vec4 u_clippingPlanesEdgeStyle; `,fe+=` `,fe+=c0(L,s),fe+=` `),fe+=`void main() { out_FragColor = czm_gammaCorrect(v_color); `,M&&(fe+=mA("u_clippingPlanes","u_clippingPlanesMatrix","u_clippingPlanesEdgeStyle")),fe+=`} `,e.splitDirection!==vr.NONE&&(fe=_L.modifyFragmentShader(fe)),l(e._vertexShaderLoaded)&&(ee=e._vertexShaderLoaded(ee)),l(e._fragmentShaderLoaded)&&(fe=e._fragmentShaderLoaded(fe));let Te=e._drawCommand;l(Te.shaderProgram)&&Te.shaderProgram.destroy(),Te.shaderProgram=$t.fromCache({context:s,vertexShaderSource:ee,fragmentShaderSource:fe,attributeLocations:te});try{Te.shaderProgram._bind()}catch{throw new ae("Error generating style shader: this may be caused by a type mismatch, index out-of-bounds, or other syntax error.")}}function Qxt(e,t){if(e._decodingState===fS.READY)return!1;if(e._decodingState===fS.NEEDS_DECODE){let n=e._parsedContent,i=n.draco,o=eb.decodePointCloud(i,t);l(o)&&(e._decodingState=fS.DECODING,o.then(function(r){e._decodingState=fS.READY;let s=l(r.POSITION)?r.POSITION.array:void 0,a=l(r.RGB)?r.RGB.array:void 0,c=l(r.RGBA)?r.RGBA.array:void 0,d=l(r.NORMAL)?r.NORMAL.array:void 0,u=l(r.BATCH_ID)?r.BATCH_ID.array:void 0,h=l(s)&&l(r.POSITION.data.quantization),p=l(d)&&l(r.NORMAL.data.quantization);if(h){let x=r.POSITION.data.quantization,S=x.range;e._quantizedVolumeScale=m.fromElements(S,S,S),e._quantizedVolumeOffset=m.unpack(x.minValues),e._quantizedRange=(1<<x.quantizationBits)-1,e._isQuantizedDraco=!0}p&&(e._octEncodedRange=(1<<r.NORMAL.data.quantization.quantizationBits)-1,e._isOctEncodedDraco=!0);let g=n.styleableProperties,f=i.batchTableProperties;for(let x in f)if(f.hasOwnProperty(x)){let S=r[x];l(g)||(g={}),g[x]={typedArray:S.array,componentCount:S.data.componentsPerAttribute}}l(s)&&(n.positions={typedArray:s});let y=c??a;l(y)&&(n.colors={typedArray:y}),l(d)&&(n.normals={typedArray:d}),l(u)&&(n.batchIds={typedArray:u}),n.styleableProperties=g}).catch(function(r){e._decodingState=fS.FAILED,e._error=r}))}return!0}var jxt=new se,qxt=new m;hA.prototype.update=function(e){let t=e.context;if(l(this._error)){let d=this._error;throw this._error=void 0,d}if(Qxt(this,t))return;let i=!1,o=!F.equals(this._modelMatrix,this.modelMatrix);if(this._mode!==e.mode&&(this._mode=e.mode,o=!0),l(this._drawCommand)||(zxt(this,e),o=!0,i=!0,this._ready=!0,this._parsedContent=void 0),o){F.clone(this.modelMatrix,this._modelMatrix);let d=this._drawCommand.modelMatrix;if(F.clone(this._modelMatrix,d),l(this._rtcCenter)&&F.multiplyByTranslation(d,this._rtcCenter,d),l(this._quantizedVolumeOffset)&&F.multiplyByTranslation(d,this._quantizedVolumeOffset,d),e.mode!==oe.SCENE3D){let h=e.mapProjection,p=F.getColumn(d,3,jxt);se.equals(p,se.UNIT_W)||Pt.basisTo2D(h,d,d)}let u=this._drawCommand.boundingVolume;if(le.clone(this._boundingSphere,u),this._cull){let h=u.center;F.multiplyByPoint(d,h,h);let p=F.getScale(d,qxt);u.radius*=m.maximumComponent(p)}}this.clippingPlanesDirty&&(this.clippingPlanesDirty=!1,i=!0),this._attenuation!==this.attenuation&&(this._attenuation=this.attenuation,i=!0),this.backFaceCulling!==this._backFaceCulling&&(this._backFaceCulling=this.backFaceCulling,i=!0),this.normalShading!==this._normalShading&&(this._normalShading=this.normalShading,i=!0),(this._style!==this.style||this.styleDirty)&&(this._style=this.style,this.styleDirty=!1,i=!0);let r=this.splitDirection!==vr.NONE;this._splittingEnabled!==r&&(this._splittingEnabled=r,i=!0),i&&Jxt(this,e,this._style),this._drawCommand.castShadows=_n.castShadows(this.shadows),this._drawCommand.receiveShadows=_n.receiveShadows(this.shadows);let s=this._highlightColor.alpha<1||this._constantColor.alpha<1||this._styleTranslucent;this._drawCommand.renderState=s?this._translucentRenderState:this._opaqueRenderState,this._drawCommand.pass=s?Ee.TRANSLUCENT:this._opaquePass;let a=e.commandList,c=e.passes;(c.render||c.pick)&&a.push(this._drawCommand)};hA.prototype.isDestroyed=function(){return!1};hA.prototype.destroy=function(){let e=this._drawCommand;return l(e)&&(e.vertexArray=e.vertexArray&&e.vertexArray.destroy(),e.shaderProgram=e.shaderProgram&&e.shaderProgram.destroy()),me(this)};var fA=hA;function bS(e){e=e??Y.EMPTY_OBJECT,this.show=e.show??!0,this.modelMatrix=F.clone(e.modelMatrix??F.IDENTITY),this.shadows=e.shadows??_n.ENABLED,this.maximumMemoryUsage=e.maximumMemoryUsage??256,this.shading=new Cf(e.shading),this.style=e.style,this.frameFailed=new be,this.frameChanged=new be,this._clock=e.clock,this._intervals=e.intervals,this._clippingPlanes=void 0,this.clippingPlanes=e.clippingPlanes,this._pointCloudEyeDomeLighting=new lb,this._loadTimestamp=void 0,this._clippingPlanesState=0,this._styleDirty=!1,this._pickId=void 0,this._totalMemoryUsageInBytes=0,this._frames=[],this._previousInterval=void 0,this._nextInterval=void 0,this._lastRenderedFrame=void 0,this._clockMultiplier=0,this._runningSum=0,this._runningLength=0,this._runningIndex=0,this._runningSamples=new Array(5).fill(0),this._runningAverage=0}Object.defineProperties(bS.prototype,{clippingPlanes:{get:function(){return this._clippingPlanes},set:function(e){fs.setOwner(e,this,"_clippingPlanes")}},totalMemoryUsageInBytes:{get:function(){return this._totalMemoryUsageInBytes}},boundingSphere:{get:function(){if(l(this._lastRenderedFrame))return this._lastRenderedFrame.pointCloud.boundingSphere}}});function $xt(e){return`uniform vec4 czm_pickColor; ${e}`}function e_t(e){return function(t){return St(t,{czm_pickColor:function(){return e._pickId.color}})}}function t_t(){return"czm_pickColor"}bS.prototype.makeStyleDirty=function(){this._styleDirty=!0};bS.prototype._getAverageLoadTime=function(){return this._runningLength===0?.05:this._runningAverage};var n_t=new q;function J8(e){let t=e._clock,n=t.canAnimate&&t.shouldAnimate,i=t.multiplier;return n?i:0}function pS(e,t){return e._intervals.indexOf(t.start)}function i_t(e,t){let n=e._intervals,i=e._clock,o=J8(e);if(o===0)return;let r=e._getAverageLoadTime(),s=q.addSeconds(i.currentTime,r*o,n_t),a=n.indexOf(s),c=pS(e,t);return a===c&&(o>=0?++a:--a),n.get(a)}function o_t(e){let t=e._intervals,i=e._clock.currentTime,o=t.indexOf(i);return t.get(o)}function r_t(e,t,n){let i=J8(e),o=pS(e,t),r=pS(e,n);return i>=0?o>=r:o<=r}function oSe(e,t){return function(n){let i=l(n.message)?n.message:n.toString();e.frameFailed.numberOfListeners>0?e.frameFailed.raiseEvent({uri:t,message:i}):(console.log(`A frame failed to load: ${t}`),console.log(`Error: ${i}`))}}function s_t(e,t,n){let i=pS(e,t),o=e._frames,r=o[i];if(!l(r)){let s=t.data.transform,a=l(s)?F.fromArray(s):void 0,c=t.data.uri;r={pointCloud:void 0,transform:a,timestamp:Si(),sequential:!0,ready:!1,touchedFrameNumber:n.frameNumber,uri:c},o[i]=r,Ze.fetchArrayBuffer({url:c}).then(function(d){r.pointCloud=new fA({arrayBuffer:d,cull:!0,fragmentShaderLoaded:$xt,uniformMapLoaded:e_t(e),pickIdLoaded:t_t})}).catch(oSe(e,c))}return r}function a_t(e,t){e._runningSum+=t,e._runningSum-=e._runningSamples[e._runningIndex],e._runningSamples[e._runningIndex]=t,e._runningLength=Math.min(e._runningLength+1,e._runningSamples.length),e._runningIndex=(e._runningIndex+1)%e._runningSamples.length,e._runningAverage=e._runningSum/e._runningLength}function c_t(e,t,n,i){t.touchedFrameNumber<i.frameNumber-1&&(t.sequential=!1);let o=t.pointCloud;if(l(o)&&!t.ready){let r=i.commandList,s=r.length;if(rSe(e,t,n,i),o.ready&&(t.ready=!0,e._totalMemoryUsageInBytes+=o.geometryByteLength,r.length=s,t.sequential)){let a=(Si()-t.timestamp)/1e3;a_t(e,a)}}t.touchedFrameNumber=i.frameNumber}var l_t=new F;function d_t(e,t){let n=e.shading;return l(n)&&l(n.baseResolution)?n.baseResolution:l(t.boundingSphere)?X.cbrt(t.boundingSphere.volume()/t.pointsLength):0}function u_t(e){let t=e.shading;return l(t)&&l(t.maximumAttenuation)?t.maximumAttenuation:10}var m_t=new Cf;function rSe(e,t,n,i){let o=e.shading??m_t,r=t.pointCloud,s=t.transform??F.IDENTITY;r.modelMatrix=F.multiplyTransformation(e.modelMatrix,s,l_t),r.style=e.style,r.time=n.timeSinceLoad,r.shadows=e.shadows,r.clippingPlanes=e._clippingPlanes,r.isClipped=n.isClipped,r.attenuation=o.attenuation,r.backFaceCulling=o.backFaceCulling,r.normalShading=o.normalShading,r.geometricError=d_t(e,r),r.geometricErrorScale=o.geometricErrorScale,r.maximumAttenuation=u_t(e);try{r.update(i)}catch(a){oSe(e,t.uri)(a)}t.touchedFrameNumber=i.frameNumber}function K8(e,t,n,i){let o=s_t(e,t,i);c_t(e,o,n,i)}function h_t(e){return function(t){return t.touchedFrameNumber<e.frameNumber}}function sSe(e,t){let n=e._frames,i=n.length;for(let o=0;o<i;++o){let r=n[o];if(l(r)&&(!l(t)||t(r))){let s=r.pointCloud;r.ready&&(e._totalMemoryUsageInBytes-=s.geometryByteLength),l(s)&&s.destroy(),r===e._lastRenderedFrame&&(e._lastRenderedFrame=void 0),n[o]=void 0}}}function f_t(e,t){let n=pS(e,t),i=e._frames[n];if(l(i)&&i.ready)return i}function iSe(e,t,n,i,o){return l(n)?n.ready?!0:(K8(e,t,i,o),n.ready):!1}function p_t(e,t,n,i,o){let r,s,a,c=e._intervals,d=e._frames,u=pS(e,n),h=pS(e,t);if(u>=h){for(r=u;r>=h;--r)if(s=c.get(r),a=d[r],iSe(e,s,a,i,o))return s}else for(r=u;r<=h;++r)if(s=c.get(r),a=d[r],iSe(e,s,a,i,o))return s;return t}function b_t(e,t,n){let i=e._frames,o=i.length;for(let r=0;r<o;++r){let s=i[r];l(s)&&l(s.pointCloud)&&(s.pointCloud.clippingPlanesDirty=t,s.pointCloud.styleDirty=n)}}var TL={timeSinceLoad:0,isClipped:!1,clippingPlanesDirty:!1};bS.prototype.update=function(e){if(e.mode===oe.MORPHING||!this.show)return;l(this._pickId)||(this._pickId=e.context.createPickId({primitive:this})),l(this._loadTimestamp)||(this._loadTimestamp=q.clone(e.time));let t=Math.max(q.secondsDifference(e.time,this._loadTimestamp)*1e3,0),n=this._clippingPlanes,i=0,o=!1,r=l(n)&&n.enabled;r&&(n.update(e),i=n.clippingPlanesState),this._clippingPlanesState!==i&&(this._clippingPlanesState=i,o=!0);let s=this._styleDirty;this._styleDirty=!1,(o||s)&&b_t(this,o,s),TL.timeSinceLoad=t,TL.isClipped=r;let a=this.shading,c=this._pointCloudEyeDomeLighting,d=e.commandList,u=d.length,h=this._previousInterval,p=this._nextInterval,g=o_t(this);if(!l(g))return;let f=!1,y=J8(this),x=y===0;y!==this._clockMultiplier&&(f=!0,this._clockMultiplier=y),(!l(h)||x)&&(h=g),(!l(p)||f||r_t(this,g,p))&&(p=i_t(this,g)),h=p_t(this,h,g,TL,e);let S=f_t(this,h);l(S)||(K8(this,h,TL,e),S=this._lastRenderedFrame),l(S)&&rSe(this,S,TL,e),l(p)&&K8(this,p,TL,e);let C=this;l(S)&&!l(this._lastRenderedFrame)&&e.afterRender.push(function(){return!0}),l(S)&&S!==this._lastRenderedFrame&&C.frameChanged.numberOfListeners>0&&e.afterRender.push(function(){return C.frameChanged.raiseEvent(C),!0}),this._previousInterval=h,this._nextInterval=p,this._lastRenderedFrame=S;let V=this._totalMemoryUsageInBytes,L=this.maximumMemoryUsage*1024*1024;V>L&&sSe(this,h_t(e));let E=d.length-u;l(a)&&a.attenuation&&a.eyeDomeLighting&&E>0&&c.update(e,u,a,this.boundingSphere)};bS.prototype.isDestroyed=function(){return!1};bS.prototype.destroy=function(){return sSe(this),this._clippingPlanes=this._clippingPlanes&&this._clippingPlanes.destroy(),this._pickId=this._pickId&&this._pickId.destroy(),me(this)};var SL=bS;function lSe(e,t){if(l(t)){let n=t.clock;l(n)&&n.getValue(e)}}function g_t(e){e._renderLoopRunning=!0;let t=0;function n(i){if(!e.isDestroyed())if(e._useDefaultRenderLoop)try{let o=e._targetFrameRate;if(!l(o))e.resize(),e.render(),requestAnimationFrame(n);else{let r=1e3/o,s=i-t;s>r&&(e.resize(),e.render(),t=i-s%r),requestAnimationFrame(n)}}catch(o){e._useDefaultRenderLoop=!1,e._renderLoopRunning=!1,e._showRenderLoopErrors&&e.showErrorPanel("An error occurred while rendering. Rendering has stopped.",void 0,o)}else e._renderLoopRunning=!1}requestAnimationFrame(n)}function dSe(e){let t=e._useBrowserRecommendedResolution?1:window.devicePixelRatio;return t*=e._resolutionScale,l(e._scene)&&(e._scene.pixelRatio=t),t}function uSe(e){let t=e._canvas,n=t.clientWidth,i=t.clientHeight,o=dSe(e);e._canvasClientWidth=n,e._canvasClientHeight=i,n*=o,i*=o,t.width=n,t.height=i,e._canRender=n!==0&&i!==0,e._lastDevicePixelRatio=window.devicePixelRatio}function mSe(e){let t=e._canvas,n=t.width,i=t.height;if(n!==0&&i!==0){let o=e._scene.camera.frustum;l(o.aspectRatio)?o.aspectRatio=n/i:(o.top=o.right*(i/n),o.bottom=-o.top)}}function Go(e,t){e=Xn(e),t=t??Y.EMPTY_OBJECT;let n=document.createElement("div");n.className="cesium-widget",e.appendChild(n);let i=document.createElement("canvas"),o=Bt.supportsImageRenderingPixelated();this._supportsImageRenderingPixelated=o,o&&(i.style.imageRendering=Bt.imageRenderingValue()),i.oncontextmenu=function(){return!1},i.onselectstart=function(){return!1};function r(){i!==i.ownerDocument.activeElement&&i.ownerDocument.activeElement.blur()}(t.blurActiveElementOnCanvasFocus??!0)&&(i.addEventListener("mousedown",r),i.addEventListener("pointerdown",r)),n.appendChild(i);let a=document.createElement("div");a.className="cesium-widget-credits";let c=l(t.creditContainer)?Xn(t.creditContainer):n;c.appendChild(a);let d=l(t.creditViewport)?Xn(t.creditViewport):n,u=t.showRenderLoopErrors??!0,h=t.useBrowserRecommendedResolution??!0;this._element=n,this._container=e,this._canvas=i,this._canvasClientWidth=0,this._canvasClientHeight=0,this._lastDevicePixelRatio=0,this._creditViewport=d,this._creditContainer=c,this._innerCreditContainer=a,this._canRender=!1,this._renderLoopRunning=!1,this._showRenderLoopErrors=u,this._resolutionScale=1,this._useBrowserRecommendedResolution=h,this._forceResize=!1,this._entityView=void 0,this._clockTrackedDataSource=void 0,this._trackedEntity=void 0,this._needTrackedEntityUpdate=!1,this._zoomIsFlight=!1,this._zoomTarget=void 0,this._zoomPromise=void 0,this._zoomOptions=void 0,this._trackedEntityChanged=new be,this._allowDataSourcesToSuspendAnimation=!0,this._clock=l(t.clock)?t.clock:new xh,l(t.shouldAnimate)&&(this._clock.shouldAnimate=t.shouldAnimate),uSe(this);try{let p=t.ellipsoid??ne.default,g=new $9({canvas:i,contextOptions:t.contextOptions,creditContainer:a,creditViewport:d,ellipsoid:p,mapProjection:t.mapProjection,orderIndependentTranslucency:t.orderIndependentTranslucency,scene3DOnly:t.scene3DOnly??!1,shadows:t.shadows,mapMode2D:t.mapMode2D,requestRenderMode:t.requestRenderMode,maximumRenderTimeChange:t.maximumRenderTimeChange,depthPlaneEllipsoidOffset:t.depthPlaneEllipsoidOffset,msaaSamples:t.msaaSamples});this._scene=g,g.camera.constrainedAxis=m.UNIT_Z,dSe(this),mSe(this);let f=t.globe;l(f)||(f=new jw(p)),f!==!1&&(g.globe=f,g.globe.shadows=t.terrainShadows??_n.RECEIVE_ONLY);let y=t.skyBox;!l(y)&&ne.WGS84.equals(p)&&(y=rA.createEarthSkyBox()),y!==!1&&(g.skyBox=y,g.sun=new uA,ne.WGS84.equals(p)&&(g.moon=new iF));let x=t.skyAtmosphere;!l(x)&&ne.WGS84.equals(p)&&(x=new nA(p),x.show=t.globe!==!1&&f.show),x!==!1&&(g.skyAtmosphere=x);let S=t.baseLayer;t.globe!==!1&&S!==!1&&(l(S)||(S=za.fromWorldImagery()),g.imageryLayers.add(S)),l(t.terrainProvider)&&t.globe!==!1&&(g.terrainProvider=t.terrainProvider),l(t.terrain)&&t.globe!==!1&&g.setTerrain(t.terrain),this._screenSpaceEventHandler=new iu(i),l(t.sceneMode)&&(t.sceneMode===oe.SCENE2D&&this._scene.morphTo2D(0),t.sceneMode===oe.COLUMBUS_VIEW&&this._scene.morphToColumbusView(0)),this._useDefaultRenderLoop=void 0,this.useDefaultRenderLoop=t.useDefaultRenderLoop??!0,this._targetFrameRate=void 0,this.targetFrameRate=t.targetFrameRate;let C=this;this._onRenderError=function(W,v){C._useDefaultRenderLoop=!1,C._renderLoopRunning=!1,C._showRenderLoopErrors&&C.showErrorPanel("An error occurred while rendering. Rendering has stopped.",void 0,v)},g.renderError.addEventListener(this._onRenderError);let V=t.dataSources,L=!1;l(V)||(V=new nv,L=!0);let Z=new kv({scene:g,dataSourceCollection:V}),E=new dr;this._dataSourceChangedListeners={},this._automaticallyTrackDataSourceClocks=t.automaticallyTrackDataSourceClocks??!0,this._dataSourceCollection=V,this._destroyDataSourceCollection=L,this._dataSourceDisplay=Z,this._eventHelper=E,this._canAnimateUpdateCallback=this._updateCanAnimate,E.add(this._clock.onTick,Go.prototype._onTick,this),E.add(g.morphStart,Go.prototype._clearTrackedObject,this),E.add(V.dataSourceAdded,Go.prototype._onDataSourceAdded,this),E.add(V.dataSourceRemoved,Go.prototype._onDataSourceRemoved,this),E.add(g.postRender,Go.prototype._postRender,this);let P=V.length;for(let W=0;W<P;W++)this._dataSourceAdded(V,V.get(W));this._dataSourceAdded(void 0,Z.defaultDataSource),E.add(V.dataSourceAdded,Go.prototype._dataSourceAdded,this),E.add(V.dataSourceRemoved,Go.prototype._dataSourceRemoved,this)}catch(p){throw u&&this.showErrorPanel("Error constructing CesiumWidget.",'Visit <a href="http://get.webgl.org">http://get.webgl.org</a> to verify that your web browser and hardware support WebGL. Consider trying a different web browser or updating your video drivers. Detailed error information is below:',p),p}}Object.defineProperties(Go.prototype,{container:{get:function(){return this._container}},canvas:{get:function(){return this._canvas}},creditContainer:{get:function(){return this._creditContainer}},creditViewport:{get:function(){return this._creditViewport}},scene:{get:function(){return this._scene}},imageryLayers:{get:function(){return this._scene.imageryLayers}},terrainProvider:{get:function(){return this._scene.terrainProvider},set:function(e){this._scene.terrainProvider=e}},creditDisplay:{get:function(){return this._scene.frameState.creditDisplay}},dataSourceDisplay:{get:function(){return this._dataSourceDisplay}},entities:{get:function(){return this._dataSourceDisplay.defaultDataSource.entities}},dataSources:{get:function(){return this._dataSourceCollection}},camera:{get:function(){return this._scene.camera}},ellipsoid:{get:function(){return this._scene.ellipsoid}},clock:{get:function(){return this._clock}},screenSpaceEventHandler:{get:function(){return this._screenSpaceEventHandler}},targetFrameRate:{get:function(){return this._targetFrameRate},set:function(e){this._targetFrameRate=e}},useDefaultRenderLoop:{get:function(){return this._useDefaultRenderLoop},set:function(e){this._useDefaultRenderLoop!==e&&(this._useDefaultRenderLoop=e,e&&!this._renderLoopRunning&&g_t(this))}},resolutionScale:{get:function(){return this._resolutionScale},set:function(e){this._resolutionScale!==e&&(this._resolutionScale=e,this._forceResize=!0)}},useBrowserRecommendedResolution:{get:function(){return this._useBrowserRecommendedResolution},set:function(e){this._useBrowserRecommendedResolution!==e&&(this._useBrowserRecommendedResolution=e,this._forceResize=!0)}},allowDataSourcesToSuspendAnimation:{get:function(){return this._allowDataSourcesToSuspendAnimation},set:function(e){this._allowDataSourcesToSuspendAnimation=e}},trackedEntity:{get:function(){return this._trackedEntity},set:function(e){if(this._trackedEntity!==e){this._trackedEntity=e,Q8(this);let t=this.scene,n=t.mode;!l(e)||!l(e.position)?(this._needTrackedEntityUpdate=!1,(n===oe.COLUMBUS_VIEW||n===oe.SCENE2D)&&(t.screenSpaceCameraController.enableTranslate=!0),(n===oe.COLUMBUS_VIEW||n===oe.SCENE3D)&&(t.screenSpaceCameraController.enableTilt=!0),this._entityView=void 0,this.camera.lookAtTransform(F.IDENTITY)):this._needTrackedEntityUpdate=!0,this._trackedEntityChanged.raiseEvent(e),this.scene.requestRender()}}},trackedEntityChanged:{get:function(){return this._trackedEntityChanged}},clockTrackedDataSource:{get:function(){return this._clockTrackedDataSource},set:function(e){this._clockTrackedDataSource!==e&&(this._clockTrackedDataSource=e,lSe(this.clock,e))}}});Go.prototype.showErrorPanel=function(e,t,n){let i=this._element,o=document.createElement("div");o.className="cesium-widget-errorPanel";let r=document.createElement("div");r.className="cesium-widget-errorPanel-content",o.appendChild(r);let s=document.createElement("div");s.className="cesium-widget-errorPanel-header",s.appendChild(document.createTextNode(e)),r.appendChild(s);let a=document.createElement("div");a.className="cesium-widget-errorPanel-scroll",r.appendChild(a);function c(){a.style.maxHeight=`${Math.max(Math.round(i.clientHeight*.9-100),30)}px`}c(),l(window.addEventListener)&&window.addEventListener("resize",c,!1);let d=l(t),u=l(n);if(d||u){let g=document.createElement("div");if(g.className="cesium-widget-errorPanel-message",a.appendChild(g),u){let f=jf(n);d||(typeof n=="string"&&(n=new Error(n)),t=jf({name:n.name,message:n.message}),f=n.stack),typeof console<"u"&&console.error(`${e} ${t} ${f}`);let y=document.createElement("div");y.className="cesium-widget-errorPanel-message-details collapsed";let x=document.createElement("span");x.className="cesium-widget-errorPanel-more-details",x.appendChild(document.createTextNode("See more...")),y.appendChild(x),y.onclick=function(S){y.removeChild(x),y.appendChild(document.createTextNode(f)),y.className="cesium-widget-errorPanel-message-details",r.className="cesium-widget-errorPanel-content expanded",y.onclick=void 0},a.appendChild(y)}g.innerHTML=`<p>${t}</p>`}let h=document.createElement("div");h.className="cesium-widget-errorPanel-buttonPanel",r.appendChild(h);let p=document.createElement("button");p.setAttribute("type","button"),p.className="cesium-button",p.appendChild(document.createTextNode("OK")),p.onclick=function(){l(c)&&l(window.removeEventListener)&&window.removeEventListener("resize",c,!1),i.removeChild(o)},h.appendChild(p),i.appendChild(o)};Go.prototype.isDestroyed=function(){return!1};Go.prototype.destroy=function(){let e=this.dataSources,t=e.length;for(let n=0;n<t;n++)this._dataSourceRemoved(e,e.get(n));this._dataSourceRemoved(void 0,this._dataSourceDisplay.defaultDataSource),this._dataSourceDisplay=this._dataSourceDisplay.destroy(),l(this._scene)&&(this._scene.renderError.removeEventListener(this._onRenderError),this._scene=this._scene.destroy()),this._container.removeChild(this._element),this._creditContainer.removeChild(this._innerCreditContainer),this._eventHelper.removeAll(),this._destroyDataSourceCollection&&(this._dataSourceCollection=this._dataSourceCollection.destroy()),me(this)};Go.prototype.resize=function(){let e=this._canvas;!this._forceResize&&this._canvasClientWidth===e.clientWidth&&this._canvasClientHeight===e.clientHeight&&this._lastDevicePixelRatio===window.devicePixelRatio||(this._forceResize=!1,uSe(this),mSe(this),this._scene.requestRender())};Go.prototype.render=function(){if(this._canRender){this._scene.initializeFrame();let e=this._clock.tick();this._scene.render(e)}else this._clock.tick()};Go.prototype._dataSourceAdded=function(e,t){t.entities.collectionChanged.addEventListener(Go.prototype._onEntityCollectionChanged,this)};Go.prototype._dataSourceRemoved=function(e,t){let n=t.entities;n.collectionChanged.removeEventListener(Go.prototype._onEntityCollectionChanged,this),l(this.trackedEntity)&&n.getById(this.trackedEntity.id)===this.trackedEntity&&(this.trackedEntity=void 0)};Go.prototype._updateCanAnimate=function(e){this._clock.canAnimate=e};var y_t=new le;Go.prototype._onTick=function(e){let t=e.currentTime,n=this._dataSourceDisplay.update(t);this._allowDataSourcesToSuspendAnimation&&this._canAnimateUpdateCallback(n);let i=this._entityView;if(l(i)){let o=this._trackedEntity;this._dataSourceDisplay.getBoundingSphere(o,!1,i.boundingSphere??y_t)===dt.DONE&&i.update(t)}};Go.prototype._onEntityCollectionChanged=function(e,t,n){let i=n.length;for(let o=0;o<i;o++){let r=n[o];this.trackedEntity===r&&(this.trackedEntity=void 0)}};Go.prototype._clearTrackedObject=function(){this.trackedEntity=void 0};Go.prototype._onDataSourceChanged=function(e){this.clockTrackedDataSource===e&&lSe(this.clock,e)};Go.prototype._onDataSourceAdded=function(e,t){this._automaticallyTrackDataSourceClocks&&(this.clockTrackedDataSource=t);let n=t.entities.id,i=this._eventHelper.add(t.changedEvent,Go.prototype._onDataSourceChanged,this);this._dataSourceChangedListeners[n]=i};Go.prototype._onDataSourceRemoved=function(e,t){let n=this.clockTrackedDataSource===t,i=t.entities.id;if(this._dataSourceChangedListeners[i](),this._dataSourceChangedListeners[i]=void 0,n){let o=e.length;this._automaticallyTrackDataSourceClocks&&o>0?this.clockTrackedDataSource=e.get(o-1):this.clockTrackedDataSource=void 0}};Go.prototype.zoomTo=function(e,t){return hSe(this,e,{offset:t},!1)};Go.prototype.flyTo=function(e,t){return hSe(this,e,t,!0)};function hSe(e,t,n,i){Q8(e);let o=new Promise(r=>{e._completeZoom=function(s){r(s)}});return e._zoomPromise=o,e._zoomIsFlight=i,e._zoomOptions=n,Promise.resolve(t).then(function(r){if(e._zoomPromise===o){if(r instanceof za){let s;l(r.imageryProvider)?s=Promise.resolve(r.getImageryRectangle()):s=new Promise(a=>{let c=r.readyEvent.addEventListener(()=>{c(),a(r.getImageryRectangle())})}),s.then(function(a){return PT(a,e.scene)}).then(function(a){e._zoomPromise===o&&(e._zoomTarget=a)});return}if(r instanceof bs||r instanceof SL||r instanceof Ay){e._zoomTarget=r;return}if(r.isLoading&&l(r.loadingEvent)){let s=r.loadingEvent.addEventListener(function(){s(),e._zoomPromise===o&&(e._zoomTarget=r.entities.values.slice(0))});return}if(Array.isArray(r)){e._zoomTarget=r.slice(0);return}r=r.values??r,l(r.entities)&&(r=r.entities.values),Array.isArray(r)?e._zoomTarget=r.slice(0):e._zoomTarget=[r]}}),e.scene.requestRender(),o}function pA(e){e._zoomPromise=void 0,e._zoomTarget=void 0,e._zoomOptions=void 0}function Q8(e){let t=e._zoomPromise;l(t)&&(pA(e),e._completeZoom(!1))}Go.prototype._postRender=function(){x_t(this),__t(this)};var aSe=new le;function x_t(e){let t=e._zoomTarget;if(!l(t)||e.scene.mode===oe.MORPHING)return;let n=e.scene,i=n.camera,o=e._zoomOptions??{},r;function s(u){l(o.offset)||(o.offset=new sm(0,-.5,u.radius)),r={offset:o.offset,duration:o.duration,maximumHeight:o.maximumHeight,complete:function(){e._completeZoom(!0)},cancel:function(){e._completeZoom(!1)}},e._zoomIsFlight?i.flyToBoundingSphere(t.boundingSphere,r):(i.viewBoundingSphere(u,o.offset),i.lookAtTransform(F.IDENTITY),e._completeZoom(!0)),pA(e)}if(t instanceof SL){if(l(t.boundingSphere)){s(t.boundingSphere);return}let u=t.frameChanged.addEventListener(function(h){s(h.boundingSphere),u()});return}if(t instanceof bs||t instanceof Ay){s(t.boundingSphere);return}if(t instanceof he){r={destination:n.ellipsoid.cartographicToCartesian(t),duration:o.duration,maximumHeight:o.maximumHeight,complete:function(){e._completeZoom(!0)},cancel:function(){e._completeZoom(!1)}},e._zoomIsFlight?i.flyTo(r):(i.setView(r),e._completeZoom(!0)),pA(e);return}let a=t,c=[];for(let u=0,h=a.length;u<h;u++){let p=e._dataSourceDisplay.getBoundingSphere(a[u],!1,aSe);if(p===dt.PENDING)return;p!==dt.FAILED&&c.push(le.clone(aSe))}if(c.length===0){Q8(e);return}e.trackedEntity=void 0;let d=le.fromBoundingSpheres(c);e._zoomIsFlight?(pA(e),i.flyToBoundingSphere(d,{duration:o.duration,maximumHeight:o.maximumHeight,complete:function(){e._completeZoom(!0)},cancel:function(){e._completeZoom(!1)},offset:o.offset})):(i.viewBoundingSphere(d,o.offset),i.lookAtTransform(F.IDENTITY),pA(e),e._completeZoom(!0))}var cSe=new le;function __t(e){if(!e._needTrackedEntityUpdate)return;let t=e._trackedEntity,n=e.clock.currentTime,i=J.getValueOrUndefined(t.position,n);if(!l(i))return;let o=e.scene,r=e._dataSourceDisplay.getBoundingSphere(t,!1,cSe);if(r===dt.PENDING)return;let s=o.mode;(s===oe.COLUMBUS_VIEW||s===oe.SCENE2D)&&(o.screenSpaceCameraController.enableTranslate=!1),(s===oe.COLUMBUS_VIEW||s===oe.SCENE3D)&&(o.screenSpaceCameraController.enableTilt=!1);let a=r!==dt.FAILED?cSe:void 0;e._entityView=new Dv(t,o,o.ellipsoid),e._entityView.update(n,a),e._needTrackedEntityUpdate=!1}var bA=Go;var PHi=_(T(),1),gA=`uniform sampler2D u_noiseTexture; uniform vec3 u_noiseTextureDimensions; uniform float u_noiseDetail; in vec2 v_offset; in vec3 v_maximumSize; in vec4 v_color; in float v_slice; in float v_brightness; float wrap(float value, float rangeLength) { if(value < 0.0) { float absValue = abs(value); float modValue = mod(absValue, rangeLength); return mod(rangeLength - modValue, rangeLength); } return mod(value, rangeLength); } vec3 wrapVec(vec3 value, float rangeLength) { return vec3(wrap(value.x, rangeLength), wrap(value.y, rangeLength), wrap(value.z, rangeLength)); } vec2 voxelToUV(vec3 voxelIndex) { float textureSliceWidth = u_noiseTextureDimensions.x; float noiseTextureRows = u_noiseTextureDimensions.y; float inverseNoiseTextureRows = u_noiseTextureDimensions.z; float textureSliceWidthSquared = textureSliceWidth * textureSliceWidth; vec2 inverseNoiseTextureDimensions = vec2(noiseTextureRows / textureSliceWidthSquared, inverseNoiseTextureRows / textureSliceWidth); vec3 wrappedIndex = wrapVec(voxelIndex, textureSliceWidth); float column = mod(wrappedIndex.z, textureSliceWidth * inverseNoiseTextureRows); float row = floor(wrappedIndex.z / textureSliceWidth * noiseTextureRows); float xPixelCoord = wrappedIndex.x + column * textureSliceWidth; float yPixelCoord = wrappedIndex.y + row * textureSliceWidth; return vec2(xPixelCoord, yPixelCoord) * inverseNoiseTextureDimensions; } // Interpolate a voxel with its neighbor (along the positive X-axis) vec4 lerpSamplesX(vec3 voxelIndex, float x) { vec2 uv0 = voxelToUV(voxelIndex); vec2 uv1 = voxelToUV(voxelIndex + vec3(1.0, 0.0, 0.0)); vec4 sample0 = texture(u_noiseTexture, uv0); vec4 sample1 = texture(u_noiseTexture, uv1); return mix(sample0, sample1, x); } vec4 sampleNoiseTexture(vec3 position) { float textureSliceWidth = u_noiseTextureDimensions.x; vec3 recenteredPos = position + vec3(textureSliceWidth / 2.0); vec3 lerpValue = fract(recenteredPos); vec3 voxelIndex = floor(recenteredPos); vec4 xLerp00 = lerpSamplesX(voxelIndex, lerpValue.x); vec4 xLerp01 = lerpSamplesX(voxelIndex + vec3(0.0, 0.0, 1.0), lerpValue.x); vec4 xLerp10 = lerpSamplesX(voxelIndex + vec3(0.0, 1.0, 0.0), lerpValue.x); vec4 xLerp11 = lerpSamplesX(voxelIndex + vec3(0.0, 1.0, 1.0), lerpValue.x); vec4 yLerp0 = mix(xLerp00, xLerp10, lerpValue.y); vec4 yLerp1 = mix(xLerp01, xLerp11, lerpValue.y); return mix(yLerp0, yLerp1, lerpValue.z); } // Intersection with a unit sphere with radius 0.5 at center (0, 0, 0). bool intersectSphere(vec3 origin, vec3 dir, float slice, out vec3 point, out vec3 normal) { float A = dot(dir, dir); float B = dot(origin, dir); float C = dot(origin, origin) - 0.25; float discriminant = (B * B) - (A * C); if(discriminant < 0.0) { return false; } float root = sqrt(discriminant); float t = (-B - root) / A; if(t < 0.0) { t = (-B + root) / A; } point = origin + t * dir; if(slice >= 0.0) { point.z = (slice / 2.0) - 0.5; if(length(point) > 0.5) { return false; } } normal = normalize(point); point -= czm_epsilon2 * normal; return true; } // Transforms the ray origin and direction into unit sphere space, // then transforms the result back into the ellipsoid's space. bool intersectEllipsoid(vec3 origin, vec3 dir, vec3 center, vec3 scale, float slice, out vec3 point, out vec3 normal) { if(scale.x <= 0.01 || scale.y < 0.01 || scale.z < 0.01) { return false; } vec3 o = (origin - center) / scale; vec3 d = dir / scale; vec3 p, n; bool intersected = intersectSphere(o, d, slice, p, n); if(intersected) { point = (p * scale) + center; normal = n; } return intersected; } // Assume that if phase shift is being called for octave i, // the frequency is of i - 1. This saves us from doing extra // division / multiplication operations. vec2 phaseShift2D(vec2 p, vec2 freq) { return (czm_pi / 2.0) * sin(freq.yx * p.yx); } vec2 phaseShift3D(vec3 p, vec2 freq) { return phaseShift2D(p.xy, freq) + czm_pi * vec2(sin(freq.x * p.z)); } // The cloud texture function derived from Gardner's 1985 paper, // "Visual Simulation of Clouds." // https://www.cs.drexel.edu/~david/Classes/Papers/p297-gardner.pdf const float T0 = 0.6; // contrast of the texture pattern const float k = 0.1; // computed to produce a maximum value of 1 const float C0 = 0.8; // coefficient const float FX0 = 0.6; // frequency X const float FY0 = 0.6; // frequency Y const int octaves = 5; float T(vec3 point) { vec2 sum = vec2(0.0); float Ci = C0; vec2 FXY = vec2(FX0, FY0); vec2 PXY = vec2(0.0); for(int i = 1; i <= octaves; i++) { PXY = phaseShift3D(point, FXY); Ci *= 0.707; FXY *= 2.0; vec2 sinTerm = sin(FXY * point.xy + PXY); sum += Ci * sinTerm + vec2(T0); } return k * sum.x * sum.y; } const float a = 0.5; // fraction of surface reflection due to ambient or scattered light, const float t = 0.4; // fraction of texture shading const float s = 0.25; // fraction of specular reflection float I(float Id, float Is, float It) { return (1.0 - a) * ((1.0 - t) * ((1.0 - s) * Id + s * Is) + t * It) + a; } const vec3 lightDir = normalize(vec3(0.2, -1.0, 0.7)); vec4 drawCloud(vec3 rayOrigin, vec3 rayDir, vec3 cloudCenter, vec3 cloudScale, float cloudSlice, float brightness) { vec3 cloudPoint, cloudNormal; if(!intersectEllipsoid(rayOrigin, rayDir, cloudCenter, cloudScale, cloudSlice, cloudPoint, cloudNormal)) { return vec4(0.0); } float Id = clamp(dot(cloudNormal, -lightDir), 0.0, 1.0); // diffuse reflection float Is = max(pow(dot(-lightDir, -rayDir), 2.0), 0.0); // specular reflection float It = T(cloudPoint); // texture function float intensity = I(Id, Is, It); vec3 color = vec3(intensity * clamp(brightness, 0.1, 1.0)); vec4 noise = sampleNoiseTexture(u_noiseDetail * cloudPoint); float W = noise.x; float W2 = noise.y; float W3 = noise.z; // The dot product between the cloud's normal and the ray's direction is greatest // in the center of the ellipsoid's surface. It decreases towards the edge. // Thus, it is used to blur the areas leading to the edges of the ellipsoid, // so that no harsh lines appear. // The first (and biggest) layer of worley noise is then subtracted from this. // The final result is scaled up so that the base cloud is not too translucent. float ndDot = clamp(dot(cloudNormal, -rayDir), 0.0, 1.0); float TR = pow(ndDot, 3.0) - W; // translucency TR *= 1.3; // Subtracting the second and third layers of worley noise is more complicated. // If these layers of noise were simply subtracted from the current translucency, // the shape derived from the first layer of noise would be completely deleted. // The erosion of this noise should thus be constricted to the edges of the cloud. // However, because the edges of the ellipsoid were already blurred away, mapping // the noise to (1.0 - ndDot) will have no impact on most of the cloud's appearance. // The value of (0.5 - ndDot) provides the best compromise. float minusDot = 0.5 - ndDot; // Even with the previous calculation, subtracting the second layer of wnoise // erode too much of the cloud. The addition of it, however, will detailed // volume to the cloud. As long as the noise is only added and not subtracted, // the results are aesthetically pleasing. // The minusDot product is mapped in a way that it is larger at the edges of // the ellipsoid, so a subtraction and min operation are used instead of // an addition and max one. TR -= min(minusDot * W2, 0.0); // The third level of worley noise is subtracted from the result, with some // modifications. First, a scalar is added to minusDot so that the noise // starts affecting the shape farther away from the center of the ellipsoid's // surface. Then, it is scaled down so its impact is not too intense. TR -= 0.8 * (minusDot + 0.25) * W3; // The texture function's shading does not correlate with the shape of the cloud // produced by the layers of noise, so an extra shading scalar is calculated. // The darkest areas of the cloud are assigned to be where the noise erodes // the cloud the most. This is then interpolated based on the translucency // and the diffuse shading term of that point in the cloud. float shading = mix(1.0 - 0.8 * W * W, 1.0, Id * TR); // To avoid values that are too dark, this scalar is increased by a small amount // and clamped so it never goes to zero. shading = clamp(shading + 0.2, 0.3, 1.0); // Finally, the contrast of the cloud's color is increased. vec3 finalColor = mix(vec3(0.5), shading * color, 1.15); return vec4(finalColor, clamp(TR, 0.0, 1.0)) * v_color; } void main() { #ifdef DEBUG_BILLBOARDS out_FragColor = vec4(0.0, 0.5, 0.5, 1.0); #endif // To avoid calculations with high values, // we raycast from an arbitrarily smaller space. vec2 coordinate = v_maximumSize.xy * v_offset; vec3 ellipsoidScale = 0.82 * v_maximumSize; vec3 ellipsoidCenter = vec3(0.0); float zOffset = max(ellipsoidScale.z - 10.0, 0.0); vec3 eye = vec3(0, 0, -10.0 - zOffset); vec3 rayDir = normalize(vec3(coordinate, 1.0) - eye); vec3 rayOrigin = eye; #ifdef DEBUG_ELLIPSOIDS vec3 point, normal; if(intersectEllipsoid(rayOrigin, rayDir, ellipsoidCenter, ellipsoidScale, v_slice, point, normal)) { out_FragColor = v_brightness * v_color; } #else #ifndef DEBUG_BILLBOARDS vec4 cloud = drawCloud(rayOrigin, rayDir, ellipsoidCenter, ellipsoidScale, v_slice, v_brightness); if(cloud.w < 0.01) { discard; } out_FragColor = cloud; #endif #endif } `;var wHi=_(T(),1),yA=`#ifdef INSTANCED in vec2 direction; #endif in vec4 positionHighAndScaleX; in vec4 positionLowAndScaleY; in vec4 packedAttribute0; in vec4 packedAttribute1; in vec4 color; out vec2 v_offset; out vec3 v_maximumSize; out vec4 v_color; out float v_slice; out float v_brightness; void main() { // Unpack attributes. vec3 positionHigh = positionHighAndScaleX.xyz; vec3 positionLow = positionLowAndScaleY.xyz; vec2 scale = vec2(positionHighAndScaleX.w, positionLowAndScaleY.w); float show = packedAttribute0.x; float brightness = packedAttribute0.y; vec2 coordinates = packedAttribute0.wz; vec3 maximumSize = packedAttribute1.xyz; float slice = packedAttribute1.w; #ifdef INSTANCED vec2 dir = direction; #else vec2 dir = coordinates; #endif vec2 offset = dir - vec2(0.5, 0.5); vec2 scaledOffset = scale * offset; vec4 p = czm_translateRelativeToEye(positionHigh, positionLow); vec4 positionEC = czm_modelViewRelativeToEye * p; positionEC.xy += scaledOffset; positionEC.xyz *= show; gl_Position = czm_projection * positionEC; v_offset = offset; v_maximumSize = maximumSize; v_color = color; v_slice = slice; v_brightness = brightness; } `;var AHi=_(T(),1),xA=`uniform vec3 u_noiseTextureDimensions; uniform float u_noiseDetail; uniform vec3 u_noiseOffset; in vec2 v_position; float wrap(float value, float rangeLength) { if(value < 0.0) { float absValue = abs(value); float modValue = mod(absValue, rangeLength); return mod(rangeLength - modValue, rangeLength); } return mod(value, rangeLength); } vec3 wrapVec(vec3 value, float rangeLength) { return vec3(wrap(value.x, rangeLength), wrap(value.y, rangeLength), wrap(value.z, rangeLength)); } vec3 random3(vec3 p) { float dot1 = dot(p, vec3(127.1, 311.7, 932.8)); float dot2 = dot(p, vec3(269.5, 183.3, 421.4)); return fract(vec3(sin(dot1 - dot2), cos(dot1 * dot2), dot1 * dot2)); } // Frequency corresponds to cell size. // The higher the frequency, the smaller the cell size. vec3 getWorleyCellPoint(vec3 centerCell, vec3 offset, float freq) { float textureSliceWidth = u_noiseTextureDimensions.x; vec3 cell = centerCell + offset; cell = wrapVec(cell, textureSliceWidth / u_noiseDetail); cell += floor(u_noiseOffset / u_noiseDetail); vec3 p = offset + random3(cell); return p; } float worleyNoise(vec3 p, float freq) { vec3 centerCell = floor(p * freq); vec3 pointInCell = fract(p * freq); float shortestDistance = 1000.0; for(float z = -1.0; z <= 1.0; z++) { for(float y = -1.0; y <= 1.0; y++) { for(float x = -1.0; x <= 1.0; x++) { vec3 offset = vec3(x, y, z); vec3 point = getWorleyCellPoint(centerCell, offset, freq); float distance = length(pointInCell - point); if(distance < shortestDistance) { shortestDistance = distance; } } } } return shortestDistance; } const float MAX_FBM_ITERATIONS = 10.0; float worleyFBMNoise(vec3 p, float octaves, float scale) { float noise = 0.0; float freq = 1.0; float persistence = 0.625; for(float i = 0.0; i < MAX_FBM_ITERATIONS; i++) { if(i >= octaves) { break; } noise += worleyNoise(p * scale, freq * scale) * persistence; persistence *= 0.5; freq *= 2.0; } return noise; } void main() { float textureSliceWidth = u_noiseTextureDimensions.x; float inverseNoiseTextureRows = u_noiseTextureDimensions.z; float x = mod(v_position.x, textureSliceWidth); float y = mod(v_position.y, textureSliceWidth); float sliceRow = floor(v_position.y / textureSliceWidth); float z = floor(v_position.x / textureSliceWidth) + sliceRow * inverseNoiseTextureRows * textureSliceWidth; vec3 position = vec3(x, y, z); position /= u_noiseDetail; float worley0 = clamp(worleyFBMNoise(position, 3.0, 1.0), 0.0, 1.0); float worley1 = clamp(worleyFBMNoise(position, 3.0, 2.0), 0.0, 1.0); float worley2 = clamp(worleyFBMNoise(position, 3.0, 3.0), 0.0, 1.0); out_FragColor = vec4(worley0, worley1, worley2, 1.0); } `;var NHi=_(T(),1),_A=`uniform vec3 u_noiseTextureDimensions; in vec2 position; out vec2 v_position; void main() { gl_Position = vec4(position, 0.1, 1.0); float textureSliceWidth = u_noiseTextureDimensions.x; float noiseTextureRows = u_noiseTextureDimensions.y; float inverseNoiseTextureRows = u_noiseTextureDimensions.z; vec2 transformedPos = (position * 0.5) + vec2(0.5); transformedPos *= textureSliceWidth; transformedPos.x *= textureSliceWidth * inverseNoiseTextureRows; transformedPos.y *= noiseTextureRows; v_position = transformedPos; } `;var UHi=_(T(),1),TA=` in vec2 v_textureCoordinates; void main() { czm_materialInput materialInput; materialInput.s = v_textureCoordinates.s; materialInput.st = v_textureCoordinates; materialInput.str = vec3(v_textureCoordinates, 0.0); materialInput.normalEC = vec3(0.0, 0.0, -1.0); czm_material material = czm_getMaterial(materialInput); out_FragColor = vec4(material.diffuse + material.emission, material.alpha); } `;var fKi=_(T(),1);var HHi=_(T(),1);function LL(e,t){this._tilingScheme=e,this._maximumLevel=t,this._rootNodes=[]}var gS=new ce;function T_t(e,t,n,i){let o=i.length;for(let r=0;r<o;++r){let s=i[r];if(s.x===t&&s.y===n&&s.level===e)return!0}return!1}LL.prototype.addAvailableTileRange=function(e,t,n,i,o){let r=this._tilingScheme,s=this._rootNodes;if(e===0)for(let p=n;p<=o;++p)for(let g=t;g<=i;++g)T_t(e,g,p,s)||s.push(new CL(r,void 0,0,g,p));r.tileXYToRectangle(t,n,e,gS);let a=gS.west,c=gS.north;r.tileXYToRectangle(i,o,e,gS);let d=gS.east,u=gS.south,h=new R_t(e,a,u,d,c);for(let p=0;p<s.length;++p){let g=s[p];j8(g.extent,h)&&Z_t(this._maximumLevel,g,h)}};LL.prototype.computeMaximumLevelAtPosition=function(e){let t;for(let n=0;n<this._rootNodes.length;++n){let i=this._rootNodes[n];if(VL(i.extent,e)){t=i;break}}return l(t)?SA(void 0,t,e):-1};var S_t=[],C_t=[],V_t=new ce,L_t=new ce;LL.prototype.computeBestAvailableLevelOverRectangle=function(e){let t=S_t;t.length=0,e.east<e.west?(t.push(ce.fromRadians(-Math.PI,e.south,e.east,e.north,V_t)),t.push(ce.fromRadians(e.west,e.south,Math.PI,e.north,L_t))):t.push(e);let n=C_t;n.length=0;let i;for(i=0;i<this._rootNodes.length;++i)CA(n,this._rootNodes[i],t);for(i=n.length-1;i>=0;--i)if(l(n[i])&&n[i].length===0)return i;return 0};var fSe=new he;LL.prototype.isTileAvailable=function(e,t,n){let i=this._tilingScheme.tileXYToRectangle(t,n,e,gS);return ce.center(i,fSe),this.computeMaximumLevelAtPosition(fSe)>=e};LL.prototype.computeChildMaskForTile=function(e,t,n){let i=e+1;if(i>=this._maximumLevel)return 0;let o=0;return o|=this.isTileAvailable(i,2*t,2*n+1)?1:0,o|=this.isTileAvailable(i,2*t+1,2*n+1)?2:0,o|=this.isTileAvailable(i,2*t,2*n)?4:0,o|=this.isTileAvailable(i,2*t+1,2*n)?8:0,o};function CL(e,t,n,i,o){this.tilingScheme=e,this.parent=t,this.level=n,this.x=i,this.y=o,this.extent=e.tileXYToRectangle(i,o,n),this.rectangles=[],this._sw=void 0,this._se=void 0,this._nw=void 0,this._ne=void 0}Object.defineProperties(CL.prototype,{nw:{get:function(){return this._nw||(this._nw=new CL(this.tilingScheme,this,this.level+1,this.x*2,this.y*2)),this._nw}},ne:{get:function(){return this._ne||(this._ne=new CL(this.tilingScheme,this,this.level+1,this.x*2+1,this.y*2)),this._ne}},sw:{get:function(){return this._sw||(this._sw=new CL(this.tilingScheme,this,this.level+1,this.x*2,this.y*2+1)),this._sw}},se:{get:function(){return this._se||(this._se=new CL(this.tilingScheme,this,this.level+1,this.x*2+1,this.y*2+1)),this._se}}});function R_t(e,t,n,i,o){this.level=e,this.west=t,this.south=n,this.east=i,this.north=o}function j8(e,t){let n=Math.max(e.west,t.west),i=Math.max(e.south,t.south),o=Math.min(e.east,t.east),r=Math.min(e.north,t.north);return i<r&&n<o}function Z_t(e,t,n){for(;t.level<e;)if(z3(t.nw.extent,n))t=t.nw;else if(z3(t.ne.extent,n))t=t.ne;else if(z3(t.sw.extent,n))t=t.sw;else if(z3(t.se.extent,n))t=t.se;else break;if(t.rectangles.length===0||t.rectangles[t.rectangles.length-1].level<=n.level)t.rectangles.push(n);else{let i=Xo(t.rectangles,n.level,G_t);i<0&&(i=~i),t.rectangles.splice(i,0,n)}}function G_t(e,t){return e.level-t}function z3(e,t){return t.west>=e.west&&t.east<=e.east&&t.south>=e.south&&t.north<=e.north}function VL(e,t){return t.longitude>=e.west&&t.longitude<=e.east&&t.latitude>=e.south&&t.latitude<=e.north}function SA(e,t,n){let i=0,o=!1;for(;!o;){let r=t._nw&&VL(t._nw.extent,n),s=t._ne&&VL(t._ne.extent,n),a=t._sw&&VL(t._sw.extent,n),c=t._se&&VL(t._se.extent,n);if(r+s+a+c>1){r&&(i=Math.max(i,SA(t,t._nw,n))),s&&(i=Math.max(i,SA(t,t._ne,n))),a&&(i=Math.max(i,SA(t,t._sw,n))),c&&(i=Math.max(i,SA(t,t._se,n)));break}else r?t=t._nw:s?t=t._ne:a?t=t._sw:c?t=t._se:o=!0}for(;t!==e;){let r=t.rectangles;for(let s=r.length-1;s>=0&&r[s].level>i;--s){let a=r[s];VL(a,n)&&(i=a.level)}t=t.parent}return i}function CA(e,t,n){if(!t)return;let i,o=!1;for(i=0;i<n.length;++i)o=o||j8(t.extent,n[i]);if(!o)return;let r=t.rectangles;for(i=0;i<r.length;++i){let s=r[i];e[s.level]||(e[s.level]=n),e[s.level]=E_t(e[s.level],s)}CA(e,t._nw,n),CA(e,t._ne,n),CA(e,t._sw,n),CA(e,t._se,n)}function E_t(e,t){let n=[];for(let i=0;i<e.length;++i){let o=e[i];j8(o,t)?(o.west<t.west&&n.push(new ce(o.west,o.south,t.west,o.north)),o.east>t.east&&n.push(new ce(t.east,o.south,o.east,o.north)),o.south<t.south&&n.push(new ce(Math.max(t.west,o.west),o.south,Math.min(t.east,o.east),t.south)),o.north>t.north&&n.push(new ce(Math.max(t.west,o.west),t.north,Math.min(t.east,o.east),o.north))):n.push(o)}return n}var Yh=LL;var I_t=15;function pSe(e){this.ellipsoid=e.ellipsoid??ne.default,this.credit=void 0,this.tilingScheme=void 0,this.height=void 0,this.width=void 0,this.encoding=void 0,this.lodCount=void 0,this.hasAvailability=!1,this.tilesAvailable=void 0,this.tilesAvailabilityLoaded=void 0,this.levelZeroMaximumGeometricError=void 0,this.terrainDataStructure=void 0}pSe.prototype.build=function(e){e._credit=this.credit,e._tilingScheme=this.tilingScheme,e._height=this.height,e._width=this.width,e._encoding=this.encoding,e._lodCount=this.lodCount,e._hasAvailability=this.hasAvailability,e._tilesAvailable=this.tilesAvailable,e._tilesAvailabilityLoaded=this.tilesAvailabilityLoaded,e._levelZeroMaximumGeometricError=this.levelZeroMaximumGeometricError,e._terrainDataStructure=this.terrainDataStructure};function X_t(e,t){let n=t.copyrightText;l(n)&&(e.credit=new Ct(n));let i=t.spatialReference,o=i.latestWkid??i.wkid,r=t.extent,s={ellipsoid:e.ellipsoid};if(o===4326)s.rectangle=ce.fromDegrees(r.xmin,r.ymin,r.xmax,r.ymax),e.tilingScheme=new Hi(s);else if(o===3857){let d=Math.PI*e.ellipsoid.maximumRadius;t.extent.xmax>d&&(t.extent.xmax=d),t.extent.ymax>d&&(t.extent.ymax=d),t.extent.xmin<-d&&(t.extent.xmin=-d),t.extent.ymin<-d&&(t.extent.ymin=-d),s.rectangleSouthwestInMeters=new U(r.xmin,r.ymin),s.rectangleNortheastInMeters=new U(r.xmax,r.ymax),e.tilingScheme=new rs(s)}else throw new ae("Invalid spatial reference");let a=t.tileInfo;if(!l(a))throw new ae("tileInfo is required");e.width=a.rows+1,e.height=a.cols+1,e.encoding=a.format==="LERC"?lm.LERC:lm.NONE,e.lodCount=a.lods.length-1,(e.hasAvailability=t.capabilities.indexOf("Tilemap")!==-1)&&(e.tilesAvailable=new Yh(e.tilingScheme,e.lodCount),e.tilesAvailable.addAvailableTileRange(0,0,0,e.tilingScheme.getNumberOfXTilesAtLevel(0),e.tilingScheme.getNumberOfYTilesAtLevel(0)),e.tilesAvailabilityLoaded=new Yh(e.tilingScheme,e.lodCount)),e.levelZeroMaximumGeometricError=os.getEstimatedLevelZeroGeometricErrorForAHeightmap(e.tilingScheme.ellipsoid,e.width,e.tilingScheme.getNumberOfXTilesAtLevel(0)),t.bandCount>1&&console.log("ArcGISTiledElevationTerrainProvider: Terrain data has more than 1 band. Using the first one."),l(t.minValues)&&l(t.maxValues)?e.terrainDataStructure={elementMultiplier:1,lowestEncodedHeight:t.minValues[0],highestEncodedHeight:t.maxValues[0]}:e.terrainDataStructure={elementMultiplier:1}}async function W_t(e,t,n){try{let i=await t.fetchJson();X_t(e,i)}catch(i){let o=`An error occurred while accessing ${t}.`;throw Zo.reportError(void 0,n,l(n)?n._errorEvent:void 0,o),i}}function Ny(e){e=e??Y.EMPTY_OBJECT,this._resource=void 0,this._credit=void 0,this._tilingScheme=void 0,this._levelZeroMaximumGeometricError=void 0,this._maxLevel=void 0,this._terrainDataStructure=void 0,this._width=void 0,this._height=void 0,this._encoding=void 0,this._lodCount=void 0,this._hasAvailability=!1,this._tilesAvailable=void 0,this._tilesAvailabilityLoaded=void 0,this._availableCache={},this._errorEvent=new be}Object.defineProperties(Ny.prototype,{errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},tilingScheme:{get:function(){return this._tilingScheme}},hasWaterMask:{get:function(){return!1}},hasVertexNormals:{get:function(){return!1}},availability:{get:function(){return this._tilesAvailable}}});Ny.fromUrl=async function(e,t){t=t??Y.EMPTY_OBJECT,e=await Promise.resolve(e);let n=Ze.createIfNeeded(e);n.appendForwardSlash(),l(t.token)&&(n=n.getDerivedResource({queryParameters:{token:t.token}}));let i=n.getDerivedResource({queryParameters:{f:"pjson"}}),o=new pSe(t);await W_t(o,i);let r=new Ny(t);return o.build(r),r._resource=n,r};Ny.prototype.requestTileGeometry=function(e,t,n,i){let o=this._resource.getDerivedResource({url:`tile/${n}/${t}/${e}`,request:i}),r=this._hasAvailability,s=Promise.resolve(!0),a;if(r&&!l(q8(this,n+1,e*2,t*2))){let h=bSe(this,n+1,e*2,t*2);s=h.promise,a=h.request}let c=o.fetchArrayBuffer();if(!l(c)||!l(s))return;let d=this,u=this._tilesAvailable;return Promise.all([c,s]).then(function(h){return new Oa({buffer:h[0],width:d._width,height:d._height,childTileMask:r?u.computeChildMaskForTile(n,e,t):I_t,structure:d._terrainDataStructure,encoding:d._encoding})}).catch(async function(h){if(l(a)&&a.state===jn.CANCELLED){i.cancel();try{await i.deferred?.promise}catch{}return i.state=jn.CANCELLED,Promise.reject(h)}return Promise.reject(h)})};function q8(e,t,n,i){if(!e._hasAvailability)return;let o=e._tilesAvailabilityLoaded,r=e._tilesAvailable;if(t>e._lodCount)return!1;if(r.isTileAvailable(t,n,i))return!0;if(o.isTileAvailable(t,n,i))return!1}Ny.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};Ny.prototype.getTileDataAvailable=function(e,t,n){if(!this._hasAvailability)return;let i=q8(this,n,e,t);if(l(i))return i;bSe(this,n,e,t)};Ny.prototype.loadTileDataAvailability=function(e,t,n){};function P_t(e,t,n,i){let o=t-1,r=n-1,s=i[e.y*t+e.x],a=[],c={startX:e.x,startY:e.y,endX:0,endY:0},d=new U(e.x+1,e.y+1),u=!1,h=!1;for(;!(u&&h);){let p=d.x,g=h?d.y+1:d.y;if(!u){for(let f=e.y;f<g;++f)if(i[f*t+d.x]!==s){u=!0;break}u?(a.push(new U(d.x,e.y)),--d.x,--p,c.endX=d.x):d.x===o?(c.endX=d.x,u=!0):++d.x}if(!h){let f=d.y*t;for(let y=e.x;y<=p;++y)if(i[f+y]!==s){h=!0;break}h?(a.push(new U(e.x,d.y)),--d.y,c.endY=d.y):d.y===r?(c.endY=d.y,h=!0):++d.y}}return{endingIndices:a,range:c,value:s}}function v_t(e,t,n,i,o){let r=[];if(o.every(function(c){return c===o[0]}))return o[0]===1&&r.push({startX:e,startY:t,endX:e+n-1,endY:t+i-1}),r;let a=[new U(0,0)];for(;a.length>0;){let c=a.pop(),d=P_t(c,n,i,o);if(d.value===1){let h=d.range;h.startX+=e,h.endX+=e,h.startY+=t,h.endY+=t,r.push(h)}let u=d.endingIndices;u.length>0&&(a=a.concat(u))}return r}function bSe(e,t,n,i){if(!e._hasAvailability)return{};let o=Math.floor(n/128)*128,r=Math.floor(i/128)*128,s=Math.min(1<<t,128),a=`tilemap/${t}/${r}/${o}/${s}/${s}`,c=e._availableCache;if(l(c[a]))return c[a];let d=new zo({throttle:!1,throttleByServer:!0,type:ds.TERRAIN}),h=e._resource.getDerivedResource({url:a,request:d}).fetchJson();return l(h)?(h=h.then(function(p){let g=v_t(o,r,s,s,p.data);e._tilesAvailabilityLoaded.addAvailableTileRange(t,o,r,o+s,r+s);let f=e._tilesAvailable;for(let y=0;y<g.length;++y){let x=g[y];f.addAvailableTileRange(t,x.startX,x.startY,x.endX,x.endY)}return q8(e,t,n,i)}),c[a]={promise:h,request:d},h=h.finally(function(p){return delete c[a],p}),{promise:h,request:d}):{}}var $8=Ny;var TKi=_(T(),1);var gSe="https://dev.virtualearth.net/REST/v1/Locations";function e7(e){e=e??Y.EMPTY_OBJECT;let t=e.key;this._key=t;let n={key:t};l(e.culture)&&(n.culture=e.culture),this._resource=new Ze({url:gSe,queryParameters:n}),this._credit=new Ct('<img src="http://dev.virtualearth.net/Branding/logo_powered_by.png"/>',!1)}Object.defineProperties(e7.prototype,{url:{get:function(){return gSe}},key:{get:function(){return this._key}},credit:{get:function(){return this._credit}}});e7.prototype.geocode=async function(e){return this._resource.getDerivedResource({queryParameters:{query:e}}).fetchJsonp("jsonp").then(function(n){return n.resourceSets.length===0?[]:n.resourceSets[0].resources.map(function(o){let r=o.bbox,s=r[0],a=r[1],c=r[2],d=r[3];return{displayName:o.name,destination:ce.fromDegrees(a,s,d,c)}})})};var t7=e7;var VKi=_(T(),1);function n7(){}Object.defineProperties(n7.prototype,{credit:{get:function(){}}});n7.prototype.geocode=function(e){let t=e.match(/[^\s,\n]+/g);if(t.length===2||t.length===3){let n=+t[0],i=+t[1],o=t.length===3?+t[2]:300;if(isNaN(n)&&isNaN(i)){let r=/^(\d+.?\d*)([nsew])/i;for(let s=0;s<t.length;++s){let a=t[s].match(r);r.test(t[s])&&a.length===3&&(/^[ns]/i.test(a[2])?i=/^[n]/i.test(a[2])?+a[1]:-a[1]:/^[ew]/i.test(a[2])&&(n=/^[e]/i.test(a[2])?+a[1]:-a[1]))}}if(!isNaN(n)&&!isNaN(i)&&!isNaN(o)){let r={displayName:e,destination:m.fromDegrees(n,i,o)};return Promise.resolve([r])}}return Promise.resolve([])};var i7=n7;var PKi=_(T(),1);var w_t=new se,ySe=new m,RL=new m;function F_t(e){let t=e.points,n=e.times;if(t.length<3){let i=n[0],o=1/(n[1]-i),r=t[0],s=t[1];return function(a,c){l(c)||(c=new m);let d=(a-i)*o;return m.lerp(r,s,d,c)}}return function(i,o){l(o)||(o=new m);let r=e._lastTimeIndex=e.findTimeInterval(i,e._lastTimeIndex),s=(i-n[r])/(n[r+1]-n[r]),a=w_t;a.z=s,a.y=s*s,a.x=a.y*s,a.w=1;let c,d,u,h,p;return r===0?(c=t[0],d=t[1],u=e.firstTangent,h=m.subtract(t[2],c,ySe),m.multiplyByScalar(h,.5,h),p=F.multiplyByVector(Rg.hermiteCoefficientMatrix,a,a)):r===t.length-2?(c=t[r],d=t[r+1],h=e.lastTangent,u=m.subtract(d,t[r-1],ySe),m.multiplyByScalar(u,.5,u),p=F.multiplyByVector(Rg.hermiteCoefficientMatrix,a,a)):(c=t[r-1],d=t[r],u=t[r+1],h=t[r+2],p=F.multiplyByVector(ky.catmullRomCoefficientMatrix,a,a)),o=m.multiplyByScalar(c,p.x,o),m.multiplyByScalar(d,p.y,RL),m.add(o,RL,o),m.multiplyByScalar(u,p.z,RL),m.add(o,RL,o),m.multiplyByScalar(h,p.w,RL),m.add(o,RL,o)}}var A_t=new m,M_t=new m;function ky(e){e=e??Y.EMPTY_OBJECT;let t=e.points,n=e.times,i=e.firstTangent,o=e.lastTangent;if(t.length>2&&(l(i)||(i=A_t,m.multiplyByScalar(t[1],2,i),m.subtract(i,t[2],i),m.subtract(i,t[0],i),m.multiplyByScalar(i,.5,i)),!l(o))){let r=t.length-1;o=M_t,m.multiplyByScalar(t[r-1],2,o),m.subtract(t[r],o,o),m.add(o,t[r-2],o),m.multiplyByScalar(o,.5,o)}this._times=n,this._points=t,this._firstTangent=m.clone(i),this._lastTangent=m.clone(o),this._evaluateFunction=F_t(this),this._lastTimeIndex=0}Object.defineProperties(ky.prototype,{times:{get:function(){return this._times}},points:{get:function(){return this._points}},firstTangent:{get:function(){return this._firstTangent}},lastTangent:{get:function(){return this._lastTangent}}});ky.catmullRomCoefficientMatrix=new F(-.5,1,-.5,0,1.5,-2.5,0,1,-1.5,2,.5,0,.5,-.5,0,0);ky.prototype.findTimeInterval=io.prototype.findTimeInterval;ky.prototype.wrapTime=io.prototype.wrapTime;ky.prototype.clampTime=io.prototype.clampTime;ky.prototype.evaluate=function(e,t){return this._evaluateFunction(e,t)};var o7=ky;var VJi=_(T(),1);var $Ki=_(T(),1);var MKi=_(T(),1);var H3={};H3.clipTriangleAtAxisAlignedThreshold=function(e,t,n,i,o,r){l(r)?r.length=0:r=[];let s,a,c;t?(s=n<e,a=i<e,c=o<e):(s=n>e,a=i>e,c=o>e);let d=s+a+c,u,h,p,g,f,y;return d===1?s?(u=(e-n)/(i-n),h=(e-n)/(o-n),r.push(1),r.push(2),h!==1&&(r.push(-1),r.push(0),r.push(2),r.push(h)),u!==1&&(r.push(-1),r.push(0),r.push(1),r.push(u))):a?(p=(e-i)/(o-i),g=(e-i)/(n-i),r.push(2),r.push(0),g!==1&&(r.push(-1),r.push(1),r.push(0),r.push(g)),p!==1&&(r.push(-1),r.push(1),r.push(2),r.push(p))):c&&(f=(e-o)/(n-o),y=(e-o)/(i-o),r.push(0),r.push(1),y!==1&&(r.push(-1),r.push(2),r.push(1),r.push(y)),f!==1&&(r.push(-1),r.push(2),r.push(0),r.push(f))):d===2?!s&&n!==e?(g=(e-i)/(n-i),f=(e-o)/(n-o),r.push(0),r.push(-1),r.push(1),r.push(0),r.push(g),r.push(-1),r.push(2),r.push(0),r.push(f)):!a&&i!==e?(y=(e-o)/(i-o),u=(e-n)/(i-n),r.push(1),r.push(-1),r.push(2),r.push(1),r.push(y),r.push(-1),r.push(0),r.push(1),r.push(u)):!c&&o!==e&&(h=(e-n)/(o-n),p=(e-i)/(o-i),r.push(2),r.push(-1),r.push(0),r.push(2),r.push(h),r.push(-1),r.push(1),r.push(2),r.push(p)):d!==3&&(r.push(0),r.push(1),r.push(2)),r};H3.computeBarycentricCoordinates=function(e,t,n,i,o,r,s,a,c){let d=n-s,u=s-o,h=r-a,p=i-a,g=1/(h*d+u*p),f=t-a,y=e-s,x=(h*y+u*f)*g,S=(-p*y+d*f)*g,C=1-x-S;return l(c)?(c.x=x,c.y=S,c.z=C,c):new m(x,S,C)};H3.computeLineSegmentLineSegmentIntersection=function(e,t,n,i,o,r,s,a,c){let d=(s-o)*(t-r)-(a-r)*(e-o),u=(n-e)*(t-r)-(i-t)*(e-o),h=(a-r)*(n-e)-(s-o)*(i-t);if(h===0)return;let p=d/h,g=u/h;if(p>=0&&p<=1&&g>=0&&g<=1)return l(c)||(c=new U),c.x=e+p*(n-e),c.y=t+p*(i-t),c};var L0=H3;function Uy(e){this._quantizedVertices=e.quantizedVertices,this._encodedNormals=e.encodedNormals,this._indices=e.indices,this._minimumHeight=e.minimumHeight,this._maximumHeight=e.maximumHeight,this._boundingSphere=e.boundingSphere,this._orientedBoundingBox=e.orientedBoundingBox,this._horizonOcclusionPoint=e.horizonOcclusionPoint,this._credits=e.credits;let t=this._quantizedVertices.length/3,n=this._uValues=this._quantizedVertices.subarray(0,t),i=this._vValues=this._quantizedVertices.subarray(t,2*t);this._heightValues=this._quantizedVertices.subarray(2*t,3*t);function o(s,a){return i[s]-i[a]}function r(s,a){return n[s]-n[a]}this._westIndices=J3(e.westIndices,o,t),this._southIndices=J3(e.southIndices,r,t),this._eastIndices=J3(e.eastIndices,o,t),this._northIndices=J3(e.northIndices,r,t),this._westSkirtHeight=e.westSkirtHeight,this._southSkirtHeight=e.southSkirtHeight,this._eastSkirtHeight=e.eastSkirtHeight,this._northSkirtHeight=e.northSkirtHeight,this._childTileMask=e.childTileMask??15,this._createdByUpsampling=e.createdByUpsampling??!1,this._waterMask=e.waterMask,this._mesh=void 0}Object.defineProperties(Uy.prototype,{credits:{get:function(){return this._credits}},waterMask:{get:function(){return this._waterMask}},childTileMask:{get:function(){return this._childTileMask}},canUpsample:{get:function(){return l(this._mesh)}}});var K3=[];function J3(e,t,n){K3.length=e.length;let i=!1;for(let o=0,r=e.length;o<r;++o)K3[o]=e[o],i=i||o>0&&t(e[o-1],e[o])>0;return i?(K3.sort(t),Ae.createTypedArray(n,K3)):e}var xSe="createVerticesFromQuantizedTerrainMesh",N_t=new xi(xSe),k_t=new xi(xSe,wh.maximumAsynchronousTasks);Uy.prototype.createMesh=function(e){e=e??Y.EMPTY_OBJECT;let t=e.tilingScheme,n=e.x,i=e.y,o=e.level,r=e.exaggeration??1,s=e.exaggerationRelativeHeight??0,a=e.throttle??!0,c=t.ellipsoid,d=t.tileXYToRectangle(n,i,o),h=(a?k_t:N_t).scheduleTask({minimumHeight:this._minimumHeight,maximumHeight:this._maximumHeight,quantizedVertices:this._quantizedVertices,octEncodedNormals:this._encodedNormals,includeWebMercatorT:!0,indices:this._indices,westIndices:this._westIndices,southIndices:this._southIndices,eastIndices:this._eastIndices,northIndices:this._northIndices,westSkirtHeight:this._westSkirtHeight,southSkirtHeight:this._southSkirtHeight,eastSkirtHeight:this._eastSkirtHeight,northSkirtHeight:this._northSkirtHeight,rectangle:d,relativeToCenter:this._boundingSphere.center,ellipsoid:c,exaggeration:r,exaggerationRelativeHeight:s});if(!l(h))return;let p=this;return Promise.resolve(h).then(function(g){let f=p._quantizedVertices.length/3,y=f+p._westIndices.length+p._southIndices.length+p._eastIndices.length+p._northIndices.length,x=Ae.createTypedArray(y,g.indices),S=new Float32Array(g.vertices),C=g.center,V=g.minimumHeight,L=g.maximumHeight,Z=p._boundingSphere,E=p._orientedBoundingBox,P=m.clone(g.occludeePointInScaledSpace)??p._horizonOcclusionPoint,W=g.vertexStride,v=Rc.clone(g.encoding);return p._mesh=new um(C,S,x,g.indexCountWithoutSkirts,f,V,L,Z,P,W,E,v,g.westIndicesSouthToNorth,g.southIndicesEastToWest,g.eastIndicesNorthToSouth,g.northIndicesWestToEast),p._quantizedVertices=void 0,p._encodedNormals=void 0,p._indices=void 0,p._uValues=void 0,p._vValues=void 0,p._heightValues=void 0,p._westIndices=void 0,p._southIndices=void 0,p._eastIndices=void 0,p._northIndices=void 0,p._mesh})};var U_t=new xi("upsampleQuantizedTerrainMesh",wh.maximumAsynchronousTasks);Uy.prototype.upsample=function(e,t,n,i,o,r,s){let a=this._mesh;if(!l(this._mesh))return;let c=t*2!==o,d=n*2===r,u=e.ellipsoid,h=e.tileXYToRectangle(o,r,s),p=U_t.scheduleTask({vertices:a.vertices,vertexCountWithoutSkirts:a.vertexCountWithoutSkirts,indices:a.indices,indexCountWithoutSkirts:a.indexCountWithoutSkirts,encoding:a.encoding,minimumHeight:this._minimumHeight,maximumHeight:this._maximumHeight,isEastChild:c,isNorthChild:d,childRectangle:h,ellipsoid:u});if(!l(p))return;let g=Math.min(this._westSkirtHeight,this._eastSkirtHeight);g=Math.min(g,this._southSkirtHeight),g=Math.min(g,this._northSkirtHeight);let f=c?g*.5:this._westSkirtHeight,y=d?g*.5:this._southSkirtHeight,x=c?this._eastSkirtHeight:g*.5,S=d?this._northSkirtHeight:g*.5,C=this._credits;return Promise.resolve(p).then(function(V){let L=new Uint16Array(V.vertices),Z=Ae.createTypedArray(L.length/3,V.indices),E;return l(V.encodedNormals)&&(E=new Uint8Array(V.encodedNormals)),new Uy({quantizedVertices:L,indices:Z,encodedNormals:E,minimumHeight:V.minimumHeight,maximumHeight:V.maximumHeight,boundingSphere:le.clone(V.boundingSphere),orientedBoundingBox:En.clone(V.orientedBoundingBox),horizonOcclusionPoint:m.clone(V.horizonOcclusionPoint),westIndices:V.westIndices,southIndices:V.southIndices,eastIndices:V.eastIndices,northIndices:V.northIndices,westSkirtHeight:f,southSkirtHeight:y,eastSkirtHeight:x,northSkirtHeight:S,childTileMask:0,credits:C,createdByUpsampling:!0})})};var r7=32767,_Se=new m;Uy.prototype.interpolateHeight=function(e,t,n){let i=X.clamp((t-e.west)/e.width,0,1);i*=r7;let o=X.clamp((n-e.south)/e.height,0,1);return o*=r7,l(this._mesh)?Y_t(this,i,o):z_t(this,i,o)};function TSe(e,t,n,i,o,r,s,a){let c=Math.min(n,o,s),d=Math.max(n,o,s),u=Math.min(i,r,a),h=Math.max(i,r,a);return e>=c&&e<=d&&t>=u&&t<=h}var D_t=new U,B_t=new U,O_t=new U;function Y_t(e,t,n){let i=e._mesh,o=i.vertices,r=i.encoding,s=i.indices;for(let a=0,c=s.length;a<c;a+=3){let d=s[a],u=s[a+1],h=s[a+2],p=r.decodeTextureCoordinates(o,d,D_t),g=r.decodeTextureCoordinates(o,u,B_t),f=r.decodeTextureCoordinates(o,h,O_t);if(TSe(t,n,p.x,p.y,g.x,g.y,f.x,f.y)){let y=L0.computeBarycentricCoordinates(t,n,p.x,p.y,g.x,g.y,f.x,f.y,_Se);if(y.x>=-1e-15&&y.y>=-1e-15&&y.z>=-1e-15){let x=r.decodeHeight(o,d),S=r.decodeHeight(o,u),C=r.decodeHeight(o,h);return y.x*x+y.y*S+y.z*C}}}}function z_t(e,t,n){let i=e._uValues,o=e._vValues,r=e._heightValues,s=e._indices;for(let a=0,c=s.length;a<c;a+=3){let d=s[a],u=s[a+1],h=s[a+2],p=i[d],g=i[u],f=i[h],y=o[d],x=o[u],S=o[h];if(TSe(t,n,p,y,g,x,f,S)){let C=L0.computeBarycentricCoordinates(t,n,p,y,g,x,f,S,_Se);if(C.x>=-1e-15&&C.y>=-1e-15&&C.z>=-1e-15){let V=C.x*r[d]+C.y*r[u]+C.z*r[h];return X.lerp(e._minimumHeight,e._maximumHeight,V/r7)}}}}Uy.prototype.isChildAvailable=function(e,t,n,i){let o=2;return n!==e*2&&++o,i!==t*2&&(o-=2),(this._childTileMask&1<<o)!==0};Uy.prototype.wasCreatedByUpsampling=function(){return this._createdByUpsampling};var yS=Uy;function H_t(e){this.resource=e.resource,this.version=e.version,this.isHeightmap=e.isHeightmap,this.tileUrlTemplates=e.tileUrlTemplates,this.availability=e.availability,this.hasVertexNormals=e.hasVertexNormals,this.hasWaterMask=e.hasWaterMask,this.hasMetadata=e.hasMetadata,this.availabilityLevels=e.availabilityLevels,this.availabilityTilesLoaded=e.availabilityTilesLoaded,this.littleEndianExtensionSize=e.littleEndianExtensionSize,this.availabilityPromiseCache={}}function CSe(e){this.requestVertexNormals=e.requestVertexNormals??!1,this.requestWaterMask=e.requestWaterMask??!1,this.requestMetadata=e.requestMetadata??!0,this.ellipsoid=e.ellipsoid??ne.default,this.heightmapWidth=65,this.heightmapStructure=void 0,this.hasWaterMask=!1,this.hasMetadata=!1,this.hasVertexNormals=!1,this.scheme=void 0,this.lastResource=void 0,this.layerJsonResource=void 0,this.previousError=void 0,this.availability=void 0,this.tilingScheme=void 0,this.levelZeroMaximumGeometricError=void 0,this.heightmapStructure=void 0,this.layers=[],this.attribution="",this.overallAvailability=[],this.overallMaxZoom=0,this.tileCredits=[]}CSe.prototype.build=function(e){e._heightmapWidth=this.heightmapWidth,e._scheme=this.scheme;let t=l(this.lastResource.credits)?this.lastResource.credits:[];e._tileCredits=t.concat(this.tileCredits),e._availability=this.availability,e._tilingScheme=this.tilingScheme,e._requestWaterMask=this.requestWaterMask,e._levelZeroMaximumGeometricError=this.levelZeroMaximumGeometricError,e._heightmapStructure=this.heightmapStructure,e._layers=this.layers,e._hasWaterMask=this.hasWaterMask,e._hasVertexNormals=this.hasVertexNormals,e._hasMetadata=this.hasMetadata};async function VSe(e,t,n){if(!t.format){let y="The tile format is not specified in the layer.json file.";throw e.previousError=Zo.reportError(e.previousError,n,l(n)?n._errorEvent:void 0,y),new ae(y)}if(!t.tiles||t.tiles.length===0){let y="The layer.json file does not specify any tile URL templates.";throw e.previousError=Zo.reportError(e.previousError,n,l(n)?n._errorEvent:void 0,y),new ae(y)}let i=!1,o=!1,r=!1,s=!0,a=!1;if(t.format==="heightmap-1.0")a=!0,l(e.heightmapStructure)||(e.heightmapStructure={heightScale:1/5,heightOffset:-1e3,elementsPerHeight:1,stride:1,elementMultiplier:256,isBigEndian:!1,lowestEncodedHeight:0,highestEncodedHeight:256*256-1}),o=!0,e.requestWaterMask=!0;else if(t.format.indexOf("quantized-mesh-1.")!==0){let y=`The tile format "${t.format}" is invalid or not supported.`;throw e.previousError=Zo.reportError(e.previousError,n,l(n)?n._errorEvent:void 0,y),new ae(y)}let c=t.tiles,d=t.maxzoom;if(e.overallMaxZoom=Math.max(e.overallMaxZoom,d),!t.projection||t.projection==="EPSG:4326")e.tilingScheme=new Hi({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:1,ellipsoid:e.ellipsoid});else if(t.projection==="EPSG:3857")e.tilingScheme=new rs({numberOfLevelZeroTilesX:1,numberOfLevelZeroTilesY:1,ellipsoid:e.ellipsoid});else{let y=`The projection "${t.projection}" is invalid or not supported.`;throw e.previousError=Zo.reportError(e.previousError,n,l(n)?n._errorEvent:void 0,y),new ae(y)}if(e.levelZeroMaximumGeometricError=os.getEstimatedLevelZeroGeometricErrorForAHeightmap(e.tilingScheme.ellipsoid,e.heightmapWidth,e.tilingScheme.getNumberOfXTilesAtLevel(0)),!t.scheme||t.scheme==="tms"||t.scheme==="slippyMap")e.scheme=t.scheme;else{let y=`The scheme "${t.scheme}" is invalid or not supported.`;throw e.previousError=Zo.reportError(e.previousError,n,l(n)?n._errorEvent:void 0,y),new ae(y)}let u;l(t.extensions)&&t.extensions.indexOf("octvertexnormals")!==-1?i=!0:l(t.extensions)&&t.extensions.indexOf("vertexnormals")!==-1&&(i=!0,s=!1),l(t.extensions)&&t.extensions.indexOf("watermask")!==-1&&(o=!0),l(t.extensions)&&t.extensions.indexOf("metadata")!==-1&&(r=!0);let h=t.metadataAvailability,p=t.available,g;if(l(p)&&!l(h)){g=new Yh(e.tilingScheme,p.length);for(let y=0;y<p.length;++y){let x=p[y],S=e.tilingScheme.getNumberOfYTilesAtLevel(y);l(e.overallAvailability[y])||(e.overallAvailability[y]=[]);for(let C=0;C<x.length;++C){let V=x[C],L=S-V.endY-1,Z=S-V.startY-1;e.overallAvailability[y].push([V.startX,L,V.endX,Z]),g.addAvailableTileRange(y,V.startX,L,V.endX,Z)}}}else l(h)&&(u=new Yh(e.tilingScheme,d),g=new Yh(e.tilingScheme,d),e.overallAvailability[0]=[[0,0,1,0]],g.addAvailableTileRange(0,0,0,1,0));e.hasWaterMask=e.hasWaterMask||o,e.hasVertexNormals=e.hasVertexNormals||i,e.hasMetadata=e.hasMetadata||r,l(t.attribution)&&(e.attribution.length>0&&(e.attribution+=" "),e.attribution+=t.attribution),e.layers.push(new H_t({resource:e.lastResource,version:t.version,isHeightmap:a,tileUrlTemplates:c,availability:g,hasVertexNormals:i,hasWaterMask:o,hasMetadata:r,availabilityLevels:h,availabilityTilesLoaded:u,littleEndianExtensionSize:s}));let f=t.parentUrl;return l(f)?l(g)?(e.lastResource=e.lastResource.getDerivedResource({url:f}),e.lastResource.appendForwardSlash(),e.layerJsonResource=e.lastResource.getDerivedResource({url:"layer.json"}),await c7(e),!0):(console.log("A layer.json can't have a parentUrl if it does't have an available array."),!0):!0}function K_t(e,t,n){let i=`An error occurred while accessing ${e.layerJsonResource.url}.`;if(l(t)&&(i+=` ${t.message}`),e.previousError=Zo.reportError(e.previousError,n,l(n)?n._errorEvent:void 0,i),e.previousError.retry)return c7(e,n);throw new ae(i)}async function J_t(e,t,n){await VSe(e,t,n);let i=e.overallAvailability.length;if(i>0){let o=e.availability=new Yh(e.tilingScheme,e.overallMaxZoom);for(let r=0;r<i;++r){let s=e.overallAvailability[r];for(let a=0;a<s.length;++a){let c=s[a];o.addAvailableTileRange(r,c[0],c[1],c[2],c[3])}}}if(e.attribution.length>0){let o=new Ct(e.attribution);e.tileCredits.push(o)}return!0}async function c7(e,t){try{let n=await e.layerJsonResource.fetchJson();return J_t(e,n,t)}catch(n){return l(n)&&n.statusCode===404?(await VSe(e,{tilejson:"2.1.0",format:"heightmap-1.0",version:"1.0.0",scheme:"tms",tiles:["{z}/{x}/{y}.terrain?v={version}"]},t),!0):K_t(e,n,t)}}function zh(e){e=e??Y.EMPTY_OBJECT,this._heightmapWidth=void 0,this._heightmapStructure=void 0,this._hasWaterMask=!1,this._hasVertexNormals=!1,this._hasMetadata=!1,this._scheme=void 0,this._ellipsoid=e.ellipsoid,this._requestVertexNormals=e.requestVertexNormals??!1,this._requestWaterMask=e.requestWaterMask??!1,this._requestMetadata=e.requestMetadata??!0,this._errorEvent=new be;let t=e.credit;typeof t=="string"&&(t=new Ct(t)),this._credit=t,this._availability=void 0,this._tilingScheme=void 0,this._levelZeroMaximumGeometricError=void 0,this._layers=void 0,this._tileCredits=void 0}var s7={OCT_VERTEX_NORMALS:1,WATER_MASK:2,METADATA:4};function SSe(e){return!l(e)||e.length===0?{Accept:"application/vnd.quantized-mesh,application/octet-stream;q=0.9,*/*;q=0.01"}:{Accept:`application/vnd.quantized-mesh;extensions=${e.join("-")},application/octet-stream;q=0.9,*/*;q=0.01`}}function Q_t(e,t,n,i,o){let r=new Uint16Array(t,0,e._heightmapWidth*e._heightmapWidth);return new Oa({buffer:r,childTileMask:new Uint8Array(t,r.byteLength,1)[0],waterMask:new Uint8Array(t,r.byteLength+1,t.byteLength-r.byteLength-1),width:e._heightmapWidth,height:e._heightmapWidth,structure:e._heightmapStructure,credits:e._tileCredits})}function j_t(e,t,n,i,o,r){let s=r.littleEndianExtensionSize,a=0,c=3,d=c+1,u=Float64Array.BYTES_PER_ELEMENT*c,h=Float64Array.BYTES_PER_ELEMENT*d,g=Uint16Array.BYTES_PER_ELEMENT*3,f=3,y=Uint16Array.BYTES_PER_ELEMENT,x=y*f,S=new DataView(t),C=new m(S.getFloat64(a,!0),S.getFloat64(a+8,!0),S.getFloat64(a+16,!0));a+=u;let V=S.getFloat32(a,!0);a+=Float32Array.BYTES_PER_ELEMENT;let L=S.getFloat32(a,!0);a+=Float32Array.BYTES_PER_ELEMENT;let Z=new le(new m(S.getFloat64(a,!0),S.getFloat64(a+8,!0),S.getFloat64(a+16,!0)),S.getFloat64(a+u,!0));a+=h;let E=new m(S.getFloat64(a,!0),S.getFloat64(a+8,!0),S.getFloat64(a+16,!0));a+=u;let P=S.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let W=new Uint16Array(t,a,P*3);a+=P*g,P>64*1024&&(y=Uint32Array.BYTES_PER_ELEMENT,x=y*f);let v=W.subarray(0,P),A=W.subarray(P,2*P),b=W.subarray(P*2,3*P);wn.zigZagDeltaDecode(v,A,b),a%y!==0&&(a+=y-a%y);let R=S.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let G=Ae.createTypedArrayFromArrayBuffer(P,t,a,R*f);a+=R*x;let I=0,w=G.length;for(let de=0;de<w;++de){let xe=G[de];G[de]=I-xe,xe===0&&++I}let M=S.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let B=Ae.createTypedArrayFromArrayBuffer(P,t,a,M);a+=M*y;let k=S.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let O=Ae.createTypedArrayFromArrayBuffer(P,t,a,k);a+=k*y;let N=S.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let z=Ae.createTypedArrayFromArrayBuffer(P,t,a,N);a+=N*y;let K=S.getUint32(a,!0);a+=Uint32Array.BYTES_PER_ELEMENT;let te=Ae.createTypedArrayFromArrayBuffer(P,t,a,K);a+=K*y;let H,j;for(;a<S.byteLength;){let de=S.getUint8(a,!0);a+=Uint8Array.BYTES_PER_ELEMENT;let xe=S.getUint32(a,s);if(a+=Uint32Array.BYTES_PER_ELEMENT,de===s7.OCT_VERTEX_NORMALS&&e._requestVertexNormals)H=new Uint8Array(t,a,P*2);else if(de===s7.WATER_MASK&&e._requestWaterMask)j=new Uint8Array(t,a,xe);else if(de===s7.METADATA&&e._requestMetadata){let Ce=S.getUint32(a,!0);if(Ce>0){let Le=qo(new Uint8Array(t),a+Uint32Array.BYTES_PER_ELEMENT,Ce).available;if(l(Le))for(let Ne=0;Ne<Le.length;++Ne){let Oe=n+Ne+1,qe=Le[Ne],Rt=e._tilingScheme.getNumberOfYTilesAtLevel(Oe);for(let Lt=0;Lt<qe.length;++Lt){let ke=qe[Lt],Ht=Rt-ke.endY-1,ut=Rt-ke.startY-1;e.availability.addAvailableTileRange(Oe,ke.startX,Ht,ke.endX,ut),r.availability.addAvailableTileRange(Oe,ke.startX,Ht,ke.endX,ut)}}}r.availabilityTilesLoaded.addAvailableTileRange(n,i,o,i,o)}a+=xe}let ee=e.getLevelMaximumGeometricError(n)*5,fe=e._tilingScheme.tileXYToRectangle(i,o,n),Te=En.fromRectangle(fe,V,L,e._tilingScheme.ellipsoid);return new yS({center:C,minimumHeight:V,maximumHeight:L,boundingSphere:Z,orientedBoundingBox:Te,horizonOcclusionPoint:E,quantizedVertices:W,encodedNormals:H,indices:G,westIndices:B,southIndices:O,eastIndices:z,northIndices:te,westSkirtHeight:ee,southSkirtHeight:ee,eastSkirtHeight:ee,northSkirtHeight:ee,childTileMask:e.availability.computeChildMaskForTile(n,i,o),waterMask:j,credits:e._tileCredits})}zh.prototype.requestTileGeometry=function(e,t,n,i){let o=this._layers,r,s=o.length,a=!1,c=Promise.resolve();if(s===1)r=o[0];else for(let d=0;d<s;++d){let u=o[d];if(!l(u.availability)||u.availability.isTileAvailable(n,e,t)){r=u;break}let h=l7(this,e,t,n,u,d===0);h.result&&(a=!0,c=c.then(()=>h.promise))}return!l(r)&&a?c.then(()=>new Promise(d=>{setTimeout(()=>{let u=this.requestTileGeometry(e,t,n,i);d(u)},0)})):LSe(this,e,t,n,r,i)};function LSe(e,t,n,i,o,r){if(!l(o))return Promise.reject(new ae("Terrain tile doesn't exist"));let s=o.tileUrlTemplates;if(s.length===0)return;let a;!e._scheme||e._scheme==="tms"?a=e._tilingScheme.getNumberOfYTilesAtLevel(i)-n-1:a=n;let c=[];e._requestVertexNormals&&o.hasVertexNormals&&c.push(o.littleEndianExtensionSize?"octvertexnormals":"vertexnormals"),e._requestWaterMask&&o.hasWaterMask&&c.push("watermask"),e._requestMetadata&&o.hasMetadata&&c.push("metadata");let d,u,h=s[(t+a+i)%s.length],p=o.resource;l(p._ionEndpoint)&&!l(p._ionEndpoint.externalType)?(c.length!==0&&(u={extensions:c.join("-")}),d=SSe(void 0)):d=SSe(c);let g=p.getDerivedResource({url:h,templateValues:{version:o.version,z:i,x:t,y:a},queryParameters:u,headers:d,request:r}).fetchArrayBuffer();if(l(g))return g.then(function(f){return l(f)?l(e._heightmapStructure)?Q_t(e,f,i,t,n):j_t(e,f,i,t,n,o):Promise.reject(new ae("Mesh buffer doesn't exist."))})}Object.defineProperties(zh.prototype,{errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},tilingScheme:{get:function(){return this._tilingScheme}},hasWaterMask:{get:function(){return this._hasWaterMask&&this._requestWaterMask}},hasVertexNormals:{get:function(){return this._hasVertexNormals&&this._requestVertexNormals}},hasMetadata:{get:function(){return this._hasMetadata&&this._requestMetadata}},requestVertexNormals:{get:function(){return this._requestVertexNormals}},requestWaterMask:{get:function(){return this._requestWaterMask}},requestMetadata:{get:function(){return this._requestMetadata}},availability:{get:function(){return this._availability}}});zh.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};zh.fromIonAssetId=async function(e,t){let n=await _d.fromAssetId(e);return zh.fromUrl(n,t)};zh.fromUrl=async function(e,t){t=t??Y.EMPTY_OBJECT,e=await Promise.resolve(e);let n=Ze.createIfNeeded(e);n.appendForwardSlash();let i=new CSe(t);i.lastResource=n,i.layerJsonResource=i.lastResource.getDerivedResource({url:"layer.json"}),await c7(i);let o=new zh(t);return i.build(o),o};zh.prototype.getTileDataAvailable=function(e,t,n){if(!l(this._availability))return;if(n>this._availability._maximumLevel)return!1;if(this._availability.isTileAvailable(n,e,t))return!0;if(!this._hasMetadata)return!1;let i=this._layers,o=i.length;for(let r=0;r<o;++r)if(l7(this,e,t,n,i[r],r===0).result)return;return!1};zh.prototype.loadTileDataAvailability=function(e,t,n){if(!l(this._availability)||n>this._availability._maximumLevel||this._availability.isTileAvailable(n,e,t)||!this._hasMetadata)return;let i=this._layers,o=i.length;for(let r=0;r<o;++r){let s=l7(this,e,t,n,i[r],r===0);if(l(s.promise))return s.promise}};function a7(e,t,n,i){if(i===0)return;let o=e.availabilityLevels,r=i%o===0?i-o:(i/o|0)*o,s=1<<i-r,a=t/s|0,c=n/s|0;return{level:r,x:a,y:c}}function l7(e,t,n,i,o,r){if(!l(o.availabilityLevels))return{result:!1};let s,a=function(){delete o.availabilityPromiseCache[s]},c=o.availabilityTilesLoaded,d=o.availability,u=a7(o,t,n,i);for(;l(u);){if(d.isTileAvailable(u.level,u.x,u.y)&&!c.isTileAvailable(u.level,u.x,u.y)){let h;if(!r&&(s=`${u.level}-${u.x}-${u.y}`,h=o.availabilityPromiseCache[s],!l(h))){let p=new zo({throttle:!1,throttleByServer:!0,type:ds.TERRAIN});h=LSe(e,u.x,u.y,u.level,o,p),l(h)&&(o.availabilityPromiseCache[s]=h,h.then(a))}return{result:!0,promise:h}}u=a7(o,u.x,u.y,u.level)}return{result:!1}}zh._getAvailabilityTile=a7;var xS=zh;var WJi=_(T(),1);function R0(e){e=e??Y.EMPTY_OBJECT;let t=e.radius,n={center:e.center,semiMajorAxis:t,semiMinorAxis:t,ellipsoid:e.ellipsoid,height:e.height,extrudedHeight:e.extrudedHeight,granularity:e.granularity,vertexFormat:e.vertexFormat,stRotation:e.stRotation,shadowVolume:e.shadowVolume};this._ellipseGeometry=new dl(n),this._workerName="createCircleGeometry"}R0.packedLength=dl.packedLength;R0.pack=function(e,t,n){return dl.pack(e._ellipseGeometry,t,n)};var RSe=new dl({center:new m,semiMajorAxis:1,semiMinorAxis:1}),Ka={center:new m,radius:void 0,ellipsoid:ne.clone(ne.default),height:void 0,extrudedHeight:void 0,granularity:void 0,vertexFormat:new Xe,stRotation:void 0,semiMajorAxis:void 0,semiMinorAxis:void 0,shadowVolume:void 0};R0.unpack=function(e,t,n){let i=dl.unpack(e,t,RSe);return Ka.center=m.clone(i._center,Ka.center),Ka.ellipsoid=ne.clone(i._ellipsoid,Ka.ellipsoid),Ka.ellipsoid=ne.clone(i._ellipsoid,RSe._ellipsoid),Ka.height=i._height,Ka.extrudedHeight=i._extrudedHeight,Ka.granularity=i._granularity,Ka.vertexFormat=Xe.clone(i._vertexFormat,Ka.vertexFormat),Ka.stRotation=i._stRotation,Ka.shadowVolume=i._shadowVolume,l(n)?(Ka.semiMajorAxis=i._semiMajorAxis,Ka.semiMinorAxis=i._semiMinorAxis,n._ellipseGeometry=new dl(Ka),n):(Ka.radius=i._semiMajorAxis,new R0(Ka))};R0.createGeometry=function(e){return dl.createGeometry(e._ellipseGeometry)};R0.createShadowVolume=function(e,t,n){let i=e._ellipseGeometry._granularity,o=e._ellipseGeometry._ellipsoid,r=t(i,o),s=n(i,o);return new R0({center:e._ellipseGeometry._center,radius:e._ellipseGeometry._semiMajorAxis,ellipsoid:o,stRotation:e._ellipseGeometry._stRotation,granularity:i,extrudedHeight:r,height:s,vertexFormat:Xe.POSITION_ONLY,shadowVolume:!0})};Object.defineProperties(R0.prototype,{rectangle:{get:function(){return this._ellipseGeometry.rectangle}},textureCoordinateRotationPoints:{get:function(){return this._ellipseGeometry.textureCoordinateRotationPoints}}});var d7=R0;var NJi=_(T(),1);function ZL(e){e=e??Y.EMPTY_OBJECT;let t=e.radius,n={center:e.center,semiMajorAxis:t,semiMinorAxis:t,ellipsoid:e.ellipsoid,height:e.height,extrudedHeight:e.extrudedHeight,granularity:e.granularity,numberOfVerticalLines:e.numberOfVerticalLines};this._ellipseGeometry=new kd(n),this._workerName="createCircleOutlineGeometry"}ZL.packedLength=kd.packedLength;ZL.pack=function(e,t,n){return kd.pack(e._ellipseGeometry,t,n)};var q_t=new kd({center:new m,semiMajorAxis:1,semiMinorAxis:1}),au={center:new m,radius:void 0,ellipsoid:ne.clone(ne.UNIT_SPHERE),height:void 0,extrudedHeight:void 0,granularity:void 0,numberOfVerticalLines:void 0,semiMajorAxis:void 0,semiMinorAxis:void 0};ZL.unpack=function(e,t,n){let i=kd.unpack(e,t,q_t);return au.center=m.clone(i._center,au.center),au.ellipsoid=ne.clone(i._ellipsoid,au.ellipsoid),au.height=i._height,au.extrudedHeight=i._extrudedHeight,au.granularity=i._granularity,au.numberOfVerticalLines=i._numberOfVerticalLines,l(n)?(au.semiMajorAxis=i._semiMajorAxis,au.semiMinorAxis=i._semiMinorAxis,n._ellipseGeometry=new kd(au),n):(au.radius=i._semiMajorAxis,new ZL(au))};ZL.createGeometry=function(e){return kd.createGeometry(e._ellipseGeometry)};var u7=ZL;var JJi=_(T(),1);function GL(e){e=e??Y.EMPTY_OBJECT,this._callback=e.callback,this._tilingScheme=e.tilingScheme,l(this._tilingScheme)||(this._tilingScheme=new Hi({ellipsoid:e.ellipsoid??ne.default})),this._width=e.width,this._height=e.height;let t=Math.max(this._width,this._height);this._levelZeroMaximumGeometricError=os.getEstimatedLevelZeroGeometricErrorForAHeightmap(this._tilingScheme.ellipsoid,t,this._tilingScheme.getNumberOfXTilesAtLevel(0)),this._errorEvent=new be;let n=e.credit;typeof n=="string"&&(n=new Ct(n)),this._credit=n}Object.defineProperties(GL.prototype,{errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},tilingScheme:{get:function(){return this._tilingScheme}},hasWaterMask:{get:function(){return!1}},hasVertexNormals:{get:function(){return!1}},availability:{get:function(){}},width:{get:function(){return this._width}},height:{get:function(){return this._height}}});GL.prototype.requestTileGeometry=function(e,t,n,i){let o=this._callback(e,t,n);if(!l(o))return;let r=this._width,s=this._height;return Promise.resolve(o).then(function(a){let c=a;return Array.isArray(c)&&(c=new Float64Array(c)),new Oa({buffer:c,width:r,height:s})})};GL.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};GL.prototype.getTileDataAvailable=function(e,t,n){};GL.prototype.loadTileDataAvailability=function(e,t,n){};var m7=GL;var jJi=_(T(),1);function ZSe(e){this.proxy=e}ZSe.prototype.getURL=function(e){let t=this.proxy.indexOf("?")===-1?"?":"";return this.proxy+t+encodeURIComponent(e)};var h7=ZSe;var $Ji=_(T(),1),$_t={SEARCH:0,AUTOCOMPLETE:1},Dy=Object.freeze($_t);var oQi=_(T(),1);function Q3(){pe.throwInstantiationError()}Object.defineProperties(Q3.prototype,{credit:{get:pe.throwInstantiationError}});Q3.getCreditsFromResult=function(e){if(l(e.attributions))return e.attributions.map(Ct.getIonCredit)};Q3.prototype.geocode=pe.throwInstantiationError;var EL=Q3;var aQi=_(T(),1);function GSe(){pe.throwInstantiationError()}GSe.createGeometry=function(e){pe.throwInstantiationError()};var f7=GSe;var ZQi=_(T(),1),rTt=_(p7(),1);var fQi=_(T(),1);var dQi=_(T(),1);function eTt(e,t){return(e&t)!==0}var Xc=eTt;var tTt=[1,2,4,8],ESe=15,nTt=16,iTt=64,oTt=128;function fp(e,t,n,i,o,r){this._bits=e,this.cnodeVersion=t,this.imageryVersion=n,this.terrainVersion=i,this.imageryProvider=o,this.terrainProvider=r,this.ancestorHasTerrain=!1,this.terrainState=void 0}fp.clone=function(e,t){return l(t)?(t._bits=e._bits,t.cnodeVersion=e.cnodeVersion,t.imageryVersion=e.imageryVersion,t.terrainVersion=e.terrainVersion,t.imageryProvider=e.imageryProvider,t.terrainProvider=e.terrainProvider):t=new fp(e._bits,e.cnodeVersion,e.imageryVersion,e.terrainVersion,e.imageryProvider,e.terrainProvider),t.ancestorHasTerrain=e.ancestorHasTerrain,t.terrainState=e.terrainState,t};fp.prototype.setParent=function(e){this.ancestorHasTerrain=e.ancestorHasTerrain||this.hasTerrain()};fp.prototype.hasSubtree=function(){return Xc(this._bits,nTt)};fp.prototype.hasImagery=function(){return Xc(this._bits,iTt)};fp.prototype.hasTerrain=function(){return Xc(this._bits,oTt)};fp.prototype.hasChildren=function(){return Xc(this._bits,ESe)};fp.prototype.hasChild=function(e){return Xc(this._bits,tTt[e])};fp.prototype.getChildBitmask=function(){return this._bits&ESe};var VA=fp;function sTt(e){let t=e.length,n=new ArrayBuffer(t),i=new Uint8Array(n);for(let o=0;o<t;++o)i[o]=e.charCodeAt(o);return n}var aTt=sTt(`E\xF4\xBD\vy\xE2jE"\x92,\xCDq\xF8IFgQ\0B%\xC6\xE8a,f)\b\xC64\xDCjb%y wmi\xD6\xF0\x9Ck\x93\xA1\xBDNu\xE0A[\xDF@V\f\xD9\xBBr\x9B\x81|3S\xEEOl\xD4q\xB0{\xC0\x7FEVZ\xADwUe\v3\x92*\xACl5\xC50s\xF83>mF8J\xB4\xDD\xF0.\xDDu\xDA\x8CDt"\xFAa"\f3"So\xAF9D\v\x8C9\xD99L\xB9\xBF\x7F\xAB\\\x8CP_\x9F"ux\xE9\x07q\x91h;\xC1\xC4\x9B\x7F\xF0<VqH\x82'UfYNe\x98u\xA3aF}a?A\0\x9F\xD7\xB44M\xCE\x87F\xB0\xD5\xB8\x8A'{\x8B\xDC+\xBBMg0\xC8\xD1\xF6\\\x8FP\xFA[/F\x9Bn5/'C.\xEB \f^\xA5s\x1Be4\xE5l.jC'c#U\xA9?q{gC}:\xAF\xCD\xE2TU\x9C\xFDK\xC6\xE2\x9F/(\xED\xCB\\\xC6-f\x07\x88\xA7;/*"N\xB0k.\xDD\r\x95}}G\xBAC\xB2\xB2+>M\xAA>}\xE6\xCEI\x89\xC6\xE6x\fa1-<\xA4O\xA5~q \x88\xEC\r1\xE8N\v\0nPh}=\b\r\x95\xA6n\xA3h\x97$[k\xF3#\xF3\xB6s\xB3\r\v@\xC0\x9F\xD8Q]\xFA".j\xDFI\0\xB9\xA0wU\xC6\xEFj\xBF{GL\x7F\x83\xEE\xDC\xDCF\x85\xA9\xADS\x07+S4\x07\xFF\x94Y>\xE48\xE81\x83N\xB9XFk\xCB-#\x86\x92p\x005\x88"\xCF1\xB2&/\xE7\xC3u-6,rt\xB0#G\xB7\xD3\xD1&\x857r\xE2\0\x8CD\xCF\xDA3-\xDE\`\x86i#i*|\xCDKQ\r\x95T9w.)\xEA\x1B\xA6P\xA2j\x8FoP\x99\\>T\xFB\xEFP[\v\x07E\x89m(w7\xDB\x8EJfJo\x99 \xE5p\xE2\xB9q~\fmI-z\xFEr\xC7\xF2Y0\x8F\xBB>]s\xE5\xC9 \xEAx\xEC \x90\xF0\x8A\x7FB|G\`\xB0\xBD&\xB7q\xB6\xC7\x9F\xD13\x82=\xD3\xAB\xEEc\x99\xC8+S\xA0D\\q<\xC6\xCCD2O<\xCA\xC0)=R\xD3aX\xA9}e\xB4\xDC\xCF\r\xF4=\xF1\b\xA9B\xDA# \xD8\xBF^PI\xF8M\xC0\xCBGLO\xF7{+\xD8\xC51\x92;\xB5o\xDCl\r\x92\x88\xD1\x9E\xDB?\xE2\xE9\xDA_\xD4\x84\xE2FaZ\xDEU\xCF\xA4\0\xBE\xFD\xCEg\xF1Ji\x97\xE6 H\xD8]\x7F~\xAEq N\xAE\xC0V\xA9\x91<<\x82r\xE7v\xEC)I\xD6]-\x83\xE3\xDB6\xA9;f\x97\x87j\xD5\xB6=P^R\xB9K\xC7sWx\xC9\xF4.Y\x07\x95\x93o\xD0KW>''\xC7\`\xDB;\xED\x9ASD>?\x8D\x92mw\xA2 \xEB?R\xA8\xC6U^1I7\x85\xF4\xC5&-\xA9\xBF\x8B'T\xDA\xC3j \xE5*x\xB0\xD6\x90pr\xAA\x8Bh\xBD\x88\xF7>_H\xB1~\xC0XL?f\xF9>\xE1e\xC0p\xA7\xCF8i\xAF\xF0VldI\x9C'\xADxtO\xC2\x87\xDEV9\0\xDAw\v\xCB-\x1B\x89\xFB5O>\xF5\bQ\`\xC1 ZGM&30x\xDA\xC0\x9CFG\xE2[y\`In7gS >\xE9\xECF9\xB2\xF14\r\xC6\x84Sun\xE1\fY\xD9\xDE)\x85{II\xA5wy\xBEIV.6\xE7\v:\xBBOb{\xD2M1\x95/\xBD8{\xA8O!\xE1\xECFpv\x95})"x\x88 \x90\xDD\x9D\\\xDA\xDEQ\xCF\xF0\xFCYRe|3\xDF\xF3H\xDA\xBB*u\xDB\`\xB2>\xD4\xFC\xED\x1B\xEC\x7F5\xA8\xFF(1\x07-\xC8\xDC\x88F|\x8A["`);function cu(e){this.imageryPresent=!0,this.protoImagery=void 0,this.terrainPresent=!0,this.negativeAltitudeExponentBias=32,this.negativeAltitudeThreshold=X.EPSILON12,this.providers={},this.key=void 0,this._resource=void 0,this._quadPacketVersion=1,this._tileInfo={},this._subtreePromises={}}Object.defineProperties(cu.prototype,{url:{get:function(){return this._resource.url}},proxy:{get:function(){return this._resource.proxy}},resource:{get:function(){return this._resource}}});cu.fromUrl=async function(e){let t=e;typeof t!="string"&&!(t instanceof Ze)&&(t=e.url);let n=Ze.createIfNeeded(t);n.appendForwardSlash();let i=new cu;i._resource=n;try{await cTt(i),await i.getQuadTreePacket("",i._quadPacketVersion)}catch(o){let r=`An error occurred while accessing ${XSe(i,"",1).url}: ${o}`;throw new ae(r)}return i};cu.tileXYToQuadKey=function(e,t,n){let i="";for(let o=n;o>=0;--o){let r=1<<o,s=0;Xc(t,r)?Xc(e,r)&&(s|=1):(s|=2,Xc(e,r)||(s|=1)),i+=s}return i};cu.quadKeyToTileXY=function(e){let t=0,n=0,i=e.length-1;for(let o=i;o>=0;--o){let r=1<<o,s=+e[i-o];Xc(s,2)?Xc(s,1)||(t|=r):(n|=r,Xc(s,1)&&(t|=r))}return{x:t,y:n,level:i}};cu.prototype.isValid=function(e){let t=this.getTileInformationFromQuadKey(e);if(l(t))return t!==null;let n=!0,i=e,o;for(;i.length>1;)if(o=i.substring(i.length-1),i=i.substring(0,i.length-1),t=this.getTileInformationFromQuadKey(i),l(t)){!t.hasSubtree()&&!t.hasChild(parseInt(o))&&(n=!1);break}else if(t===null){n=!1;break}return n};var ISe=new xi("decodeGoogleEarthEnterprisePacket");cu.prototype.getQuadTreePacket=function(e,t,n){t=t??1,e=e??"";let o=XSe(this,e,t,n).fetchArrayBuffer();if(!l(o))return;let r=this._tileInfo,s=this.key;return o.then(function(a){return ISe.scheduleTask({buffer:a,quadKey:e,type:"Metadata",key:s},[a]).then(function(d){let u,h=-1;if(e!==""){h=e.length+1;let f=d[e];u=r[e],u._bits|=f._bits,delete d[e]}let p=Object.keys(d);p.sort(function(f,y){return f.length-y.length});let g=p.length;for(let f=0;f<g;++f){let y=p[f];if(d[y]!==null){let S=VA.clone(d[y]),C=y.length;if(C===h)S.setParent(u);else if(C>1){let V=r[y.substring(0,y.length-1)];S.setParent(V)}r[y]=S}else r[y]=null}})})};cu.prototype.populateSubtree=function(e,t,n,i){let o=cu.tileXYToQuadKey(e,t,n);return y7(this,o,i)};function y7(e,t,n){let i=e._tileInfo,o=t,r=i[o];if(l(r)&&(!r.hasSubtree()||r.hasChildren()))return r;for(;r===void 0&&o.length>1;)o=o.substring(0,o.length-1),r=i[o];let s,a=e._subtreePromises,c=a[o];if(l(c))return c.then(function(){return s=new zo({throttle:n.throttle,throttleByServer:n.throttleByServer,type:n.type,priorityFunction:n.priorityFunction}),y7(e,t,s)});if(!l(r)||!r.hasSubtree())return Promise.reject(new ae(`Couldn't load metadata for tile ${t}`));if(c=e.getQuadTreePacket(o,r.cnodeVersion,n),!!l(c))return a[o]=c,c.then(function(){return s=new zo({throttle:n.throttle,throttleByServer:n.throttleByServer,type:n.type,priorityFunction:n.priorityFunction}),y7(e,t,s)}).finally(function(){delete a[o]})}cu.prototype.getTileInformation=function(e,t,n){let i=cu.tileXYToQuadKey(e,t,n);return this._tileInfo[i]};cu.prototype.getTileInformationFromQuadKey=function(e){return this._tileInfo[e]};function XSe(e,t,n,i){return e._resource.getDerivedResource({url:`flatfile?q2-0${t}-q.${n.toString()}`,request:i})}var b7,g7;function cTt(e){let t=e._resource.getDerivedResource({url:"dbRoot.v5",queryParameters:{output:"proto"}});if(!l(g7)){let n=nn("ThirdParty/google-earth-dbroot-parser.js"),i=window.cesiumGoogleEarthDbRootParser;g7=ox(n).then(function(){b7=window.cesiumGoogleEarthDbRootParser(rTt),l(i)?window.cesiumGoogleEarthDbRootParser=i:delete window.cesiumGoogleEarthDbRootParser})}return g7.then(function(){return t.fetchArrayBuffer()}).then(function(n){let i=b7.EncryptedDbRootProto.decode(new Uint8Array(n)),o=i.encryptionData,r=o.byteOffset,s=r+o.byteLength,a=e.key=o.buffer.slice(r,s);o=i.dbrootData,r=o.byteOffset,s=r+o.byteLength;let c=o.buffer.slice(r,s);return ISe.scheduleTask({buffer:c,type:"DbRoot",key:a},[c])}).then(function(n){let i=b7.DbRootProto.decode(new Uint8Array(n.buffer));if(e.imageryPresent=i.imageryPresent??e.imageryPresent,e.protoImagery=i.protoImagery,e.terrainPresent=i.terrainPresent??e.terrainPresent,l(i.endSnippet)&&l(i.endSnippet.model)){let a=i.endSnippet.model;e.negativeAltitudeExponentBias=a.negativeAltitudeExponentBias??e.negativeAltitudeExponentBias,e.negativeAltitudeThreshold=a.compressedNegativeAltitudeThreshold??e.negativeAltitudeThreshold}l(i.databaseVersion)&&(e._quadPacketVersion=i.databaseVersion.quadtreeVersion??e._quadPacketVersion);let o=e.providers,r=i.providerInfo??[],s=r.length;for(let a=0;a<s;++a){let c=r[a],d=c.copyrightString;l(d)&&(o[c.providerId]=new Ct(d.value))}}).catch(function(){console.log(`Failed to retrieve ${t.url}. Using defaults.`),e.key=aTt})}var Z0=cu;var OQi=_(T(),1);function _S(e){e=e??Y.EMPTY_OBJECT,this._buffer=e.buffer,this._credits=e.credits,this._negativeAltitudeExponentBias=e.negativeAltitudeExponentBias,this._negativeElevationThreshold=e.negativeElevationThreshold;let t=e.childTileMask??15,n=t&3;n|=t&4?8:0,n|=t&8?4:0,this._childTileMask=n,this._createdByUpsampling=e.createdByUpsampling??!1,this._skirtHeight=void 0,this._bufferType=this._buffer.constructor,this._mesh=void 0,this._minimumHeight=void 0,this._maximumHeight=void 0}Object.defineProperties(_S.prototype,{credits:{get:function(){return this._credits}},waterMask:{get:function(){}}});var vSe="createVerticesFromGoogleEarthEnterpriseBuffer",lTt=new xi(vSe),dTt=new xi(vSe,wh.maximumAsynchronousTasks),WSe=new ce,x7=new ce;_S.prototype.createMesh=function(e){e=e??Y.EMPTY_OBJECT;let t=e.tilingScheme,n=e.x,i=e.y,o=e.level,r=e.exaggeration??1,s=e.exaggerationRelativeHeight??0,a=e.throttle??!0,c=t.ellipsoid;t.tileXYToNativeRectangle(n,i,o,WSe),t.tileXYToRectangle(n,i,o,x7);let d=c.cartographicToCartesian(ce.center(x7)),h=40075.16/(1<<o);this._skirtHeight=Math.min(h*8,1e3);let g=(a?dTt:lTt).scheduleTask({buffer:this._buffer,nativeRectangle:WSe,rectangle:x7,relativeToCenter:d,ellipsoid:c,skirtHeight:this._skirtHeight,exaggeration:r,exaggerationRelativeHeight:s,includeWebMercatorT:!0,negativeAltitudeExponentBias:this._negativeAltitudeExponentBias,negativeElevationThreshold:this._negativeElevationThreshold});if(!l(g))return;let f=this;return g.then(function(y){return f._mesh=new um(d,new Float32Array(y.vertices),new Uint16Array(y.indices),y.indexCountWithoutSkirts,y.vertexCountWithoutSkirts,y.minimumHeight,y.maximumHeight,le.clone(y.boundingSphere3D),m.clone(y.occludeePointInScaledSpace),y.numberOfAttributes,En.clone(y.orientedBoundingBox),Rc.clone(y.encoding),y.westIndicesSouthToNorth,y.southIndicesEastToWest,y.eastIndicesNorthToSouth,y.northIndicesWestToEast),f._minimumHeight=y.minimumHeight,f._maximumHeight=y.maximumHeight,f._buffer=void 0,f._mesh})};_S.prototype.interpolateHeight=function(e,t,n){let i=X.clamp((t-e.west)/e.width,0,1),o=X.clamp((n-e.south)/e.height,0,1);return l(this._mesh)?pTt(this,i,o):yTt(this,i,o,e)};var uTt=new xi("upsampleQuantizedTerrainMesh",wh.maximumAsynchronousTasks);_S.prototype.upsample=function(e,t,n,i,o,r,s){let a=this._mesh;if(!l(this._mesh))return;let c=t*2!==o,d=n*2===r,u=e.ellipsoid,h=e.tileXYToRectangle(o,r,s),p=uTt.scheduleTask({vertices:a.vertices,indices:a.indices,indexCountWithoutSkirts:a.indexCountWithoutSkirts,vertexCountWithoutSkirts:a.vertexCountWithoutSkirts,encoding:a.encoding,minimumHeight:this._minimumHeight,maximumHeight:this._maximumHeight,isEastChild:c,isNorthChild:d,childRectangle:h,ellipsoid:u});if(!l(p))return;let g=this;return p.then(function(f){let y=new Uint16Array(f.vertices),x=Ae.createTypedArray(y.length/3,f.indices),S=g._skirtHeight;return new yS({quantizedVertices:y,indices:x,minimumHeight:f.minimumHeight,maximumHeight:f.maximumHeight,boundingSphere:le.clone(f.boundingSphere),orientedBoundingBox:En.clone(f.orientedBoundingBox),horizonOcclusionPoint:m.clone(f.horizonOcclusionPoint),westIndices:f.westIndices,southIndices:f.southIndices,eastIndices:f.eastIndices,northIndices:f.northIndices,westSkirtHeight:S,southSkirtHeight:S,eastSkirtHeight:S,northSkirtHeight:S,childTileMask:0,createdByUpsampling:!0,credits:g._credits})})};_S.prototype.isChildAvailable=function(e,t,n,i){let o=2;return n!==e*2&&++o,i!==t*2&&(o-=2),(this._childTileMask&1<<o)!==0};_S.prototype.wasCreatedByUpsampling=function(){return this._createdByUpsampling};var mTt=new U,hTt=new U,fTt=new U,wSe=new m;function pTt(e,t,n){let i=e._mesh,o=i.vertices,r=i.encoding,s=i.indices;for(let a=0,c=s.length;a<c;a+=3){let d=s[a],u=s[a+1],h=s[a+2],p=r.decodeTextureCoordinates(o,d,mTt),g=r.decodeTextureCoordinates(o,u,hTt),f=r.decodeTextureCoordinates(o,h,fTt),y=L0.computeBarycentricCoordinates(t,n,p.x,p.y,g.x,g.y,f.x,f.y,wSe);if(y.x>=-1e-15&&y.y>=-1e-15&&y.z>=-1e-15){let x=r.decodeHeight(o,d),S=r.decodeHeight(o,u),C=r.decodeHeight(o,h);return y.x*x+y.y*S+y.z*C}}}var bTt=Uint16Array.BYTES_PER_ELEMENT,PSe=Uint32Array.BYTES_PER_ELEMENT,_7=Int32Array.BYTES_PER_ELEMENT,gTt=Float32Array.BYTES_PER_ELEMENT,T7=Float64Array.BYTES_PER_ELEMENT;function yTt(e,t,n,i){let o=e._buffer,r=0,s=0,a=0;n>.5?(t>.5?(r=2,s=.5):r=3,a=.5):t>.5&&(r=1,s=.5);let c=new DataView(o),d=0;for(let Z=0;Z<r;++Z)d+=c.getUint32(d,!0),d+=PSe;d+=PSe,d+=2*T7;let u=X.toRadians(c.getFloat64(d,!0)*180);d+=T7;let h=X.toRadians(c.getFloat64(d,!0)*180);d+=T7;let p=i.width/u/2,g=i.height/h/2,f=c.getInt32(d,!0);d+=_7;let y=c.getInt32(d,!0)*3;d+=_7,d+=_7;let x=new Array(f),S=new Array(f),C=new Array(f),V;for(V=0;V<f;++V)x[V]=s+c.getUint8(d++)*p,S[V]=a+c.getUint8(d++)*g,C[V]=c.getFloat32(d,!0)*6371010,d+=gTt;let L=new Array(y);for(V=0;V<y;++V)L[V]=c.getUint16(d,!0),d+=bTt;for(V=0;V<y;V+=3){let Z=L[V],E=L[V+1],P=L[V+2],W=x[Z],v=x[E],A=x[P],b=S[Z],R=S[E],G=S[P],I=L0.computeBarycentricCoordinates(t,n,W,b,v,R,A,G,wSe);if(I.x>=-1e-15&&I.y>=-1e-15&&I.z>=-1e-15)return I.x*C[Z]+I.y*C[E]+I.z*C[P]}}var IL=_S;var c4i=_(T(),1);var Tm={UNKNOWN:0,NONE:1,SELF:2,PARENT:3},j3=new q;function q3(){this._terrainCache={},this._lastTidy=q.now()}q3.prototype.add=function(e,t){this._terrainCache[e]={buffer:t,timestamp:q.now()}};q3.prototype.get=function(e){let n=this._terrainCache[e];if(l(n))return delete this._terrainCache[e],n.buffer};q3.prototype.tidy=function(){if(q.now(j3),q.secondsDifference(j3,this._lastTidy)>10){let e=this._terrainCache,t=Object.keys(e),n=t.length;for(let i=0;i<n;++i){let o=t[i],r=e[o];q.secondsDifference(j3,r.timestamp)>10&&delete e[o]}q.clone(j3,this._lastTidy)}};function By(e){e=e??Y.EMPTY_OBJECT,this._tilingScheme=new Hi({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:2,rectangle:new ce(-X.PI,-X.PI,X.PI,X.PI),ellipsoid:e.ellipsoid});let t=e.credit;typeof t=="string"&&(t=new Ct(t)),this._credit=t,this._levelZeroMaximumGeometricError=40075.16,this._terrainCache=new q3,this._terrainPromises={},this._terrainRequests={},this._errorEvent=new be}Object.defineProperties(By.prototype,{url:{get:function(){return this._metadata.url}},proxy:{get:function(){return this._metadata.proxy}},tilingScheme:{get:function(){return this._tilingScheme}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},hasWaterMask:{get:function(){return!1}},hasVertexNormals:{get:function(){return!1}},availability:{get:function(){}}});By.fromMetadata=function(e,t){if(!e.terrainPresent)throw new ae(`The server ${e.url} doesn't have terrain`);let n=new By(t);return n._metadata=e,n};var xTt=new xi("decodeGoogleEarthEnterprisePacket");function FSe(e,t,n){let i=t.getChildBitmask();if(t.terrainState===Tm.PARENT){i=0;for(let o=0;o<4;++o){let r=n.getTileInformationFromQuadKey(e+o.toString());l(r)&&r.hasTerrain()&&(i|=1<<o)}}return i}By.prototype.requestTileGeometry=function(e,t,n,i){let o=Z0.tileXYToQuadKey(e,t,n),r=this._terrainCache,s=this._metadata,a=s.getTileInformationFromQuadKey(o);if(!l(a))return Promise.reject(new ae("Terrain tile doesn't exist"));let c=a.terrainState;l(c)||(c=a.terrainState=Tm.UNKNOWN);let d=r.get(o);if(l(d)){let S=s.providers[a.terrainProvider];return Promise.resolve(new IL({buffer:d,childTileMask:FSe(o,a,s),credits:l(S)?[S]:void 0,negativeAltitudeExponentBias:s.negativeAltitudeExponentBias,negativeElevationThreshold:s.negativeAltitudeThreshold}))}if(r.tidy(),a.ancestorHasTerrain){if(c===Tm.NONE)return Promise.reject(new ae("Terrain tile doesn't exist"))}else return Promise.resolve(new Oa({buffer:new Uint8Array(16*16),width:16,height:16}));let u,h=o,p=-1;switch(c){case Tm.SELF:p=a.terrainVersion;break;case Tm.PARENT:h=h.substring(0,h.length-1),u=s.getTileInformationFromQuadKey(h),p=u.terrainVersion;break;case Tm.UNKNOWN:a.hasTerrain()?p=a.terrainVersion:(h=h.substring(0,h.length-1),u=s.getTileInformationFromQuadKey(h),l(u)&&u.hasTerrain()&&(p=u.terrainVersion));break}if(p<0)return Promise.reject(new ae("Terrain tile doesn't exist"));let g=this._terrainPromises,f=this._terrainRequests,y,x;if(l(g[h]))y=g[h],x=f[h];else{x=i;let S=_Tt(this,h,p,x).fetchArrayBuffer();if(!l(S))return;y=S.then(function(C){return l(C)?xTt.scheduleTask({buffer:C,type:"Terrain",key:s.key},[C]).then(function(V){let L=s.getTileInformationFromQuadKey(h);L.terrainState=Tm.SELF,r.add(h,V[0]);let Z=L.terrainProvider,E=V.length-1;for(let P=0;P<E;++P){let W=h+P.toString(),v=s.getTileInformationFromQuadKey(W);l(v)&&(r.add(W,V[P+1]),v.terrainState=Tm.PARENT,v.terrainProvider===0&&(v.terrainProvider=Z))}}):Promise.reject(new ae("Failed to load terrain."))}),g[h]=y,f[h]=x,y=y.finally(function(){delete g[h],delete f[h]})}return y.then(function(){let S=r.get(o);if(l(S)){let C=s.providers[a.terrainProvider];return new IL({buffer:S,childTileMask:FSe(o,a,s),credits:l(C)?[C]:void 0,negativeAltitudeExponentBias:s.negativeAltitudeExponentBias,negativeElevationThreshold:s.negativeAltitudeThreshold})}return Promise.reject(new ae("Failed to load terrain."))}).catch(function(S){return x.state===jn.CANCELLED?(i.state=x.state,Promise.reject(S)):(a.terrainState=Tm.NONE,Promise.reject(S))})};By.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};By.prototype.getTileDataAvailable=function(e,t,n){let i=this._metadata,o=Z0.tileXYToQuadKey(e,t,n),r=i.getTileInformation(e,t,n);if(r===null)return!1;if(l(r)){if(!r.ancestorHasTerrain)return!0;let s=r.terrainState;if(s===Tm.NONE)return!1;if((!l(s)||s===Tm.UNKNOWN)&&(r.terrainState=Tm.UNKNOWN,!r.hasTerrain())){o=o.substring(0,o.length-1);let a=i.getTileInformationFromQuadKey(o);if(!l(a)||!a.hasTerrain())return!1}return!0}if(i.isValid(o)){let s=new zo({throttle:!1,throttleByServer:!0,type:ds.TERRAIN});i.populateSubtree(e,t,n,s)}return!1};By.prototype.loadTileDataAvailability=function(e,t,n){};function _Tt(e,t,n,i){return n=l(n)&&n>0?n:1,e._metadata.resource.getDerivedResource({url:`flatfile?f1c-0${t}-t.${n.toString()}`,request:i})}var S7=By;var p4i=_(T(),1);var TTt="https://maps.googleapis.com/maps/api/geocode/json",ASe='<img alt="Google" src="https://assets.ion.cesium.com/google-credit.png" style="vertical-align:-5px">';function C7(e){e=e??Y.EMPTY_OBJECT;let t=e.key;this._resource=new Ze({url:TTt,queryParameters:{key:t}}),this._credit=new Ct(ASe,!0)}Object.defineProperties(C7.prototype,{credit:{get:function(){return this._credit}}});C7.prototype.geocode=async function(e){let n=await this._resource.getDerivedResource({queryParameters:{address:e}}).fetchJson();if(n.status==="ZERO_RESULTS")return[];if(n.status!=="OK")throw new ae(`GoogleGeocoderService got a bad response ${n.status}: ${n.error_message}`);return n.results.map(o=>{let r=o.geometry.viewport.southwest,s=o.geometry.viewport.northeast;return{displayName:o.formatted_address,destination:ce.fromDegrees(r.lng,r.lat,s.lng,s.lat),attribution:{html:ASe,collapsible:!1}}})};var V7=C7;var x4i=_(T(),1);var $3={};$3.defaultApiKey=void 0;$3.mapTilesApiEndpoint=new Ze({url:"https://tile.googleapis.com/v1/"});$3.getDefaultCredit=function(){return new Ct('<img src="https://assets.ion.cesium.com/google-credit.png" style="vertical-align: -5px" alt="Google">',!0)};var TS=$3;var V4i=_(T(),1);var xs={};xs.ExportStatus=Object.freeze({NotStarted:"NotStarted",InProgress:"InProgress",Complete:"Complete",Invalid:"Invalid"});xs.ExportType=Object.freeze({IMODEL:"IMODEL",CESIUM:"CESIUM","3DTILES":"3DTILES"});xs.RealityDataType=Object.freeze({Cesium3DTiles:"Cesium3DTiles",PNTS:"PNTS",RealityMesh3DTiles:"RealityMesh3DTiles",Terrain3DTiles:"Terrain3DTiles",KML:"KML",GeoJSON:"GeoJSON",Unstructured:"Unstructured"});xs.defaultAccessToken=void 0;xs.defaultShareKey=void 0;xs._getAuthorizationHeader=function(){return l(xs.defaultShareKey)?`Basic ${xs.defaultShareKey}`:`Bearer ${xs.defaultAccessToken}`};xs.apiEndpoint=new Ze({url:"https://api.bentley.com"});xs.getExports=async function(e){let t=new Ze({url:`${xs.apiEndpoint}mesh-export`,headers:{Authorization:xs._getAuthorizationHeader(),Accept:"application/vnd.bentley.itwin-platform.v1+json",Prefer:"return=representation"},queryParameters:{iModelId:e,exportType:xs.ExportType["3DTILES"],$top:"5",client:"CesiumJS"}});typeof CESIUM_VERSION<"u"&&t.appendQueryParameters({clientVersion:CESIUM_VERSION});try{return await t.fetchJson()}catch(n){let i=JSON.parse(n.response);throw n.statusCode===401?new ae(`Unauthorized, bad token, wrong scopes or headers bad. ${i.error.details[0].code}`):n.statusCode===403?(console.error(i.error.code,i.error.message),new ae("Not allowed, forbidden")):n.statusCode===422?new ae(`Unprocessable Entity:${i.error.code} ${i.error.message}`):n.statusCode===429?new ae("Too many requests"):new ae(`Unknown request failure ${n.statusCode}`)}};xs.getRealityDataMetadata=async function(e,t){let n=new Ze({url:`${xs.apiEndpoint}reality-management/reality-data/${t}`,headers:{Authorization:xs._getAuthorizationHeader(),Accept:"application/vnd.bentley.itwin-platform.v1+json"},queryParameters:{iTwinId:e}});try{return(await n.fetchJson()).realityData}catch(i){let o=JSON.parse(i.response);throw i.statusCode===401?new ae(`Unauthorized, bad token, wrong scopes or headers bad. ${o.error.details[0].code}`):i.statusCode===403?(console.error(o.error.code,o.error.message),new ae("Not allowed, forbidden")):i.statusCode===404?new ae(`Reality data not found: ${e}, ${t}`):i.statusCode===422?new ae(`Unprocessable Entity:${o.error.code} ${o.error.message}`):i.statusCode===429?new ae("Too many requests"):new ae(`Unknown request failure ${i.statusCode}`)}};xs.getRealityDataURL=async function(e,t,n){let i=new Ze({url:`${xs.apiEndpoint}reality-management/reality-data/${t}/readaccess`,headers:{Authorization:xs._getAuthorizationHeader(),Accept:"application/vnd.bentley.itwin-platform.v1+json"},queryParameters:{iTwinId:e}});try{let r=(await i.fetchJson())._links.containerUrl.href,s=new URL(r);return s.pathname=`${s.pathname}/${n}`,s.toString()}catch(o){let r=JSON.parse(o.response);throw o.statusCode===401?new ae(`Unauthorized, bad token, wrong scopes or headers bad. ${r.error.details[0].code}`):o.statusCode===403?(console.error(r.error.code,r.error.message),new ae("Not allowed, forbidden")):o.statusCode===404?new ae(`Reality data not found: ${e}, ${t}`):o.statusCode===422?new ae(`Unprocessable Entity:${r.error.code} ${r.error.message}`):o.statusCode===429?new ae("Too many requests"):new ae(`Unknown request failure ${o.statusCode}`)}};var As=xs;var Z4i=_(T(),1);var LA={};LA.type=void 0;LA.getRequiredDataPoints=pe.throwInstantiationError;LA.interpolateOrderZero=pe.throwInstantiationError;LA.interpolate=pe.throwInstantiationError;var L7=LA;var E4i=_(T(),1),STt={GOOGLE:"GOOGLE",BING:"BING",DEFAULT:"DEFAULT"},G0=Object.freeze(STt);var z4i=_(T(),1);var F4i=_(T(),1);function R7(e){this._url=Ze.createIfNeeded(e),this._url.appendForwardSlash()}Object.defineProperties(R7.prototype,{url:{get:function(){return this._url}},credit:{get:function(){}}});R7.prototype.geocode=async function(e,t){return this._url.getDerivedResource({url:t===Dy.AUTOCOMPLETE?"autocomplete":"search",queryParameters:{text:e}}).fetchJson().then(function(i){return i.features.map(function(o){let r,s=o.bbox;if(l(s))r=ce.fromDegrees(s[0],s[1],s[2],s[3]);else{let a=o.geometry.coordinates[0],c=o.geometry.coordinates[1];r=m.fromDegrees(a,c)}return{displayName:o.properties.label,destination:r,attributions:i.attributions}})})};var RA=R7;function CTt(e){if(!Object.values(G0).some(t=>t===e))throw new pe(`Invalid geocodeProviderType: "${e}"`)}var MSe=Object.freeze({[G0.GOOGLE]:"google",[G0.BING]:"bing",[G0.DEFAULT]:void 0});function VTt(e){return MSe[e]}function LTt(e){return Object.entries(MSe).find(t=>t[1]===e)[0]}function Z7(e){e=e??Y.EMPTY_OBJECT;let t=e.geocodeProviderType??G0.DEFAULT,n=e.accessToken??Ym.defaultAccessToken,i=Ze.createIfNeeded(e.server??Ym.defaultServer);i.appendForwardSlash();let o=Ym.getDefaultTokenCredit(n);l(o)&&e.scene.frameState.creditDisplay.addStaticCredit(Ct.clone(o));let r=i.getDerivedResource({url:"v1/geocode"});l(n)&&r.appendQueryParameters({access_token:n}),this._accessToken=n,this._server=i,this._pelias=new RA(r),this.geocodeProviderType=t}Object.defineProperties(Z7.prototype,{credit:{get:function(){}},geocodeProviderType:{get:function(){return LTt(this._pelias.url.queryParameters.geocoder)},set:function(e){CTt(e);let t={...this._pelias.url.queryParameters,geocoder:VTt(e)};l(t.geocoder)||delete t.geocoder,this._pelias.url.setQueryParameters(t)}}});Z7.prototype.geocode=async function(e,t){return this._pelias.geocode(e,t)};var SS=Z7;var J4i=_(T(),1);function eB(){pe.throwInstantiationError()}Object.defineProperties(eB.prototype,{ellipsoid:{get:pe.throwInstantiationError}});eB.prototype.project=pe.throwInstantiationError;eB.prototype.unproject=pe.throwInstantiationError;var G7=eB;var eji=_(T(),1);function XL(e){e=e??Y.EMPTY_OBJECT;let t=e.weights,n=e.times;this._times=n,this._weights=t,this._count=t.length/n.length,this._lastTimeIndex=0}Object.defineProperties(XL.prototype,{times:{get:function(){return this._times}},weights:{get:function(){return this._weights}}});XL.prototype.findTimeInterval=io.prototype.findTimeInterval;XL.prototype.wrapTime=io.prototype.wrapTime;XL.prototype.clampTime=io.prototype.clampTime;XL.prototype.evaluate=function(e,t){let n=this.weights,i=this.times,o=this._lastTimeIndex=this.findTimeInterval(e,this._lastTimeIndex),r=(e-i[o])/(i[o+1]-i[o]);l(t)||(t=new Array(this._count));for(let s=0;s<this._count;s++){let a=o*this._count+s;t[s]=n[a]*(1-r)+n[a+this._count]*r}return t};var E7=XL;var cji=_(T(),1);function I7(e,t,n){e=Ze.createIfNeeded(e),e.appendForwardSlash(),e.setQueryParameters({key:t}),this._url=e,this._params=n??{},this._credit=new Ct('Geodata copyright <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors',!1)}Object.defineProperties(I7.prototype,{url:{get:function(){return this._url}},params:{get:function(){return this._params}},credit:{get:function(){return this._credit}}});I7.prototype.geocode=async function(e){return this._url.getDerivedResource({url:"json",queryParameters:St(this._params,{q:e})}).fetchJson().then(function(n){return n.results.map(function(i){let o,r=i.bounds;if(l(r))o=ce.fromDegrees(r.southwest.lng,r.southwest.lat,r.northeast.lng,r.northeast.lat);else{let s=i.geometry.lat,a=i.geometry.lng;o=m.fromDegrees(s,a)}return{displayName:i.formatted,destination:o}})})};var X7=I7;var uji=_(T(),1);var RTt={packedLength:void 0,pack:pe.throwInstantiationError,unpack:pe.throwInstantiationError},W7=RTt;var fji=_(T(),1);var ZTt={packedInterpolationLength:void 0,convertPackedArrayForInterpolation:pe.throwInstantiationError,unpackInterpolationResult:pe.throwInstantiationError},P7=ZTt;var gji=_(T(),1);function NSe(){pe.throwInstantiationError()}NSe.prototype.getURL=pe.throwInstantiationError;var v7=NSe;var vji=_(T(),1);function GTt(e,t,n,i,o,r,s){let a=Pi.numberOfPoints(e,t,o),c,d=n.red,u=n.green,h=n.blue,p=n.alpha,g=i.red,f=i.green,y=i.blue,x=i.alpha;if(D.equals(n,i)){for(c=0;c<a;c++)r[s++]=D.floatToByte(d),r[s++]=D.floatToByte(u),r[s++]=D.floatToByte(h),r[s++]=D.floatToByte(p);return s}let S=(g-d)/a,C=(f-u)/a,V=(y-h)/a,L=(x-p)/a,Z=s;for(c=0;c<a;c++)r[Z++]=D.floatToByte(d+c*S),r[Z++]=D.floatToByte(u+c*C),r[Z++]=D.floatToByte(h+c*V),r[Z++]=D.floatToByte(p+c*L);return Z}function ZA(e){e=e??Y.EMPTY_OBJECT;let t=e.positions,n=e.colors,i=e.colorsPerVertex??!1;this._positions=t,this._colors=n,this._colorsPerVertex=i,this._arcType=e.arcType??en.GEODESIC,this._granularity=e.granularity??X.RADIANS_PER_DEGREE,this._ellipsoid=e.ellipsoid??ne.default,this._workerName="createSimplePolylineGeometry";let o=1+t.length*m.packedLength;o+=l(n)?1+n.length*D.packedLength:1,this.packedLength=o+ne.packedLength+3}ZA.pack=function(e,t,n){n=n??0;let i,o=e._positions,r=o.length;for(t[n++]=r,i=0;i<r;++i,n+=m.packedLength)m.pack(o[i],t,n);let s=e._colors;for(r=l(s)?s.length:0,t[n++]=r,i=0;i<r;++i,n+=D.packedLength)D.pack(s[i],t,n);return ne.pack(e._ellipsoid,t,n),n+=ne.packedLength,t[n++]=e._colorsPerVertex?1:0,t[n++]=e._arcType,t[n]=e._granularity,t};ZA.unpack=function(e,t,n){t=t??0;let i,o=e[t++],r=new Array(o);for(i=0;i<o;++i,t+=m.packedLength)r[i]=m.unpack(e,t);o=e[t++];let s=o>0?new Array(o):void 0;for(i=0;i<o;++i,t+=D.packedLength)s[i]=D.unpack(e,t);let a=ne.unpack(e,t);t+=ne.packedLength;let c=e[t++]===1,d=e[t++],u=e[t];return l(n)?(n._positions=r,n._colors=s,n._ellipsoid=a,n._colorsPerVertex=c,n._arcType=d,n._granularity=u,n):new ZA({positions:r,colors:s,ellipsoid:a,colorsPerVertex:c,arcType:d,granularity:u})};var tB=new Array(2),nB=new Array(2),ETt={positions:tB,height:nB,ellipsoid:void 0,minDistance:void 0,granularity:void 0};ZA.createGeometry=function(e){let t=e._positions,n=e._colors,i=e._colorsPerVertex,o=e._arcType,r=e._granularity,s=e._ellipsoid,a=X.chordLength(r,s.maximumRadius),c=l(n)&&!i,d,u=t.length,h,p,g,f,y=0;if(o===en.GEODESIC||o===en.RHUMB){let L,Z,E;o===en.GEODESIC?(L=X.chordLength(r,s.maximumRadius),Z=Pi.numberOfPoints,E=Pi.generateArc):(L=r,Z=Pi.numberOfPointsRhumbLine,E=Pi.generateRhumbArc);let P=Pi.extractHeights(t,s),W=ETt;if(o===en.GEODESIC?W.minDistance=a:W.granularity=r,W.ellipsoid=s,c){let v=0;for(d=0;d<u-1;d++)v+=Z(t[d],t[d+1],L)+1;h=new Float64Array(v*3),g=new Uint8Array(v*4),W.positions=tB,W.height=nB;let A=0;for(d=0;d<u-1;++d){tB[0]=t[d],tB[1]=t[d+1],nB[0]=P[d],nB[1]=P[d+1];let b=E(W);if(l(n)){let R=b.length/3;f=n[d];for(let G=0;G<R;++G)g[A++]=D.floatToByte(f.red),g[A++]=D.floatToByte(f.green),g[A++]=D.floatToByte(f.blue),g[A++]=D.floatToByte(f.alpha)}h.set(b,y),y+=b.length}}else if(W.positions=t,W.height=P,h=new Float64Array(E(W)),l(n)){for(g=new Uint8Array(h.length/3*4),d=0;d<u-1;++d){let A=t[d],b=t[d+1],R=n[d],G=n[d+1];y=GTt(A,b,R,G,a,g,y)}let v=n[u-1];g[y++]=D.floatToByte(v.red),g[y++]=D.floatToByte(v.green),g[y++]=D.floatToByte(v.blue),g[y++]=D.floatToByte(v.alpha)}}else{p=c?u*2-2:u,h=new Float64Array(p*3),g=l(n)?new Uint8Array(p*4):void 0;let L=0,Z=0;for(d=0;d<u;++d){let E=t[d];if(c&&d>0&&(m.pack(E,h,L),L+=3,f=n[d-1],g[Z++]=D.floatToByte(f.red),g[Z++]=D.floatToByte(f.green),g[Z++]=D.floatToByte(f.blue),g[Z++]=D.floatToByte(f.alpha)),c&&d===u-1)break;m.pack(E,h,L),L+=3,l(n)&&(f=n[d],g[Z++]=D.floatToByte(f.red),g[Z++]=D.floatToByte(f.green),g[Z++]=D.floatToByte(f.blue),g[Z++]=D.floatToByte(f.alpha))}}let x=new mn;x.position=new Ge({componentDatatype:Q.DOUBLE,componentsPerAttribute:3,values:h}),l(n)&&(x.color=new Ge({componentDatatype:Q.UNSIGNED_BYTE,componentsPerAttribute:4,values:g,normalize:!0})),p=h.length/3;let S=(p-1)*2,C=Ae.createTypedArray(p,S),V=0;for(d=0;d<p-1;++d)C[V++]=d,C[V++]=d+1;return new lt({attributes:x,indices:C,primitiveType:we.LINES,boundingSphere:le.fromPoints(t)})};var w7=ZA;var kji=_(T(),1);function WL(e){let t=e.radius??1,i={radii:new m(t,t,t),stackPartitions:e.stackPartitions,slicePartitions:e.slicePartitions,vertexFormat:e.vertexFormat};this._ellipsoidGeometry=new js(i),this._workerName="createSphereGeometry"}WL.packedLength=js.packedLength;WL.pack=function(e,t,n){return js.pack(e._ellipsoidGeometry,t,n)};var ITt=new js,Oy={radius:void 0,radii:new m,vertexFormat:new Xe,stackPartitions:void 0,slicePartitions:void 0};WL.unpack=function(e,t,n){let i=js.unpack(e,t,ITt);return Oy.vertexFormat=Xe.clone(i._vertexFormat,Oy.vertexFormat),Oy.stackPartitions=i._stackPartitions,Oy.slicePartitions=i._slicePartitions,l(n)?(m.clone(i._radii,Oy.radii),n._ellipsoidGeometry=new js(Oy),n):(Oy.radius=i._radii.x,new WL(Oy))};WL.createGeometry=function(e){return js.createGeometry(e._ellipsoidGeometry)};var F7=WL;var Bji=_(T(),1);function Yy(e){}Object.defineProperties(Yy.prototype,{ellipsoid:{get:pe.throwInstantiationError},rectangle:{get:pe.throwInstantiationError},projection:{get:pe.throwInstantiationError}});Yy.prototype.getNumberOfXTilesAtLevel=pe.throwInstantiationError;Yy.prototype.getNumberOfYTilesAtLevel=pe.throwInstantiationError;Yy.prototype.rectangleToNativeRectangle=pe.throwInstantiationError;Yy.prototype.tileXYToNativeRectangle=pe.throwInstantiationError;Yy.prototype.tileXYToRectangle=pe.throwInstantiationError;Yy.prototype.positionToTileXY=pe.throwInstantiationError;var A7=Yy;var r8i=_(T(),1);function XTt(e,t){this.rectangle=e,this.maxLevel=t}function kSe(e){this.ellipsoid=e.ellipsoid??ne.default,this.tilingScheme=void 0,this.heightmapWidth=void 0,this.heightmapHeight=void 0,this.levelZeroMaximumGeometricError=void 0,this.rectangles=[]}kSe.prototype.build=function(e){e._tilingScheme=this.tilingScheme,e._heightmapWidth=this.heightmapWidth,e._heightmapHeight=this.heightmapHeight,e._levelZeroMaximumGeometricError=this.levelZeroMaximumGeometricError,e._rectangles=this.rectangles};function WTt(e,t){let n=t.getElementsByTagName("SRS")[0].textContent;if(n==="EPSG:4326")e.tilingScheme=new Hi({ellipsoid:e.ellipsoid});else throw new ae(`SRS ${n} is not supported`);let i=t.getElementsByTagName("TileFormat")[0];e.heightmapWidth=parseInt(i.getAttribute("width"),10),e.heightmapHeight=parseInt(i.getAttribute("height"),10),e.levelZeroMaximumGeometricError=os.getEstimatedLevelZeroGeometricErrorForAHeightmap(e.ellipsoid,Math.min(e.heightmapWidth,e.heightmapHeight),e.tilingScheme.getNumberOfXTilesAtLevel(0));let o=t.getElementsByTagName("DataExtent");for(let r=0;r<o.length;++r){let s=o[r],a=X.toRadians(parseFloat(s.getAttribute("minx"))),c=X.toRadians(parseFloat(s.getAttribute("miny"))),d=X.toRadians(parseFloat(s.getAttribute("maxx"))),u=X.toRadians(parseFloat(s.getAttribute("maxy"))),h=parseInt(s.getAttribute("maxlevel"),10);e.rectangles.push(new XTt(new ce(a,c,d,u),h))}}function PTt(e,t,n){let i=`An error occurred while accessing ${e.url}`;throw l(t)&&l(t.message)&&(i=`${i}: ${t.message}`),Zo.reportError(void 0,n,l(n)?n._errorEvent:void 0,i),new ae(i)}async function vTt(e,t,n){try{let i=await t.fetchXML();WTt(e,i)}catch(i){PTt(t,i,n)}}function zy(e){e=e??Y.EMPTY_OBJECT,this._errorEvent=new be,this._terrainDataStructure={heightScale:1/1e3,heightOffset:-1e3,elementsPerHeight:3,stride:4,elementMultiplier:256,isBigEndian:!0,lowestEncodedHeight:0,highestEncodedHeight:256*256*256-1};let t=e.credit;typeof t=="string"&&(t=new Ct(t)),this._credit=t,this._tilingScheme=void 0,this._rectangles=[]}Object.defineProperties(zy.prototype,{errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},tilingScheme:{get:function(){return this._tilingScheme}},hasWaterMask:{get:function(){return!1}},hasVertexNormals:{get:function(){return!1}},availability:{get:function(){}}});zy.fromUrl=async function(e,t){t=t??Y.EMPTY_OBJECT;let n=new kSe(t),i=Ze.createIfNeeded(e);await vTt(n,i);let o=new zy(t);return n.build(o),o._resource=i,o};zy.prototype.requestTileGeometry=function(e,t,n,i){let o=this._tilingScheme.getNumberOfYTilesAtLevel(n),s=this._resource.getDerivedResource({url:`${n}/${e}/${o-t-1}.tif`,queryParameters:{cesium:!0},request:i}).fetchImage({preferImageBitmap:!0});if(!l(s))return;let a=this;return Promise.resolve(s).then(function(c){return new Oa({buffer:Zm(c),width:a._heightmapWidth,height:a._heightmapHeight,childTileMask:wTt(a,e,t,n),structure:a._terrainDataStructure})})};zy.prototype.getLevelMaximumGeometricError=function(e){return this._levelZeroMaximumGeometricError/(1<<e)};var USe=new ce;function wTt(e,t,n,i){let o=e._tilingScheme,r=e._rectangles,s=o.tileXYToRectangle(t,n,i),a=0;for(let c=0;c<r.length&&a!==15;++c){let d=r[c];if(d.maxLevel<=i)continue;let u=d.rectangle,h=ce.intersection(u,s,USe);l(h)&&(iB(o,u,t*2,n*2,i+1)&&(a|=4),iB(o,u,t*2+1,n*2,i+1)&&(a|=8),iB(o,u,t*2,n*2+1,i+1)&&(a|=1),iB(o,u,t*2+1,n*2+1,i+1)&&(a|=2))}return a}function iB(e,t,n,i,o){let r=e.tileXYToRectangle(n,i,o);return l(ce.intersection(r,t,USe))}zy.prototype.getTileDataAvailable=function(e,t,n){};zy.prototype.loadTileDataAvailability=function(e,t,n){};var M7=zy;var m8i=_(T(),1);function CS(e){e=e??Y.EMPTY_OBJECT,this._clock=void 0,this._element=void 0,this._clockSubscription=void 0,this._seekFunction=void 0,this._lastPlaybackRate=void 0,this.clock=e.clock,this.element=e.element,this.epoch=e.epoch??Be.MINIMUM_VALUE,this.tolerance=e.tolerance??1,this._seeking=!1,this._seekFunction=void 0,this._firstTickAfterSeek=!1}Object.defineProperties(CS.prototype,{clock:{get:function(){return this._clock},set:function(e){let t=this._clock;t!==e&&(l(t)&&(this._clockSubscription(),this._clockSubscription=void 0),l(e)&&(this._clockSubscription=e.onTick.addEventListener(CS.prototype._onTick,this)),this._clock=e)}},element:{get:function(){return this._element},set:function(e){let t=this._element;t!==e&&(l(t)&&t.removeEventListener("seeked",this._seekFunction,!1),l(e)&&(this._seeking=!1,this._seekFunction=FTt(this),e.addEventListener("seeked",this._seekFunction,!1)),this._element=e,this._seeking=!1,this._firstTickAfterSeek=!1)}}});CS.prototype.destroy=function(){return this.element=void 0,this.clock=void 0,me(this)};CS.prototype.isDestroyed=function(){return!1};CS.prototype._trySetPlaybackRate=function(e){if(this._lastPlaybackRate===e.multiplier)return;let t=this._element;try{t.playbackRate=e.multiplier}catch{t.playbackRate=0}this._lastPlaybackRate=e.multiplier};CS.prototype._onTick=function(e){let t=this._element;if(!l(t)||t.readyState<2)return;let n=t.paused,i=e.shouldAnimate;if(i===n&&(i?t.play():t.pause()),this._seeking||this._firstTickAfterSeek){this._firstTickAfterSeek=!1;return}this._trySetPlaybackRate(e);let o=e.currentTime,r=this.epoch??Be.MINIMUM_VALUE,s=q.secondsDifference(o,r),a=t.duration,c,d=t.currentTime;t.loop?(s=s%a,s<0&&(s=a-s),c=s):s>a?c=a:s<0?c=0:c=s;let u=i?this.tolerance??1:.001;Math.abs(c-d)>u&&(this._seeking=!0,t.currentTime=c)};function FTt(e){return function(){e._seeking=!1,e._firstTickAfterSeek=!0}}var N7=CS;var f8i=_(T(),1),ATt={VK_FORMAT_UNDEFINED:0,VK_FORMAT_R4G4_UNORM_PACK8:1,VK_FORMAT_R4G4B4A4_UNORM_PACK16:2,VK_FORMAT_B4G4R4A4_UNORM_PACK16:3,VK_FORMAT_R5G6B5_UNORM_PACK16:4,VK_FORMAT_B5G6R5_UNORM_PACK16:5,VK_FORMAT_R5G5B5A1_UNORM_PACK16:6,VK_FORMAT_B5G5R5A1_UNORM_PACK16:7,VK_FORMAT_A1R5G5B5_UNORM_PACK16:8,VK_FORMAT_R8_UNORM:9,VK_FORMAT_R8_SNORM:10,VK_FORMAT_R8_USCALED:11,VK_FORMAT_R8_SSCALED:12,VK_FORMAT_R8_UINT:13,VK_FORMAT_R8_SINT:14,VK_FORMAT_R8_SRGB:15,VK_FORMAT_R8G8_UNORM:16,VK_FORMAT_R8G8_SNORM:17,VK_FORMAT_R8G8_USCALED:18,VK_FORMAT_R8G8_SSCALED:19,VK_FORMAT_R8G8_UINT:20,VK_FORMAT_R8G8_SINT:21,VK_FORMAT_R8G8_SRGB:22,VK_FORMAT_R8G8B8_UNORM:23,VK_FORMAT_R8G8B8_SNORM:24,VK_FORMAT_R8G8B8_USCALED:25,VK_FORMAT_R8G8B8_SSCALED:26,VK_FORMAT_R8G8B8_UINT:27,VK_FORMAT_R8G8B8_SINT:28,VK_FORMAT_R8G8B8_SRGB:29,VK_FORMAT_B8G8R8_UNORM:30,VK_FORMAT_B8G8R8_SNORM:31,VK_FORMAT_B8G8R8_USCALED:32,VK_FORMAT_B8G8R8_SSCALED:33,VK_FORMAT_B8G8R8_UINT:34,VK_FORMAT_B8G8R8_SINT:35,VK_FORMAT_B8G8R8_SRGB:36,VK_FORMAT_R8G8B8A8_UNORM:37,VK_FORMAT_R8G8B8A8_SNORM:38,VK_FORMAT_R8G8B8A8_USCALED:39,VK_FORMAT_R8G8B8A8_SSCALED:40,VK_FORMAT_R8G8B8A8_UINT:41,VK_FORMAT_R8G8B8A8_SINT:42,VK_FORMAT_R8G8B8A8_SRGB:43,VK_FORMAT_B8G8R8A8_UNORM:44,VK_FORMAT_B8G8R8A8_SNORM:45,VK_FORMAT_B8G8R8A8_USCALED:46,VK_FORMAT_B8G8R8A8_SSCALED:47,VK_FORMAT_B8G8R8A8_UINT:48,VK_FORMAT_B8G8R8A8_SINT:49,VK_FORMAT_B8G8R8A8_SRGB:50,VK_FORMAT_A8B8G8R8_UNORM_PACK32:51,VK_FORMAT_A8B8G8R8_SNORM_PACK32:52,VK_FORMAT_A8B8G8R8_USCALED_PACK32:53,VK_FORMAT_A8B8G8R8_SSCALED_PACK32:54,VK_FORMAT_A8B8G8R8_UINT_PACK32:55,VK_FORMAT_A8B8G8R8_SINT_PACK32:56,VK_FORMAT_A8B8G8R8_SRGB_PACK32:57,VK_FORMAT_A2R10G10B10_UNORM_PACK32:58,VK_FORMAT_A2R10G10B10_SNORM_PACK32:59,VK_FORMAT_A2R10G10B10_USCALED_PACK32:60,VK_FORMAT_A2R10G10B10_SSCALED_PACK32:61,VK_FORMAT_A2R10G10B10_UINT_PACK32:62,VK_FORMAT_A2R10G10B10_SINT_PACK32:63,VK_FORMAT_A2B10G10R10_UNORM_PACK32:64,VK_FORMAT_A2B10G10R10_SNORM_PACK32:65,VK_FORMAT_A2B10G10R10_USCALED_PACK32:66,VK_FORMAT_A2B10G10R10_SSCALED_PACK32:67,VK_FORMAT_A2B10G10R10_UINT_PACK32:68,VK_FORMAT_A2B10G10R10_SINT_PACK32:69,VK_FORMAT_R16_UNORM:70,VK_FORMAT_R16_SNORM:71,VK_FORMAT_R16_USCALED:72,VK_FORMAT_R16_SSCALED:73,VK_FORMAT_R16_UINT:74,VK_FORMAT_R16_SINT:75,VK_FORMAT_R16_SFLOAT:76,VK_FORMAT_R16G16_UNORM:77,VK_FORMAT_R16G16_SNORM:78,VK_FORMAT_R16G16_USCALED:79,VK_FORMAT_R16G16_SSCALED:80,VK_FORMAT_R16G16_UINT:81,VK_FORMAT_R16G16_SINT:82,VK_FORMAT_R16G16_SFLOAT:83,VK_FORMAT_R16G16B16_UNORM:84,VK_FORMAT_R16G16B16_SNORM:85,VK_FORMAT_R16G16B16_USCALED:86,VK_FORMAT_R16G16B16_SSCALED:87,VK_FORMAT_R16G16B16_UINT:88,VK_FORMAT_R16G16B16_SINT:89,VK_FORMAT_R16G16B16_SFLOAT:90,VK_FORMAT_R16G16B16A16_UNORM:91,VK_FORMAT_R16G16B16A16_SNORM:92,VK_FORMAT_R16G16B16A16_USCALED:93,VK_FORMAT_R16G16B16A16_SSCALED:94,VK_FORMAT_R16G16B16A16_UINT:95,VK_FORMAT_R16G16B16A16_SINT:96,VK_FORMAT_R16G16B16A16_SFLOAT:97,VK_FORMAT_R32_UINT:98,VK_FORMAT_R32_SINT:99,VK_FORMAT_R32_SFLOAT:100,VK_FORMAT_R32G32_UINT:101,VK_FORMAT_R32G32_SINT:102,VK_FORMAT_R32G32_SFLOAT:103,VK_FORMAT_R32G32B32_UINT:104,VK_FORMAT_R32G32B32_SINT:105,VK_FORMAT_R32G32B32_SFLOAT:106,VK_FORMAT_R32G32B32A32_UINT:107,VK_FORMAT_R32G32B32A32_SINT:108,VK_FORMAT_R32G32B32A32_SFLOAT:109,VK_FORMAT_R64_UINT:110,VK_FORMAT_R64_SINT:111,VK_FORMAT_R64_SFLOAT:112,VK_FORMAT_R64G64_UINT:113,VK_FORMAT_R64G64_SINT:114,VK_FORMAT_R64G64_SFLOAT:115,VK_FORMAT_R64G64B64_UINT:116,VK_FORMAT_R64G64B64_SINT:117,VK_FORMAT_R64G64B64_SFLOAT:118,VK_FORMAT_R64G64B64A64_UINT:119,VK_FORMAT_R64G64B64A64_SINT:120,VK_FORMAT_R64G64B64A64_SFLOAT:121,VK_FORMAT_B10G11R11_UFLOAT_PACK32:122,VK_FORMAT_E5B9G9R9_UFLOAT_PACK32:123,VK_FORMAT_D16_UNORM:124,VK_FORMAT_X8_D24_UNORM_PACK32:125,VK_FORMAT_D32_SFLOAT:126,VK_FORMAT_S8_UINT:127,VK_FORMAT_D16_UNORM_S8_UINT:128,VK_FORMAT_D24_UNORM_S8_UINT:129,VK_FORMAT_D32_SFLOAT_S8_UINT:130,VK_FORMAT_BC1_RGB_UNORM_BLOCK:131,VK_FORMAT_BC1_RGB_SRGB_BLOCK:132,VK_FORMAT_BC1_RGBA_UNORM_BLOCK:133,VK_FORMAT_BC1_RGBA_SRGB_BLOCK:134,VK_FORMAT_BC2_UNORM_BLOCK:135,VK_FORMAT_BC2_SRGB_BLOCK:136,VK_FORMAT_BC3_UNORM_BLOCK:137,VK_FORMAT_BC3_SRGB_BLOCK:138,VK_FORMAT_BC4_UNORM_BLOCK:139,VK_FORMAT_BC4_SNORM_BLOCK:140,VK_FORMAT_BC5_UNORM_BLOCK:141,VK_FORMAT_BC5_SNORM_BLOCK:142,VK_FORMAT_BC6H_UFLOAT_BLOCK:143,VK_FORMAT_BC6H_SFLOAT_BLOCK:144,VK_FORMAT_BC7_UNORM_BLOCK:145,VK_FORMAT_BC7_SRGB_BLOCK:146,VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK:147,VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK:148,VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK:149,VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK:150,VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK:151,VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK:152,VK_FORMAT_EAC_R11_UNORM_BLOCK:153,VK_FORMAT_EAC_R11_SNORM_BLOCK:154,VK_FORMAT_EAC_R11G11_UNORM_BLOCK:155,VK_FORMAT_EAC_R11G11_SNORM_BLOCK:156,VK_FORMAT_ASTC_4x4_UNORM_BLOCK:157,VK_FORMAT_ASTC_4x4_SRGB_BLOCK:158,VK_FORMAT_ASTC_5x4_UNORM_BLOCK:159,VK_FORMAT_ASTC_5x4_SRGB_BLOCK:160,VK_FORMAT_ASTC_5x5_UNORM_BLOCK:161,VK_FORMAT_ASTC_5x5_SRGB_BLOCK:162,VK_FORMAT_ASTC_6x5_UNORM_BLOCK:163,VK_FORMAT_ASTC_6x5_SRGB_BLOCK:164,VK_FORMAT_ASTC_6x6_UNORM_BLOCK:165,VK_FORMAT_ASTC_6x6_SRGB_BLOCK:166,VK_FORMAT_ASTC_8x5_UNORM_BLOCK:167,VK_FORMAT_ASTC_8x5_SRGB_BLOCK:168,VK_FORMAT_ASTC_8x6_UNORM_BLOCK:169,VK_FORMAT_ASTC_8x6_SRGB_BLOCK:170,VK_FORMAT_ASTC_8x8_UNORM_BLOCK:171,VK_FORMAT_ASTC_8x8_SRGB_BLOCK:172,VK_FORMAT_ASTC_10x5_UNORM_BLOCK:173,VK_FORMAT_ASTC_10x5_SRGB_BLOCK:174,VK_FORMAT_ASTC_10x6_UNORM_BLOCK:175,VK_FORMAT_ASTC_10x6_SRGB_BLOCK:176,VK_FORMAT_ASTC_10x8_UNORM_BLOCK:177,VK_FORMAT_ASTC_10x8_SRGB_BLOCK:178,VK_FORMAT_ASTC_10x10_UNORM_BLOCK:179,VK_FORMAT_ASTC_10x10_SRGB_BLOCK:180,VK_FORMAT_ASTC_12x10_UNORM_BLOCK:181,VK_FORMAT_ASTC_12x10_SRGB_BLOCK:182,VK_FORMAT_ASTC_12x12_UNORM_BLOCK:183,VK_FORMAT_ASTC_12x12_SRGB_BLOCK:184,VK_FORMAT_G8B8G8R8_422_UNORM:1000156e3,VK_FORMAT_B8G8R8G8_422_UNORM:1000156001,VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:1000156002,VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:1000156003,VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM:1000156004,VK_FORMAT_G8_B8R8_2PLANE_422_UNORM:1000156005,VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM:1000156006,VK_FORMAT_R10X6_UNORM_PACK16:1000156007,VK_FORMAT_R10X6G10X6_UNORM_2PACK16:1000156008,VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16:1000156009,VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16:1000156010,VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16:1000156011,VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16:1000156012,VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16:1000156013,VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16:1000156014,VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16:1000156015,VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16:1000156016,VK_FORMAT_R12X4_UNORM_PACK16:1000156017,VK_FORMAT_R12X4G12X4_UNORM_2PACK16:1000156018,VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16:1000156019,VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16:1000156020,VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16:1000156021,VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16:1000156022,VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16:1000156023,VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16:1000156024,VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16:1000156025,VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16:1000156026,VK_FORMAT_G16B16G16R16_422_UNORM:1000156027,VK_FORMAT_B16G16R16G16_422_UNORM:1000156028,VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM:1000156029,VK_FORMAT_G16_B16R16_2PLANE_420_UNORM:1000156030,VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM:1000156031,VK_FORMAT_G16_B16R16_2PLANE_422_UNORM:1000156032,VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM:1000156033,VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG:1000054e3,VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG:1000054001,VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG:1000054002,VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG:1000054003,VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG:1000054004,VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG:1000054005,VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG:1000054006,VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG:1000054007,VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT:1000066e3,VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT:1000066001,VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT:1000066002,VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT:1000066003,VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT:1000066004,VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT:1000066005,VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT:1000066006,VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT:1000066007,VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT:1000066008,VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT:1000066009,VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT:1000066010,VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT:1000066011,VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT:1000066012,VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT:1000066013,VK_FORMAT_G8B8G8R8_422_UNORM_KHR:1000156e3,VK_FORMAT_B8G8R8G8_422_UNORM_KHR:1000156001,VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR:1000156002,VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR:1000156003,VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR:1000156004,VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR:1000156005,VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR:1000156006,VK_FORMAT_R10X6_UNORM_PACK16_KHR:1000156007,VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR:1000156008,VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR:1000156009,VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR:1000156010,VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR:1000156011,VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR:1000156012,VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR:1000156013,VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR:1000156014,VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR:1000156015,VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR:1000156016,VK_FORMAT_R12X4_UNORM_PACK16_KHR:1000156017,VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR:1000156018,VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR:1000156019,VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR:1000156020,VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR:1000156021,VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR:1000156022,VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR:1000156023,VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR:1000156024,VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR:1000156025,VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR:1000156026,VK_FORMAT_G16B16G16R16_422_UNORM_KHR:1000156027,VK_FORMAT_B16G16R16G16_422_UNORM_KHR:1000156028,VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR:1000156029,VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR:1000156030,VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR:1000156031,VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR:1000156032,VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR:1000156033},k7=Object.freeze(ATt);var y8i=_(T(),1);function MTt(e){return e=e??Y.EMPTY_OBJECT,xS.fromIonAssetId(2426648,{requestVertexNormals:e.requestVertexNormals??!1})}var GA=MTt;var C8i=_(T(),1);function NTt(e){return e=e??Y.EMPTY_OBJECT,xS.fromIonAssetId(1,{requestVertexNormals:e.requestVertexNormals??!1,requestWaterMask:e.requestWaterMask??!1,ellipsoid:ne.WGS84})}var VS=NTt;var R8i=_(T(),1);var kTt=1953029805,UTt=2917034100;function U7(e,t){if(U7.passThroughDataForTesting)return t;let n=e.byteLength;if(n===0||n%4!==0)throw new ae("The length of key must be greater than 0 and a multiple of 4.");let i=new DataView(t),o=i.getUint32(0,!0);if(o===kTt||o===UTt)return t;let r=new DataView(e),s=0,a=t.byteLength,c=a-a%8,d=n,u,h=8;for(;s<c;)for(h=(h+8)%24,u=h;s<c&&u<d;)i.setUint32(s,i.getUint32(s,!0)^r.getUint32(u,!0),!0),i.setUint32(s+4,i.getUint32(s+4,!0)^r.getUint32(u+4,!0),!0),s+=8,u+=24;if(s<a)for(u>=d&&(h=(h+8)%24,u=h);s<a;)i.setUint8(s,i.getUint8(s)^r.getUint8(u)),s++,u++}U7.passThroughDataForTesting=!1;var EA=U7;var I8i=_(T(),1);function DSe(e,t){return Vs("defaultValue","defaultValue has been deprecated and will be removed in Cesium 1.134. Use the nullish coalescing operator instead: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing"),e??t}Object.defineProperty(DSe,"EMPTY_OBJECT",{get:function(){return Vs("defaultValue.EMPTY_OBJECT","defaultValue.EMPTY_OBJECT has been deprecated and will be removed in Cesium 1.134. Use Frozen.EMPTY_OBJECT instead"),Y.EMPTY_OBJECT}});var D7=DSe;var w8i=_(T(),1);var DTt=new m;function BTt(e,t,n,i){let o=hx(e,t,n,i,DTt);return l(o)?o.x>0&&o.y>0&&o.z>0:!1}var B7=BTt;var A8i=_(T(),1);function OTt(e){return e<=.04045?e*.07739938080495357:Math.pow((e+.055)*.9478672985781991,2.4)}var LS=OTt;var k8i=_(T(),1);function YTt(e){switch(e){case ie.FLOAT:return"float";case ie.FLOAT_VEC2:return"vec2";case ie.FLOAT_VEC3:return"vec3";case ie.FLOAT_VEC4:return"vec4";case ie.FLOAT_MAT2:return"mat2";case ie.FLOAT_MAT3:return"mat3";case ie.FLOAT_MAT4:return"mat4";case ie.SAMPLER_2D:return"sampler2D";case ie.BOOL:return"bool"}}var O7=YTt;var D8i=_(T(),1);function zTt(e,t,n){return function(){n.apply(e,arguments),t.apply(e,arguments)}}var IA=zTt;var z8i=_(T(),1);var HTt=new m(1,1,1);function Y7(e){e=e??HTt,this._dimensions=m.clone(e)}Object.defineProperties(Y7.prototype,{dimensions:{get:function(){return this._dimensions},set:function(e){m.clone(e,this._dimensions)}}});var KTt=new m;Y7.prototype.emit=function(e){let t=this._dimensions,n=m.multiplyByScalar(t,.5,KTt),i=X.randomBetween(-n.x,n.x),o=X.randomBetween(-n.y,n.y),r=X.randomBetween(-n.z,n.z);e.position=m.fromElements(i,o,r,e.position),e.velocity=m.normalize(e.position,e.velocity)};var z7=Y7;var J8i=_(T(),1);function pp(){this.featurePropertiesDirty=!1}Object.defineProperties(pp.prototype,{featuresLength:{get:function(){pe.throwInstantiationError()}},pointsLength:{get:function(){pe.throwInstantiationError()}},trianglesLength:{get:function(){pe.throwInstantiationError()}},geometryByteLength:{get:function(){pe.throwInstantiationError()}},texturesByteLength:{get:function(){pe.throwInstantiationError()}},batchTableByteLength:{get:function(){pe.throwInstantiationError()}},innerContents:{get:function(){pe.throwInstantiationError()}},ready:{get:function(){pe.throwInstantiationError()}},tileset:{get:function(){pe.throwInstantiationError()}},tile:{get:function(){pe.throwInstantiationError()}},url:{get:function(){pe.throwInstantiationError()}},batchTable:{get:function(){pe.throwInstantiationError()}},metadata:{get:function(){pe.throwInstantiationError()},set:function(e){pe.throwInstantiationError()}},group:{get:function(){pe.throwInstantiationError()},set:function(e){pe.throwInstantiationError()}}});pp.prototype.hasProperty=function(e,t){pe.throwInstantiationError()};pp.prototype.getFeature=function(e){pe.throwInstantiationError()};pp.prototype.applyDebugSettings=function(e,t){pe.throwInstantiationError()};pp.prototype.applyStyle=function(e){pe.throwInstantiationError()};pp.prototype.update=function(e,t){pe.throwInstantiationError()};pp.prototype.pick=function(e,t,n){pe.throwInstantiationError()};pp.prototype.isDestroyed=function(){pe.throwInstantiationError()};pp.prototype.destroy=function(){pe.throwInstantiationError()};var H7=pp;var c7i=_(T(),1);var e7i=_(T(),1);function PL(e,t){this._conditionsExpression=Ye(e,!0),this._conditions=e.conditions,this._runtimeConditions=void 0,QTt(this,t)}Object.defineProperties(PL.prototype,{conditionsExpression:{get:function(){return this._conditionsExpression}}});function JTt(e,t){this.condition=e,this.expression=t}function QTt(e,t){let n=[],i=e._conditions;if(!l(i))return;let o=i.length;for(let r=0;r<o;++r){let s=i[r],a=String(s[0]),c=String(s[1]);n.push(new JTt(new Wu(a,t),new Wu(c,t)))}e._runtimeConditions=n}PL.prototype.evaluate=function(e,t){let n=this._runtimeConditions;if(!l(n))return;let i=n.length;for(let o=0;o<i;++o){let r=n[o];if(r.condition.evaluate(e))return r.expression.evaluate(e,t)}};PL.prototype.evaluateColor=function(e,t){let n=this._runtimeConditions;if(!l(n))return;let i=n.length;for(let o=0;o<i;++o){let r=n[o];if(r.condition.evaluate(e))return r.expression.evaluateColor(e,t)}};PL.prototype.getShaderFunction=function(e,t,n,i){let o=this._runtimeConditions;if(!l(o)||o.length===0)return;let r="",s=o.length;for(let a=0;a<s;++a){let c=o[a],d=c.condition.getShaderExpression(t,n),u=c.expression.getShaderExpression(t,n);r+=` ${a===0?"if":"else if"} (${d}) { return ${u}; } `}return r=`${i} ${e} { ${r} return ${i}(1.0); } `,r};PL.prototype.getVariables=function(){let e=[],t=this._runtimeConditions;if(!l(t)||t.length===0)return e;let n=t.length;for(let i=0;i<n;++i){let o=t[i];e.push.apply(e,o.condition.getVariables()),e.push.apply(e,o.expression.getVariables())}return e=e.filter(function(i,o,r){return r.indexOf(i)===o}),e};var XA=PL;function Hy(e){this._style={},this._ready=!1,this._show=void 0,this._color=void 0,this._pointSize=void 0,this._pointOutlineColor=void 0,this._pointOutlineWidth=void 0,this._labelColor=void 0,this._labelOutlineColor=void 0,this._labelOutlineWidth=void 0,this._font=void 0,this._labelStyle=void 0,this._labelText=void 0,this._backgroundColor=void 0,this._backgroundPadding=void 0,this._backgroundEnabled=void 0,this._scaleByDistance=void 0,this._translucencyByDistance=void 0,this._distanceDisplayCondition=void 0,this._heightOffset=void 0,this._anchorLineEnabled=void 0,this._anchorLineColor=void 0,this._image=void 0,this._disableDepthTestDistance=void 0,this._horizontalOrigin=void 0,this._verticalOrigin=void 0,this._labelHorizontalOrigin=void 0,this._labelVerticalOrigin=void 0,this._meta=void 0,this._colorShaderFunction=void 0,this._showShaderFunction=void 0,this._pointSizeShaderFunction=void 0,this._colorShaderFunctionReady=!1,this._showShaderFunctionReady=!1,this._pointSizeShaderFunctionReady=!1,this._colorShaderTranslucent=!1,jTt(this,e)}function jTt(e,t){t=Ye(t,!0)??e._style,e._style=t,e.show=t.show,e.color=t.color,e.pointSize=t.pointSize,e.pointOutlineColor=t.pointOutlineColor,e.pointOutlineWidth=t.pointOutlineWidth,e.labelColor=t.labelColor,e.labelOutlineColor=t.labelOutlineColor,e.labelOutlineWidth=t.labelOutlineWidth,e.labelStyle=t.labelStyle,e.font=t.font,e.labelText=t.labelText,e.backgroundColor=t.backgroundColor,e.backgroundPadding=t.backgroundPadding,e.backgroundEnabled=t.backgroundEnabled,e.scaleByDistance=t.scaleByDistance,e.translucencyByDistance=t.translucencyByDistance,e.distanceDisplayCondition=t.distanceDisplayCondition,e.heightOffset=t.heightOffset,e.anchorLineEnabled=t.anchorLineEnabled,e.anchorLineColor=t.anchorLineColor,e.image=t.image,e.disableDepthTestDistance=t.disableDepthTestDistance,e.horizontalOrigin=t.horizontalOrigin,e.verticalOrigin=t.verticalOrigin,e.labelHorizontalOrigin=t.labelHorizontalOrigin,e.labelVerticalOrigin=t.labelVerticalOrigin;let n={};if(l(t.meta)){let i=t.defines,o=t.meta??Y.EMPTY_OBJECT;for(let r in o)o.hasOwnProperty(r)&&(n[r]=new Wu(o[r],i))}e._meta=n,e._ready=!0}function rr(e,t){let n=(e._style??Y.EMPTY_OBJECT).defines;if(l(t)){if(typeof t=="boolean"||typeof t=="number")return new Wu(String(t));if(typeof t=="string")return new Wu(t,n);if(l(t.conditions))return new XA(t,n)}else return;return t}function sr(e){if(l(e)){if(l(e.expression))return e.expression;if(l(e.conditionsExpression))return Ye(e.conditionsExpression,!0)}else return;return e}Object.defineProperties(Hy.prototype,{style:{get:function(){return this._style}},show:{get:function(){return this._show},set:function(e){this._show=rr(this,e),this._style.show=sr(this._show),this._showShaderFunctionReady=!1}},color:{get:function(){return this._color},set:function(e){this._color=rr(this,e),this._style.color=sr(this._color),this._colorShaderFunctionReady=!1}},pointSize:{get:function(){return this._pointSize},set:function(e){this._pointSize=rr(this,e),this._style.pointSize=sr(this._pointSize),this._pointSizeShaderFunctionReady=!1}},pointOutlineColor:{get:function(){return this._pointOutlineColor},set:function(e){this._pointOutlineColor=rr(this,e),this._style.pointOutlineColor=sr(this._pointOutlineColor)}},pointOutlineWidth:{get:function(){return this._pointOutlineWidth},set:function(e){this._pointOutlineWidth=rr(this,e),this._style.pointOutlineWidth=sr(this._pointOutlineWidth)}},labelColor:{get:function(){return this._labelColor},set:function(e){this._labelColor=rr(this,e),this._style.labelColor=sr(this._labelColor)}},labelOutlineColor:{get:function(){return this._labelOutlineColor},set:function(e){this._labelOutlineColor=rr(this,e),this._style.labelOutlineColor=sr(this._labelOutlineColor)}},labelOutlineWidth:{get:function(){return this._labelOutlineWidth},set:function(e){this._labelOutlineWidth=rr(this,e),this._style.labelOutlineWidth=sr(this._labelOutlineWidth)}},font:{get:function(){return this._font},set:function(e){this._font=rr(this,e),this._style.font=sr(this._font)}},labelStyle:{get:function(){return this._labelStyle},set:function(e){this._labelStyle=rr(this,e),this._style.labelStyle=sr(this._labelStyle)}},labelText:{get:function(){return this._labelText},set:function(e){this._labelText=rr(this,e),this._style.labelText=sr(this._labelText)}},backgroundColor:{get:function(){return this._backgroundColor},set:function(e){this._backgroundColor=rr(this,e),this._style.backgroundColor=sr(this._backgroundColor)}},backgroundPadding:{get:function(){return this._backgroundPadding},set:function(e){this._backgroundPadding=rr(this,e),this._style.backgroundPadding=sr(this._backgroundPadding)}},backgroundEnabled:{get:function(){return this._backgroundEnabled},set:function(e){this._backgroundEnabled=rr(this,e),this._style.backgroundEnabled=sr(this._backgroundEnabled)}},scaleByDistance:{get:function(){return this._scaleByDistance},set:function(e){this._scaleByDistance=rr(this,e),this._style.scaleByDistance=sr(this._scaleByDistance)}},translucencyByDistance:{get:function(){return this._translucencyByDistance},set:function(e){this._translucencyByDistance=rr(this,e),this._style.translucencyByDistance=sr(this._translucencyByDistance)}},distanceDisplayCondition:{get:function(){return this._distanceDisplayCondition},set:function(e){this._distanceDisplayCondition=rr(this,e),this._style.distanceDisplayCondition=sr(this._distanceDisplayCondition)}},heightOffset:{get:function(){return this._heightOffset},set:function(e){this._heightOffset=rr(this,e),this._style.heightOffset=sr(this._heightOffset)}},anchorLineEnabled:{get:function(){return this._anchorLineEnabled},set:function(e){this._anchorLineEnabled=rr(this,e),this._style.anchorLineEnabled=sr(this._anchorLineEnabled)}},anchorLineColor:{get:function(){return this._anchorLineColor},set:function(e){this._anchorLineColor=rr(this,e),this._style.anchorLineColor=sr(this._anchorLineColor)}},image:{get:function(){return this._image},set:function(e){this._image=rr(this,e),this._style.image=sr(this._image)}},disableDepthTestDistance:{get:function(){return this._disableDepthTestDistance},set:function(e){this._disableDepthTestDistance=rr(this,e),this._style.disableDepthTestDistance=sr(this._disableDepthTestDistance)}},horizontalOrigin:{get:function(){return this._horizontalOrigin},set:function(e){this._horizontalOrigin=rr(this,e),this._style.horizontalOrigin=sr(this._horizontalOrigin)}},verticalOrigin:{get:function(){return this._verticalOrigin},set:function(e){this._verticalOrigin=rr(this,e),this._style.verticalOrigin=sr(this._verticalOrigin)}},labelHorizontalOrigin:{get:function(){return this._labelHorizontalOrigin},set:function(e){this._labelHorizontalOrigin=rr(this,e),this._style.labelHorizontalOrigin=sr(this._labelHorizontalOrigin)}},labelVerticalOrigin:{get:function(){return this._labelVerticalOrigin},set:function(e){this._labelVerticalOrigin=rr(this,e),this._style.labelVerticalOrigin=sr(this._labelVerticalOrigin)}},meta:{get:function(){return this._meta},set:function(e){this._meta=e}}});Hy.fromUrl=function(e){return Ze.createIfNeeded(e).fetchJson(e).then(function(n){return new Hy(n)})};Hy.prototype.getColorShaderFunction=function(e,t,n){return this._colorShaderFunctionReady?(n.translucent=this._colorShaderTranslucent,this._colorShaderFunction):(this._colorShaderFunctionReady=!0,l(this.color)&&l(this.color.getShaderFunction)?this._colorShaderFunction=this.color.getShaderFunction(e,t,n,"vec4"):this._colorShaderFunction=void 0,this._colorShaderTranslucent=n.translucent,this._colorShaderFunction)};Hy.prototype.getShowShaderFunction=function(e,t,n){return this._showShaderFunctionReady?this._showShaderFunction:(this._showShaderFunctionReady=!0,l(this.show)&&l(this.show.getShaderFunction)?this._showShaderFunction=this.show.getShaderFunction(e,t,n,"bool"):this._showShaderFunction=void 0,this._showShaderFunction)};Hy.prototype.getPointSizeShaderFunction=function(e,t,n){return this._pointSizeShaderFunctionReady?this._pointSizeShaderFunction:(this._pointSizeShaderFunctionReady=!0,l(this.pointSize)&&l(this.pointSize.getShaderFunction)?this._pointSizeShaderFunction=this.pointSize.getShaderFunction(e,t,n,"float"):this._pointSizeShaderFunction=void 0,this._pointSizeShaderFunction)};Hy.prototype.getVariables=function(){let e=[];return l(this.color)&&l(this.color.getVariables)&&e.push.apply(e,this.color.getVariables()),l(this.show)&&l(this.show.getVariables)&&e.push.apply(e,this.show.getVariables()),l(this.pointSize)&&l(this.pointSize.getVariables)&&e.push.apply(e,this.pointSize.getVariables()),e=e.filter(function(t,n,i){return i.indexOf(t)===n}),e};var RS=Hy;var M7i=_(T(),1);var m7i=_(T(),1);function WA(e){e=e??Y.EMPTY_OBJECT,this._maximumSubtreeCount=e.maximumSubtreeCount??0,this._subtreeRequestCounter=0,this._queue=new uS({comparator:WA.comparator})}WA.prototype.addSubtree=function(e){let t=new qTt(e,this._subtreeRequestCounter);this._subtreeRequestCounter++,this._queue.insert(t);let n=e.implicitCoordinates;if(n.level>0){let i=n.getParentSubtreeCoordinates(),o=this.find(i)}if(this._maximumSubtreeCount>0)for(;this._queue.length>this._maximumSubtreeCount&&this._queue.getMinimum()!==t;)this._queue.removeMinimum()};WA.prototype.find=function(e){let t=this._queue,n=t.internalArray,i=t.length;for(let o=0;o<i;o++){let r=n[o],a=r.subtree.implicitCoordinates;if(e.isEqual(a))return r.subtree}};WA.comparator=function(e,t){let n=e.subtree.implicitCoordinates,i=t.subtree.implicitCoordinates;return n.isAncestor(i)?1:i.isAncestor(n)?-1:e.stamp-t.stamp};function qTt(e,t){this.subtree=e,this.stamp=t}var PA=WA;function vA(e){e=e??Y.EMPTY_OBJECT;let{className:t,names:n,types:i,componentTypes:o,shape:r,dimensions:s,paddingBefore:a=m.ZERO.clone(),paddingAfter:c=m.ZERO.clone(),globalTransform:d=F.IDENTITY.clone(),shapeTransform:u=F.IDENTITY.clone(),minBounds:h,maxBounds:p,minimumValues:g,maximumValues:f,maximumTileCount:y}=e;this._shapeTransform=u,this._globalTransform=d,this._shape=r,this._minBounds=h,this._maxBounds=p,this._dimensions=s,this._paddingBefore=a,this._paddingAfter=c,this._className=t,this._names=n,this._types=i,this._componentTypes=o,this._metadataOrder=r===Mi.ELLIPSOID?xm.Z_UP:xm.Y_UP,this._minimumValues=g,this._maximumValues=f,this._maximumTileCount=y,this._availableLevels=void 0,this._implicitTileset=void 0,this._subtreeCache=new PA}Object.defineProperties(vA.prototype,{globalTransform:{get:function(){return this._globalTransform}},shapeTransform:{get:function(){return this._shapeTransform}},shape:{get:function(){return this._shape}},minBounds:{get:function(){return this._minBounds}},maxBounds:{get:function(){return this._maxBounds}},dimensions:{get:function(){return this._dimensions}},paddingBefore:{get:function(){return this._paddingBefore}},paddingAfter:{get:function(){return this._paddingAfter}},className:{get:function(){return this._className}},names:{get:function(){return this._names}},types:{get:function(){return this._types}},componentTypes:{get:function(){return this._componentTypes}},metadataOrder:{get:function(){return this._metadataOrder}},minimumValues:{get:function(){return this._minimumValues}},maximumValues:{get:function(){return this._maximumValues}},maximumTileCount:{get:function(){return this._maximumTileCount}},availableLevels:{get:function(){return this._availableLevels}}});vA.fromUrl=async function(e){let t=Ze.createIfNeeded(e),n=await t.fetchJson();eSt(n);let i=rSt(n,t);await i.load();let{root:o}=n,r=ri(n,"3DTILES_metadata")?n.extensions["3DTILES_metadata"]:n,s=new H_({metadataJson:r,schema:i.schema}),a=o.content.extensions["3DTILES_content_voxels"],c=a.class,d=sSt(s,c);Object.assign(d,tSt(o)),d.dimensions=m.unpack(a.dimensions),d.maximumTileCount=$Tt(s),l(a.padding)&&(d.paddingBefore=m.unpack(a.padding.before),d.paddingAfter=m.unpack(a.padding.after));let u=new vA(d),h=new J_(t,o,i.schema);return u._implicitTileset=h,u._availableLevels=h.availableLevels,Ri.unload(i),u};function $Tt(e){if(l(e.tileset))return e.tileset.getPropertyBySemantic(b_.TILESET_TILE_COUNT)}function eSt(e){let t=e.root;if(!l(t.content))throw new ae("Root must have content");if(!ri(t.content,"3DTILES_content_voxels"))throw new ae("Root tile content must have 3DTILES_content_voxels extension");if(!ri(t,"3DTILES_implicit_tiling")&&!l(t.implicitTiling))throw new ae("Root tile must have implicit tiling");if(!l(e.schema)&&!l(e.schemaUri)&&!ri(e,"3DTILES_metadata"))throw new ae("Tileset must have a metadata schema")}function tSt(e){let t=e.boundingVolume,n;if(l(e.transform)?n=F.unpack(e.transform):n=F.clone(F.IDENTITY),l(t.box))return iSt(t.box,n);if(l(t.region))return nSt(t.region);if(ri(t,"3DTILES_bounding_volume_cylinder"))return oSt(t.extensions["3DTILES_bounding_volume_cylinder"],n);throw new ae("Only box, region and 3DTILES_bounding_volume_cylinder are supported in Cesium3DTilesVoxelProvider")}function nSt(e){let t=e[0],n=e[1],i=e[2],o=e[3],r=e[4],s=e[5],a=F.fromScale(ne.WGS84.radii),c=new m(t,n,r),d=new m(i,o,s);return{shape:Mi.ELLIPSOID,minBounds:c,maxBounds:d,shapeTransform:a,globalTransform:F.clone(F.IDENTITY)}}function iSt(e,t){let n=En.unpack(e),i=F.fromRotationTranslation(n.halfAxes,n.center);return{shape:Mi.BOX,minBounds:m.clone(up.DefaultMinBounds),maxBounds:m.clone(up.DefaultMaxBounds),shapeTransform:i,globalTransform:t}}function oSt(e,t){let{minRadius:n,maxRadius:i,height:o,minAngle:r=-X.PI,maxAngle:s=X.PI,translation:a=[0,0,0],rotation:c=[0,0,0,1]}=e,d=-.5*o+a[2],u=.5*o+a[2],h=F.fromTranslationQuaternionRotationScale(m.unpack(a),ve.unpack(c),new m(i,i,.5*o));return{shape:Mi.CYLINDER,minBounds:m.fromElements(n,r,d),maxBounds:m.fromElements(i,s,u),shapeTransform:h,globalTransform:t}}function rSt(e,t){let{schemaUri:n,schema:i}=e;return l(n)?Ri.getSchemaLoader({resource:t.getDerivedResource({url:n})}):Ri.getSchemaLoader({schema:i})}function sSt(e,t){let{schema:n,statistics:i}=e,o=i?.classes[t],r=n.classes[t].properties,s=Object.entries(r).map(([g,f])=>{let{type:y,componentType:x}=f,S=o?.properties[g].min,C=o?.properties[g].max,V=ct.getComponentCount(y),L=BSe(S,V),Z=BSe(C,V);return{id:g,type:y,componentType:x,minValue:L,maxValue:Z}}),a=s.map(g=>g.id),c=s.map(g=>g.type),d=s.map(g=>g.componentType),u=s.map(g=>g.minValue),h=s.map(g=>g.maxValue),p=u.some(l);return{className:t,names:a,types:c,componentTypes:d,minimumValues:p?u:void 0,maximumValues:p?h:void 0}}function BSe(e,t){if(!l(e))return;let n=Array.isArray(e)?e:[e];return Array.from({length:t},(i,o)=>n[o])}async function aSt(e,t){let n=e._implicitTileset,i=e._subtreeCache,o=i.find(t);if(l(o))return o;let r=n.subtreeUriTemplate.getDerivedResource({templateValues:t.getTemplateValues()}),s=n.baseResource.getDerivedResource({url:r.url}),a=await s.fetchArrayBuffer();if(o=i.find(t),l(o))return o;let c=Gb(a);return o=await p_.fromSubtreeJson(s,c.jsonPayload,c.binaryPayload,n,t),i.addSubtree(o),o}vA.prototype.requestData=async function(e){e=e??Y.EMPTY_OBJECT;let{tileLevel:t=0,tileX:n=0,tileY:i=0,tileZ:o=0,keyframe:r=0}=e;if(r!==0)return Promise.reject("3D Tiles currently doesn't support time-dynamic data.");let s=this._implicitTileset,a=new Q_({subdivisionScheme:s.subdivisionScheme,subtreeLevels:s.subtreeLevels,level:t,x:n,y:i,z:o}),c=a.isSubtreeRoot()&&a.level>0,d=c?a.getParentSubtreeCoordinates():a.getSubtreeCoordinates(),h=await aSt(this,d);if(!(c?h.childSubtreeIsAvailableAtCoordinates:h.tileIsAvailableAtCoordinates).call(h,a))return Promise.reject(`Tile is not available at level ${t}, x ${n}, y ${i}, z ${o}.`);let{contentUriTemplates:f,baseResource:y}=s,x=f[0].getDerivedResource({templateValues:a.getTemplateValues()}),S=y.getDerivedResource({url:x.url});return cS.fromGltf(S)};var K7=vA;var D7i=_(T(),1);function J7(e){e=e??1,this._radius=e??1}Object.defineProperties(J7.prototype,{radius:{get:function(){return this._radius},set:function(e){this._radius=e}}});J7.prototype.emit=function(e){let t=X.randomBetween(0,X.TWO_PI),n=X.randomBetween(0,this._radius),i=n*Math.cos(t),o=n*Math.sin(t),r=0;e.position=m.fromElements(i,o,r,e.position),e.velocity=m.clone(m.UNIT_Z,e.velocity)};var wA=J7;var W6i=_(T(),1);var O7i=_(T(),1),Q7={CUMULUS:0};Q7.validate=function(e){return e===Q7.CUMULUS};var vL=Object.freeze(Q7);var j7i=_(T(),1);function Hh(e,t){if(e=e??Y.EMPTY_OBJECT,this._show=e.show??!0,this._position=m.clone(e.position??m.ZERO),!l(e.scale)&&l(e.maximumSize))this._maximumSize=m.clone(e.maximumSize),this._scale=new U(this._maximumSize.x,this._maximumSize.y);else{this._scale=U.clone(e.scale??new U(20,12));let n=new m(this._scale.x,this._scale.y,Math.min(this._scale.x,this._scale.y)/1.5);this._maximumSize=m.clone(e.maximumSize??n)}this._slice=e.slice??-1,this._color=D.clone(e.color??D.WHITE),this._brightness=e.brightness??1,this._cloudCollection=t,this._index=-1}var cSt=Hh.SHOW_INDEX=0,lSt=Hh.POSITION_INDEX=1,dSt=Hh.SCALE_INDEX=2,uSt=Hh.MAXIMUM_SIZE_INDEX=3,mSt=Hh.SLICE_INDEX=4,hSt=Hh.BRIGHTNESS_INDEX=5,fSt=Hh.COLOR_INDEX=6;Hh.NUMBER_OF_PROPERTIES=7;function ZS(e,t){let n=e._cloudCollection;l(n)&&(n._updateCloud(e,t),e._dirty=!0)}Object.defineProperties(Hh.prototype,{show:{get:function(){return this._show},set:function(e){this._show!==e&&(this._show=e,ZS(this,cSt))}},position:{get:function(){return this._position},set:function(e){let t=this._position;m.equals(t,e)||(m.clone(e,t),ZS(this,lSt))}},scale:{get:function(){return this._scale},set:function(e){let t=this._scale;U.equals(t,e)||(U.clone(e,t),ZS(this,dSt))}},maximumSize:{get:function(){return this._maximumSize},set:function(e){let t=this._maximumSize;m.equals(t,e)||(m.clone(e,t),ZS(this,uSt))}},color:{get:function(){return this._color},set:function(e){let t=this._color;D.equals(t,e)||(D.clone(e,t),ZS(this,fSt))}},slice:{get:function(){return this._slice},set:function(e){this._slice!==e&&(this._slice=e,ZS(this,mSt))}},brightness:{get:function(){return this._brightness},set:function(e){this._brightness!==e&&(this._brightness=e,ZS(this,hSt))}}});Hh.prototype._destroy=function(){this._cloudCollection=void 0};var lu=Hh;var du,oB=new m,pSt={positionHighAndScaleX:0,positionLowAndScaleY:1,packedAttribute0:2,packedAttribute1:3,color:4},bSt={direction:0,positionHighAndScaleX:1,positionLowAndScaleY:2,packedAttribute0:3,packedAttribute1:4,color:5},gSt=lu.SHOW_INDEX,ySt=lu.POSITION_INDEX,xSt=lu.SCALE_INDEX,_St=lu.MAXIMUM_SIZE_INDEX,TSt=lu.SLICE_INDEX,SSt=lu.BRIGHTNESS_INDEX,CSt=lu.NUMBER_OF_PROPERTIES,VSt=lu.COLOR_INDEX;function Kh(e){e=e??Y.EMPTY_OBJECT,this._clouds=[],this._cloudsToUpdate=[],this._cloudsToUpdateIndex=0,this._cloudsRemoved=!1,this._createVertexArray=!1,this._propertiesChanged=new Uint32Array(CSt),this._noiseTexture=void 0,this._textureSliceWidth=128,this._noiseTextureRows=4,this.noiseDetail=e.noiseDetail??16,this.noiseOffset=m.clone(e.noiseOffset??m.ZERO),this._loading=!1,this._ready=!1;let t=this;this._uniforms={u_noiseTexture:function(){return t._noiseTexture},u_noiseTextureDimensions:OSe(t),u_noiseDetail:function(){return t.noiseDetail}},this._vaNoise=void 0,this._spNoise=void 0,this._spCreated=!1,this._sp=void 0,this._rs=void 0,this.show=e.show??!0,this._colorCommands=[],this.debugBillboards=e.debugBillboards??!1,this._compiledDebugBillboards=!1,this.debugEllipsoids=e.debugEllipsoids??!1,this._compiledDebugEllipsoids=!1}function OSe(e){return function(){return oB.x=e._textureSliceWidth,oB.y=e._noiseTextureRows,oB.z=1/e._noiseTextureRows,oB}}Object.defineProperties(Kh.prototype,{length:{get:function(){return q7(this),this._clouds.length}}});function YSe(e){let t=e.length;for(let n=0;n<t;++n)e[n]&&e[n]._destroy()}Kh.prototype.add=function(e){e=e??Y.EMPTY_OBJECT;let t=e.cloudType??vL.CUMULUS,n;return t===vL.CUMULUS&&(n=new lu(e,this),n._index=this._clouds.length,this._clouds.push(n),this._createVertexArray=!0),n};Kh.prototype.remove=function(e){return this.contains(e)?(this._clouds[e._index]=void 0,this._cloudsRemoved=!0,this._createVertexArray=!0,e._destroy(),!0):!1};Kh.prototype.removeAll=function(){YSe(this._clouds),this._clouds=[],this._cloudsToUpdate=[],this._cloudsToUpdateIndex=0,this._cloudsRemoved=!1,this._createVertexArray=!0};function q7(e){if(e._cloudsRemoved){e._cloudsRemoved=!1;let t=[],n=e._clouds,i=n.length;for(let o=0,r=0;o<i;++o){let s=n[o];l(s)&&(n._index=r++,t.push(s))}e._clouds=t}}Kh.prototype._updateCloud=function(e,t){e._dirty||(this._cloudsToUpdate[this._cloudsToUpdateIndex++]=e),++this._propertiesChanged[t]};Kh.prototype.contains=function(e){return l(e)&&e._cloudCollection===this};Kh.prototype.get=function(e){return q7(this),this._clouds[e]};var LSt=new Float32Array([-1,-1,1,-1,1,1,-1,1]),RSt=new Uint16Array([0,1,2,0,2,3]);function ZSt(e){let t=xt.createVertexBuffer({context:e,typedArray:LSt,usage:Me.STATIC_DRAW}),n=xt.createIndexBuffer({context:e,typedArray:RSt,usage:Me.STATIC_DRAW,indexDatatype:Ae.UNSIGNED_SHORT}),i=[{index:0,vertexBuffer:t,componentsPerAttribute:2,componentDatatype:Q.FLOAT}];return new ni({context:e,attributes:i,indexBuffer:n})}var $7;function GSt(e){let n=e.cache.cloudCollection_indexBufferBatched;if(l(n))return n;let i=16384*6-6,o=new Uint16Array(i);for(let r=0,s=0;r<i;r+=6,s+=4)o[r]=s,o[r+1]=s+1,o[r+2]=s+2,o[r+3]=s,o[r+4]=s+2,o[r+5]=s+3;return n=xt.createIndexBuffer({context:e,typedArray:o,usage:Me.STATIC_DRAW,indexDatatype:Ae.UNSIGNED_SHORT}),n.vertexArrayDestroyable=!1,e.cache.cloudCollection_indexBufferBatched=n,n}function ESt(e){let t=e.cache.cloudCollection_indexBufferInstanced;return l(t)||(t=xt.createIndexBuffer({context:e,typedArray:new Uint16Array([0,1,2,0,2,3]),usage:Me.STATIC_DRAW,indexDatatype:Ae.UNSIGNED_SHORT}),t.vertexArrayDestroyable=!1,e.cache.cloudCollection_indexBufferInstanced=t),t}function ISt(e){let t=e.cache.cloudCollection_vertexBufferInstanced;return l(t)||(t=xt.createVertexBuffer({context:e,typedArray:new Float32Array([0,0,1,0,1,1,0,1]),usage:Me.STATIC_DRAW}),t.vertexArrayDestroyable=!1,e.cache.cloudCollection_vertexBufferInstanced=t),t}function XSt(e,t,n){let i=[{index:du.positionHighAndScaleX,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:Me.STATIC_DRAW},{index:du.positionLowAndScaleY,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:Me.STATIC_DRAW},{index:du.packedAttribute0,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:Me.STATIC_DRAW},{index:du.packedAttribute1,componentsPerAttribute:4,componentDatatype:Q.FLOAT,usage:Me.STATIC_DRAW},{index:du.color,componentsPerAttribute:4,componentDatatype:Q.UNSIGNED_BYTE,normalize:!0,usage:Me.STATIC_DRAW}];n&&i.push({index:du.direction,componentsPerAttribute:2,componentDatatype:Q.FLOAT,vertexBuffer:ISt(e)});let o=n?t:4*t;return new Xp(e,i,o,n)}var j7=new On;function zSe(e,t,n,i){let o,r=n[du.positionHighAndScaleX],s=n[du.positionLowAndScaleY],a=i.position;On.fromCartesian(a,j7);let c=i.scale,d=j7.high,u=j7.low;e._instanced?(o=i._index,r(o,d.x,d.y,d.z,c.x),s(o,u.x,u.y,u.z,c.y)):(o=i._index*4,r(o+0,d.x,d.y,d.z,c.x),r(o+1,d.x,d.y,d.z,c.x),r(o+2,d.x,d.y,d.z,c.x),r(o+3,d.x,d.y,d.z,c.x),s(o+0,u.x,u.y,u.z,c.y),s(o+1,u.x,u.y,u.z,c.y),s(o+2,u.x,u.y,u.z,c.y),s(o+3,u.x,u.y,u.z,c.y))}function HSe(e,t,n,i){let o,r=n[du.packedAttribute0],s=i.show,a=i.brightness;e._instanced?(o=i._index,r(o,s,a,0,0)):(o=i._index*4,r(o+0,s,a,0,0),r(o+1,s,a,1,0),r(o+2,s,a,1,1),r(o+3,s,a,0,1))}function KSe(e,t,n,i){let o,r=n[du.packedAttribute1],s=i.maximumSize,a=i.slice;e._instanced?(o=i._index,r(o,s.x,s.y,s.z,a)):(o=i._index*4,r(o+0,s.x,s.y,s.z,a),r(o+1,s.x,s.y,s.z,a),r(o+2,s.x,s.y,s.z,a),r(o+3,s.x,s.y,s.z,a))}function JSe(e,t,n,i){let o,r=n[du.color],s=i.color,a=D.floatToByte(s.red),c=D.floatToByte(s.green),d=D.floatToByte(s.blue),u=D.floatToByte(s.alpha);e._instanced?(o=i._index,r(o,a,c,d,u)):(o=i._index*4,r(o+0,a,c,d,u),r(o+1,a,c,d,u),r(o+2,a,c,d,u),r(o+3,a,c,d,u))}function WSt(e,t,n,i){zSe(e,t,n,i),HSe(e,t,n,i),KSe(e,t,n,i),JSe(e,t,n,i)}function PSt(e,t,n,i){let o=e,r=o._textureSliceWidth,s=o._noiseTextureRows,a=t.context;o._vaNoise=ZSt(a),o._spNoise=$t.fromCache({context:a,vertexShaderSource:n,fragmentShaderSource:i,attributeLocations:{position:0}});let c=o.noiseDetail,d=o.noiseOffset;o._noiseTexture=new vt({context:a,width:r*r/s,height:r*s,pixelDatatype:je.UNSIGNED_BYTE,pixelFormat:it.RGBA,sampler:new qt({wrapS:Vn.REPEAT,wrapT:Vn.REPEAT,minificationFilter:jt.NEAREST,magnificationFilter:hi.NEAREST})});let u=new Fc({vertexArray:o._vaNoise,shaderProgram:o._spNoise,outputTexture:o._noiseTexture,uniformMap:{u_noiseTextureDimensions:OSe(o),u_noiseDetail:function(){return c},u_noiseOffset:function(){return d}},persists:!1,owner:e,postExecute:function(h){o._ready=!0,o._loading=!1}});t.commandList.push(u),o._loading=!0}function vSt(e,t){let n=e,i=t.context;n._createVertexArray=!1,n._vaf=n._vaf&&n._vaf.destroy();let o=e._clouds,r=o.length;if(r>0){n._vaf=XSt(i,r,n._instanced);let s=n._vaf.writers,a;for(a=0;a<r;++a){let c=o[a];WSt(e,t,s,c)}n._vaf.commit($7(i))}}var wSt=[];function FSt(e,t){let n=t.context,i=e,r=i._clouds.length,s=i._cloudsToUpdate,a=i._cloudsToUpdateIndex,c=i._propertiesChanged,d=wSt;d.length=0,(c[ySt]||c[xSt])&&d.push(zSe),(c[gSt]||c[SSt])&&d.push(HSe),(c[_St]||c[TSt])&&d.push(KSe),c[VSt]&&d.push(JSe);let u=d.length,h=i._vaf.writers,p,g,f;if(a/r>.1){for(p=0;p<a;++p)for(g=s[p],g._dirty=!1,f=0;f<u;++f)d[f](e,t,h,g);i._vaf.commit($7(n))}else{for(p=0;p<a;++p){for(g=s[p],g._dirty=!1,f=0;f<u;++f)d[f](e,t,h,g);i._instanced?i._vaf.subCommit(g._index,1):i._vaf.subCommit(g._index*4,4)}i._vaf.endSubCommits()}i._cloudsToUpdateIndex=0}function ASt(e,t,n,i){let o=t.context,r=e,s=new De({defines:[],sources:[n]});r._instanced&&s.defines.push("INSTANCED");let a=new De({defines:[],sources:[i]});r.debugBillboards&&a.defines.push("DEBUG_BILLBOARDS"),r.debugEllipsoids&&a.defines.push("DEBUG_ELLIPSOIDS"),r._sp=$t.replaceCache({context:o,shaderProgram:r._sp,vertexShaderSource:s,fragmentShaderSource:a,attributeLocations:du}),r._rs=Ue.fromCache({depthTest:{enabled:!0,func:ie.LESS},depthMask:!1,blending:un.ALPHA_BLEND}),r._spCreated=!0,r._compiledDebugBillboards=r.debugBillboards,r._compiledDebugEllipsoids=r.debugEllipsoids}function MSt(e,t){let n=e,i=t.passes,o=n._uniforms,r=t.commandList;if(i.render){let s=n._colorCommands,a=n._vaf.va,c=a.length;s.length=c;for(let d=0;d<c;d++){let u=s[d];l(u)||(u=s[d]=new $e),u.pass=Ee.TRANSLUCENT,u.owner=e,u.uniformMap=o,u.count=a[d].indicesCount,u.vertexArray=a[d].va,u.shaderProgram=n._sp,u.renderState=n._rs,n._instanced&&(u.count=6,u.instanceCount=n._clouds.length),r.push(u)}}}Kh.prototype.update=function(e){if(q7(this),!this.show)return;let t=this.debugBillboards||this.debugEllipsoids;this._ready=t?!0:l(this._noiseTexture),!this._ready&&!this._loading&&!t&&PSt(this,e,_A,xA),this._instanced=e.context.instancedArrays,du=this._instanced?bSt:pSt,$7=this._instanced?ESt:GSt;let i=this._clouds.length,o=this._cloudsToUpdate,r=this._cloudsToUpdateIndex;this._createVertexArray?vSt(this,e):r>0&&FSt(this,e),r>i*1.5&&(o.length=i),!(!l(this._vaf)||!l(this._vaf.va)||!this._ready&!t)&&((!this._spCreated||this.debugBillboards!==this._compiledDebugBillboards||this.debugEllipsoids!==this._compiledDebugEllipsoids)&&ASt(this,e,yA,gA),MSt(this,e))};Kh.prototype.isDestroyed=function(){return!1};Kh.prototype.destroy=function(){return this._noiseTexture=this._noiseTexture&&this._noiseTexture.destroy(),this._sp=this._sp&&this._sp.destroy(),this._vaf=this._vaf&&this._vaf.destroy(),YSe(this._clouds),me(this)};var e6=Kh;var F6i=_(T(),1);var NSt=X.toRadians(30);function t6(e){this._angle=e??NSt}Object.defineProperties(t6.prototype,{angle:{get:function(){return this._angle},set:function(e){this._angle=e}}});t6.prototype.emit=function(e){let t=Math.tan(this._angle),n=X.randomBetween(0,X.TWO_PI),i=X.randomBetween(0,t),o=i*Math.cos(n),r=i*Math.sin(n),s=1;e.velocity=m.fromElements(o,r,s,e.velocity),m.normalize(e.velocity,e.velocity),e.position=m.clone(m.ZERO,e.position)};var n6=t6;var U6i=_(T(),1);function FA(e){e=e??Y.EMPTY_OBJECT;let t=e.attributeName,n=e.perInstanceAttribute;l(n)||(n=!1);let i=e.glslDatatype??"vec3",o=`v_${t}`,r;if(t==="normal"||t==="tangent"||t==="bitangent")r=`vec4 getColor() { return vec4((${o} + vec3(1.0)) * 0.5, 1.0); } `;else switch(t==="st"&&(i="vec2"),i){case"float":r=`vec4 getColor() { return vec4(vec3(${o}), 1.0); } `;break;case"vec2":r=`vec4 getColor() { return vec4(${o}, 0.0, 1.0); } `;break;case"vec3":r=`vec4 getColor() { return vec4(${o}, 1.0); } `;break;case"vec4":r=`vec4 getColor() { return ${o}; } `;break}let s=`in vec3 position3DHigh; in vec3 position3DLow; in float batchId; ${n?"":`in ${i} ${t}; `}out ${i} ${o}; void main() { vec4 p = czm_translateRelativeToEye(position3DHigh, position3DLow); ${n?`${o} = czm_batchTable_${t}(batchId); `:`${o} = ${t}; `}gl_Position = czm_modelViewProjectionRelativeToEye * p; }`,a=`in ${i} ${o}; ${r} void main() { out_FragColor = getColor(); }`;this.material=void 0,this.translucent=e.translucent??!1,this._vertexShaderSource=e.vertexShaderSource??s,this._fragmentShaderSource=e.fragmentShaderSource??a,this._renderState=no.getDefaultRenderState(!1,!1,e.renderState),this._closed=e.closed??!1,this._attributeName=t,this._glslDatatype=i}Object.defineProperties(FA.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}},attributeName:{get:function(){return this._attributeName}},glslDatatype:{get:function(){return this._glslDatatype}}});FA.prototype.getFragmentShaderSource=no.prototype.getFragmentShaderSource;FA.prototype.isTranslucent=no.prototype.isTranslucent;FA.prototype.getRenderState=no.prototype.getRenderState;var i6=FA;var eqi=_(T(),1);function rB(e){e=e??Y.EMPTY_OBJECT,this.length=e.length??1e7,this._length=void 0,this.width=e.width??2,this._width=void 0,this.show=e.show??!0,this.modelMatrix=F.clone(e.modelMatrix??F.IDENTITY),this._modelMatrix=new F,this.id=e.id,this._id=void 0,this._primitive=void 0}rB.prototype.update=function(e){if(this.show){if(!l(this._primitive)||!F.equals(this._modelMatrix,this.modelMatrix)||this._length!==this.length||this._width!==this.width||this._id!==this.id){this._modelMatrix=F.clone(this.modelMatrix,this._modelMatrix),this._length=this.length,this._width=this.width,this._id=this.id,l(this._primitive)&&this._primitive.destroy(),this.modelMatrix[12]===0&&this.modelMatrix[13]===0&&this.modelMatrix[14]===0&&(this.modelMatrix[14]=.01);let t=new Et({geometry:new e0({positions:[m.ZERO,m.UNIT_X],width:this.width,vertexFormat:jr.VERTEX_FORMAT,colors:[D.RED,D.RED],arcType:en.NONE}),modelMatrix:F.multiplyByUniformScale(this.modelMatrix,this.length,new F),id:this.id,pickPrimitive:this}),n=new Et({geometry:new e0({positions:[m.ZERO,m.UNIT_Y],width:this.width,vertexFormat:jr.VERTEX_FORMAT,colors:[D.GREEN,D.GREEN],arcType:en.NONE}),modelMatrix:F.multiplyByUniformScale(this.modelMatrix,this.length,new F),id:this.id,pickPrimitive:this}),i=new Et({geometry:new e0({positions:[m.ZERO,m.UNIT_Z],width:this.width,vertexFormat:jr.VERTEX_FORMAT,colors:[D.BLUE,D.BLUE],arcType:en.NONE}),modelMatrix:F.multiplyByUniformScale(this.modelMatrix,this.length,new F),id:this.id,pickPrimitive:this});this._primitive=new In({geometryInstances:[t,n,i],appearance:new jr,asynchronous:!1})}this._primitive.update(e)}};rB.prototype.isDestroyed=function(){return!1};rB.prototype.destroy=function(){return this._primitive=this._primitive&&this._primitive.destroy(),me(this)};var AA=rB;var oqi=_(T(),1);function kSt(e){this.direction=m.clone(e.direction),this.color=D.clone(e.color??D.WHITE),this.intensity=e.intensity??1}var o6=kSt;var gqi=_(T(),1);var sqi=_(T(),1),MA=`in vec3 v_positionMC; in vec3 v_positionEC; in vec2 v_st; void main() { czm_materialInput materialInput; vec3 normalEC = normalize(czm_normal3D * czm_geodeticSurfaceNormal(v_positionMC, vec3(0.0), vec3(1.0))); #ifdef FACE_FORWARD normalEC = faceforward(normalEC, vec3(0.0, 0.0, 1.0), -normalEC); #endif materialInput.s = v_st.s; materialInput.st = v_st; materialInput.str = vec3(v_st, 0.0); // Convert tangent space material normal to eye space materialInput.normalEC = normalEC; materialInput.tangentToEyeMatrix = czm_eastNorthUpToEyeCoordinates(v_positionMC, materialInput.normalEC); // Convert view vector to world space vec3 positionToEyeEC = -v_positionEC; materialInput.positionToEyeEC = positionToEyeEC; czm_material material = czm_getMaterial(materialInput); #ifdef FLAT out_FragColor = vec4(material.diffuse + material.emission, material.alpha); #else out_FragColor = czm_phong(normalize(positionToEyeEC), material, czm_lightDirectionEC); #endif } `;var cqi=_(T(),1),NA=`in vec3 position3DHigh; in vec3 position3DLow; in vec2 st; in float batchId; out vec3 v_positionMC; out vec3 v_positionEC; out vec2 v_st; void main() { vec4 p = czm_computePosition(); v_positionMC = position3DHigh + position3DLow; // position in model coordinates v_positionEC = (czm_modelViewRelativeToEye * p).xyz; // position in eye coordinates v_st = st; gl_Position = czm_modelViewProjectionRelativeToEye * p; } `;function GS(e){e=e??Y.EMPTY_OBJECT;let t=e.translucent??!0,n=e.aboveGround??!1;this.material=l(e.material)?e.material:zi.fromType(zi.ColorType),this.translucent=e.translucent??!0,this._vertexShaderSource=e.vertexShaderSource??NA,this._fragmentShaderSource=e.fragmentShaderSource??MA,this._renderState=no.getDefaultRenderState(t,!n,e.renderState),this._closed=!1,this._flat=e.flat??!1,this._faceForward=e.faceForward??n,this._aboveGround=n}Object.defineProperties(GS.prototype,{vertexShaderSource:{get:function(){return this._vertexShaderSource}},fragmentShaderSource:{get:function(){return this._fragmentShaderSource}},renderState:{get:function(){return this._renderState}},closed:{get:function(){return this._closed}},vertexFormat:{get:function(){return GS.VERTEX_FORMAT}},flat:{get:function(){return this._flat}},faceForward:{get:function(){return this._faceForward}},aboveGround:{get:function(){return this._aboveGround}}});GS.VERTEX_FORMAT=Xe.POSITION_AND_ST;GS.prototype.getFragmentShaderSource=no.prototype.getFragmentShaderSource;GS.prototype.isTranslucent=no.prototype.isTranslucent;GS.prototype.getRenderState=no.prototype.getRenderState;var r6=GS;var Vqi=_(T(),1);function sd(e){this._scene=e.scene,this.samplingWindow=e.samplingWindow??sd.defaultSettings.samplingWindow,this.quietPeriod=e.quietPeriod??sd.defaultSettings.quietPeriod,this.warmupPeriod=e.warmupPeriod??sd.defaultSettings.warmupPeriod,this.minimumFrameRateDuringWarmup=e.minimumFrameRateDuringWarmup??sd.defaultSettings.minimumFrameRateDuringWarmup,this.minimumFrameRateAfterWarmup=e.minimumFrameRateAfterWarmup??sd.defaultSettings.minimumFrameRateAfterWarmup,this._lowFrameRate=new be,this._nominalFrameRate=new be,this._frameTimes=[],this._needsQuietPeriod=!0,this._quietPeriodEndTime=0,this._warmupPeriodEndTime=0,this._frameRateIsLow=!1,this._lastFramesPerSecond=void 0,this._pauseCount=0;let t=this;this._preUpdateRemoveListener=this._scene.preUpdate.addEventListener(function(o,r){USt(t,r)}),this._hiddenPropertyName=document.hidden!==void 0?"hidden":document.mozHidden!==void 0?"mozHidden":document.msHidden!==void 0?"msHidden":document.webkitHidden!==void 0?"webkitHidden":void 0;let n=document.hidden!==void 0?"visibilitychange":document.mozHidden!==void 0?"mozvisibilitychange":document.msHidden!==void 0?"msvisibilitychange":document.webkitHidden!==void 0?"webkitvisibilitychange":void 0;function i(){DSt(t)}this._visibilityChangeRemoveListener=void 0,l(n)&&(document.addEventListener(n,i,!1),this._visibilityChangeRemoveListener=function(){document.removeEventListener(n,i,!1)})}sd.defaultSettings={samplingWindow:5,quietPeriod:2,warmupPeriod:5,minimumFrameRateDuringWarmup:4,minimumFrameRateAfterWarmup:8};sd.fromScene=function(e){return(!l(e._frameRateMonitor)||e._frameRateMonitor.isDestroyed())&&(e._frameRateMonitor=new sd({scene:e})),e._frameRateMonitor};Object.defineProperties(sd.prototype,{scene:{get:function(){return this._scene}},lowFrameRate:{get:function(){return this._lowFrameRate}},nominalFrameRate:{get:function(){return this._nominalFrameRate}},lastFramesPerSecond:{get:function(){return this._lastFramesPerSecond}}});sd.prototype.pause=function(){++this._pauseCount,this._pauseCount===1&&(this._frameTimes.length=0,this._lastFramesPerSecond=void 0)};sd.prototype.unpause=function(){--this._pauseCount,this._pauseCount<=0&&(this._pauseCount=0,this._needsQuietPeriod=!0)};sd.prototype.isDestroyed=function(){return!1};sd.prototype.destroy=function(){return this._preUpdateRemoveListener(),l(this._visibilityChangeRemoveListener)&&this._visibilityChangeRemoveListener(),me(this)};function USt(e,t){if(e._pauseCount>0)return;let n=Si();if(e._needsQuietPeriod)e._needsQuietPeriod=!1,e._frameTimes.length=0,e._quietPeriodEndTime=n+e.quietPeriod/Kn.SECONDS_PER_MILLISECOND,e._warmupPeriodEndTime=e._quietPeriodEndTime+(e.warmupPeriod+e.samplingWindow)/Kn.SECONDS_PER_MILLISECOND;else if(n>=e._quietPeriodEndTime){e._frameTimes.push(n);let i=n-e.samplingWindow/Kn.SECONDS_PER_MILLISECOND;if(e._frameTimes.length>=2&&e._frameTimes[0]<=i){for(;e._frameTimes.length>=2&&e._frameTimes[1]<i;)e._frameTimes.shift();let o=(n-e._frameTimes[0])/(e._frameTimes.length-1);e._lastFramesPerSecond=1e3/o;let r=1e3/(n>e._warmupPeriodEndTime?e.minimumFrameRateAfterWarmup:e.minimumFrameRateDuringWarmup);o>r?e._frameRateIsLow||(e._frameRateIsLow=!0,e._needsQuietPeriod=!0,e.lowFrameRate.raiseEvent(e.scene,e._lastFramesPerSecond)):e._frameRateIsLow&&(e._frameRateIsLow=!1,e._needsQuietPeriod=!0,e.nominalFrameRate.raiseEvent(e.scene,e._lastFramesPerSecond))}}}function DSt(e){document[e._hiddenPropertyName]?e.pause():e.unpause()}var kA=sd;var Mqi=_(T(),1);var QSe=_(p7(),1);function s6(){this._image=new Image}s6.prototype.isReady=function(){return!0};s6.prototype.shouldDiscardImage=function(e){return e===this._image};function ES(e){e=e??Y.EMPTY_OBJECT,this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this._tileDiscardPolicy=e.tileDiscardPolicy,this._tilingScheme=new Hi({numberOfLevelZeroTilesX:2,numberOfLevelZeroTilesY:2,rectangle:new ce(-X.PI,-X.PI,X.PI,X.PI),ellipsoid:e.ellipsoid});let t=e.credit;typeof t=="string"&&(t=new Ct(t)),this._credit=t,this._tileWidth=256,this._tileHeight=256,this._maximumLevel=23,l(this._tileDiscardPolicy)||(this._tileDiscardPolicy=new s6),this._errorEvent=new be}Object.defineProperties(ES.prototype,{url:{get:function(){return this._metadata.url}},proxy:{get:function(){return this._metadata.proxy}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){return this._maximumLevel}},minimumLevel:{get:function(){return 0}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){return this._tileDiscardPolicy}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){return this._credit}},hasAlphaChannel:{get:function(){return!1}}});ES.fromMetadata=function(e,t){if(!e.imageryPresent)throw new ae(`The server ${e.url} doesn't have imagery`);let n=new ES(t);return n._metadata=e,n};ES.prototype.getTileCredits=function(e,t,n){let i=this._metadata,o=i.getTileInformation(e,t,n);if(l(o)){let r=i.providers[o.imageryProvider];if(l(r))return[r]}};ES.prototype.requestImage=function(e,t,n,i){let o=this._tileDiscardPolicy._image,r=this._metadata,s=Z0.tileXYToQuadKey(e,t,n),a=r.getTileInformation(e,t,n);if(!l(a)){if(r.isValid(s)){let d=new zo({throttle:i.throttle,throttleByServer:i.throttleByServer,type:i.type,priorityFunction:i.priorityFunction});r.populateSubtree(e,t,n,d);return}return Promise.resolve(o)}if(!a.hasImagery())return Promise.resolve(o);let c=BSt(this,a,e,t,n,i).fetchArrayBuffer();if(l(c))return c.then(function(d){EA(r.key,d);let u=new Uint8Array(d),h,p=r.protoImagery;if((!l(p)||!p)&&(h=OSt(u)),!l(h)&&(!l(p)||p)){let g=YSt(u);h=g.imageType,u=g.imageData}return!l(h)||!l(u)?o:c_({uint8Array:u,format:h,flipY:!0})})};ES.prototype.pickFeatures=function(e,t,n,i,o){};function BSt(e,t,n,i,o,r){let s=Z0.tileXYToQuadKey(n,i,o),a=t.imageryVersion;return a=l(a)&&a>0?a:1,e._metadata.resource.getDerivedResource({url:`flatfile?f1-0${s}-i.${a.toString()}`,request:r})}function OSt(e){let t="JFIF";if(e[6]===t.charCodeAt(0)&&e[7]===t.charCodeAt(1)&&e[8]===t.charCodeAt(2)&&e[9]===t.charCodeAt(3))return"image/jpeg";let n="PNG";if(e[1]===n.charCodeAt(0)&&e[2]===n.charCodeAt(1)&&e[3]===n.charCodeAt(2))return"image/png"}function YSt(e){let t=QSe.Reader.create(e),n=t.len,i={};for(;t.pos<n;){let s=t.uint32(),a;switch(s>>>3){case 1:i.imageType=t.uint32();break;case 2:i.imageData=t.bytes();break;case 3:i.alphaType=t.uint32();break;case 4:i.imageAlpha=t.bytes();break;case 5:if(a=i.copyrightIds,l(a)||(a=i.copyrightIds=[]),(s&7)===2){let c=t.uint32()+t.pos;for(;t.pos<c;)a.push(t.uint32())}else a.push(t.uint32());break;default:t.skipType(s&7);break}}let o=i.imageType;if(l(o))switch(o){case 0:i.imageType="image/jpeg";break;case 4:i.imageType="image/png";break;default:throw new ae("GoogleEarthEnterpriseImageryProvider: Unsupported image type.")}let r=i.alphaType;return l(r)&&r!==0&&(console.log("GoogleEarthEnterpriseImageryProvider: External alpha not supported."),delete i.alphaType,delete i.imageAlpha),i}var a6=ES;var Yqi=_(T(),1);var zSt=new D(1,1,1,.4),HSt=new D(0,1,0,.05),KSt=new D(0,.5,0,.2);function IS(e){e=e??Y.EMPTY_OBJECT,this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0,this._tilingScheme=l(e.tilingScheme)?e.tilingScheme:new Hi({ellipsoid:e.ellipsoid}),this._cells=e.cells??8,this._color=e.color??zSt,this._glowColor=e.glowColor??HSt,this._glowWidth=e.glowWidth??6,this._backgroundColor=e.backgroundColor??KSt,this._errorEvent=new be,this._tileWidth=e.tileWidth??256,this._tileHeight=e.tileHeight??256,this._canvasSize=e.canvasSize??256,this._canvas=this._createGridCanvas()}Object.defineProperties(IS.prototype,{proxy:{get:function(){}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){}},minimumLevel:{get:function(){}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){}},hasAlphaChannel:{get:function(){return!0}}});IS.prototype._drawGrid=function(e){let n=this._canvasSize;for(let i=0;i<=this._cells;++i){let r=1+i/this._cells*(n-1);e.moveTo(r,0),e.lineTo(r,n),e.moveTo(0,r),e.lineTo(n,r)}e.stroke()};IS.prototype._createGridCanvas=function(){let e=document.createElement("canvas");e.width=this._canvasSize,e.height=this._canvasSize;let t=0,n=this._canvasSize,i=e.getContext("2d"),o=this._backgroundColor.toCssColorString();i.fillStyle=o,i.fillRect(t,t,n,n);let r=this._glowColor.toCssColorString();i.strokeStyle=r,i.lineWidth=this._glowWidth,i.strokeRect(t,t,n,n),this._drawGrid(i),i.lineWidth=this._glowWidth*.5,i.strokeRect(t,t,n,n),this._drawGrid(i);let s=this._color.toCssColorString();return i.strokeStyle=s,i.lineWidth=2,i.strokeRect(t,t,n,n),i.lineWidth=1,this._drawGrid(i),e};IS.prototype.getTileCredits=function(e,t,n){};IS.prototype.requestImage=function(e,t,n,i){return Promise.resolve(this._canvas)};IS.prototype.pickFeatures=function(e,t,n,i,o){};var c6=IS;var Veo=_(T(),1);var Q$i=_(T(),1);var P$i=_(T(),1);var t$i=_(T(),1);function Jh(){}Jh._maxDecodingConcurrency=Math.max(Bt.hardwareConcurrency-1,1);Jh._decodeTaskProcessor=new xi("decodeI3S",Jh._maxDecodingConcurrency);Jh._promise=void 0;async function JSt(){if(await Jh._decodeTaskProcessor.initWebAssemblyModule({wasmBinaryFile:"ThirdParty/draco_decoder.wasm"}))return Jh._decodeTaskProcessor;throw new ae("I3S decoder could not be initialized.")}Jh.decode=async function(e,t,n,i,o){return l(Jh._promise)||(Jh._promise=JSt()),Jh._promise.then(function(r){let s=n._parent._data,a=n._parent._inverseRotationMatrix,c=0,d=0,u=0;l(s.obb)?(c=s.obb.center[0],d=s.obb.center[1],u=s.obb.center[2]):l(s.mbs)&&(c=s.mbs[0],d=s.mbs[1],u=s.mbs[2]);let h=$.fromRotationX(-X.PI_OVER_TWO),p=new $;$.multiply(h,a,p);let g=he.fromDegrees(c,d,u),f=ne.WGS84.cartographicToCartesian(g),y={binaryData:n._data,featureData:l(i)&&l(i[0])?i[0].data:void 0,schema:t,bufferInfo:n._geometryBufferInfo,ellipsoidRadiiSquare:ne.WGS84.radiiSquared,url:e,geoidDataList:n._dataProvider._geoidDataList,cartographicCenter:g,cartesianCenter:f,parentRotation:p,enableFeatures:n._dataProvider.showFeatures,splitGeometryByColorTransparency:n._dataProvider.adjustMaterialAlphaMode,symbologyData:o,calculateNormals:n._dataProvider.calculateNormals};return r.scheduleTask(y)})};var UA=Jh;var r$i=_(T(),1);function l6(e,t){this._parent=e,this._dataProvider=e._dataProvider,this._layer=e._layer,l(this._parent._nodeIndex)?this._resource=this._parent._layer.resource.getDerivedResource({url:`nodes/${this._parent._data.mesh.attribute.resource}/${t}`}):this._resource=this._parent.resource.getDerivedResource({url:t})}Object.defineProperties(l6.prototype,{resource:{get:function(){return this._resource}},data:{get:function(){return this._data}}});l6.prototype.load=async function(){return this._data=await Qh.loadJson(this._resource),this._data};var DA=l6;var l$i=_(T(),1);function E0(e,t){this._storageInfo=t,this._parent=e,this._dataProvider=e._dataProvider,this._loadPromise=void 0;let n=`attributes/${t.key}/0`;l(this._parent._nodeIndex)?this._resource=this._parent._layer.resource.getDerivedResource({url:`nodes/${this._parent._data.mesh.attribute.resource}/${n}`}):this._resource=this._parent.resource.getDerivedResource({url:n})}Object.defineProperties(E0.prototype,{resource:{get:function(){return this._resource}},header:{get:function(){return this._header}},values:{get:function(){if(l(this._values)){if(l(this._values.attributeValues))return this._values.attributeValues;if(l(this._values.objectIds))return this._values.objectIds}return[]}},name:{get:function(){return this._storageInfo.name}}});function sB(e){return e==="UInt8"||e==="Int8"?1:e==="UInt16"||e==="Int16"?2:e==="UInt32"||e==="Int32"||e==="Oid32"||e==="Float32"?4:e==="UInt64"||e==="Int64"||e==="Float64"?8:0}function QSt(e){return e==="String"?1:sB(e)}async function jSt(e){let t=await e._dataProvider._loadBinary(e._resource),n=new DataView(t);e._data=t,e._validateHeader(n);let i=e._parseHeader(n),o=e._getBodyOffset(i);e._validateBody(n,o),e._parseBody(n,o)}E0.prototype.load=function(){return l(this._loadPromise)?this._loadPromise:(this._loadPromise=jSt(this).catch(function(e){console.error(e)}),this._loadPromise)};E0.prototype._parseValue=function(e,t,n){let i;if(t==="UInt8")i=e.getUint8(n),n+=1;else if(t==="Int8")i=e.getInt8(n),n+=1;else if(t==="UInt16")i=e.getUint16(n,!0),n+=2;else if(t==="Int16")i=e.getInt16(n,!0),n+=2;else if(t==="UInt32")i=e.getUint32(n,!0),n+=4;else if(t==="Oid32")i=e.getUint32(n,!0),n+=4;else if(t==="Int32")i=e.getInt32(n,!0),n+=4;else if(t==="UInt64"){let o=e.getUint32(n,!0),r=e.getUint32(n+4,!0);i=o+Math.pow(2,32)*r,n+=8}else if(t==="Int64"){let o=e.getUint32(n,!0),r=e.getUint32(n+4,!0);r<Math.pow(2,31)?i=o+Math.pow(2,32)*r:i=o+Math.pow(2,32)*(r-Math.pow(2,32)),n+=8}else t==="Float32"?(i=e.getFloat32(n,!0),n+=4):t==="Float64"?(i=e.getFloat64(n,!0),n+=8):t==="String"&&(i=String.fromCharCode(e.getUint8(n)),n+=1);return{value:i,offset:n}};E0.prototype._parseHeader=function(e){let t=0;this._header={};for(let n=0;n<this._storageInfo.header.length;n++){let i=this._storageInfo.header[n],o=this._parseValue(e,i.valueType,t);this._header[i.property]=o.value,t=o.offset}return t};E0.prototype._parseBody=function(e,t){this._values={};for(let n=0;n<this._storageInfo.ordering.length;n++){let i=this._storageInfo.ordering[n],o=i==="ObjectIds"?"objectIds":i,r=this._storageInfo[o];if(l(r)){this._values[o]=[];for(let s=0;s<this._header.count;++s)if(r.valueType!=="String"){let a=this._parseValue(e,r.valueType,t);this._values[o].push(a.value),t=a.offset}else{let a=this._values.attributeByteCounts[s],c="";for(let d=0;d<a;++d){let u=this._parseValue(e,r.valueType,t);u.value.charCodeAt(0)!==0&&(c+=u.value),t=u.offset}this._values[o].push(c)}}}};E0.prototype._getBodyOffset=function(e){let t=0;return l(this._storageInfo.attributeValues)?t=sB(this._storageInfo.attributeValues.valueType):l(this._storageInfo.objectIds)&&(t=sB(this._storageInfo.objectIds.valueType)),t>0?Math.ceil(e/t)*t:e};E0.prototype._validateHeader=function(e){let t=0;for(let n=0;n<this._storageInfo.header.length;n++){let i=this._storageInfo.header[n];t+=QSt(i.valueType)}if(e.byteLength<t)throw new ae(`Invalid attribute buffer size (field: ${this.name}, header: ${t}, actual: ${e.byteLength})`)};E0.prototype._validateBody=function(e,t){if(!l(this._header.count))throw new ae(`Invalid attribute buffer (field: ${this.name}, count is missing)`);let n;for(let i=0;i<this._storageInfo.ordering.length&&t<e.byteLength;i++){let o=this._storageInfo.ordering[i],r=o==="ObjectIds"?"objectIds":o,s=this._storageInfo[r];if(l(s))if(s.valueType!=="String"){r==="attributeByteCounts"&&(n=t);let a=sB(s.valueType);t+=a*this._header.count}else{if(!l(n))throw new ae(`Invalid attribute buffer (field: ${this.name}, attributeByteCounts is missing)`);for(let a=0;a<this._header.count&&t<e.byteLength;++a){let c=this._parseValue(e,this._storageInfo.attributeByteCounts.valueType,n);t+=c.value,n=c.offset}}else throw new ae(`Invalid attribute buffer (field: ${this.name}, ${r} is missing)`)}if(e.byteLength<t)throw new ae(`Invalid attribute buffer size (field: ${this.name}, expected: ${t}, actual: ${e.byteLength})`)};var BA=E0;var b$i=_(T(),1);function OA(e,t){let n=e._dataProvider,i=e._layer,o;l(e._nodeIndex)?o=i.resource.getDerivedResource({url:`nodes/${e._data.mesh.geometry.resource}/${t}`}):o=e.resource.getDerivedResource({url:t}),this._parent=e,this._dataProvider=n,this._layer=i,this._resource=o,this._customAttributes=void 0}Object.defineProperties(OA.prototype,{resource:{get:function(){return this._resource}},data:{get:function(){return this._data}},customAttributes:{get:function(){return this._customAttributes}}});OA.prototype.load=function(){let e=this;return this._dataProvider._loadBinary(this._resource).then(function(t){return e._data=t,t})};var qSt=new m,$St=new m,eCt=new m,tCt=new m,nCt=new m;function d6(e,t,n,i){let o=m.subtract(i,n,qSt),r=m.cross(o,m.subtract(e,n,$St),tCt),s=m.cross(o,m.subtract(t,n,eCt),nCt);return m.dot(r,s)>=0}var iCt=new m,oCt=new m,rCt=new m,sCt=new m,aCt=new m,cCt=new m,lCt=new m,dCt=new m,uCt=new m,mCt=new m;OA.prototype.getClosestPointIndexOnTriangle=function(e,t,n){if(l(this._customAttributes)&&l(this._customAttributes.positions)){let i=new m(e,t,n);i.x-=this._customAttributes.cartesianCenter.x,i.y-=this._customAttributes.cartesianCenter.y,i.z-=this._customAttributes.cartesianCenter.z,$.multiplyByVector(this._customAttributes.parentRotation,i,i);let o=Number.MAX_VALUE,r,s,a,c,d=this._customAttributes.positions,u=this._customAttributes.indices,h;l(u)?h=u.length:h=d.length/3;for(let p=0;p<h;p++){let g,f,y;l(u)?(g=u[p],f=u[p+1],y=u[p+2]):(g=p*3,f=p*3+1,y=p*3+2);let x=m.fromElements(d[g*3],d[g*3+1],d[g*3+2],iCt),S=m.fromElements(d[f*3],d[f*3+1],d[f*3+2],oCt),C=new m(d[y*3],d[y*3+1],d[y*3+2],rCt);if(!d6(i,x,S,C)||!d6(i,S,x,C)||!d6(i,C,x,S))continue;let V=m.subtract(S,x,sCt),L=m.subtract(C,x,aCt),Z=m.cross(V,L,cCt);if(m.magnitude(Z)===0)continue;let E=m.normalize(Z,lCt),P=m.subtract(i,x,dCt),W=Math.abs(m.dot(P,E));if(W<o){o=W,r=p;let v=m.magnitudeSquared(m.subtract(i,x,P)),A=m.magnitudeSquared(m.subtract(i,S,uCt)),b=m.magnitudeSquared(m.subtract(i,C,mCt));v<A&&v<b?(a=g,c=x,s=v):A<b?(a=f,c=S,s=A):(a=y,c=C,s=b)}}if(l(r))return{index:a,distanceSquared:s,distance:Math.sqrt(s),queriedPosition:i,closestPosition:m.clone(c)}}return{index:-1,distanceSquared:Number.Infinity,distance:Number.Infinity}};function jSe(e){let t=[],n=e.length;for(let i=0;i<n;i++)i<3?t.push(LS(e[i])):t.push(e[i]);return t}OA.prototype._generateGltf=function(e,t,n,i,o,r,s,a){let c={pbrMetallicRoughness:{metallicFactor:0},doubleSided:!0,name:"Material"},d=!1,u,h="";if(l(this._parent._data.mesh)&&l(this._layer._data.materialDefinitions)){let V=this._parent._data.mesh.material.definition;if(V>=0&&V<this._layer._data.materialDefinitions.length){if(u=this._layer._data.materialDefinitions[V],c=u,l(c.pbrMetallicRoughness)&&l(c.pbrMetallicRoughness.baseColorTexture)){d=!0,c.pbrMetallicRoughness.baseColorTexture.index=0;let L="0";if(l(this._layer._data.textureSetDefinitions))for(let Z=0;Z<this._layer._data.textureSetDefinitions.length;Z++){let E=this._layer._data.textureSetDefinitions[Z];for(let P=0;P<E.formats.length;P++){let W=E.formats[P];if(W.format==="jpg"){L=W.name;break}}}l(this._parent._data.mesh)&&this._parent._data.mesh.material.resource>=0&&(h=this._layer.resource.getDerivedResource({url:`nodes/${this._parent._data.mesh.material.resource}/textures/${L}`}).url)}l(c.pbrMetallicRoughness)&&l(c.pbrMetallicRoughness.baseColorFactor)&&(c.pbrMetallicRoughness.baseColorFactor=jSe(c.pbrMetallicRoughness.baseColorFactor)),l(c.emissiveFactor)&&(c.emissiveFactor=jSe(c.emissiveFactor))}}else l(this._parent._data.textureData)&&(d=!0,h=this._parent.resource.getDerivedResource({url:`${this._parent._data.textureData[0].href}`}).url,c.pbrMetallicRoughness.baseColorTexture={index:0});l(c.alphaMode)&&(c.alphaMode=c.alphaMode.toUpperCase());let p=[],g=[],f=[];d&&(p=[{sampler:0,source:0}],g=[{uri:h}],f=[{magFilter:9729,minFilter:9986,wrapS:10497,wrapT:10497}]);let y=[],x=n.length;for(let C=0;C<x;C++){let V=n[C].primitives,L=V.length;for(let Z=0;Z<L;Z++){let E=V[Z];if(l(E.material)){for(;E.material>=y.length;){let W=Ye(c,!0);y.push(W)}let P=y[E.material];l(E.extra)&&E.extra.isTransparent?l(P.alphaMode)||(P.alphaMode="BLEND"):P.alphaMode==="BLEND"&&(P.alphaMode="OPAQUE")}}}return{scene:0,scenes:[{nodes:e}],nodes:t,meshes:n,buffers:i,bufferViews:o,accessors:r,materials:y,textures:p,images:g,samplers:f,asset:{version:"2.0"},extensions:s,extensionsUsed:a}};var wL=OA;function Wc(e,t,n){let i,o,r,s;n?(i=0,o=e):(i=e._level+1,o=e._layer),typeof t=="number"?r=t:s=e.resource.getDerivedResource({url:`${t}/`}),this._parent=e,this._dataProvider=e._dataProvider,this._isRoot=n,this._level=i,this._layer=o,this._nodeIndex=r,this._resource=s,this._isLoading=!1,this._tile=void 0,this._data=void 0,this._geometryData=[],this._featureData=[],this._fields={},this._children=[],this._childrenReadyPromise=void 0,this._globalTransform=void 0,this._inverseGlobalTransform=void 0,this._inverseRotationMatrix=void 0,this._symbologyData=void 0}Object.defineProperties(Wc.prototype,{resource:{get:function(){return this._resource}},layer:{get:function(){return this._layer}},parent:{get:function(){return this._parent}},children:{get:function(){return this._children}},geometryData:{get:function(){return this._geometryData}},featureData:{get:function(){return this._featureData}},fields:{get:function(){return this._fields}},tile:{get:function(){return this._tile}},data:{get:function(){return this._data}}});Wc.prototype.load=async function(){let e=this;function t(){if(!e._isRoot){let o=e._create3DTileDefinition();e._tile=new Ju(e._layer._tileset,e._dataProvider.resource,o,e._parent._tile),e._tile._i3sNode=e}}if(!l(this._nodeIndex)){let o=await Qh.loadJson(this._resource);e._data=o,t();return}let n=await this._layer._getNodeInNodePages(this._nodeIndex);e._data=n;let i;e._isRoot?i="nodes/root/":l(n.mesh)&&(i=`../${n.mesh.geometry.resource}/`),l(i)&&l(e._parent.resource)&&(e._resource=e._parent.resource.getDerivedResource({url:i})),t()};function qSe(e,t){let n=new BA(e,t);return e._fields[t.name]=n,n.load()}Wc.prototype.loadFields=function(){let e=this._layer._data.attributeStorageInfo,t=[];if(l(e))for(let n=0;n<e.length;n++){let i=e[n],o=this._fields[i.name];l(o)?t.push(o.load()):t.push(qSe(this,i))}return Promise.all(t)};Wc.prototype.loadField=function(e){let t=this._fields[e];if(l(t))return t.load();let n=this._layer._data.attributeStorageInfo;if(l(n))for(let i=0;i<n.length;i++){let o=n[i];if(o.name===e)return qSe(this,o)}return Promise.resolve()};Wc.prototype.getFieldsForPickedPosition=function(e){let t=this.geometryData[0];if(!l(t.customAttributes.featureIndex))return{};let n=t.getClosestPointIndexOnTriangle(e.x,e.y,e.z);if(n.index===-1||n.index>t.customAttributes.featureIndex.length)return{};let i=t.customAttributes.featureIndex[n.index];return this.getFieldsForFeature(i)};Wc.prototype.getFieldsForFeature=function(e){let t={};for(let n in this.fields)if(this.fields.hasOwnProperty(n)){let i=this.fields[n];e>=0&&e<i.values.length&&(t[i.name]=i.values[e])}return t};Wc.prototype._loadChildren=function(){let e=this;if(l(this._childrenReadyPromise))return this._childrenReadyPromise;let t=[];if(l(e._data.children))for(let n=0;n<e._data.children.length;n++){let i=e._data.children[n],o=new Wc(e,i.href??i,!1);e._children.push(o),t.push(o.load())}return this._childrenReadyPromise=Promise.all(t).then(function(){for(let n=0;n<e._children.length;n++)e._tile.children.push(e._children[n]._tile)}),this._childrenReadyPromise};Wc.prototype._loadGeometryData=function(){let e=[];if(l(this._data.geometryData))for(let t=0;t<this._data.geometryData.length;t++){let n=new wL(this,this._data.geometryData[t].href);this._geometryData.push(n),e.push(n.load())}else if(l(this._data.mesh)){let t=this._layer._findBestGeometryBuffers(this._data.mesh.geometry.definition,["position","uv0"]),n=`./geometries/${t.bufferIndex}/`,i=new wL(this,n);i._geometryDefinitions=t.definition,i._geometryBufferInfo=t.geometryBufferInfo,this._geometryData.push(i),e.push(i.load())}return Promise.all(e)};Wc.prototype._loadFeatureData=function(){let e=[];if(l(this._data.featureData))for(let t=0;t<this._data.featureData.length;t++){let n=new DA(this,this._data.featureData[t].href);this._featureData.push(n),e.push(n.load())}return Promise.all(e)};Wc.prototype._clearGeometryData=function(){this._geometryData=[]};Wc.prototype._create3DTileDefinition=function(){let e=this._data.obb,t=this._data.mbs;if(!l(e)&&!l(t)){console.error("Failed to load I3S node. Bounding volume is required.");return}let n;if(l(e)?n=he.fromDegrees(e.center[0],e.center[1],e.center[2]):n=he.fromDegrees(t[0],t[1],t[2]),l(this._dataProvider._geoidDataList)&&l(n))for(let S=0;S<this._dataProvider._geoidDataList.length;S++){let C=this._dataProvider._geoidDataList[S],V=C.projection.project(n);if(V.x>C.nativeExtent.west&&V.x<C.nativeExtent.east&&V.y>C.nativeExtent.south&&V.y<C.nativeExtent.north){n.height+=bCt(V.x,V.y,C);break}}let i={},o,r=0;l(e)?(i={box:[0,0,0,e.halfSize[0],0,0,0,e.halfSize[1],0,0,0,e.halfSize[2]]},r=Math.max(Math.max(this._data.obb.halfSize[0],this._data.obb.halfSize[1]),this._data.obb.halfSize[2]),o=ne.WGS84.cartographicToCartesian(n)):(i={sphere:[0,0,0,t[3]]},o=ne.WGS84.cartographicToCartesian(n),r=this._data.mbs[3]),r*=2;let s=1/0;if(l(this._data.lodThreshold))if(this._layer._data.nodePages.lodSelectionMetricType==="maxScreenThresholdSQ"){let S=Math.sqrt(this._data.lodThreshold/(Math.PI*.25));s=r/S}else if(this._layer._data.nodePages.lodSelectionMetricType==="maxScreenThreshold"){let S=this._data.lodThreshold;s=r/S}else console.error("Invalid lodSelectionMetricType in Layer");else if(l(this._data.lodSelection))for(let S=0;S<this._data.lodSelection.length;S++)this._data.lodSelection[S].metricType==="maxScreenThreshold"&&(s=r/this._data.lodSelection[S].maxError);s===1/0&&(s=1e5);let a=s*16,c=new Ea(0,0,0),d=Pt.headingPitchRollQuaternion(o,c);l(this._data.obb)&&(d=new ve(this._data.obb.quaternion[0],this._data.obb.quaternion[1],this._data.obb.quaternion[2],this._data.obb.quaternion[3]));let u=$.fromQuaternion(d),h=$.inverse(u,new $),p=new F(u[0],u[1],u[2],0,u[3],u[4],u[5],0,u[6],u[7],u[8],0,o.x,o.y,o.z,1),g=F.inverse(p,new F),f=F.clone(p);l(this._parent._globalTransform)&&F.multiply(p,this._parent._inverseGlobalTransform,f),this._globalTransform=p,this._inverseGlobalTransform=g,this._inverseRotationMatrix=h;let y=[];for(let S=0;S<this._children.length;S++)y.push(this._children[S]._create3DTileDefinition());return{children:y,refine:"REPLACE",boundingVolume:i,transform:[f[0],f[4],f[8],f[12],f[1],f[5],f[9],f[13],f[2],f[6],f[10],f[14],f[3],f[7],f[11],f[15]],content:{uri:l(this._resource)?this._resource.url:void 0},geometricError:a}};Wc.prototype._loadSymbology=async function(){!l(this._symbologyData)&&l(this._layer._symbology)&&(this._symbologyData=await this._layer._symbology._getSymbology(this))};Wc.prototype._createContentURL=async function(){let e={scene:0,scenes:[{nodes:[0]}],nodes:[{name:"singleNode"}],meshes:[],buffers:[],bufferViews:[],accessors:[],materials:[],textures:[],images:[],samplers:[],asset:{version:"2.0"}},t=[this._loadGeometryData()];if(this._dataProvider.legacyVersion16&&t.push(this._loadFeatureData()),await Promise.all(t),l(this._geometryData)&&this._geometryData.length>0){this._dataProvider._applySymbology&&await this._loadSymbology();let o=this._geometryData[0].resource.url,r=this._layer._data.store.defaultGeometrySchema,s=this._geometryData[0],a=await UA.decode(o,r,s,this._featureData[0],this._symbologyData);if(!l(a))return;e=s._generateGltf(a.meshData.nodesInScene,a.meshData.nodes,a.meshData.meshes,a.meshData.buffers,a.meshData.bufferViews,a.meshData.accessors,a.meshData.rootExtensions,a.meshData.extensionsUsed),this._geometryData[0]._customAttributes=a.meshData._customAttributes}let n=this._dataProvider._binarizeGltf(e),i=new Blob([n],{type:"application/binary"});return URL.createObjectURL(i)};async function hCt(e){let t=e._layer._filters,n=[];for(let i=0;i<t.length;i++){let o=e.loadField(t[i].name);n.push(o)}return await Promise.all(n),t}function fCt(e,t,n){if(!l(n.values)||n.values.length===0)return!1;let i=l(t)?t.values:[],o;e<i.length&&(o=i[e]);let r=!1;for(let s=0;s<n.values.length;s++)if(n.values[s]===o){r=!0;break}return r}async function $Se(e,t){let n=e._tile.content.batchTable;if(l(n)&&n.featuresLength>0){n.setAllShow(!0);let i=await hCt(e);if(i.length>0)for(let o=0;o<n.featuresLength;o++)for(let r=0;r<i.length;r++){let s=i[r];if(!fCt(o,e._fields[s.name],s)){n.setShow(o,!1);break}}}t.show=!0}Wc.prototype._filterFeatures=function(){let e=[];for(let n=0;n<this._children.length;n++){let i=this._children[n]._filterFeatures();e.push(i)}let t=this._tile?.content?._model;if(l(this._geometryData)&&this._geometryData.length>0&&l(t)&&t.ready){t.show=!1;let n=$Se(this,t);e.push(n)}return Promise.all(e)};Ju.prototype._hookedRequestContent=Ju.prototype.requestContent;Ju.prototype.requestContent=function(){if(!this.tileset._isI3STileSet)return this._hookedRequestContent();if(!this._isLoading){this._isLoading=!0;let e=this;return this._i3sNode._createContentURL().then(t=>{if(!l(t)){e._isLoading=!1;return}return e._contentResource=new Ze({url:t}),e._hookedRequestContent()}).then(t=>{let n=t?._model;return l(e._i3sNode._geometryData)&&e._i3sNode._geometryData.length>0&&l(n)&&(n.show=!1,n.readyEvent.addEventListener(()=>{$Se(e._i3sNode,n)})),e._isLoading=!1,t})}};function pCt(e,t,n,i,o,r){let s=n*(1-e)+i*e,a=o*(1-e)+r*e;return s*(1-t)+a*t}function aB(e,t,n,i){let o=e+t*n;return i[o]}function bCt(e,t,n){let i=n.nativeExtent,o=(e-i.west)/(i.east-i.west)*(n.width-1),r=(t-i.south)/(i.north-i.south)*(n.height-1),s=Math.floor(o),a=Math.floor(r);o-=s,r-=a;let c=s<n.width?s+1:s,d=a<n.height?a+1:a;a=n.height-1-a,d=n.height-1-d;let u=aB(s,a,n.width,n.buffer),h=aB(c,a,n.width,n.buffer),p=aB(s,d,n.width,n.buffer),g=aB(c,d,n.width,n.buffer),f=pCt(o,r,u,h,p,g);return f=f*n.scale+n.offset,f}Object.defineProperties(Ju.prototype,{i3sNode:{get:function(){return this._i3sNode}}});var FL=Wc;var M$i=_(T(),1);function cB(e){this._layer=e,this._defaultSymbology=void 0,this._valueFields=[],this._uniqueValueHash=void 0,this._classBreaksHash=void 0,this._parseLayerSymbology()}Object.defineProperties(cB.prototype,{defaultSymbology:{get:function(){return this._defaultSymbology}}});function u6(e,t){let n=[];for(let i=0;i<e.length;i++){let o=D.byteToFloat(e[i]);i<3?n.push(LS(o)):n.push(o)}return n.length===3&&(l(t)?n.push(1-t/100):n.push(1)),n}function AL(e,t){let n={edges:void 0,material:void 0};if(l(e)&&l(e.symbolLayers))for(let i=0;i<e.symbolLayers.length;i++){let o=e.symbolLayers[i];if(o.type==="Fill"){let r=o.edges,s=o.outline;if(l(r)?(n.edges={},l(r.color)&&(n.edges.color=u6(r.color,r.transparency))):l(s)&&(n.edges={},l(s.color)&&(n.edges.color=u6(s.color,s.transparency))),!t){let a=o.material;l(a)&&(n.material={colorMixMode:a.colorMixMode},l(a.color)&&(n.material.color=u6(a.color,a.transparency)))}break}}return n}function gCt(e,t){if(l(e.uniqueValueGroups)){let n={};for(let i=0;i<e.uniqueValueGroups.length;i++){let o=e.uniqueValueGroups[i].classes;if(l(o))for(let r=0;r<o.length;r++){let s=AL(o[r].symbol,t),a=o[r].values;for(let c=0;c<a.length;c++){let d=a[c],u=n;for(let h=0;h<d.length;h++){let p=d[h];h===d.length-1?u[p]=s:(l(u[p])||(u[p]={}),u=u[p])}}}}return n}if(l(e.uniqueValueInfos)){let n={};for(let i=0;i<e.uniqueValueInfos.length;i++){let o=e.uniqueValueInfos[i];n[o.value]=AL(o.symbol,t)}return n}}function yCt(e,t){if(l(e.classBreakInfos)){let n=[...e.classBreakInfos];n.sort(function(o,r){let s=o.classMaxValue??o.classMinValue,a=r.classMaxValue??r.classMinValue;return s-a});let i={ranges:[],symbols:[]};l(e.minValue)&&(i.ranges.push(e.minValue),i.symbols.push(void 0));for(let o=0;o<n.length;o++){let r=n[o];l(r.classMinValue)&&(i.ranges.length===0||r.classMinValue>i.ranges[i.ranges.length-1])&&(i.ranges.push(r.classMinValue),i.symbols.push(void 0)),l(r.classMaxValue)&&(i.ranges.length===0||r.classMaxValue>i.ranges[i.ranges.length-1])&&(i.ranges.push(r.classMaxValue),i.symbols.push(AL(r.symbol,t)))}return i.symbols.push(void 0),i}}cB.prototype._parseLayerSymbology=function(){let e=this._layer.data.drawingInfo;if(l(e)&&l(e.renderer)){let t=this._layer.data.cachedDrawingInfo,n=l(t)&&t.color===!0,i=e.renderer;i.type==="simple"?this._defaultSymbology=AL(i.symbol,n):i.type==="uniqueValue"?(this._defaultSymbology=AL(i.defaultSymbol,n),this._valueFields.push(i.field1),l(i.field2)&&this._valueFields.push(i.field2),l(i.field3)&&this._valueFields.push(i.field3),this._uniqueValueHash=gCt(i,n)):i.type==="classBreaks"&&(this._defaultSymbology=AL(i.defaultSymbol,n),this._valueFields.push(i.field),this._classBreaksHash=yCt(i,n))}};function eCe(e,t,n,i){let o=t[n];if(i<o.length){let r=o[i],s=e[r];return l(s)&&++n<t.length?eCe(s,t,n,i):s}}function xCt(e,t){let n=0,i=e.length;if(n<i)do{let o=n+i>>>1;e[o]<t?n=o+1:i=o}while(n<i);return n}function _Ct(e,t,n){let i=t[n],o=xCt(e.ranges,i);return e.symbols[o]}cB.prototype._getSymbology=async function(e){let t={default:this._defaultSymbology};if(this._valueFields.length>0){let n=[];for(let r=0;r<this._valueFields.length;r++)n.push(e.loadField(this._valueFields[r]));await Promise.all(n);let i=[];for(let r=0;r<this._valueFields.length;r++)i.push(e.fields[this._valueFields[r]].values);let o;if(l(this._uniqueValueHash)?o=r=>eCe(this._uniqueValueHash,i,0,r):l(this._classBreaksHash)&&(o=r=>_Ct(this._classBreaksHash,i[0],r)),l(o)){let r=i[0];for(let s=0;s<r.length;s++){let a=o(s);l(a)&&(t[s]=a)}}}return t};var YA=cB;function ad(e,t,n){this._dataProvider=e,this._parent=n,!l(t.href)&&l(t.id)&&(t.href=`layers/${t.id}`);let i=this._parent.resource.getUrlComponent(),o="";i.match(/layers\/\d/)?o=`${i}`.replace(/\/+$/,""):o=`${i}`.replace(/\/?$/,"/").concat(`${t.href}`),this._version=t.store.version;let r=this._version.split(".");this._majorVersion=parseInt(r[0]),this._minorVersion=r.length>1?parseInt(r[1]):0,this._resource=new Ze({url:o}),this._resource.setQueryParameters(this._dataProvider.resource.queryParameters),this._resource.appendForwardSlash(),this._data=t,this._rootNode=void 0,this._nodePages={},this._nodePageFetches={},this._extent=void 0,this._tileset=void 0,this._geometryDefinitions=void 0,this._filters=[],this._symbology=void 0,this._computeGeometryDefinitions(!0),this._computeExtent()}Object.defineProperties(ad.prototype,{resource:{get:function(){return this._resource}},rootNode:{get:function(){return this._rootNode}},tileset:{get:function(){return this._tileset}},data:{get:function(){return this._data}},version:{get:function(){return this._version}},majorVersion:{get:function(){return this._majorVersion}},minorVersion:{get:function(){return this._minorVersion}},legacyVersion16:{get:function(){if(l(this.version))return this.majorVersion<1||this.majorVersion===1&&this.minorVersion<=6}}});ad.prototype.load=async function(e){if(this._data.spatialReference.wkid!==4326)throw new ae(`Unsupported spatial reference: ${this._data.spatialReference.wkid}`);if(this._dataProvider.applySymbology&&(this._symbology=new YA(this)),await this._dataProvider.loadGeoidData(),await this._loadRootNode(e),await this._create3DTileset(e),this._rootNode._tile=this._tileset._root,this._tileset._root._i3sNode=this._rootNode,this.legacyVersion16)return this._rootNode._loadChildren()};ad.prototype._computeGeometryDefinitions=function(e){if(this._geometryDefinitions=[],l(this._data.geometryDefinitions))for(let t=0;t<this._data.geometryDefinitions.length;t++){let n=[],i=this._data.geometryDefinitions[t].geometryBuffers;for(let o=0;o<i.length;o++){let r=i[o],s=[],a=!1;if(l(r.compressedAttributes)&&e){a=!0;let c=r.compressedAttributes.attributes;for(let d=0;d<c.length;d++)s.push(c[d])}else for(let c in r)c!=="offset"&&s.push(c);n.push({compressed:a,attributes:s,index:i.indexOf(r)})}n.sort(function(o,r){return o.compressed&&!r.compressed?-1:!o.compressed&&r.compressed?1:o.attributes.length-r.attributes.length}),this._geometryDefinitions.push(n)}};ad.prototype._findBestGeometryBuffers=function(e,t){let n=this._geometryDefinitions[e];if(l(n)){for(let i=0;i<n.length;++i){let o=n[i],r=!1,s=o.attributes;for(let a=0;a<t.length;a++)if(!s.includes(t[a])){r=!0;break}if(!r)return{bufferIndex:o.index,definition:n,geometryBufferInfo:o}}if(l(n[0]))return{bufferIndex:0,definition:n,geometryBufferInfo:n[0]}}};ad.prototype._loadRootNode=function(e){if(l(this._data.nodePages)){let t=0;l(this._data.nodePages.rootIndex)&&(t=this._data.nodePages.rootIndex),this._rootNode=new FL(this,t,!0)}else this._rootNode=new FL(this,this._data.store.rootNode,!0);return this._rootNode.load(e)};ad.prototype._getNodeInNodePages=function(e){let t=Math.floor(e/this._data.nodePages.nodesPerPage),n=e%this._data.nodePages.nodesPerPage;return this._loadNodePage(t).then(function(i){return i.nodes[n]})};ad._fetchJson=function(e){return e.fetchJson()};ad.prototype._loadNodePage=function(e){let t=this;if(!l(this._nodePageFetches[e])){let n=this.resource.getDerivedResource({url:`nodepages/${e}/`}),i=ad._fetchJson(n).then(function(o){return l(o.error)&&o.error.code!==200?Promise.reject(o.error):(t._nodePages[e]=o.nodes,o)});this._nodePageFetches[e]=i}return this._nodePageFetches[e]};ad.prototype._computeExtent=function(){l(this._data.fullExtent)?this._extent=ce.fromDegrees(this._data.fullExtent.xmin,this._data.fullExtent.ymin,this._data.fullExtent.xmax,this._data.fullExtent.ymax):l(this._data.store.extent)&&(this._extent=ce.fromDegrees(this._data.store.extent[0],this._data.store.extent[1],this._data.store.extent[2],this._data.store.extent[3]))};ad.prototype._create3DTileset=async function(e){let t={asset:{version:"1.0"},geometricError:Number.MAX_VALUE,root:this._rootNode._create3DTileDefinition()},n=new Blob([JSON.stringify(t)],{type:"application/json"}),i=URL.createObjectURL(n),o=this._symbology?.defaultSymbology?.edges?.color;l(o)&&!l(e?.outlineColor)&&(e=l(e)?Ye(e):{},e.outlineColor=D.fromCartesian4(se.fromArray(o))),this._tileset=await bs.fromUrl(i,e),this._tileset.show=this._parent.show,this._tileset._isI3STileSet=!0,this._tileset.tileUnload.addEventListener(function(r){r._i3sNode._clearGeometryData(),URL.revokeObjectURL(r._contentResource._url),r._contentResource=r._i3sNode.resource}),this._tileset.tileVisible.addEventListener(function(r){l(r._i3sNode)&&r._i3sNode._loadChildren()})};ad.prototype._updateVisibility=function(){l(this._tileset)&&(this._tileset.show=this._parent.show)};ad.prototype.filterByAttributes=function(e){this._filters=l(e)?Ye(e,!0):[];let t=this._rootNode;return l(t)?t._filterFeatures():Promise.resolve()};var XS=ad;var teo=_(T(),1);function lB(e,t){this._dataProvider=e,this._resource=new Ze({url:t}),this._resource.setQueryParameters(e.resource.queryParameters),this._resource.appendForwardSlash()}Object.defineProperties(lB.prototype,{resource:{get:function(){return this._resource}},data:{get:function(){return this._data}},names:{get:function(){let e=[],t=this._data.summary;if(l(t))for(let n=0;n<t.length;++n)e.push(t[n].fieldName);return e}}});lB.prototype.load=async function(){return this._data=await Qh.loadJson(this._resource),this._data};lB.prototype._getValues=function(e){let t=this._data.summary;if(l(t))for(let n=0;n<t.length;++n){let i=t[n];if(i.fieldName===e)return l(i.mostFrequentValues)?[...i.mostFrequentValues]:[]}};var zA=lB;var aeo=_(T(),1);function HA(e,t,n){this._dataProvider=e,this._parent=t,this._data=n,this._name=n.name,this._modelName=n.modelName,this._visibility=n.visibility??!0,this._resource=void 0,this._sublayers=[],this._i3sLayers=[]}Object.defineProperties(HA.prototype,{resource:{get:function(){return this._resource}},data:{get:function(){return this._data}},name:{get:function(){return this._name}},modelName:{get:function(){return this._modelName}},sublayers:{get:function(){return this._sublayers}},visibility:{get:function(){return this._visibility},set:function(e){if(this._visibility!==e){this._visibility=e;for(let t=0;t<this._i3sLayers.length;t++)this._i3sLayers[t]._updateVisibility()}}},show:{get:function(){return this._visibility&&this._parent.show}}});HA._fromData=async function(e,t,n,i){let o=new HA(e,i,n);if(o._data.layerType==="group"){let r=o._data.sublayers;if(l(r)){let s=[];for(let c=0;c<r.length;c++){let d=HA._fromData(e,t,r[c],o);s.push(d)}let a=await Promise.all(s);for(let c=0;c<a.length;c++){let d=a[c];o._sublayers.push(d),o._i3sLayers.push(...d._i3sLayers)}}}else if(o._data.layerType==="3DObject"){let r=t.concat(`/sublayers/${o._data.id}`),s=new Ze({url:r});s.setQueryParameters(e.resource.queryParameters),s.appendForwardSlash(),o._resource=s;let a=await Qh.loadJson(o._resource),c=new XS(e,a,o);o._i3sLayers.push(c)}else console.log(`${o._data.layerType} layer ${o._data.name} is skipped as not supported.`);return o};var KA=HA;var iCe=_(tCe(),1);function _s(e){e=e??Y.EMPTY_OBJECT,this._name=e.name,this._show=e.show??!0,this._geoidTiledTerrainProvider=e.geoidTiledTerrainProvider,this._showFeatures=e.showFeatures??!1,this._adjustMaterialAlphaMode=e.adjustMaterialAlphaMode??!1,this._applySymbology=e.applySymbology??!1,this._calculateNormals=e.calculateNormals??!1,this._cesium3dTilesetOptions=e.cesium3dTilesetOptions??Y.EMPTY_OBJECT,this._layers=[],this._sublayers=[],this._data=void 0,this._extent=void 0,this._geoidDataPromise=void 0,this._geoidDataList=void 0,this._decoderTaskProcessor=void 0,this._taskProcessorReadyPromise=void 0,this._attributeStatistics=[],this._layersExtent=[]}Object.defineProperties(_s.prototype,{name:{get:function(){return this._name}},show:{get:function(){return this._show},set:function(e){if(this._show!==e){this._show=e;for(let t=0;t<this._layers.length;t++)this._layers[t]._updateVisibility()}}},geoidTiledTerrainProvider:{get:function(){return this._geoidTiledTerrainProvider}},layers:{get:function(){return this._layers}},sublayers:{get:function(){return this._sublayers}},data:{get:function(){return this._data}},extent:{get:function(){return this._extent}},resource:{get:function(){return this._resource}},showFeatures:{get:function(){return this._showFeatures}},adjustMaterialAlphaMode:{get:function(){return this._adjustMaterialAlphaMode}},applySymbology:{get:function(){return this._applySymbology}},calculateNormals:{get:function(){return this._calculateNormals}}});_s.prototype.destroy=function(){for(let e=0;e<this._layers.length;e++)l(this._layers[e]._tileset)&&this._layers[e]._tileset.destroy();return me(this)};_s.prototype.isDestroyed=function(){return!1};_s.prototype.update=function(e){for(let t=0;t<this._layers.length;t++)l(this._layers[t]._tileset)&&this._layers[t]._tileset.update(e)};_s.prototype.prePassesUpdate=function(e){for(let t=0;t<this._layers.length;t++)l(this._layers[t]._tileset)&&this._layers[t]._tileset.prePassesUpdate(e)};_s.prototype.postPassesUpdate=function(e){for(let t=0;t<this._layers.length;t++)l(this._layers[t]._tileset)&&this._layers[t]._tileset.postPassesUpdate(e)};_s.prototype.updateForPass=function(e,t){for(let n=0;n<this._layers.length;n++)l(this._layers[n]._tileset)&&this._layers[n]._tileset.updateForPass(e,t)};function TCt(e,t){let n=e.resource.getUrlComponent(),i="";return n.match(/layers\/\d/)?i=`${n}`.replace(/\/+$/,""):i=`${n}`.replace(/\/?$/,"/").concat(`layers/${t}`),i}async function nCe(e,t,n){if(t.layerType==="Building"){l(n.showFeatures)||(e._showFeatures=!0),l(n.adjustMaterialAlphaMode)||(e._adjustMaterialAlphaMode=!0),l(n.applySymbology)||(e._applySymbology=!0),l(n.calculateNormals)||(e._calculateNormals=!0);let i=TCt(e,t.id);if(l(t.sublayers)){let o=[];for(let s=0;s<t.sublayers.length;s++){let a=KA._fromData(e,i,t.sublayers[s],e);o.push(a)}let r=await Promise.all(o);for(let s=0;s<r.length;s++){let a=r[s];e._sublayers.push(a),e._layers.push(...a._i3sLayers)}}if(l(t.statisticsHRef)){let o=i.concat(`/${t.statisticsHRef}`),r=new zA(e,o);await r.load(),e._attributeStatistics.push(r)}if(l(t.fullExtent)){let o=ce.fromDegrees(t.fullExtent.xmin,t.fullExtent.ymin,t.fullExtent.xmax,t.fullExtent.ymax);e._layersExtent.push(o)}}else if(t.layerType==="3DObject"||t.layerType==="IntegratedMesh"){!l(n.calculateNormals)&&!l(t.textureSetDefinitions)&&(e._calculateNormals=!0);let i=new XS(e,t,e);e._layers.push(i),l(i._extent)&&e._layersExtent.push(i._extent)}else console.log(`${t.layerType} layer ${t.name} is skipped as not supported.`)}_s.fromUrl=async function(e,t){t=t??Y.EMPTY_OBJECT;let n=Ze.createIfNeeded(e);n.setQueryParameters({f:"pjson"},!0);let i=await _s.loadJson(n),o=new _s(t);if(o._resource=n,o._data=i,l(i.layers)){let s=[];for(let a=0;a<i.layers.length;a++){let c=nCe(o,i.layers[a],t);s.push(c)}await Promise.all(s)}else await nCe(o,i,t);o._computeExtent();let r=[];for(let s=0;s<o._layers.length;s++)r.push(o._layers[s].load(t.cesium3dTilesetOptions));return await Promise.all(r),o};_s._fetchJson=function(e){return e.fetchJson()};_s.loadJson=async function(e){let t=await _s._fetchJson(e);if(l(t.error)){if(console.error("Failed to fetch I3S ",e.url),l(t.error.message)&&console.error(t.error.message),l(t.error.details))for(let n=0;n<t.error.details.length;n++)console.log(t.error.details[n]);throw new ae(t.error)}return t};_s.prototype._loadBinary=async function(e){let t=await e.fetchArrayBuffer();if(t.byteLength>0&&new Uint8Array(t)[0]===123&&new TextDecoder().decode(t).includes("404"))throw new ae(`Failed to load binary: ${e.url}`);return t};_s.prototype._binarizeGltf=function(e){let n=new TextEncoder().encode(JSON.stringify(e)),i=new Uint8Array(n.byteLength+20),o={magic:new Uint8Array(i.buffer,0,4),version:new Uint32Array(i.buffer,4,1),length:new Uint32Array(i.buffer,8,1),chunkLength:new Uint32Array(i.buffer,12,1),chunkType:new Uint32Array(i.buffer,16,1),chunkData:new Uint8Array(i.buffer,20,n.byteLength)};return o.magic[0]=103,o.magic[1]=108,o.magic[2]=84,o.magic[3]=70,o.version[0]=2,o.length[0]=i.byteLength,o.chunkLength[0]=n.byteLength,o.chunkType[0]=1313821514,o.chunkData.set(n),i};var SCt=new U;function CCt(e,t){let n=e.tilingScheme,i=[],o={},r=e._lodCount,s=he.fromRadians(t.west,t.north),a=he.fromRadians(t.east,t.south),c=n.positionToTileXY(s,r),d=n.positionToTileXY(a,r);for(let h=c.x;h<=d.x;h++)for(let p=c.y;p<=d.y;p++){let g=U.fromElements(h,p,SCt),f=g.toString();if(!o.hasOwnProperty(f)){let y={x:g.x,y:g.y,level:r,tilingScheme:n,terrainProvider:e,positions:[]};o[f]=y,i.push(y)}}let u=[];for(let h=0;h<i.length;++h){let p=i[h],g=p.terrainProvider.requestTileGeometry(p.x,p.y,p.level);u.push(g)}return Promise.all(u).then(function(h){let p=[];for(let g=0;g<h.length;g++){let f={tilingScheme:n,x:i[g].x,y:i[g].y,level:i[g].level},y=h[g],x="Geographic";n._projection instanceof Xi&&(x="WebMercator");let S={projectionType:x,projection:n._projection,nativeExtent:n.tileXYToNativeRectangle(f.x,f.y,f.level),height:y._height,width:y._width,scale:y._structure.heightScale,offset:y._structure.heightOffset};if(y._encoding===lm.LERC){let C=iCe.default.decode(y._buffer);S.buffer=C.pixels[0]}else S.buffer=y._buffer;p.push(S)}return p})}async function VCt(e){let t=e._geoidTiledTerrainProvider;if(l(t))try{let n=await CCt(t,e._extent);e._geoidDataList=n}catch{console.log("Error retrieving Geoid Terrain tiles - no geoid conversion will be performed.")}}_s.prototype.loadGeoidData=async function(){return l(this._geoidDataPromise)?this._geoidDataPromise:(this._geoidDataPromise=VCt(this),this._geoidDataPromise)};_s.prototype._computeExtent=function(){let e;for(let t=0;t<this._layersExtent.length;t++){let n=this._layersExtent[t];l(e)?ce.union(e,n,e):e=ce.clone(n)}this._extent=e};_s.prototype.getAttributeNames=function(){let e=[];for(let t=0;t<this._attributeStatistics.length;++t)e.push(...this._attributeStatistics[t].names);return e};_s.prototype.getAttributeValues=function(e){for(let t=0;t<this._attributeStatistics.length;++t){let n=this._attributeStatistics[t]._getValues(e);if(l(n))return n}return[]};_s.prototype.filterByAttributes=function(e){let t=[];for(let n=0;n<this._layers.length;n++){let i=this._layers[n].filterByAttributes(e);t.push(i)}return Promise.all(t)};var Qh=_s;var Peo=_(T(),1);var JA={};JA.createTilesetFromIModelId=async function(e,t){let{exports:n}=await As.getExports(e);if(n.length>0&&n.every(a=>a.status===As.ExportStatus.Invalid))throw new ae(`All exports for this iModel are Invalid: ${e}`);let i=n.find(a=>a.status===As.ExportStatus.Complete);if(!l(i))return;let o=new URL(i._links.mesh.href);o.pathname=`${o.pathname}/tileset.json`;let r=o.toString(),s=new Ze({url:r});return bs.fromUrl(s,t)};JA.createTilesetForRealityDataId=async function(e,t,n,i){if(!l(n)||!l(i)){let s=await As.getRealityDataMetadata(e,t);i=s.rootDocument,n=s.type}if(![As.RealityDataType.Cesium3DTiles,As.RealityDataType.PNTS,As.RealityDataType.RealityMesh3DTiles,As.RealityDataType.Terrain3DTiles].includes(n))throw new ae(`Reality data type is not a mesh type: ${n}`);let r=await As.getRealityDataURL(e,t,i);return bs.fromUrl(r,{maximumScreenSpaceError:4})};JA.createDataSourceForRealityDataId=async function(e,t,n,i){if(!l(n)||!l(i)){let s=await As.getRealityDataMetadata(e,t);i=s.rootDocument,n=s.type}if(![As.RealityDataType.KML,As.RealityDataType.GeoJSON].includes(n))throw new ae(`Reality data type is not a data source type: ${n}`);let r=await As.getRealityDataURL(e,t,i);return n===As.RealityDataType.GeoJSON?cy.load(r):GT.load(r)};JA.loadGeospatialFeatures=async function(e,t,n){let i=n??1e4,o=`${As.apiEndpoint}geospatial-features/itwins/${e}/ogc/collections/${t}/items`,r=new Ze({url:o,headers:{Authorization:As._getAuthorizationHeader(),Accept:"application/vnd.bentley.itwin-platform.v1+json"},queryParameters:{limit:i,client:"CesiumJS"}});return cy.load(r)};var m6=JA;var Feo=_(T(),1);function oCe(){}Object.defineProperties(oCe.prototype,{color:{get:pe.throwInstantiationError},intensity:{get:pe.throwInstantiationError}});var h6=oCe;var Beo=_(T(),1);var LCt=/\/$/,rCe=new Ct('© <a href="https://www.mapbox.com/about/maps/">Mapbox</a> © <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a> <strong><a href="https://www.mapbox.com/map-feedback/">Improve this map</a></strong>');function ML(e){e=e??Y.EMPTY_OBJECT;let t=e.styleId,n=e.accessToken;this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0;let i=Ze.createIfNeeded(e.url??"https://api.mapbox.com/styles/v1/");this._styleId=t,this._accessToken=n;let o=e.tilesize??512;this._tilesize=o;let r=e.username??"mapbox";this._username=r;let s=l(e.scaleFactor)?"@2x":"",a=i.getUrlComponent();LCt.test(a)||(a+="/"),a+=`${this._username}/${t}/tiles/${this._tilesize}/{z}/{x}/{y}${s}`,i.url=a,i.setQueryParameters({access_token:n});let c;l(e.credit)?(c=e.credit,typeof c=="string"&&(c=new Ct(c))):c=rCe,this._resource=i,this._imageryProvider=new Ya({url:i,credit:c,ellipsoid:e.ellipsoid,minimumLevel:e.minimumLevel,maximumLevel:e.maximumLevel,rectangle:e.rectangle})}Object.defineProperties(ML.prototype,{url:{get:function(){return this._imageryProvider.url}},rectangle:{get:function(){return this._imageryProvider.rectangle}},tileWidth:{get:function(){return this._imageryProvider.tileWidth}},tileHeight:{get:function(){return this._imageryProvider.tileHeight}},maximumLevel:{get:function(){return this._imageryProvider.maximumLevel}},minimumLevel:{get:function(){return this._imageryProvider.minimumLevel}},tilingScheme:{get:function(){return this._imageryProvider.tilingScheme}},tileDiscardPolicy:{get:function(){return this._imageryProvider.tileDiscardPolicy}},errorEvent:{get:function(){return this._imageryProvider.errorEvent}},credit:{get:function(){return this._imageryProvider.credit}},proxy:{get:function(){return this._imageryProvider.proxy}},hasAlphaChannel:{get:function(){return this._imageryProvider.hasAlphaChannel}}});ML.prototype.getTileCredits=function(e,t,n){};ML.prototype.requestImage=function(e,t,n,i){return this._imageryProvider.requestImage(e,t,n,i)};ML.prototype.pickFeatures=function(e,t,n,i,o){return this._imageryProvider.pickFeatures(e,t,n,i,o)};ML._defaultCredit=rCe;var f6=ML;var Yeo=_(T(),1);function p6(e){}p6.prototype.isReady=function(){return!0};p6.prototype.shouldDiscardImage=function(e){return!1};var b6=p6;var eto=_(T(),1);var RCt=new Ct("MapQuest, Open Street Map and contributors, CC-BY-SA");function uB(e){e=e??Y.EMPTY_OBJECT;let t=Ze.createIfNeeded(e.url??"https://tile.openstreetmap.org/");t.appendForwardSlash(),t.url+=`{z}/{x}/{y}${e.retinaTiles?"@2x":""}.${e.fileExtension??"png"}`;let n=new rs({ellipsoid:e.ellipsoid}),i=256,o=256,r=e.minimumLevel??0,s=e.maximumLevel,a=e.rectangle??n.rectangle,c=n.positionToTileXY(ce.southwest(a),r),d=n.positionToTileXY(ce.northeast(a),r),u=(Math.abs(d.x-c.x)+1)*(Math.abs(d.y-c.y)+1),h=e.credit??RCt;typeof h=="string"&&(h=new Ct(h)),Ya.call(this,{url:t,credit:h,tilingScheme:n,tileWidth:i,tileHeight:o,minimumLevel:r,maximumLevel:s,rectangle:a})}l(Object.create)&&(uB.prototype=Object.create(Ya.prototype),uB.prototype.constructor=uB);var I0=uB;var ato=_(T(),1);var ZCt=new U(1,1);function g6(e){e=e??Y.EMPTY_OBJECT,this.mass=e.mass??1,this.position=m.clone(e.position??m.ZERO),this.velocity=m.clone(e.velocity??m.ZERO),this.life=e.life??Number.MAX_VALUE,this.image=e.image,this.startColor=D.clone(e.startColor??D.WHITE),this.endColor=D.clone(e.endColor??D.WHITE),this.startScale=e.startScale??1,this.endScale=e.endScale??1,this.imageSize=U.clone(e.imageSize??ZCt),this._age=0,this._normalizedAge=0,this._billboard=void 0}Object.defineProperties(g6.prototype,{age:{get:function(){return this._age}},normalizedAge:{get:function(){return this._normalizedAge}}});var sCe=new m;g6.prototype.update=function(e,t){return m.multiplyByScalar(this.velocity,e,sCe),m.add(this.position,sCe,this.position),l(t)&&t(this,e),this._age+=e,this.life===Number.MAX_VALUE?this._normalizedAge=0:this._normalizedAge=this._age/this.life,this._age<=this.life};var NL=g6;var dto=_(T(),1);function aCe(e){e=e??Y.EMPTY_OBJECT,this.time=e.time??0,this.minimum=e.minimum??0,this.maximum=e.maximum??50,this._complete=!1}Object.defineProperties(aCe.prototype,{complete:{get:function(){return this._complete}}});var y6=aCe;var hto=_(T(),1);function cCe(e){}cCe.prototype.emit=function(e){pe.throwInstantiationError()};var x6=cCe;var Gto=_(T(),1);var lCe=new U(1,1);function QA(e){e=e??Y.EMPTY_OBJECT,this.show=e.show??!0,this.updateCallback=e.updateCallback,this.loop=e.loop??!0,this.image=e.image??void 0;let t=e.emitter;l(t)||(t=new wA(.5)),this._emitter=t,this._bursts=e.bursts,this._modelMatrix=F.clone(e.modelMatrix??F.IDENTITY),this._emitterModelMatrix=F.clone(e.emitterModelMatrix??F.IDENTITY),this._matrixDirty=!0,this._combinedMatrix=new F,this._startColor=D.clone(e.color??e.startColor??D.WHITE),this._endColor=D.clone(e.color??e.endColor??D.WHITE),this._startScale=e.scale??e.startScale??1,this._endScale=e.scale??e.endScale??1,this._emissionRate=e.emissionRate??5,this._minimumSpeed=e.speed??e.minimumSpeed??1,this._maximumSpeed=e.speed??e.maximumSpeed??1,this._minimumParticleLife=e.particleLife??e.minimumParticleLife??5,this._maximumParticleLife=e.particleLife??e.maximumParticleLife??5,this._minimumMass=e.mass??e.minimumMass??1,this._maximumMass=e.mass??e.maximumMass??1,this._minimumImageSize=U.clone(e.imageSize??e.minimumImageSize??lCe),this._maximumImageSize=U.clone(e.imageSize??e.maximumImageSize??lCe),this._sizeInMeters=e.sizeInMeters??!1,this._lifetime=e.lifetime??Number.MAX_VALUE,this._billboardCollection=void 0,this._particles=[],this._particlePool=[],this._previousTime=void 0,this._currentTime=0,this._carryOver=0,this._complete=new be,this._isComplete=!1,this._updateParticlePool=!0,this._particleEstimate=0}Object.defineProperties(QA.prototype,{emitter:{get:function(){return this._emitter},set:function(e){this._emitter=e}},bursts:{get:function(){return this._bursts},set:function(e){this._bursts=e,this._updateParticlePool=!0}},modelMatrix:{get:function(){return this._modelMatrix},set:function(e){this._matrixDirty=this._matrixDirty||!F.equals(this._modelMatrix,e),F.clone(e,this._modelMatrix)}},emitterModelMatrix:{get:function(){return this._emitterModelMatrix},set:function(e){this._matrixDirty=this._matrixDirty||!F.equals(this._emitterModelMatrix,e),F.clone(e,this._emitterModelMatrix)}},startColor:{get:function(){return this._startColor},set:function(e){D.clone(e,this._startColor)}},endColor:{get:function(){return this._endColor},set:function(e){D.clone(e,this._endColor)}},startScale:{get:function(){return this._startScale},set:function(e){this._startScale=e}},endScale:{get:function(){return this._endScale},set:function(e){this._endScale=e}},emissionRate:{get:function(){return this._emissionRate},set:function(e){this._emissionRate=e,this._updateParticlePool=!0}},minimumSpeed:{get:function(){return this._minimumSpeed},set:function(e){this._minimumSpeed=e}},maximumSpeed:{get:function(){return this._maximumSpeed},set:function(e){this._maximumSpeed=e}},minimumParticleLife:{get:function(){return this._minimumParticleLife},set:function(e){this._minimumParticleLife=e}},maximumParticleLife:{get:function(){return this._maximumParticleLife},set:function(e){this._maximumParticleLife=e,this._updateParticlePool=!0}},minimumMass:{get:function(){return this._minimumMass},set:function(e){this._minimumMass=e}},maximumMass:{get:function(){return this._maximumMass},set:function(e){this._maximumMass=e}},minimumImageSize:{get:function(){return this._minimumImageSize},set:function(e){this._minimumImageSize=e}},maximumImageSize:{get:function(){return this._maximumImageSize},set:function(e){this._maximumImageSize=e}},sizeInMeters:{get:function(){return this._sizeInMeters},set:function(e){this._sizeInMeters=e}},lifetime:{get:function(){return this._lifetime},set:function(e){this._lifetime=e}},complete:{get:function(){return this._complete}},isComplete:{get:function(){return this._isComplete}}});function GCt(e){let t=e._emissionRate,n=e._maximumParticleLife,i=0,o=e._bursts;if(l(o)){let h=o.length;for(let p=0;p<h;++p)i+=o[p].maximum}let r=e._billboardCollection,s=e.image,a=Math.ceil(t*n+i),c=e._particles,d=e._particlePool,u=Math.max(a-c.length-d.length,0);for(let h=0;h<u;++h){let p=new NL;p._billboard=r.add({image:s,show:!1}),d.push(p)}e._particleEstimate=a}function ECt(e){let t=e._particlePool.pop();return l(t)||(t=new NL),t}function ICt(e,t){e._particlePool.push(t)}function XCt(e){let t=e._particles,n=e._particlePool,i=e._billboardCollection,o=t.length,r=n.length,s=e._particleEstimate,a=r-Math.max(s-o-r,0);for(let c=a;c<r;++c){let d=n[c];i.remove(d._billboard)}n.length=a}function WCt(e){l(e._billboard)&&(e._billboard.show=!1)}function dCe(e,t){let n=t._billboard;l(n)||(n=t._billboard=e._billboardCollection.add({image:t.image})),n.width=t.imageSize.x,n.height=t.imageSize.y,n.position=t.position,n.sizeInMeters=e.sizeInMeters,n.show=!0;let i=X.lerp(t.startColor.red,t.endColor.red,t.normalizedAge),o=X.lerp(t.startColor.green,t.endColor.green,t.normalizedAge),r=X.lerp(t.startColor.blue,t.endColor.blue,t.normalizedAge),s=X.lerp(t.startColor.alpha,t.endColor.alpha,t.normalizedAge);n.color=new D(i,o,r,s),n.scale=X.lerp(t.startScale,t.endScale,t.normalizedAge)}function PCt(e,t){t.startColor=D.clone(e._startColor,t.startColor),t.endColor=D.clone(e._endColor,t.endColor),t.startScale=e._startScale,t.endScale=e._endScale,t.image=e.image,t.life=X.randomBetween(e._minimumParticleLife,e._maximumParticleLife),t.mass=X.randomBetween(e._minimumMass,e._maximumMass),t.imageSize.x=X.randomBetween(e._minimumImageSize.x,e._maximumImageSize.x),t.imageSize.y=X.randomBetween(e._minimumImageSize.y,e._maximumImageSize.y),t._normalizedAge=0,t._age=0;let n=X.randomBetween(e._minimumSpeed,e._maximumSpeed);m.multiplyByScalar(t.velocity,n,t.velocity),e._particles.push(t)}function vCt(e,t){if(e._isComplete)return 0;t=X.mod(t,e._lifetime);let n=t*e._emissionRate,i=Math.floor(n);if(e._carryOver+=n-i,e._carryOver>1&&(i++,e._carryOver-=1),l(e.bursts)){let o=e.bursts.length;for(let r=0;r<o;r++){let s=e.bursts[r],a=e._currentTime;l(s)&&!s._complete&&a>s.time&&(i+=X.randomBetween(s.minimum,s.maximum),s._complete=!0)}}return i}var mB=new m;QA.prototype.update=function(e){if(!this.show)return;l(this._billboardCollection)||(this._billboardCollection=new Ed),this._updateParticlePool&&(GCt(this),this._updateParticlePool=!1);let t=0;this._previousTime&&(t=q.secondsDifference(e.time,this._previousTime)),t<0&&(t=0);let n=this._particles,i=this._emitter,o=this.updateCallback,r,s,a=n.length;for(r=0;r<a;++r)s=n[r],s.update(t,o)?dCe(this,s):(WCt(s),ICt(this,s),n[r]=n[a-1],--r,--a);n.length=a;let c=vCt(this,t);if(c>0&&l(i)){this._matrixDirty&&(this._combinedMatrix=F.multiply(this.modelMatrix,this.emitterModelMatrix,this._combinedMatrix),this._matrixDirty=!1);let d=this._combinedMatrix;for(r=0;r<c;r++)s=ECt(this),this._emitter.emit(s),m.add(s.position,s.velocity,mB),F.multiplyByPoint(d,mB,mB),s.position=F.multiplyByPoint(d,s.position,s.position),m.subtract(mB,s.position,s.velocity),m.normalize(s.velocity,s.velocity),PCt(this,s),dCe(this,s)}if(this._billboardCollection.update(e),this._previousTime=q.clone(e.time,this._previousTime),this._currentTime+=t,this._lifetime!==Number.MAX_VALUE&&this._currentTime>this._lifetime)if(this.loop){if(this._currentTime=X.mod(this._currentTime,this._lifetime),this.bursts){let d=this.bursts.length;for(r=0;r<d;r++)this.bursts[r]._complete=!1}}else this._isComplete=!0,this._complete.raiseEvent(this);e.frameNumber%120===0&&XCt(this)};QA.prototype.isDestroyed=function(){return!1};QA.prototype.destroy=function(){return this._billboardCollection=this._billboardCollection&&this._billboardCollection.destroy(),me(this)};var _6=QA;var Xto=_(T(),1);function uu(){pe.throwInstantiationError()}uu.computeDefaultLevelZeroMaximumGeometricError=function(e){return e.ellipsoid.maximumRadius*2*Math.PI*.25/(65*e.getNumberOfXTilesAtLevel(0))};Object.defineProperties(uu.prototype,{quadtree:{get:pe.throwInstantiationError,set:pe.throwInstantiationError},tilingScheme:{get:pe.throwInstantiationError},errorEvent:{get:pe.throwInstantiationError}});uu.prototype.update=pe.throwInstantiationError;uu.prototype.beginUpdate=pe.throwInstantiationError;uu.prototype.endUpdate=pe.throwInstantiationError;uu.prototype.getLevelMaximumGeometricError=pe.throwInstantiationError;uu.prototype.loadTile=pe.throwInstantiationError;uu.prototype.computeTileVisibility=pe.throwInstantiationError;uu.prototype.showTileThisFrame=pe.throwInstantiationError;uu.prototype.computeDistanceToTile=pe.throwInstantiationError;uu.prototype.isDestroyed=pe.throwInstantiationError;uu.prototype.destroy=pe.throwInstantiationError;var T6=uu;var wto=_(T(),1);function S6(e){e=e??1,this._radius=e??1}Object.defineProperties(S6.prototype,{radius:{get:function(){return this._radius},set:function(e){this._radius=e}}});S6.prototype.emit=function(e){let t=X.randomBetween(0,X.TWO_PI),n=X.randomBetween(0,X.PI),i=X.randomBetween(0,this._radius),o=i*Math.cos(t)*Math.sin(n),r=i*Math.sin(t)*Math.sin(n),s=i*Math.cos(n);e.position=m.fromElements(o,r,s,e.position),e.velocity=m.normalize(e.position,e.velocity)};var C6=S6;var Mto=_(T(),1);function jA(){}jA.prototype.evaluate=function(e,t){pe.throwInstantiationError()};jA.prototype.evaluateColor=function(e,t){pe.throwInstantiationError()};jA.prototype.getShaderFunction=function(e,t,n,i){pe.throwInstantiationError()};jA.prototype.getVariables=function(){pe.throwInstantiationError()};var V6=jA;var Bto=_(T(),1);function kL(e){this._ready=!1,this._provider=void 0,this._errorEvent=new be,this._readyEvent=new be,FCt(this,e)}Object.defineProperties(kL.prototype,{errorEvent:{get:function(){return this._errorEvent}},readyEvent:{get:function(){return this._readyEvent}},ready:{get:function(){return this._ready}},provider:{get:function(){return this._provider}}});kL.fromWorldTerrain=function(e){return new kL(VS(e))};kL.fromWorldBathymetry=function(e){return new kL(GA(e))};function wCt(e,t){e.numberOfListeners>0?e.raiseEvent(t):console.error(t)}async function FCt(e,t){let n;try{n=await Promise.resolve(t),e._provider=n,e._ready=!0,e._readyEvent.raiseEvent(n)}catch(i){wCt(e._errorEvent,i)}}var qA=kL;var zto=_(T(),1);function UL(){}UL.prototype.boundingVolume=void 0;UL.prototype.boundingSphere=void 0;UL.prototype.distanceToCamera=function(e){pe.throwInstantiationError()};UL.prototype.intersectPlane=function(e){pe.throwInstantiationError()};UL.prototype.createDebugVolume=function(e){pe.throwInstantiationError()};var L6=UL;var $to=_(T(),1);function $A(e){e=e??Y.EMPTY_OBJECT,this._tilingScheme=l(e.tilingScheme)?e.tilingScheme:new Hi({ellipsoid:e.ellipsoid}),this._color=e.color??D.YELLOW,this._errorEvent=new be,this._tileWidth=e.tileWidth??256,this._tileHeight=e.tileHeight??256,this._defaultAlpha=void 0,this._defaultNightAlpha=void 0,this._defaultDayAlpha=void 0,this._defaultBrightness=void 0,this._defaultContrast=void 0,this._defaultHue=void 0,this._defaultSaturation=void 0,this._defaultGamma=void 0,this._defaultMinificationFilter=void 0,this._defaultMagnificationFilter=void 0}Object.defineProperties($A.prototype,{proxy:{get:function(){}},tileWidth:{get:function(){return this._tileWidth}},tileHeight:{get:function(){return this._tileHeight}},maximumLevel:{get:function(){}},minimumLevel:{get:function(){}},tilingScheme:{get:function(){return this._tilingScheme}},rectangle:{get:function(){return this._tilingScheme.rectangle}},tileDiscardPolicy:{get:function(){}},errorEvent:{get:function(){return this._errorEvent}},credit:{get:function(){}},hasAlphaChannel:{get:function(){return!0}}});$A.prototype.getTileCredits=function(e,t,n){};$A.prototype.requestImage=function(e,t,n,i){let o=document.createElement("canvas");o.width=256,o.height=256;let r=o.getContext("2d"),s=this._color.toCssColorString();return r.strokeStyle=s,r.lineWidth=2,r.strokeRect(1,1,255,255),r.font="bold 25px Arial",r.textAlign="center",r.fillStyle=s,r.fillText(`L: ${n}`,124,86),r.fillText(`X: ${e}`,124,136),r.fillText(`Y: ${t}`,124,186),Promise.resolve(o)};$A.prototype.pickFeatures=function(e,t,n,i,o){};var eM=$A;var nno=_(T(),1);function R6(e){pe.throwInstantiationError()}R6.prototype.isReady=pe.throwInstantiationError;R6.prototype.shouldDiscardImage=pe.throwInstantiationError;var Z6=R6;var ono=_(T(),1),ACt={START:0,LOADING:1,READY:2,UPSAMPLED_ONLY:3},G6=Object.freeze(ACt);var bno=_(T(),1);function hB(e,t){this.show=!0,l(e)||(e=new Ke),this.rectangle=Ke.clone(e),l(t)||(t=zi.fromType(zi.ColorType,{color:new D(1,1,1,1)})),this.material=t,this._material=void 0,this._overlayCommand=void 0,this._rs=void 0}hB.prototype.update=function(e){if(!this.show)return;let t=this._rs;if((!l(t)||!Ke.equals(t.viewport,this.rectangle))&&(this._rs=Ue.fromCache({blending:un.ALPHA_BLEND,viewport:this.rectangle})),e.passes.render){let i=e.context;if(this._material!==this.material||!l(this._overlayCommand)){this._material=this.material,l(this._overlayCommand)&&this._overlayCommand.shaderProgram.destroy();let o=new De({sources:[this._material.shaderSource,TA]});this._overlayCommand=i.createViewportQuadCommand(o,{renderState:this._rs,uniformMap:this._material._uniforms,owner:this}),this._overlayCommand.pass=Ee.OVERLAY}this._material.update(i),this._overlayCommand.renderState=this._rs,this._overlayCommand.uniformMap=this._material._uniforms,e.commandList.push(this._overlayCommand)}};hB.prototype.isDestroyed=function(){return!1};hB.prototype.destroy=function(){return l(this._overlayCommand)&&(this._overlayCommand.shaderProgram=this._overlayCommand.shaderProgram&&this._overlayCommand.shaderProgram.destroy()),me(this)};var E6=hB;var xno=_(T(),1);function I6(){pe.throwInstantiationError()}Object.defineProperties(I6.prototype,{globalTransform:{get:pe.throwInstantiationError},shapeTransform:{get:pe.throwInstantiationError},shape:{get:pe.throwInstantiationError},minBounds:{get:pe.throwInstantiationError},maxBounds:{get:pe.throwInstantiationError},dimensions:{get:pe.throwInstantiationError},paddingBefore:{get:pe.throwInstantiationError},paddingAfter:{get:pe.throwInstantiationError},names:{get:pe.throwInstantiationError},types:{get:pe.throwInstantiationError},componentTypes:{get:pe.throwInstantiationError},minimumValues:{get:pe.throwInstantiationError},maximumValues:{get:pe.throwInstantiationError},maximumTileCount:{get:pe.throwInstantiationError},availableLevels:{get:pe.throwInstantiationError},keyframeCount:{get:pe.throwInstantiationError},timeIntervalCollection:{get:pe.throwInstantiationError}});I6.prototype.requestData=function(e){pe.throwInstantiationError()};var X6=I6;var Sno=_(T(),1);function WS(){pe.throwInstantiationError()}Object.defineProperties(WS.prototype,{orientedBoundingBox:{get:pe.throwInstantiationError},boundingSphere:{get:pe.throwInstantiationError},boundTransform:{get:pe.throwInstantiationError},shapeTransform:{get:pe.throwInstantiationError},shaderUniforms:{get:pe.throwInstantiationError},shaderDefines:{get:pe.throwInstantiationError},shaderMaximumIntersectionsLength:{get:pe.throwInstantiationError}});WS.prototype.update=pe.throwInstantiationError;WS.prototype.computeOrientedBoundingBoxForTile=pe.throwInstantiationError;WS.prototype.computeOrientedBoundingBoxForSample=pe.throwInstantiationError;WS.DefaultMinBounds=pe.throwInstantiationError;WS.DefaultMaxBounds=pe.throwInstantiationError;var W6=WS;var Mno=_(T(),1);var MCt=new D,NCt=new D,kCt=new D,UCt=new D,uCe=new se,tM=new Uint8Array(4);function mCe(e,t,n,i){let o=t.height===n.height?0:(e-t.height)/(n.height-t.height);return D.lerp(t.color,n.color,o,i)}function fB(e,t){return{height:e,color:D.clone(t)}}function hCe(e){return e=e.filter(function(t,n,i){let o=n>0,r=n<i.length-1,s=o?t.height===i[n-1].height:!0,a=r?t.height===i[n+1].height:!0;return!s||!a}),e=e.filter(function(t,n,i){let o=n>0,r=n<i.length-1,s=o?D.equals(t.color,i[n-1].color):!1,a=r?D.equals(t.color,i[n+1].color):!1;return!s||!a}),e=e.filter(function(t,n,i){let o=n>0,r=o?D.equals(t.color,i[n-1].color):!1,s=o?t.height===i[n-1].height:!0;return!r||!s}),e}function DCt(e){let t,n,i=[],o=e.length;for(t=0;t<o;t++){let r=e[t],s=r.entries,a=s.length,c=[];for(n=0;n<a;n++){let g=s[n],f=X.clamp(g.height,cd._minimumHeight,cd._maximumHeight),y=D.clone(g.color,MCt);y.red*=y.alpha,y.green*=y.alpha,y.blue*=y.alpha,c.push(fB(f,y))}let d=!0,u=!0;for(n=0;n<a-1;n++){let g=c[n+0],f=c[n+1];d=d&&g.height<=f.height,u=u&&g.height>=f.height}u?c=c.reverse():d||f0(c,function(g,f){return X.sign(g.height-f.height)});let h=r.extendDownwards??!1,p=r.extendUpwards??!1;c.length===1&&!h&&!p&&(h=!0,p=!0),h&&c.splice(0,0,fB(cd._minimumHeight,c[0].color)),p&&c.splice(c.length,0,fB(cd._maximumHeight,c[c.length-1].color)),c=hCe(c),i.push(c)}return i}function BCt(e){let t=DCt(e),n=[],i=[],o;function r(d,u){n.push(fB(d,u))}function s(d,u,h){let p=D.multiplyByScalar(h,1-u.alpha,UCt);p=D.add(p,u,p),r(d,p)}let a=t.length;for(o=0;o<a;o++){let d=t[o],u=0,h=0;i=n,n=[];let p=d.length,g=i.length;for(;u<p||h<g;){let f=u<p?d[u]:void 0,y=u>0?d[u-1]:void 0,x=u<p-1?d[u+1]:void 0,S=h<g?i[h]:void 0,C=h>0?i[h-1]:void 0,V=h<g-1?i[h+1]:void 0;if(l(f)&&l(S)&&f.height===S.height){let L=l(V)&&S.height===V.height,Z=!l(C),E=!l(V),P=l(x)&&f.height===x.height,W=!l(y),v=!l(x);L?P?(s(f.height,f.color,S.color),s(f.height,x.color,V.color)):W?(r(f.height,S.color),s(f.height,f.color,V.color)):v?(s(f.height,f.color,S.color),r(f.height,V.color)):(s(f.height,f.color,S.color),s(f.height,f.color,V.color)):Z?P?(r(f.height,f.color),s(f.height,x.color,S.color)):v?(r(f.height,f.color),r(f.height,S.color)):(W||r(f.height,f.color),s(f.height,f.color,S.color)):E?P?(s(f.height,f.color,S.color),r(f.height,x.color)):W?(r(f.height,S.color),r(f.height,f.color)):v?s(f.height,f.color,S.color):(s(f.height,f.color,S.color),r(f.height,f.color)):P?(s(f.height,f.color,S.color),s(f.height,x.color,S.color)):W?(r(f.height,S.color),s(f.height,f.color,S.color)):v?(s(f.height,f.color,S.color),r(f.height,S.color)):s(f.height,f.color,S.color),u+=P?2:1,h+=L?2:1}else if(l(f)&&l(S)&&l(C)&&f.height<S.height){let L=mCe(f.height,C,S,kCt);l(y)?l(x)?s(f.height,f.color,L):(s(f.height,f.color,L),r(f.height,L)):(r(f.height,L),s(f.height,f.color,L)),u++}else if(l(S)&&l(f)&&l(y)&&S.height<f.height){let L=mCe(S.height,y,f,NCt);l(C)?l(V)?s(S.height,L,S.color):(s(S.height,L,S.color),r(S.height,L)):(r(S.height,L),s(S.height,L,S.color)),h++}else l(f)&&(!l(S)||f.height<S.height)?(l(S)&&!l(C)&&!l(x)?(r(f.height,f.color),r(f.height,cd._emptyColor),r(S.height,cd._emptyColor)):(!l(S)&&l(C)&&!l(y)&&(r(C.height,cd._emptyColor),r(f.height,cd._emptyColor)),r(f.height,f.color)),u++):l(S)&&(!l(f)||S.height<f.height)&&(r(S.height,S.color),h++)}}return hCe(n)}function cd(e){let{scene:t,layers:n}=e??Y.EMPTY_OBJECT,{context:i}=t,o=BCt(n),r=o.length,s,a,c;if(!cd._useFloatTexture(i)){a=je.UNSIGNED_BYTE,c=it.RGBA,s=new Uint8Array(r*4);for(let g=0;g<r;g++)se.packFloat(o[g].height,uCe),se.pack(uCe,s,g*4)}else{a=je.FLOAT,c=i.webgl2?it.RED:it.LUMINANCE,s=new Float32Array(r);for(let g=0;g<r;g++)s[g]=o[g].height}let u=vt.create({context:i,pixelFormat:c,pixelDatatype:a,source:{arrayBufferView:s,width:r,height:1},sampler:new qt({wrapS:Vn.CLAMP_TO_EDGE,wrapT:Vn.CLAMP_TO_EDGE,minificationFilter:jt.NEAREST,magnificationFilter:hi.NEAREST})}),h=new Uint8Array(r*4);for(let g=0;g<r;g++)o[g].color.toBytes(tM),h[g*4+0]=tM[0],h[g*4+1]=tM[1],h[g*4+2]=tM[2],h[g*4+3]=tM[3];let p=vt.create({context:i,pixelFormat:it.RGBA,pixelDatatype:je.UNSIGNED_BYTE,source:{arrayBufferView:h,width:r,height:1},sampler:new qt({wrapS:Vn.CLAMP_TO_EDGE,wrapT:Vn.CLAMP_TO_EDGE,minificationFilter:jt.LINEAR,magnificationFilter:hi.LINEAR})});return zi.fromType("ElevationBand",{heights:u,colors:p})}cd._useFloatTexture=function(e){return e.floatingPointTexture};cd._maximumHeight=5906376425472;cd._minimumHeight=-5906376425472;cd._emptyColor=new D(0,0,0,0);var P6=cd;var Hno=_(T(),1);async function OCt(e,t){t=t??{},t.cacheBytes=t.cacheBytes??1536*1024*1024,t.maximumCacheOverflowBytes=t.maximumCacheOverflowBytes??1024*1024*1024,t.enableCollision=t.enableCollision??!0,e=e??Y.EMPTY_OBJECT,e.onlyUsingWithGoogleGeocoder||_t("google-tiles-with-google-geocoder","Only the Google geocoder can be used with Google Photorealistic 3D Tiles. Set the `geocode` property of Viewer constructor options. You can set additionalOptions.onlyUsingWithGoogleGeocoder to hide this warning once you have configured the geocoder.");let n=e.key??TS.defaultApiKey;if(!l(n))return YCt(t);let i,o=TS.getDefaultCredit();l(o)&&(i=[o]);let r=new Ze({url:`${TS.mapTilesApiEndpoint}3dtiles/root.json`,queryParameters:{key:n},credits:i});return bs.fromUrl(r,t)}var fCe={};async function YCt(e){let i=fCe[2275207];l(i)||(i=_d.fromAssetId(2275207),fCe[2275207]=i);let o=await i;return bs.fromUrl(o,e)}var v6=OCt;var eio=_(T(),1);async function zCt(e){let t=await bs.fromIonAssetId(96188,e);e=e??Y.EMPTY_OBJECT;let n=e.style;if(!l(n)){let i=(e.defaultColor??D.WHITE).toCssColorString();n=new RS({color:`Boolean(\${feature['cesium#color']}) ? color(\${feature['cesium#color']}) : ${i}`})}return t.style=n,t}var w6=zCt;var dio=_(T(),1);function HCt(e){e=e??Y.EMPTY_OBJECT;let t=[],n=e.geometry;(!l(n.attributes)||!l(n.primitiveType))&&(n=n.constructor.createGeometry(n));let i=n.attributes,o=F.clone(e.modelMatrix??F.IDENTITY),r=e.length??1e4;if(l(i.normal)&&t.push(new Et({geometry:Fn.createLineSegmentsForVectors(n,"normal",r),attributes:{color:new Yt(1,0,0,1)},modelMatrix:o})),l(i.tangent)&&t.push(new Et({geometry:Fn.createLineSegmentsForVectors(n,"tangent",r),attributes:{color:new Yt(0,1,0,1)},modelMatrix:o})),l(i.bitangent)&&t.push(new Et({geometry:Fn.createLineSegmentsForVectors(n,"bitangent",r),attributes:{color:new Yt(0,0,1,1)},modelMatrix:o})),t.length>0)return new In({asynchronous:!1,geometryInstances:t,appearance:new dn({flat:!0,translucent:!1})})}var F6=HCt;var mio=_(T(),1),A6=`uniform sampler2D u_depthTexture; in vec2 v_textureCoordinates; void main() { float z_window = czm_unpackDepth(texture(u_depthTexture, v_textureCoordinates)); z_window = czm_reverseLogDepth(z_window); float n_range = czm_depthRange.near; float f_range = czm_depthRange.far; float z_ndc = (2.0 * z_window - n_range - f_range) / (f_range - n_range); float scale = pow(z_ndc * 0.5 + 0.5, 8.0); out_FragColor = vec4(mix(vec3(0.0), vec3(1.0), scale), 1.0); } `;var _io=_(T(),1);function KCt(e){e=e??Y.EMPTY_OBJECT,this.typedArray=e.typedArray,this.width=e.width,this.height=e.height,this.pixelFormat=e.pixelFormat??it.RGBA,this.pixelDatatype=e.pixelDatatype??je.UNSIGNED_BYTE;let t=e.url;typeof t=="string"&&(t=Ze.createIfNeeded(t)),this.resource=t;let i=e.repeat??!0?Vn.REPEAT:Vn.CLAMP_TO_EDGE;this.sampler=new qt({wrapS:i,wrapT:i,minificationFilter:e.minificationFilter,magnificationFilter:e.magnificationFilter,maximumAnisotropy:e.maximumAnisotropy})}var M6=KCt;var Sio=_(T(),1),JCt={FLOAT:"float",VEC2:"vec2",VEC3:"vec3",VEC4:"vec4",MAT2:"mat2",MAT3:"mat3",MAT4:"mat4"},N6=Object.freeze(JCt);var Vio=_(T(),1),QCt={SIGX:"SIGX",SIGY:"SIGY",SIGZ:"SIGZ",VARX:"VARX",VARY:"VARY",VARZ:"VARZ",SIGR:"VARZ"},k6=Object.freeze(QCt);var Zio=_(T(),1);function jCt(e){async function t({data:i}){let o=[],r={id:i.id,result:void 0,error:void 0};self.CESIUM_BASE_URL=i.baseUrl;try{let s=await e(i.parameters,o);r.result=s}catch(s){s instanceof Error?r.error={name:s.name,message:s.message,stack:s.stack}:r.error=s}i.canTransferArrayBuffer||(o.length=0);try{postMessage(r,o)}catch(s){r.result=void 0,r.error=`postMessage failed with error: ${jf(s)} with responseMessage: ${JSON.stringify(r)}`,postMessage(r)}}function n(i){postMessage({id:i.data?.id,error:`postMessage failed with error: ${JSON.stringify(i)}`})}return self.onmessage=t,self.onmessageerror=n,self}var U6=jCt;globalThis.CESIUM_VERSION="1.128";var uEo=_(T(),1);var D1o=_(T(),1);var M1o=_(T(),1);var E1o=_(T(),1),nM;typeof ko<"u"&&(nM=ko);(function(){/*! * Knockout JavaScript library v3.5.1 * (c) The Knockout.js team - http://knockoutjs.com/ * License: MIT (http://www.opensource.org/licenses/mit-license.php) */(function(){(function(e){var t=this||(0,eval)("this"),n=t.document,i=t.navigator,o=t.jQuery,r=t.JSON;o||typeof jQuery>"u"||(o=jQuery),function(s){s(t.ko={})}(function(s,a){function c(b,R){return b===null||typeof b in y?b===R:!1}function d(b,R){var G;return function(){G||(G=f.a.setTimeout(function(){G=e,b()},R))}}function u(b,R){var G;return function(){clearTimeout(G),G=f.a.setTimeout(b,R)}}function h(b,R){R&&R!=="change"?R==="beforeChange"?this.pc(b):this.gb(b,R):this.qc(b)}function p(b,R){R!==null&&R.s&&R.s()}function g(b,R){var G=this.qd,I=G[L];I.ra||(this.Qb&&this.mb[R]?(G.uc(R,b,this.mb[R]),this.mb[R]=null,--this.Qb):I.I[R]||G.uc(R,b,I.J?{da:b}:G.$c(b)),b.Ja&&b.gd())}var f=typeof s<"u"?s:{};f.b=function(b,R){for(var G=b.split("."),I=f,w=0;w<G.length-1;w++)I=I[G[w]];I[G[G.length-1]]=R},f.L=function(b,R,G){b[R]=G},f.version="3.5.1",f.b("version",f.version),f.options={deferUpdates:!1,useOnlyNativeEvents:!1,foreachHidesDestroyed:!1},f.a=function(){function b(H,j){for(var ee in H)w.call(H,ee)&&j(ee,H[ee])}function R(H,j){if(j)for(var ee in j)w.call(j,ee)&&(H[ee]=j[ee]);return H}function G(H,j){return H.__proto__=j,H}function I(H,j,ee,fe){var Te=H[j].match(K)||[];f.a.D(ee.match(K),function(de){f.a.Na(Te,de,fe)}),H[j]=Te.join(" ")}var w=Object.prototype.hasOwnProperty,M={__proto__:[]}instanceof Array,B=typeof Symbol=="function",k={},O={};k[i&&/Firefox\/2/i.test(i.userAgent)?"KeyboardEvent":"UIEvents"]=["keyup","keydown","keypress"],k.MouseEvents="click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave".split(" "),b(k,function(H,j){if(j.length)for(var ee=0,fe=j.length;ee<fe;ee++)O[j[ee]]=H});var N={propertychange:!0},z=n&&function(){for(var H=3,j=n.createElement("div"),ee=j.getElementsByTagName("i");j.innerHTML="<!--[if gt IE "+ ++H+"]><i></i><![endif]-->",ee[0];);return 4<H?H:e}(),K=/\S+/g,te;return{Jc:["authenticity_token",/^__RequestVerificationToken(_.*)?$/],D:function(H,j,ee){for(var fe=0,Te=H.length;fe<Te;fe++)j.call(ee,H[fe],fe,H)},A:typeof Array.prototype.indexOf=="function"?function(H,j){return Array.prototype.indexOf.call(H,j)}:function(H,j){for(var ee=0,fe=H.length;ee<fe;ee++)if(H[ee]===j)return ee;return-1},Lb:function(H,j,ee){for(var fe=0,Te=H.length;fe<Te;fe++)if(j.call(ee,H[fe],fe,H))return H[fe];return e},Pa:function(H,j){var ee=f.a.A(H,j);0<ee?H.splice(ee,1):ee===0&&H.shift()},wc:function(H){var j=[];return H&&f.a.D(H,function(ee){0>f.a.A(j,ee)&&j.push(ee)}),j},Mb:function(H,j,ee){var fe=[];if(H)for(var Te=0,de=H.length;Te<de;Te++)fe.push(j.call(ee,H[Te],Te));return fe},jb:function(H,j,ee){var fe=[];if(H)for(var Te=0,de=H.length;Te<de;Te++)j.call(ee,H[Te],Te)&&fe.push(H[Te]);return fe},Nb:function(H,j){if(j instanceof Array)H.push.apply(H,j);else for(var ee=0,fe=j.length;ee<fe;ee++)H.push(j[ee]);return H},Na:function(H,j,ee){var fe=f.a.A(f.a.bc(H),j);0>fe?ee&&H.push(j):ee||H.splice(fe,1)},Ba:M,extend:R,setPrototypeOf:G,Ab:M?G:R,P:b,Ga:function(H,j,ee){if(!H)return H;var fe={},Te;for(Te in H)w.call(H,Te)&&(fe[Te]=j.call(ee,H[Te],Te,H));return fe},Tb:function(H){for(;H.firstChild;)f.removeNode(H.firstChild)},Yb:function(H){H=f.a.la(H);for(var j=(H[0]&&H[0].ownerDocument||n).createElement("div"),ee=0,fe=H.length;ee<fe;ee++)j.appendChild(f.oa(H[ee]));return j},Ca:function(H,j){for(var ee=0,fe=H.length,Te=[];ee<fe;ee++){var de=H[ee].cloneNode(!0);Te.push(j?f.oa(de):de)}return Te},va:function(H,j){if(f.a.Tb(H),j)for(var ee=0,fe=j.length;ee<fe;ee++)H.appendChild(j[ee])},Xc:function(H,j){var ee=H.nodeType?[H]:H;if(0<ee.length){for(var fe=ee[0],Te=fe.parentNode,de=0,xe=j.length;de<xe;de++)Te.insertBefore(j[de],fe);for(de=0,xe=ee.length;de<xe;de++)f.removeNode(ee[de])}},Ua:function(H,j){if(H.length){for(j=j.nodeType===8&&j.parentNode||j;H.length&&H[0].parentNode!==j;)H.splice(0,1);for(;1<H.length&&H[H.length-1].parentNode!==j;)H.length--;if(1<H.length){var ee=H[0],fe=H[H.length-1];for(H.length=0;ee!==fe;)H.push(ee),ee=ee.nextSibling;H.push(fe)}}return H},Zc:function(H,j){7>z?H.setAttribute("selected",j):H.selected=j},Db:function(H){return H===null||H===e?"":H.trim?H.trim():H.toString().replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")},Ud:function(H,j){return H=H||"",j.length>H.length?!1:H.substring(0,j.length)===j},vd:function(H,j){if(H===j)return!0;if(H.nodeType===11)return!1;if(j.contains)return j.contains(H.nodeType!==1?H.parentNode:H);if(j.compareDocumentPosition)return(j.compareDocumentPosition(H)&16)==16;for(;H&&H!=j;)H=H.parentNode;return!!H},Sb:function(H){return f.a.vd(H,H.ownerDocument.documentElement)},kd:function(H){return!!f.a.Lb(H,f.a.Sb)},R:function(H){return H&&H.tagName&&H.tagName.toLowerCase()},Ac:function(H){return f.onError?function(){try{return H.apply(this,arguments)}catch(j){throw f.onError&&f.onError(j),j}}:H},setTimeout:function(H,j){return setTimeout(f.a.Ac(H),j)},Gc:function(H){setTimeout(function(){throw f.onError&&f.onError(H),H},0)},B:function(H,j,ee){var fe=f.a.Ac(ee);if(ee=N[j],f.options.useOnlyNativeEvents||ee||!o)if(ee||typeof H.addEventListener!="function")if(typeof H.attachEvent<"u"){var Te=function(xe){fe.call(H,xe)},de="on"+j;H.attachEvent(de,Te),f.a.K.za(H,function(){H.detachEvent(de,Te)})}else throw Error("Browser doesn't support addEventListener or attachEvent");else H.addEventListener(j,fe,!1);else te||(te=typeof o(H).on=="function"?"on":"bind"),o(H)[te](j,fe)},Fb:function(H,j){if(!H||!H.nodeType)throw Error("element must be a DOM node when calling triggerEvent");var ee;if(f.a.R(H)==="input"&&H.type&&j.toLowerCase()=="click"?(ee=H.type,ee=ee=="checkbox"||ee=="radio"):ee=!1,f.options.useOnlyNativeEvents||!o||ee)if(typeof n.createEvent=="function")if(typeof H.dispatchEvent=="function")ee=n.createEvent(O[j]||"HTMLEvents"),ee.initEvent(j,!0,!0,t,0,0,0,0,0,!1,!1,!1,!1,0,H),H.dispatchEvent(ee);else throw Error("The supplied element doesn't support dispatchEvent");else if(ee&&H.click)H.click();else if(typeof H.fireEvent<"u")H.fireEvent("on"+j);else throw Error("Browser doesn't support triggering events");else o(H).trigger(j)},f:function(H){return f.O(H)?H():H},bc:function(H){return f.O(H)?H.v():H},Eb:function(H,j,ee){var fe;j&&(typeof H.classList=="object"?(fe=H.classList[ee?"add":"remove"],f.a.D(j.match(K),function(Te){fe.call(H.classList,Te)})):typeof H.className.baseVal=="string"?I(H.className,"baseVal",j,ee):I(H,"className",j,ee))},Bb:function(H,j){var ee=f.a.f(j);(ee===null||ee===e)&&(ee="");var fe=f.h.firstChild(H);!fe||fe.nodeType!=3||f.h.nextSibling(fe)?f.h.va(H,[H.ownerDocument.createTextNode(ee)]):fe.data=ee,f.a.Ad(H)},Yc:function(H,j){if(H.name=j,7>=z)try{var ee=H.name.replace(/[&<>'"]/g,function(fe){return"&#"+fe.charCodeAt(0)+";"});H.mergeAttributes(n.createElement("<input name='"+ee+"'/>"),!1)}catch{}},Ad:function(H){9<=z&&(H=H.nodeType==1?H:H.parentNode,H.style&&(H.style.zoom=H.style.zoom))},wd:function(H){if(z){var j=H.style.width;H.style.width=0,H.style.width=j}},Pd:function(H,j){H=f.a.f(H),j=f.a.f(j);for(var ee=[],fe=H;fe<=j;fe++)ee.push(fe);return ee},la:function(H){for(var j=[],ee=0,fe=H.length;ee<fe;ee++)j.push(H[ee]);return j},Da:function(H){return B?Symbol(H):H},Zd:z===6,$d:z===7,W:z,Lc:function(H,j){for(var ee=f.a.la(H.getElementsByTagName("input")).concat(f.a.la(H.getElementsByTagName("textarea"))),fe=typeof j=="string"?function(xe){return xe.name===j}:function(xe){return j.test(xe.name)},Te=[],de=ee.length-1;0<=de;de--)fe(ee[de])&&Te.push(ee[de]);return Te},Nd:function(H){return typeof H=="string"&&(H=f.a.Db(H))?r&&r.parse?r.parse(H):new Function("return "+H)():null},hc:function(H,j,ee){if(!r||!r.stringify)throw Error("Cannot find JSON.stringify(). Some browsers (e.g., IE < 8) don't support it natively, but you can overcome this by adding a script reference to json2.js, downloadable from http://www.json.org/json2.js");return r.stringify(f.a.f(H),j,ee)},Od:function(H,j,ee){ee=ee||{};var fe=ee.params||{},Te=ee.includeFields||this.Jc,de=H;if(typeof H=="object"&&f.a.R(H)==="form")for(var de=H.action,xe=Te.length-1;0<=xe;xe--)for(var Ce=f.a.Lc(H,Te[xe]),Ie=Ce.length-1;0<=Ie;Ie--)fe[Ce[Ie].name]=Ce[Ie].value;j=f.a.f(j);var Le=n.createElement("form");Le.style.display="none",Le.action=de,Le.method="post";for(var Ne in j)H=n.createElement("input"),H.type="hidden",H.name=Ne,H.value=f.a.hc(f.a.f(j[Ne])),Le.appendChild(H);b(fe,function(Oe,qe){var Rt=n.createElement("input");Rt.type="hidden",Rt.name=Oe,Rt.value=qe,Le.appendChild(Rt)}),n.body.appendChild(Le),ee.submitter?ee.submitter(Le):Le.submit(),setTimeout(function(){Le.parentNode.removeChild(Le)},0)}}}(),f.b("utils",f.a),f.b("utils.arrayForEach",f.a.D),f.b("utils.arrayFirst",f.a.Lb),f.b("utils.arrayFilter",f.a.jb),f.b("utils.arrayGetDistinctValues",f.a.wc),f.b("utils.arrayIndexOf",f.a.A),f.b("utils.arrayMap",f.a.Mb),f.b("utils.arrayPushAll",f.a.Nb),f.b("utils.arrayRemoveItem",f.a.Pa),f.b("utils.cloneNodes",f.a.Ca),f.b("utils.createSymbolOrString",f.a.Da),f.b("utils.extend",f.a.extend),f.b("utils.fieldsIncludedWithJsonPost",f.a.Jc),f.b("utils.getFormFields",f.a.Lc),f.b("utils.objectMap",f.a.Ga),f.b("utils.peekObservable",f.a.bc),f.b("utils.postJson",f.a.Od),f.b("utils.parseJson",f.a.Nd),f.b("utils.registerEventHandler",f.a.B),f.b("utils.stringifyJson",f.a.hc),f.b("utils.range",f.a.Pd),f.b("utils.toggleDomNodeCssClass",f.a.Eb),f.b("utils.triggerEvent",f.a.Fb),f.b("utils.unwrapObservable",f.a.f),f.b("utils.objectForEach",f.a.P),f.b("utils.addOrRemoveItem",f.a.Na),f.b("utils.setTextContent",f.a.Bb),f.b("unwrap",f.a.f),Function.prototype.bind||(Function.prototype.bind=function(b){var R=this;if(arguments.length===1)return function(){return R.apply(b,arguments)};var G=Array.prototype.slice.call(arguments,1);return function(){var I=G.slice(0);return I.push.apply(I,arguments),R.apply(b,I)}}),f.a.g=new function(){var b=0,R="__ko__"+new Date().getTime(),G={},I,w;return f.a.W?(I=function(M,B){var k=M[R];if(!k||k==="null"||!G[k]){if(!B)return e;k=M[R]="ko"+b++,G[k]={}}return G[k]},w=function(M){var B=M[R];return B?(delete G[B],M[R]=null,!0):!1}):(I=function(M,B){var k=M[R];return!k&&B&&(k=M[R]={}),k},w=function(M){return M[R]?(delete M[R],!0):!1}),{get:function(M,B){var k=I(M,!1);return k&&k[B]},set:function(M,B,k){(M=I(M,k!==e))&&(M[B]=k)},Ub:function(M,B,k){return M=I(M,!0),M[B]||(M[B]=k)},clear:w,Z:function(){return b+++R}}},f.b("utils.domData",f.a.g),f.b("utils.domData.clear",f.a.g.clear),f.a.K=new function(){function b(B,k){var O=f.a.g.get(B,I);return O===e&&k&&(O=[],f.a.g.set(B,I,O)),O}function R(B){var k=b(B,!1);if(k)for(var k=k.slice(0),O=0;O<k.length;O++)k[O](B);f.a.g.clear(B),f.a.K.cleanExternalData(B),M[B.nodeType]&&G(B.childNodes,!0)}function G(B,k){for(var O=[],N,z=0;z<B.length;z++)if((!k||B[z].nodeType===8)&&(R(O[O.length]=N=B[z]),B[z]!==N))for(;z--&&f.a.A(O,B[z])==-1;);}var I=f.a.g.Z(),w={1:!0,8:!0,9:!0},M={1:!0,9:!0};return{za:function(B,k){if(typeof k!="function")throw Error("Callback must be a function");b(B,!0).push(k)},yb:function(B,k){var O=b(B,!1);O&&(f.a.Pa(O,k),O.length==0&&f.a.g.set(B,I,e))},oa:function(B){return f.u.G(function(){w[B.nodeType]&&(R(B),M[B.nodeType]&&G(B.getElementsByTagName("*")))}),B},removeNode:function(B){f.oa(B),B.parentNode&&B.parentNode.removeChild(B)},cleanExternalData:function(B){o&&typeof o.cleanData=="function"&&o.cleanData([B])}}},f.oa=f.a.K.oa,f.removeNode=f.a.K.removeNode,f.b("cleanNode",f.oa),f.b("removeNode",f.removeNode),f.b("utils.domNodeDisposal",f.a.K),f.b("utils.domNodeDisposal.addDisposeCallback",f.a.K.za),f.b("utils.domNodeDisposal.removeDisposeCallback",f.a.K.yb),function(){var b=[0,"",""],R=[1,"<table>","</table>"],G=[3,"<table><tbody><tr>","</tr></tbody></table>"],I=[1,"<select multiple='multiple'>","</select>"],w={thead:R,tbody:R,tfoot:R,tr:[2,"<table><tbody>","</tbody></table>"],td:G,th:G,option:I,optgroup:I},M=8>=f.a.W;f.a.ua=function(B,k){var O;if(o){if(o.parseHTML)O=o.parseHTML(B,k)||[];else if((O=o.clean([B],k))&&O[0]){for(var N=O[0];N.parentNode&&N.parentNode.nodeType!==11;)N=N.parentNode;N.parentNode&&N.parentNode.removeChild(N)}}else{(O=k)||(O=n);var N=O.parentWindow||O.defaultView||t,z=f.a.Db(B).toLowerCase(),K=O.createElement("div"),te;for(te=(z=z.match(/^(?:\x3c!--.*?--\x3e\s*?)*?<([a-z]+)[\s>]/))&&w[z[1]]||b,z=te[0],te="ignored<div>"+te[1]+B+te[2]+"</div>",typeof N.innerShiv=="function"?K.appendChild(N.innerShiv(te)):(M&&O.body.appendChild(K),K.innerHTML=te,M&&K.parentNode.removeChild(K));z--;)K=K.lastChild;O=f.a.la(K.lastChild.childNodes)}return O},f.a.Md=function(B,k){var O=f.a.ua(B,k);return O.length&&O[0].parentElement||f.a.Yb(O)},f.a.fc=function(B,k){if(f.a.Tb(B),k=f.a.f(k),k!==null&&k!==e)if(typeof k!="string"&&(k=k.toString()),o)o(B).html(k);else for(var O=f.a.ua(k,B.ownerDocument),N=0;N<O.length;N++)B.appendChild(O[N])}}(),f.b("utils.parseHtmlFragment",f.a.ua),f.b("utils.setHtml",f.a.fc),f.aa=function(){function b(G,I){if(G){if(G.nodeType==8){var w=f.aa.Uc(G.nodeValue);w!=null&&I.push({ud:G,Kd:w})}else if(G.nodeType==1)for(var w=0,M=G.childNodes,B=M.length;w<B;w++)b(M[w],I)}}var R={};return{Xb:function(G){if(typeof G!="function")throw Error("You can only pass a function to ko.memoization.memoize()");var I=(4294967296*(1+Math.random())|0).toString(16).substring(1)+(4294967296*(1+Math.random())|0).toString(16).substring(1);return R[I]=G,"<!--[ko_memo:"+I+"]-->"},bd:function(G,I){var w=R[G];if(w===e)throw Error("Couldn't find any memo with ID "+G+". Perhaps it's already been unmemoized.");try{return w.apply(null,I||[]),!0}finally{delete R[G]}},cd:function(G,I){var w=[];b(G,w);for(var M=0,B=w.length;M<B;M++){var k=w[M].ud,O=[k];I&&f.a.Nb(O,I),f.aa.bd(w[M].Kd,O),k.nodeValue="",k.parentNode&&k.parentNode.removeChild(k)}},Uc:function(G){return(G=G.match(/^\[ko_memo\:(.*?)\]$/))?G[1]:null}}}(),f.b("memoization",f.aa),f.b("memoization.memoize",f.aa.Xb),f.b("memoization.unmemoize",f.aa.bd),f.b("memoization.parseMemoText",f.aa.Uc),f.b("memoization.unmemoizeDomNodeAndDescendants",f.aa.cd),f.na=function(){function b(){if(w){for(var k=w,O=0,N;B<w;)if(N=I[B++]){if(B>k){if(5e3<=++O){B=w,f.a.Gc(Error("'Too much recursion' after processing "+O+" task groups."));break}k=w}try{N()}catch(z){f.a.Gc(z)}}}}function R(){b(),B=w=I.length=0}var G,I=[],w=0,M=1,B=0;return t.MutationObserver?G=function(k){var O=n.createElement("div");return new MutationObserver(k).observe(O,{attributes:!0}),function(){O.classList.toggle("foo")}}(R):G=n&&"onreadystatechange"in n.createElement("script")?function(k){var O=n.createElement("script");O.onreadystatechange=function(){O.onreadystatechange=null,n.documentElement.removeChild(O),O=null,k()},n.documentElement.appendChild(O)}:function(k){setTimeout(k,0)},{scheduler:G,zb:function(k){return w||f.na.scheduler(R),I[w++]=k,M++},cancel:function(k){k=k-(M-w),k>=B&&k<w&&(I[k]=null)},resetForTesting:function(){var k=w-B;return B=w=I.length=0,k},Sd:b}}(),f.b("tasks",f.na),f.b("tasks.schedule",f.na.zb),f.b("tasks.runEarly",f.na.Sd),f.Ta={throttle:function(b,R){b.throttleEvaluation=R;var G=null;return f.$({read:b,write:function(I){clearTimeout(G),G=f.a.setTimeout(function(){b(I)},R)}})},rateLimit:function(b,R){var G,I,w;typeof R=="number"?G=R:(G=R.timeout,I=R.method),b.Hb=!1,w=typeof I=="function"?I:I=="notifyWhenChangesStop"?u:d,b.ub(function(M){return w(M,G,R)})},deferred:function(b,R){if(R!==!0)throw Error("The 'deferred' extender only accepts the value 'true', because it is not supported to turn deferral off once enabled.");b.Hb||(b.Hb=!0,b.ub(function(G){var I,w=!1;return function(){if(!w){f.na.cancel(I),I=f.na.zb(G);try{w=!0,b.notifySubscribers(e,"dirty")}finally{w=!1}}}}))},notify:function(b,R){b.equalityComparer=R=="always"?null:c}};var y={undefined:1,boolean:1,number:1,string:1};f.b("extenders",f.Ta),f.ic=function(b,R,G){this.da=b,this.lc=R,this.mc=G,this.Ib=!1,this.fb=this.Jb=null,f.L(this,"dispose",this.s),f.L(this,"disposeWhenNodeIsRemoved",this.l)},f.ic.prototype.s=function(){this.Ib||(this.fb&&f.a.K.yb(this.Jb,this.fb),this.Ib=!0,this.mc(),this.da=this.lc=this.mc=this.Jb=this.fb=null)},f.ic.prototype.l=function(b){this.Jb=b,f.a.K.za(b,this.fb=this.s.bind(this))},f.T=function(){f.a.Ab(this,x),x.qb(this)};var x={qb:function(b){b.U={change:[]},b.sc=1},subscribe:function(b,R,G){var I=this;G=G||"change";var w=new f.ic(I,R?b.bind(R):b,function(){f.a.Pa(I.U[G],w),I.hb&&I.hb(G)});return I.Qa&&I.Qa(G),I.U[G]||(I.U[G]=[]),I.U[G].push(w),w},notifySubscribers:function(b,R){if(R=R||"change",R==="change"&&this.Gb(),this.Wa(R)){var G=R==="change"&&this.ed||this.U[R].slice(0);try{f.u.xc();for(var I=0,w;w=G[I];++I)w.Ib||w.lc(b)}finally{f.u.end()}}},ob:function(){return this.sc},Dd:function(b){return this.ob()!==b},Gb:function(){++this.sc},ub:function(b){var R=this,G=f.O(R),I,w,M,B,k;R.gb||(R.gb=R.notifySubscribers,R.notifySubscribers=h);var O=b(function(){R.Ja=!1,G&&B===R&&(B=R.nc?R.nc():R());var N=w||k&&R.sb(M,B);k=w=I=!1,N&&R.gb(M=B)});R.qc=function(N,z){z&&R.Ja||(k=!z),R.ed=R.U.change.slice(0),R.Ja=I=!0,B=N,O()},R.pc=function(N){I||(M=N,R.gb(N,"beforeChange"))},R.rc=function(){k=!0},R.gd=function(){R.sb(M,R.v(!0))&&(w=!0)}},Wa:function(b){return this.U[b]&&this.U[b].length},Bd:function(b){if(b)return this.U[b]&&this.U[b].length||0;var R=0;return f.a.P(this.U,function(G,I){G!=="dirty"&&(R+=I.length)}),R},sb:function(b,R){return!this.equalityComparer||!this.equalityComparer(b,R)},toString:function(){return"[object Object]"},extend:function(b){var R=this;return b&&f.a.P(b,function(G,I){var w=f.Ta[G];typeof w=="function"&&(R=w(R,I)||R)}),R}};f.L(x,"init",x.qb),f.L(x,"subscribe",x.subscribe),f.L(x,"extend",x.extend),f.L(x,"getSubscriptionsCount",x.Bd),f.a.Ba&&f.a.setPrototypeOf(x,Function.prototype),f.T.fn=x,f.Qc=function(b){return b!=null&&typeof b.subscribe=="function"&&typeof b.notifySubscribers=="function"},f.b("subscribable",f.T),f.b("isSubscribable",f.Qc),f.S=f.u=function(){function b(M){G.push(I),I=M}function R(){I=G.pop()}var G=[],I,w=0;return{xc:b,end:R,cc:function(M){if(I){if(!f.Qc(M))throw Error("Only subscribable things can act as dependencies");I.od.call(I.pd,M,M.fd||(M.fd=++w))}},G:function(M,B,k){try{return b(),M.apply(B,k||[])}finally{R()}},qa:function(){if(I)return I.o.qa()},Va:function(){if(I)return I.o.Va()},Ya:function(){if(I)return I.Ya},o:function(){if(I)return I.o}}}(),f.b("computedContext",f.S),f.b("computedContext.getDependenciesCount",f.S.qa),f.b("computedContext.getDependencies",f.S.Va),f.b("computedContext.isInitial",f.S.Ya),f.b("computedContext.registerDependency",f.S.cc),f.b("ignoreDependencies",f.Yd=f.u.G);var S=f.a.Da("_latestValue");f.ta=function(b){function R(){return 0<arguments.length?(R.sb(R[S],arguments[0])&&(R.ya(),R[S]=arguments[0],R.xa()),this):(f.u.cc(R),R[S])}return R[S]=b,f.a.Ba||f.a.extend(R,f.T.fn),f.T.fn.qb(R),f.a.Ab(R,C),f.options.deferUpdates&&f.Ta.deferred(R,!0),R};var C={equalityComparer:c,v:function(){return this[S]},xa:function(){this.notifySubscribers(this[S],"spectate"),this.notifySubscribers(this[S])},ya:function(){this.notifySubscribers(this[S],"beforeChange")}};f.a.Ba&&f.a.setPrototypeOf(C,f.T.fn);var V=f.ta.Ma="__ko_proto__";C[V]=f.ta,f.O=function(b){if((b=typeof b=="function"&&b[V])&&b!==C[V]&&b!==f.o.fn[V])throw Error("Invalid object that looks like an observable; possibly from another Knockout instance");return!!b},f.Za=function(b){return typeof b=="function"&&(b[V]===C[V]||b[V]===f.o.fn[V]&&b.Nc)},f.b("observable",f.ta),f.b("isObservable",f.O),f.b("isWriteableObservable",f.Za),f.b("isWritableObservable",f.Za),f.b("observable.fn",C),f.L(C,"peek",C.v),f.L(C,"valueHasMutated",C.xa),f.L(C,"valueWillMutate",C.ya),f.Ha=function(b){if(b=b||[],typeof b!="object"||!("length"in b))throw Error("The argument passed when initializing an observable array must be an array, or null, or undefined.");return b=f.ta(b),f.a.Ab(b,f.Ha.fn),b.extend({trackArrayChanges:!0})},f.Ha.fn={remove:function(b){for(var R=this.v(),G=[],I=typeof b!="function"||f.O(b)?function(B){return B===b}:b,w=0;w<R.length;w++){var M=R[w];if(I(M)){if(G.length===0&&this.ya(),R[w]!==M)throw Error("Array modified during remove; cannot remove item");G.push(M),R.splice(w,1),w--}}return G.length&&this.xa(),G},removeAll:function(b){if(b===e){var R=this.v(),G=R.slice(0);return this.ya(),R.splice(0,R.length),this.xa(),G}return b?this.remove(function(I){return 0<=f.a.A(b,I)}):[]},destroy:function(b){var R=this.v(),G=typeof b!="function"||f.O(b)?function(M){return M===b}:b;this.ya();for(var I=R.length-1;0<=I;I--){var w=R[I];G(w)&&(w._destroy=!0)}this.xa()},destroyAll:function(b){return b===e?this.destroy(function(){return!0}):b?this.destroy(function(R){return 0<=f.a.A(b,R)}):[]},indexOf:function(b){var R=this();return f.a.A(R,b)},replace:function(b,R){var G=this.indexOf(b);0<=G&&(this.ya(),this.v()[G]=R,this.xa())},sorted:function(b){var R=this().slice(0);return b?R.sort(b):R.sort()},reversed:function(){return this().slice(0).reverse()}},f.a.Ba&&f.a.setPrototypeOf(f.Ha.fn,f.ta.fn),f.a.D("pop push reverse shift sort splice unshift".split(" "),function(b){f.Ha.fn[b]=function(){var R=this.v();this.ya(),this.zc(R,b,arguments);var G=R[b].apply(R,arguments);return this.xa(),G===R?this:G}}),f.a.D(["slice"],function(b){f.Ha.fn[b]=function(){var R=this();return R[b].apply(R,arguments)}}),f.Pc=function(b){return f.O(b)&&typeof b.remove=="function"&&typeof b.push=="function"},f.b("observableArray",f.Ha),f.b("isObservableArray",f.Pc),f.Ta.trackArrayChanges=function(b,R){function G(){function K(){if(k){var te=[].concat(b.v()||[]),H;b.Wa("arrayChange")&&((!w||1<k)&&(w=f.a.Pb(O,te,b.Ob)),H=w),O=te,w=null,k=0,H&&H.length&&b.notifySubscribers(H,"arrayChange")}}I?K():(I=!0,B=b.subscribe(function(){++k},null,"spectate"),O=[].concat(b.v()||[]),w=null,M=b.subscribe(K))}if(b.Ob={},R&&typeof R=="object"&&f.a.extend(b.Ob,R),b.Ob.sparse=!0,!b.zc){var I=!1,w=null,M,B,k=0,O,N=b.Qa,z=b.hb;b.Qa=function(K){N&&N.call(b,K),K==="arrayChange"&&G()},b.hb=function(K){z&&z.call(b,K),K!=="arrayChange"||b.Wa("arrayChange")||(M&&M.s(),B&&B.s(),B=M=null,I=!1,O=e)},b.zc=function(K,te,H){function j(Le,Ne,Oe){return ee[ee.length]={status:Le,value:Ne,index:Oe}}if(I&&!k){var ee=[],fe=K.length,Te=H.length,de=0;switch(te){case"push":de=fe;case"unshift":for(te=0;te<Te;te++)j("added",H[te],de+te);break;case"pop":de=fe-1;case"shift":fe&&j("deleted",K[de],de);break;case"splice":te=Math.min(Math.max(0,0>H[0]?fe+H[0]:H[0]),fe);for(var fe=Te===1?fe:Math.min(te+(H[1]||0),fe),Te=te+Te-2,de=Math.max(fe,Te),xe=[],Ce=[],Ie=2;te<de;++te,++Ie)te<fe&&Ce.push(j("deleted",K[te],te)),te<Te&&xe.push(j("added",H[Ie],te));f.a.Kc(Ce,xe);break;default:return}w=ee}}}};var L=f.a.Da("_state");f.o=f.$=function(b,R,G){function I(){if(0<arguments.length){if(typeof w=="function")w.apply(M.nb,arguments);else throw Error("Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.");return this}return M.ra||f.u.cc(I),(M.ka||M.J&&I.Xa())&&I.ha(),M.X}if(typeof b=="object"?G=b:(G=G||{},b&&(G.read=b)),typeof G.read!="function")throw Error("Pass a function that returns the value of the ko.computed");var w=G.write,M={X:e,sa:!0,ka:!0,rb:!1,jc:!1,ra:!1,wb:!1,J:!1,Wc:G.read,nb:R||G.owner,l:G.disposeWhenNodeIsRemoved||G.l||null,Sa:G.disposeWhen||G.Sa,Rb:null,I:{},V:0,Ic:null};return I[L]=M,I.Nc=typeof w=="function",f.a.Ba||f.a.extend(I,f.T.fn),f.T.fn.qb(I),f.a.Ab(I,Z),G.pure?(M.wb=!0,M.J=!0,f.a.extend(I,E)):G.deferEvaluation&&f.a.extend(I,P),f.options.deferUpdates&&f.Ta.deferred(I,!0),M.l&&(M.jc=!0,M.l.nodeType||(M.l=null)),M.J||G.deferEvaluation||I.ha(),M.l&&I.ja()&&f.a.K.za(M.l,M.Rb=function(){I.s()}),I};var Z={equalityComparer:c,qa:function(){return this[L].V},Va:function(){var b=[];return f.a.P(this[L].I,function(R,G){b[G.Ka]=G.da}),b},Vb:function(b){if(!this[L].V)return!1;var R=this.Va();return f.a.A(R,b)!==-1?!0:!!f.a.Lb(R,function(G){return G.Vb&&G.Vb(b)})},uc:function(b,R,G){if(this[L].wb&&R===this)throw Error("A 'pure' computed must not be called recursively");this[L].I[b]=G,G.Ka=this[L].V++,G.La=R.ob()},Xa:function(){var b,R,G=this[L].I;for(b in G)if(Object.prototype.hasOwnProperty.call(G,b)&&(R=G[b],this.Ia&&R.da.Ja||R.da.Dd(R.La)))return!0},Jd:function(){this.Ia&&!this[L].rb&&this.Ia(!1)},ja:function(){var b=this[L];return b.ka||0<b.V},Rd:function(){this.Ja?this[L].ka&&(this[L].sa=!0):this.Hc()},$c:function(b){if(b.Hb){var R=b.subscribe(this.Jd,this,"dirty"),G=b.subscribe(this.Rd,this);return{da:b,s:function(){R.s(),G.s()}}}return b.subscribe(this.Hc,this)},Hc:function(){var b=this,R=b.throttleEvaluation;R&&0<=R?(clearTimeout(this[L].Ic),this[L].Ic=f.a.setTimeout(function(){b.ha(!0)},R)):b.Ia?b.Ia(!0):b.ha(!0)},ha:function(b){var R=this[L],G=R.Sa,I=!1;if(!R.rb&&!R.ra){if(R.l&&!f.a.Sb(R.l)||G&&G()){if(!R.jc){this.s();return}}else R.jc=!1;R.rb=!0;try{I=this.zd(b)}finally{R.rb=!1}return I}},zd:function(b){var R=this[L],I=!1,G=R.wb?e:!R.V,I={qd:this,mb:R.I,Qb:R.V};f.u.xc({pd:I,od:g,o:this,Ya:G}),R.I={},R.V=0;var w=this.yd(R,I);return R.V?I=this.sb(R.X,w):(this.s(),I=!0),I&&(R.J?this.Gb():this.notifySubscribers(R.X,"beforeChange"),R.X=w,this.notifySubscribers(R.X,"spectate"),!R.J&&b&&this.notifySubscribers(R.X),this.rc&&this.rc()),G&&this.notifySubscribers(R.X,"awake"),I},yd:function(b,R){try{var G=b.Wc;return b.nb?G.call(b.nb):G()}finally{f.u.end(),R.Qb&&!b.J&&f.a.P(R.mb,p),b.sa=b.ka=!1}},v:function(b){var R=this[L];return(R.ka&&(b||!R.V)||R.J&&this.Xa())&&this.ha(),R.X},ub:function(b){f.T.fn.ub.call(this,b),this.nc=function(){return this[L].J||(this[L].sa?this.ha():this[L].ka=!1),this[L].X},this.Ia=function(R){this.pc(this[L].X),this[L].ka=!0,R&&(this[L].sa=!0),this.qc(this,!R)}},s:function(){var b=this[L];!b.J&&b.I&&f.a.P(b.I,function(R,G){G.s&&G.s()}),b.l&&b.Rb&&f.a.K.yb(b.l,b.Rb),b.I=e,b.V=0,b.ra=!0,b.sa=!1,b.ka=!1,b.J=!1,b.l=e,b.Sa=e,b.Wc=e,this.Nc||(b.nb=e)}},E={Qa:function(b){var R=this,G=R[L];if(!G.ra&&G.J&&b=="change"){if(G.J=!1,G.sa||R.Xa())G.I=null,G.V=0,R.ha()&&R.Gb();else{var I=[];f.a.P(G.I,function(w,M){I[M.Ka]=w}),f.a.D(I,function(w,M){var B=G.I[w],k=R.$c(B.da);k.Ka=M,k.La=B.La,G.I[w]=k}),R.Xa()&&R.ha()&&R.Gb()}G.ra||R.notifySubscribers(G.X,"awake")}},hb:function(b){var R=this[L];R.ra||b!="change"||this.Wa("change")||(f.a.P(R.I,function(G,I){I.s&&(R.I[G]={da:I.da,Ka:I.Ka,La:I.La},I.s())}),R.J=!0,this.notifySubscribers(e,"asleep"))},ob:function(){var b=this[L];return b.J&&(b.sa||this.Xa())&&this.ha(),f.T.fn.ob.call(this)}},P={Qa:function(b){b!="change"&&b!="beforeChange"||this.v()}};f.a.Ba&&f.a.setPrototypeOf(Z,f.T.fn);var W=f.ta.Ma;Z[W]=f.o,f.Oc=function(b){return typeof b=="function"&&b[W]===Z[W]},f.Fd=function(b){return f.Oc(b)&&b[L]&&b[L].wb},f.b("computed",f.o),f.b("dependentObservable",f.o),f.b("isComputed",f.Oc),f.b("isPureComputed",f.Fd),f.b("computed.fn",Z),f.L(Z,"peek",Z.v),f.L(Z,"dispose",Z.s),f.L(Z,"isActive",Z.ja),f.L(Z,"getDependenciesCount",Z.qa),f.L(Z,"getDependencies",Z.Va),f.xb=function(b,R){return typeof b=="function"?f.o(b,R,{pure:!0}):(b=f.a.extend({},b),b.pure=!0,f.o(b,R))},f.b("pureComputed",f.xb),function(){function b(I,w,M){if(M=M||new G,I=w(I),typeof I!="object"||I===null||I===e||I instanceof RegExp||I instanceof Date||I instanceof String||I instanceof Number||I instanceof Boolean)return I;var B=I instanceof Array?[]:{};return M.save(I,B),R(I,function(k){var O=w(I[k]);switch(typeof O){case"boolean":case"number":case"string":case"function":B[k]=O;break;case"object":case"undefined":var N=M.get(O);B[k]=N!==e?N:b(O,w,M)}}),B}function R(I,w){if(I instanceof Array){for(var M=0;M<I.length;M++)w(M);typeof I.toJSON=="function"&&w("toJSON")}else for(M in I)w(M)}function G(){this.keys=[],this.values=[]}f.ad=function(I){if(arguments.length==0)throw Error("When calling ko.toJS, pass the object you want to convert.");return b(I,function(w){for(var M=0;f.O(w)&&10>M;M++)w=w();return w})},f.toJSON=function(I,w,M){return I=f.ad(I),f.a.hc(I,w,M)},G.prototype={constructor:G,save:function(I,w){var M=f.a.A(this.keys,I);0<=M?this.values[M]=w:(this.keys.push(I),this.values.push(w))},get:function(I){return I=f.a.A(this.keys,I),0<=I?this.values[I]:e}}}(),f.b("toJS",f.ad),f.b("toJSON",f.toJSON),f.Wd=function(b,R,G){function I(w){var M=f.xb(b,G).extend({ma:"always"}),B=M.subscribe(function(k){k&&(B.s(),w(k))});return M.notifySubscribers(M.v()),B}return typeof Promise!="function"||R?I(R.bind(G)):new Promise(I)},f.b("when",f.Wd),function(){f.w={M:function(b){switch(f.a.R(b)){case"option":return b.__ko__hasDomDataOptionValue__===!0?f.a.g.get(b,f.c.options.$b):7>=f.a.W?b.getAttributeNode("value")&&b.getAttributeNode("value").specified?b.value:b.text:b.value;case"select":return 0<=b.selectedIndex?f.w.M(b.options[b.selectedIndex]):e;default:return b.value}},cb:function(b,R,G){switch(f.a.R(b)){case"option":typeof R=="string"?(f.a.g.set(b,f.c.options.$b,e),"__ko__hasDomDataOptionValue__"in b&&delete b.__ko__hasDomDataOptionValue__,b.value=R):(f.a.g.set(b,f.c.options.$b,R),b.__ko__hasDomDataOptionValue__=!0,b.value=typeof R=="number"?R:"");break;case"select":(R===""||R===null)&&(R=e);for(var I=-1,w=0,M=b.options.length,B;w<M;++w)if(B=f.w.M(b.options[w]),B==R||B===""&&R===e){I=w;break}(G||0<=I||R===e&&1<b.size)&&(b.selectedIndex=I,f.a.W===6&&f.a.setTimeout(function(){b.selectedIndex=I},0));break;default:(R===null||R===e)&&(R=""),b.value=R}}}}(),f.b("selectExtensions",f.w),f.b("selectExtensions.readValue",f.w.M),f.b("selectExtensions.writeValue",f.w.cb),f.m=function(){function b(k){k=f.a.Db(k),k.charCodeAt(0)===123&&(k=k.slice(1,-1)),k+=` ,`;var O=[],N=k.match(I),z,K=[],te=0;if(1<N.length){for(var H=0,j;j=N[H];++H){var ee=j.charCodeAt(0);if(ee===44){if(0>=te){O.push(z&&K.length?{key:z,value:K.join("")}:{unknown:z||K.join("")}),z=te=0,K=[];continue}}else if(ee===58){if(!te&&!z&&K.length===1){z=K.pop();continue}}else{if(ee===47&&1<j.length&&(j.charCodeAt(1)===47||j.charCodeAt(1)===42))continue;ee===47&&H&&1<j.length?(ee=N[H-1].match(w))&&!M[ee[0]]&&(k=k.substr(k.indexOf(j)+1),N=k.match(I),H=-1,j="/"):ee===40||ee===123||ee===91?++te:ee===41||ee===125||ee===93?--te:z||K.length||ee!==34&&ee!==39||(j=j.slice(1,-1))}K.push(j)}if(0<te)throw Error("Unbalanced parentheses, braces, or brackets")}return O}var R=["true","false","null","undefined"],G=/^(?:[$_a-z][$\w]*|(.+)(\.\s*[$_a-z][$\w]*|\[.+\]))$/i,I=RegExp(`"(?:\\\\.|[^"])*"|'(?:\\\\.|[^'])*'|\`(?:\\\\.|[^\`])*\`|/\\*(?:[^*]|\\*+[^*/])*\\*+/|//.* |/(?:\\\\.|[^/])+/w*|[^\\s:,/][^,"'\`{}()/:[\\]]*[^\\s,"'\`{}()/:[\\]]|[^\\s]`,"g"),w=/[\])"'A-Za-z0-9_$]+$/,M={in:1,return:1,typeof:1},B={};return{Ra:[],wa:B,ac:b,vb:function(k,O){function N(ee,fe){var Te;if(!H){var de=f.getBindingHandler(ee);if(de&&de.preprocess&&!(fe=de.preprocess(fe,ee,N)))return;(de=B[ee])&&(Te=fe,0<=f.a.A(R,Te)?Te=!1:(de=Te.match(G),Te=de===null?!1:de[1]?"Object("+de[1]+")"+de[2]:Te),de=Te),de&&K.push("'"+(typeof B[ee]=="string"?B[ee]:ee)+"':function(_z){"+Te+"=_z}")}te&&(fe="function(){return "+fe+" }"),z.push("'"+ee+"':"+fe)}O=O||{};var z=[],K=[],te=O.valueAccessors,H=O.bindingParams,j=typeof k=="string"?b(k):k;return f.a.D(j,function(ee){N(ee.key||ee.unknown,ee.value)}),K.length&&N("_ko_property_writers","{"+K.join(",")+" }"),z.join(",")},Id:function(k,O){for(var N=0;N<k.length;N++)if(k[N].key==O)return!0;return!1},eb:function(k,O,N,z,K){k&&f.O(k)?!f.Za(k)||K&&k.v()===z||k(z):(k=O.get("_ko_property_writers"))&&k[N]&&k[N](z)}}}(),f.b("expressionRewriting",f.m),f.b("expressionRewriting.bindingRewriteValidators",f.m.Ra),f.b("expressionRewriting.parseObjectLiteral",f.m.ac),f.b("expressionRewriting.preProcessBindings",f.m.vb),f.b("expressionRewriting._twoWayBindings",f.m.wa),f.b("jsonExpressionRewriting",f.m),f.b("jsonExpressionRewriting.insertPropertyAccessorsIntoJson",f.m.vb),function(){function b(N){return N.nodeType==8&&M.test(w?N.text:N.nodeValue)}function R(N){return N.nodeType==8&&B.test(w?N.text:N.nodeValue)}function G(N,z){for(var K=N,te=1,H=[];K=K.nextSibling;){if(R(K)&&(f.a.g.set(K,O,!0),te--,te===0))return H;H.push(K),b(K)&&te++}if(!z)throw Error("Cannot find closing comment tag to match: "+N.nodeValue);return null}function I(N,z){var K=G(N,z);return K?0<K.length?K[K.length-1].nextSibling:N.nextSibling:null}var w=n&&n.createComment("test").text==="<!--test-->",M=w?/^\x3c!--\s*ko(?:\s+([\s\S]+))?\s*--\x3e$/:/^\s*ko(?:\s+([\s\S]+))?\s*$/,B=w?/^\x3c!--\s*\/ko\s*--\x3e$/:/^\s*\/ko\s*$/,k={ul:!0,ol:!0},O="__ko_matchedEndComment__";f.h={ea:{},childNodes:function(N){return b(N)?G(N):N.childNodes},Ea:function(N){if(b(N)){N=f.h.childNodes(N);for(var z=0,K=N.length;z<K;z++)f.removeNode(N[z])}else f.a.Tb(N)},va:function(N,z){if(b(N)){f.h.Ea(N);for(var K=N.nextSibling,te=0,H=z.length;te<H;te++)K.parentNode.insertBefore(z[te],K)}else f.a.va(N,z)},Vc:function(N,z){var K;b(N)?(K=N.nextSibling,N=N.parentNode):K=N.firstChild,K?z!==K&&N.insertBefore(z,K):N.appendChild(z)},Wb:function(N,z,K){K?(K=K.nextSibling,b(N)&&(N=N.parentNode),K?z!==K&&N.insertBefore(z,K):N.appendChild(z)):f.h.Vc(N,z)},firstChild:function(N){if(b(N))return!N.nextSibling||R(N.nextSibling)?null:N.nextSibling;if(N.firstChild&&R(N.firstChild))throw Error("Found invalid end comment, as the first child of "+N);return N.firstChild},nextSibling:function(N){if(b(N)&&(N=I(N)),N.nextSibling&&R(N.nextSibling)){var z=N.nextSibling;if(R(z)&&!f.a.g.get(z,O))throw Error("Found end comment without a matching opening comment, as child of "+N);return null}return N.nextSibling},Cd:b,Vd:function(N){return(N=(w?N.text:N.nodeValue).match(M))?N[1]:null},Sc:function(N){if(k[f.a.R(N)]){var z=N.firstChild;if(z)do if(z.nodeType===1){var K;K=z.firstChild;var te=null;if(K)do if(te)te.push(K);else if(b(K)){var H=I(K,!0);H?K=H:te=[K]}else R(K)&&(te=[K]);while(K=K.nextSibling);if(K=te)for(te=z.nextSibling,H=0;H<K.length;H++)te?N.insertBefore(K[H],te):N.appendChild(K[H])}while(z=z.nextSibling)}}}}(),f.b("virtualElements",f.h),f.b("virtualElements.allowedBindings",f.h.ea),f.b("virtualElements.emptyNode",f.h.Ea),f.b("virtualElements.insertAfter",f.h.Wb),f.b("virtualElements.prepend",f.h.Vc),f.b("virtualElements.setDomNodeChildren",f.h.va),function(){f.ga=function(){this.nd={}},f.a.extend(f.ga.prototype,{nodeHasBindings:function(b){switch(b.nodeType){case 1:return b.getAttribute("data-bind")!=null||f.j.getComponentNameForNode(b);case 8:return f.h.Cd(b);default:return!1}},getBindings:function(b,R){var G=this.getBindingsString(b,R),G=G?this.parseBindingsString(G,R,b):null;return f.j.tc(G,b,R,!1)},getBindingAccessors:function(b,R){var G=this.getBindingsString(b,R),G=G?this.parseBindingsString(G,R,b,{valueAccessors:!0}):null;return f.j.tc(G,b,R,!0)},getBindingsString:function(b){switch(b.nodeType){case 1:return b.getAttribute("data-bind");case 8:return f.h.Vd(b);default:return null}},parseBindingsString:function(b,R,G,I){try{var w=this.nd,M=b+(I&&I.valueAccessors||""),B;if(!(B=w[M])){var k,O="with($context){with($data||{}){return{"+f.m.vb(b,I)+"}}}";k=new Function("$context","$element",O),B=w[M]=k}return B(R,G)}catch(N){throw N.message=`Unable to parse bindings. Bindings value: `+b+` Message: `+N.message,N}}}),f.ga.instance=new f.ga}(),f.b("bindingProvider",f.ga),function(){function b(de){var xe=(de=f.a.g.get(de,Te))&&de.N;xe&&(de.N=null,xe.Tc())}function R(de,xe,Ce){this.node=de,this.yc=xe,this.kb=[],this.H=!1,xe.N||f.a.K.za(de,b),Ce&&Ce.N&&(Ce.N.kb.push(de),this.Kb=Ce)}function G(de){return function(){return de}}function I(de){return de()}function w(de){return f.a.Ga(f.u.G(de),function(xe,Ce){return function(){return de()[Ce]}})}function M(de,xe,Ce){return typeof de=="function"?w(de.bind(null,xe,Ce)):f.a.Ga(de,G)}function B(de,xe){return w(this.getBindings.bind(this,de,xe))}function k(de,xe){var Ce=f.h.firstChild(xe);if(Ce){var Ie,Le=f.ga.instance,Ne=Le.preprocessNode;if(Ne){for(;Ie=Ce;)Ce=f.h.nextSibling(Ie),Ne.call(Le,Ie);Ce=f.h.firstChild(xe)}for(;Ie=Ce;)Ce=f.h.nextSibling(Ie),O(de,Ie)}f.i.ma(xe,f.i.H)}function O(de,xe){var Ce=de,Ie=xe.nodeType===1;Ie&&f.h.Sc(xe),(Ie||f.ga.instance.nodeHasBindings(xe))&&(Ce=z(xe,null,de).bindingContextForDescendants),Ce&&!ee[f.a.R(xe)]&&k(Ce,xe)}function N(de){var xe=[],Ce={},Ie=[];return f.a.P(de,function Le(Ne){if(!Ce[Ne]){var Oe=f.getBindingHandler(Ne);Oe&&(Oe.after&&(Ie.push(Ne),f.a.D(Oe.after,function(qe){if(de[qe]){if(f.a.A(Ie,qe)!==-1)throw Error("Cannot combine the following bindings, because they have a cyclic dependency: "+Ie.join(", "));Le(qe)}}),Ie.length--),xe.push({key:Ne,Mc:Oe})),Ce[Ne]=!0}}),xe}function z(de,xe,Ce){var Ie=f.a.g.Ub(de,Te,{}),Le=Ie.hd;if(!xe){if(Le)throw Error("You cannot apply bindings multiple times to the same element.");Ie.hd=!0}Le||(Ie.context=Ce),Ie.Zb||(Ie.Zb={});var Ne;if(xe&&typeof xe!="function")Ne=xe;else{var Oe=f.ga.instance,qe=Oe.getBindingAccessors||B,Rt=f.$(function(){return(Ne=xe?xe(Ce,de):qe.call(Oe,de,Ce))&&(Ce[te]&&Ce[te](),Ce[j]&&Ce[j]()),Ne},null,{l:de});Ne&&Rt.ja()||(Rt=null)}var Lt=Ce,ke;if(Ne){var Ht=function(){return f.a.Ga(Rt?Rt():Ne,I)},ut=Rt?function(mt){return function(){return I(Rt()[mt])}}:function(mt){return Ne[mt]};Ht.get=function(mt){return Ne[mt]&&I(ut(mt))},Ht.has=function(mt){return mt in Ne},f.i.H in Ne&&f.i.subscribe(de,f.i.H,function(){var mt=(0,Ne[f.i.H])();if(mt){var Pn=f.h.childNodes(de);Pn.length&&mt(Pn,f.Ec(Pn[0]))}}),f.i.pa in Ne&&(Lt=f.i.Cb(de,Ce),f.i.subscribe(de,f.i.pa,function(){var mt=(0,Ne[f.i.pa])();mt&&f.h.firstChild(de)&&mt(de)})),Ie=N(Ne),f.a.D(Ie,function(mt){var Pn=mt.Mc.init,cn=mt.Mc.update,ge=mt.key;if(de.nodeType===8&&!f.h.ea[ge])throw Error("The binding '"+ge+"' cannot be used with virtual elements");try{typeof Pn=="function"&&f.u.G(function(){var Ve=Pn(de,ut(ge),Ht,Lt.$data,Lt);if(Ve&&Ve.controlsDescendantBindings){if(ke!==e)throw Error("Multiple bindings ("+ke+" and "+ge+") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.");ke=ge}}),typeof cn=="function"&&f.$(function(){cn(de,ut(ge),Ht,Lt.$data,Lt)},null,{l:de})}catch(Ve){throw Ve.message='Unable to process binding "'+ge+": "+Ne[ge]+`" Message: `+Ve.message,Ve}})}return Ie=ke===e,{shouldBindDescendants:Ie,bindingContextForDescendants:Ie&&Lt}}function K(de,xe){return de&&de instanceof f.fa?de:new f.fa(de,e,e,xe)}var te=f.a.Da("_subscribable"),H=f.a.Da("_ancestorBindingInfo"),j=f.a.Da("_dataDependency");f.c={};var ee={script:!0,textarea:!0,template:!0};f.getBindingHandler=function(de){return f.c[de]};var fe={};f.fa=function(de,xe,Ce,Ie,Le){function Ne(){var ut=Lt?Rt():Rt,mt=f.a.f(ut);return xe?(f.a.extend(Oe,xe),H in xe&&(Oe[H]=xe[H])):(Oe.$parents=[],Oe.$root=mt,Oe.ko=f),Oe[te]=ke,qe?mt=Oe.$data:(Oe.$rawData=ut,Oe.$data=mt),Ce&&(Oe[Ce]=mt),Ie&&Ie(Oe,xe,mt),xe&&xe[te]&&!f.S.o().Vb(xe[te])&&xe[te](),Ht&&(Oe[j]=Ht),Oe.$data}var Oe=this,qe=de===fe,Rt=qe?e:de,Lt=typeof Rt=="function"&&!f.O(Rt),ke,Ht=Le&&Le.dataDependency;Le&&Le.exportDependencies?Ne():(ke=f.xb(Ne),ke.v(),ke.ja()?ke.equalityComparer=null:Oe[te]=e)},f.fa.prototype.createChildContext=function(de,xe,Ce,Ie){if(!Ie&&xe&&typeof xe=="object"&&(Ie=xe,xe=Ie.as,Ce=Ie.extend),xe&&Ie&&Ie.noChildContext){var Le=typeof de=="function"&&!f.O(de);return new f.fa(fe,this,null,function(Ne){Ce&&Ce(Ne),Ne[xe]=Le?de():de},Ie)}return new f.fa(de,this,xe,function(Ne,Oe){Ne.$parentContext=Oe,Ne.$parent=Oe.$data,Ne.$parents=(Oe.$parents||[]).slice(0),Ne.$parents.unshift(Ne.$parent),Ce&&Ce(Ne)},Ie)},f.fa.prototype.extend=function(de,xe){return new f.fa(fe,this,null,function(Ce){f.a.extend(Ce,typeof de=="function"?de(Ce):de)},xe)};var Te=f.a.g.Z();R.prototype.Tc=function(){this.Kb&&this.Kb.N&&this.Kb.N.sd(this.node)},R.prototype.sd=function(de){f.a.Pa(this.kb,de),!this.kb.length&&this.H&&this.Cc()},R.prototype.Cc=function(){this.H=!0,this.yc.N&&!this.kb.length&&(this.yc.N=null,f.a.K.yb(this.node,b),f.i.ma(this.node,f.i.pa),this.Tc())},f.i={H:"childrenComplete",pa:"descendantsComplete",subscribe:function(de,xe,Ce,Ie,Le){var Ne=f.a.g.Ub(de,Te,{});return Ne.Fa||(Ne.Fa=new f.T),Le&&Le.notifyImmediately&&Ne.Zb[xe]&&f.u.G(Ce,Ie,[de]),Ne.Fa.subscribe(Ce,Ie,xe)},ma:function(de,xe){var Ce=f.a.g.get(de,Te);if(Ce&&(Ce.Zb[xe]=!0,Ce.Fa&&Ce.Fa.notifySubscribers(de,xe),xe==f.i.H)){if(Ce.N)Ce.N.Cc();else if(Ce.N===e&&Ce.Fa&&Ce.Fa.Wa(f.i.pa))throw Error("descendantsComplete event not supported for bindings on this node")}},Cb:function(de,xe){var Ce=f.a.g.Ub(de,Te,{});return Ce.N||(Ce.N=new R(de,Ce,xe[H])),xe[H]==Ce?xe:xe.extend(function(Ie){Ie[H]=Ce})}},f.Td=function(de){return(de=f.a.g.get(de,Te))&&de.context},f.ib=function(de,xe,Ce){return de.nodeType===1&&f.h.Sc(de),z(de,xe,K(Ce))},f.ld=function(de,xe,Ce){return Ce=K(Ce),f.ib(de,M(xe,Ce,de),Ce)},f.Oa=function(de,xe){xe.nodeType!==1&&xe.nodeType!==8||k(K(de),xe)},f.vc=function(de,xe,Ce){if(!o&&t.jQuery&&(o=t.jQuery),2>arguments.length){if(xe=n.body,!xe)throw Error("ko.applyBindings: could not find document.body; has the document been loaded?")}else if(!xe||xe.nodeType!==1&&xe.nodeType!==8)throw Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node");O(K(de,Ce),xe)},f.Dc=function(de){return!de||de.nodeType!==1&&de.nodeType!==8?e:f.Td(de)},f.Ec=function(de){return(de=f.Dc(de))?de.$data:e},f.b("bindingHandlers",f.c),f.b("bindingEvent",f.i),f.b("bindingEvent.subscribe",f.i.subscribe),f.b("bindingEvent.startPossiblyAsyncContentBinding",f.i.Cb),f.b("applyBindings",f.vc),f.b("applyBindingsToDescendants",f.Oa),f.b("applyBindingAccessorsToNode",f.ib),f.b("applyBindingsToNode",f.ld),f.b("contextFor",f.Dc),f.b("dataFor",f.Ec)}(),function(b){function R(B,k){var O=Object.prototype.hasOwnProperty.call(w,B)?w[B]:b,N;O?O.subscribe(k):(O=w[B]=new f.T,O.subscribe(k),G(B,function(z,K){var te=!(!K||!K.synchronous);M[B]={definition:z,Gd:te},delete w[B],N||te?O.notifySubscribers(z):f.na.zb(function(){O.notifySubscribers(z)})}),N=!0)}function G(B,k){I("getConfig",[B],function(O){O?I("loadComponent",[B,O],function(N){k(N,O)}):k(null,null)})}function I(B,k,O,N){N||(N=f.j.loaders.slice(0));var z=N.shift();if(z){var K=z[B];if(K){var te=!1;if(K.apply(z,k.concat(function(H){te?O(null):H!==null?O(H):I(B,k,O,N)}))!==b&&(te=!0,!z.suppressLoaderExceptions))throw Error("Component loaders must supply values by invoking the callback, not by returning values synchronously.")}else I(B,k,O,N)}else O(null)}var w={},M={};f.j={get:function(B,k){var O=Object.prototype.hasOwnProperty.call(M,B)?M[B]:b;O?O.Gd?f.u.G(function(){k(O.definition)}):f.na.zb(function(){k(O.definition)}):R(B,k)},Bc:function(B){delete M[B]},oc:I},f.j.loaders=[],f.b("components",f.j),f.b("components.get",f.j.get),f.b("components.clearCachedDefinition",f.j.Bc)}(),function(){function b(O,N,z,K){function te(){--j===0&&K(H)}var H={},j=2,ee=z.template;z=z.viewModel,ee?w(N,ee,function(fe){f.j.oc("loadTemplate",[O,fe],function(Te){H.template=Te,te()})}):te(),z?w(N,z,function(fe){f.j.oc("loadViewModel",[O,fe],function(Te){H[k]=Te,te()})}):te()}function R(O,N,z){if(typeof N=="function")z(function(te){return new N(te)});else if(typeof N[k]=="function")z(N[k]);else if("instance"in N){var K=N.instance;z(function(){return K})}else"viewModel"in N?R(O,N.viewModel,z):O("Unknown viewModel value: "+N)}function G(O){switch(f.a.R(O)){case"script":return f.a.ua(O.text);case"textarea":return f.a.ua(O.value);case"template":if(I(O.content))return f.a.Ca(O.content.childNodes)}return f.a.Ca(O.childNodes)}function I(O){return t.DocumentFragment?O instanceof DocumentFragment:O&&O.nodeType===11}function w(O,N,z){typeof N.require=="string"?a||t.require?(a||t.require)([N.require],function(K){K&&typeof K=="object"&&K.Xd&&K.default&&(K=K.default),z(K)}):O("Uses require, but no AMD loader is present"):z(N)}function M(O){return function(N){throw Error("Component '"+O+"': "+N)}}var B={};f.j.register=function(O,N){if(!N)throw Error("Invalid configuration for "+O);if(f.j.tb(O))throw Error("Component "+O+" is already registered");B[O]=N},f.j.tb=function(O){return Object.prototype.hasOwnProperty.call(B,O)},f.j.unregister=function(O){delete B[O],f.j.Bc(O)},f.j.Fc={getConfig:function(O,N){N(f.j.tb(O)?B[O]:null)},loadComponent:function(O,N,z){var K=M(O);w(K,N,function(te){b(O,K,te,z)})},loadTemplate:function(O,N,z){if(O=M(O),typeof N=="string")z(f.a.ua(N));else if(N instanceof Array)z(N);else if(I(N))z(f.a.la(N.childNodes));else if(N.element)if(N=N.element,t.HTMLElement?N instanceof HTMLElement:N&&N.tagName&&N.nodeType===1)z(G(N));else if(typeof N=="string"){var K=n.getElementById(N);K?z(G(K)):O("Cannot find element with ID "+N)}else O("Unknown element type: "+N);else O("Unknown template value: "+N)},loadViewModel:function(O,N,z){R(M(O),N,z)}};var k="createViewModel";f.b("components.register",f.j.register),f.b("components.isRegistered",f.j.tb),f.b("components.unregister",f.j.unregister),f.b("components.defaultLoader",f.j.Fc),f.j.loaders.push(f.j.Fc),f.j.dd=B}(),function(){function b(G,I){var w=G.getAttribute("params");if(w){var w=R.parseBindingsString(w,I,G,{valueAccessors:!0,bindingParams:!0}),w=f.a.Ga(w,function(k){return f.o(k,null,{l:G})}),M=f.a.Ga(w,function(k){var O=k.v();return k.ja()?f.o({read:function(){return f.a.f(k())},write:f.Za(O)&&function(N){k()(N)},l:G}):O});return Object.prototype.hasOwnProperty.call(M,"$raw")||(M.$raw=w),M}return{$raw:{}}}f.j.getComponentNameForNode=function(G){var I=f.a.R(G);if(f.j.tb(I)&&(I.indexOf("-")!=-1||""+G=="[object HTMLUnknownElement]"||8>=f.a.W&&G.tagName===I))return I},f.j.tc=function(G,I,w,M){if(I.nodeType===1){var B=f.j.getComponentNameForNode(I);if(B){if(G=G||{},G.component)throw Error('Cannot use the "component" binding on a custom element matching a component');var k={name:B,params:b(I,w)};G.component=M?function(){return k}:k}}return G};var R=new f.ga;9>f.a.W&&(f.j.register=function(G){return function(I){return G.apply(this,arguments)}}(f.j.register),n.createDocumentFragment=function(G){return function(){var I=G(),w=f.j.dd,M;for(M in w);return I}}(n.createDocumentFragment))}(),function(){function b(I,w,M){if(w=w.template,!w)throw Error("Component '"+I+"' has no template");I=f.a.Ca(w),f.h.va(M,I)}function R(I,w,M){var B=I.createViewModel;return B?B.call(I,w,M):w}var G=0;f.c.component={init:function(I,w,M,B,k){function O(){var H=N&&N.dispose;typeof H=="function"&&H.call(N),K&&K.s(),z=N=K=null}var N,z,K,te=f.a.la(f.h.childNodes(I));return f.h.Ea(I),f.a.K.za(I,O),f.o(function(){var H=f.a.f(w()),j,ee;if(typeof H=="string"?j=H:(j=f.a.f(H.name),ee=f.a.f(H.params)),!j)throw Error("No component name specified");var fe=f.i.Cb(I,k),Te=z=++G;f.j.get(j,function(de){if(z===Te){if(O(),!de)throw Error("Unknown component '"+j+"'");b(j,de,I);var xe=R(de,ee,{element:I,templateNodes:te});de=fe.createChildContext(xe,{extend:function(Ce){Ce.$component=xe,Ce.$componentTemplateNodes=te}}),xe&&xe.koDescendantsComplete&&(K=f.i.subscribe(I,f.i.pa,xe.koDescendantsComplete,xe)),N=xe,f.Oa(de,I)}})},null,{l:I}),{controlsDescendantBindings:!0}}},f.h.ea.component=!0}();var v={class:"className",for:"htmlFor"};f.c.attr={update:function(b,R){var G=f.a.f(R())||{};f.a.P(G,function(I,w){w=f.a.f(w);var M=I.indexOf(":"),M="lookupNamespaceURI"in b&&0<M&&b.lookupNamespaceURI(I.substr(0,M)),B=w===!1||w===null||w===e;B?M?b.removeAttributeNS(M,I):b.removeAttribute(I):w=w.toString(),8>=f.a.W&&I in v?(I=v[I],B?b.removeAttribute(I):b[I]=w):B||(M?b.setAttributeNS(M,I,w):b.setAttribute(I,w)),I==="name"&&f.a.Yc(b,B?"":w)})}},function(){f.c.checked={after:["value","attr"],init:function(b,R,G){function I(){var H=b.checked,j=M();if(!f.S.Ya()&&(H||!k&&!f.S.qa())){var ee=f.u.G(R);if(N){var fe=z?ee.v():ee,Te=te;te=j,Te!==j?H&&(f.a.Na(fe,j,!0),f.a.Na(fe,Te,!1)):f.a.Na(fe,j,H),z&&f.Za(ee)&&ee(fe)}else B&&(j===e?j=H:H||(j=e)),f.m.eb(ee,G,"checked",j,!0)}}function w(){var H=f.a.f(R()),j=M();N?(b.checked=0<=f.a.A(H,j),te=j):b.checked=B&&j===e?!!H:M()===H}var M=f.xb(function(){if(G.has("checkedValue"))return f.a.f(G.get("checkedValue"));if(K)return G.has("value")?f.a.f(G.get("value")):b.value}),B=b.type=="checkbox",k=b.type=="radio";if(B||k){var O=R(),N=B&&f.a.f(O)instanceof Array,z=!(N&&O.push&&O.splice),K=k||N,te=N?M():e;k&&!b.name&&f.c.uniqueName.init(b,function(){return!0}),f.o(I,null,{l:b}),f.a.B(b,"click",I),f.o(w,null,{l:b}),O=e}}},f.m.wa.checked=!0,f.c.checkedValue={update:function(b,R){b.value=f.a.f(R())}}}(),f.c.class={update:function(b,R){var G=f.a.Db(f.a.f(R()));f.a.Eb(b,b.__ko__cssValue,!1),b.__ko__cssValue=G,f.a.Eb(b,G,!0)}},f.c.css={update:function(b,R){var G=f.a.f(R());G!==null&&typeof G=="object"?f.a.P(G,function(I,w){w=f.a.f(w),f.a.Eb(b,I,w)}):f.c.class.update(b,R)}},f.c.enable={update:function(b,R){var G=f.a.f(R());G&&b.disabled?b.removeAttribute("disabled"):G||b.disabled||(b.disabled=!0)}},f.c.disable={update:function(b,R){f.c.enable.update(b,function(){return!f.a.f(R())})}},f.c.event={init:function(b,R,G,I,w){var M=R()||{};f.a.P(M,function(B){typeof B=="string"&&f.a.B(b,B,function(k){var O,N=R()[B];if(N){try{var z=f.a.la(arguments);I=w.$data,z.unshift(I),O=N.apply(I,z)}finally{O!==!0&&(k.preventDefault?k.preventDefault():k.returnValue=!1)}G.get(B+"Bubble")===!1&&(k.cancelBubble=!0,k.stopPropagation&&k.stopPropagation())}})})}},f.c.foreach={Rc:function(b){return function(){var R=b(),G=f.a.bc(R);return!G||typeof G.length=="number"?{foreach:R,templateEngine:f.ba.Ma}:(f.a.f(R),{foreach:G.data,as:G.as,noChildContext:G.noChildContext,includeDestroyed:G.includeDestroyed,afterAdd:G.afterAdd,beforeRemove:G.beforeRemove,afterRender:G.afterRender,beforeMove:G.beforeMove,afterMove:G.afterMove,templateEngine:f.ba.Ma})}},init:function(b,R){return f.c.template.init(b,f.c.foreach.Rc(R))},update:function(b,R,G,I,w){return f.c.template.update(b,f.c.foreach.Rc(R),G,I,w)}},f.m.Ra.foreach=!1,f.h.ea.foreach=!0,f.c.hasfocus={init:function(b,R,G){function I(B){b.__ko_hasfocusUpdating=!0;var k=b.ownerDocument;if("activeElement"in k){var O;try{O=k.activeElement}catch{O=k.body}B=O===b}k=R(),f.m.eb(k,G,"hasfocus",B,!0),b.__ko_hasfocusLastValue=B,b.__ko_hasfocusUpdating=!1}var w=I.bind(null,!0),M=I.bind(null,!1);f.a.B(b,"focus",w),f.a.B(b,"focusin",w),f.a.B(b,"blur",M),f.a.B(b,"focusout",M),b.__ko_hasfocusLastValue=!1},update:function(b,R){var G=!!f.a.f(R());b.__ko_hasfocusUpdating||b.__ko_hasfocusLastValue===G||(G?b.focus():b.blur(),!G&&b.__ko_hasfocusLastValue&&b.ownerDocument.body.focus(),f.u.G(f.a.Fb,null,[b,G?"focusin":"focusout"]))}},f.m.wa.hasfocus=!0,f.c.hasFocus=f.c.hasfocus,f.m.wa.hasFocus="hasfocus",f.c.html={init:function(){return{controlsDescendantBindings:!0}},update:function(b,R){f.a.fc(b,R())}},function(){function b(R,G,I){f.c[R]={init:function(w,M,B,k,O){var N,z,K={},te,H,j;if(G){k=B.get("as");var ee=B.get("noChildContext");j=!(k&&ee),K={as:k,noChildContext:ee,exportDependencies:j}}return H=(te=B.get("completeOn")=="render")||B.has(f.i.pa),f.o(function(){var fe=f.a.f(M()),Te=!I!=!fe,de=!z,xe;(j||Te!==N)&&(H&&(O=f.i.Cb(w,O)),Te&&((!G||j)&&(K.dataDependency=f.S.o()),xe=G?O.createChildContext(typeof fe=="function"?fe:M,K):f.S.qa()?O.extend(null,K):O),de&&f.S.qa()&&(z=f.a.Ca(f.h.childNodes(w),!0)),Te?(de||f.h.va(w,f.a.Ca(z)),f.Oa(xe,w)):(f.h.Ea(w),te||f.i.ma(w,f.i.H)),N=Te)},null,{l:w}),{controlsDescendantBindings:!0}}},f.m.Ra[R]=!1,f.h.ea[R]=!0}b("if"),b("ifnot",!1,!0),b("with",!0)}(),f.c.let={init:function(b,R,G,I,w){return R=w.extend(R),f.Oa(R,b),{controlsDescendantBindings:!0}}},f.h.ea.let=!0;var A={};f.c.options={init:function(b){if(f.a.R(b)!=="select")throw Error("options binding applies only to SELECT elements");for(;0<b.length;)b.remove(0);return{controlsDescendantBindings:!0}},update:function(b,R,G){function I(){return f.a.jb(b.options,function(ee){return ee.selected})}function w(ee,fe,Te){var de=typeof fe;return de=="function"?fe(ee):de=="string"?ee[fe]:Te}function M(ee,fe){if(H&&N)f.i.ma(b,f.i.H);else if(te.length){var Te=0<=f.a.A(te,f.w.M(fe[0]));f.a.Zc(fe[0],Te),H&&!Te&&f.u.G(f.a.Fb,null,[b,"change"])}}var B=b.multiple,k=b.length!=0&&B?b.scrollTop:null,O=f.a.f(R()),N=G.get("valueAllowUnset")&&G.has("value"),z=G.get("optionsIncludeDestroyed");R={};var K,te=[];N||(B?te=f.a.Mb(I(),f.w.M):0<=b.selectedIndex&&te.push(f.w.M(b.options[b.selectedIndex]))),O&&(typeof O.length>"u"&&(O=[O]),K=f.a.jb(O,function(ee){return z||ee===e||ee===null||!f.a.f(ee._destroy)}),G.has("optionsCaption")&&(O=f.a.f(G.get("optionsCaption")),O!==null&&O!==e&&K.unshift(A)));var H=!1;if(R.beforeRemove=function(ee){b.removeChild(ee)},O=M,G.has("optionsAfterRender")&&typeof G.get("optionsAfterRender")=="function"&&(O=function(ee,fe){M(0,fe),f.u.G(G.get("optionsAfterRender"),null,[fe[0],ee!==A?ee:e])}),f.a.ec(b,K,function(ee,fe,Te){return Te.length&&(te=!N&&Te[0].selected?[f.w.M(Te[0])]:[],H=!0),fe=b.ownerDocument.createElement("option"),ee===A?(f.a.Bb(fe,G.get("optionsCaption")),f.w.cb(fe,e)):(Te=w(ee,G.get("optionsValue"),ee),f.w.cb(fe,f.a.f(Te)),ee=w(ee,G.get("optionsText"),Te),f.a.Bb(fe,ee)),[fe]},R,O),!N){var j;B?j=te.length&&I().length<te.length:j=te.length&&0<=b.selectedIndex?f.w.M(b.options[b.selectedIndex])!==te[0]:te.length||0<=b.selectedIndex,j&&f.u.G(f.a.Fb,null,[b,"change"])}(N||f.S.Ya())&&f.i.ma(b,f.i.H),f.a.wd(b),k&&20<Math.abs(k-b.scrollTop)&&(b.scrollTop=k)}},f.c.options.$b=f.a.g.Z(),f.c.selectedOptions={init:function(b,R,G){function I(){var B=R(),k=[];f.a.D(b.getElementsByTagName("option"),function(O){O.selected&&k.push(f.w.M(O))}),f.m.eb(B,G,"selectedOptions",k)}function w(){var B=f.a.f(R()),k=b.scrollTop;B&&typeof B.length=="number"&&f.a.D(b.getElementsByTagName("option"),function(O){var N=0<=f.a.A(B,f.w.M(O));O.selected!=N&&f.a.Zc(O,N)}),b.scrollTop=k}if(f.a.R(b)!="select")throw Error("selectedOptions binding applies only to SELECT elements");var M;f.i.subscribe(b,f.i.H,function(){M?I():(f.a.B(b,"change",I),M=f.o(w,null,{l:b}))},null,{notifyImmediately:!0})},update:function(){}},f.m.wa.selectedOptions=!0,f.c.style={update:function(b,R){var G=f.a.f(R()||{});f.a.P(G,function(I,w){if(w=f.a.f(w),(w===null||w===e||w===!1)&&(w=""),o)o(b).css(I,w);else if(/^--/.test(I))b.style.setProperty(I,w);else{I=I.replace(/-(\w)/g,function(B,k){return k.toUpperCase()});var M=b.style[I];b.style[I]=w,w===M||b.style[I]!=M||isNaN(w)||(b.style[I]=w+"px")}})}},f.c.submit={init:function(b,R,G,I,w){if(typeof R()!="function")throw Error("The value for a submit binding must be a function");f.a.B(b,"submit",function(M){var B,k=R();try{B=k.call(w.$data,b)}finally{B!==!0&&(M.preventDefault?M.preventDefault():M.returnValue=!1)}})}},f.c.text={init:function(){return{controlsDescendantBindings:!0}},update:function(b,R){f.a.Bb(b,R())}},f.h.ea.text=!0,function(){if(t&&t.navigator){var b=function(K){if(K)return parseFloat(K[1])},R=t.navigator.userAgent,G,I,w,M,B;(G=t.opera&&t.opera.version&&parseInt(t.opera.version()))||(B=b(R.match(/Edge\/([^ ]+)$/)))||b(R.match(/Chrome\/([^ ]+)/))||(I=b(R.match(/Version\/([^ ]+) Safari/)))||(w=b(R.match(/Firefox\/([^ ]+)/)))||(M=f.a.W||b(R.match(/MSIE ([^ ]+)/)))||(M=b(R.match(/rv:([^ )]+)/)))}if(8<=M&&10>M)var k=f.a.g.Z(),O=f.a.g.Z(),N=function(K){var te=this.activeElement;(te=te&&f.a.g.get(te,O))&&te(K)},z=function(K,te){var H=K.ownerDocument;f.a.g.get(H,k)||(f.a.g.set(H,k,!0),f.a.B(H,"selectionchange",N)),f.a.g.set(K,O,te)};f.c.textInput={init:function(K,te,H){function j(Ne,Oe){f.a.B(K,Ne,Oe)}function ee(){var Ne=f.a.f(te());(Ne===null||Ne===e)&&(Ne=""),Ce!==e&&Ne===Ce?f.a.setTimeout(ee,4):K.value!==Ne&&(Le=!0,K.value=Ne,Le=!1,de=K.value)}function fe(){xe||(Ce=K.value,xe=f.a.setTimeout(Te,4))}function Te(){clearTimeout(xe),Ce=xe=e;var Ne=K.value;de!==Ne&&(de=Ne,f.m.eb(te(),H,"textInput",Ne))}var de=K.value,xe,Ce,Ie=f.a.W==9?fe:Te,Le=!1;M&&j("keypress",Te),11>M&&j("propertychange",function(Ne){Le||Ne.propertyName!=="value"||Ie(Ne)}),M==8&&(j("keyup",Te),j("keydown",Te)),z&&(z(K,Ie),j("dragend",fe)),(!M||9<=M)&&j("input",Ie),5>I&&f.a.R(K)==="textarea"?(j("keydown",fe),j("paste",fe),j("cut",fe)):11>G?j("keydown",fe):4>w?(j("DOMAutoComplete",Te),j("dragdrop",Te),j("drop",Te)):B&&K.type==="number"&&j("keydown",fe),j("change",Te),j("blur",Te),f.o(ee,null,{l:K})}},f.m.wa.textInput=!0,f.c.textinput={preprocess:function(K,te,H){H("textInput",K)}}}(),f.c.uniqueName={init:function(b,R){if(R()){var G="ko_unique_"+ ++f.c.uniqueName.rd;f.a.Yc(b,G)}}},f.c.uniqueName.rd=0,f.c.using={init:function(b,R,G,I,w){var M;return G.has("as")&&(M={as:G.get("as"),noChildContext:G.get("noChildContext")}),R=w.createChildContext(R,M),f.Oa(R,b),{controlsDescendantBindings:!0}}},f.h.ea.using=!0,f.c.value={init:function(b,R,G){var I=f.a.R(b),w=I=="input";if(!w||b.type!="checkbox"&&b.type!="radio"){var M=[],B=G.get("valueUpdate"),k=!1,O=null;B&&(typeof B=="string"?M=[B]:M=f.a.wc(B),f.a.Pa(M,"change"));var N=function(){O=null,k=!1;var te=R(),H=f.w.M(b);f.m.eb(te,G,"value",H)};!f.a.W||!w||b.type!="text"||b.autocomplete=="off"||b.form&&b.form.autocomplete=="off"||f.a.A(M,"propertychange")!=-1||(f.a.B(b,"propertychange",function(){k=!0}),f.a.B(b,"focus",function(){k=!1}),f.a.B(b,"blur",function(){k&&N()})),f.a.D(M,function(te){var H=N;f.a.Ud(te,"after")&&(H=function(){O=f.w.M(b),f.a.setTimeout(N,0)},te=te.substring(5)),f.a.B(b,te,H)});var z;if(z=w&&b.type=="file"?function(){var te=f.a.f(R());te===null||te===e||te===""?b.value="":f.u.G(N)}:function(){var te=f.a.f(R()),H=f.w.M(b);O!==null&&te===O?f.a.setTimeout(z,0):(te!==H||H===e)&&(I==="select"?(H=G.get("valueAllowUnset"),f.w.cb(b,te,H),H||te===f.w.M(b)||f.u.G(N)):f.w.cb(b,te))},I==="select"){var K;f.i.subscribe(b,f.i.H,function(){K?G.get("valueAllowUnset")?z():N():(f.a.B(b,"change",N),K=f.o(z,null,{l:b}))},null,{notifyImmediately:!0})}else f.a.B(b,"change",N),f.o(z,null,{l:b})}else f.ib(b,{checkedValue:R})},update:function(){}},f.m.wa.value=!0,f.c.visible={update:function(b,R){var G=f.a.f(R()),I=b.style.display!="none";G&&!I?b.style.display="":!G&&I&&(b.style.display="none")}},f.c.hidden={update:function(b,R){f.c.visible.update(b,function(){return!f.a.f(R())})}},function(b){f.c[b]={init:function(R,G,I,w,M){return f.c.event.init.call(this,R,function(){var B={};return B[b]=G(),B},I,w,M)}}}("click"),f.ca=function(){},f.ca.prototype.renderTemplateSource=function(){throw Error("Override renderTemplateSource")},f.ca.prototype.createJavaScriptEvaluatorBlock=function(){throw Error("Override createJavaScriptEvaluatorBlock")},f.ca.prototype.makeTemplateSource=function(b,R){if(typeof b=="string"){R=R||n;var G=R.getElementById(b);if(!G)throw Error("Cannot find template with ID "+b);return new f.C.F(G)}if(b.nodeType==1||b.nodeType==8)return new f.C.ia(b);throw Error("Unknown template type: "+b)},f.ca.prototype.renderTemplate=function(b,R,G,I){return b=this.makeTemplateSource(b,I),this.renderTemplateSource(b,R,G,I)},f.ca.prototype.isTemplateRewritten=function(b,R){return this.allowTemplateRewriting===!1?!0:this.makeTemplateSource(b,R).data("isRewritten")},f.ca.prototype.rewriteTemplate=function(b,R,G){b=this.makeTemplateSource(b,G),R=R(b.text()),b.text(R),b.data("isRewritten",!0)},f.b("templateEngine",f.ca),f.kc=function(){function b(I,w,M,B){I=f.m.ac(I);for(var k=f.m.Ra,O=0;O<I.length;O++){var N=I[O].key;if(Object.prototype.hasOwnProperty.call(k,N)){var z=k[N];if(typeof z=="function"){if(N=z(I[O].value))throw Error(N)}else if(!z)throw Error("This template engine does not support the '"+N+"' binding within its templates")}}return M="ko.__tr_ambtns(function($context,$element){return(function(){return{ "+f.m.vb(I,{valueAccessors:!0})+" } })()},'"+M.toLowerCase()+"')",B.createJavaScriptEvaluatorBlock(M)+w}var R=/(<([a-z]+\d*)(?:\s+(?!data-bind\s*=\s*)[a-z0-9\-]+(?:=(?:\"[^\"]*\"|\'[^\']*\'|[^>]*))?)*\s+)data-bind\s*=\s*(["'])([\s\S]*?)\3/gi,G=/\x3c!--\s*ko\b\s*([\s\S]*?)\s*--\x3e/g;return{xd:function(I,w,M){w.isTemplateRewritten(I,M)||w.rewriteTemplate(I,function(B){return f.kc.Ld(B,w)},M)},Ld:function(I,w){return I.replace(R,function(M,B,k,O,N){return b(N,B,k,w)}).replace(G,function(M,B){return b(B,"<!-- ko -->","#comment",w)})},md:function(I,w){return f.aa.Xb(function(M,B){var k=M.nextSibling;k&&k.nodeName.toLowerCase()===w&&f.ib(k,I,B)})}}}(),f.b("__tr_ambtns",f.kc.md),function(){f.C={},f.C.F=function(G){if(this.F=G){var I=f.a.R(G);this.ab=I==="script"?1:I==="textarea"?2:I=="template"&&G.content&&G.content.nodeType===11?3:4}},f.C.F.prototype.text=function(){var G=this.ab===1?"text":this.ab===2?"value":"innerHTML";if(arguments.length==0)return this.F[G];var I=arguments[0];G==="innerHTML"?f.a.fc(this.F,I):this.F[G]=I};var b=f.a.g.Z()+"_";f.C.F.prototype.data=function(G){if(arguments.length===1)return f.a.g.get(this.F,b+G);f.a.g.set(this.F,b+G,arguments[1])};var R=f.a.g.Z();f.C.F.prototype.nodes=function(){var G=this.F;if(arguments.length==0){var I=f.a.g.get(G,R)||{},w=I.lb||(this.ab===3?G.content:this.ab===4?G:e);if(!w||I.jd){var M=this.text();M&&M!==I.bb&&(w=f.a.Md(M,G.ownerDocument),f.a.g.set(G,R,{lb:w,bb:M,jd:!0}))}return w}I=arguments[0],this.ab!==e&&this.text(""),f.a.g.set(G,R,{lb:I})},f.C.ia=function(G){this.F=G},f.C.ia.prototype=new f.C.F,f.C.ia.prototype.constructor=f.C.ia,f.C.ia.prototype.text=function(){if(arguments.length==0){var G=f.a.g.get(this.F,R)||{};return G.bb===e&&G.lb&&(G.bb=G.lb.innerHTML),G.bb}f.a.g.set(this.F,R,{bb:arguments[0]})},f.b("templateSources",f.C),f.b("templateSources.domElement",f.C.F),f.b("templateSources.anonymousTemplate",f.C.ia)}(),function(){function b(O,N,z){var K;for(N=f.h.nextSibling(N);O&&(K=O)!==N;)O=f.h.nextSibling(K),z(K,O)}function R(O,N){if(O.length){var z=O[0],K=O[O.length-1],te=z.parentNode,H=f.ga.instance,j=H.preprocessNode;if(j){if(b(z,K,function(ee,fe){var Te=ee.previousSibling,de=j.call(H,ee);de&&(ee===z&&(z=de[0]||fe),ee===K&&(K=de[de.length-1]||Te))}),O.length=0,!z)return;z===K?O.push(z):(O.push(z,K),f.a.Ua(O,te))}b(z,K,function(ee){ee.nodeType!==1&&ee.nodeType!==8||f.vc(N,ee)}),b(z,K,function(ee){ee.nodeType!==1&&ee.nodeType!==8||f.aa.cd(ee,[N])}),f.a.Ua(O,te)}}function G(O){return O.nodeType?O:0<O.length?O[0]:null}function I(O,N,z,K,te){te=te||{};var H=(O&&G(O)||z||{}).ownerDocument,j=te.templateEngine||M;if(f.kc.xd(z,j,H),z=j.renderTemplate(z,K,te,H),typeof z.length!="number"||0<z.length&&typeof z[0].nodeType!="number")throw Error("Template engine must return an array of DOM nodes");switch(H=!1,N){case"replaceChildren":f.h.va(O,z),H=!0;break;case"replaceNode":f.a.Xc(O,z),H=!0;break;case"ignoreTargetNode":break;default:throw Error("Unknown renderMode: "+N)}return H&&(R(z,K),te.afterRender&&f.u.G(te.afterRender,null,[z,K[te.as||"$data"]]),N=="replaceChildren"&&f.i.ma(O,f.i.H)),z}function w(O,N,z){return f.O(O)?O():typeof O=="function"?O(N,z):O}var M;f.gc=function(O){if(O!=e&&!(O instanceof f.ca))throw Error("templateEngine must inherit from ko.templateEngine");M=O},f.dc=function(O,N,z,K,te){if(z=z||{},(z.templateEngine||M)==e)throw Error("Set a template engine before calling renderTemplate");if(te=te||"replaceChildren",K){var H=G(K);return f.$(function(){var ee=N&&N instanceof f.fa?N:new f.fa(N,null,null,null,{exportDependencies:!0}),j=w(O,ee.$data,ee),ee=I(K,te,j,ee,z);te=="replaceNode"&&(K=ee,H=G(K))},null,{Sa:function(){return!H||!f.a.Sb(H)},l:H&&te=="replaceNode"?H.parentNode:H})}return f.aa.Xb(function(j){f.dc(O,N,z,j,"replaceNode")})},f.Qd=function(O,N,z,K,te){function H(Ce,Ie){f.u.G(f.a.ec,null,[K,Ce,ee,z,j,Ie]),f.i.ma(K,f.i.H)}function j(Ce,Ie){R(Ie,fe),z.afterRender&&z.afterRender(Ie,Ce),fe=null}function ee(Ce,Ie){fe=te.createChildContext(Ce,{as:Te,noChildContext:z.noChildContext,extend:function(Ne){Ne.$index=Ie,Te&&(Ne[Te+"Index"]=Ie)}});var Le=w(O,Ce,fe);return I(K,"ignoreTargetNode",Le,fe,z)}var fe,Te=z.as,de=z.includeDestroyed===!1||f.options.foreachHidesDestroyed&&!z.includeDestroyed;if(de||z.beforeRemove||!f.Pc(N))return f.$(function(){var Ce=f.a.f(N)||[];typeof Ce.length>"u"&&(Ce=[Ce]),de&&(Ce=f.a.jb(Ce,function(Ie){return Ie===e||Ie===null||!f.a.f(Ie._destroy)})),H(Ce)},null,{l:K});H(N.v());var xe=N.subscribe(function(Ce){H(N(),Ce)},null,"arrayChange");return xe.l(K),xe};var B=f.a.g.Z(),k=f.a.g.Z();f.c.template={init:function(O,N){var z=f.a.f(N());if(typeof z=="string"||"name"in z)f.h.Ea(O);else if("nodes"in z){if(z=z.nodes||[],f.O(z))throw Error('The "nodes" option must be a plain, non-observable array.');var K=z[0]&&z[0].parentNode;K&&f.a.g.get(K,k)||(K=f.a.Yb(z),f.a.g.set(K,k,!0)),new f.C.ia(O).nodes(K)}else if(z=f.h.childNodes(O),0<z.length)K=f.a.Yb(z),new f.C.ia(O).nodes(K);else throw Error("Anonymous template defined, but no template content was provided");return{controlsDescendantBindings:!0}},update:function(O,N,z,K,te){var H=N();N=f.a.f(H),z=!0,K=null,typeof N=="string"?N={}:(H="name"in N?N.name:O,"if"in N&&(z=f.a.f(N.if)),z&&"ifnot"in N&&(z=!f.a.f(N.ifnot)),z&&!H&&(z=!1)),"foreach"in N?K=f.Qd(H,z&&N.foreach||[],N,O,te):z?(z=te,"data"in N&&(z=te.createChildContext(N.data,{as:N.as,noChildContext:N.noChildContext,exportDependencies:!0})),K=f.dc(H,z,N,O)):f.h.Ea(O),te=K,(N=f.a.g.get(O,B))&&typeof N.s=="function"&&N.s(),f.a.g.set(O,B,!te||te.ja&&!te.ja()?e:te)}},f.m.Ra.template=function(O){return O=f.m.ac(O),O.length==1&&O[0].unknown||f.m.Id(O,"name")?null:"This template engine does not support anonymous templates nested within its templates"},f.h.ea.template=!0}(),f.b("setTemplateEngine",f.gc),f.b("renderTemplate",f.dc),f.a.Kc=function(b,R,G){if(b.length&&R.length){var I,w,M,B,k;for(I=w=0;(!G||I<G)&&(B=b[w]);++w){for(M=0;k=R[M];++M)if(B.value===k.value){B.moved=k.index,k.moved=B.index,R.splice(M,1),I=M=0;break}I+=M}}},f.a.Pb=function(){function b(R,G,I,w,M){var B=Math.min,k=Math.max,O=[],N,z=R.length,K,te=G.length,H=te-z||1,j=z+te+1,ee,fe,Te;for(N=0;N<=z;N++)for(fe=ee,O.push(ee=[]),Te=B(te,N+H),K=k(0,N-1);K<=Te;K++)ee[K]=K?N?R[N-1]===G[K-1]?fe[K-1]:B(fe[K]||j,ee[K-1]||j)+1:K+1:N+1;for(B=[],k=[],H=[],N=z,K=te;N||K;)te=O[N][K]-1,K&&te===O[N][K-1]?k.push(B[B.length]={status:I,value:G[--K],index:K}):N&&te===O[N-1][K]?H.push(B[B.length]={status:w,value:R[--N],index:N}):(--K,--N,M.sparse||B.push({status:"retained",value:G[K]}));return f.a.Kc(H,k,!M.dontLimitMoves&&10*z),B.reverse()}return function(R,G,I){return I=typeof I=="boolean"?{dontLimitMoves:I}:I||{},R=R||[],G=G||[],R.length<G.length?b(R,G,"added","deleted",I):b(G,R,"deleted","added",I)}}(),f.b("utils.compareArrays",f.a.Pb),function(){function b(I,w,M,B,k){var O=[],N=f.$(function(){var z=w(M,k,f.a.Ua(O,I))||[];0<O.length&&(f.a.Xc(O,z),B&&f.u.G(B,null,[M,z,k])),O.length=0,f.a.Nb(O,z)},null,{l:I,Sa:function(){return!f.a.kd(O)}});return{Y:O,$:N.ja()?N:e}}var R=f.a.g.Z(),G=f.a.g.Z();f.a.ec=function(I,w,M,B,k,O){function N(mt){Le={Aa:mt,pb:f.ta(fe++)},j.push(Le),H||Ie.push(Le)}function z(mt){Le=te[mt],fe!==Le.pb.v()&&Ce.push(Le),Le.pb(fe++),f.a.Ua(Le.Y,I),j.push(Le)}function K(mt,Pn){if(mt)for(var cn=0,ge=Pn.length;cn<ge;cn++)f.a.D(Pn[cn].Y,function(Ve){mt(Ve,cn,Pn[cn].Aa)})}w=w||[],typeof w.length>"u"&&(w=[w]),B=B||{};var te=f.a.g.get(I,R),H=!te,j=[],ee=0,fe=0,Te=[],de=[],xe=[],Ce=[],Ie=[],Le,Ne=0;if(H)f.a.D(w,N);else{if(!O||te&&te._countWaitingForRemove){var Oe=f.a.Mb(te,function(mt){return mt.Aa});O=f.a.Pb(Oe,w,{dontLimitMoves:B.dontLimitMoves,sparse:!0})}for(var Oe=0,qe,Rt,Lt;qe=O[Oe];Oe++)switch(Rt=qe.moved,Lt=qe.index,qe.status){case"deleted":for(;ee<Lt;)z(ee++);Rt===e&&(Le=te[ee],Le.$&&(Le.$.s(),Le.$=e),f.a.Ua(Le.Y,I).length&&(B.beforeRemove&&(j.push(Le),Ne++,Le.Aa===G?Le=null:xe.push(Le)),Le&&Te.push.apply(Te,Le.Y))),ee++;break;case"added":for(;fe<Lt;)z(ee++);Rt!==e?(de.push(j.length),z(Rt)):N(qe.value)}for(;fe<w.length;)z(ee++);j._countWaitingForRemove=Ne}f.a.g.set(I,R,j),K(B.beforeMove,Ce),f.a.D(Te,B.beforeRemove?f.oa:f.removeNode);var ke,Ht,ut;try{ut=I.ownerDocument.activeElement}catch{}if(de.length)for(;(Oe=de.shift())!=e;){for(Le=j[Oe],ke=e;Oe;)if((Ht=j[--Oe].Y)&&Ht.length){ke=Ht[Ht.length-1];break}for(w=0;ee=Le.Y[w];ke=ee,w++)f.h.Wb(I,ee,ke)}for(Oe=0;Le=j[Oe];Oe++){for(Le.Y||f.a.extend(Le,b(I,M,Le.Aa,k,Le.pb)),w=0;ee=Le.Y[w];ke=ee,w++)f.h.Wb(I,ee,ke);!Le.Ed&&k&&(k(Le.Aa,Le.Y,Le.pb),Le.Ed=!0,ke=Le.Y[Le.Y.length-1])}for(ut&&I.ownerDocument.activeElement!=ut&&ut.focus(),K(B.beforeRemove,xe),Oe=0;Oe<xe.length;++Oe)xe[Oe].Aa=G;K(B.afterMove,Ce),K(B.afterAdd,Ie)}}(),f.b("utils.setDomNodeChildrenFromArrayMapping",f.a.ec),f.ba=function(){this.allowTemplateRewriting=!1},f.ba.prototype=new f.ca,f.ba.prototype.constructor=f.ba,f.ba.prototype.renderTemplateSource=function(b,R,G,I){return(R=!(9>f.a.W)&&b.nodes?b.nodes():null)?f.a.la(R.cloneNode(!0).childNodes):(b=b.text(),f.a.ua(b,I))},f.ba.Ma=new f.ba,f.gc(f.ba.Ma),f.b("nativeTemplateEngine",f.ba),function(){f.$a=function(){var R=this.Hd=function(){if(!o||!o.tmpl)return 0;try{if(0<=o.tmpl.tag.tmpl.open.toString().indexOf("__"))return 2}catch{}return 1}();this.renderTemplateSource=function(G,I,w,M){if(M=M||n,w=w||{},2>R)throw Error("Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later.");var B=G.data("precompiled");return B||(B=G.text()||"",B=o.template(null,"{{ko_with $item.koBindingContext}}"+B+"{{/ko_with}}"),G.data("precompiled",B)),G=[I.$data],I=o.extend({koBindingContext:I},w.templateOptions),I=o.tmpl(B,G,I),I.appendTo(M.createElement("div")),o.fragments={},I},this.createJavaScriptEvaluatorBlock=function(G){return"{{ko_code ((function() { return "+G+" })()) }}"},this.addTemplate=function(G,I){n.write("<script type='text/html' id='"+G+"'>"+I+"<\/script>")},0<R&&(o.tmpl.tag.ko_code={open:"__.push($1 || '');"},o.tmpl.tag.ko_with={open:"with($1) {",close:"} "})},f.$a.prototype=new f.ca,f.$a.prototype.constructor=f.$a;var b=new f.$a;0<b.Hd&&f.gc(b),f.b("jqueryTmplTemplateEngine",f.$a)}()})})()})()})();var qCt=ko;typeof window<"u"?(ko=window.ko,typeof nM<"u"?window.ko=nM:delete window.ko):(ko=global.ko,typeof nM<"u"?global.ko=nM:delete global.ko);var PS=qCt;var X1o=_(T(),1);/** * @license * Knockout ES5 plugin - https://github.com/SteveSanderson/knockout-es5 * Copyright (c) Steve Sanderson * MIT license */var D6="__knockoutObservables",B6="__knockoutSubscribable";function pCe(e,t){if(!e)throw new Error("When calling ko.track, you must pass an object as the first parameter.");var n=this,i=bCe(e,!0);return t=t||Object.getOwnPropertyNames(e),t.forEach(function(o){if(!(o===D6||o===B6)&&!(o in i)){var r=e[o],s=r instanceof Array,a=n.isObservable(r)?r:s?n.observableArray(r):n.observable(r);Object.defineProperty(e,o,{configurable:!0,enumerable:!0,get:a,set:n.isWriteableObservable(a)?a:void 0}),i[o]=a,s&&e1t(n,a)}}),e}function bCe(e,t){var n=e[D6];return!n&&t&&(n={},Object.defineProperty(e,D6,{value:n})),n}function $Ct(e,t,n){var i=this,o={owner:e,deferEvaluation:!0};if(typeof n=="function")o.read=n;else{if("value"in n)throw new Error('For ko.defineProperty, you must not specify a "value" for the property. You must provide a "get" function.');if(typeof n.get!="function")throw new Error('For ko.defineProperty, the third parameter must be either an evaluator function, or an options object containing a function called "get".');o.read=n.get,o.write=n.set}return e[t]=i.computed(o),pCe.call(i,e,[t]),e}function e1t(e,t){var n=null;e.computed(function(){n&&(n.dispose(),n=null);var i=t();i instanceof Array&&(n=t1t(e,t,i))})}function t1t(e,t,n){var i=n1t(e,n);return i.subscribe(t)}function n1t(e,t){var n=t[B6];if(!n){n=new e.subscribable,Object.defineProperty(t,B6,{value:n});var i={};i1t(t,n,i),o1t(e,t,n,i)}return n}function i1t(e,t,n){["pop","push","reverse","shift","sort","splice","unshift"].forEach(function(i){var o=e[i];e[i]=function(){var r=o.apply(this,arguments);return n.pause!==!0&&t.notifySubscribers(this),r}})}function o1t(e,t,n,i){["remove","removeAll","destroy","destroyAll","replace"].forEach(function(o){Object.defineProperty(t,o,{enumerable:!1,value:function(){var r;i.pause=!0;try{r=e.observableArray.fn[o].apply(e.observableArray(t),arguments)}finally{i.pause=!1}return n.notifySubscribers(t),r}})})}function gCe(e,t){if(!e)return null;var n=bCe(e,!1);return n&&n[t]||null}function r1t(e,t){var n=gCe(e,t);n&&n.valueHasMutated()}function s1t(e){e.track=pCe,e.getObservable=gCe,e.valueHasMutated=r1t,e.defineProperty=$Ct}var iM={attachToKo:s1t};var P1o=_(T(),1),yCe="http://www.w3.org/2000/svg",xCe="cesium-svgPath-svg",a1t={register:function(e){e.bindingHandlers.cesiumSvgPath={init:function(t,n){let i=document.createElementNS(yCe,"svg:svg");i.setAttribute("class",xCe);let o=document.createElementNS(yCe,"path");return i.appendChild(o),e.virtualElements.setDomNodeChildren(t,[i]),e.computed({read:function(){let r=e.unwrap(n());o.setAttribute("d",e.unwrap(r.path));let s=e.unwrap(r.width),a=e.unwrap(r.height);i.setAttribute("width",s),i.setAttribute("height",a),i.setAttribute("viewBox",`0 0 ${s} ${a}`),r.css&&i.setAttribute("class",`${xCe} ${e.unwrap(r.css)}`)},disposeWhenNodeIsRemoved:t}),{controlsDescendantBindings:!0}}},e.virtualElements.allowedBindings.cesiumSvgPath=!0}},oM=a1t;iM.attachToKo(PS);oM.register(PS);var Se=PS;function rM(e){l(e)||(e=new xh),this._clock=e,this._eventHelper=new dr,this._eventHelper.add(e.onTick,this.synchronize,this),this.systemTime=Se.observable(q.now()),this.systemTime.equalityComparer=q.equals,this.startTime=Se.observable(e.startTime),this.startTime.equalityComparer=q.equals,this.startTime.subscribe(function(t){e.startTime=t,this.synchronize()},this),this.stopTime=Se.observable(e.stopTime),this.stopTime.equalityComparer=q.equals,this.stopTime.subscribe(function(t){e.stopTime=t,this.synchronize()},this),this.currentTime=Se.observable(e.currentTime),this.currentTime.equalityComparer=q.equals,this.currentTime.subscribe(function(t){e.currentTime=t,this.synchronize()},this),this.multiplier=Se.observable(e.multiplier),this.multiplier.subscribe(function(t){e.multiplier=t,this.synchronize()},this),this.clockStep=Se.observable(e.clockStep),this.clockStep.subscribe(function(t){e.clockStep=t,this.synchronize()},this),this.clockRange=Se.observable(e.clockRange),this.clockRange.subscribe(function(t){e.clockRange=t,this.synchronize()},this),this.canAnimate=Se.observable(e.canAnimate),this.canAnimate.subscribe(function(t){e.canAnimate=t,this.synchronize()},this),this.shouldAnimate=Se.observable(e.shouldAnimate),this.shouldAnimate.subscribe(function(t){e.shouldAnimate=t,this.synchronize()},this),Se.track(this,["systemTime","startTime","stopTime","currentTime","multiplier","clockStep","clockRange","canAnimate","shouldAnimate"])}Object.defineProperties(rM.prototype,{clock:{get:function(){return this._clock}}});rM.prototype.synchronize=function(){let e=this._clock;this.systemTime=q.now(),this.startTime=e.startTime,this.stopTime=e.stopTime,this.currentTime=e.currentTime,this.multiplier=e.multiplier,this.clockStep=e.clockStep,this.clockRange=e.clockRange,this.canAnimate=e.canAnimate,this.shouldAnimate=e.shouldAnimate};rM.prototype.isDestroyed=function(){return!1};rM.prototype.destroy=function(){this._eventHelper.removeAll(),me(this)};var sM=rM;var Y1o=_(T(),1);function c1t(){this.canExecute=void 0,this.beforeExecute=void 0,this.afterExecute=void 0,pe.throwInstantiationError()}var O6=c1t;var J1o=_(T(),1);var aM={};aM.createCheckbox=function(e,t,n){let i=document.createElement("div"),o=document.createElement("label"),r=document.createElement("input");r.type="checkbox";let s=`checked: ${t}`;return l(n)&&(s+=`, enable: ${n}`),r.setAttribute("data-bind",s),o.appendChild(r),o.appendChild(document.createTextNode(e)),i.appendChild(o),i};aM.createSection=function(e,t,n,i){let o=document.createElement("div");o.className="cesium-cesiumInspector-section",o.setAttribute("data-bind",`css: { "cesium-cesiumInspector-section-collapsed": !${n} }`),e.appendChild(o);let r=document.createElement("h3");r.className="cesium-cesiumInspector-sectionHeader",r.appendChild(document.createTextNode(t)),r.setAttribute("data-bind",`click: ${i}`),o.appendChild(r);let s=document.createElement("div");return s.className="cesium-cesiumInspector-sectionContent",o.appendChild(s),s};aM.createRangeInput=function(e,t,n,i,o,r){r=r??t;let s=document.createElement("input");s.setAttribute("data-bind",`value: ${r}`),s.type="number";let a=document.createElement("input");a.type="range",a.min=n,a.max=i,a.step=o??"any",a.setAttribute("data-bind",`valueUpdate: "input", value: ${t}`);let c=document.createElement("div");c.appendChild(a);let d=document.createElement("div");return d.className="cesium-cesiumInspector-slider",d.appendChild(document.createTextNode(e)),d.appendChild(s),d.appendChild(c),d};aM.createButton=function(e,t,n){let i=document.createElement("button");i.type="button",i.textContent=e,i.className="cesium-cesiumInspector-pickButton";let o=`click: ${t}`;return l(n)&&(o+=`, css: {"cesium-cesiumInspector-pickButtonHighlight" : ${n}}`),i.setAttribute("data-bind",o),i};var Ja=aM;var tVo=_(T(),1);function _Ce(e,t){this._command=e,t=t??Y.EMPTY_OBJECT,this.toggled=t.toggled??!1,this.tooltip=t.tooltip??"",Se.track(this,["toggled","tooltip"])}Object.defineProperties(_Ce.prototype,{command:{get:function(){return this._command}}});var Ky=_Ce;var aVo=_(T(),1);function l1t(e,t){t=t??!0;let n=new be,i=new be;function o(){let r={args:arguments,cancel:!1},s;return n.raiseEvent(r),r.cancel||(s=e.apply(null,arguments),i.raiseEvent(s)),s}return o.canExecute=t,Se.track(o,["canExecute"]),Object.defineProperties(o,{beforeExecute:{value:n},afterExecute:{value:i}}),o}var Rn=l1t;var dVo=_(T(),1);function d1t(e,t,n,i,o){return n.call(i,e[t]),Se.getObservable(e,t).subscribe(n,i,o)}var Ra=d1t;var pVo=_(T(),1);var vS="http://www.w3.org/2000/svg",CCe="http://www.w3.org/1999/xlink",pB,cM=D.fromCssColorString("rgba(247,250,255,0.384)"),bB=D.fromCssColorString("rgba(143,191,255,0.216)"),Y6=D.fromCssColorString("rgba(153,197,255,0.098)"),gB=D.fromCssColorString("rgba(255,255,255,0.086)"),u1t=D.fromCssColorString("rgba(255,255,255,0.267)"),m1t=D.fromCssColorString("rgba(255,255,255,0)"),TCe=D.fromCssColorString("rgba(66,67,68,0.3)"),SCe=D.fromCssColorString("rgba(0,0,0,0.5)");function Jy(e){return D.fromCssColorString(window.getComputedStyle(e).getPropertyValue("color"))}var lM={animation_pathReset:{tagName:"path",transform:"translate(16,16) scale(0.85) translate(-16,-16)",d:"M24.316,5.318,9.833,13.682,9.833,5.5,5.5,5.5,5.5,25.5,9.833,25.5,9.833,17.318,24.316,25.682z"},animation_pathPause:{tagName:"path",transform:"translate(16,16) scale(0.85) translate(-16,-16)",d:"M13,5.5,7.5,5.5,7.5,25.5,13,25.5zM24.5,5.5,19,5.5,19,25.5,24.5,25.5z"},animation_pathPlay:{tagName:"path",transform:"translate(16,16) scale(0.85) translate(-16,-16)",d:"M6.684,25.682L24.316,15.5L6.684,5.318V25.682z"},animation_pathPlayReverse:{tagName:"path",transform:"translate(16,16) scale(-0.85,0.85) translate(-16,-16)",d:"M6.684,25.682L24.316,15.5L6.684,5.318V25.682z"},animation_pathLoop:{tagName:"path",transform:"translate(16,16) scale(0.85) translate(-16,-16)",d:"M24.249,15.499c-0.009,4.832-3.918,8.741-8.75,8.75c-2.515,0-4.768-1.064-6.365-2.763l2.068-1.442l-7.901-3.703l0.744,8.694l2.193-1.529c2.244,2.594,5.562,4.242,9.26,4.242c6.767,0,12.249-5.482,12.249-12.249H24.249zM15.499,6.75c2.516,0,4.769,1.065,6.367,2.764l-2.068,1.443l7.901,3.701l-0.746-8.693l-2.192,1.529c-2.245-2.594-5.562-4.245-9.262-4.245C8.734,3.25,3.25,8.734,3.249,15.499H6.75C6.758,10.668,10.668,6.758,15.499,6.75z"},animation_pathClock:{tagName:"path",transform:"translate(16,16) scale(0.85) translate(-16,-15.5)",d:"M15.5,2.374C8.251,2.375,2.376,8.251,2.374,15.5C2.376,22.748,8.251,28.623,15.5,28.627c7.249-0.004,13.124-5.879,13.125-13.127C28.624,8.251,22.749,2.375,15.5,2.374zM15.5,25.623C9.909,25.615,5.385,21.09,5.375,15.5C5.385,9.909,9.909,5.384,15.5,5.374c5.59,0.01,10.115,4.535,10.124,10.125C25.615,21.09,21.091,25.615,15.5,25.623zM8.625,15.5c-0.001-0.552-0.448-0.999-1.001-1c-0.553,0-1,0.448-1,1c0,0.553,0.449,1,1,1C8.176,16.5,8.624,16.053,8.625,15.5zM8.179,18.572c-0.478,0.277-0.642,0.889-0.365,1.367c0.275,0.479,0.889,0.641,1.365,0.365c0.479-0.275,0.643-0.887,0.367-1.367C9.27,18.461,8.658,18.297,8.179,18.572zM9.18,10.696c-0.479-0.276-1.09-0.112-1.366,0.366s-0.111,1.09,0.365,1.366c0.479,0.276,1.09,0.113,1.367-0.366C9.821,11.584,9.657,10.973,9.18,10.696zM22.822,12.428c0.478-0.275,0.643-0.888,0.366-1.366c-0.275-0.478-0.89-0.642-1.366-0.366c-0.479,0.278-0.642,0.89-0.366,1.367C21.732,12.54,22.344,12.705,22.822,12.428zM12.062,21.455c-0.478-0.275-1.089-0.111-1.366,0.367c-0.275,0.479-0.111,1.09,0.366,1.365c0.478,0.277,1.091,0.111,1.365-0.365C12.704,22.344,12.54,21.732,12.062,21.455zM12.062,9.545c0.479-0.276,0.642-0.888,0.366-1.366c-0.276-0.478-0.888-0.642-1.366-0.366s-0.642,0.888-0.366,1.366C10.973,9.658,11.584,9.822,12.062,9.545zM22.823,18.572c-0.48-0.275-1.092-0.111-1.367,0.365c-0.275,0.479-0.112,1.092,0.367,1.367c0.477,0.275,1.089,0.113,1.365-0.365C23.464,19.461,23.3,18.848,22.823,18.572zM19.938,7.813c-0.477-0.276-1.091-0.111-1.365,0.366c-0.275,0.48-0.111,1.091,0.366,1.367s1.089,0.112,1.366-0.366C20.581,8.702,20.418,8.089,19.938,7.813zM23.378,14.5c-0.554,0.002-1.001,0.45-1.001,1c0.001,0.552,0.448,1,1.001,1c0.551,0,1-0.447,1-1C24.378,14.949,23.929,14.5,23.378,14.5zM15.501,6.624c-0.552,0-1,0.448-1,1l-0.466,7.343l-3.004,1.96c-0.478,0.277-0.642,0.889-0.365,1.365c0.275,0.479,0.889,0.643,1.365,0.367l3.305-1.676C15.39,16.99,15.444,17,15.501,17c0.828,0,1.5-0.671,1.5-1.5l-0.5-7.876C16.501,7.072,16.053,6.624,15.501,6.624zM15.501,22.377c-0.552,0-1,0.447-1,1s0.448,1,1,1s1-0.447,1-1S16.053,22.377,15.501,22.377zM18.939,21.455c-0.479,0.277-0.643,0.889-0.366,1.367c0.275,0.477,0.888,0.643,1.366,0.365c0.478-0.275,0.642-0.889,0.366-1.365C20.028,21.344,19.417,21.18,18.939,21.455z"},animation_pathWingButton:{tagName:"path",d:"m 4.5,0.5 c -2.216,0 -4,1.784 -4,4 l 0,24 c 0,2.216 1.784,4 4,4 l 13.71875,0 C 22.478584,27.272785 27.273681,22.511272 32.5,18.25 l 0,-13.75 c 0,-2.216 -1.784,-4 -4,-4 l -24,0 z"},animation_pathPointer:{tagName:"path",d:"M-15,-65,-15,-55,15,-55,15,-65,0,-95z"},animation_pathSwooshFX:{tagName:"path",d:"m 85,0 c 0,16.617 -4.813944,35.356 -13.131081,48.4508 h 6.099803 c 8.317138,-13.0948 13.13322,-28.5955 13.13322,-45.2124 0,-46.94483 -38.402714,-85.00262 -85.7743869,-85.00262 -1.0218522,0 -2.0373001,0.0241 -3.0506131,0.0589 45.958443,1.59437 82.723058,35.77285 82.723058,81.70532 z"}};function jh(e){let t=document.createElementNS(vS,e.tagName);for(let n in e)if(e.hasOwnProperty(n)&&n!=="tagName")if(n==="children"){let i=e.children.length;for(let o=0;o<i;++o)t.appendChild(jh(e.children[o]))}else n.indexOf("xlink:")===0?t.setAttributeNS(CCe,n.substring(6),e[n]):n==="textContent"?t.textContent=e[n]:t.setAttribute(n,e[n]);return t}function z6(e,t,n){let i=document.createElementNS(vS,"text");i.setAttribute("x",e),i.setAttribute("y",t),i.setAttribute("class","cesium-animation-svgText");let o=document.createElementNS(vS,"tspan");return o.textContent=n,i.appendChild(o),i}function h1t(e,t,n){e.setAttribute("transform",`translate(100,100) rotate(${n})`),t.setAttribute("transform",`rotate(${n})`)}var yB=new D;function as(e,t){let n=t.alpha,i=1-n;return yB.red=e.red*i+t.red*n,yB.green=e.green*i+t.green*n,yB.blue=e.blue*i+t.blue*n,yB.toCssColorString()}function H6(e,t,n){let i=lM[n],o={tagName:"g",class:"cesium-animation-rectButton",transform:`translate(${e},${t})`,children:[{tagName:"rect",class:"cesium-animation-buttonGlow",width:32,height:32,rx:2,ry:2},{tagName:"rect",class:"cesium-animation-buttonMain",width:32,height:32,rx:4,ry:4},{class:"cesium-animation-buttonPath",id:n,tagName:i.tagName,transform:i.transform,d:i.d},{tagName:"title",textContent:""}]};return jh(o)}function f1t(e,t,n){let i=lM[n],o=lM.animation_pathWingButton,r={tagName:"g",class:"cesium-animation-rectButton",transform:`translate(${e},${t})`,children:[{class:"cesium-animation-buttonGlow",id:"animation_pathWingButton",tagName:o.tagName,d:o.d},{class:"cesium-animation-buttonMain",id:"animation_pathWingButton",tagName:o.tagName,d:o.d},{class:"cesium-animation-buttonPath",id:n,tagName:i.tagName,transform:i.transform,d:i.d},{tagName:"title",textContent:""}]};return jh(r)}function p1t(e,t){let n=e._viewModel,i=n.shuttleRingDragging;if(!(i&&pB!==e))if(t.type==="mousedown"||i&&t.type==="mousemove"||t.type==="touchstart"&&t.touches.length===1||i&&t.type==="touchmove"&&t.touches.length===1){let o=e._centerX,r=e._centerY,a=e._svgNode.getBoundingClientRect(),c,d;if(t.type==="touchstart"||t.type==="touchmove"?(c=t.touches[0].clientX,d=t.touches[0].clientY):(c=t.clientX,d=t.clientY),!i&&(c>a.right||c<a.left||d<a.top||d>a.bottom))return;let u=e._shuttleRingPointer.getBoundingClientRect(),h=c-o-a.left,p=d-r-a.top,g=Math.atan2(p,h)*180/Math.PI+90;g>180&&(g-=360);let f=n.shuttleRingAngle;i||c<u.right&&c>u.left&&d>u.top&&d<u.bottom?(pB=e,n.shuttleRingDragging=!0,n.shuttleRingAngle=g):g<f?n.slower():g>f&&n.faster(),t.preventDefault()}else e===pB&&(pB=void 0),n.shuttleRingDragging=!1}function X0(e,t){this._viewModel=t,this.svgElement=e,this._enabled=void 0,this._toggled=void 0;let n=this;this._clickFunction=function(){let i=n._viewModel.command;i.canExecute&&i()},e.addEventListener("click",this._clickFunction,!0),this._subscriptions=[Ra(t,"toggled",this.setToggled,this),Ra(t,"tooltip",this.setTooltip,this),Ra(t.command,"canExecute",this.setEnabled,this)]}X0.prototype.destroy=function(){this.svgElement.removeEventListener("click",this._clickFunction,!0);let e=this._subscriptions;for(let t=0,n=e.length;t<n;t++)e[t].dispose();me(this)};X0.prototype.isDestroyed=function(){return!1};X0.prototype.setEnabled=function(e){if(this._enabled!==e){if(this._enabled=e,!e){this.svgElement.setAttribute("class","cesium-animation-buttonDisabled");return}if(this._toggled){this.svgElement.setAttribute("class","cesium-animation-rectButton cesium-animation-buttonToggled");return}this.svgElement.setAttribute("class","cesium-animation-rectButton")}};X0.prototype.setToggled=function(e){this._toggled!==e&&(this._toggled=e,this._enabled&&(e?this.svgElement.setAttribute("class","cesium-animation-rectButton cesium-animation-buttonToggled"):this.svgElement.setAttribute("class","cesium-animation-rectButton")))};X0.prototype.setTooltip=function(e){this.svgElement.getElementsByTagName("title")[0].textContent=e};function DL(e,t){e=Xn(e),this._viewModel=t,this._container=e,this._centerX=0,this._centerY=0,this._defsElement=void 0,this._svgNode=void 0,this._topG=void 0,this._lastHeight=void 0,this._lastWidth=void 0;let n=e.ownerDocument,i=document.createElement("style");i.textContent=".cesium-animation-rectButton .cesium-animation-buttonGlow { filter: url(#animation_blurred); }.cesium-animation-rectButton .cesium-animation-buttonMain { fill: url(#animation_buttonNormal); }.cesium-animation-buttonToggled .cesium-animation-buttonMain { fill: url(#animation_buttonToggled); }.cesium-animation-rectButton:hover .cesium-animation-buttonMain { fill: url(#animation_buttonHovered); }.cesium-animation-buttonDisabled .cesium-animation-buttonMain { fill: url(#animation_buttonDisabled); }.cesium-animation-shuttleRingG .cesium-animation-shuttleRingSwoosh { fill: url(#animation_shuttleRingSwooshGradient); }.cesium-animation-shuttleRingG:hover .cesium-animation-shuttleRingSwoosh { fill: url(#animation_shuttleRingSwooshHovered); }.cesium-animation-shuttleRingPointer { fill: url(#animation_shuttleRingPointerGradient); }.cesium-animation-shuttleRingPausePointer { fill: url(#animation_shuttleRingPointerPaused); }.cesium-animation-knobOuter { fill: url(#animation_knobOuter); }.cesium-animation-knobInner { fill: url(#animation_knobInner); }",n.head.insertBefore(i,n.head.childNodes[0]);let o=document.createElement("div");o.className="cesium-animation-theme",o.innerHTML='<div class="cesium-animation-themeNormal"></div><div class="cesium-animation-themeHover"></div><div class="cesium-animation-themeSelect"></div><div class="cesium-animation-themeDisabled"></div><div class="cesium-animation-themeKnob"></div><div class="cesium-animation-themePointer"></div><div class="cesium-animation-themeSwoosh"></div><div class="cesium-animation-themeSwooshHover"></div>',this._theme=o,this._themeNormal=o.childNodes[0],this._themeHover=o.childNodes[1],this._themeSelect=o.childNodes[2],this._themeDisabled=o.childNodes[3],this._themeKnob=o.childNodes[4],this._themePointer=o.childNodes[5],this._themeSwoosh=o.childNodes[6],this._themeSwooshHover=o.childNodes[7];let r=document.createElementNS(vS,"svg:svg");this._svgNode=r,r.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:xlink",CCe);let s=document.createElementNS(vS,"g");this._topG=s,this._realtimeSVG=new X0(f1t(3,4,"animation_pathClock"),t.playRealtimeViewModel),this._playReverseSVG=new X0(H6(44,99,"animation_pathPlayReverse"),t.playReverseViewModel),this._playForwardSVG=new X0(H6(124,99,"animation_pathPlay"),t.playForwardViewModel),this._pauseSVG=new X0(H6(84,99,"animation_pathPause"),t.pauseViewModel);let a=document.createElementNS(vS,"g");a.appendChild(this._realtimeSVG.svgElement),a.appendChild(this._playReverseSVG.svgElement),a.appendChild(this._playForwardSVG.svgElement),a.appendChild(this._pauseSVG.svgElement);let c=jh({tagName:"circle",class:"cesium-animation-shuttleRingBack",cx:100,cy:100,r:99});this._shuttleRingBackPanel=c;let d=lM.animation_pathSwooshFX,u=lM.animation_pathPointer,h=jh({tagName:"g",class:"cesium-animation-shuttleRingSwoosh",children:[{tagName:d.tagName,transform:"translate(100,97) scale(-1,1)",id:"animation_pathSwooshFX",d:d.d},{tagName:d.tagName,transform:"translate(100,97)",id:"animation_pathSwooshFX",d:d.d},{tagName:"line",x1:100,y1:8,x2:100,y2:22}]});this._shuttleRingSwooshG=h,this._shuttleRingPointer=jh({class:"cesium-animation-shuttleRingPointer",id:"animation_pathPointer",tagName:u.tagName,d:u.d});let p=jh({tagName:"g",transform:"translate(100,100)"});this._knobOuter=jh({tagName:"circle",class:"cesium-animation-knobOuter",cx:0,cy:0,r:71});let g=61,f=jh({tagName:"circle",class:"cesium-animation-knobInner",cx:0,cy:0,r:g});this._knobDate=z6(0,-24,""),this._knobTime=z6(0,-7,""),this._knobStatus=z6(0,-41,"");let y=jh({tagName:"circle",class:"cesium-animation-blank",cx:0,cy:0,r:g}),x=document.createElementNS(vS,"g");x.setAttribute("class","cesium-animation-shuttleRingG"),e.appendChild(o),s.appendChild(x),s.appendChild(p),s.appendChild(a),x.appendChild(c),x.appendChild(h),x.appendChild(this._shuttleRingPointer),p.appendChild(this._knobOuter),p.appendChild(f),p.appendChild(this._knobDate),p.appendChild(this._knobTime),p.appendChild(this._knobStatus),p.appendChild(y),r.appendChild(s),e.appendChild(r);let S=this;function C(P){p1t(S,P)}this._mouseCallback=C,c.addEventListener("mousedown",C,!0),c.addEventListener("touchstart",C,!0),h.addEventListener("mousedown",C,!0),h.addEventListener("touchstart",C,!0),n.addEventListener("mousemove",C,!0),n.addEventListener("touchmove",C,!0),n.addEventListener("mouseup",C,!0),n.addEventListener("touchend",C,!0),n.addEventListener("touchcancel",C,!0),this._shuttleRingPointer.addEventListener("mousedown",C,!0),this._shuttleRingPointer.addEventListener("touchstart",C,!0),this._knobOuter.addEventListener("mousedown",C,!0),this._knobOuter.addEventListener("touchstart",C,!0);let V=this._knobTime.childNodes[0],L=this._knobDate.childNodes[0],Z=this._knobStatus.childNodes[0],E;this._subscriptions=[Ra(t.pauseViewModel,"toggled",function(P){E!==P&&(E=P,E?S._shuttleRingPointer.setAttribute("class","cesium-animation-shuttleRingPausePointer"):S._shuttleRingPointer.setAttribute("class","cesium-animation-shuttleRingPointer"))}),Ra(t,"shuttleRingAngle",function(P){h1t(S._shuttleRingPointer,S._knobOuter,P)}),Ra(t,"dateLabel",function(P){L.textContent!==P&&(L.textContent=P)}),Ra(t,"timeLabel",function(P){V.textContent!==P&&(V.textContent=P)}),Ra(t,"multiplierLabel",function(P){Z.textContent!==P&&(Z.textContent=P)})],this.applyThemeChanges(),this.resize()}Object.defineProperties(DL.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});DL.prototype.isDestroyed=function(){return!1};DL.prototype.destroy=function(){l(this._observer)&&(this._observer.disconnect(),this._observer=void 0);let e=this._container.ownerDocument,t=this._mouseCallback;this._shuttleRingBackPanel.removeEventListener("mousedown",t,!0),this._shuttleRingBackPanel.removeEventListener("touchstart",t,!0),this._shuttleRingSwooshG.removeEventListener("mousedown",t,!0),this._shuttleRingSwooshG.removeEventListener("touchstart",t,!0),e.removeEventListener("mousemove",t,!0),e.removeEventListener("touchmove",t,!0),e.removeEventListener("mouseup",t,!0),e.removeEventListener("touchend",t,!0),e.removeEventListener("touchcancel",t,!0),this._shuttleRingPointer.removeEventListener("mousedown",t,!0),this._shuttleRingPointer.removeEventListener("touchstart",t,!0),this._knobOuter.removeEventListener("mousedown",t,!0),this._knobOuter.removeEventListener("touchstart",t,!0),this._container.removeChild(this._svgNode),this._container.removeChild(this._theme),this._realtimeSVG.destroy(),this._playReverseSVG.destroy(),this._playForwardSVG.destroy(),this._pauseSVG.destroy();let n=this._subscriptions;for(let i=0,o=n.length;i<o;i++)n[i].dispose();return me(this)};DL.prototype.resize=function(){let e=this._container.clientWidth,t=this._container.clientHeight;if(e===this._lastWidth&&t===this._lastHeight)return;let n=this._svgNode,i=200,o=132,r=e,s=t;e===0&&t===0?(r=i,s=o):e===0?(s=t,r=i*(t/o)):t===0&&(r=e,s=o*(e/i));let a=r/i,c=s/o;n.style.cssText=`width: ${r}px; height: ${s}px; position: absolute; bottom: 0; left: 0; overflow: hidden;`,n.setAttribute("width",r),n.setAttribute("height",s),n.setAttribute("viewBox",`0 0 ${r} ${s}`),this._topG.setAttribute("transform",`scale(${a},${c})`),this._centerX=Math.max(1,100*a),this._centerY=Math.max(1,100*c),this._lastHeight=e,this._lastWidth=t};DL.prototype.applyThemeChanges=function(){let e=this._container.ownerDocument;if(!e.body.contains(this._container)){if(l(this._observer))return;let u=this;u._observer=new MutationObserver(function(){e.body.contains(u._container)&&(u._observer.disconnect(),u._observer=void 0,u.applyThemeChanges())}),u._observer.observe(e,{childList:!0,subtree:!0});return}let t=Jy(this._themeNormal),n=Jy(this._themeHover),i=Jy(this._themeSelect),o=Jy(this._themeDisabled),r=Jy(this._themeKnob),s=Jy(this._themePointer),a=Jy(this._themeSwoosh),c=Jy(this._themeSwooshHover),d=jh({tagName:"defs",children:[{id:"animation_buttonNormal",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":as(t,cM)},{tagName:"stop",offset:"12%","stop-color":as(t,bB)},{tagName:"stop",offset:"46%","stop-color":as(t,Y6)},{tagName:"stop",offset:"81%","stop-color":as(t,gB)}]},{id:"animation_buttonHovered",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":as(n,cM)},{tagName:"stop",offset:"12%","stop-color":as(n,bB)},{tagName:"stop",offset:"46%","stop-color":as(n,Y6)},{tagName:"stop",offset:"81%","stop-color":as(n,gB)}]},{id:"animation_buttonToggled",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":as(i,cM)},{tagName:"stop",offset:"12%","stop-color":as(i,bB)},{tagName:"stop",offset:"46%","stop-color":as(i,Y6)},{tagName:"stop",offset:"81%","stop-color":as(i,gB)}]},{id:"animation_buttonDisabled",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-color":as(o,u1t)},{tagName:"stop",offset:"75%","stop-color":as(o,m1t)}]},{id:"animation_blurred",tagName:"filter",width:"200%",height:"200%",x:"-50%",y:"-50%",children:[{tagName:"feGaussianBlur",stdDeviation:4,in:"SourceGraphic"}]},{id:"animation_shuttleRingSwooshGradient",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-opacity":.2,"stop-color":a.toCssColorString()},{tagName:"stop",offset:"85%","stop-opacity":.85,"stop-color":a.toCssColorString()},{tagName:"stop",offset:"95%","stop-opacity":.05,"stop-color":a.toCssColorString()}]},{id:"animation_shuttleRingSwooshHovered",tagName:"linearGradient",x1:"50%",y1:"0%",x2:"50%",y2:"100%",children:[{tagName:"stop",offset:"0%","stop-opacity":.2,"stop-color":c.toCssColorString()},{tagName:"stop",offset:"85%","stop-opacity":.85,"stop-color":c.toCssColorString()},{tagName:"stop",offset:"95%","stop-opacity":.05,"stop-color":c.toCssColorString()}]},{id:"animation_shuttleRingPointerGradient",tagName:"linearGradient",x1:"0%",y1:"50%",x2:"100%",y2:"50%",children:[{tagName:"stop",offset:"0%","stop-color":s.toCssColorString()},{tagName:"stop",offset:"40%","stop-color":s.toCssColorString()},{tagName:"stop",offset:"60%","stop-color":as(s,SCe)},{tagName:"stop",offset:"100%","stop-color":as(s,SCe)}]},{id:"animation_shuttleRingPointerPaused",tagName:"linearGradient",x1:"0%",y1:"50%",x2:"100%",y2:"50%",children:[{tagName:"stop",offset:"0%","stop-color":"#CCC"},{tagName:"stop",offset:"40%","stop-color":"#CCC"},{tagName:"stop",offset:"60%","stop-color":"#555"},{tagName:"stop",offset:"100%","stop-color":"#555"}]},{id:"animation_knobOuter",tagName:"linearGradient",x1:"20%",y1:"0%",x2:"90%",y2:"100%",children:[{tagName:"stop",offset:"5%","stop-color":as(r,cM)},{tagName:"stop",offset:"60%","stop-color":as(r,TCe)},{tagName:"stop",offset:"85%","stop-color":as(r,bB)}]},{id:"animation_knobInner",tagName:"linearGradient",x1:"20%",y1:"0%",x2:"90%",y2:"100%",children:[{tagName:"stop",offset:"5%","stop-color":as(r,TCe)},{tagName:"stop",offset:"60%","stop-color":as(r,cM)},{tagName:"stop",offset:"85%","stop-color":as(r,gB)}]}]});l(this._defsElement)?this._svgNode.replaceChild(d,this._defsElement):this._svgNode.appendChild(d),this._defsElement=d};var dM=DL;var CVo=_(T(),1);var b1t=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],Qy=15,BL=105;function VCe(e,t){return e-t}function K6(e,t){let n=Xo(t,e,VCe);return n<0?~n:n}function g1t(e,t){if(Math.abs(e)<=Qy)return e/Qy;let n=Qy,i=BL,o,r=0,s;return e>0?(o=Math.log(t[t.length-1]),s=(o-r)/(i-n),Math.exp(r+s*(e-n))):(o=Math.log(-t[0]),s=(o-r)/(i-n),-Math.exp(r+s*(Math.abs(e)-n)))}function y1t(e,t,n){if(n.clockStep===fo.SYSTEM_CLOCK)return Qy;if(Math.abs(e)<=1)return e*Qy;let i=t[t.length-1];e>i?e=i:e<-i&&(e=-i);let o=Qy,r=BL,s,a=0,c;return e>0?(s=Math.log(i),c=(s-a)/(r-o),(Math.log(e)-a)/c+o):(s=Math.log(-t[0]),c=(s-a)/(r-o),-((Math.log(Math.abs(e))-a)/c+o))}function Sm(e){let t=this;this._clockViewModel=e,this._allShuttleRingTicks=[],this._dateFormatter=Sm.defaultDateFormatter,this._timeFormatter=Sm.defaultTimeFormatter,this.shuttleRingDragging=!1,this.snapToTicks=!1,Se.track(this,["_allShuttleRingTicks","_dateFormatter","_timeFormatter","shuttleRingDragging","snapToTicks"]),this._sortedFilteredPositiveTicks=[],this.setShuttleRingTicks(Sm.defaultTicks),this.timeLabel=void 0,Se.defineProperty(this,"timeLabel",function(){return t._timeFormatter(t._clockViewModel.currentTime,t)}),this.dateLabel=void 0,Se.defineProperty(this,"dateLabel",function(){return t._dateFormatter(t._clockViewModel.currentTime,t)}),this.multiplierLabel=void 0,Se.defineProperty(this,"multiplierLabel",function(){let s=t._clockViewModel;if(s.clockStep===fo.SYSTEM_CLOCK)return"Today";let a=s.multiplier;return a%1===0?`${a.toFixed(0)}x`:`${a.toFixed(3).replace(/0{0,3}$/,"")}x`}),this.shuttleRingAngle=void 0,Se.defineProperty(this,"shuttleRingAngle",{get:function(){return y1t(e.multiplier,t._allShuttleRingTicks,e)},set:function(s){s=Math.max(Math.min(s,BL),-BL);let a=t._allShuttleRingTicks,c=t._clockViewModel;if(c.clockStep=fo.SYSTEM_CLOCK_MULTIPLIER,Math.abs(s)===BL){c.multiplier=s>0?a[a.length-1]:a[0];return}let d=g1t(s,a);if(t.snapToTicks)d=a[K6(d,a)];else if(d!==0){let u=Math.abs(d);if(u>100){let h=u.toFixed(0).length-2,p=Math.pow(10,h);d=Math.round(d/p)*p|0}else u>Qy?d=Math.round(d):u>1?d=+d.toFixed(1):u>0&&(d=+d.toFixed(2))}c.multiplier=d}}),this._canAnimate=void 0,Se.defineProperty(this,"_canAnimate",function(){let s=t._clockViewModel,a=s.clockRange;if(t.shuttleRingDragging||a===Or.UNBOUNDED)return!0;let c=s.multiplier,d=s.currentTime,u=s.startTime,h=!1;if(a===Or.LOOP_STOP)h=q.greaterThan(d,u)||d.equals(u)&&c>0;else{let p=s.stopTime;h=q.greaterThan(d,u)&&q.lessThan(d,p)||d.equals(u)&&c>0||d.equals(p)&&c<0}return h||(s.shouldAnimate=!1),h}),this._isSystemTimeAvailable=void 0,Se.defineProperty(this,"_isSystemTimeAvailable",function(){let s=t._clockViewModel;if(s.clockRange===Or.UNBOUNDED)return!0;let c=s.systemTime;return q.greaterThanOrEquals(c,s.startTime)&&q.lessThanOrEquals(c,s.stopTime)}),this._isAnimating=void 0,Se.defineProperty(this,"_isAnimating",function(){return t._clockViewModel.shouldAnimate&&(t._canAnimate||t.shuttleRingDragging)});let n=Rn(function(){let s=t._clockViewModel;s.shouldAnimate?s.shouldAnimate=!1:t._canAnimate&&(s.shouldAnimate=!0)});this._pauseViewModel=new Ky(n,{toggled:Se.computed(function(){return!t._isAnimating}),tooltip:"Pause"});let i=Rn(function(){let s=t._clockViewModel,a=s.multiplier;a>0&&(s.multiplier=-a),s.shouldAnimate=!0});this._playReverseViewModel=new Ky(i,{toggled:Se.computed(function(){return t._isAnimating&&e.multiplier<0}),tooltip:"Play Reverse"});let o=Rn(function(){let s=t._clockViewModel,a=s.multiplier;a<0&&(s.multiplier=-a),s.shouldAnimate=!0});this._playForwardViewModel=new Ky(o,{toggled:Se.computed(function(){return t._isAnimating&&e.multiplier>0&&e.clockStep!==fo.SYSTEM_CLOCK}),tooltip:"Play Forward"});let r=Rn(function(){t._clockViewModel.clockStep=fo.SYSTEM_CLOCK},Se.getObservable(this,"_isSystemTimeAvailable"));this._playRealtimeViewModel=new Ky(r,{toggled:Se.computed(function(){return e.clockStep===fo.SYSTEM_CLOCK}),tooltip:Se.computed(function(){return t._isSystemTimeAvailable?"Today (real-time)":"Current time not in range"})}),this._slower=Rn(function(){let s=t._clockViewModel,a=t._allShuttleRingTicks,c=s.multiplier,d=K6(c,a)-1;d>=0&&(s.multiplier=a[d])}),this._faster=Rn(function(){let s=t._clockViewModel,a=t._allShuttleRingTicks,c=s.multiplier,d=K6(c,a)+1;d<a.length&&(s.multiplier=a[d])})}Sm.defaultDateFormatter=function(e,t){let n=q.toGregorianDate(e);return`${b1t[n.month-1]} ${n.day} ${n.year}`};Sm.defaultTicks=[.001,.002,.005,.01,.02,.05,.1,.25,.5,1,2,5,10,15,30,60,120,300,600,900,1800,3600,7200,14400,21600,43200,86400,172800,345600,604800];Sm.defaultTimeFormatter=function(e,t){let n=q.toGregorianDate(e),i=Math.round(n.millisecond);return Math.abs(t._clockViewModel.multiplier)<1?`${n.hour.toString().padStart(2,"0")}:${n.minute.toString().padStart(2,"0")}:${n.second.toString().padStart(2,"0")}.${i.toString().padStart(3,"0")}`:`${n.hour.toString().padStart(2,"0")}:${n.minute.toString().padStart(2,"0")}:${n.second.toString().padStart(2,"0")} UTC`};Sm.prototype.getShuttleRingTicks=function(){return this._sortedFilteredPositiveTicks.slice(0)};Sm.prototype.setShuttleRingTicks=function(e){let t,n,i,o={},r=this._sortedFilteredPositiveTicks;for(r.length=0,t=0,n=e.length;t<n;++t)i=e[t],o.hasOwnProperty(i)||(o[i]=!0,r.push(i));r.sort(VCe);let s=[];for(n=r.length,t=n-1;t>=0;--t)i=r[t],i!==0&&s.push(-i);Array.prototype.push.apply(s,r),this._allShuttleRingTicks=s};Object.defineProperties(Sm.prototype,{slower:{get:function(){return this._slower}},faster:{get:function(){return this._faster}},clockViewModel:{get:function(){return this._clockViewModel}},pauseViewModel:{get:function(){return this._pauseViewModel}},playReverseViewModel:{get:function(){return this._playReverseViewModel}},playForwardViewModel:{get:function(){return this._playForwardViewModel}},playRealtimeViewModel:{get:function(){return this._playRealtimeViewModel}},dateFormatter:{get:function(){return this._dateFormatter},set:function(e){this._dateFormatter=e}},timeFormatter:{get:function(){return this._timeFormatter},set:function(e){this._timeFormatter=e}}});Sm._maxShuttleRingAngle=BL;Sm._realtimeShuttleRingAngle=Qy;var uM=Sm;var wVo=_(T(),1);var GVo=_(T(),1);function x1t(e){return function(t){let n=e._scene.pick(t.position);l(n)&&n.primitive instanceof bs&&(e.tileset=n.primitive),e.pickActive=!1}}function RCe(e,t){t?e._eventHandler.setInputAction(function(n){let i=e._scene.pick(n.endPosition);l(i)&&i.primitive instanceof bs&&(e.tileset=i.primitive)},Sn.MOUSE_MOVE):(e._eventHandler.removeInputAction(Sn.MOUSE_MOVE),e.picking=e.picking)}var _1t={maximumFractionDigits:3};function mM(e){let t=e/1048576;return t<1?t.toLocaleString(void 0,_1t):Math.round(t).toLocaleString()}function hM(e,t){if(!l(e))return"";let n=t?e._statisticsPerPass[wo.PICK]:e._statisticsPerPass[wo.RENDER],i='<ul class="cesium-cesiumInspector-statistics">';return i+=`<li><strong>Visited: </strong>${n.visited.toLocaleString()}</li><li><strong>Selected: </strong>${n.selected.toLocaleString()}</li><li><strong>Commands: </strong>${n.numberOfCommands.toLocaleString()}</li>`,i+="</ul>",t||(i+='<ul class="cesium-cesiumInspector-statistics">',i+=`<li><strong>Requests: </strong>${n.numberOfPendingRequests.toLocaleString()}</li><li><strong>Attempted: </strong>${n.numberOfAttemptedRequests.toLocaleString()}</li><li><strong>Processing: </strong>${n.numberOfTilesProcessing.toLocaleString()}</li><li><strong>Content Ready: </strong>${n.numberOfTilesWithContentReady.toLocaleString()}</li><li><strong>Total: </strong>${n.numberOfTilesTotal.toLocaleString()}</li>`,i+="</ul>",i+='<ul class="cesium-cesiumInspector-statistics">',i+=`<li><strong>Features Selected: </strong>${n.numberOfFeaturesSelected.toLocaleString()}</li><li><strong>Features Loaded: </strong>${n.numberOfFeaturesLoaded.toLocaleString()}</li><li><strong>Points Selected: </strong>${n.numberOfPointsSelected.toLocaleString()}</li><li><strong>Points Loaded: </strong>${n.numberOfPointsLoaded.toLocaleString()}</li><li><strong>Triangles Selected: </strong>${n.numberOfTrianglesSelected.toLocaleString()}</li>`,i+="</ul>",i+='<ul class="cesium-cesiumInspector-statistics">',i+=`<li><strong>Tiles styled: </strong>${n.numberOfTilesStyled.toLocaleString()}</li><li><strong>Features styled: </strong>${n.numberOfFeaturesStyled.toLocaleString()}</li>`,i+="</ul>",i+='<ul class="cesium-cesiumInspector-statistics">',i+=`<li><strong>Children Union Culled: </strong>${n.numberOfTilesCulledWithChildrenUnion.toLocaleString()}</li>`,i+="</ul>",i+='<ul class="cesium-cesiumInspector-statistics">',i+=`<li><strong>Geometry Memory (MB): </strong>${mM(n.geometryByteLength)}</li><li><strong>Texture Memory (MB): </strong>${mM(n.texturesByteLength)}</li><li><strong>Batch Table Memory (MB): </strong>${mM(n.batchTableByteLength)}</li>`,i+="</ul>"),i}function ZCe(){let e=Ri.statistics;return` <ul class="cesium-cesiumInspector-statistics"> <li><strong>Geometry Memory (MB): </strong>${mM(e.geometryByteLength)}</li> <li><strong>Texture Memory (MB): </strong>${mM(e.texturesByteLength)}</li> </ul> `}var T1t=[{text:"Highlight",value:vl.HIGHLIGHT},{text:"Replace",value:vl.REPLACE},{text:"Mix",value:vl.MIX}],LCe=new D(1,1,0,.4),S1t=new D,xB=new D;function Za(e,t){let n=this,i=e.canvas;this._eventHandler=new iu(i),this._scene=e,this._performanceContainer=t,this._canvas=i,this._performanceDisplay=new p0({container:t}),this._statisticsText="",this._pickStatisticsText="",this._resourceCacheStatisticsText="",this._editorError="",this.performance=!1,this.showStatistics=!0,this.showPickStatistics=!0,this.showResourceCacheStatistics=!1,this.inspectorVisible=!0,this.tilesetVisible=!1,this.displayVisible=!1,this.updateVisible=!1,this.loggingVisible=!1,this.styleVisible=!1,this.tileDebugLabelsVisible=!1,this.optimizationVisible=!1,this.styleString="{}",this.hasEnabledWireframe=!1,this._tileset=void 0,this._feature=void 0,this._tile=void 0,Se.track(this,["performance","inspectorVisible","_statisticsText","_pickStatisticsText","_resourceCacheStatisticsText","_editorError","showPickStatistics","showStatistics","showResourceCacheStatistics","tilesetVisible","displayVisible","updateVisible","loggingVisible","styleVisible","optimizationVisible","tileDebugLabelsVisible","styleString","_feature","_tile","_tileset","hasEnabledWireframe"]),this._properties=Se.observable({}),this.properties=[],Se.defineProperty(this,"properties",function(){let N=[],z=n._properties();for(let K in z)z.hasOwnProperty(K)&&N.push(K);return N});let o=Se.observable();Se.defineProperty(this,"dynamicScreenSpaceError",{get:function(){return o()},set:function(N){o(N),l(n._tileset)&&(n._tileset.dynamicScreenSpaceError=N)}}),this.dynamicScreenSpaceError=!1;let r=Se.observable();Se.defineProperty(this,"colorBlendMode",{get:function(){return r()},set:function(N){r(N),l(n._tileset)&&(n._tileset.colorBlendMode=N,n._scene.requestRender())}}),this.colorBlendMode=vl.HIGHLIGHT;let s=Se.observable(),a=Se.observable();Se.defineProperty(this,"picking",{get:function(){return a()},set:function(N){a(N),N?n._eventHandler.setInputAction(function(z){let K=e.pick(z.endPosition);if(K instanceof Bs?(n.feature=K,n.tile=K.content.tile):l(K)&&l(K.content)?(n.feature=void 0,n.tile=K.content.tile):(n.feature=void 0,n.tile=void 0),!!l(n._tileset)){if(s&&l(K)&&l(K.content)){let te;e.pickPositionSupported&&(te=e.pickPosition(z.endPosition),l(te)&&(n._tileset.debugPickPosition=te)),n._tileset.debugPickedTile=K.content.tile}else n._tileset.debugPickedTile=void 0;n._scene.requestRender()}},Sn.MOUSE_MOVE):(n.feature=void 0,n.tile=void 0,n._eventHandler.removeInputAction(Sn.MOUSE_MOVE))}}),this.picking=!0;let c=Se.observable();Se.defineProperty(this,"colorize",{get:function(){return c()},set:function(N){c(N),l(n._tileset)&&(n._tileset.debugColorizeTiles=N,n._scene.requestRender())}}),this.colorize=!1;let d=Se.observable();Se.defineProperty(this,"wireframe",{get:function(){return d()},set:function(N){d(N),l(n._tileset)&&(n._tileset.debugWireframe=N,n._scene.requestRender())}}),this.wireframe=!1;let u=Se.observable();Se.defineProperty(this,"showBoundingVolumes",{get:function(){return u()},set:function(N){u(N),l(n._tileset)&&(n._tileset.debugShowBoundingVolume=N,n._scene.requestRender())}}),this.showBoundingVolumes=!1;let h=Se.observable();Se.defineProperty(this,"showContentBoundingVolumes",{get:function(){return h()},set:function(N){h(N),l(n._tileset)&&(n._tileset.debugShowContentBoundingVolume=N,n._scene.requestRender())}}),this.showContentBoundingVolumes=!1;let p=Se.observable();Se.defineProperty(this,"showRequestVolumes",{get:function(){return p()},set:function(N){p(N),l(n._tileset)&&(n._tileset.debugShowViewerRequestVolume=N,n._scene.requestRender())}}),this.showRequestVolumes=!1;let g=Se.observable();Se.defineProperty(this,"freezeFrame",{get:function(){return g()},set:function(N){g(N),l(n._tileset)&&(n._tileset.debugFreezeFrame=N,n._scene.debugShowFrustumPlanes=N,n._scene.requestRender())}}),this.freezeFrame=!1,Se.defineProperty(this,"showOnlyPickedTileDebugLabel",{get:function(){return s()},set:function(N){s(N),l(n._tileset)&&(n._tileset.debugPickedTileLabelOnly=N,n._scene.requestRender())}}),this.showOnlyPickedTileDebugLabel=!1;let f=Se.observable();Se.defineProperty(this,"showGeometricError",{get:function(){return f()},set:function(N){f(N),l(n._tileset)&&(n._tileset.debugShowGeometricError=N,n._scene.requestRender())}}),this.showGeometricError=!1;let y=Se.observable();Se.defineProperty(this,"showRenderingStatistics",{get:function(){return y()},set:function(N){y(N),l(n._tileset)&&(n._tileset.debugShowRenderingStatistics=N,n._scene.requestRender())}}),this.showRenderingStatistics=!1;let x=Se.observable();Se.defineProperty(this,"showMemoryUsage",{get:function(){return x()},set:function(N){x(N),l(n._tileset)&&(n._tileset.debugShowMemoryUsage=N,n._scene.requestRender())}}),this.showMemoryUsage=!1;let S=Se.observable();Se.defineProperty(this,"showUrl",{get:function(){return S()},set:function(N){S(N),l(n._tileset)&&(n._tileset.debugShowUrl=N,n._scene.requestRender())}}),this.showUrl=!1;let C=Se.observable();Se.defineProperty(this,"maximumScreenSpaceError",{get:function(){return C()},set:function(N){N=Number(N),isNaN(N)||(C(N),l(n._tileset)&&(n._tileset.maximumScreenSpaceError=N))}}),this.maximumScreenSpaceError=16;let V=Se.observable();Se.defineProperty(this,"dynamicScreenSpaceErrorDensity",{get:function(){return V()},set:function(N){N=Number(N),isNaN(N)||(V(N),l(n._tileset)&&(n._tileset.dynamicScreenSpaceErrorDensity=N))}}),this.dynamicScreenSpaceErrorDensity=2e-4,this.dynamicScreenSpaceErrorDensitySliderValue=void 0,Se.defineProperty(this,"dynamicScreenSpaceErrorDensitySliderValue",{get:function(){return Math.pow(V(),1/6)},set:function(N){let z=Math.pow(N,6);V(z),l(n._tileset)&&(n._tileset.dynamicScreenSpaceErrorDensity=z)}});let L=Se.observable();Se.defineProperty(this,"dynamicScreenSpaceErrorFactor",{get:function(){return L()},set:function(N){N=Number(N),isNaN(N)||(L(N),l(n._tileset)&&(n._tileset.dynamicScreenSpaceErrorFactor=N))}}),this.dynamicScreenSpaceErrorFactor=24;let Z=x1t(this),E=Se.observable();Se.defineProperty(this,"pickActive",{get:function(){return E()},set:function(N){E(N),N?n._eventHandler.setInputAction(Z,Sn.LEFT_CLICK):n._eventHandler.removeInputAction(Sn.LEFT_CLICK)}});let P=Se.observable();Se.defineProperty(this,"pointCloudShading",{get:function(){return P()},set:function(N){P(N),l(n._tileset)&&(n._tileset.pointCloudShading.attenuation=N)}}),this.pointCloudShading=!1;let W=Se.observable();Se.defineProperty(this,"geometricErrorScale",{get:function(){return W()},set:function(N){N=Number(N),isNaN(N)||(W(N),l(n._tileset)&&(n._tileset.pointCloudShading.geometricErrorScale=N))}}),this.geometricErrorScale=1;let v=Se.observable();Se.defineProperty(this,"maximumAttenuation",{get:function(){return v()},set:function(N){N=Number(N),isNaN(N)||(v(N),l(n._tileset)&&(n._tileset.pointCloudShading.maximumAttenuation=N===0?void 0:N))}}),this.maximumAttenuation=0;let A=Se.observable();Se.defineProperty(this,"baseResolution",{get:function(){return A()},set:function(N){N=Number(N),isNaN(N)||(A(N),l(n._tileset)&&(n._tileset.pointCloudShading.baseResolution=N===0?void 0:N))}}),this.baseResolution=0;let b=Se.observable();Se.defineProperty(this,"eyeDomeLighting",{get:function(){return b()},set:function(N){b(N),l(n._tileset)&&(n._tileset.pointCloudShading.eyeDomeLighting=N)}}),this.eyeDomeLighting=!1;let R=Se.observable();Se.defineProperty(this,"eyeDomeLightingStrength",{get:function(){return R()},set:function(N){N=Number(N),isNaN(N)||(R(N),l(n._tileset)&&(n._tileset.pointCloudShading.eyeDomeLightingStrength=N))}}),this.eyeDomeLightingStrength=1;let G=Se.observable();Se.defineProperty(this,"eyeDomeLightingRadius",{get:function(){return G()},set:function(N){N=Number(N),isNaN(N)||(G(N),l(n._tileset)&&(n._tileset.pointCloudShading.eyeDomeLightingRadius=N))}}),this.eyeDomeLightingRadius=1,this.pickActive=!1;let I=Se.observable();Se.defineProperty(this,"skipLevelOfDetail",{get:function(){return I()},set:function(N){I(N),l(n._tileset)&&(n._tileset.skipLevelOfDetail=N)}}),this.skipLevelOfDetail=!0;let w=Se.observable();Se.defineProperty(this,"skipScreenSpaceErrorFactor",{get:function(){return w()},set:function(N){N=Number(N),isNaN(N)||(w(N),l(n._tileset)&&(n._tileset.skipScreenSpaceErrorFactor=N))}}),this.skipScreenSpaceErrorFactor=16;let M=Se.observable();Se.defineProperty(this,"baseScreenSpaceError",{get:function(){return M()},set:function(N){N=Number(N),isNaN(N)||(M(N),l(n._tileset)&&(n._tileset.baseScreenSpaceError=N))}}),this.baseScreenSpaceError=1024;let B=Se.observable();Se.defineProperty(this,"skipLevels",{get:function(){return B()},set:function(N){N=Number(N),isNaN(N)||(B(N),l(n._tileset)&&(n._tileset.skipLevels=N))}}),this.skipLevels=1;let k=Se.observable();Se.defineProperty(this,"immediatelyLoadDesiredLevelOfDetail",{get:function(){return k()},set:function(N){k(N),l(n._tileset)&&(n._tileset.immediatelyLoadDesiredLevelOfDetail=N)}}),this.immediatelyLoadDesiredLevelOfDetail=!1;let O=Se.observable();Se.defineProperty(this,"loadSiblings",{get:function(){return O()},set:function(N){O(N),l(n._tileset)&&(n._tileset.loadSiblings=N)}}),this.loadSiblings=!1,this._style=void 0,this._shouldStyle=!1,this._definedProperties=["properties","dynamicScreenSpaceError","colorBlendMode","picking","colorize","wireframe","showBoundingVolumes","showContentBoundingVolumes","showRequestVolumes","freezeFrame","maximumScreenSpaceError","dynamicScreenSpaceErrorDensity","baseScreenSpaceError","skipScreenSpaceErrorFactor","skipLevelOfDetail","skipLevels","immediatelyLoadDesiredLevelOfDetail","loadSiblings","dynamicScreenSpaceErrorDensitySliderValue","dynamicScreenSpaceErrorFactor","pickActive","showOnlyPickedTileDebugLabel","showGeometricError","showRenderingStatistics","showMemoryUsage","showUrl","pointCloudShading","geometricErrorScale","maximumAttenuation","baseResolution","eyeDomeLighting","eyeDomeLightingStrength","eyeDomeLightingRadius"],this._removePostRenderEvent=e.postRender.addEventListener(function(){n._update()}),l(this._tileset)||RCe(this,!0)}Object.defineProperties(Za.prototype,{scene:{get:function(){return this._scene}},performanceContainer:{get:function(){return this._performanceContainer}},statisticsText:{get:function(){return this._statisticsText}},pickStatisticsText:{get:function(){return this._pickStatisticsText}},resourceCacheStatisticsText:{get:function(){return this._resourceCacheStatisticsText}},colorBlendModes:{get:function(){return T1t}},editorError:{get:function(){return this._editorError}},tileset:{get:function(){return this._tileset},set:function(e){if(this._tileset=e,this._style=void 0,this.styleString="{}",this.feature=void 0,this.tile=void 0,l(e)){this._properties(e.properties);let t=["colorize","wireframe","showBoundingVolumes","showContentBoundingVolumes","showRequestVolumes","freezeFrame","showOnlyPickedTileDebugLabel","showGeometricError","showRenderingStatistics","showMemoryUsage","showUrl"],n=t.length;for(let o=0;o<n;++o){let r=t[o];this[r]=this[r]}this.maximumScreenSpaceError=e.maximumScreenSpaceError,this.dynamicScreenSpaceError=e.dynamicScreenSpaceError,this.dynamicScreenSpaceErrorDensity=e.dynamicScreenSpaceErrorDensity,this.dynamicScreenSpaceErrorFactor=e.dynamicScreenSpaceErrorFactor,this.colorBlendMode=e.colorBlendMode,this.skipLevelOfDetail=e.skipLevelOfDetail,this.skipScreenSpaceErrorFactor=e.skipScreenSpaceErrorFactor,this.baseScreenSpaceError=e.baseScreenSpaceError,this.skipLevels=e.skipLevels,this.immediatelyLoadDesiredLevelOfDetail=e.immediatelyLoadDesiredLevelOfDetail,this.loadSiblings=e.loadSiblings,this.hasEnabledWireframe=e._enableDebugWireframe;let i=e.pointCloudShading;this.pointCloudShading=i.attenuation,this.geometricErrorScale=i.geometricErrorScale,this.maximumAttenuation=i.maximumAttenuation?i.maximumAttenuation:0,this.baseResolution=i.baseResolution?i.baseResolution:0,this.eyeDomeLighting=i.eyeDomeLighting,this.eyeDomeLightingStrength=i.eyeDomeLightingStrength,this.eyeDomeLightingRadius=i.eyeDomeLightingRadius,this._scene.requestRender()}else this._properties({});this._statisticsText=hM(e,!1),this._pickStatisticsText=hM(e,!0),this._resourceCacheStatisticsText=ZCe(),RCe(this,!1)}},feature:{get:function(){return this._feature},set:function(e){if(this._feature===e)return;let t=this._feature;l(t)&&!t.content.isDestroyed()&&(!this.colorize&&l(this._style)?t.color=l(this._style.color)?this._style.color.evaluateColor(t,S1t):D.WHITE:t.color=xB,this._scene.requestRender()),l(e)&&(D.clone(e.color,xB),e.color=LCe,this._scene.requestRender()),this._feature=e}},tile:{get:function(){return this._tile},set:function(e){if(this._tile===e)return;let t=this._tile;l(t)&&!t.isDestroyed()&&!J6(t.content)&&(t.color=xB,this._scene.requestRender()),l(e)&&!J6(e.content)&&(D.clone(e.color,xB),e.color=LCe,this._scene.requestRender()),this._tile=e}}});function J6(e){if(!l(e))return!1;if(e.featuresLength>0)return!0;let t=e.innerContents;if(l(t)){let n=t.length;for(let i=0;i<n;++i)if(!J6(t[i]))return!1;return!0}return!1}Za.prototype.togglePickTileset=function(){this.pickActive=!this.pickActive};Za.prototype.toggleInspector=function(){this.inspectorVisible=!this.inspectorVisible};Za.prototype.toggleTileset=function(){this.tilesetVisible=!this.tilesetVisible};Za.prototype.toggleDisplay=function(){this.displayVisible=!this.displayVisible};Za.prototype.toggleUpdate=function(){this.updateVisible=!this.updateVisible};Za.prototype.toggleLogging=function(){this.loggingVisible=!this.loggingVisible};Za.prototype.toggleStyle=function(){this.styleVisible=!this.styleVisible};Za.prototype.toggleTileDebugLabels=function(){this.tileDebugLabelsVisible=!this.tileDebugLabelsVisible};Za.prototype.toggleOptimization=function(){this.optimizationVisible=!this.optimizationVisible};Za.prototype.trimTilesCache=function(){l(this._tileset)&&this._tileset.trimLoadedTiles()};Za.prototype.compileStyle=function(){let e=this._tileset;if(!(!l(e)||this.styleString===JSON.stringify(e.style))){this._editorError="";try{this.styleString.length===0&&(this.styleString="{}"),this._style=new RS(JSON.parse(this.styleString)),this._shouldStyle=!0,this._scene.requestRender()}catch(t){this._editorError=t.toString()}this.feature=this._feature,this.tile=this._tile}};Za.prototype.styleEditorKeyPress=function(e,t){if(t.keyCode===9){t.preventDefault();let n=t.target,i=n.selectionStart,o=n.selectionEnd,r=o,a=n.value.slice(i,o).split(` `),c=a.length,d;if(t.shiftKey)for(d=0;d<c;++d)a[d][0]===" "&&(a[d][1]===" "?(a[d]=a[d].substr(2),r-=2):(a[d]=a[d].substr(1),r-=1));else for(d=0;d<c;++d)a[d]=` ${a[d]}`,r+=2;let u=a.join(` `);n.value=n.value.slice(0,i)+u+n.value.slice(o),n.selectionStart=i!==o?i:r,n.selectionEnd=r}else t.ctrlKey&&(t.keyCode===10||t.keyCode===13)&&this.compileStyle();return!0};Za.prototype._update=function(){let e=this._tileset;if(this.performance&&this._performanceDisplay.update(),l(e)){if(e.isDestroyed()){this.tile=void 0,this.feature=void 0,this.tileset=void 0;return}let t=e.style;this._style!==e.style&&(this._shouldStyle?(e.style=this._style,this._shouldStyle=!1):(this._style=t,this.styleString=JSON.stringify(t.style,null," ")))}this.showStatistics&&(this._statisticsText=hM(e,!1),this._pickStatisticsText=hM(e,!0),this._resourceCacheStatisticsText=ZCe())};Za.prototype.isDestroyed=function(){return!1};Za.prototype.destroy=function(){this._eventHandler.destroy(),this._removePostRenderEvent();let e=this;return this._definedProperties.forEach(function(t){Se.getObservable(e,t).dispose()}),me(this)};Za.getStatistics=hM;var fM=Za;function _B(e,t){e=Xn(e);let n=document.createElement("div"),i=document.createElement("div");i.setAttribute("data-bind","visible: performance");let o=new fM(t,i);this._viewModel=o,this._container=e,this._element=n;let r=document.createElement("div");r.textContent="3D Tiles Inspector",r.className="cesium-cesiumInspector-button",r.setAttribute("data-bind","click: toggleInspector"),n.appendChild(r),n.className="cesium-cesiumInspector cesium-3DTilesInspector",n.setAttribute("data-bind",'css: { "cesium-cesiumInspector-visible" : inspectorVisible, "cesium-cesiumInspector-hidden" : !inspectorVisible}'),e.appendChild(n);let s=document.createElement("div");s.className="cesium-cesiumInspector-dropDown",n.appendChild(s);let a=Ja.createSection,c=Ja.createCheckbox,d=Ja.createRangeInput,u=Ja.createButton,h=a(s,"Tileset","tilesetVisible","toggleTileset"),p=a(s,"Display","displayVisible","toggleDisplay"),g=a(s,"Update","updateVisible","toggleUpdate"),f=a(s,"Logging","loggingVisible","toggleLogging"),y=a(s,"Tile Debug Labels","tileDebugLabelsVisible","toggleTileDebugLabels"),x=a(s,"Style","styleVisible","toggleStyle"),S=a(s,"Optimization","optimizationVisible","toggleOptimization"),C=document.createElement("div");C.className="field-group";let V=document.createElement("label");V.className="field-label",V.appendChild(document.createTextNode("Properties: "));let L=document.createElement("div");L.setAttribute("data-bind","text: properties"),C.appendChild(V),C.appendChild(L),h.appendChild(C),h.appendChild(u("Pick Tileset","togglePickTileset","pickActive")),h.appendChild(u("Trim Tiles Cache","trimTilesCache")),h.appendChild(c("Enable Picking","picking")),p.appendChild(c("Colorize","colorize"));let Z=p.appendChild(c("Wireframe","wireframe","_tileset === undefined || hasEnabledWireframe")),E=document.createElement("p");E.setAttribute("data-bind","visible: _tileset !== undefined && !hasEnabledWireframe"),E.setAttribute("class","cesium-3DTilesInspector-disabledElementsInfo"),E.innerText="Set enableDebugWireframe to true in the tileset constructor to enable this option.",Z.appendChild(E),p.appendChild(c("Bounding Volumes","showBoundingVolumes")),p.appendChild(c("Content Volumes","showContentBoundingVolumes")),p.appendChild(c("Request Volumes","showRequestVolumes")),p.appendChild(c("Point Cloud Shading","pointCloudShading"));let P=document.createElement("div");P.setAttribute("data-bind","visible: pointCloudShading"),P.appendChild(d("Geometric Error Scale","geometricErrorScale",0,2,.01)),P.appendChild(d("Maximum Attenuation","maximumAttenuation",0,32,1)),P.appendChild(d("Base Resolution","baseResolution",0,1,.01)),P.appendChild(c("Eye Dome Lighting (EDL)","eyeDomeLighting")),p.appendChild(P);let W=document.createElement("div");W.setAttribute("data-bind","visible: eyeDomeLighting"),W.appendChild(d("EDL Strength","eyeDomeLightingStrength",0,2,.1)),W.appendChild(d("EDL Radius","eyeDomeLightingRadius",0,4,.1)),P.appendChild(W),g.appendChild(c("Freeze Frame","freezeFrame")),g.appendChild(c("Dynamic Screen Space Error","dynamicScreenSpaceError"));let v=document.createElement("div");v.appendChild(d("Maximum Screen Space Error","maximumScreenSpaceError",0,128,1)),g.appendChild(v);let A=document.createElement("div");A.setAttribute("data-bind","visible: dynamicScreenSpaceError"),A.appendChild(d("Screen Space Error Density","dynamicScreenSpaceErrorDensitySliderValue",0,1,.005,"dynamicScreenSpaceErrorDensity")),A.appendChild(d("Screen Space Error Factor","dynamicScreenSpaceErrorFactor",1,32,.1)),g.appendChild(A),f.appendChild(c("Performance","performance")),f.appendChild(i),f.appendChild(c("Statistics","showStatistics"));let b=document.createElement("div");b.className="cesium-3dTilesInspector-statistics",b.setAttribute("data-bind","html: statisticsText, visible: showStatistics"),f.appendChild(b),f.appendChild(c("Pick Statistics","showPickStatistics"));let R=document.createElement("div");R.className="cesium-3dTilesInspector-statistics",R.setAttribute("data-bind","html: pickStatisticsText, visible: showPickStatistics"),f.appendChild(R),f.appendChild(c("Resource Cache Statistics","showResourceCacheStatistics"));let G=document.createElement("div");G.className="cesium-3dTilesInspector-statistics",G.setAttribute("data-bind","html: resourceCacheStatisticsText, visible: showResourceCacheStatistics"),f.appendChild(G);let I=document.createElement("div");x.appendChild(I),I.appendChild(document.createTextNode("Color Blend Mode: "));let w=document.createElement("select");w.setAttribute("data-bind",'options: colorBlendModes, optionsText: "text", optionsValue: "value", value: colorBlendMode'),I.appendChild(w);let M=document.createElement("textarea");M.setAttribute("data-bind","textInput: styleString, event: { keydown: styleEditorKeyPress }"),I.className="cesium-cesiumInspector-styleEditor",I.appendChild(M);let B=u("Compile (Ctrl+Enter)","compileStyle");I.appendChild(B);let k=document.createElement("div");k.className="cesium-cesiumInspector-error",k.setAttribute("data-bind","text: editorError"),I.appendChild(k),y.appendChild(c("Show Picked Only","showOnlyPickedTileDebugLabel")),y.appendChild(c("Geometric Error","showGeometricError")),y.appendChild(c("Rendering Statistics","showRenderingStatistics")),y.appendChild(c("Memory Usage (MB)","showMemoryUsage")),y.appendChild(c("Url","showUrl")),S.appendChild(c("Skip Tile LODs","skipLevelOfDetail"));let O=document.createElement("div");O.appendChild(d("Skip SSE Factor","skipScreenSpaceErrorFactor",1,50,1)),S.appendChild(O);let N=document.createElement("div");N.appendChild(d("SSE before skipping LOD","baseScreenSpaceError",0,4096,1)),S.appendChild(N);let z=document.createElement("div");z.appendChild(d("Min. levels to skip","skipLevels",0,10,1)),S.appendChild(z),S.appendChild(c("Load only tiles that meet the max SSE.","immediatelyLoadDesiredLevelOfDetail")),S.appendChild(c("Load siblings of visible tiles","loadSiblings")),Se.applyBindings(o,n)}Object.defineProperties(_B.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});_B.prototype.isDestroyed=function(){return!1};_B.prototype.destroy=function(){return Se.cleanNode(this._element),this._container.removeChild(this._element),this.viewModel.destroy(),me(this)};var pM=_B;var KVo=_(T(),1);var UVo=_(T(),1);function GCe(e){e=e??Y.EMPTY_OBJECT;let t=e.globe,n=e.imageryProviderViewModels??Y.EMPTY_ARRAY,i=e.terrainProviderViewModels??Y.EMPTY_ARRAY;this._globe=t,this.imageryProviderViewModels=n.slice(0),this.terrainProviderViewModels=i.slice(0),this.dropDownVisible=!1,Se.track(this,["imageryProviderViewModels","terrainProviderViewModels","dropDownVisible"]);let o=Se.getObservable(this,"imageryProviderViewModels"),r=Se.pureComputed(function(){let h=o(),p={},g;for(g=0;g<h.length;g++){let x=h[g],S=x.category;l(p[S])?p[S].push(x):p[S]=[x]}let f=Object.keys(p),y=[];for(g=0;g<f.length;g++){let x=f[g];y.push({name:x,providers:p[x]})}return y});this._imageryProviders=r;let s=Se.getObservable(this,"terrainProviderViewModels"),a=Se.pureComputed(function(){let h=s(),p={},g;for(g=0;g<h.length;g++){let x=h[g],S=x.category;l(p[S])?p[S].push(x):p[S]=[x]}let f=Object.keys(p),y=[];for(g=0;g<f.length;g++){let x=f[g];y.push({name:x,providers:p[x]})}return y});this._terrainProviders=a,this.buttonTooltip=void 0,Se.defineProperty(this,"buttonTooltip",function(){let h=this.selectedImagery,p=this.selectedTerrain,g=l(h)?h.name:void 0,f=l(p)?p.name:void 0;return l(g)&&l(f)?`${g} ${f}`:l(g)?g:f}),this.buttonImageUrl=void 0,Se.defineProperty(this,"buttonImageUrl",function(){let h=this.selectedImagery;if(l(h))return h.iconUrl}),this.selectedImagery=void 0;let c=Se.observable();this._currentImageryLayers=[],Se.defineProperty(this,"selectedImagery",{get:function(){return c()},set:function(h){if(c()===h){this.dropDownVisible=!1;return}let p,g=this._currentImageryLayers,f=g.length,y=this._globe.imageryLayers,x=!1;for(p=0;p<f;p++){let S=y.length;for(let C=0;C<S;C++){let V=y.get(C);if(V===g[p]){y.remove(V),x=!0;break}}}if(l(h)){let S=h.creationCommand();if(Array.isArray(S)){let C=S.length;for(this._currentImageryLayers=[],p=C-1;p>=0;p--){let V=za.fromProviderAsync(S[p]);y.add(V,0),this._currentImageryLayers.push(V)}}else{this._currentImageryLayers=[];let C=za.fromProviderAsync(S);if(C.name=h.name,x)y.add(C,0);else{let V=y.get(0);l(V)&&y.remove(V),y.add(C,0)}this._currentImageryLayers.push(C)}}c(h),this.dropDownVisible=!1}}),this.selectedTerrain=void 0;let d=Se.observable();Se.defineProperty(this,"selectedTerrain",{get:function(){return d()},set:function(h){if(d()===h){this.dropDownVisible=!1;return}let p;if(l(h)&&(p=h.creationCommand()),l(p)&&!l(p.then))this._globe.depthTestAgainstTerrain=!(p instanceof $f),this._globe.terrainProvider=p;else if(l(p)){let g=!1,f=this._globe.terrainProviderChanged.addEventListener(()=>{g=!0,f()}),x=new qA(p).readyEvent.addEventListener(S=>{g||(this._globe.depthTestAgainstTerrain=!(S instanceof $f),this._globe.terrainProvider=S,x())})}d(h),this.dropDownVisible=!1}});let u=this;this._toggleDropDown=Rn(function(){u.dropDownVisible=!u.dropDownVisible}),this.selectedImagery=e.selectedImageryProviderViewModel??n[0],this.selectedTerrain=e.selectedTerrainProviderViewModel}Object.defineProperties(GCe.prototype,{toggleDropDown:{get:function(){return this._toggleDropDown}},globe:{get:function(){return this._globe}}});var bM=GCe;function TB(e,t){e=Xn(e);let n=new bM(t),i=document.createElement("button");i.type="button",i.className="cesium-button cesium-toolbar-button",i.setAttribute("data-bind","attr: { title: buttonTooltip },click: toggleDropDown"),e.appendChild(i);let o=document.createElement("img");o.setAttribute("draggable","false"),o.className="cesium-baseLayerPicker-selected",o.setAttribute("data-bind","attr: { src: buttonImageUrl }, visible: !!buttonImageUrl"),i.appendChild(o);let r=document.createElement("div");r.className="cesium-baseLayerPicker-dropDown",r.setAttribute("data-bind",'css: { "cesium-baseLayerPicker-dropDown-visible" : dropDownVisible }'),e.appendChild(r);let s=document.createElement("div");s.className="cesium-baseLayerPicker-sectionTitle",s.setAttribute("data-bind","visible: imageryProviderViewModels.length > 0"),s.innerHTML="Imagery",r.appendChild(s);let a=document.createElement("div");a.className="cesium-baseLayerPicker-section",a.setAttribute("data-bind","foreach: _imageryProviders"),r.appendChild(a);let c=document.createElement("div");c.className="cesium-baseLayerPicker-category",a.appendChild(c);let d=document.createElement("div");d.className="cesium-baseLayerPicker-categoryTitle",d.setAttribute("data-bind","text: name"),c.appendChild(d);let u=document.createElement("div");u.className="cesium-baseLayerPicker-choices",u.setAttribute("data-bind","foreach: providers"),c.appendChild(u);let h=document.createElement("div");h.className="cesium-baseLayerPicker-item",h.setAttribute("data-bind",'css: { "cesium-baseLayerPicker-selectedItem" : $data === $parents[1].selectedImagery },attr: { title: tooltip },visible: creationCommand.canExecute,click: function($data) { $parents[1].selectedImagery = $data; }'),u.appendChild(h);let p=document.createElement("img");p.className="cesium-baseLayerPicker-itemIcon",p.setAttribute("data-bind","attr: { src: iconUrl }"),p.setAttribute("draggable","false"),h.appendChild(p);let g=document.createElement("div");g.className="cesium-baseLayerPicker-itemLabel",g.setAttribute("data-bind","text: name"),h.appendChild(g);let f=document.createElement("div");f.className="cesium-baseLayerPicker-sectionTitle",f.setAttribute("data-bind","visible: terrainProviderViewModels.length > 0"),f.innerHTML="Terrain",r.appendChild(f);let y=document.createElement("div");y.className="cesium-baseLayerPicker-section",y.setAttribute("data-bind","foreach: _terrainProviders"),r.appendChild(y);let x=document.createElement("div");x.className="cesium-baseLayerPicker-category",y.appendChild(x);let S=document.createElement("div");S.className="cesium-baseLayerPicker-categoryTitle",S.setAttribute("data-bind","text: name"),x.appendChild(S);let C=document.createElement("div");C.className="cesium-baseLayerPicker-choices",C.setAttribute("data-bind","foreach: providers"),x.appendChild(C);let V=document.createElement("div");V.className="cesium-baseLayerPicker-item",V.setAttribute("data-bind",'css: { "cesium-baseLayerPicker-selectedItem" : $data === $parents[1].selectedTerrain },attr: { title: tooltip },visible: creationCommand.canExecute,click: function($data) { $parents[1].selectedTerrain = $data; }'),C.appendChild(V);let L=document.createElement("img");L.className="cesium-baseLayerPicker-itemIcon",L.setAttribute("data-bind","attr: { src: iconUrl }"),L.setAttribute("draggable","false"),V.appendChild(L);let Z=document.createElement("div");Z.className="cesium-baseLayerPicker-itemLabel",Z.setAttribute("data-bind","text: name"),V.appendChild(Z),Se.applyBindings(n,i),Se.applyBindings(n,r),this._viewModel=n,this._container=e,this._element=i,this._dropPanel=r,this._closeDropDown=function(E){i.contains(E.target)||r.contains(E.target)||(n.dropDownVisible=!1)},Bt.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeDropDown,!0):(document.addEventListener("mousedown",this._closeDropDown,!0),document.addEventListener("touchstart",this._closeDropDown,!0))}Object.defineProperties(TB.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});TB.prototype.isDestroyed=function(){return!1};TB.prototype.destroy=function(){return Bt.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeDropDown,!0):(document.removeEventListener("mousedown",this._closeDropDown,!0),document.removeEventListener("touchstart",this._closeDropDown,!0)),Se.cleanNode(this._element),Se.cleanNode(this._dropPanel),this._container.removeChild(this._element),this._container.removeChild(this._dropPanel),me(this)};var gM=TB;var eLo=_(T(),1);function ECe(e){let t=e.creationFunction;l(t.canExecute)||(t=Rn(t)),this._creationCommand=t,this.name=e.name,this.tooltip=e.tooltip,this.iconUrl=e.iconUrl,this._category=e.category??"",Se.track(this,["name","tooltip","iconUrl"])}Object.defineProperties(ECe.prototype,{creationCommand:{get:function(){return this._creationCommand}},category:{get:function(){return this._category}}});var cs=ECe;var oLo=_(T(),1);function C1t(){let e=[],t=devicePixelRatio>=2;return e.push(new cs({name:"Bing Maps Aerial",iconUrl:nn("Widgets/Images/ImageryProviders/bingAerial.png"),tooltip:"Bing Maps aerial imagery, provided by Cesium ion",category:"Cesium ion",creationFunction:function(){return m0({style:u0.AERIAL})}})),e.push(new cs({name:"Bing Maps Aerial with Labels",iconUrl:nn("Widgets/Images/ImageryProviders/bingAerialLabels.png"),tooltip:"Bing Maps aerial imagery with labels, provided by Cesium ion",category:"Cesium ion",creationFunction:function(){return m0({style:u0.AERIAL_WITH_LABELS})}})),e.push(new cs({name:"Bing Maps Roads",iconUrl:nn("Widgets/Images/ImageryProviders/bingRoads.png"),tooltip:"Bing Maps standard road maps, provided by Cesium ion",category:"Cesium ion",creationFunction:function(){return m0({style:u0.ROAD})}})),e.push(new cs({name:"ArcGIS World Imagery",iconUrl:nn("Widgets/Images/ImageryProviders/ArcGisMapServiceWorldImagery.png"),tooltip:`ArcGIS World Imagery provides one meter or better satellite and aerial imagery in many parts of the world and lower resolution satellite imagery worldwide. The map includes 15m TerraColor imagery at small and mid-scales (~1:591M down to ~1:288k) for the world. The map features Maxar imagery at 0.3m resolution for select metropolitan areas around the world, 0.5m resolution across the United States and parts of Western Europe, and 1m resolution imagery across the rest of the world. In addition to commercial sources, the World Imagery map features high-resolution aerial photography contributed by the GIS User Community. This imagery ranges from 0.3m to 0.03m resolution (down to ~1:280 nin select communities). For more information on this map, including the terms of use, visit us online at https://www.arcgis.com/home/item.html?id=10df2279f9684e4a9f6a7f08febac2a9`,category:"Other",creationFunction:function(){return l0.fromBasemapType(Ah.SATELLITE,{enablePickFeatures:!1})}})),e.push(new cs({name:"ArcGIS World Hillshade",iconUrl:nn("Widgets/Images/ImageryProviders/ArcGisMapServiceWorldHillshade.png"),tooltip:`ArcGIS World Hillshade map portrays elevation as an artistic hillshade. This map is designed to be used as a backdrop for topographical, soil, hydro, landcover or other outdoor recreational maps. The map was compiled from a variety of sources from several data providers. The basemap has global coverage down to a scale of ~1:72k. In select areas of the United States and Europe, coverage is available down to ~1:9k. For more information on this map, including the terms of use, visit us online at https://www.arcgis.com/home/item.html?id=1b243539f4514b6ba35e7d995890db1d`,category:"Other",creationFunction:function(){return l0.fromBasemapType(Ah.HILLSHADE,{enablePickFeatures:!1})}})),e.push(new cs({name:"Esri World Ocean",iconUrl:nn("Widgets/Images/ImageryProviders/ArcGisMapServiceWorldOcean.png"),tooltip:`ArcGIS World Ocean map is designed to be used as a base map by marine GIS professionals and as a reference map by anyone interested in ocean data. The base map features marine bathymetry. Land features include inland waters and roads overlaid on land cover and shaded relief imagery. The map was compiled from a variety of best available sources from several data providers, including General Bathymetric Chart of the Oceans GEBCO_08 Grid, National Oceanic and Atmospheric Administration (NOAA), and National Geographic, Garmin, HERE, Geonames.org, and Esri, and various other contributors. The base map currently provides coverage for the world down to a scale of ~1:577k, and coverage down to 1:72k in US coastal areas, and various other areas. Coverage down to ~ 1:9k is available limited areas based on regional hydrographic survey data. The base map was designed and developed by Esri. For more information on this map, including our terms of use, visit us online at https://www.arcgis.com/home/item.html?id=1e126e7520f9466c9ca28b8f28b5e500`,category:"Other",creationFunction:function(){return l0.fromBasemapType(Ah.OCEANS,{enablePickFeatures:!1})}})),e.push(new cs({name:"Open\xADStreet\xADMap",iconUrl:nn("Widgets/Images/ImageryProviders/openStreetMap.png"),tooltip:`OpenStreetMap (OSM) is a collaborative project to create a free editable map of the world. http://www.openstreetmap.org`,category:"Other",creationFunction:function(){return new I0({url:"https://tile.openstreetmap.org/"})}})),e.push(new cs({name:"Stadia x Stamen Watercolor",iconUrl:nn("Widgets/Images/ImageryProviders/stamenWatercolor.png"),tooltip:`Based on the original basemaps created for the Knight Foundation and reminiscent of hand drawn maps, the watercolor maps from Stamen Design apply raster effect area washes and organic edges over a paper texture to add warm pop to any map. https://docs.stadiamaps.com/map-styles/stamen-watercolor/`,category:"Other",creationFunction:function(){return new I0({url:"https://tiles.stadiamaps.com/tiles/stamen_watercolor/",fileExtension:"jpg",credit:`© <a href="https://stamen.com/" target="_blank">Stamen Design</a> © <a href="https://www.stadiamaps.com/" target="_blank">Stadia Maps</a> © <a href="https://openmaptiles.org/" target="_blank">OpenMapTiles</a> © <a href="https://www.openstreetmap.org/about/" target="_blank">OpenStreetMap contributors</a>`})}})),e.push(new cs({name:"Stadia x Stamen Toner",iconUrl:nn("Widgets/Images/ImageryProviders/stamenToner.png"),tooltip:`Based on the original basemaps created for the Knight Foundation and the most popular of the excellent styles from Stamen Design, these high-contrast B+W (black and white) maps are the perfect backdrop for your colorful and eye-catching overlays. https://docs.stadiamaps.com/map-styles/stamen-toner/`,category:"Other",creationFunction:function(){return new I0({url:"https://tiles.stadiamaps.com/tiles/stamen_toner/",retinaTiles:t,credit:`© <a href="https://stamen.com/" target="_blank">Stamen Design</a> © <a href="https://www.stadiamaps.com/" target="_blank">Stadia Maps</a> © <a href="https://openmaptiles.org/" target="_blank">OpenMapTiles</a> © <a href="https://www.openstreetmap.org/about/" target="_blank">OpenStreetMap contributors</a>`})}})),e.push(new cs({name:"Stadia Alidade Smooth",iconUrl:nn("Widgets/Images/ImageryProviders/stadiaAlidadeSmooth.png"),tooltip:`Stadia's custom Alidade Smooth style is designed for maps that use a lot of markers or overlays. It features a muted color scheme and fewer points of interest to allow your added data to shine. https://docs.stadiamaps.com/map-styles/alidade-smooth/`,category:"Other",creationFunction:function(){return new I0({url:"https://tiles.stadiamaps.com/tiles/alidade_smooth/",retinaTiles:t,credit:`© <a href="https://www.stadiamaps.com/" target="_blank">Stadia Maps</a> © <a href="https://openmaptiles.org/" target="_blank">OpenMapTiles</a> © <a href="https://www.openstreetmap.org/about/" target="_blank">OpenStreetMap contributors</a>`})}})),e.push(new cs({name:"Stadia Alidade Smooth Dark",iconUrl:nn("Widgets/Images/ImageryProviders/stadiaAlidadeSmoothDark.png"),tooltip:`Stadia Alidade Smooth Dark, like its lighter cousin, is also designed to stay out of the way. It just flips the dark mode switch on the color scheme. With the lights out, your data can now literally shine. https://docs.stadiamaps.com/map-styles/alidade-smooth-dark/`,category:"Other",creationFunction:function(){return new I0({url:"https://tiles.stadiamaps.com/tiles/alidade_smooth_dark/",retinaTiles:t,credit:`© <a href="https://www.stadiamaps.com/" target="_blank">Stadia Maps</a> © <a href="https://openmaptiles.org/" target="_blank">OpenMapTiles</a> © <a href="https://www.openstreetmap.org/about/" target="_blank">OpenStreetMap contributors</a>`})}})),e.push(new cs({name:"Sentinel-2",iconUrl:nn("Widgets/Images/ImageryProviders/sentinel-2.png"),tooltip:"Sentinel-2 cloudless by EOX IT Services GmbH (Contains modified Copernicus Sentinel data 2016 and 2017).",category:"Cesium ion",creationFunction:function(){return d0.fromAssetId(3954)}})),e.push(new cs({name:"Blue Marble",iconUrl:nn("Widgets/Images/ImageryProviders/blueMarble.png"),tooltip:"Blue Marble Next Generation July, 2004 imagery from NASA.",category:"Cesium ion",creationFunction:function(){return d0.fromAssetId(3845)}})),e.push(new cs({name:"Earth at night",iconUrl:nn("Widgets/Images/ImageryProviders/earthAtNight.png"),tooltip:"The Earth at night, also known as The Black Marble, is a 500 meter resolution global composite imagery layer released by NASA.",category:"Cesium ion",creationFunction:function(){return d0.fromAssetId(3812)}})),e.push(new cs({name:"Natural Earth\xA0II",iconUrl:nn("Widgets/Images/ImageryProviders/naturalEarthII.png"),tooltip:`Natural Earth II, darkened for contrast. http://www.naturalearthdata.com/`,category:"Cesium ion",creationFunction:function(){return Ly.fromUrl(nn("Assets/Textures/NaturalEarthII"))}})),e}var yM=C1t;var cLo=_(T(),1);function V1t(){let e=[];return e.push(new cs({name:"WGS84 Ellipsoid",iconUrl:nn("Widgets/Images/TerrainProviders/Ellipsoid.png"),tooltip:"WGS84 standard ellipsoid, also known as EPSG:4326",category:"Cesium ion",creationFunction:function(){return new $f({ellipsoid:ne.WGS84})}})),e.push(new cs({name:"Cesium World Terrain",iconUrl:nn("Widgets/Images/TerrainProviders/CesiumWorldTerrain.png"),tooltip:"High-resolution global terrain tileset curated from several datasources and hosted by Cesium ion",category:"Cesium ion",creationFunction:function(){return VS({requestWaterMask:!0,requestVertexNormals:!0})}})),e}var xM=V1t;var SLo=_(T(),1);var fLo=_(T(),1);function L1t(e){let t;if(l(e)){t="Command Statistics";let n=e.commandsInFrustums;for(let i in n)if(n.hasOwnProperty(i)){let o=parseInt(i,10),r;if(o===7)r="1, 2 and 3";else{let s=[];for(let a=2;a>=0;a--){let c=Math.pow(2,a);o>=c&&(s.push(a+1),o-=c)}r=s.reverse().join(" and ")}t+=`<br> ${n[i]} in frustum ${r}`}t+=`<br>Total: ${e.totalCommands}`}return t}function Q6(e,t,n){let i=Math.min(n,t);return i=Math.max(i,e),i}var R1t=new pn,Z1t=new m;function _M(e,t){let n=this,i=e.canvas,o=new iu(i);this._eventHandler=o,this._scene=e,this._canvas=i,this._primitive=void 0,this._tile=void 0,this._modelMatrixPrimitive=void 0,this._performanceDisplay=void 0,this._performanceContainer=t;let r=this._scene.globe;r.depthTestAgainstTerrain=!0,this.frustums=!1,this.frustumPlanes=!1,this.performance=!1,this.shaderCacheText="",this.primitiveBoundingSphere=!1,this.primitiveReferenceFrame=!1,this.filterPrimitive=!1,this.tileBoundingSphere=!1,this.filterTile=!1,this.wireframe=!1,this.depthFrustum=1,this._numberOfFrustums=1,this.suspendUpdates=!1,this.tileCoordinates=!1,this.frustumStatisticText=!1,this.tileText="",this.hasPickedPrimitive=!1,this.hasPickedTile=!1,this.pickPrimitiveActive=!1,this.pickTileActive=!1,this.dropDownVisible=!0,this.generalVisible=!0,this.primitivesVisible=!1,this.terrainVisible=!1,this.depthFrustumText="",Se.track(this,["frustums","frustumPlanes","performance","shaderCacheText","primitiveBoundingSphere","primitiveReferenceFrame","filterPrimitive","tileBoundingSphere","filterTile","wireframe","depthFrustum","suspendUpdates","tileCoordinates","frustumStatisticText","tileText","hasPickedPrimitive","hasPickedTile","pickPrimitiveActive","pickTileActive","dropDownVisible","generalVisible","primitivesVisible","terrainVisible","depthFrustumText"]),this._toggleDropDown=Rn(function(){n.dropDownVisible=!n.dropDownVisible}),this._toggleGeneral=Rn(function(){n.generalVisible=!n.generalVisible}),this._togglePrimitives=Rn(function(){n.primitivesVisible=!n.primitivesVisible}),this._toggleTerrain=Rn(function(){n.terrainVisible=!n.terrainVisible}),this._frustumsSubscription=Se.getObservable(this,"frustums").subscribe(function(d){n._scene.debugShowFrustums=d,n._scene.requestRender()}),this._frustumPlanesSubscription=Se.getObservable(this,"frustumPlanes").subscribe(function(d){n._scene.debugShowFrustumPlanes=d,n._scene.requestRender()}),this._performanceSubscription=Se.getObservable(this,"performance").subscribe(function(d){d?n._performanceDisplay=new p0({container:n._performanceContainer}):n._performanceContainer.innerHTML=""}),this._showPrimitiveBoundingSphere=Rn(function(){return n._primitive.debugShowBoundingVolume=n.primitiveBoundingSphere,n._scene.requestRender(),!0}),this._primitiveBoundingSphereSubscription=Se.getObservable(this,"primitiveBoundingSphere").subscribe(function(){n._showPrimitiveBoundingSphere()}),this._showPrimitiveReferenceFrame=Rn(function(){if(n.primitiveReferenceFrame){let d=n._primitive.modelMatrix;n._modelMatrixPrimitive=new AA({modelMatrix:d}),n._scene.primitives.add(n._modelMatrixPrimitive)}else l(n._modelMatrixPrimitive)&&(n._scene.primitives.remove(n._modelMatrixPrimitive),n._modelMatrixPrimitive=void 0);return n._scene.requestRender(),!0}),this._primitiveReferenceFrameSubscription=Se.getObservable(this,"primitiveReferenceFrame").subscribe(function(){n._showPrimitiveReferenceFrame()}),this._doFilterPrimitive=Rn(function(){return n.filterPrimitive?n._scene.debugCommandFilter=function(d){return l(n._modelMatrixPrimitive)&&d.owner===n._modelMatrixPrimitive._primitive?!0:l(n._primitive)?d.owner===n._primitive||d.owner===n._primitive._billboardCollection||d.owner.primitive===n._primitive:!1}:n._scene.debugCommandFilter=void 0,!0}),this._filterPrimitiveSubscription=Se.getObservable(this,"filterPrimitive").subscribe(function(){n._doFilterPrimitive(),n._scene.requestRender()}),this._wireframeSubscription=Se.getObservable(this,"wireframe").subscribe(function(d){r._surface.tileProvider._debug.wireframe=d,n._scene.requestRender()}),this._depthFrustumSubscription=Se.getObservable(this,"depthFrustum").subscribe(function(d){n._scene.debugShowDepthFrustum=d,n._scene.requestRender()}),this._incrementDepthFrustum=Rn(function(){let d=n.depthFrustum+1;return n.depthFrustum=Q6(1,n._numberOfFrustums,d),n._scene.requestRender(),!0}),this._decrementDepthFrustum=Rn(function(){let d=n.depthFrustum-1;return n.depthFrustum=Q6(1,n._numberOfFrustums,d),n._scene.requestRender(),!0}),this._suspendUpdatesSubscription=Se.getObservable(this,"suspendUpdates").subscribe(function(d){r._surface._debug.suspendLodUpdate=d,d||(n.filterTile=!1)});let s;this._showTileCoordinates=Rn(function(){return n.tileCoordinates&&!l(s)?s=e.imageryLayers.addImageryProvider(new eM({tilingScheme:e.terrainProvider.tilingScheme})):!n.tileCoordinates&&l(s)&&(e.imageryLayers.remove(s),s=void 0),!0}),this._tileCoordinatesSubscription=Se.getObservable(this,"tileCoordinates").subscribe(function(){n._showTileCoordinates(),n._scene.requestRender()}),this._tileBoundingSphereSubscription=Se.getObservable(this,"tileBoundingSphere").subscribe(function(){n._showTileBoundingSphere(),n._scene.requestRender()}),this._showTileBoundingSphere=Rn(function(){return n.tileBoundingSphere?r._surface.tileProvider._debug.boundingSphereTile=n._tile:r._surface.tileProvider._debug.boundingSphereTile=void 0,n._scene.requestRender(),!0}),this._doFilterTile=Rn(function(){return n.filterTile?(n.suspendUpdates=!0,r._surface._tilesToRender=[],l(n._tile)&&n._tile.renderable&&r._surface._tilesToRender.push(n._tile)):n.suspendUpdates=!1,!0}),this._filterTileSubscription=Se.getObservable(this,"filterTile").subscribe(function(){n.doFilterTile(),n._scene.requestRender()});function a(d){let u=n._scene.pick({x:d.position.x,y:d.position.y});l(u)&&(n.primitive=l(u.collection)?u.collection:u.primitive),n._scene.requestRender(),n.pickPrimitiveActive=!1}this._pickPrimitive=Rn(function(){n.pickPrimitiveActive=!n.pickPrimitiveActive}),this._pickPrimitiveActiveSubscription=Se.getObservable(this,"pickPrimitiveActive").subscribe(function(d){d?o.setInputAction(a,Sn.LEFT_CLICK):o.removeInputAction(Sn.LEFT_CLICK)});function c(d){let u,h=r.ellipsoid,p=n._scene.camera.getPickRay(d.position,R1t),g=r.pick(p,n._scene,Z1t);if(l(g)){let f=h.cartesianToCartographic(g),y=r._surface.tileProvider._tilesToRenderByTextureCount;for(let x=0;!u&&x<y.length;++x){let S=y[x];if(l(S))for(let C=0;!u&&C<S.length;++C){let V=S[C];ce.contains(V.rectangle,f)&&(u=V)}}}n.tile=u,n.pickTileActive=!1}this._pickTile=Rn(function(){n.pickTileActive=!n.pickTileActive}),this._pickTileActiveSubscription=Se.getObservable(this,"pickTileActive").subscribe(function(d){d?o.setInputAction(c,Sn.LEFT_CLICK):o.removeInputAction(Sn.LEFT_CLICK)}),this._removePostRenderEvent=e.postRender.addEventListener(function(){n._update()})}Object.defineProperties(_M.prototype,{scene:{get:function(){return this._scene}},performanceContainer:{get:function(){return this._performanceContainer}},toggleDropDown:{get:function(){return this._toggleDropDown}},showPrimitiveBoundingSphere:{get:function(){return this._showPrimitiveBoundingSphere}},showPrimitiveReferenceFrame:{get:function(){return this._showPrimitiveReferenceFrame}},doFilterPrimitive:{get:function(){return this._doFilterPrimitive}},incrementDepthFrustum:{get:function(){return this._incrementDepthFrustum}},decrementDepthFrustum:{get:function(){return this._decrementDepthFrustum}},showTileCoordinates:{get:function(){return this._showTileCoordinates}},showTileBoundingSphere:{get:function(){return this._showTileBoundingSphere}},doFilterTile:{get:function(){return this._doFilterTile}},toggleGeneral:{get:function(){return this._toggleGeneral}},togglePrimitives:{get:function(){return this._togglePrimitives}},toggleTerrain:{get:function(){return this._toggleTerrain}},pickPrimitive:{get:function(){return this._pickPrimitive}},pickTile:{get:function(){return this._pickTile}},selectParent:{get:function(){let e=this;return Rn(function(){e.tile=e.tile.parent})}},selectNW:{get:function(){let e=this;return Rn(function(){e.tile=e.tile.northwestChild})}},selectNE:{get:function(){let e=this;return Rn(function(){e.tile=e.tile.northeastChild})}},selectSW:{get:function(){let e=this;return Rn(function(){e.tile=e.tile.southwestChild})}},selectSE:{get:function(){let e=this;return Rn(function(){e.tile=e.tile.southeastChild})}},primitive:{get:function(){return this._primitive},set:function(e){let t=this._primitive;e!==t&&(this.hasPickedPrimitive=!0,l(t)&&(t.debugShowBoundingVolume=!1),this._scene.debugCommandFilter=void 0,l(this._modelMatrixPrimitive)&&(this._scene.primitives.remove(this._modelMatrixPrimitive),this._modelMatrixPrimitive=void 0),this._primitive=e,e.show=!1,setTimeout(function(){e.show=!0},50),this.showPrimitiveBoundingSphere(),this.showPrimitiveReferenceFrame(),this.doFilterPrimitive())}},tile:{get:function(){return this._tile},set:function(e){if(l(e)){this.hasPickedTile=!0;let t=this._tile;if(e!==t){this.tileText=`L: ${e.level} X: ${e.x} Y: ${e.y}`,this.tileText+=`<br>SW corner: ${e.rectangle.west}, ${e.rectangle.south}`,this.tileText+=`<br>NE corner: ${e.rectangle.east}, ${e.rectangle.north}`;let n=e.data;l(n)&&l(n.tileBoundingRegion)?this.tileText+=`<br>Min: ${n.tileBoundingRegion.minimumHeight} Max: ${n.tileBoundingRegion.maximumHeight}`:this.tileText+="<br>(Tile is not loaded)"}this._tile=e,this.showTileBoundingSphere(),this.doFilterTile()}else this.hasPickedTile=!1,this._tile=void 0}}});_M.prototype._update=function(){this.frustums&&(this.frustumStatisticText=L1t(this._scene.debugFrustumStatistics));let e=this._scene.numberOfFrustums;this._numberOfFrustums=e,this.depthFrustum=Q6(1,e,this.depthFrustum),this.depthFrustumText=`${this.depthFrustum} of ${e}`,this.performance&&this._performanceDisplay.update(),this.primitiveReferenceFrame&&(this._modelMatrixPrimitive.modelMatrix=this._primitive.modelMatrix),this.shaderCacheText=`Cached shaders: ${this._scene.context.shaderCache.numberOfShaders}`};_M.prototype.isDestroyed=function(){return!1};_M.prototype.destroy=function(){return this._eventHandler.destroy(),this._removePostRenderEvent(),this._frustumsSubscription.dispose(),this._frustumPlanesSubscription.dispose(),this._performanceSubscription.dispose(),this._primitiveBoundingSphereSubscription.dispose(),this._primitiveReferenceFrameSubscription.dispose(),this._filterPrimitiveSubscription.dispose(),this._wireframeSubscription.dispose(),this._depthFrustumSubscription.dispose(),this._suspendUpdatesSubscription.dispose(),this._tileCoordinatesSubscription.dispose(),this._tileBoundingSphereSubscription.dispose(),this._filterTileSubscription.dispose(),this._pickPrimitiveActiveSubscription.dispose(),this._pickTileActiveSubscription.dispose(),me(this)};var TM=_M;function SB(e,t){e=Xn(e);let n=document.createElement("div"),i=new TM(t,n);this._viewModel=i,this._container=e;let o=document.createElement("div");this._element=o;let r=document.createElement("div");r.textContent="Cesium Inspector",r.className="cesium-cesiumInspector-button",r.setAttribute("data-bind","click: toggleDropDown"),o.appendChild(r),o.className="cesium-cesiumInspector",o.setAttribute("data-bind",'css: { "cesium-cesiumInspector-visible" : dropDownVisible, "cesium-cesiumInspector-hidden" : !dropDownVisible }'),e.appendChild(this._element);let s=document.createElement("div");s.className="cesium-cesiumInspector-dropDown",o.appendChild(s);let a=Ja.createSection,c=Ja.createCheckbox,d=a(s,"General","generalVisible","toggleGeneral"),u=c("Show Frustums","frustums"),h=document.createElement("div");h.className="cesium-cesiumInspector-frustumStatistics",h.setAttribute("data-bind","visible: frustums, html: frustumStatisticText"),u.appendChild(h),d.appendChild(u),d.appendChild(c("Show Frustum Planes","frustumPlanes")),d.appendChild(c("Performance Display","performance")),n.className="cesium-cesiumInspector-performanceDisplay",d.appendChild(n);let p=document.createElement("div");p.className="cesium-cesiumInspector-shaderCache",p.setAttribute("data-bind","html: shaderCacheText"),d.appendChild(p);let g=document.createElement("div");d.appendChild(g);let f=document.createElement("span");f.setAttribute("data-bind",'html: " Frustum:"'),g.appendChild(f);let y=document.createElement("span");y.setAttribute("data-bind","text: depthFrustumText"),g.appendChild(y);let x=document.createElement("input");x.type="button",x.value="-",x.className="cesium-cesiumInspector-pickButton",x.setAttribute("data-bind","click: decrementDepthFrustum"),g.appendChild(x);let S=document.createElement("input");S.type="button",S.value="+",S.className="cesium-cesiumInspector-pickButton",S.setAttribute("data-bind","click: incrementDepthFrustum"),g.appendChild(S);let C=a(s,"Primitives","primitivesVisible","togglePrimitives"),V=document.createElement("div");V.className="cesium-cesiumInspector-pickSection",C.appendChild(V);let L=document.createElement("input");L.type="button",L.value="Pick a primitive",L.className="cesium-cesiumInspector-pickButton",L.setAttribute("data-bind",'css: {"cesium-cesiumInspector-pickButtonHighlight" : pickPrimitiveActive}, click: pickPrimitive');let Z=document.createElement("div");Z.className="cesium-cesiumInspector-center",Z.appendChild(L),V.appendChild(Z),V.appendChild(c("Show bounding sphere","primitiveBoundingSphere","hasPickedPrimitive")),V.appendChild(c("Show reference frame","primitiveReferenceFrame","hasPickedPrimitive")),this._primitiveOnly=c("Show only selected","filterPrimitive","hasPickedPrimitive"),V.appendChild(this._primitiveOnly);let E=a(s,"Terrain","terrainVisible","toggleTerrain"),P=document.createElement("div");P.className="cesium-cesiumInspector-pickSection",E.appendChild(P);let W=document.createElement("input");W.type="button",W.value="Pick a tile",W.className="cesium-cesiumInspector-pickButton",W.setAttribute("data-bind",'css: {"cesium-cesiumInspector-pickButtonHighlight" : pickTileActive}, click: pickTile'),Z=document.createElement("div"),Z.appendChild(W),Z.className="cesium-cesiumInspector-center",P.appendChild(Z);let v=document.createElement("div");P.appendChild(v);let A=document.createElement("input");A.type="button",A.value="Parent",A.className="cesium-cesiumInspector-pickButton",A.setAttribute("data-bind","click: selectParent");let b=document.createElement("input");b.type="button",b.value="NW",b.className="cesium-cesiumInspector-pickButton",b.setAttribute("data-bind","click: selectNW");let R=document.createElement("input");R.type="button",R.value="NE",R.className="cesium-cesiumInspector-pickButton",R.setAttribute("data-bind","click: selectNE");let G=document.createElement("input");G.type="button",G.value="SW",G.className="cesium-cesiumInspector-pickButton",G.setAttribute("data-bind","click: selectSW");let I=document.createElement("input");I.type="button",I.value="SE",I.className="cesium-cesiumInspector-pickButton",I.setAttribute("data-bind","click: selectSE");let w=document.createElement("div");w.className="cesium-cesiumInspector-tileText",v.className="cesium-cesiumInspector-frustumStatistics",v.appendChild(w),v.setAttribute("data-bind","visible: hasPickedTile"),w.setAttribute("data-bind","html: tileText");let M=document.createElement("div");M.className="cesium-cesiumInspector-relativeText",M.textContent="Select relative:",v.appendChild(M);let B=document.createElement("table"),k=document.createElement("tr"),O=document.createElement("tr"),N=document.createElement("td");N.appendChild(A);let z=document.createElement("td");z.appendChild(b);let K=document.createElement("td");K.appendChild(R),k.appendChild(N),k.appendChild(z),k.appendChild(K);let te=document.createElement("td"),H=document.createElement("td");H.appendChild(G);let j=document.createElement("td");j.appendChild(I),O.appendChild(te),O.appendChild(H),O.appendChild(j),B.appendChild(k),B.appendChild(O),v.appendChild(B),P.appendChild(c("Show bounding volume","tileBoundingSphere","hasPickedTile")),P.appendChild(c("Show only selected","filterTile","hasPickedTile")),E.appendChild(c("Wireframe","wireframe")),E.appendChild(c("Suspend LOD update","suspendUpdates")),E.appendChild(c("Show tile coordinates","tileCoordinates")),Se.applyBindings(i,this._element)}Object.defineProperties(SB.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});SB.prototype.isDestroyed=function(){return!1};SB.prototype.destroy=function(){return Se.cleanNode(this._element),this._container.removeChild(this._element),this.viewModel.destroy(),me(this)};var SM=SB;var wLo=_(T(),1);var GLo=_(T(),1);function CB(e,t){l(t)||(t=document.body),t=Xn(t);let n=this,i=Se.observable(br.fullscreen),o=Se.observable(br.enabled),r=t.ownerDocument;this.isFullscreen=void 0,Se.defineProperty(this,"isFullscreen",{get:function(){return i()}}),this.isFullscreenEnabled=void 0,Se.defineProperty(this,"isFullscreenEnabled",{get:function(){return o()},set:function(s){o(s&&br.enabled)}}),this.tooltip=void 0,Se.defineProperty(this,"tooltip",function(){return this.isFullscreenEnabled?i()?"Exit full screen":"Full screen":"Full screen unavailable"}),this._command=Rn(function(){br.fullscreen?br.exitFullscreen():br.requestFullscreen(n._fullscreenElement)},Se.getObservable(this,"isFullscreenEnabled")),this._fullscreenElement=Xn(e)??r.body,this._callback=function(){i(br.fullscreen)},r.addEventListener(br.changeEventName,this._callback)}Object.defineProperties(CB.prototype,{fullscreenElement:{get:function(){return this._fullscreenElement},set:function(e){this._fullscreenElement=e}},command:{get:function(){return this._command}}});CB.prototype.isDestroyed=function(){return!1};CB.prototype.destroy=function(){document.removeEventListener(br.changeEventName,this._callback),me(this)};var CM=CB;var G1t="M 83.96875 17.5625 L 83.96875 17.59375 L 76.65625 24.875 L 97.09375 24.96875 L 76.09375 45.96875 L 81.9375 51.8125 L 102.78125 30.9375 L 102.875 51.15625 L 110.15625 43.875 L 110.1875 17.59375 L 83.96875 17.5625 z M 44.125 17.59375 L 17.90625 17.625 L 17.9375 43.90625 L 25.21875 51.1875 L 25.3125 30.96875 L 46.15625 51.8125 L 52 45.96875 L 31 25 L 51.4375 24.90625 L 44.125 17.59375 z M 46.0625 76.03125 L 25.1875 96.875 L 25.09375 76.65625 L 17.8125 83.9375 L 17.8125 110.21875 L 44 110.25 L 51.3125 102.9375 L 30.90625 102.84375 L 51.875 81.875 L 46.0625 76.03125 z M 82 76.15625 L 76.15625 82 L 97.15625 103 L 76.71875 103.0625 L 84.03125 110.375 L 110.25 110.34375 L 110.21875 84.0625 L 102.9375 76.8125 L 102.84375 97 L 82 76.15625 z",E1t="M 104.34375 17.5625 L 83.5 38.4375 L 83.40625 18.21875 L 76.125 25.5 L 76.09375 51.78125 L 102.3125 51.8125 L 102.3125 51.78125 L 109.625 44.5 L 89.1875 44.40625 L 110.1875 23.40625 L 104.34375 17.5625 z M 23.75 17.59375 L 17.90625 23.4375 L 38.90625 44.4375 L 18.5 44.53125 L 25.78125 51.8125 L 52 51.78125 L 51.96875 25.53125 L 44.6875 18.25 L 44.625 38.46875 L 23.75 17.59375 z M 25.6875 76.03125 L 18.375 83.3125 L 38.78125 83.40625 L 17.8125 104.40625 L 23.625 110.25 L 44.5 89.375 L 44.59375 109.59375 L 51.875 102.3125 L 51.875 76.0625 L 25.6875 76.03125 z M 102.375 76.15625 L 76.15625 76.1875 L 76.1875 102.4375 L 83.46875 109.71875 L 83.5625 89.53125 L 104.40625 110.375 L 110.25 104.53125 L 89.25 83.53125 L 109.6875 83.46875 L 102.375 76.15625 z";function VB(e,t){e=Xn(e);let n=new CM(t,e);n._exitFullScreenPath=E1t,n._enterFullScreenPath=G1t;let i=document.createElement("button");i.type="button",i.className="cesium-button cesium-fullscreenButton",i.setAttribute("data-bind","attr: { title: tooltip },click: command,enable: isFullscreenEnabled,cesiumSvgPath: { path: isFullscreen ? _exitFullScreenPath : _enterFullScreenPath, width: 128, height: 128 }"),e.appendChild(i),Se.applyBindings(n,i),this._container=e,this._viewModel=n,this._element=i}Object.defineProperties(VB.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});VB.prototype.isDestroyed=function(){return!1};VB.prototype.destroy=function(){return this._viewModel.destroy(),Se.cleanNode(this._element),this._container.removeChild(this._element),me(this)};var VM=VB;var KLo=_(T(),1);var ULo=_(T(),1);var ICe=1e3;function Cm(e){l(e.geocoderServices)?this._geocoderServices=e.geocoderServices:this._geocoderServices=[new SS({scene:e.scene})],this._viewContainer=e.container,this._scene=e.scene,this._flightDuration=e.flightDuration,this._searchText="",this._isSearchInProgress=!1,this._wasGeocodeCancelled=!1,this._previousCredits=[],this._complete=new be,this._suggestions=[],this._selectedSuggestion=void 0,this._showSuggestions=!0,this._handleArrowDown=WCe,this._handleArrowUp=XCe;let t=this;this._suggestionsVisible=Se.pureComputed(function(){let o=Se.getObservable(t,"_suggestions")().length>0,r=Se.getObservable(t,"_showSuggestions")();return o&&r}),this._searchCommand=Rn(function(i){if(i=i??Dy.SEARCH,t._focusTextbox=!1,l(t._selectedSuggestion))return t.activateSuggestion(t._selectedSuggestion),!1;if(t.hideSuggestions(),t.isSearchInProgress)w1t(t);else return P1t(t,t._geocoderServices,i)}),this.deselectSuggestion=function(){t._selectedSuggestion=void 0},this.handleKeyDown=function(i,o){let r=o.key==="ArrowDown"||o.key==="Down"||o.keyCode===40,s=o.key==="ArrowUp"||o.key==="Up"||o.keyCode===38;return(r||s)&&o.preventDefault(),!0},this.handleKeyUp=function(i,o){let r=o.key==="ArrowDown"||o.key==="Down"||o.keyCode===40,s=o.key==="ArrowUp"||o.key==="Up"||o.keyCode===38,a=o.key==="Enter"||o.keyCode===13;return s?XCe(t):r?WCe(t):a&&t._searchCommand(),!0},this.activateSuggestion=function(i){t.hideSuggestions(),t._searchText=i.displayName;let o=i.destination;wCe(t),t.destinationFound(t,o)},this.hideSuggestions=function(){t._showSuggestions=!1,t._selectedSuggestion=void 0},this.showSuggestions=function(){t._showSuggestions=!0},this.handleMouseover=function(i,o){i!==t._selectedSuggestion&&(t._selectedSuggestion=i)},this.keepExpanded=!1,this.autoComplete=e.autocomplete??!0,this.destinationFound=e.destinationFound??Cm.flyToDestination,this._focusTextbox=!1,Se.track(this,["_searchText","_isSearchInProgress","keepExpanded","_suggestions","_selectedSuggestion","_showSuggestions","_focusTextbox"]);let n=Se.getObservable(this,"_searchText");n.extend({rateLimit:{timeout:500}}),this._suggestionSubscription=n.subscribe(function(){Cm._updateSearchSuggestions(t)}),this.isSearchInProgress=void 0,Se.defineProperty(this,"isSearchInProgress",{get:function(){return this._isSearchInProgress}}),this.searchText=void 0,Se.defineProperty(this,"searchText",{get:function(){return this.isSearchInProgress?"Searching...":this._searchText},set:function(i){this._searchText=i}}),this.flightDuration=void 0,Se.defineProperty(this,"flightDuration",{get:function(){return this._flightDuration},set:function(i){this._flightDuration=i}})}Object.defineProperties(Cm.prototype,{complete:{get:function(){return this._complete}},scene:{get:function(){return this._scene}},search:{get:function(){return this._searchCommand}},selectedSuggestion:{get:function(){return this._selectedSuggestion}},suggestions:{get:function(){return this._suggestions}}});Cm.prototype.destroy=function(){this._suggestionSubscription.dispose()};function XCe(e){if(e._suggestions.length===0)return;let t=e._suggestions.indexOf(e._selectedSuggestion);if(t===-1||t===0){e._selectedSuggestion=void 0;return}let n=t-1;e._selectedSuggestion=e._suggestions[n],Cm._adjustSuggestionsScroll(e,n)}function WCe(e){if(e._suggestions.length===0)return;let t=e._suggestions.length,i=(e._suggestions.indexOf(e._selectedSuggestion)+1)%t;e._selectedSuggestion=e._suggestions[i],Cm._adjustSuggestionsScroll(e,i)}function I1t(e,t){let n=l(t)?t.availability:void 0;return l(n)?WT(t,[e]).then(function(i){return e=i[0],e.height+=ICe,e}):(e.height+=ICe,Promise.resolve(e))}function X1t(e,t){let n=e._scene,i=n.ellipsoid,o=n.camera,r=n.terrainProvider,s=t,a;return t instanceof ce?X.equalsEpsilon(t.south,t.north,X.EPSILON7)&&X.equalsEpsilon(t.east,t.west,X.EPSILON7)?t=ce.center(t):a=PT(t,n):t=i.cartesianToCartographic(t),l(a)||(a=I1t(t,r)),a.then(function(c){s=i.cartographicToCartesian(c)}).finally(function(){o.flyTo({destination:s,complete:function(){e._complete.raiseEvent()},duration:e._flightDuration,endTransform:F.IDENTITY})})}async function W1t(e,t,n){try{return{state:"fulfilled",value:await e.geocode(t,n),credits:e.credit}}catch(i){return{state:"rejected",reason:i}}}async function P1t(e,t,n){let i=e._searchText;if(vCe(i)){e.showSuggestions();return}e._isSearchInProgress=!0,e._wasGeocodeCancelled=!1;let o,r;for(o=0;o<t.length;o++){if(e._wasGeocodeCancelled)return;if(r=await W1t(t[o],i,n),l(r)&&r.state==="fulfilled"&&r.value.length>0)break}if(e._wasGeocodeCancelled)return;e._isSearchInProgress=!1,q6(e);let s=r.value;if(r.state==="fulfilled"&&l(s)&&s.length>0){e._searchText=s[0].displayName,e.destinationFound(e,s[0].destination);let a=PCe(e,EL.getCreditsFromResult(s[0]));l(a)||j6(e,t[o].credit);return}e._searchText=`${i} (not found)`}function j6(e,t){l(t)&&!e._scene.isDestroyed()&&!e._scene.frameState.creditDisplay.isDestroyed()&&(e._scene.frameState.creditDisplay.addStaticCredit(t),e._previousCredits.push(t))}function PCe(e,t){return l(t)&&t.forEach(n=>j6(e,n)),t}function q6(e){!e._scene.isDestroyed()&&!e._scene.frameState.creditDisplay.isDestroyed()&&e._previousCredits.forEach(t=>{e._scene.frameState.creditDisplay.removeStaticCredit(t)}),e._previousCredits.length=0}function v1t(e,t){let n=Xn(e._viewContainer),i=n.getElementsByClassName("search-results")[0],r=n.getElementsByTagName("li")[t];if(t===0){i.scrollTop=0;return}let s=r.offsetTop;s+r.clientHeight>i.clientHeight?i.scrollTop=s+r.clientHeight:s<i.scrollTop&&(i.scrollTop=s)}function w1t(e){e._isSearchInProgress&&(e._isSearchInProgress=!1,e._wasGeocodeCancelled=!0)}function vCe(e){return/^\s*$/.test(e)}function wCe(e){Se.getObservable(e,"_suggestions").removeAll()}async function F1t(e){if(!e.autoComplete)return;let t=e._searchText;if(wCe(e),q6(e),!vCe(t))for(let n of e._geocoderServices){let i=await n.geocode(t,Dy.AUTOCOMPLETE);if(e._suggestions=e._suggestions.concat(i),i.length>0){let o=!0;i.forEach(r=>{let s=EL.getCreditsFromResult(r);o=o&&!l(s),PCe(e,s)}),o&&j6(e,n.credit)}if(e._suggestions.length>=5)return}}Cm.flyToDestination=X1t;Cm._updateSearchSuggestions=F1t;Cm._adjustSuggestionsScroll=v1t;Cm.prototype.isDestroyed=function(){return!1};Cm.prototype.destroy=function(){return q6(this),me(this)};var LM=Cm;var A1t="M29.772,26.433l-7.126-7.126c0.96-1.583,1.523-3.435,1.524-5.421C24.169,8.093,19.478,3.401,13.688,3.399C7.897,3.401,3.204,8.093,3.204,13.885c0,5.789,4.693,10.481,10.484,10.481c1.987,0,3.839-0.563,5.422-1.523l7.128,7.127L29.772,26.433zM7.203,13.885c0.006-3.582,2.903-6.478,6.484-6.486c3.579,0.008,6.478,2.904,6.484,6.486c-0.007,3.58-2.905,6.476-6.484,6.484C10.106,20.361,7.209,17.465,7.203,13.885z",M1t="M24.778,21.419 19.276,15.917 24.777,10.415 21.949,7.585 16.447,13.087 10.945,7.585 8.117,10.415 13.618,15.917 8.116,21.419 10.946,24.248 16.447,18.746 21.948,24.248z";function LB(e){let t=Xn(e.container),n=new LM(e);n._startSearchPath=A1t,n._stopSearchPath=M1t;let i=document.createElement("form");i.setAttribute("data-bind","submit: search");let o=document.createElement("input");o.type="search",o.className="cesium-geocoder-input",o.setAttribute("placeholder","Enter an address or landmark..."),o.setAttribute("data-bind",'textInput: searchText,disable: isSearchInProgress,event: { keyup: handleKeyUp, keydown: handleKeyDown, mouseover: deselectSuggestion },css: { "cesium-geocoder-input-wide" : keepExpanded || searchText.length > 0 },hasFocus: _focusTextbox'),this._onTextBoxFocus=function(){setTimeout(function(){o.select()},0)},o.addEventListener("focus",this._onTextBoxFocus,!1),i.appendChild(o),this._textBox=o;let r=document.createElement("span");r.className="cesium-geocoder-searchButton",r.setAttribute("data-bind","click: search,cesiumSvgPath: { path: isSearchInProgress ? _stopSearchPath : _startSearchPath, width: 32, height: 32 }"),i.appendChild(r),t.appendChild(i);let s=document.createElement("div");s.className="search-results",s.setAttribute("data-bind","visible: _suggestionsVisible");let a=document.createElement("ul");a.setAttribute("data-bind","foreach: _suggestions");let c=document.createElement("li");a.appendChild(c),c.setAttribute("data-bind","text: $data.displayName, click: $parent.activateSuggestion, event: { mouseover: $parent.handleMouseover}, css: { active: $data === $parent._selectedSuggestion }"),s.appendChild(a),t.appendChild(s),Se.applyBindings(n,i),Se.applyBindings(n,s),this._container=t,this._searchSuggestionsContainer=s,this._viewModel=n,this._form=i,this._onInputBegin=function(d){let u=d.target;typeof d.composedPath=="function"&&(u=d.composedPath()[0]),t.contains(u)||(n._focusTextbox=!1,n.hideSuggestions())},this._onInputEnd=function(d){n._focusTextbox=!0,n.showSuggestions()},Bt.supportsPointerEvents()?(document.addEventListener("pointerdown",this._onInputBegin,!0),t.addEventListener("pointerup",this._onInputEnd,!0),t.addEventListener("pointercancel",this._onInputEnd,!0)):(document.addEventListener("mousedown",this._onInputBegin,!0),t.addEventListener("mouseup",this._onInputEnd,!0),document.addEventListener("touchstart",this._onInputBegin,!0),t.addEventListener("touchend",this._onInputEnd,!0),t.addEventListener("touchcancel",this._onInputEnd,!0))}Object.defineProperties(LB.prototype,{container:{get:function(){return this._container}},searchSuggestionsContainer:{get:function(){return this._searchSuggestionsContainer}},viewModel:{get:function(){return this._viewModel}}});LB.prototype.isDestroyed=function(){return!1};LB.prototype.destroy=function(){let e=this._container;return Bt.supportsPointerEvents()?(document.removeEventListener("pointerdown",this._onInputBegin,!0),e.removeEventListener("pointerup",this._onInputEnd,!0)):(document.removeEventListener("mousedown",this._onInputBegin,!0),e.removeEventListener("mouseup",this._onInputEnd,!0),document.removeEventListener("touchstart",this._onInputBegin,!0),e.removeEventListener("touchend",this._onInputEnd,!0)),this._viewModel.destroy(),Se.cleanNode(this._form),Se.cleanNode(this._searchSuggestionsContainer),e.removeChild(this._form),e.removeChild(this._searchSuggestionsContainer),this._textBox.removeEventListener("focus",this._onTextBoxFocus,!1),me(this)};var RM=LB;var rRo=_(T(),1);var qLo=_(T(),1);function FCe(e,t){this._scene=e,this._duration=t;let n=this;this._command=Rn(function(){n._scene.camera.flyHome(n._duration)}),this.tooltip="View Home",Se.track(this,["tooltip"])}Object.defineProperties(FCe.prototype,{scene:{get:function(){return this._scene}},command:{get:function(){return this._command}},duration:{get:function(){return this._duration},set:function(e){this._duration=e}}});var ZM=FCe;function RB(e,t,n){e=Xn(e);let i=new ZM(t,n);i._svgPath="M14,4l-10,8.75h20l-4.25-3.7188v-4.6562h-2.812v2.1875l-2.938-2.5625zm-7.0938,9.906v10.094h14.094v-10.094h-14.094zm2.1876,2.313h3.3122v4.25h-3.3122v-4.25zm5.8442,1.281h3.406v6.438h-3.406v-6.438z";let o=document.createElement("button");o.type="button",o.className="cesium-button cesium-toolbar-button cesium-home-button",o.setAttribute("data-bind","attr: { title: tooltip },click: command,cesiumSvgPath: { path: _svgPath, width: 28, height: 28 }"),e.appendChild(o),Se.applyBindings(i,o),this._container=e,this._viewModel=i,this._element=o}Object.defineProperties(RB.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});RB.prototype.isDestroyed=function(){return!1};RB.prototype.destroy=function(){return Se.cleanNode(this._element),this._container.removeChild(this._element),me(this)};var GM=RB;var pRo=_(T(),1);var lRo=_(T(),1);function N1t(e,t){t.currentTarget.parentElement.parentElement.querySelector(`#${e.name}-expander`).classList.toggle("active"),t.currentTarget.textContent=t.currentTarget.textContent==="+"?"-":"+"}function MCe(e,t){Se.track(e);for(let n=0;n<e.sublayers.length;n++)MCe(e.sublayers[n],t)}function ZB(e){return e.modelName==="FullModel"}function NCe(e){return e.modelName==="Overview"}function kCe(e){return NCe(e)||ZB(e)}function ACe(e,t){if(kCe(e)){e.visibility=!1;for(let i=0;i<e.sublayers.length;i++)e.sublayers[i].visibility=!0;let n={name:e.name,modelName:e.modelName,disable:Se.observable(!1),index:t.sublayers.length};return t.topLayers.push(n),t.sublayers.push(e),n}}function k1t(e,t){if(kCe(e)){t.sublayers.forEach(i=>i.visibility=!1),t.sublayers[e.index].visibility=!0;let n=document.getElementById("bsl-wrapper");ZB(e)?(t.currentLevel=t.selectedLevel,n.style.display="block"):(t.selectedLevel=t.currentLevel,t.currentLevel="All",n.style.display="none")}}async function U1t(e,t){try{let n=e.getAttributeNames();for(let i=0;i<n.length;i++)if(n[i]==="BldgLevel"){let o=e.getAttributeValues(n[i]);for(let r=0;r<o.length;r++)t.push(o[r])}t.sort((i,o)=>i-o),t.unshift("All")}catch(n){console.log(`There was an error getting attributes: ${n}`)}}function D1t(e){let t=this;this.levels=[],this.viewModel={sublayers:[],levels:this.levels,currentLevel:Se.observable(),selectedLevel:"All",topLayers:[{name:"Select a layer to explore...",disable:Se.observable(!0),index:-1}],currentLayer:Se.observable(),expandClickHandler:N1t,setOptionDisable:function(i,o){Se.applyBindingsToNode(i,{disable:o.disable},o)},defaultLayer:void 0},this.viewModel.currentLayer.subscribe(function(i){k1t(i,t.viewModel)});let n=e.sublayers;for(let i=0;i<n.length;i++){MCe(n[i],this.viewModel);let o=ACe(n[i],this.viewModel);l(o)&&(NCe(o)||!l(this.viewModel.defaultLayer)&&ZB(o))&&(this.viewModel.defaultLayer=o)}if(this.viewModel.topLayers.length===1&&n.length>0){e.show=!1;let i={name:"Full Model",modelName:"FullModel",visibility:e.show,sublayers:e.sublayers};this.viewModel.defaultLayer=ACe(i,this.viewModel),this.viewModel.currentLayer.subscribe(function(o){e.show=ZB(o)})}else this.viewModel.topLayers.length===1&&(this.viewModel.topLayers[0].name="Building layers not found");return U1t(e,this.levels),this.viewModel.currentLevel.subscribe(function(i){i!=="All"?e.filterByAttributes([{name:"BldgLevel",values:[i]}]):e.filterByAttributes()}),this.viewModel}var EM=D1t;function B1t(e,t){let n=document.getElementById(e),i=document.createElement("div");i.classList.add("cesium-viewer-i3s-explorer"),i.innerHTML=` <h3>Building explorer</h3> <select data-bind="options: topLayers, optionsText: 'name', optionsAfterRender: setOptionDisable, value: currentLayer" ></select> <div id="bsl-wrapper"> <h3>Select Level</h3> <select data-bind="options: levels, value: currentLevel"></select> <h3>Disciplines & Categories</h3> <ul class="layersList" data-bind="foreach: sublayers"> <ul class="layersList" data-bind="foreach: sublayers.sort(function (l, r) { return l.name.localeCompare(r.name) })"> <li> <div class="li-wrapper"> <span class="expandItem" data-bind="click: $root.expandClickHandler" >+</span > <input type="checkbox" data-bind="checked: visibility, valueUpdate: 'input', attr: { id: name}" /> <label data-bind="attr: { for: name}"> <span data-bind="text: name"></span> </label> </div> <ul class="nested" data-bind="attr: { id: name + '-expander'}"> <li data-bind="foreach: sublayers.sort(function (l, r) { return l.name.localeCompare(r.name) })"> <div class="li-wrapper"> <input type="checkbox" data-bind="checked: visibility, valueUpdate: 'input', attr: { id: name}" /> <label data-bind="attr: { for: name}"> <span data-bind="text: name"></span> </label> </div> </li> </ul> </li> </ul> </ul> </div>`,n.appendChild(i);let o=new EM(t);Se.track(o),Se.applyBindings(o,n),l(o.defaultLayer)&&(o.currentLayer=o.defaultLayer)}var $6=B1t;var RRo=_(T(),1);var xRo=_(T(),1);function UCe(){this.showInstructions=!1;let e=this;this._command=Rn(function(){e.showInstructions=!e.showInstructions}),this._showClick=Rn(function(){e._touch=!1}),this._showTouch=Rn(function(){e._touch=!0}),this._touch=!1,this.tooltip="Navigation Instructions",Se.track(this,["tooltip","showInstructions","_touch"])}Object.defineProperties(UCe.prototype,{command:{get:function(){return this._command}},showClick:{get:function(){return this._showClick}},showTouch:{get:function(){return this._showTouch}}});var IM=UCe;function GB(e){let t=Xn(e.container),n=new IM,i=e.instructionsInitiallyVisible??!1;n.showInstructions=i,n._svgPath="M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466z M17.328,24.371h-2.707v-2.596h2.707V24.371zM17.328,19.003v0.858h-2.707v-1.057c0-3.19,3.63-3.696,3.63-5.963c0-1.034-0.924-1.826-2.134-1.826c-1.254,0-2.354,0.924-2.354,0.924l-1.541-1.915c0,0,1.519-1.584,4.137-1.584c2.487,0,4.796,1.54,4.796,4.136C21.156,16.208,17.328,16.627,17.328,19.003z";let o=document.createElement("span");o.className="cesium-navigationHelpButton-wrapper",t.appendChild(o);let r=document.createElement("button");r.type="button",r.className="cesium-button cesium-toolbar-button cesium-navigation-help-button",r.setAttribute("data-bind","attr: { title: tooltip },click: command,cesiumSvgPath: { path: _svgPath, width: 32, height: 32 }"),o.appendChild(r);let s=document.createElement("div");s.className="cesium-navigation-help",s.setAttribute("data-bind",'css: { "cesium-navigation-help-visible" : showInstructions}'),o.appendChild(s);let a=document.createElement("button");a.type="button",a.className="cesium-navigation-button cesium-navigation-button-left",a.setAttribute("data-bind",'click: showClick, css: {"cesium-navigation-button-selected": !_touch, "cesium-navigation-button-unselected": _touch}');let c=document.createElement("img");c.src=nn("Widgets/Images/NavigationHelp/Mouse.svg"),c.className="cesium-navigation-button-icon",c.style.width="25px",c.style.height="25px",a.appendChild(c),a.appendChild(document.createTextNode("Mouse"));let d=document.createElement("button");d.type="button",d.className="cesium-navigation-button cesium-navigation-button-right",d.setAttribute("data-bind",'click: showTouch, css: {"cesium-navigation-button-selected": _touch, "cesium-navigation-button-unselected": !_touch}');let u=document.createElement("img");u.src=nn("Widgets/Images/NavigationHelp/Touch.svg"),u.className="cesium-navigation-button-icon",u.style.width="25px",u.style.height="25px",d.appendChild(u),d.appendChild(document.createTextNode("Touch")),s.appendChild(a),s.appendChild(d);let h=document.createElement("div");h.className="cesium-click-navigation-help cesium-navigation-help-instructions",h.setAttribute("data-bind",'css: { "cesium-click-navigation-help-visible" : !_touch}'),h.innerHTML=` <table> <tr> <td><img src="${nn("Widgets/Images/NavigationHelp/MouseLeft.svg")}" width="48" height="48" /></td> <td> <div class="cesium-navigation-help-pan">Pan view</div> <div class="cesium-navigation-help-details">Left click + drag</div> </td> </tr> <tr> <td><img src="${nn("Widgets/Images/NavigationHelp/MouseRight.svg")}" width="48" height="48" /></td> <td> <div class="cesium-navigation-help-zoom">Zoom view</div> <div class="cesium-navigation-help-details">Right click + drag, or</div> <div class="cesium-navigation-help-details">Mouse wheel scroll</div> </td> </tr> <tr> <td><img src="${nn("Widgets/Images/NavigationHelp/MouseMiddle.svg")}" width="48" height="48" /></td> <td> <div class="cesium-navigation-help-rotate">Rotate view</div> <div class="cesium-navigation-help-details">Middle click + drag, or</div> <div class="cesium-navigation-help-details">CTRL + Left/Right click + drag</div> </td> </tr> </table>`,s.appendChild(h);let p=document.createElement("div");p.className="cesium-touch-navigation-help cesium-navigation-help-instructions",p.setAttribute("data-bind",'css: { "cesium-touch-navigation-help-visible" : _touch}'),p.innerHTML=` <table> <tr> <td><img src="${nn("Widgets/Images/NavigationHelp/TouchDrag.svg")}" width="70" height="48" /></td> <td> <div class="cesium-navigation-help-pan">Pan view</div> <div class="cesium-navigation-help-details">One finger drag</div> </td> </tr> <tr> <td><img src="${nn("Widgets/Images/NavigationHelp/TouchZoom.svg")}" width="70" height="48" /></td> <td> <div class="cesium-navigation-help-zoom">Zoom view</div> <div class="cesium-navigation-help-details">Two finger pinch</div> </td> </tr> <tr> <td><img src="${nn("Widgets/Images/NavigationHelp/TouchTilt.svg")}" width="70" height="48" /></td> <td> <div class="cesium-navigation-help-rotate">Tilt view</div> <div class="cesium-navigation-help-details">Two finger drag, same direction</div> </td> </tr> <tr> <td><img src="${nn("Widgets/Images/NavigationHelp/TouchRotate.svg")}" width="70" height="48" /></td> <td> <div class="cesium-navigation-help-tilt">Rotate view</div> <div class="cesium-navigation-help-details">Two finger drag, opposite direction</div> </td> </tr> </table>`,s.appendChild(p),Se.applyBindings(n,o),this._container=t,this._viewModel=n,this._wrapper=o,this._closeInstructions=function(g){o.contains(g.target)||(n.showInstructions=!1)},Bt.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeInstructions,!0):(document.addEventListener("mousedown",this._closeInstructions,!0),document.addEventListener("touchstart",this._closeInstructions,!0))}Object.defineProperties(GB.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});GB.prototype.isDestroyed=function(){return!1};GB.prototype.destroy=function(){return Bt.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeInstructions,!0):(document.removeEventListener("mousedown",this._closeInstructions,!0),document.removeEventListener("touchstart",this._closeInstructions,!0)),Se.cleanNode(this._wrapper),this._container.removeChild(this._wrapper),me(this)};var XM=GB;var ARo=_(T(),1);var IRo=_(T(),1);var O1t="M 13.84375 7.03125 C 11.412798 7.03125 9.46875 8.975298 9.46875 11.40625 L 9.46875 11.59375 L 2.53125 7.21875 L 2.53125 24.0625 L 9.46875 19.6875 C 9.4853444 22.104033 11.423165 24.0625 13.84375 24.0625 L 25.875 24.0625 C 28.305952 24.0625 30.28125 22.087202 30.28125 19.65625 L 30.28125 11.40625 C 30.28125 8.975298 28.305952 7.03125 25.875 7.03125 L 13.84375 7.03125 z",Y1t="M 27.34375 1.65625 L 5.28125 27.9375 L 8.09375 30.3125 L 30.15625 4.03125 L 27.34375 1.65625 z M 13.84375 7.03125 C 11.412798 7.03125 9.46875 8.975298 9.46875 11.40625 L 9.46875 11.59375 L 2.53125 7.21875 L 2.53125 24.0625 L 9.46875 19.6875 C 9.4724893 20.232036 9.5676108 20.7379 9.75 21.21875 L 21.65625 7.03125 L 13.84375 7.03125 z M 28.21875 7.71875 L 14.53125 24.0625 L 25.875 24.0625 C 28.305952 24.0625 30.28125 22.087202 30.28125 19.65625 L 30.28125 11.40625 C 30.28125 9.8371439 29.456025 8.4902779 28.21875 7.71875 z";function eq(){this._cameraClicked=new be,this._closeClicked=new be,this.maxHeight=500,this.enableCamera=!1,this.isCameraTracking=!1,this.showInfo=!1,this.titleText="",this.description="",Se.track(this,["showInfo","titleText","description","maxHeight","enableCamera","isCameraTracking"]),this._loadingIndicatorHtml='<div class="cesium-infoBox-loadingContainer"><span class="cesium-infoBox-loading"></span></div>',this.cameraIconPath=void 0,Se.defineProperty(this,"cameraIconPath",{get:function(){return!this.enableCamera||this.isCameraTracking?Y1t:O1t}}),Se.defineProperty(this,"_bodyless",{get:function(){return!l(this.description)||this.description.length===0}})}eq.prototype.maxHeightOffset=function(e){return`${this.maxHeight-e}px`};Object.defineProperties(eq.prototype,{cameraClicked:{get:function(){return this._cameraClicked}},closeClicked:{get:function(){return this._closeClicked}}});var WM=eq;function EB(e){e=Xn(e);let t=document.createElement("div");t.className="cesium-infoBox",t.setAttribute("data-bind",'css: { "cesium-infoBox-visible" : showInfo, "cesium-infoBox-bodyless" : _bodyless }'),e.appendChild(t);let n=document.createElement("div");n.className="cesium-infoBox-title",n.setAttribute("data-bind","text: titleText"),t.appendChild(n);let i=document.createElement("button");i.type="button",i.className="cesium-button cesium-infoBox-camera",i.setAttribute("data-bind",'attr: { title: "Focus camera on object" },click: function () { cameraClicked.raiseEvent(this); },enable: enableCamera,cesiumSvgPath: { path: cameraIconPath, width: 32, height: 32 }'),t.appendChild(i);let o=document.createElement("button");o.type="button",o.className="cesium-infoBox-close",o.setAttribute("data-bind","click: function () { closeClicked.raiseEvent(this); }"),o.innerHTML="×",t.appendChild(o);let r=document.createElement("iframe");r.className="cesium-infoBox-iframe",r.setAttribute("sandbox","allow-same-origin allow-popups allow-forms"),r.setAttribute("data-bind","style : { maxHeight : maxHeightOffset(40) }"),r.setAttribute("allowfullscreen",!0),t.appendChild(r);let s=new WM;Se.applyBindings(s,t),this._container=e,this._element=t,this._frame=r,this._viewModel=s,this._descriptionSubscription=void 0;let a=this;r.addEventListener("load",function(){let c=r.contentDocument,d=c.createElement("link");d.href=nn("Widgets/InfoBox/InfoBoxDescription.css"),d.rel="stylesheet",d.type="text/css";let u=c.createElement("div");u.className="cesium-infoBox-description",c.head.appendChild(d),c.body.appendChild(u),a._descriptionSubscription=Ra(s,"description",function(h){r.style.height="5px",u.innerHTML=h;let p=null,g=u.firstElementChild;if(g!==null&&u.childNodes.length===1){let y=window.getComputedStyle(g);if(y!==null){let x=y["background-color"],S=D.fromCssColorString(x);l(S)&&S.alpha!==0&&(p=y["background-color"])}}t.style["background-color"]=p;let f=u.getBoundingClientRect().height;r.style.height=`${f}px`})}),r.setAttribute("src","about:blank")}Object.defineProperties(EB.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}},frame:{get:function(){return this._frame}}});EB.prototype.isDestroyed=function(){return!1};EB.prototype.destroy=function(){let e=this._container;return Se.cleanNode(this._element),e.removeChild(this._element),l(this._descriptionSubscription)&&this._descriptionSubscription.dispose(),me(this)};var PM=EB;var jRo=_(T(),1);var ORo=_(T(),1);function tq(e){this._scene=e.scene,this.lowFrameRateMessage=e.lowFrameRateMessage??"This application appears to be performing poorly on your system. Please try using a different web browser or updating your video drivers.",this.lowFrameRateMessageDismissed=!1,this.showingLowFrameRateMessage=!1,Se.track(this,["lowFrameRateMessage","lowFrameRateMessageDismissed","showingLowFrameRateMessage"]);let t=this;this._dismissMessage=Rn(function(){t.showingLowFrameRateMessage=!1,t.lowFrameRateMessageDismissed=!0});let n=kA.fromScene(e.scene);this._unsubscribeLowFrameRate=n.lowFrameRate.addEventListener(function(){t.lowFrameRateMessageDismissed||(t.showingLowFrameRateMessage=!0)}),this._unsubscribeNominalFrameRate=n.nominalFrameRate.addEventListener(function(){t.showingLowFrameRateMessage=!1})}Object.defineProperties(tq.prototype,{scene:{get:function(){return this._scene}},dismissMessage:{get:function(){return this._dismissMessage}}});tq.prototype.destroy=function(){return this._unsubscribeLowFrameRate(),this._unsubscribeNominalFrameRate(),me(this)};var vM=tq;function IB(e){let t=Xn(e.container),n=new vM(e),i=document.createElement("div");i.className="cesium-performance-watchdog-message-area",i.setAttribute("data-bind","visible: showingLowFrameRateMessage");let o=document.createElement("button");o.setAttribute("type","button"),o.className="cesium-performance-watchdog-message-dismiss",o.innerHTML="×",o.setAttribute("data-bind","click: dismissMessage"),i.appendChild(o);let r=document.createElement("div");r.className="cesium-performance-watchdog-message",r.setAttribute("data-bind","html: lowFrameRateMessage"),i.appendChild(r),t.appendChild(i),Se.applyBindings(n,i),this._container=t,this._viewModel=n,this._element=i}Object.defineProperties(IB.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});IB.prototype.isDestroyed=function(){return!1};IB.prototype.destroy=function(){return this._viewModel.destroy(),Se.cleanNode(this._element),this._container.removeChild(this._element),me(this)};var wM=IB;var uZo=_(T(),1);var oZo=_(T(),1);function XB(e,t){this._scene=e;let n=this,i=function(o,r,s,a){n.sceneMode=s,n.dropDownVisible=!1};this._eventHelper=new dr,this._eventHelper.add(e.morphStart,i),this._duration=t??2,this.sceneMode=e.mode,this.dropDownVisible=!1,this.tooltip2D="2D",this.tooltip3D="3D",this.tooltipColumbusView="Columbus View",Se.track(this,["sceneMode","dropDownVisible","tooltip2D","tooltip3D","tooltipColumbusView"]),this.selectedTooltip=void 0,Se.defineProperty(this,"selectedTooltip",function(){let o=n.sceneMode;return o===oe.SCENE2D?n.tooltip2D:o===oe.SCENE3D?n.tooltip3D:n.tooltipColumbusView}),this._toggleDropDown=Rn(function(){n.dropDownVisible=!n.dropDownVisible}),this._morphTo2D=Rn(function(){e.morphTo2D(n._duration)}),this._morphTo3D=Rn(function(){e.morphTo3D(n._duration)}),this._morphToColumbusView=Rn(function(){e.morphToColumbusView(n._duration)}),this._sceneMode=oe}Object.defineProperties(XB.prototype,{scene:{get:function(){return this._scene}},duration:{get:function(){return this._duration},set:function(e){this._duration=e}},toggleDropDown:{get:function(){return this._toggleDropDown}},morphTo2D:{get:function(){return this._morphTo2D}},morphTo3D:{get:function(){return this._morphTo3D}},morphToColumbusView:{get:function(){return this._morphToColumbusView}}});XB.prototype.isDestroyed=function(){return!1};XB.prototype.destroy=function(){this._eventHelper.removeAll(),me(this)};var FM=XB;var z1t="m 32.401392,4.9330437 c -7.087603,0 -14.096095,2.884602 -19.10793,7.8946843 -5.0118352,5.010083 -7.9296167,11.987468 -7.9296167,19.072999 0,7.085531 2.9177815,14.097848 7.9296167,19.107931 4.837653,4.835961 11.541408,7.631372 18.374354,7.82482 0.05712,0.01231 0.454119,0.139729 0.454119,0.139729 l 0.03493,-0.104797 c 0.08246,7.84e-4 0.162033,0.03493 0.244525,0.03493 0.08304,0 0.161515,-0.03414 0.244526,-0.03493 l 0.03493,0.104797 c 0,0 0.309474,-0.129487 0.349323,-0.139729 6.867765,-0.168094 13.582903,-2.965206 18.444218,-7.82482 2.558195,-2.5573 4.551081,-5.638134 5.903547,-8.977584 1.297191,-3.202966 2.02607,-6.661489 2.02607,-10.130347 0,-6.237309 -2.366261,-12.31219 -6.322734,-17.116794 -0.0034,-0.02316 0.0049,-0.04488 0,-0.06986 -0.01733,-0.08745 -0.104529,-0.278855 -0.104797,-0.279458 -5.31e-4,-0.0012 -0.522988,-0.628147 -0.523984,-0.62878 -3.47e-4,-2.2e-4 -0.133444,-0.03532 -0.244525,-0.06987 C 51.944299,13.447603 51.751076,13.104317 51.474391,12.827728 46.462556,7.8176457 39.488996,4.9330437 32.401392,4.9330437 z m -2.130866,3.5281554 0.104797,9.6762289 c -4.111695,-0.08361 -7.109829,-0.423664 -9.257041,-0.943171 1.198093,-2.269271 2.524531,-4.124404 3.91241,-5.414496 2.167498,-2.0147811 3.950145,-2.8540169 5.239834,-3.3185619 z m 2.794579,0 c 1.280302,0.4754953 3.022186,1.3285948 5.065173,3.2486979 1.424667,1.338973 2.788862,3.303645 3.982275,5.728886 -2.29082,0.403367 -5.381258,0.621049 -8.942651,0.698645 L 33.065105,8.4611991 z m 5.728886,0.2445256 c 4.004072,1.1230822 7.793098,3.1481363 10.724195,6.0782083 0.03468,0.03466 0.07033,0.06991 0.104797,0.104797 -0.45375,0.313891 -0.923054,0.663002 -1.956205,1.082899 -0.647388,0.263114 -1.906242,0.477396 -2.829511,0.733577 -1.382296,-2.988132 -3.027146,-5.368585 -4.785716,-7.0213781 -0.422866,-0.397432 -0.835818,-0.6453247 -1.25756,-0.9781032 z m -15.33525,0.7685092 c -0.106753,0.09503 -0.207753,0.145402 -0.31439,0.244526 -1.684973,1.5662541 -3.298068,3.8232211 -4.680919,6.5672591 -0.343797,-0.14942 -1.035052,-0.273198 -1.292493,-0.419186 -0.956528,-0.542427 -1.362964,-1.022024 -1.537018,-1.292493 -0.0241,-0.03745 -0.01868,-0.0401 -0.03493,-0.06986 2.250095,-2.163342 4.948824,-3.869984 7.859752,-5.0302421 z m -9.641296,7.0912431 c 0.464973,0.571618 0.937729,1.169056 1.956205,1.746612 0.349907,0.198425 1.107143,0.335404 1.537018,0.523983 -1.20166,3.172984 -1.998037,7.051901 -2.165798,11.772162 C 14.256557,30.361384 12.934823,30.161483 12.280427,29.90959 10.644437,29.279855 9.6888882,28.674891 9.1714586,28.267775 8.6540289,27.860658 8.6474751,27.778724 8.6474751,27.778724 l -0.069864,0.03493 C 9.3100294,23.691285 11.163248,19.798527 13.817445,16.565477 z m 37.552149,0.523984 c 2.548924,3.289983 4.265057,7.202594 4.890513,11.318043 -0.650428,0.410896 -1.756876,1.001936 -3.563088,1.606882 -1.171552,0.392383 -3.163859,0.759153 -4.960377,1.117832 -0.04367,-4.752703 -0.784809,-8.591423 -1.88634,-11.807094 0.917574,-0.263678 2.170552,-0.486495 2.864443,-0.76851 1.274693,-0.518066 2.003942,-1.001558 2.654849,-1.467153 z m -31.439008,2.619917 c 2.487341,0.672766 5.775813,1.137775 10.479669,1.222628 l 0.104797,10.689263 0,0.03493 0,0.733577 c -5.435005,-0.09059 -9.512219,-0.519044 -12.610536,-1.117831 0.106127,-4.776683 0.879334,-8.55791 2.02607,-11.562569 z m 23.264866,0.31439 c 1.073459,3.067541 1.833795,6.821314 1.816476,11.702298 -3.054474,0.423245 -7.062018,0.648559 -11.702298,0.698644 l 0,-0.838373 -0.104796,-10.654331 c 4.082416,-0.0864 7.404468,-0.403886 9.990618,-0.908238 z M 8.2632205,30.922625 c 0.7558676,0.510548 1.5529563,1.013339 3.0041715,1.57195 0.937518,0.360875 2.612202,0.647642 3.91241,0.978102 0.112814,3.85566 0.703989,7.107756 1.606883,9.920754 -1.147172,-0.324262 -2.644553,-0.640648 -3.423359,-0.978102 -1.516688,-0.657177 -2.386627,-1.287332 -2.864443,-1.71168 -0.477816,-0.424347 -0.489051,-0.489051 -0.489051,-0.489051 L 9.8002387,40.319395 C 8.791691,37.621767 8.1584238,34.769583 8.1584238,31.900727 c 0,-0.330153 0.090589,-0.648169 0.1047967,-0.978102 z m 48.2763445,0.419186 c 0.0047,0.188973 0.06986,0.36991 0.06986,0.558916 0,2.938869 -0.620228,5.873558 -1.676747,8.628261 -0.07435,0.07583 -0.06552,0.07411 -0.454119,0.349323 -0.606965,0.429857 -1.631665,1.042044 -3.318562,1.676747 -1.208528,0.454713 -3.204964,0.850894 -5.135038,1.25756 0.84593,-2.765726 1.41808,-6.005357 1.606883,-9.815957 2.232369,-0.413371 4.483758,-0.840201 5.938479,-1.327425 1.410632,-0.472457 2.153108,-0.89469 2.96924,-1.327425 z m -38.530252,2.864443 c 3.208141,0.56697 7.372279,0.898588 12.575603,0.978103 l 0.174662,9.885821 c -4.392517,-0.06139 -8.106722,-0.320566 -10.863925,-0.803441 -1.051954,-2.664695 -1.692909,-6.043794 -1.88634,-10.060483 z m 26.793022,0.31439 c -0.246298,3.923551 -0.877762,7.263679 -1.816476,9.885822 -2.561957,0.361954 -5.766249,0.560708 -9.431703,0.62878 l -0.174661,-9.815957 c 4.491734,-0.04969 8.334769,-0.293032 11.42284,-0.698645 z M 12.035901,44.860585 c 0.09977,0.04523 0.105535,0.09465 0.209594,0.139729 1.337656,0.579602 3.441099,1.058072 5.589157,1.537018 1.545042,3.399208 3.548524,5.969402 5.589157,7.789888 -3.034411,-1.215537 -5.871615,-3.007978 -8.174142,-5.309699 -1.245911,-1.245475 -2.271794,-2.662961 -3.213766,-4.156936 z m 40.69605,0 c -0.941972,1.493975 -1.967855,2.911461 -3.213765,4.156936 -2.74253,2.741571 -6.244106,4.696717 -9.955686,5.868615 0.261347,-0.241079 0.507495,-0.394491 0.768509,-0.663713 1.674841,-1.727516 3.320792,-4.181056 4.645987,-7.265904 2.962447,-0.503021 5.408965,-1.122293 7.161107,-1.781544 0.284034,-0.106865 0.337297,-0.207323 0.593848,-0.31439 z m -31.404076,2.305527 c 2.645807,0.376448 5.701178,0.649995 9.466635,0.698645 l 0.139729,7.789888 c -1.38739,-0.480844 -3.316218,-1.29837 -5.659022,-3.388427 -1.388822,-1.238993 -2.743668,-3.0113 -3.947342,-5.100106 z m 20.365491,0.104797 c -1.04872,2.041937 -2.174337,3.779068 -3.353494,4.995309 -1.853177,1.911459 -3.425515,2.82679 -4.611055,3.353494 l -0.139729,-7.789887 c 3.13091,-0.05714 5.728238,-0.278725 8.104278,-0.558916 z",H1t="m 2.9825053,17.550598 0,1.368113 0,26.267766 0,1.368113 1.36811,0 54.9981397,0 1.36811,0 0,-1.368113 0,-26.267766 0,-1.368113 -1.36811,0 -54.9981397,0 -1.36811,0 z m 2.73623,2.736226 10.3292497,0 0,10.466063 -10.3292497,0 0,-10.466063 z m 13.0654697,0 11.69737,0 0,10.466063 -11.69737,0 0,-10.466063 z m 14.43359,0 11.69737,0 0,10.466063 -11.69737,0 0,-10.466063 z m 14.43359,0 10.32926,0 0,10.466063 -10.32926,0 0,-10.466063 z m -41.9326497,13.202288 10.3292497,0 0,10.329252 -10.3292497,0 0,-10.329252 z m 13.0654697,0 11.69737,0 0,10.329252 -11.69737,0 0,-10.329252 z m 14.43359,0 11.69737,0 0,10.329252 -11.69737,0 0,-10.329252 z m 14.43359,0 10.32926,0 0,10.329252 -10.32926,0 0,-10.329252 z",K1t="m 14.723969,17.675598 -0.340489,0.817175 -11.1680536,26.183638 -0.817175,1.872692 2.076986,0 54.7506996,0 2.07698,0 -0.81717,-1.872692 -11.16805,-26.183638 -0.34049,-0.817175 -0.91933,0 -32.414586,0 -0.919322,0 z m 1.838643,2.723916 6.196908,0 -2.928209,10.418977 -7.729111,0 4.460412,-10.418977 z m 9.02297,0 4.903049,0 0,10.418977 -7.831258,0 2.928209,-10.418977 z m 7.626964,0 5.584031,0 2.62176,10.418977 -8.205791,0 0,-10.418977 z m 8.410081,0 5.51593,0 4.46042,10.418977 -7.38863,0 -2.58772,-10.418977 z m -30.678091,13.142892 8.103649,0 -2.89416,10.282782 -9.6018026,0 4.3923136,-10.282782 z m 10.929711,0 8.614384,0 0,10.282782 -11.508544,0 2.89416,-10.282782 z m 11.338299,0 8.852721,0 2.58772,10.282782 -11.440441,0 0,-10.282782 z m 11.678781,0 7.86531,0 4.39231,10.282782 -9.6699,0 -2.58772,-10.282782 z";function WB(e,t,n){e=Xn(e);let i=new FM(t,n);i._globePath=z1t,i._flatMapPath=H1t,i._columbusViewPath=K1t;let o=document.createElement("span");o.className="cesium-sceneModePicker-wrapper cesium-toolbar-button",e.appendChild(o);let r=document.createElement("button");r.type="button",r.className="cesium-button cesium-toolbar-button",r.setAttribute("data-bind",'css: { "cesium-sceneModePicker-button2D": sceneMode === _sceneMode.SCENE2D, "cesium-sceneModePicker-button3D": sceneMode === _sceneMode.SCENE3D, "cesium-sceneModePicker-buttonColumbusView": sceneMode === _sceneMode.COLUMBUS_VIEW, "cesium-sceneModePicker-selected": dropDownVisible },attr: { title: selectedTooltip },click: toggleDropDown'),r.innerHTML='<!-- ko cesiumSvgPath: { path: _globePath, width: 64, height: 64, css: "cesium-sceneModePicker-slide-svg cesium-sceneModePicker-icon3D" } --><!-- /ko --><!-- ko cesiumSvgPath: { path: _flatMapPath, width: 64, height: 64, css: "cesium-sceneModePicker-slide-svg cesium-sceneModePicker-icon2D" } --><!-- /ko --><!-- ko cesiumSvgPath: { path: _columbusViewPath, width: 64, height: 64, css: "cesium-sceneModePicker-slide-svg cesium-sceneModePicker-iconColumbusView" } --><!-- /ko -->',o.appendChild(r);let s=document.createElement("button");s.type="button",s.className="cesium-button cesium-toolbar-button cesium-sceneModePicker-dropDown-icon",s.setAttribute("data-bind",'css: { "cesium-sceneModePicker-visible" : (dropDownVisible && (sceneMode !== _sceneMode.SCENE3D)) || (!dropDownVisible && (sceneMode === _sceneMode.SCENE3D)), "cesium-sceneModePicker-none" : sceneMode === _sceneMode.SCENE3D, "cesium-sceneModePicker-hidden" : !dropDownVisible },attr: { title: tooltip3D },click: morphTo3D,cesiumSvgPath: { path: _globePath, width: 64, height: 64 }'),o.appendChild(s);let a=document.createElement("button");a.type="button",a.className="cesium-button cesium-toolbar-button cesium-sceneModePicker-dropDown-icon",a.setAttribute("data-bind",'css: { "cesium-sceneModePicker-visible" : (dropDownVisible && (sceneMode !== _sceneMode.SCENE2D)), "cesium-sceneModePicker-none" : sceneMode === _sceneMode.SCENE2D, "cesium-sceneModePicker-hidden" : !dropDownVisible },attr: { title: tooltip2D },click: morphTo2D,cesiumSvgPath: { path: _flatMapPath, width: 64, height: 64 }'),o.appendChild(a);let c=document.createElement("button");c.type="button",c.className="cesium-button cesium-toolbar-button cesium-sceneModePicker-dropDown-icon",c.setAttribute("data-bind",'css: { "cesium-sceneModePicker-visible" : (dropDownVisible && (sceneMode !== _sceneMode.COLUMBUS_VIEW)) || (!dropDownVisible && (sceneMode === _sceneMode.COLUMBUS_VIEW)), "cesium-sceneModePicker-none" : sceneMode === _sceneMode.COLUMBUS_VIEW, "cesium-sceneModePicker-hidden" : !dropDownVisible},attr: { title: tooltipColumbusView },click: morphToColumbusView,cesiumSvgPath: { path: _columbusViewPath, width: 64, height: 64 }'),o.appendChild(c),Se.applyBindings(i,o),this._viewModel=i,this._container=e,this._wrapper=o,this._closeDropDown=function(d){o.contains(d.target)||(i.dropDownVisible=!1)},Bt.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeDropDown,!0):(document.addEventListener("mousedown",this._closeDropDown,!0),document.addEventListener("touchstart",this._closeDropDown,!0))}Object.defineProperties(WB.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});WB.prototype.isDestroyed=function(){return!1};WB.prototype.destroy=function(){return this._viewModel.destroy(),Bt.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeDropDown,!0):(document.removeEventListener("mousedown",this._closeDropDown,!0),document.removeEventListener("touchstart",this._closeDropDown,!0)),Se.cleanNode(this._wrapper),this._container.removeChild(this._wrapper),me(this)};var AM=WB;var CZo=_(T(),1);var bZo=_(T(),1);var J1t=new U,PB="-1000px";function MM(e,t,n){this._scene=e,this._screenPositionX=PB,this._screenPositionY=PB,this._tweens=e.tweens,this._container=n??document.body,this._selectionIndicatorElement=t,this._scale=1,this.position=void 0,this.showSelection=!1,Se.track(this,["position","_screenPositionX","_screenPositionY","_scale","showSelection"]),this.isVisible=void 0,Se.defineProperty(this,"isVisible",{get:function(){return this.showSelection&&l(this.position)}}),Se.defineProperty(this,"_transform",{get:function(){return`scale(${this._scale})`}}),this.computeScreenSpacePosition=function(i,o){return Ui.worldToWindowCoordinates(e,i,o)}}MM.prototype.update=function(){if(this.showSelection&&l(this.position)){let e=this.computeScreenSpacePosition(this.position,J1t);if(!l(e))this._screenPositionX=PB,this._screenPositionY=PB;else{let t=this._container,n=t.parentNode.clientWidth,i=t.parentNode.clientHeight,o=this._selectionIndicatorElement.clientWidth,r=o*.5;e.x=Math.min(Math.max(e.x,-o),n+o)-r,e.y=Math.min(Math.max(e.y,-o),i+o)-r,this._screenPositionX=`${Math.floor(e.x+.25)}px`,this._screenPositionY=`${Math.floor(e.y+.25)}px`}}};MM.prototype.animateAppear=function(){this._tweens.addProperty({object:this,property:"_scale",startValue:2,stopValue:1,duration:.8,easingFunction:zr.EXPONENTIAL_OUT})};MM.prototype.animateDepart=function(){this._tweens.addProperty({object:this,property:"_scale",startValue:this._scale,stopValue:1.5,duration:.8,easingFunction:zr.EXPONENTIAL_OUT})};Object.defineProperties(MM.prototype,{container:{get:function(){return this._container}},selectionIndicatorElement:{get:function(){return this._selectionIndicatorElement}},scene:{get:function(){return this._scene}}});var NM=MM;function vB(e,t){e=Xn(e),this._container=e;let n=document.createElement("div");n.className="cesium-selection-wrapper",n.setAttribute("data-bind",'style: { "top" : _screenPositionY, "left" : _screenPositionX },css: { "cesium-selection-wrapper-visible" : isVisible }'),e.appendChild(n),this._element=n;let i="http://www.w3.org/2000/svg",o="M -34 -34 L -34 -11.25 L -30 -15.25 L -30 -30 L -15.25 -30 L -11.25 -34 L -34 -34 z M 11.25 -34 L 15.25 -30 L 30 -30 L 30 -15.25 L 34 -11.25 L 34 -34 L 11.25 -34 z M -34 11.25 L -34 34 L -11.25 34 L -15.25 30 L -30 30 L -30 15.25 L -34 11.25 z M 34 11.25 L 30 15.25 L 30 30 L 15.25 30 L 11.25 34 L 34 34 L 34 11.25 z",r=document.createElementNS(i,"svg:svg");r.setAttribute("width",160),r.setAttribute("height",160),r.setAttribute("viewBox","0 0 160 160");let s=document.createElementNS(i,"g");s.setAttribute("transform","translate(80,80)"),r.appendChild(s);let a=document.createElementNS(i,"path");a.setAttribute("data-bind","attr: { transform: _transform }"),a.setAttribute("d",o),s.appendChild(a),n.appendChild(r);let c=new NM(t,this._element,this._container);this._viewModel=c,Se.applyBindings(this._viewModel,this._element)}Object.defineProperties(vB.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});vB.prototype.isDestroyed=function(){return!1};vB.prototype.destroy=function(){let e=this._container;return Se.cleanNode(this._element),e.removeChild(this._element),me(this)};var kM=vB;var FZo=_(T(),1);var EZo=_(T(),1);function wB(e){this._scene=e,this._orthographic=e.camera.frustum instanceof an,this._flightInProgress=!1,this.dropDownVisible=!1,this.tooltipPerspective="Perspective Projection",this.tooltipOrthographic="Orthographic Projection",this.selectedTooltip=void 0,this.sceneMode=e.mode,Se.track(this,["_orthographic","_flightInProgress","sceneMode","dropDownVisible","tooltipPerspective","tooltipOrthographic"]);let t=this;Se.defineProperty(this,"selectedTooltip",function(){return t._orthographic?t.tooltipOrthographic:t.tooltipPerspective}),this._toggleDropDown=Rn(function(){t.sceneMode===oe.SCENE2D||t._flightInProgress||(t.dropDownVisible=!t.dropDownVisible)}),this._eventHelper=new dr,this._eventHelper.add(e.morphComplete,function(n,i,o,r){t.sceneMode=o,t._orthographic=o===oe.SCENE2D||t._scene.camera.frustum instanceof an}),this._eventHelper.add(e.preRender,function(){t._flightInProgress=l(e.camera._currentFlight)}),this._switchToPerspective=Rn(function(){t.sceneMode!==oe.SCENE2D&&(t._scene.camera.switchToPerspectiveFrustum(),t._orthographic=!1,t.dropDownVisible=!1)}),this._switchToOrthographic=Rn(function(){t.sceneMode!==oe.SCENE2D&&(t._scene.camera.switchToOrthographicFrustum(),t._orthographic=!0,t.dropDownVisible=!1)}),this._sceneMode=oe}Object.defineProperties(wB.prototype,{scene:{get:function(){return this._scene}},toggleDropDown:{get:function(){return this._toggleDropDown}},switchToPerspective:{get:function(){return this._switchToPerspective}},switchToOrthographic:{get:function(){return this._switchToOrthographic}},isOrthographicProjection:{get:function(){return this._orthographic}}});wB.prototype.isDestroyed=function(){return!1};wB.prototype.destroy=function(){this._eventHelper.removeAll(),me(this)};var UM=wB;var Q1t="M 28.15625,10.4375 9.125,13.21875 13.75,43.25 41.75,55.09375 50.8125,37 54.5,11.9375 z m 0.125,3 19.976451,0.394265 L 43.03125,16.875 22.6875,14.28125 z M 50.971746,15.705477 47.90625,36.03125 42.53125,46 44.84375,19.3125 z M 12.625,16.03125 l 29.15625,3.6875 -2.65625,31 L 16.4375,41.125 z",j1t="m 31.560594,6.5254438 -20.75,12.4687502 0.1875,24.5625 22.28125,11.8125 19.5,-12 0.65625,-0.375 0,-0.75 0.0312,-23.21875 z m 0.0625,3.125 16.65625,9.5000002 -16.125,10.28125 -17.34375,-9.71875 z m 18.96875,11.1875002 0.15625,20.65625 -17.46875,10.59375 0.15625,-20.28125 z m -37.0625,1.25 17.21875,9.625 -0.15625,19.21875 -16.9375,-9 z";function FB(e,t){e=Xn(e);let n=new UM(t);n._perspectivePath=Q1t,n._orthographicPath=j1t;let i=document.createElement("span");i.className="cesium-projectionPicker-wrapper cesium-toolbar-button",e.appendChild(i);let o=document.createElement("button");o.type="button",o.className="cesium-button cesium-toolbar-button",o.setAttribute("data-bind",'css: { "cesium-projectionPicker-buttonPerspective": !_orthographic, "cesium-projectionPicker-buttonOrthographic": _orthographic, "cesium-button-disabled" : sceneMode === _sceneMode.SCENE2D || _flightInProgress, "cesium-projectionPicker-selected": dropDownVisible },attr: { title: selectedTooltip },click: toggleDropDown'),o.innerHTML='<!-- ko cesiumSvgPath: { path: _perspectivePath, width: 64, height: 64, css: "cesium-projectionPicker-iconPerspective" } --><!-- /ko --><!-- ko cesiumSvgPath: { path: _orthographicPath, width: 64, height: 64, css: "cesium-projectionPicker-iconOrthographic" } --><!-- /ko -->',i.appendChild(o);let r=document.createElement("button");r.type="button",r.className="cesium-button cesium-toolbar-button cesium-projectionPicker-dropDown-icon",r.setAttribute("data-bind",'css: { "cesium-projectionPicker-visible" : (dropDownVisible && _orthographic), "cesium-projectionPicker-none" : !_orthographic, "cesium-projectionPicker-hidden" : !dropDownVisible },attr: { title: tooltipPerspective },click: switchToPerspective,cesiumSvgPath: { path: _perspectivePath, width: 64, height: 64 }'),i.appendChild(r);let s=document.createElement("button");s.type="button",s.className="cesium-button cesium-toolbar-button cesium-projectionPicker-dropDown-icon",s.setAttribute("data-bind",'css: { "cesium-projectionPicker-visible" : (dropDownVisible && !_orthographic), "cesium-projectionPicker-none" : _orthographic, "cesium-projectionPicker-hidden" : !dropDownVisible},attr: { title: tooltipOrthographic },click: switchToOrthographic,cesiumSvgPath: { path: _orthographicPath, width: 64, height: 64 }'),i.appendChild(s),Se.applyBindings(n,i),this._viewModel=n,this._container=e,this._wrapper=i,this._closeDropDown=function(a){i.contains(a.target)||(n.dropDownVisible=!1)},Bt.supportsPointerEvents()?document.addEventListener("pointerdown",this._closeDropDown,!0):(document.addEventListener("mousedown",this._closeDropDown,!0),document.addEventListener("touchstart",this._closeDropDown,!0))}Object.defineProperties(FB.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});FB.prototype.isDestroyed=function(){return!1};FB.prototype.destroy=function(){return this._viewModel.destroy(),Bt.supportsPointerEvents()?document.removeEventListener("pointerdown",this._closeDropDown,!0):(document.removeEventListener("mousedown",this._closeDropDown,!0),document.removeEventListener("touchstart",this._closeDropDown,!0)),Se.cleanNode(this._wrapper),this._container.removeChild(this._wrapper),me(this)};var DM=FB;var KZo=_(T(),1);var NZo=_(T(),1);function wS(e,t,n){this._color=e,this._height=t,this._base=n??0}wS.prototype.getHeight=function(){return this._height};wS.prototype.getBase=function(){return this._base};wS.prototype.getStartTime=function(){return this._start};wS.prototype.getStopTime=function(){return this._stop};wS.prototype.setRange=function(e,t){this._start=e,this._stop=t};wS.prototype.render=function(e){let t="";if(this._start&&this._stop&&this._color){let n=q.secondsDifference(this._start,e.epochJulian),i=Math.round(e.timeBarWidth*e.getAlpha(n)),o=q.secondsDifference(this._stop,e.epochJulian),r=Math.round(e.timeBarWidth*e.getAlpha(o))-i;i<0&&(r+=i,i=0),i+r>e.timeBarWidth&&(r=e.timeBarWidth-i),r>0&&(t=`<span class="cesium-timeline-highlight" style="left: ${i.toString()}px; width: ${r.toString()}px; bottom: ${this._base.toString()}px; height: ${this._height}px; background-color: ${this._color};"></span>`)}return t};var BM=wS;var DZo=_(T(),1);function DCe(e,t,n,i){this.interval=e,this.height=t,this.color=n||new D(.5,.5,.5,1),this.backgroundColor=i||new D(0,0,0,0)}DCe.prototype.render=function(e,t){let n=this.interval.start,i=this.interval.stop,o=t.startJulian,r=q.addSeconds(t.startJulian,t.duration,new q);if(q.lessThan(n,o)&&q.greaterThan(i,r))e.fillStyle=this.color.toCssColorString(),e.fillRect(0,t.y,t.timeBarWidth,this.height);else if(q.lessThanOrEquals(n,r)&&q.greaterThanOrEquals(i,o)){let s,a,c;for(s=0;s<t.timeBarWidth;++s){let d=q.addSeconds(t.startJulian,s/t.timeBarWidth*t.duration,new q);!l(a)&&q.greaterThanOrEquals(d,n)?a=s:!l(c)&&q.greaterThanOrEquals(d,i)&&(c=s)}e.fillStyle=this.backgroundColor.toCssColorString(),e.fillRect(0,t.y,t.timeBarWidth,this.height),l(a)&&(l(c)||(c=t.timeBarWidth),e.fillStyle=this.color.toCssColorString(),e.fillRect(a,t.y,Math.max(c-a,1),this.height))}};var OM=DCe;var nq=1e12,Vm={none:0,scrub:1,slide:2,zoom:3,touchOnly:4},xl={none:0,scrub:1,slideZoom:2,singleTap:3,ignore:4},jy=[.001,.002,.005,.01,.02,.05,.1,.25,.5,1,2,5,10,15,30,60,120,300,600,900,1800,3600,7200,14400,21600,43200,86400,172800,345600,604800,1296e3,2592e3,5184e3,7776e3,15552e3,31536e3,63072e3,126144e3,15768e4,31536e4,63072e4,126144e4,15768e5,31536e5,63072e5,126144e5,15768e6,31536e6],q1t=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function _l(e,t){e=Xn(e);let n=e.ownerDocument;this.container=e;let i=n.createElement("div");i.className="cesium-timeline-main",e.appendChild(i),this._topDiv=i,this._endJulian=void 0,this._epochJulian=void 0,this._lastXPos=void 0,this._scrubElement=void 0,this._startJulian=void 0,this._timeBarSecondsSpan=void 0,this._clock=t,this._scrubJulian=t.currentTime,this._mainTicSpan=-1,this._mouseMode=Vm.none,this._touchMode=xl.none,this._touchState={centerX:0,spanX:0},this._mouseX=0,this._timelineDrag=0,this._timelineDragLocation=void 0,this._lastHeight=void 0,this._lastWidth=void 0,this._topDiv.innerHTML='<div class="cesium-timeline-bar"></div><div class="cesium-timeline-trackContainer"><canvas class="cesium-timeline-tracks" width="10" height="1"></canvas></div><div class="cesium-timeline-needle"></div><span class="cesium-timeline-ruler"></span>',this._timeBarEle=this._topDiv.childNodes[0],this._trackContainer=this._topDiv.childNodes[1],this._trackListEle=this._topDiv.childNodes[1].childNodes[0],this._needleEle=this._topDiv.childNodes[2],this._rulerEle=this._topDiv.childNodes[3],this._context=this._trackListEle.getContext("2d"),this._trackList=[],this._highlightRanges=[],this.zoomTo(t.startTime,t.stopTime),this._onMouseDown=$1t(this),this._onMouseUp=eVt(this),this._onMouseMove=tVt(this),this._onMouseWheel=nVt(this),this._onTouchStart=iVt(this),this._onTouchMove=rVt(this),this._onTouchEnd=oVt(this);let o=this._timeBarEle;n.addEventListener("mouseup",this._onMouseUp,!1),n.addEventListener("mousemove",this._onMouseMove,!1),o.addEventListener("mousedown",this._onMouseDown,!1),o.addEventListener("DOMMouseScroll",this._onMouseWheel,!1),o.addEventListener("mousewheel",this._onMouseWheel,!1),o.addEventListener("touchstart",this._onTouchStart,!1),o.addEventListener("touchmove",this._onTouchMove,!1),o.addEventListener("touchend",this._onTouchEnd,!1),o.addEventListener("touchcancel",this._onTouchEnd,!1),this._topDiv.oncontextmenu=function(){return!1},t.onTick.addEventListener(this.updateFromClock,this),this.updateFromClock()}_l.prototype.addEventListener=function(e,t,n){this._topDiv.addEventListener(e,t,n)};_l.prototype.removeEventListener=function(e,t,n){this._topDiv.removeEventListener(e,t,n)};_l.prototype.isDestroyed=function(){return!1};_l.prototype.destroy=function(){this._clock.onTick.removeEventListener(this.updateFromClock,this);let e=this.container.ownerDocument;e.removeEventListener("mouseup",this._onMouseUp,!1),e.removeEventListener("mousemove",this._onMouseMove,!1);let t=this._timeBarEle;t.removeEventListener("mousedown",this._onMouseDown,!1),t.removeEventListener("DOMMouseScroll",this._onMouseWheel,!1),t.removeEventListener("mousewheel",this._onMouseWheel,!1),t.removeEventListener("touchstart",this._onTouchStart,!1),t.removeEventListener("touchmove",this._onTouchMove,!1),t.removeEventListener("touchend",this._onTouchEnd,!1),t.removeEventListener("touchcancel",this._onTouchEnd,!1),this.container.removeChild(this._topDiv),me(this)};_l.prototype.addHighlightRange=function(e,t,n){let i=new BM(e,t,n);return this._highlightRanges.push(i),this.resize(),i};_l.prototype.addTrack=function(e,t,n,i){let o=new OM(e,t,n,i);return this._trackList.push(o),this._lastHeight=void 0,this.resize(),o};_l.prototype.zoomTo=function(e,t){if(this._startJulian=e,this._endJulian=t,this._timeBarSecondsSpan=q.secondsDifference(t,e),this._clock&&this._clock.clockRange!==Or.UNBOUNDED){let i=this._clock.startTime,o=this._clock.stopTime,r=q.secondsDifference(o,i),s=q.secondsDifference(i,this._startJulian),a=q.secondsDifference(o,this._endJulian);this._timeBarSecondsSpan>=r?(this._timeBarSecondsSpan=r,this._startJulian=this._clock.startTime,this._endJulian=this._clock.stopTime):s>0?(this._endJulian=q.addSeconds(this._endJulian,s,new q),this._startJulian=i,this._timeBarSecondsSpan=q.secondsDifference(this._endJulian,this._startJulian)):a<0&&(this._startJulian=q.addSeconds(this._startJulian,a,new q),this._endJulian=o,this._timeBarSecondsSpan=q.secondsDifference(this._endJulian,this._startJulian))}this._makeTics();let n=document.createEvent("Event");n.initEvent("setzoom",!0,!0),n.startJulian=this._startJulian,n.endJulian=this._endJulian,n.epochJulian=this._epochJulian,n.totalSpan=this._timeBarSecondsSpan,n.mainTicSpan=this._mainTicSpan,this._topDiv.dispatchEvent(n)};_l.prototype.zoomFrom=function(e){let t=q.secondsDifference(this._scrubJulian,this._startJulian);e>1||t<0||t>this._timeBarSecondsSpan?t=this._timeBarSecondsSpan*.5:t+=t-this._timeBarSecondsSpan*.5;let n=this._timeBarSecondsSpan-t;this.zoomTo(q.addSeconds(this._startJulian,t-t*e,new q),q.addSeconds(this._endJulian,n*e-n,new q))};function iq(e){return e<10?`0${e.toString()}`:e.toString()}_l.prototype.makeLabel=function(e){let t=q.toGregorianDate(e),n=t.millisecond,i=" UTC";if(n>0&&this._timeBarSecondsSpan<3600){for(i=Math.floor(n).toString();i.length<3;)i=`0${i}`;i=`.${i}`}return`${q1t[t.month-1]} ${t.day} ${t.year} ${iq(t.hour)}:${iq(t.minute)}:${iq(t.second)}${i}`};_l.prototype.smallestTicInPixels=7;_l.prototype._makeTics=function(){let e=this._timeBarEle,t=q.secondsDifference(this._scrubJulian,this._startJulian),n=Math.round(t*this._topDiv.clientWidth/this._timeBarSecondsSpan),i=n-8,o,r=this;this._needleEle.style.left=`${n.toString()}px`;let s="",a=.01,c=31536e6,d=1e-10,u=0,h=this._timeBarSecondsSpan;h<a?(h=a,this._timeBarSecondsSpan=a,this._endJulian=q.addSeconds(this._startJulian,a,new q)):h>c&&(h=c,this._timeBarSecondsSpan=c,this._endJulian=q.addSeconds(this._startJulian,c,new q));let p=this._timeBarEle.clientWidth;p<10&&(p=10);let g=this._startJulian,f=Math.min(h/p*1e-5,.4),y,x=q.toGregorianDate(g);h>31536e4?y=q.fromDate(new Date(Date.UTC(Math.floor(x.year/100)*100,0))):h>31536e3?y=q.fromDate(new Date(Date.UTC(Math.floor(x.year/10)*10,0))):h>86400?y=q.fromDate(new Date(Date.UTC(x.year,0))):y=q.fromDate(new Date(Date.UTC(x.year,x.month,x.day)));let S=q.secondsDifference(this._startJulian,q.addSeconds(y,f,new q)),C=S+h;this._epochJulian=y;function V(N){return Math.floor(S/N)*N}function L(N,z){return Math.ceil(N/z+.5)*z}function Z(N){return(N-S)/h}function E(N,z){return N-z*Math.round(N/z)}this._rulerEle.innerHTML=this.makeLabel(q.addSeconds(this._endJulian,-a,new q));let P=this._rulerEle.offsetWidth+20;P<30&&(P=180);let W=u;u-=d;let v={startTime:S,startJulian:g,epochJulian:y,duration:h,timeBarWidth:p,getAlpha:Z};this._highlightRanges.forEach(function(N){s+=N.render(v)});let A=0,b=0,R=0,G=P/p;G>1&&(G=1),G*=this._timeBarSecondsSpan;let I=-1,w=-1,M=jy.length,B;for(B=0;B<M;++B){let N=jy[B];if(++I,A=N,N>G&&N>u)break;w<0&&p*(N/this._timeBarSecondsSpan)>=this.smallestTicInPixels&&(w=I)}if(I>0){for(;I>0;)if(--I,Math.abs(E(A,jy[I]))<1e-5){jy[I]>=u&&(b=jy[I]);break}if(w>=0)for(;w<I;){if(Math.abs(E(b,jy[w]))<1e-5&&jy[w]>=u){R=jy[w];break}++w}}u=W,u>d&&R<1e-5&&Math.abs(u-A)>d&&(R=u,u<=A+d&&(b=0));let k=-999999,O;if(p*(R/this._timeBarSecondsSpan)>=3)for(o=V(R);o<=C;o=L(o,R))s+=`<span class="cesium-timeline-ticTiny" style="left: ${Math.round(p*Z(o)).toString()}px;"></span>`;if(p*(b/this._timeBarSecondsSpan)>=3)for(o=V(b);o<=C;o=L(o,b))s+=`<span class="cesium-timeline-ticSub" style="left: ${Math.round(p*Z(o)).toString()}px;"></span>`;if(p*(A/this._timeBarSecondsSpan)>=2){this._mainTicSpan=A,C+=A,o=V(A);let N=q.computeTaiMinusUtc(y);for(;o<=C;){let z=q.addSeconds(g,o-S,new q);if(A>2.1){let j=q.computeTaiMinusUtc(z);Math.abs(j-N)>.1&&(o+=j-N,z=q.addSeconds(g,o-S,new q))}let K=Math.round(p*Z(o)),te=this.makeLabel(z);this._rulerEle.innerHTML=te,O=this._rulerEle.offsetWidth,O<10&&(O=P);let H=K-(O/2-1);H>k?(k=H+O+5,s+=`<span class="cesium-timeline-ticMain" style="left: ${K.toString()}px;"></span><span class="cesium-timeline-ticLabel" style="left: ${H.toString()}px;">${te}</span>`):s+=`<span class="cesium-timeline-ticSub" style="left: ${K.toString()}px;"></span>`,o=L(o,A)}}else this._mainTicSpan=-1;s+=`<span class="cesium-timeline-icon16" style="left:${i}px;bottom:0;background-position: 0 0;"></span>`,e.innerHTML=s,this._scrubElement=e.lastChild,this._context.clearRect(0,0,this._trackListEle.width,this._trackListEle.height),v.y=0,this._trackList.forEach(function(N){N.render(r._context,v),v.y+=N.height})};_l.prototype.updateFromClock=function(){this._scrubJulian=this._clock.currentTime;let e=this._scrubElement;if(l(this._scrubElement)){let t=q.secondsDifference(this._scrubJulian,this._startJulian),n=Math.round(t*this._topDiv.clientWidth/this._timeBarSecondsSpan);this._lastXPos!==n&&(this._lastXPos=n,e.style.left=`${n-8}px`,this._needleEle.style.left=`${n}px`)}l(this._timelineDragLocation)&&(this._setTimeBarTime(this._timelineDragLocation,this._timelineDragLocation*this._timeBarSecondsSpan/this._topDiv.clientWidth),this.zoomTo(q.addSeconds(this._startJulian,this._timelineDrag,new q),q.addSeconds(this._endJulian,this._timelineDrag,new q)))};_l.prototype._setTimeBarTime=function(e,t){if(e=Math.round(e),this._scrubJulian=q.addSeconds(this._startJulian,t,new q),this._scrubElement){let i=e-8;this._scrubElement.style.left=`${i.toString()}px`,this._needleEle.style.left=`${e.toString()}px`}let n=document.createEvent("Event");n.initEvent("settime",!0,!0),n.clientX=e,n.timeSeconds=t,n.timeJulian=this._scrubJulian,n.clock=this._clock,this._topDiv.dispatchEvent(n)};function $1t(e){return function(t){e._mouseMode!==Vm.touchOnly&&(t.button===0?(e._mouseMode=Vm.scrub,e._scrubElement&&(e._scrubElement.style.backgroundPosition="-16px 0"),e._onMouseMove(t)):(e._mouseX=t.clientX,t.button===2?e._mouseMode=Vm.zoom:e._mouseMode=Vm.slide)),t.preventDefault()}}function eVt(e){return function(t){e._mouseMode=Vm.none,e._scrubElement&&(e._scrubElement.style.backgroundPosition="0 0"),e._timelineDrag=0,e._timelineDragLocation=void 0}}function tVt(e){return function(t){let n;if(e._mouseMode===Vm.scrub){t.preventDefault();let i=t.clientX-e._topDiv.getBoundingClientRect().left;i<0?(e._timelineDragLocation=0,e._timelineDrag=-.01*e._timeBarSecondsSpan):i>e._topDiv.clientWidth?(e._timelineDragLocation=e._topDiv.clientWidth,e._timelineDrag=.01*e._timeBarSecondsSpan):(e._timelineDragLocation=void 0,e._setTimeBarTime(i,i*e._timeBarSecondsSpan/e._topDiv.clientWidth))}else if(e._mouseMode===Vm.slide){if(n=e._mouseX-t.clientX,e._mouseX=t.clientX,n!==0){let i=n*e._timeBarSecondsSpan/e._topDiv.clientWidth;e.zoomTo(q.addSeconds(e._startJulian,i,new q),q.addSeconds(e._endJulian,i,new q))}}else e._mouseMode===Vm.zoom&&(n=e._mouseX-t.clientX,e._mouseX=t.clientX,n!==0&&e.zoomFrom(Math.pow(1.01,n)))}}function nVt(e){return function(t){let n=t.wheelDeltaY||t.wheelDelta||-t.detail;nq=Math.max(Math.min(Math.abs(n),nq),1),n/=nq,e.zoomFrom(Math.pow(1.05,-n))}}function iVt(e){return function(t){let n=t.touches.length,i,o,r=e._topDiv.getBoundingClientRect().left;t.preventDefault(),e._mouseMode=Vm.touchOnly,n===1?(i=q.secondsDifference(e._scrubJulian,e._startJulian),o=Math.round(i*e._topDiv.clientWidth/e._timeBarSecondsSpan+r),Math.abs(t.touches[0].clientX-o)<50?(e._touchMode=xl.scrub,e._scrubElement&&(e._scrubElement.style.backgroundPosition=n===1?"-16px 0":"0 0")):(e._touchMode=xl.singleTap,e._touchState.centerX=t.touches[0].clientX-r)):n===2?(e._touchMode=xl.slideZoom,e._touchState.centerX=(t.touches[0].clientX+t.touches[1].clientX)*.5-r,e._touchState.spanX=Math.abs(t.touches[0].clientX-t.touches[1].clientX)):e._touchMode=xl.ignore}}function oVt(e){return function(t){let n=t.touches.length,i=e._topDiv.getBoundingClientRect().left;e._touchMode===xl.singleTap?(e._touchMode=xl.scrub,e._onTouchMove(t)):e._touchMode===xl.scrub&&e._onTouchMove(t),e._mouseMode=Vm.touchOnly,n!==1?e._touchMode=n>0?xl.ignore:xl.none:e._touchMode===xl.slideZoom&&(e._touchState.centerX=t.touches[0].clientX-i),e._scrubElement&&(e._scrubElement.style.backgroundPosition="0 0")}}function rVt(e){return function(t){let n,i,o,r,s,a,c=1,d=e._topDiv.getBoundingClientRect().left;e._touchMode===xl.singleTap&&(e._touchMode=xl.slideZoom),e._mouseMode=Vm.touchOnly,e._touchMode===xl.scrub?(t.preventDefault(),t.changedTouches.length===1&&(i=t.changedTouches[0].clientX-d,i>=0&&i<=e._topDiv.clientWidth&&e._setTimeBarTime(i,i*e._timeBarSecondsSpan/e._topDiv.clientWidth))):e._touchMode===xl.slideZoom&&(o=t.touches.length,o===2?(r=(t.touches[0].clientX+t.touches[1].clientX)*.5-d,s=Math.abs(t.touches[0].clientX-t.touches[1].clientX)):o===1&&(r=t.touches[0].clientX-d,s=0),l(r)&&(s>0&&e._touchState.spanX>0?(c=e._touchState.spanX/s,a=q.addSeconds(e._startJulian,(e._touchState.centerX*e._timeBarSecondsSpan-r*e._timeBarSecondsSpan*c)/e._topDiv.clientWidth,new q)):(n=e._touchState.centerX-r,a=q.addSeconds(e._startJulian,n*e._timeBarSecondsSpan/e._topDiv.clientWidth,new q)),e.zoomTo(a,q.addSeconds(a,e._timeBarSecondsSpan*c,new q)),e._touchState.centerX=r,e._touchState.spanX=s))}}_l.prototype.resize=function(){let e=this.container.clientWidth,t=this.container.clientHeight;if(e===this._lastWidth&&t===this._lastHeight)return;this._trackContainer.style.height=`${t}px`;let n=1;this._trackList.forEach(function(i){n+=i.height}),this._trackListEle.style.height=`${n.toString()}px`,this._trackListEle.width=this._trackListEle.clientWidth,this._trackListEle.height=n,this._makeTics(),this._lastXPos=void 0,this._lastWidth=e,this._lastHeight=t};var YM=_l;var uGo=_(T(),1);var oGo=_(T(),1);var HCe=_(zCe(),1);function cVt(e){let t=!1,n=window.screen;return l(n)&&(l(n.lockOrientation)?t=n.lockOrientation(e):l(n.mozLockOrientation)?t=n.mozLockOrientation(e):l(n.msLockOrientation)?t=n.msLockOrientation(e):l(n.orientation&&n.orientation.lock)&&(t=n.orientation.lock(e))),t}function KCe(){let e=window.screen;l(e)&&(l(e.unlockOrientation)?e.unlockOrientation():l(e.mozUnlockOrientation)?e.mozUnlockOrientation():l(e.msUnlockOrientation)?e.msUnlockOrientation():l(e.orientation&&e.orientation.unlock)&&e.orientation.unlock())}function lVt(e,t,n,i){i()||(n()?(t.useWebVR=!1,e._locked&&(KCe(),e._locked=!1),e._noSleep.disable(),br.exitFullscreen(),n(!1)):(br.fullscreen||br.requestFullscreen(e._vrElement),e._noSleep.enable(),e._locked||(e._locked=cVt("landscape")),t.useWebVR=!0,n(!0)))}function AB(e,t){let n=this,i=Se.observable(br.enabled),o=Se.observable(!1);this.isVRMode=void 0,Se.defineProperty(this,"isVRMode",{get:function(){return o()}}),this.isVREnabled=void 0,Se.defineProperty(this,"isVREnabled",{get:function(){return i()},set:function(s){i(s&&br.enabled)}}),this.tooltip=void 0,Se.defineProperty(this,"tooltip",function(){return i()?o()?"Exit VR mode":"Enter VR mode":"VR mode is unavailable"});let r=Se.observable(!1);this._isOrthographic=void 0,Se.defineProperty(this,"_isOrthographic",{get:function(){return r()}}),this._eventHelper=new dr,this._eventHelper.add(e.preRender,function(){r(e.camera.frustum instanceof an)}),this._locked=!1,this._noSleep=new HCe.default,this._command=Rn(function(){lVt(n,e,o,r)},Se.getObservable(this,"isVREnabled")),this._vrElement=Xn(t)??document.body,this._callback=function(){!br.fullscreen&&o()&&(e.useWebVR=!1,n._locked&&(KCe(),n._locked=!1),n._noSleep.disable(),o(!1))},document.addEventListener(br.changeEventName,this._callback)}Object.defineProperties(AB.prototype,{vrElement:{get:function(){return this._vrElement},set:function(e){this._vrElement=e}},command:{get:function(){return this._command}}});AB.prototype.isDestroyed=function(){return!1};AB.prototype.destroy=function(){this._eventHelper.removeAll(),document.removeEventListener(br.changeEventName,this._callback),me(this)};var zM=AB;var dVt="M 5.3125 6.375 C 4.008126 6.375 2.96875 7.4141499 2.96875 8.71875 L 2.96875 19.5 C 2.96875 20.8043 4.008126 21.875 5.3125 21.875 L 13.65625 21.875 C 13.71832 20.0547 14.845166 18.59375 16.21875 18.59375 C 17.592088 18.59375 18.71881 20.0552 18.78125 21.875 L 27.09375 21.875 C 28.398125 21.875 29.4375 20.8043 29.4375 19.5 L 29.4375 8.71875 C 29.4375 7.4141499 28.398125 6.375 27.09375 6.375 L 5.3125 6.375 z M 9.625 10.4375 C 11.55989 10.4375 13.125 12.03385 13.125 13.96875 C 13.125 15.90365 11.55989 17.46875 9.625 17.46875 C 7.69011 17.46875 6.125 15.90365 6.125 13.96875 C 6.125 12.03385 7.69011 10.4375 9.625 10.4375 z M 22.46875 10.4375 C 24.40364 10.4375 25.96875 12.03385 25.96875 13.96875 C 25.96875 15.90365 24.40364 17.46875 22.46875 17.46875 C 20.53386 17.46875 18.96875 15.90365 18.96875 13.96875 C 18.96875 12.03385 20.53386 10.4375 22.46875 10.4375 z",uVt="M 25.770585,2.4552065 C 15.72282,13.962707 10.699956,19.704407 8.1768352,22.580207 c -1.261561,1.4379 -1.902282,2.1427 -2.21875,2.5 -0.141624,0.1599 -0.208984,0.2355 -0.25,0.2813 l 0.6875,0.75 c 10e-5,-10e-5 0.679191,0.727 0.6875,0.7187 0.01662,-0.016 0.02451,-0.024 0.03125,-0.031 0.01348,-0.014 0.04013,-0.038 0.0625,-0.062 0.04474,-0.05 0.120921,-0.1315 0.28125,-0.3126 0.320657,-0.3619 0.956139,-1.0921 2.2187499,-2.5312 2.5252219,-2.8781 7.5454589,-8.6169 17.5937499,-20.1250005 l -1.5,-1.3125 z m -20.5624998,3.9063 c -1.304375,0 -2.34375,1.0391 -2.34375,2.3437 l 0,10.8125005 c 0,1.3043 1.039375,2.375 2.34375,2.375 l 2.25,0 c 1.9518039,-2.2246 7.4710958,-8.5584 13.5624998,-15.5312005 l -15.8124998,0 z m 21.1249998,0 c -1.855467,2.1245 -2.114296,2.4005 -3.59375,4.0936995 1.767282,0.1815 3.15625,1.685301 3.15625,3.500001 0,1.9349 -1.56511,3.5 -3.5,3.5 -1.658043,0 -3.043426,-1.1411 -3.40625,-2.6875 -1.089617,1.2461 -2.647139,2.9988 -3.46875,3.9375 0.191501,-0.062 0.388502,-0.094 0.59375,-0.094 1.373338,0 2.50006,1.4614 2.5625,3.2812 l 8.3125,0 c 1.304375,0 2.34375,-1.0707 2.34375,-2.375 l 0,-10.8125005 c 0,-1.3046 -1.039375,-2.3437 -2.34375,-2.3437 l -0.65625,0 z M 9.5518351,10.423906 c 1.9348899,0 3.4999999,1.596401 3.4999999,3.531301 0,1.9349 -1.56511,3.5 -3.4999999,3.5 -1.9348899,0 -3.4999999,-1.5651 -3.4999999,-3.5 0,-1.9349 1.56511,-3.531301 3.4999999,-3.531301 z m 4.2187499,10.312601 c -0.206517,0.2356 -0.844218,0.9428 -1.03125,1.1562 l 0.8125,0 c 0.01392,-0.4081 0.107026,-0.7968 0.21875,-1.1562 z";function MB(e,t,n){e=Xn(e);let i=new zM(t,n);i._exitVRPath=uVt,i._enterVRPath=dVt;let o=document.createElement("button");o.type="button",o.className="cesium-button cesium-vrButton",o.setAttribute("data-bind",'css: { "cesium-button-disabled" : _isOrthographic }, attr: { title: tooltip },click: command,enable: isVREnabled,cesiumSvgPath: { path: isVRMode ? _exitVRPath : _enterVRPath, width: 32, height: 32 }'),e.appendChild(o),Se.applyBindings(i,o),this._container=e,this._viewModel=i,this._element=o}Object.defineProperties(MB.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});MB.prototype.isDestroyed=function(){return!1};MB.prototype.destroy=function(){return this._viewModel.destroy(),Se.cleanNode(this._element),this._container.removeChild(this._element),me(this)};var HM=MB;var WGo=_(T(),1);var JCe=new le;function qCe(e){let t=e.clock;t.currentTime=e.timeJulian,t.shouldAnimate=!1}function mVt(e){let t=e.getPropertyIds(),n="";return t.forEach(function(i){let o=e.getProperty(i);l(o)&&(n+=`<tr><th>${i}</th><td>${o}</td></tr>`)}),n.length>0&&(n=`<table class="cesium-infoBox-defaultTable"><tbody>${n}</tbody></table>`),n}function hVt(e){let t,n=[],i=e.getPropertyIds();for(t=0;t<i.length;t++){let r=i[t];/^name$/i.test(r)?n[0]=e.getProperty(r):/name/i.test(r)?n[1]=e.getProperty(r):/^title$/i.test(r)?n[2]=e.getProperty(r):/^(id|identifier)$/i.test(r)?n[3]=e.getProperty(r):/element/i.test(r)?n[4]=e.getProperty(r):/(id|identifier)$/i.test(r)&&(n[5]=e.getProperty(r))}let o=n.length;for(t=0;t<o;t++){let r=n[t];if(l(r)&&r!=="")return r}return"Unnamed Feature"}function QCe(e,t){let n=e.scene.pick(t.position);if(l(n)){let i=n.id??n.primitive.id;if(i instanceof jo)return i;if(n instanceof Bs)return new jo({name:hVt(n),description:mVt(n),feature:n})}if(l(e.scene.globe))return bVt(e,t.position)}var fVt=new q;function aq(e,t){if(l(t)){let n=t.clock;if(l(n)&&l(e)){let i=n.startTime,o=n.stopTime;q.equals(i,o)&&(o=q.addSeconds(i,X.EPSILON2,fVt)),e.updateFromClock(),e.zoomTo(i,o)}}}var pVt=new m;function bVt(e,t){let n=e.scene,i=n.camera.getPickRay(t),o=n.imageryLayers.pickImageryLayerFeatures(i,n);if(!l(o))return;let r=new jo({id:"Loading...",description:"Loading feature information..."});return o.then(function(s){if(e.selectedEntity!==r)return;if(!l(s)||s.length===0){e.selectedEntity=jCe();return}let a=s[0],c=new jo({id:a.name,description:a.description});if(l(a.position)){let d=e.scene.ellipsoid.cartographicToCartesian(a.position,pVt);c.position=new Oc(d)}e.selectedEntity=c},function(){e.selectedEntity===r&&(e.selectedEntity=jCe())}),r}function jCe(){return new jo({id:"None",description:"No features found."})}function gVt(e,t){let n=e._geocoder,i=e._homeButton,o=e._sceneModePicker,r=e._projectionPicker,s=e._baseLayerPicker,a=e._animation,c=e._timeline,d=e._fullscreenButton,u=e._infoBox,h=e._selectionIndicator,p=t?"hidden":"visible";if(l(n)&&(n.container.style.visibility=p),l(i)&&(i.container.style.visibility=p),l(o)&&(o.container.style.visibility=p),l(r)&&(r.container.style.visibility=p),l(s)&&(s.container.style.visibility=p),l(a)&&(a.container.style.visibility=p),l(c)&&(c.container.style.visibility=p),l(d)&&d.viewModel.isFullscreenEnabled&&(d.container.style.visibility=p),l(u)&&(u.container.style.visibility=p),l(h)&&(h.container.style.visibility=p),e._container){let g=t||!l(d)?0:d.container.clientWidth;e._vrButton.container.style.right=`${g}px`,e.forceResize()}}function qi(e,t){e=Xn(e),t=t??Y.EMPTY_OBJECT;let n=(!l(t.globe)||t.globe!==!1)&&(!l(t.baseLayerPicker)||t.baseLayerPicker!==!1),i=this,o=document.createElement("div");o.className="cesium-viewer",e.appendChild(o);let r=document.createElement("div");r.className="cesium-viewer-cesiumWidgetContainer",o.appendChild(r);let s=document.createElement("div");s.className="cesium-viewer-bottom",o.appendChild(s);let a=t.scene3DOnly??!1,c,d,u=!1;l(t.clockViewModel)?(d=t.clockViewModel,c=d.clock):(c=new xh,d=new sM(c),u=!0);let h=new bA(r,{baseLayer:n&&l(t.selectedImageryProviderViewModel)||l(t.baseLayer)||l(t.imageryProvider)?!1:void 0,clock:c,shouldAnimate:t.shouldAnimate,skyBox:t.skyBox,skyAtmosphere:t.skyAtmosphere,sceneMode:t.sceneMode,ellipsoid:t.ellipsoid,mapProjection:t.mapProjection,globe:t.globe,orderIndependentTranslucency:t.orderIndependentTranslucency,automaticallyTrackDataSourceClocks:t.automaticallyTrackDataSourceClocks,contextOptions:t.contextOptions,useDefaultRenderLoop:t.useDefaultRenderLoop,targetFrameRate:t.targetFrameRate,showRenderLoopErrors:t.showRenderLoopErrors,useBrowserRecommendedResolution:t.useBrowserRecommendedResolution,creditContainer:l(t.creditContainer)?t.creditContainer:s,creditViewport:t.creditViewport,dataSources:t.dataSources,scene3DOnly:a,shadows:t.shadows,terrainShadows:t.terrainShadows,mapMode2D:t.mapMode2D,blurActiveElementOnCanvasFocus:t.blurActiveElementOnCanvasFocus,requestRenderMode:t.requestRenderMode,maximumRenderTimeChange:t.maximumRenderTimeChange,depthPlaneEllipsoidOffset:t.depthPlaneEllipsoidOffset,msaaSamples:t.msaaSamples}),p=h.scene,g=new dr;g.add(c.onTick,qi.prototype._onTick,this);let f;if(!l(t.selectionIndicator)||t.selectionIndicator!==!1){let z=document.createElement("div");z.className="cesium-viewer-selectionIndicatorContainer",o.appendChild(z),f=new kM(z,p)}let y;if(!l(t.infoBox)||t.infoBox!==!1){let z=document.createElement("div");z.className="cesium-viewer-infoBoxContainer",o.appendChild(z),y=new PM(z);let K=y.viewModel;g.add(K.cameraClicked,qi.prototype._onInfoBoxCameraClicked,this),g.add(K.closeClicked,qi.prototype._onInfoBoxClockClicked,this)}let x=document.createElement("div");x.className="cesium-viewer-toolbar",o.appendChild(x);let S;if(!l(t.geocoder)||t.geocoder!==!1){let z=document.createElement("div");z.className="cesium-viewer-geocoderContainer",x.appendChild(z);let K;typeof t.geocoder=="string"?K=[new SS({scene:p,geocodeProviderType:t.geocoder})]:l(t.geocoder)&&typeof t.geocoder!="boolean"&&(K=Array.isArray(t.geocoder)?t.geocoder:[t.geocoder]),S=new RM({container:z,geocoderServices:K,scene:p}),g.add(S.viewModel.search.beforeExecute,qi.prototype._clearObjects,this)}let C;(!l(t.homeButton)||t.homeButton!==!1)&&(C=new GM(x,p),l(S)&&g.add(C.viewModel.command.afterExecute,function(){let z=S.viewModel;z.searchText="",z.isSearchInProgress&&z.search()}),g.add(C.viewModel.command.beforeExecute,qi.prototype._clearTrackedObject,this));let V;!a&&(!l(t.sceneModePicker)||t.sceneModePicker!==!1)&&(V=new AM(x,p));let L;t.projectionPicker&&(L=new DM(x,p));let Z,E;if(n){let z=t.imageryProviderViewModels??yM(),K=t.terrainProviderViewModels??xM();Z=new gM(x,{globe:p.globe,imageryProviderViewModels:z,selectedImageryProviderViewModel:t.selectedImageryProviderViewModel,terrainProviderViewModels:K,selectedTerrainProviderViewModel:t.selectedTerrainProviderViewModel}),E=x.getElementsByClassName("cesium-baseLayerPicker-dropDown")[0]}l(t.baseLayer)&&t.baseLayer!==!1&&(n&&(Z.viewModel.selectedImagery=void 0),p.imageryLayers.removeAll(),p.imageryLayers.add(t.baseLayer)),l(t.terrainProvider)&&(n&&(Z.viewModel.selectedTerrain=void 0),p.terrainProvider=t.terrainProvider),l(t.terrain)&&(n&&(p.globe.depthTestAgainstTerrain=!0),p.setTerrain(t.terrain));let P;if(!l(t.navigationHelpButton)||t.navigationHelpButton!==!1){let z=!0;try{if(l(window.localStorage)){let K=window.localStorage.getItem("cesium-hasSeenNavHelp");l(K)&&K?z=!1:window.localStorage.setItem("cesium-hasSeenNavHelp","true")}}catch{}P=new XM({container:x,instructionsInitiallyVisible:t.navigationInstructionsInitiallyVisible??z})}let W;if(!l(t.animation)||t.animation!==!1){let z=document.createElement("div");z.className="cesium-viewer-animationContainer",o.appendChild(z),W=new dM(z,new uM(d))}let v;if(!l(t.timeline)||t.timeline!==!1){let z=document.createElement("div");z.className="cesium-viewer-timelineContainer",o.appendChild(z),v=new YM(z,c),v.addEventListener("settime",qCe,!1),v.zoomTo(c.startTime,c.stopTime)}let A,b,R;(!l(t.fullscreenButton)||t.fullscreenButton!==!1)&&(R=document.createElement("div"),R.className="cesium-viewer-fullscreenContainer",o.appendChild(R),A=new VM(R,t.fullscreenElement),b=Ra(A.viewModel,"isFullscreenEnabled",function(z){R.style.display=z?"block":"none",l(v)&&(v.container.style.right=`${R.clientWidth}px`,v.resize())}));let G,I,w;if(t.vrButton){let z=document.createElement("div");z.className="cesium-viewer-vrContainer",o.appendChild(z),G=new HM(z,p,t.fullScreenElement),I=Ra(G.viewModel,"isVREnabled",function(K){z.style.display=K?"block":"none",l(A)&&(z.style.right=`${R.clientWidth}px`),l(v)&&(v.container.style.right=`${z.clientWidth}px`,v.resize())}),w=Ra(G.viewModel,"isVRMode",function(K){gVt(i,K)})}this._baseLayerPickerDropDown=E,this._fullscreenSubscription=b,this._vrSubscription=I,this._vrModeSubscription=w,this._dataSourceChangedListeners={},this._container=e,this._bottomContainer=s,this._element=o,this._cesiumWidget=h,this._selectionIndicator=f,this._infoBox=y,this._clockViewModel=d,this._destroyClockViewModel=u,this._toolbar=x,this._homeButton=C,this._sceneModePicker=V,this._projectionPicker=L,this._baseLayerPicker=Z,this._navigationHelpButton=P,this._animation=W,this._timeline=v,this._fullscreenButton=A,this._vrButton=G,this._geocoder=S,this._eventHelper=g,this._lastWidth=0,this._lastHeight=0,this._enableInfoOrSelection=l(y)||l(f),this._selectedEntity=void 0,this._selectedEntityChanged=new be;let M=this._cesiumWidget.dataSources,B=this._cesiumWidget.dataSourceDisplay;g.add(M.dataSourceAdded,qi.prototype._onDataSourceAdded,this),g.add(M.dataSourceRemoved,qi.prototype._onDataSourceRemoved,this),g.add(p.postUpdate,qi.prototype.resize,this);let k=M.length;for(let z=0;z<k;z++)this._dataSourceAdded(M,M.get(z));this._dataSourceAdded(void 0,B.defaultDataSource),g.add(M.dataSourceAdded,qi.prototype._dataSourceAdded,this),g.add(M.dataSourceRemoved,qi.prototype._dataSourceRemoved,this);function O(z){let K=QCe(i,z);l(K)?J.getValueOrUndefined(K.position,i.clock.currentTime)?i.trackedEntity=K:i.zoomTo(K):l(i.trackedEntity)&&(i.trackedEntity=void 0)}function N(z){i.selectedEntity=QCe(i,z)}h.screenSpaceEventHandler.setInputAction(N,Sn.LEFT_CLICK),h.screenSpaceEventHandler.setInputAction(O,Sn.LEFT_DOUBLE_CLICK),h._canAnimateUpdateCallback=this._updateCanAnimate(this)}Object.defineProperties(qi.prototype,{container:{get:function(){return this._container}},creditDisplay:{get:function(){return this._cesiumWidget.creditDisplay}},bottomContainer:{get:function(){return this._bottomContainer}},cesiumWidget:{get:function(){return this._cesiumWidget}},selectionIndicator:{get:function(){return this._selectionIndicator}},infoBox:{get:function(){return this._infoBox}},geocoder:{get:function(){return this._geocoder}},homeButton:{get:function(){return this._homeButton}},sceneModePicker:{get:function(){return this._sceneModePicker}},projectionPicker:{get:function(){return this._projectionPicker}},baseLayerPicker:{get:function(){return this._baseLayerPicker}},navigationHelpButton:{get:function(){return this._navigationHelpButton}},animation:{get:function(){return this._animation}},timeline:{get:function(){return this._timeline}},fullscreenButton:{get:function(){return this._fullscreenButton}},vrButton:{get:function(){return this._vrButton}},dataSourceDisplay:{get:function(){return this._cesiumWidget.dataSourceDisplay}},entities:{get:function(){return this._cesiumWidget.entities}},dataSources:{get:function(){return this._cesiumWidget.dataSources}},canvas:{get:function(){return this._cesiumWidget.canvas}},scene:{get:function(){return this._cesiumWidget.scene}},shadows:{get:function(){return this.scene.shadowMap.enabled},set:function(e){this.scene.shadowMap.enabled=e}},terrainShadows:{get:function(){return this.scene.globe.shadows},set:function(e){this.scene.globe.shadows=e}},shadowMap:{get:function(){return this.scene.shadowMap}},imageryLayers:{get:function(){return this.scene.imageryLayers}},terrainProvider:{get:function(){return this.scene.terrainProvider},set:function(e){this.scene.terrainProvider=e}},camera:{get:function(){return this.scene.camera}},ellipsoid:{get:function(){return this._scene.ellipsoid}},postProcessStages:{get:function(){return this.scene.postProcessStages}},clock:{get:function(){return this._clockViewModel.clock}},clockViewModel:{get:function(){return this._clockViewModel}},screenSpaceEventHandler:{get:function(){return this._cesiumWidget.screenSpaceEventHandler}},targetFrameRate:{get:function(){return this._cesiumWidget.targetFrameRate},set:function(e){this._cesiumWidget.targetFrameRate=e}},useDefaultRenderLoop:{get:function(){return this._cesiumWidget.useDefaultRenderLoop},set:function(e){this._cesiumWidget.useDefaultRenderLoop=e}},resolutionScale:{get:function(){return this._cesiumWidget.resolutionScale},set:function(e){this._cesiumWidget.resolutionScale=e}},useBrowserRecommendedResolution:{get:function(){return this._cesiumWidget.useBrowserRecommendedResolution},set:function(e){this._cesiumWidget.useBrowserRecommendedResolution=e}},allowDataSourcesToSuspendAnimation:{get:function(){return this._cesiumWidget.allowDataSourcesToSuspendAnimation},set:function(e){this._cesiumWidget.allowDataSourcesToSuspendAnimation=e}},trackedEntity:{get:function(){return this._cesiumWidget.trackedEntity},set:function(e){this._cesiumWidget.trackedEntity=e}},selectedEntity:{get:function(){return this._selectedEntity},set:function(e){if(this._selectedEntity!==e){this._selectedEntity=e;let t=l(this._selectionIndicator)?this._selectionIndicator.viewModel:void 0;l(e)?l(t)&&t.animateAppear():l(t)&&t.animateDepart(),this._selectedEntityChanged.raiseEvent(e)}}},selectedEntityChanged:{get:function(){return this._selectedEntityChanged}},trackedEntityChanged:{get:function(){return this._cesiumWidget.trackedEntityChanged}},clockTrackedDataSource:{get:function(){return this._cesiumWidget.clockTrackedDataSource},set:function(e){this._cesiumWidget.clockTrackedDataSource!==e&&(this._cesiumWidget.clockTrackedDataSource=e,aq(this._timeline,e))}}});qi.prototype.extend=function(e,t){e(this,t)};qi.prototype.resize=function(){let e=this._cesiumWidget,t=this._container,n=t.clientWidth,i=t.clientHeight,o=l(this._animation),r=l(this._timeline);if(e.resize(),n===this._lastWidth&&i===this._lastHeight)return;let s=i-125,a=this._baseLayerPickerDropDown;if(l(a)&&(a.style.maxHeight=`${s}px`),l(this._geocoder)){let f=this._geocoder.searchSuggestionsContainer;f.style.maxHeight=`${s}px`}l(this._infoBox)&&(this._infoBox.viewModel.maxHeight=s);let c=this._timeline,d,u=0,h=5,p=3,g=0;if(o&&window.getComputedStyle(this._animation.container).visibility!=="hidden"){let f=this._lastWidth;d=this._animation.container,n>900?(u=169,f<=900&&(d.style.width="169px",d.style.height="112px",this._animation.resize())):n>=600?(u=136,(f<600||f>900)&&(d.style.width="136px",d.style.height="90px",this._animation.resize())):(u=106,(f>600||f===0)&&(d.style.width="106px",d.style.height="70px",this._animation.resize())),h=u+5}if(r&&window.getComputedStyle(this._timeline.container).visibility!=="hidden"){let f=this._fullscreenButton,y=this._vrButton,x=c.container,S=x.style;p=x.clientHeight+3,S.left=`${u}px`;let C=0;l(f)&&(C+=f.container.clientWidth),l(y)&&(C+=y.container.clientWidth),S.right=`${C}px`,c.resize()}!r&&l(this._fullscreenButton)&&(g=this._fullscreenButton.container.clientWidth),this._bottomContainer.style.left=`${h}px`,this._bottomContainer.style.bottom=`${p}px`,this._bottomContainer.style.right=`${g}px`,this._lastWidth=n,this._lastHeight=i};qi.prototype.forceResize=function(){this._lastWidth=0,this.resize()};qi.prototype.render=function(){this._cesiumWidget.render()};qi.prototype.isDestroyed=function(){return!1};qi.prototype.destroy=function(){return l(this.screenSpaceEventHandler)&&!this.screenSpaceEventHandler.isDestroyed()&&(this.screenSpaceEventHandler.removeInputAction(Sn.LEFT_CLICK),this.screenSpaceEventHandler.removeInputAction(Sn.LEFT_DOUBLE_CLICK)),this._container.removeChild(this._element),this._element.removeChild(this._toolbar),this._eventHelper.removeAll(),l(this._geocoder)&&(this._geocoder=this._geocoder.destroy()),l(this._homeButton)&&(this._homeButton=this._homeButton.destroy()),l(this._sceneModePicker)&&(this._sceneModePicker=this._sceneModePicker.destroy()),l(this._projectionPicker)&&(this._projectionPicker=this._projectionPicker.destroy()),l(this._baseLayerPicker)&&(this._baseLayerPicker=this._baseLayerPicker.destroy()),l(this._animation)&&(this._element.removeChild(this._animation.container),this._animation=this._animation.destroy()),l(this._timeline)&&(this._timeline.removeEventListener("settime",qCe,!1),this._element.removeChild(this._timeline.container),this._timeline=this._timeline.destroy()),l(this._fullscreenButton)&&(this._fullscreenSubscription.dispose(),this._element.removeChild(this._fullscreenButton.container),this._fullscreenButton=this._fullscreenButton.destroy()),l(this._vrButton)&&(this._vrSubscription.dispose(),this._vrModeSubscription.dispose(),this._element.removeChild(this._vrButton.container),this._vrButton=this._vrButton.destroy()),l(this._infoBox)&&(this._element.removeChild(this._infoBox.container),this._infoBox=this._infoBox.destroy()),l(this._selectionIndicator)&&(this._element.removeChild(this._selectionIndicator.container),this._selectionIndicator=this._selectionIndicator.destroy()),this._destroyClockViewModel&&(this._clockViewModel=this._clockViewModel.destroy()),this._cesiumWidget=this._cesiumWidget.destroy(),me(this)};qi.prototype._dataSourceAdded=function(e,t){t.entities.collectionChanged.addEventListener(qi.prototype._onEntityCollectionChanged,this)};qi.prototype._dataSourceRemoved=function(e,t){let n=t.entities;n.collectionChanged.removeEventListener(qi.prototype._onEntityCollectionChanged,this),l(this.selectedEntity)&&n.getById(this.selectedEntity.id)===this.selectedEntity&&(this.selectedEntity=void 0)};qi.prototype._updateCanAnimate=function(e){return function(t){e._clockViewModel.canAnimate=t}};qi.prototype._onTick=function(e){let t=e.currentTime,n,i=!1,o=this.selectedEntity,r=l(o)&&this._enableInfoOrSelection;r&&o.isShowing&&o.isAvailable(t)&&(this._cesiumWidget.dataSourceDisplay.getBoundingSphere(o,!0,JCe)!==dt.FAILED?n=JCe.center:l(o.position)&&(n=o.position.getValue(t,n)),i=l(n));let s=l(this._selectionIndicator)?this._selectionIndicator.viewModel:void 0;l(s)&&(s.position=m.clone(n,s.position),s.showSelection=r&&i,s.update());let a=l(this._infoBox)?this._infoBox.viewModel:void 0;l(a)&&(a.showInfo=r,a.enableCamera=i,a.isCameraTracking=this.trackedEntity===this.selectedEntity,r?(a.titleText=o.name??o.id,a.description=J.getValueOrDefault(o.description,t,"")):(a.titleText="",a.description=""))};qi.prototype._onEntityCollectionChanged=function(e,t,n){let i=n.length;for(let o=0;o<i;o++){let r=n[o];this.selectedEntity===r&&(this.selectedEntity=void 0)}};qi.prototype._onInfoBoxCameraClicked=function(e){if(e.isCameraTracking&&this.trackedEntity===this.selectedEntity)this.trackedEntity=void 0;else{let n=this.selectedEntity.position;l(n)?this.trackedEntity=this.selectedEntity:this.zoomTo(this.selectedEntity)}};qi.prototype._clearTrackedObject=function(){this.trackedEntity=void 0};qi.prototype._onInfoBoxClockClicked=function(e){this.selectedEntity=void 0};qi.prototype._clearObjects=function(){this.trackedEntity=void 0,this.selectedEntity=void 0};qi.prototype._onDataSourceChanged=function(e){this.clockTrackedDataSource===e&&aq(this.timeline,e)};qi.prototype._onDataSourceAdded=function(e,t){this._cesiumWidget._automaticallyTrackDataSourceClocks&&t===this.clockTrackedDataSource&&aq(this._timeline,t);let n=t.entities.id,i=this._eventHelper.add(t.changedEvent,qi.prototype._onDataSourceChanged,this);this._dataSourceChangedListeners[n]=i};qi.prototype._onDataSourceRemoved=function(e,t){let n=t.entities.id;this._dataSourceChangedListeners[n](),this._dataSourceChangedListeners[n]=void 0};qi.prototype.zoomTo=function(e,t){return this._cesiumWidget.zoomTo(e,t)};qi.prototype.flyTo=function(e,t){return this._cesiumWidget.flyTo(e,t)};var cq=qi;var wGo=_(T(),1);function yVt(e){let t=document.createElement("div");t.className="cesium-viewer-cesium3DTilesInspectorContainer",e.container.appendChild(t);let n=new pM(t,e.scene);Object.defineProperties(e,{cesium3DTilesInspector:{get:function(){return n}}})}var lq=yVt;var MGo=_(T(),1);function xVt(e){let t=document.createElement("div");t.className="cesium-viewer-cesiumInspectorContainer",e.container.appendChild(t);let n=new SM(t,e.scene);Object.defineProperties(e,{cesiumInspector:{get:function(){return n}}})}var dq=xVt;var DGo=_(T(),1);function _Vt(e,t){t=t??Y.EMPTY_OBJECT;let n=!0,i=t.flyToOnDrop??!0,o=new be,r=t.clearOnDrop??!0,s=t.dropTarget??e.container,a=t.clampToGround??!0,c=t.proxy;s=Xn(s),Object.defineProperties(e,{dropTarget:{get:function(){return s},set:function(u){$Ce(s,d),s=u,uq(s,d)}},dropEnabled:{get:function(){return n},set:function(u){u!==n&&(u?uq(s,d):$Ce(s,d),n=u)}},dropError:{get:function(){return o}},clearOnDrop:{get:function(){return r},set:function(u){r=u}},flyToOnDrop:{get:function(){return i},set:function(u){i=u}},proxy:{get:function(){return c},set:function(u){c=u}},clampToGround:{get:function(){return a},set:function(u){a=u}}});function d(u){FS(u),r&&(e.entities.removeAll(),e.dataSources.removeAll());let h=u.dataTransfer.files,p=h.length;for(let g=0;g<p;g++){let f=h[g],y=new FileReader;y.onload=TVt(e,f,c,a),y.onerror=SVt(e,f),y.readAsText(f)}}uq(s,d),e.destroy=IA(e,e.destroy,function(){e.dropEnabled=!1}),e._handleDrop=d}function FS(e){e.stopPropagation(),e.preventDefault()}function $Ce(e,t){let n=e;l(n)&&(n.removeEventListener("drop",t,!1),n.removeEventListener("dragenter",FS,!1),n.removeEventListener("dragover",FS,!1),n.removeEventListener("dragexit",FS,!1))}function uq(e,t){e.addEventListener("drop",t,!1),e.addEventListener("dragenter",FS,!1),e.addEventListener("dragover",FS,!1),e.addEventListener("dragexit",FS,!1)}function TVt(e,t,n,i){let o=e.scene;return function(r){let s=t.name;try{let a;if(/\.czml$/i.test(s))a=tv.load(JSON.parse(r.target.result),{sourceUri:s});else if(/\.geojson$/i.test(s)||/\.json$/i.test(s)||/\.topojson$/i.test(s))a=cy.load(JSON.parse(r.target.result),{sourceUri:s,clampToGround:i});else if(/\.(kml|kmz)$/i.test(s))a=GT.load(t,{sourceUri:s,proxy:n,camera:o.camera,canvas:o.canvas,clampToGround:i,screenOverlayContainer:e.container});else if(/\.gpx$/i.test(s))a=Kv.load(t,{sourceUri:s,proxy:n});else{e.dropError.raiseEvent(e,s,`Unrecognized file: ${s}`);return}l(a)&&e.dataSources.add(a).then(function(c){e.flyToOnDrop&&e.flyTo(c)}).catch(function(c){e.dropError.raiseEvent(e,s,c)})}catch(a){e.dropError.raiseEvent(e,s,a)}}}function SVt(e,t){return function(n){e.dropError.raiseEvent(e,t.name,n.target.error)}}var mq=_Vt;var KGo=_(T(),1);function CVt(e,t){t=t??Y.EMPTY_OBJECT;let n=new wM({scene:e.scene,container:e.bottomContainer,lowFrameRateMessage:t.lowFrameRateMessage});Object.defineProperties(e,{performanceWatchdog:{get:function(){return n}}})}var hq=CVt;var lEo=_(T(),1);var sEo=_(T(),1);var $Go=_(T(),1);function e1e(e){let t=e.split(` `),n;for(n=0;n<t.length&&!t[n].match(/\S/);n++);if(n===t.length)return"";let i="",o=/^\s*/,s=t[n].match(o)[0].length;for(let a=n;a<t.length;a++){let c=t[a];c.match(o)[0].length>=s&&(c=c.slice(s)),i+=`${c} `}return i}function Lm(e){this._scene=e,this._voxelPrimitive=void 0,this._customShaderCompilationRemoveCallback=void 0,this._definedProperties=[],this._getPrimitiveFunctions=[],this._modelMatrixReady=!1;let t=this;function n(o){let{name:r,initialValue:s}=o;t._definedProperties.push(r);let a=o.setPrimitiveFunction;a===!0&&(a=function(u){t._voxelPrimitive[r]=u});let c=o.getPrimitiveFunction;c===!0&&(c=function(){t[r]=t._voxelPrimitive[r]}),l(c)&&t._getPrimitiveFunctions.push(c);let d=Se.observable();return Se.defineProperty(t,r,{get:function(){return d()},set:function(u){typeof s=="number"&&typeof u=="string"&&(u=Number(u),isNaN(u)&&(u=s)),typeof s=="boolean"&&typeof u=="number"&&(u=u===1),d(u),l(a)&&l(t._voxelPrimitive)&&(a(u),e.requestRender())}}),t[r]=s,d}function i(o,r){return function(s){let a=t._voxelPrimitive[o].clone();a[r]=s,t._voxelPrimitive[o]=a}}n({name:"inspectorVisible",initialValue:!0}),n({name:"displayVisible",initialValue:!1}),n({name:"transformVisible",initialValue:!1}),n({name:"boundsVisible",initialValue:!1}),n({name:"clippingVisible",initialValue:!1}),n({name:"shaderVisible",initialValue:!1}),n({name:"shaderString",initialValue:"",getPrimitiveFunction:function(){let o=t._voxelPrimitive.customShader.fragmentShaderText;t.shaderString=e1e(o)}}),n({name:"shaderCompilationMessage",initialValue:""}),n({name:"shaderCompilationSuccess",initialValue:!0}),n({name:"depthTest",initialValue:!1,setPrimitiveFunction:!0,getPrimitiveFunction:!0}),n({name:"show",initialValue:!0,setPrimitiveFunction:!0,getPrimitiveFunction:!0}),n({name:"disableUpdate",initialValue:!1,setPrimitiveFunction:!0,getPrimitiveFunction:!0}),n({name:"debugDraw",initialValue:!1,setPrimitiveFunction:!0,getPrimitiveFunction:!0}),n({name:"jitter",initialValue:!0,setPrimitiveFunction:!0,getPrimitiveFunction:!0}),n({name:"nearestSampling",initialValue:!0,setPrimitiveFunction:!0,getPrimitiveFunction:!0}),n({name:"screenSpaceError",initialValue:4,setPrimitiveFunction:!0,getPrimitiveFunction:!0}),n({name:"stepSize",initialValue:1,setPrimitiveFunction:!0,getPrimitiveFunction:!0}),n({name:"shapeIsBox",getPrimitiveFunction:function(){let o=t._voxelPrimitive.shape;t.shapeIsBox=o===Mi.BOX}}),n({name:"shapeIsEllipsoid",getPrimitiveFunction:function(){let o=t._voxelPrimitive.shape;t.shapeIsEllipsoid=o===Mi.ELLIPSOID}}),n({name:"shapeIsCylinder",getPrimitiveFunction:function(){let o=t._voxelPrimitive.shape;t.shapeIsCylinder=o===Mi.CYLINDER}}),n({name:"boundsBoxMaxX",initialValue:0,setPrimitiveFunction:i("maxBounds","x"),getPrimitiveFunction:function(){t.boundsBoxMaxX=t._voxelPrimitive.maxBounds.x}}),n({name:"boundsBoxMinX",initialValue:0,setPrimitiveFunction:i("minBounds","x"),getPrimitiveFunction:function(){t.boundsBoxMinX=t._voxelPrimitive.minBounds.x}}),n({name:"boundsBoxMaxY",initialValue:0,setPrimitiveFunction:i("maxBounds","y"),getPrimitiveFunction:function(){t.boundsBoxMaxY=t._voxelPrimitive.maxBounds.y}}),n({name:"boundsBoxMinY",initialValue:0,setPrimitiveFunction:i("minBounds","y"),getPrimitiveFunction:function(){t.boundsBoxMinY=t._voxelPrimitive.minBounds.y}}),n({name:"boundsBoxMaxZ",initialValue:0,setPrimitiveFunction:i("maxBounds","z"),getPrimitiveFunction:function(){t.boundsBoxMaxZ=t._voxelPrimitive.maxBounds.z}}),n({name:"boundsBoxMinZ",initialValue:0,setPrimitiveFunction:i("minBounds","z"),getPrimitiveFunction:function(){t.boundsBoxMinZ=t._voxelPrimitive.minBounds.z}}),n({name:"boundsEllipsoidMaxLongitude",initialValue:0,setPrimitiveFunction:i("maxBounds","x"),getPrimitiveFunction:function(){t.boundsEllipsoidMaxLongitude=t._voxelPrimitive.maxBounds.x}}),n({name:"boundsEllipsoidMinLongitude",initialValue:0,setPrimitiveFunction:i("minBounds","x"),getPrimitiveFunction:function(){t.boundsEllipsoidMinLongitude=t._voxelPrimitive.minBounds.x}}),n({name:"boundsEllipsoidMaxLatitude",initialValue:0,setPrimitiveFunction:i("maxBounds","y"),getPrimitiveFunction:function(){t.boundsEllipsoidMaxLatitude=t._voxelPrimitive.maxBounds.y}}),n({name:"boundsEllipsoidMinLatitude",initialValue:0,setPrimitiveFunction:i("minBounds","y"),getPrimitiveFunction:function(){t.boundsEllipsoidMinLatitude=t._voxelPrimitive.minBounds.y}}),n({name:"boundsEllipsoidMaxHeight",initialValue:0,setPrimitiveFunction:i("maxBounds","z"),getPrimitiveFunction:function(){t.boundsEllipsoidMaxHeight=t._voxelPrimitive.maxBounds.z}}),n({name:"boundsEllipsoidMinHeight",initialValue:0,setPrimitiveFunction:i("minBounds","z"),getPrimitiveFunction:function(){t.boundsEllipsoidMinHeight=t._voxelPrimitive.minBounds.z}}),n({name:"boundsCylinderMaxRadius",initialValue:0,setPrimitiveFunction:i("maxBounds","x"),getPrimitiveFunction:function(){t.boundsCylinderMaxRadius=t._voxelPrimitive.maxBounds.x}}),n({name:"boundsCylinderMinRadius",initialValue:0,setPrimitiveFunction:i("minBounds","x"),getPrimitiveFunction:function(){t.boundsCylinderMinRadius=t._voxelPrimitive.minBounds.x}}),n({name:"boundsCylinderMaxAngle",initialValue:0,setPrimitiveFunction:i("maxBounds","y"),getPrimitiveFunction:function(){t.boundsCylinderMaxAngle=t._voxelPrimitive.maxBounds.y}}),n({name:"boundsCylinderMinAngle",initialValue:0,setPrimitiveFunction:i("minBounds","y"),getPrimitiveFunction:function(){t.boundsCylinderMinAngle=t._voxelPrimitive.minBounds.y}}),n({name:"boundsCylinderMaxHeight",initialValue:0,setPrimitiveFunction:i("maxBounds","z"),getPrimitiveFunction:function(){t.boundsCylinderMaxHeight=t._voxelPrimitive.maxBounds.z}}),n({name:"boundsCylinderMinHeight",initialValue:0,setPrimitiveFunction:i("minBounds","z"),getPrimitiveFunction:function(){t.boundsCylinderMinHeight=t._voxelPrimitive.minBounds.z}}),n({name:"clippingBoxMaxX",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","x"),getPrimitiveFunction:function(){t.clippingBoxMaxX=t._voxelPrimitive.maxClippingBounds.x}}),n({name:"clippingBoxMinX",initialValue:0,setPrimitiveFunction:i("minClippingBounds","x"),getPrimitiveFunction:function(){t.clippingBoxMinX=t._voxelPrimitive.minClippingBounds.x}}),n({name:"clippingBoxMaxY",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","y"),getPrimitiveFunction:function(){t.clippingBoxMaxY=t._voxelPrimitive.maxClippingBounds.y}}),n({name:"clippingBoxMinY",initialValue:0,setPrimitiveFunction:i("minClippingBounds","y"),getPrimitiveFunction:function(){t.clippingBoxMinY=t._voxelPrimitive.minClippingBounds.y}}),n({name:"clippingBoxMaxZ",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","z"),getPrimitiveFunction:function(){t.clippingBoxMaxZ=t._voxelPrimitive.maxClippingBounds.z}}),n({name:"clippingBoxMinZ",initialValue:0,setPrimitiveFunction:i("minClippingBounds","z"),getPrimitiveFunction:function(){t.clippingBoxMinZ=t._voxelPrimitive.minClippingBounds.z}}),n({name:"clippingEllipsoidMaxLongitude",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","x"),getPrimitiveFunction:function(){t.clippingEllipsoidMaxLongitude=t._voxelPrimitive.maxClippingBounds.x}}),n({name:"clippingEllipsoidMinLongitude",initialValue:0,setPrimitiveFunction:i("minClippingBounds","x"),getPrimitiveFunction:function(){t.clippingEllipsoidMinLongitude=t._voxelPrimitive.minClippingBounds.x}}),n({name:"clippingEllipsoidMaxLatitude",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","y"),getPrimitiveFunction:function(){t.clippingEllipsoidMaxLatitude=t._voxelPrimitive.maxClippingBounds.y}}),n({name:"clippingEllipsoidMinLatitude",initialValue:0,setPrimitiveFunction:i("minClippingBounds","y"),getPrimitiveFunction:function(){t.clippingEllipsoidMinLatitude=t._voxelPrimitive.minClippingBounds.y}}),n({name:"clippingEllipsoidMaxHeight",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","z"),getPrimitiveFunction:function(){t.clippingEllipsoidMaxHeight=t._voxelPrimitive.maxClippingBounds.z}}),n({name:"clippingEllipsoidMinHeight",initialValue:0,setPrimitiveFunction:i("minClippingBounds","z"),getPrimitiveFunction:function(){t.clippingEllipsoidMinHeight=t._voxelPrimitive.minClippingBounds.z}}),n({name:"clippingCylinderMaxRadius",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","x"),getPrimitiveFunction:function(){t.clippingCylinderMaxRadius=t._voxelPrimitive.maxClippingBounds.x}}),n({name:"clippingCylinderMinRadius",initialValue:0,setPrimitiveFunction:i("minClippingBounds","x"),getPrimitiveFunction:function(){t.clippingCylinderMinRadius=t._voxelPrimitive.minClippingBounds.x}}),n({name:"clippingCylinderMaxAngle",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","y"),getPrimitiveFunction:function(){t.clippingCylinderMaxAngle=t._voxelPrimitive.maxClippingBounds.y}}),n({name:"clippingCylinderMinAngle",initialValue:0,setPrimitiveFunction:i("minClippingBounds","y"),getPrimitiveFunction:function(){t.clippingCylinderMinAngle=t._voxelPrimitive.minClippingBounds.y}}),n({name:"clippingCylinderMaxHeight",initialValue:0,setPrimitiveFunction:i("maxClippingBounds","z"),getPrimitiveFunction:function(){t.clippingCylinderMaxHeight=t._voxelPrimitive.maxClippingBounds.z}}),n({name:"clippingCylinderMinHeight",initialValue:0,setPrimitiveFunction:i("minClippingBounds","z"),getPrimitiveFunction:function(){t.clippingCylinderMinHeight=t._voxelPrimitive.minClippingBounds.z}}),n({name:"translationX",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&bp(t)},getPrimitiveFunction:function(){t.translationX=F.getTranslation(t._voxelPrimitive.modelMatrix,new m).x}}),n({name:"translationY",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&bp(t)},getPrimitiveFunction:function(){t.translationY=F.getTranslation(t._voxelPrimitive.modelMatrix,new m).y}}),n({name:"translationZ",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&bp(t)},getPrimitiveFunction:function(){t.translationZ=F.getTranslation(t._voxelPrimitive.modelMatrix,new m).z}}),n({name:"scaleX",initialValue:1,setPrimitiveFunction:function(){t._modelMatrixReady&&bp(t)},getPrimitiveFunction:function(){t.scaleX=F.getScale(t._voxelPrimitive.modelMatrix,new m).x}}),n({name:"scaleY",initialValue:1,setPrimitiveFunction:function(){t._modelMatrixReady&&bp(t)},getPrimitiveFunction:function(){t.scaleY=F.getScale(t._voxelPrimitive.modelMatrix,new m).y}}),n({name:"scaleZ",initialValue:1,setPrimitiveFunction:function(){t._modelMatrixReady&&bp(t)},getPrimitiveFunction:function(){t.scaleZ=F.getScale(t._voxelPrimitive.modelMatrix,new m).z}}),n({name:"angleX",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&bp(t)}}),n({name:"angleY",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&bp(t)}}),n({name:"angleZ",initialValue:0,setPrimitiveFunction:function(){t._modelMatrixReady&&bp(t)}})}var VVt=new m,LVt=new m,RVt=new Ea,ZVt=new $;function bp(e){let t=m.fromElements(e.translationX,e.translationY,e.translationZ,VVt),n=m.fromElements(e.scaleX,e.scaleY,e.scaleZ,LVt),i=RVt;i.heading=e.angleX,i.pitch=e.angleY,i.roll=e.angleZ;let o=$.fromHeadingPitchRoll(i,ZVt),r=$.multiplyByScale(o,n,o);e._voxelPrimitive.modelMatrix=F.fromRotationTranslation(r,t,e._voxelPrimitive.modelMatrix)}Object.defineProperties(Lm.prototype,{scene:{get:function(){return this._scene}},voxelPrimitive:{get:function(){return this._voxelPrimitive},set:function(e){if(l(this._customShaderCompilationRemoveCallback)&&this._customShaderCompilationRemoveCallback(),l(e)){this._voxelPrimitive=e;let t=this;t._customShaderCompilationRemoveCallback=t._voxelPrimitive.customShaderCompilationEvent.addEventListener(function(n){let i=t._voxelPrimitive.customShader.fragmentShaderText;t.shaderString=e1e(i),l(n)?(t.shaderCompilationMessage=n.message,t.shaderCompilationSuccess=!1):(t.shaderCompilationMessage="Shader compiled successfully!",t.shaderCompilationSuccess=!0)}),t._modelMatrixReady=!1;for(let n=0;n<t._getPrimitiveFunctions.length;n++)t._getPrimitiveFunctions[n]();t._modelMatrixReady=!0,bp(t)}}}});Lm.prototype.toggleInspector=function(){this.inspectorVisible=!this.inspectorVisible};Lm.prototype.toggleDisplay=function(){this.displayVisible=!this.displayVisible};Lm.prototype.toggleTransform=function(){this.transformVisible=!this.transformVisible};Lm.prototype.toggleBounds=function(){this.boundsVisible=!this.boundsVisible};Lm.prototype.toggleClipping=function(){this.clippingVisible=!this.clippingVisible};Lm.prototype.toggleShader=function(){this.shaderVisible=!this.shaderVisible};Lm.prototype.compileShader=function(){l(this._voxelPrimitive)&&(this._voxelPrimitive.customShader=new aS({fragmentShaderText:this.shaderString,uniforms:this._voxelPrimitive.customShader.uniforms}))};Lm.prototype.shaderEditorKeyPress=function(e,t){if(t.keyCode===9){t.preventDefault();let n=t.target,i=n.selectionStart,o=n.selectionEnd,r=o,a=n.value.slice(i,o).split(` `),c=a.length,d;if(t.shiftKey)for(d=0;d<c;++d)a[d][0]===" "&&(a[d][1]===" "?(a[d]=a[d].substr(2),r-=2):(a[d]=a[d].substr(1),r-=1));else for(d=0;d<c;++d)a[d]=` ${a[d]}`,r+=2;let u=a.join(` `);n.value=n.value.slice(0,i)+u+n.value.slice(o),n.selectionStart=i!==o?i:r,n.selectionEnd=r}else t.ctrlKey&&(t.keyCode===10||t.keyCode===13)&&this.compileShader();return!0};Lm.prototype.isDestroyed=function(){return!1};Lm.prototype.destroy=function(){let e=this;return this._definedProperties.forEach(function(t){Se.getObservable(e,t).dispose()}),me(this)};var KM=Lm;function NB(e,t){e=Xn(e);let n=document.createElement("div"),i=new KM(t);this._viewModel=i,this._container=e,this._element=n;let o=document.createElement("div");o.textContent="Voxel Inspector",o.className="cesium-cesiumInspector-button",o.setAttribute("data-bind","click: toggleInspector"),n.appendChild(o),n.className="cesium-cesiumInspector cesium-VoxelInspector",n.setAttribute("data-bind",'css: { "cesium-cesiumInspector-visible" : inspectorVisible, "cesium-cesiumInspector-hidden" : !inspectorVisible}'),e.appendChild(n);let r=document.createElement("div");r.className="cesium-cesiumInspector-dropDown",n.appendChild(r);let s=Ja.createSection,a=Ja.createCheckbox,c=Ja.createRangeInput,d=Ja.createButton,u=s(r,"Display","displayVisible","toggleDisplay"),h=s(r,"Transform","transformVisible","toggleTransform"),p=s(r,"Bounds","boundsVisible","toggleBounds"),g=s(r,"Clipping","clippingVisible","toggleClipping"),f=s(r,"Shader","shaderVisible","toggleShader");u.appendChild(a("Depth Test","depthTest")),u.appendChild(a("Show","show")),u.appendChild(a("Disable Update","disableUpdate")),u.appendChild(a("Debug Draw","debugDraw")),u.appendChild(a("Jitter","jitter")),u.appendChild(a("Nearest Sampling","nearestSampling")),u.appendChild(c("Screen Space Error","screenSpaceError",0,128)),u.appendChild(c("Step Size","stepSize",0,2));let y=10,x=10,S=X.PI;h.appendChild(c("Translation X","translationX",-y,+y)),h.appendChild(c("Translation Y","translationY",-y,+y)),h.appendChild(c("Translation Z","translationZ",-y,+y)),h.appendChild(c("Scale X","scaleX",0,+x)),h.appendChild(c("Scale Y","scaleY",0,+x)),h.appendChild(c("Scale Z","scaleZ",0,+x)),h.appendChild(c("Heading","angleX",-S,+S)),h.appendChild(c("Pitch","angleY",-S,+S)),h.appendChild(c("Roll","angleZ",-S,+S));let C=Mi.getMinBounds(Mi.BOX),V=Mi.getMaxBounds(Mi.BOX),L=m.fromElements(Mi.getMinBounds(Mi.ELLIPSOID).x,Mi.getMinBounds(Mi.ELLIPSOID).y,-ne.WGS84.maximumRadius,new m),Z=m.fromElements(Mi.getMaxBounds(Mi.ELLIPSOID).x,Mi.getMaxBounds(Mi.ELLIPSOID).y,1e7,new m),E=Mi.getMinBounds(Mi.CYLINDER),P=Mi.getMaxBounds(Mi.CYLINDER);OL("Max X","Min X","Max Y","Min Y","Max Z","Min Z","boundsBoxMaxX","boundsBoxMinX","boundsBoxMaxY","boundsBoxMinY","boundsBoxMaxZ","boundsBoxMinZ",C,V,"shapeIsBox",p),OL("Max Longitude","Min Longitude","Max Latitude","Min Latitude","Max Height","Min Height","boundsEllipsoidMaxLongitude","boundsEllipsoidMinLongitude","boundsEllipsoidMaxLatitude","boundsEllipsoidMinLatitude","boundsEllipsoidMaxHeight","boundsEllipsoidMinHeight",L,Z,"shapeIsEllipsoid",p),OL("Max Radius","Min Radius","Max Angle","Min Angle","Max Height","Min Height","boundsCylinderMaxRadius","boundsCylinderMinRadius","boundsCylinderMaxAngle","boundsCylinderMinAngle","boundsCylinderMaxHeight","boundsCylinderMinHeight",E,P,"shapeIsCylinder",p),OL("Max X","Min X","Max Y","Min Y","Max Z","Min Z","clippingBoxMaxX","clippingBoxMinX","clippingBoxMaxY","clippingBoxMinY","clippingBoxMaxZ","clippingBoxMinZ",C,V,"shapeIsBox",g),OL("Max Longitude","Min Longitude","Max Latitude","Min Latitude","Max Height","Min Height","clippingEllipsoidMaxLongitude","clippingEllipsoidMinLongitude","clippingEllipsoidMaxLatitude","clippingEllipsoidMinLatitude","clippingEllipsoidMaxHeight","clippingEllipsoidMinHeight",L,Z,"shapeIsEllipsoid",g),OL("Max Radius","Min Radius","Max Angle","Min Angle","Max Height","Min Height","clippingCylinderMaxRadius","clippingCylinderMinRadius","clippingCylinderMaxAngle","clippingCylinderMinAngle","clippingCylinderMaxHeight","clippingCylinderMinHeight",E,P,"shapeIsCylinder",g);let W=document.createElement("div");f.appendChild(W);let v=document.createElement("textarea");v.setAttribute("data-bind","textInput: shaderString, event: { keydown: shaderEditorKeyPress }"),W.className="cesium-cesiumInspector-styleEditor",W.appendChild(v);let A=d("Compile (Ctrl+Enter)","compileShader");W.appendChild(A);let b=document.createElement("label");b.style.display="block",b.setAttribute("data-bind","text: shaderCompilationMessage, style: {color: shaderCompilationSuccess ? 'green' : 'red'}"),W.appendChild(b),Se.applyBindings(i,n)}Object.defineProperties(NB.prototype,{container:{get:function(){return this._container}},viewModel:{get:function(){return this._viewModel}}});NB.prototype.isDestroyed=function(){return!1};NB.prototype.destroy=function(){return Se.cleanNode(this._element),this._container.removeChild(this._element),this.viewModel.destroy(),me(this)};function OL(e,t,n,i,o,r,s,a,c,d,u,h,p,g,f,y){let x=Ja.createRangeInput,S=p,C=g,V=y.appendChild(document.createElement("div"));V.setAttribute("data-bind",`if: ${f}`),V.appendChild(x(e,s,S.x,C.x)),V.appendChild(x(t,a,S.x,C.x)),V.appendChild(x(n,c,S.y,C.y)),V.appendChild(x(i,d,S.y,C.y)),V.appendChild(x(o,u,S.z,C.z)),V.appendChild(x(r,h,S.z,C.z))}var JM=NB;function GVt(e){let t=document.createElement("div");t.className="cesium-viewer-voxelInspectorContainer",e.container.appendChild(t);let n=new JM(t,e.scene);Object.defineProperties(e,{voxelInspector:{get:function(){return n}}})}var fq=GVt;globalThis.CESIUM_VERSION="1.128";var EVt="1.128";return a1e(IVt);})(); |